1 /* Remote target communications for serial-line targets in custom GDB protocol
2 
3    Copyright (C) 1988-2021 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 "process-stratum-target.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 "gdbsupport/filestuff.h"
46 #include "gdbsupport/rsp-low.h"
47 #include "disasm.h"
48 #include "location.h"
49 
50 #include "gdbsupport/gdb_sys_time.h"
51 
52 #include "gdbsupport/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"
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 "gdbsupport/agent.h"
72 #include "btrace.h"
73 #include "record-btrace.h"
74 #include <algorithm>
75 #include "gdbsupport/scoped_restore.h"
76 #include "gdbsupport/environ.h"
77 #include "gdbsupport/byte-vector.h"
78 #include "gdbsupport/search.h"
79 #include <algorithm>
80 #include <unordered_map>
81 #include "async-event.h"
82 #include "gdbsupport/selftest.h"
83 
84 /* The remote target.  */
85 
86 static const char remote_doc[] = N_("\
87 Use a remote computer via a serial line, using a gdb-specific protocol.\n\
88 Specify the serial device it is connected to\n\
89 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
90 
91 /* See remote.h  */
92 
93 bool remote_debug = false;
94 
95 #define OPAQUETHREADBYTES 8
96 
97 /* a 64 bit opaque identifier */
98 typedef unsigned char threadref[OPAQUETHREADBYTES];
99 
100 struct gdb_ext_thread_info;
101 struct threads_listing_context;
102 typedef int (*rmt_thread_action) (threadref *ref, void *context);
103 struct protocol_feature;
104 struct packet_reg;
105 
106 struct stop_reply;
107 typedef std::unique_ptr<stop_reply> stop_reply_up;
108 
109 /* Generic configuration support for packets the stub optionally
110    supports.  Allows the user to specify the use of the packet as well
111    as allowing GDB to auto-detect support in the remote stub.  */
112 
113 enum packet_support
114   {
115     PACKET_SUPPORT_UNKNOWN = 0,
116     PACKET_ENABLE,
117     PACKET_DISABLE
118   };
119 
120 /* Analyze a packet's return value and update the packet config
121    accordingly.  */
122 
123 enum packet_result
124 {
125   PACKET_ERROR,
126   PACKET_OK,
127   PACKET_UNKNOWN
128 };
129 
130 struct threads_listing_context;
131 
132 /* Stub vCont actions support.
133 
134    Each field is a boolean flag indicating whether the stub reports
135    support for the corresponding action.  */
136 
137 struct vCont_action_support
138 {
139   /* vCont;t */
140   bool t = false;
141 
142   /* vCont;r */
143   bool r = false;
144 
145   /* vCont;s */
146   bool s = false;
147 
148   /* vCont;S */
149   bool S = false;
150 };
151 
152 /* About this many threadids fit in a packet.  */
153 
154 #define MAXTHREADLISTRESULTS 32
155 
156 /* Data for the vFile:pread readahead cache.  */
157 
158 struct readahead_cache
159 {
160   /* Invalidate the readahead cache.  */
161   void invalidate ();
162 
163   /* Invalidate the readahead cache if it is holding data for FD.  */
164   void invalidate_fd (int fd);
165 
166   /* Serve pread from the readahead cache.  Returns number of bytes
167      read, or 0 if the request can't be served from the cache.  */
168   int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
169 
170   /* The file descriptor for the file that is being cached.  -1 if the
171      cache is invalid.  */
172   int fd = -1;
173 
174   /* The offset into the file that the cache buffer corresponds
175      to.  */
176   ULONGEST offset = 0;
177 
178   /* The buffer holding the cache contents.  */
179   gdb_byte *buf = nullptr;
180   /* The buffer's size.  We try to read as much as fits into a packet
181      at a time.  */
182   size_t bufsize = 0;
183 
184   /* Cache hit and miss counters.  */
185   ULONGEST hit_count = 0;
186   ULONGEST miss_count = 0;
187 };
188 
189 /* Description of the remote protocol for a given architecture.  */
190 
191 struct packet_reg
192 {
193   long offset; /* Offset into G packet.  */
194   long regnum; /* GDB's internal register number.  */
195   LONGEST pnum; /* Remote protocol register number.  */
196   int in_g_packet; /* Always part of G packet.  */
197   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
198      at present.  */
199   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
200      at present.  */
201 };
202 
203 struct remote_arch_state
204 {
205   explicit remote_arch_state (struct gdbarch *gdbarch);
206 
207   /* Description of the remote protocol registers.  */
208   long sizeof_g_packet;
209 
210   /* Description of the remote protocol registers indexed by REGNUM
211      (making an array gdbarch_num_regs in size).  */
212   std::unique_ptr<packet_reg[]> regs;
213 
214   /* This is the size (in chars) of the first response to the ``g''
215      packet.  It is used as a heuristic when determining the maximum
216      size of memory-read and memory-write packets.  A target will
217      typically only reserve a buffer large enough to hold the ``g''
218      packet.  The size does not include packet overhead (headers and
219      trailers).  */
220   long actual_register_packet_size;
221 
222   /* This is the maximum size (in chars) of a non read/write packet.
223      It is also used as a cap on the size of read/write packets.  */
224   long remote_packet_size;
225 };
226 
227 /* Description of the remote protocol state for the currently
228    connected target.  This is per-target state, and independent of the
229    selected architecture.  */
230 
231 class remote_state
232 {
233 public:
234 
235   remote_state ();
236   ~remote_state ();
237 
238   /* Get the remote arch state for GDBARCH.  */
239   struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
240 
241 public: /* data */
242 
243   /* A buffer to use for incoming packets, and its current size.  The
244      buffer is grown dynamically for larger incoming packets.
245      Outgoing packets may also be constructed in this buffer.
246      The size of the buffer is always at least REMOTE_PACKET_SIZE;
247      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
248      packets.  */
249   gdb::char_vector buf;
250 
251   /* True if we're going through initial connection setup (finding out
252      about the remote side's threads, relocating symbols, etc.).  */
253   bool starting_up = false;
254 
255   /* If we negotiated packet size explicitly (and thus can bypass
256      heuristics for the largest packet size that will not overflow
257      a buffer in the stub), this will be set to that packet size.
258      Otherwise zero, meaning to use the guessed size.  */
259   long explicit_packet_size = 0;
260 
261   /* remote_wait is normally called when the target is running and
262      waits for a stop reply packet.  But sometimes we need to call it
263      when the target is already stopped.  We can send a "?" packet
264      and have remote_wait read the response.  Or, if we already have
265      the response, we can stash it in BUF and tell remote_wait to
266      skip calling getpkt.  This flag is set when BUF contains a
267      stop reply packet and the target is not waiting.  */
268   int cached_wait_status = 0;
269 
270   /* True, if in no ack mode.  That is, neither GDB nor the stub will
271      expect acks from each other.  The connection is assumed to be
272      reliable.  */
273   bool noack_mode = false;
274 
275   /* True if we're connected in extended remote mode.  */
276   bool extended = false;
277 
278   /* True if we resumed the target and we're waiting for the target to
279      stop.  In the mean time, we can't start another command/query.
280      The remote server wouldn't be ready to process it, so we'd
281      timeout waiting for a reply that would never come and eventually
282      we'd close the connection.  This can happen in asynchronous mode
283      because we allow GDB commands while the target is running.  */
284   bool waiting_for_stop_reply = false;
285 
286   /* The status of the stub support for the various vCont actions.  */
287   vCont_action_support supports_vCont;
288   /* Whether vCont support was probed already.  This is a workaround
289      until packet_support is per-connection.  */
290   bool supports_vCont_probed;
291 
292   /* True if the user has pressed Ctrl-C, but the target hasn't
293      responded to that.  */
294   bool ctrlc_pending_p = false;
295 
296   /* True if we saw a Ctrl-C while reading or writing from/to the
297      remote descriptor.  At that point it is not safe to send a remote
298      interrupt packet, so we instead remember we saw the Ctrl-C and
299      process it once we're done with sending/receiving the current
300      packet, which should be shortly.  If however that takes too long,
301      and the user presses Ctrl-C again, we offer to disconnect.  */
302   bool got_ctrlc_during_io = false;
303 
304   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
305      remote_open knows that we don't have a file open when the program
306      starts.  */
307   struct serial *remote_desc = nullptr;
308 
309   /* These are the threads which we last sent to the remote system.  The
310      TID member will be -1 for all or -2 for not sent yet.  */
311   ptid_t general_thread = null_ptid;
312   ptid_t continue_thread = null_ptid;
313 
314   /* This is the traceframe which we last selected on the remote system.
315      It will be -1 if no traceframe is selected.  */
316   int remote_traceframe_number = -1;
317 
318   char *last_pass_packet = nullptr;
319 
320   /* The last QProgramSignals packet sent to the target.  We bypass
321      sending a new program signals list down to the target if the new
322      packet is exactly the same as the last we sent.  IOW, we only let
323      the target know about program signals list changes.  */
324   char *last_program_signals_packet = nullptr;
325 
326   gdb_signal last_sent_signal = GDB_SIGNAL_0;
327 
328   bool last_sent_step = false;
329 
330   /* The execution direction of the last resume we got.  */
331   exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
332 
333   char *finished_object = nullptr;
334   char *finished_annex = nullptr;
335   ULONGEST finished_offset = 0;
336 
337   /* Should we try the 'ThreadInfo' query packet?
338 
339      This variable (NOT available to the user: auto-detect only!)
340      determines whether GDB will use the new, simpler "ThreadInfo"
341      query or the older, more complex syntax for thread queries.
342      This is an auto-detect variable (set to true at each connect,
343      and set to false when the target fails to recognize it).  */
344   bool use_threadinfo_query = false;
345   bool use_threadextra_query = false;
346 
347   threadref echo_nextthread {};
348   threadref nextthread {};
349   threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
350 
351   /* The state of remote notification.  */
352   struct remote_notif_state *notif_state = nullptr;
353 
354   /* The branch trace configuration.  */
355   struct btrace_config btrace_config {};
356 
357   /* The argument to the last "vFile:setfs:" packet we sent, used
358      to avoid sending repeated unnecessary "vFile:setfs:" packets.
359      Initialized to -1 to indicate that no "vFile:setfs:" packet
360      has yet been sent.  */
361   int fs_pid = -1;
362 
363   /* A readahead cache for vFile:pread.  Often, reading a binary
364      involves a sequence of small reads.  E.g., when parsing an ELF
365      file.  A readahead cache helps mostly the case of remote
366      debugging on a connection with higher latency, due to the
367      request/reply nature of the RSP.  We only cache data for a single
368      file descriptor at a time.  */
369   struct readahead_cache readahead_cache;
370 
371   /* The list of already fetched and acknowledged stop events.  This
372      queue is used for notification Stop, and other notifications
373      don't need queue for their events, because the notification
374      events of Stop can't be consumed immediately, so that events
375      should be queued first, and be consumed by remote_wait_{ns,as}
376      one per time.  Other notifications can consume their events
377      immediately, so queue is not needed for them.  */
378   std::vector<stop_reply_up> stop_reply_queue;
379 
380   /* Asynchronous signal handle registered as event loop source for
381      when we have pending events ready to be passed to the core.  */
382   struct async_event_handler *remote_async_inferior_event_token = nullptr;
383 
384   /* FIXME: cagney/1999-09-23: Even though getpkt was called with
385      ``forever'' still use the normal timeout mechanism.  This is
386      currently used by the ASYNC code to guarentee that target reads
387      during the initial connect always time-out.  Once getpkt has been
388      modified to return a timeout indication and, in turn
389      remote_wait()/wait_for_inferior() have gained a timeout parameter
390      this can go away.  */
391   int wait_forever_enabled_p = 1;
392 
393 private:
394   /* Mapping of remote protocol data for each gdbarch.  Usually there
395      is only one entry here, though we may see more with stubs that
396      support multi-process.  */
397   std::unordered_map<struct gdbarch *, remote_arch_state>
398     m_arch_states;
399 };
400 
401 static const target_info remote_target_info = {
402   "remote",
403   N_("Remote serial target in gdb-specific protocol"),
404   remote_doc
405 };
406 
407 class remote_target : public process_stratum_target
408 {
409 public:
410   remote_target () = default;
411   ~remote_target () override;
412 
info()413   const target_info &info () const override
414   { return remote_target_info; }
415 
416   const char *connection_string () override;
417 
get_thread_control_capabilities()418   thread_control_capabilities get_thread_control_capabilities () override
419   { return tc_schedlock; }
420 
421   /* Open a remote connection.  */
422   static void open (const char *, int);
423 
424   void close () override;
425 
426   void detach (inferior *, int) override;
427   void disconnect (const char *, int) override;
428 
429   void commit_resumed () override;
430   void resume (ptid_t, int, enum gdb_signal) override;
431   ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
432   bool has_pending_events () override;
433 
434   void fetch_registers (struct regcache *, int) override;
435   void store_registers (struct regcache *, int) override;
436   void prepare_to_store (struct regcache *) override;
437 
438   void files_info () override;
439 
440   int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
441 
442   int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
443 			 enum remove_bp_reason) override;
444 
445 
446   bool stopped_by_sw_breakpoint () override;
447   bool supports_stopped_by_sw_breakpoint () override;
448 
449   bool stopped_by_hw_breakpoint () override;
450 
451   bool supports_stopped_by_hw_breakpoint () override;
452 
453   bool stopped_by_watchpoint () override;
454 
455   bool stopped_data_address (CORE_ADDR *) override;
456 
457   bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
458 
459   int can_use_hw_breakpoint (enum bptype, int, int) override;
460 
461   int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
462 
463   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
464 
465   int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
466 
467   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
468 			 struct expression *) override;
469 
470   int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
471 			 struct expression *) override;
472 
473   void kill () override;
474 
475   void load (const char *, int) override;
476 
477   void mourn_inferior () override;
478 
479   void pass_signals (gdb::array_view<const unsigned char>) override;
480 
481   int set_syscall_catchpoint (int, bool, int,
482 			      gdb::array_view<const int>) override;
483 
484   void program_signals (gdb::array_view<const unsigned char>) override;
485 
486   bool thread_alive (ptid_t ptid) override;
487 
488   const char *thread_name (struct thread_info *) override;
489 
490   void update_thread_list () override;
491 
492   std::string pid_to_str (ptid_t) override;
493 
494   const char *extra_thread_info (struct thread_info *) override;
495 
496   ptid_t get_ada_task_ptid (long lwp, long thread) override;
497 
498   thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
499 					     int handle_len,
500 					     inferior *inf) override;
501 
502   gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
503 						 override;
504 
505   void stop (ptid_t) override;
506 
507   void interrupt () override;
508 
509   void pass_ctrlc () override;
510 
511   enum target_xfer_status xfer_partial (enum target_object object,
512 					const char *annex,
513 					gdb_byte *readbuf,
514 					const gdb_byte *writebuf,
515 					ULONGEST offset, ULONGEST len,
516 					ULONGEST *xfered_len) override;
517 
518   ULONGEST get_memory_xfer_limit () override;
519 
520   void rcmd (const char *command, struct ui_file *output) override;
521 
522   char *pid_to_exec_file (int pid) override;
523 
log_command(const char * cmd)524   void log_command (const char *cmd) override
525   {
526     serial_log_command (this, cmd);
527   }
528 
529   CORE_ADDR get_thread_local_address (ptid_t ptid,
530 				      CORE_ADDR load_module_addr,
531 				      CORE_ADDR offset) override;
532 
533   bool can_execute_reverse () override;
534 
535   std::vector<mem_region> memory_map () override;
536 
537   void flash_erase (ULONGEST address, LONGEST length) override;
538 
539   void flash_done () override;
540 
541   const struct target_desc *read_description () override;
542 
543   int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
544 		     const gdb_byte *pattern, ULONGEST pattern_len,
545 		     CORE_ADDR *found_addrp) override;
546 
547   bool can_async_p () override;
548 
549   bool is_async_p () override;
550 
551   void async (int) override;
552 
553   int async_wait_fd () override;
554 
555   void thread_events (int) override;
556 
557   int can_do_single_step () override;
558 
559   void terminal_inferior () override;
560 
561   void terminal_ours () override;
562 
563   bool supports_non_stop () override;
564 
565   bool supports_multi_process () override;
566 
567   bool supports_disable_randomization () override;
568 
569   bool filesystem_is_local () override;
570 
571 
572   int fileio_open (struct inferior *inf, const char *filename,
573 		   int flags, int mode, int warn_if_slow,
574 		   int *target_errno) override;
575 
576   int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
577 		     ULONGEST offset, int *target_errno) override;
578 
579   int fileio_pread (int fd, gdb_byte *read_buf, int len,
580 		    ULONGEST offset, int *target_errno) override;
581 
582   int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
583 
584   int fileio_close (int fd, int *target_errno) override;
585 
586   int fileio_unlink (struct inferior *inf,
587 		     const char *filename,
588 		     int *target_errno) override;
589 
590   gdb::optional<std::string>
591     fileio_readlink (struct inferior *inf,
592 		     const char *filename,
593 		     int *target_errno) override;
594 
595   bool supports_enable_disable_tracepoint () override;
596 
597   bool supports_string_tracing () override;
598 
599   bool supports_evaluation_of_breakpoint_conditions () override;
600 
601   bool can_run_breakpoint_commands () override;
602 
603   void trace_init () override;
604 
605   void download_tracepoint (struct bp_location *location) override;
606 
607   bool can_download_tracepoint () override;
608 
609   void download_trace_state_variable (const trace_state_variable &tsv) override;
610 
611   void enable_tracepoint (struct bp_location *location) override;
612 
613   void disable_tracepoint (struct bp_location *location) override;
614 
615   void trace_set_readonly_regions () override;
616 
617   void trace_start () override;
618 
619   int get_trace_status (struct trace_status *ts) override;
620 
621   void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
622     override;
623 
624   void trace_stop () override;
625 
626   int trace_find (enum trace_find_type type, int num,
627 		  CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
628 
629   bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
630 
631   int save_trace_data (const char *filename) override;
632 
633   int upload_tracepoints (struct uploaded_tp **utpp) override;
634 
635   int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
636 
637   LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
638 
639   int get_min_fast_tracepoint_insn_len () override;
640 
641   void set_disconnected_tracing (int val) override;
642 
643   void set_circular_trace_buffer (int val) override;
644 
645   void set_trace_buffer_size (LONGEST val) override;
646 
647   bool set_trace_notes (const char *user, const char *notes,
648 			const char *stopnotes) override;
649 
650   int core_of_thread (ptid_t ptid) override;
651 
652   int verify_memory (const gdb_byte *data,
653 		     CORE_ADDR memaddr, ULONGEST size) override;
654 
655 
656   bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
657 
658   void set_permissions () override;
659 
660   bool static_tracepoint_marker_at (CORE_ADDR,
661 				    struct static_tracepoint_marker *marker)
662     override;
663 
664   std::vector<static_tracepoint_marker>
665     static_tracepoint_markers_by_strid (const char *id) override;
666 
667   traceframe_info_up traceframe_info () override;
668 
669   bool use_agent (bool use) override;
670   bool can_use_agent () override;
671 
672   struct btrace_target_info *enable_btrace (ptid_t ptid,
673 					    const struct btrace_config *conf) override;
674 
675   void disable_btrace (struct btrace_target_info *tinfo) override;
676 
677   void teardown_btrace (struct btrace_target_info *tinfo) override;
678 
679   enum btrace_error read_btrace (struct btrace_data *data,
680 				 struct btrace_target_info *btinfo,
681 				 enum btrace_read_type type) override;
682 
683   const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
684   bool augmented_libraries_svr4_read () override;
685   void follow_fork (bool, bool) override;
686   void follow_exec (inferior *, ptid_t, const char *) override;
687   int insert_fork_catchpoint (int) override;
688   int remove_fork_catchpoint (int) override;
689   int insert_vfork_catchpoint (int) override;
690   int remove_vfork_catchpoint (int) override;
691   int insert_exec_catchpoint (int) override;
692   int remove_exec_catchpoint (int) override;
693   enum exec_direction_kind execution_direction () override;
694 
695   bool supports_memory_tagging () override;
696 
697   bool fetch_memtags (CORE_ADDR address, size_t len,
698 		      gdb::byte_vector &tags, int type) override;
699 
700   bool store_memtags (CORE_ADDR address, size_t len,
701 		      const gdb::byte_vector &tags, int type) override;
702 
703 public: /* Remote specific methods.  */
704 
705   void remote_download_command_source (int num, ULONGEST addr,
706 				       struct command_line *cmds);
707 
708   void remote_file_put (const char *local_file, const char *remote_file,
709 			int from_tty);
710   void remote_file_get (const char *remote_file, const char *local_file,
711 			int from_tty);
712   void remote_file_delete (const char *remote_file, int from_tty);
713 
714   int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
715 			   ULONGEST offset, int *remote_errno);
716   int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
717 			    ULONGEST offset, int *remote_errno);
718   int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
719 				 ULONGEST offset, int *remote_errno);
720 
721   int remote_hostio_send_command (int command_bytes, int which_packet,
722 				  int *remote_errno, const char **attachment,
723 				  int *attachment_len);
724   int remote_hostio_set_filesystem (struct inferior *inf,
725 				    int *remote_errno);
726   /* We should get rid of this and use fileio_open directly.  */
727   int remote_hostio_open (struct inferior *inf, const char *filename,
728 			  int flags, int mode, int warn_if_slow,
729 			  int *remote_errno);
730   int remote_hostio_close (int fd, int *remote_errno);
731 
732   int remote_hostio_unlink (inferior *inf, const char *filename,
733 			    int *remote_errno);
734 
735   struct remote_state *get_remote_state ();
736 
737   long get_remote_packet_size (void);
738   long get_memory_packet_size (struct memory_packet_config *config);
739 
740   long get_memory_write_packet_size ();
741   long get_memory_read_packet_size ();
742 
743   char *append_pending_thread_resumptions (char *p, char *endp,
744 					   ptid_t ptid);
745   static void open_1 (const char *name, int from_tty, int extended_p);
746   void start_remote (int from_tty, int extended_p);
747   void remote_detach_1 (struct inferior *inf, int from_tty);
748 
749   char *append_resumption (char *p, char *endp,
750 			   ptid_t ptid, int step, gdb_signal siggnal);
751   int remote_resume_with_vcont (ptid_t ptid, int step,
752 				gdb_signal siggnal);
753 
754   thread_info *add_current_inferior_and_thread (const char *wait_status);
755 
756   ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
757 		  target_wait_flags options);
758   ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
759 		  target_wait_flags options);
760 
761   ptid_t process_stop_reply (struct stop_reply *stop_reply,
762 			     target_waitstatus *status);
763 
764   ptid_t select_thread_for_ambiguous_stop_reply
765     (const struct target_waitstatus *status);
766 
767   void remote_notice_new_inferior (ptid_t currthread, bool executing);
768 
769   void process_initial_stop_replies (int from_tty);
770 
771   thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
772 
773   void btrace_sync_conf (const btrace_config *conf);
774 
775   void remote_btrace_maybe_reopen ();
776 
777   void remove_new_fork_children (threads_listing_context *context);
778   void kill_new_fork_children (int pid);
779   void discard_pending_stop_replies (struct inferior *inf);
780   int stop_reply_queue_length ();
781 
782   void check_pending_events_prevent_wildcard_vcont
783     (bool *may_global_wildcard_vcont);
784 
785   void discard_pending_stop_replies_in_queue ();
786   struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
787   struct stop_reply *queued_stop_reply (ptid_t ptid);
788   int peek_stop_reply (ptid_t ptid);
789   void remote_parse_stop_reply (const char *buf, stop_reply *event);
790 
791   void remote_stop_ns (ptid_t ptid);
792   void remote_interrupt_as ();
793   void remote_interrupt_ns ();
794 
795   char *remote_get_noisy_reply ();
796   int remote_query_attached (int pid);
797   inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
798 				 int try_open_exec);
799 
800   ptid_t remote_current_thread (ptid_t oldpid);
801   ptid_t get_current_thread (const char *wait_status);
802 
803   void set_thread (ptid_t ptid, int gen);
804   void set_general_thread (ptid_t ptid);
805   void set_continue_thread (ptid_t ptid);
806   void set_general_process ();
807 
808   char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
809 
810   int remote_unpack_thread_info_response (const char *pkt, threadref *expectedref,
811 					  gdb_ext_thread_info *info);
812   int remote_get_threadinfo (threadref *threadid, int fieldset,
813 			     gdb_ext_thread_info *info);
814 
815   int parse_threadlist_response (const char *pkt, int result_limit,
816 				 threadref *original_echo,
817 				 threadref *resultlist,
818 				 int *doneflag);
819   int remote_get_threadlist (int startflag, threadref *nextthread,
820 			     int result_limit, int *done, int *result_count,
821 			     threadref *threadlist);
822 
823   int remote_threadlist_iterator (rmt_thread_action stepfunction,
824 				  void *context, int looplimit);
825 
826   int remote_get_threads_with_ql (threads_listing_context *context);
827   int remote_get_threads_with_qxfer (threads_listing_context *context);
828   int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
829 
830   void extended_remote_restart ();
831 
832   void get_offsets ();
833 
834   void remote_check_symbols ();
835 
836   void remote_supported_packet (const struct protocol_feature *feature,
837 				enum packet_support support,
838 				const char *argument);
839 
840   void remote_query_supported ();
841 
842   void remote_packet_size (const protocol_feature *feature,
843 			   packet_support support, const char *value);
844 
845   void remote_serial_quit_handler ();
846 
847   void remote_detach_pid (int pid);
848 
849   void remote_vcont_probe ();
850 
851   void remote_resume_with_hc (ptid_t ptid, int step,
852 			      gdb_signal siggnal);
853 
854   void send_interrupt_sequence ();
855   void interrupt_query ();
856 
857   void remote_notif_get_pending_events (notif_client *nc);
858 
859   int fetch_register_using_p (struct regcache *regcache,
860 			      packet_reg *reg);
861   int send_g_packet ();
862   void process_g_packet (struct regcache *regcache);
863   void fetch_registers_using_g (struct regcache *regcache);
864   int store_register_using_P (const struct regcache *regcache,
865 			      packet_reg *reg);
866   void store_registers_using_G (const struct regcache *regcache);
867 
868   void set_remote_traceframe ();
869 
870   void check_binary_download (CORE_ADDR addr);
871 
872   target_xfer_status remote_write_bytes_aux (const char *header,
873 					     CORE_ADDR memaddr,
874 					     const gdb_byte *myaddr,
875 					     ULONGEST len_units,
876 					     int unit_size,
877 					     ULONGEST *xfered_len_units,
878 					     char packet_format,
879 					     int use_length);
880 
881   target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
882 					 const gdb_byte *myaddr, ULONGEST len,
883 					 int unit_size, ULONGEST *xfered_len);
884 
885   target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
886 					  ULONGEST len_units,
887 					  int unit_size, ULONGEST *xfered_len_units);
888 
889   target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
890 							ULONGEST memaddr,
891 							ULONGEST len,
892 							int unit_size,
893 							ULONGEST *xfered_len);
894 
895   target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
896 					gdb_byte *myaddr, ULONGEST len,
897 					int unit_size,
898 					ULONGEST *xfered_len);
899 
900   packet_result remote_send_printf (const char *format, ...)
901     ATTRIBUTE_PRINTF (2, 3);
902 
903   target_xfer_status remote_flash_write (ULONGEST address,
904 					 ULONGEST length, ULONGEST *xfered_len,
905 					 const gdb_byte *data);
906 
907   int readchar (int timeout);
908 
909   void remote_serial_write (const char *str, int len);
910 
911   int putpkt (const char *buf);
912   int putpkt_binary (const char *buf, int cnt);
913 
putpkt(const gdb::char_vector & buf)914   int putpkt (const gdb::char_vector &buf)
915   {
916     return putpkt (buf.data ());
917   }
918 
919   void skip_frame ();
920   long read_frame (gdb::char_vector *buf_p);
921   void getpkt (gdb::char_vector *buf, int forever);
922   int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
923 			      int expecting_notif, int *is_notif);
924   int getpkt_sane (gdb::char_vector *buf, int forever);
925   int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
926 			    int *is_notif);
927   int remote_vkill (int pid);
928   void remote_kill_k ();
929 
930   void extended_remote_disable_randomization (int val);
931   int extended_remote_run (const std::string &args);
932 
933   void send_environment_packet (const char *action,
934 				const char *packet,
935 				const char *value);
936 
937   void extended_remote_environment_support ();
938   void extended_remote_set_inferior_cwd ();
939 
940   target_xfer_status remote_write_qxfer (const char *object_name,
941 					 const char *annex,
942 					 const gdb_byte *writebuf,
943 					 ULONGEST offset, LONGEST len,
944 					 ULONGEST *xfered_len,
945 					 struct packet_config *packet);
946 
947   target_xfer_status remote_read_qxfer (const char *object_name,
948 					const char *annex,
949 					gdb_byte *readbuf, ULONGEST offset,
950 					LONGEST len,
951 					ULONGEST *xfered_len,
952 					struct packet_config *packet);
953 
954   void push_stop_reply (struct stop_reply *new_event);
955 
956   bool vcont_r_supported ();
957 
958   void packet_command (const char *args, int from_tty);
959 
960 private: /* data fields */
961 
962   /* The remote state.  Don't reference this directly.  Use the
963      get_remote_state method instead.  */
964   remote_state m_remote_state;
965 };
966 
967 static const target_info extended_remote_target_info = {
968   "extended-remote",
969   N_("Extended remote serial target in gdb-specific protocol"),
970   remote_doc
971 };
972 
973 /* Set up the extended remote target by extending the standard remote
974    target and adding to it.  */
975 
976 class extended_remote_target final : public remote_target
977 {
978 public:
info()979   const target_info &info () const override
980   { return extended_remote_target_info; }
981 
982   /* Open an extended-remote connection.  */
983   static void open (const char *, int);
984 
can_create_inferior()985   bool can_create_inferior () override { return true; }
986   void create_inferior (const char *, const std::string &,
987 			char **, int) override;
988 
989   void detach (inferior *, int) override;
990 
can_attach()991   bool can_attach () override { return true; }
992   void attach (const char *, int) override;
993 
994   void post_attach (int) override;
995   bool supports_disable_randomization () override;
996 };
997 
998 /* Per-program-space data key.  */
999 static const struct program_space_key<char, gdb::xfree_deleter<char>>
1000   remote_pspace_data;
1001 
1002 /* The variable registered as the control variable used by the
1003    remote exec-file commands.  While the remote exec-file setting is
1004    per-program-space, the set/show machinery uses this as the
1005    location of the remote exec-file value.  */
1006 static char *remote_exec_file_var;
1007 
1008 /* The size to align memory write packets, when practical.  The protocol
1009    does not guarantee any alignment, and gdb will generate short
1010    writes and unaligned writes, but even as a best-effort attempt this
1011    can improve bulk transfers.  For instance, if a write is misaligned
1012    relative to the target's data bus, the stub may need to make an extra
1013    round trip fetching data from the target.  This doesn't make a
1014    huge difference, but it's easy to do, so we try to be helpful.
1015 
1016    The alignment chosen is arbitrary; usually data bus width is
1017    important here, not the possibly larger cache line size.  */
1018 enum { REMOTE_ALIGN_WRITES = 16 };
1019 
1020 /* Prototypes for local functions.  */
1021 
1022 static int hexnumlen (ULONGEST num);
1023 
1024 static int stubhex (int ch);
1025 
1026 static int hexnumstr (char *, ULONGEST);
1027 
1028 static int hexnumnstr (char *, ULONGEST, int);
1029 
1030 static CORE_ADDR remote_address_masked (CORE_ADDR);
1031 
1032 static void print_packet (const char *);
1033 
1034 static int stub_unpack_int (const char *buff, int fieldlength);
1035 
1036 struct packet_config;
1037 
1038 static void show_packet_config_cmd (struct packet_config *config);
1039 
1040 static void show_remote_protocol_packet_cmd (struct ui_file *file,
1041 					     int from_tty,
1042 					     struct cmd_list_element *c,
1043 					     const char *value);
1044 
1045 static ptid_t read_ptid (const char *buf, const char **obuf);
1046 
1047 static void remote_async_inferior_event_handler (gdb_client_data);
1048 
1049 static bool remote_read_description_p (struct target_ops *target);
1050 
1051 static void remote_console_output (const char *msg);
1052 
1053 static void remote_btrace_reset (remote_state *rs);
1054 
1055 static void remote_unpush_and_throw (remote_target *target);
1056 
1057 /* For "remote".  */
1058 
1059 static struct cmd_list_element *remote_cmdlist;
1060 
1061 /* For "set remote" and "show remote".  */
1062 
1063 static struct cmd_list_element *remote_set_cmdlist;
1064 static struct cmd_list_element *remote_show_cmdlist;
1065 
1066 /* Controls whether GDB is willing to use range stepping.  */
1067 
1068 static bool use_range_stepping = true;
1069 
1070 /* From the remote target's point of view, each thread is in one of these three
1071    states.  */
1072 enum class resume_state
1073 {
1074   /* Not resumed - we haven't been asked to resume this thread.  */
1075   NOT_RESUMED,
1076 
1077   /* We have been asked to resume this thread, but haven't sent a vCont action
1078      for it yet.  We'll need to consider it next time commit_resume is
1079      called.  */
1080   RESUMED_PENDING_VCONT,
1081 
1082   /* We have been asked to resume this thread, and we have sent a vCont action
1083      for it.  */
1084   RESUMED,
1085 };
1086 
1087 /* Information about a thread's pending vCont-resume.  Used when a thread is in
1088    the remote_resume_state::RESUMED_PENDING_VCONT state.  remote_target::resume
1089    stores this information which is then picked up by
1090    remote_target::commit_resume to know which is the proper action for this
1091    thread to include in the vCont packet.  */
1092 struct resumed_pending_vcont_info
1093 {
1094   /* True if the last resume call for this thread was a step request, false
1095      if a continue request.  */
1096   bool step;
1097 
1098   /* The signal specified in the last resume call for this thread.  */
1099   gdb_signal sig;
1100 };
1101 
1102 /* Private data that we'll store in (struct thread_info)->priv.  */
1103 struct remote_thread_info : public private_thread_info
1104 {
1105   std::string extra;
1106   std::string name;
1107   int core = -1;
1108 
1109   /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1110      sequence of bytes.  */
1111   gdb::byte_vector thread_handle;
1112 
1113   /* Whether the target stopped for a breakpoint/watchpoint.  */
1114   enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
1115 
1116   /* This is set to the data address of the access causing the target
1117      to stop for a watchpoint.  */
1118   CORE_ADDR watch_data_address = 0;
1119 
1120   /* Get the thread's resume state.  */
1121   enum resume_state get_resume_state () const
1122   {
1123     return m_resume_state;
1124   }
1125 
1126   /* Put the thread in the NOT_RESUMED state.  */
1127   void set_not_resumed ()
1128   {
1129     m_resume_state = resume_state::NOT_RESUMED;
1130   }
1131 
1132   /* Put the thread in the RESUMED_PENDING_VCONT state.  */
1133   void set_resumed_pending_vcont (bool step, gdb_signal sig)
1134   {
1135     m_resume_state = resume_state::RESUMED_PENDING_VCONT;
1136     m_resumed_pending_vcont_info.step = step;
1137     m_resumed_pending_vcont_info.sig = sig;
1138   }
1139 
1140   /* Get the information this thread's pending vCont-resumption.
1141 
1142      Must only be called if the thread is in the RESUMED_PENDING_VCONT resume
1143      state.  */
1144   const struct resumed_pending_vcont_info &resumed_pending_vcont_info () const
1145   {
1146     gdb_assert (m_resume_state == resume_state::RESUMED_PENDING_VCONT);
1147 
1148     return m_resumed_pending_vcont_info;
1149   }
1150 
1151   /* Put the thread in the VCONT_RESUMED state.  */
1152   void set_resumed ()
1153   {
1154     m_resume_state = resume_state::RESUMED;
1155   }
1156 
1157 private:
1158   /* Resume state for this thread.  This is used to implement vCont action
1159      coalescing (only when the target operates in non-stop mode).
1160 
1161      remote_target::resume moves the thread to the RESUMED_PENDING_VCONT state,
1162      which notes that this thread must be considered in the next commit_resume
1163      call.
1164 
1165      remote_target::commit_resume sends a vCont packet with actions for the
1166      threads in the RESUMED_PENDING_VCONT state and moves them to the
1167      VCONT_RESUMED state.
1168 
1169      When reporting a stop to the core for a thread, that thread is moved back
1170      to the NOT_RESUMED state.  */
1171   enum resume_state m_resume_state = resume_state::NOT_RESUMED;
1172 
1173   /* Extra info used if the thread is in the RESUMED_PENDING_VCONT state.  */
1174   struct resumed_pending_vcont_info m_resumed_pending_vcont_info;
1175 };
1176 
1177 remote_state::remote_state ()
1178   : buf (400)
1179 {
1180 }
1181 
1182 remote_state::~remote_state ()
1183 {
1184   xfree (this->last_pass_packet);
1185   xfree (this->last_program_signals_packet);
1186   xfree (this->finished_object);
1187   xfree (this->finished_annex);
1188 }
1189 
1190 /* Utility: generate error from an incoming stub packet.  */
1191 static void
1192 trace_error (char *buf)
1193 {
1194   if (*buf++ != 'E')
1195     return;			/* not an error msg */
1196   switch (*buf)
1197     {
1198     case '1':			/* malformed packet error */
1199       if (*++buf == '0')	/*   general case: */
1200 	error (_("remote.c: error in outgoing packet."));
1201       else
1202 	error (_("remote.c: error in outgoing packet at field #%ld."),
1203 	       strtol (buf, NULL, 16));
1204     default:
1205       error (_("Target returns error code '%s'."), buf);
1206     }
1207 }
1208 
1209 /* Utility: wait for reply from stub, while accepting "O" packets.  */
1210 
1211 char *
1212 remote_target::remote_get_noisy_reply ()
1213 {
1214   struct remote_state *rs = get_remote_state ();
1215 
1216   do				/* Loop on reply from remote stub.  */
1217     {
1218       char *buf;
1219 
1220       QUIT;			/* Allow user to bail out with ^C.  */
1221       getpkt (&rs->buf, 0);
1222       buf = rs->buf.data ();
1223       if (buf[0] == 'E')
1224 	trace_error (buf);
1225       else if (startswith (buf, "qRelocInsn:"))
1226 	{
1227 	  ULONGEST ul;
1228 	  CORE_ADDR from, to, org_to;
1229 	  const char *p, *pp;
1230 	  int adjusted_size = 0;
1231 	  int relocated = 0;
1232 
1233 	  p = buf + strlen ("qRelocInsn:");
1234 	  pp = unpack_varlen_hex (p, &ul);
1235 	  if (*pp != ';')
1236 	    error (_("invalid qRelocInsn packet: %s"), buf);
1237 	  from = ul;
1238 
1239 	  p = pp + 1;
1240 	  unpack_varlen_hex (p, &ul);
1241 	  to = ul;
1242 
1243 	  org_to = to;
1244 
1245 	  try
1246 	    {
1247 	      gdbarch_relocate_instruction (target_gdbarch (), &to, from);
1248 	      relocated = 1;
1249 	    }
1250 	  catch (const gdb_exception &ex)
1251 	    {
1252 	      if (ex.error == MEMORY_ERROR)
1253 		{
1254 		  /* Propagate memory errors silently back to the
1255 		     target.  The stub may have limited the range of
1256 		     addresses we can write to, for example.  */
1257 		}
1258 	      else
1259 		{
1260 		  /* Something unexpectedly bad happened.  Be verbose
1261 		     so we can tell what, and propagate the error back
1262 		     to the stub, so it doesn't get stuck waiting for
1263 		     a response.  */
1264 		  exception_fprintf (gdb_stderr, ex,
1265 				     _("warning: relocating instruction: "));
1266 		}
1267 	      putpkt ("E01");
1268 	    }
1269 
1270 	  if (relocated)
1271 	    {
1272 	      adjusted_size = to - org_to;
1273 
1274 	      xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
1275 	      putpkt (buf);
1276 	    }
1277 	}
1278       else if (buf[0] == 'O' && buf[1] != 'K')
1279 	remote_console_output (buf + 1);	/* 'O' message from stub */
1280       else
1281 	return buf;		/* Here's the actual reply.  */
1282     }
1283   while (1);
1284 }
1285 
1286 struct remote_arch_state *
1287 remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
1288 {
1289   remote_arch_state *rsa;
1290 
1291   auto it = this->m_arch_states.find (gdbarch);
1292   if (it == this->m_arch_states.end ())
1293     {
1294       auto p = this->m_arch_states.emplace (std::piecewise_construct,
1295 					    std::forward_as_tuple (gdbarch),
1296 					    std::forward_as_tuple (gdbarch));
1297       rsa = &p.first->second;
1298 
1299       /* Make sure that the packet buffer is plenty big enough for
1300 	 this architecture.  */
1301       if (this->buf.size () < rsa->remote_packet_size)
1302 	this->buf.resize (2 * rsa->remote_packet_size);
1303     }
1304   else
1305     rsa = &it->second;
1306 
1307   return rsa;
1308 }
1309 
1310 /* Fetch the global remote target state.  */
1311 
1312 remote_state *
1313 remote_target::get_remote_state ()
1314 {
1315   /* Make sure that the remote architecture state has been
1316      initialized, because doing so might reallocate rs->buf.  Any
1317      function which calls getpkt also needs to be mindful of changes
1318      to rs->buf, but this call limits the number of places which run
1319      into trouble.  */
1320   m_remote_state.get_remote_arch_state (target_gdbarch ());
1321 
1322   return &m_remote_state;
1323 }
1324 
1325 /* Fetch the remote exec-file from the current program space.  */
1326 
1327 static const char *
1328 get_remote_exec_file (void)
1329 {
1330   char *remote_exec_file;
1331 
1332   remote_exec_file = remote_pspace_data.get (current_program_space);
1333   if (remote_exec_file == NULL)
1334     return "";
1335 
1336   return remote_exec_file;
1337 }
1338 
1339 /* Set the remote exec file for PSPACE.  */
1340 
1341 static void
1342 set_pspace_remote_exec_file (struct program_space *pspace,
1343 			     const char *remote_exec_file)
1344 {
1345   char *old_file = remote_pspace_data.get (pspace);
1346 
1347   xfree (old_file);
1348   remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
1349 }
1350 
1351 /* The "set/show remote exec-file" set command hook.  */
1352 
1353 static void
1354 set_remote_exec_file (const char *ignored, int from_tty,
1355 		      struct cmd_list_element *c)
1356 {
1357   gdb_assert (remote_exec_file_var != NULL);
1358   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1359 }
1360 
1361 /* The "set/show remote exec-file" show command hook.  */
1362 
1363 static void
1364 show_remote_exec_file (struct ui_file *file, int from_tty,
1365 		       struct cmd_list_element *cmd, const char *value)
1366 {
1367   fprintf_filtered (file, "%s\n", get_remote_exec_file ());
1368 }
1369 
1370 static int
1371 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
1372 {
1373   int regnum, num_remote_regs, offset;
1374   struct packet_reg **remote_regs;
1375 
1376   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1377     {
1378       struct packet_reg *r = &regs[regnum];
1379 
1380       if (register_size (gdbarch, regnum) == 0)
1381 	/* Do not try to fetch zero-sized (placeholder) registers.  */
1382 	r->pnum = -1;
1383       else
1384 	r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1385 
1386       r->regnum = regnum;
1387     }
1388 
1389   /* Define the g/G packet format as the contents of each register
1390      with a remote protocol number, in order of ascending protocol
1391      number.  */
1392 
1393   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
1394   for (num_remote_regs = 0, regnum = 0;
1395        regnum < gdbarch_num_regs (gdbarch);
1396        regnum++)
1397     if (regs[regnum].pnum != -1)
1398       remote_regs[num_remote_regs++] = &regs[regnum];
1399 
1400   std::sort (remote_regs, remote_regs + num_remote_regs,
1401 	     [] (const packet_reg *a, const packet_reg *b)
1402 	      { return a->pnum < b->pnum; });
1403 
1404   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1405     {
1406       remote_regs[regnum]->in_g_packet = 1;
1407       remote_regs[regnum]->offset = offset;
1408       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
1409     }
1410 
1411   return offset;
1412 }
1413 
1414 /* Given the architecture described by GDBARCH, return the remote
1415    protocol register's number and the register's offset in the g/G
1416    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1417    If the target does not have a mapping for REGNUM, return false,
1418    otherwise, return true.  */
1419 
1420 int
1421 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1422 				   int *pnum, int *poffset)
1423 {
1424   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1425 
1426   std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
1427 
1428   map_regcache_remote_table (gdbarch, regs.data ());
1429 
1430   *pnum = regs[regnum].pnum;
1431   *poffset = regs[regnum].offset;
1432 
1433   return *pnum != -1;
1434 }
1435 
1436 remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
1437 {
1438   /* Use the architecture to build a regnum<->pnum table, which will be
1439      1:1 unless a feature set specifies otherwise.  */
1440   this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
1441 
1442   /* Record the maximum possible size of the g packet - it may turn out
1443      to be smaller.  */
1444   this->sizeof_g_packet
1445     = map_regcache_remote_table (gdbarch, this->regs.get ());
1446 
1447   /* Default maximum number of characters in a packet body.  Many
1448      remote stubs have a hardwired buffer size of 400 bytes
1449      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
1450      as the maximum packet-size to ensure that the packet and an extra
1451      NUL character can always fit in the buffer.  This stops GDB
1452      trashing stubs that try to squeeze an extra NUL into what is
1453      already a full buffer (As of 1999-12-04 that was most stubs).  */
1454   this->remote_packet_size = 400 - 1;
1455 
1456   /* This one is filled in when a ``g'' packet is received.  */
1457   this->actual_register_packet_size = 0;
1458 
1459   /* Should rsa->sizeof_g_packet needs more space than the
1460      default, adjust the size accordingly.  Remember that each byte is
1461      encoded as two characters.  32 is the overhead for the packet
1462      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
1463      (``$NN:G...#NN'') is a better guess, the below has been padded a
1464      little.  */
1465   if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1466     this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
1467 }
1468 
1469 /* Get a pointer to the current remote target.  If not connected to a
1470    remote target, return NULL.  */
1471 
1472 static remote_target *
1473 get_current_remote_target ()
1474 {
1475   target_ops *proc_target = current_inferior ()->process_target ();
1476   return dynamic_cast<remote_target *> (proc_target);
1477 }
1478 
1479 /* Return the current allowed size of a remote packet.  This is
1480    inferred from the current architecture, and should be used to
1481    limit the length of outgoing packets.  */
1482 long
1483 remote_target::get_remote_packet_size ()
1484 {
1485   struct remote_state *rs = get_remote_state ();
1486   remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1487 
1488   if (rs->explicit_packet_size)
1489     return rs->explicit_packet_size;
1490 
1491   return rsa->remote_packet_size;
1492 }
1493 
1494 static struct packet_reg *
1495 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1496 			long regnum)
1497 {
1498   if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
1499     return NULL;
1500   else
1501     {
1502       struct packet_reg *r = &rsa->regs[regnum];
1503 
1504       gdb_assert (r->regnum == regnum);
1505       return r;
1506     }
1507 }
1508 
1509 static struct packet_reg *
1510 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1511 		      LONGEST pnum)
1512 {
1513   int i;
1514 
1515   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
1516     {
1517       struct packet_reg *r = &rsa->regs[i];
1518 
1519       if (r->pnum == pnum)
1520 	return r;
1521     }
1522   return NULL;
1523 }
1524 
1525 /* Allow the user to specify what sequence to send to the remote
1526    when he requests a program interruption: Although ^C is usually
1527    what remote systems expect (this is the default, here), it is
1528    sometimes preferable to send a break.  On other systems such
1529    as the Linux kernel, a break followed by g, which is Magic SysRq g
1530    is required in order to interrupt the execution.  */
1531 const char interrupt_sequence_control_c[] = "Ctrl-C";
1532 const char interrupt_sequence_break[] = "BREAK";
1533 const char interrupt_sequence_break_g[] = "BREAK-g";
1534 static const char *const interrupt_sequence_modes[] =
1535   {
1536     interrupt_sequence_control_c,
1537     interrupt_sequence_break,
1538     interrupt_sequence_break_g,
1539     NULL
1540   };
1541 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1542 
1543 static void
1544 show_interrupt_sequence (struct ui_file *file, int from_tty,
1545 			 struct cmd_list_element *c,
1546 			 const char *value)
1547 {
1548   if (interrupt_sequence_mode == interrupt_sequence_control_c)
1549     fprintf_filtered (file,
1550 		      _("Send the ASCII ETX character (Ctrl-c) "
1551 			"to the remote target to interrupt the "
1552 			"execution of the program.\n"));
1553   else if (interrupt_sequence_mode == interrupt_sequence_break)
1554     fprintf_filtered (file,
1555 		      _("send a break signal to the remote target "
1556 			"to interrupt the execution of the program.\n"));
1557   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1558     fprintf_filtered (file,
1559 		      _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1560 			"the remote target to interrupt the execution "
1561 			"of Linux kernel.\n"));
1562   else
1563     internal_error (__FILE__, __LINE__,
1564 		    _("Invalid value for interrupt_sequence_mode: %s."),
1565 		    interrupt_sequence_mode);
1566 }
1567 
1568 /* This boolean variable specifies whether interrupt_sequence is sent
1569    to the remote target when gdb connects to it.
1570    This is mostly needed when you debug the Linux kernel: The Linux kernel
1571    expects BREAK g which is Magic SysRq g for connecting gdb.  */
1572 static bool interrupt_on_connect = false;
1573 
1574 /* This variable is used to implement the "set/show remotebreak" commands.
1575    Since these commands are now deprecated in favor of "set/show remote
1576    interrupt-sequence", it no longer has any effect on the code.  */
1577 static bool remote_break;
1578 
1579 static void
1580 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
1581 {
1582   if (remote_break)
1583     interrupt_sequence_mode = interrupt_sequence_break;
1584   else
1585     interrupt_sequence_mode = interrupt_sequence_control_c;
1586 }
1587 
1588 static void
1589 show_remotebreak (struct ui_file *file, int from_tty,
1590 		  struct cmd_list_element *c,
1591 		  const char *value)
1592 {
1593 }
1594 
1595 /* This variable sets the number of bits in an address that are to be
1596    sent in a memory ("M" or "m") packet.  Normally, after stripping
1597    leading zeros, the entire address would be sent.  This variable
1598    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1599    initial implementation of remote.c restricted the address sent in
1600    memory packets to ``host::sizeof long'' bytes - (typically 32
1601    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1602    address was never sent.  Since fixing this bug may cause a break in
1603    some remote targets this variable is principally provided to
1604    facilitate backward compatibility.  */
1605 
1606 static unsigned int remote_address_size;
1607 
1608 
1609 /* User configurable variables for the number of characters in a
1610    memory read/write packet.  MIN (rsa->remote_packet_size,
1611    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1612    values (fifo overruns, et.al.) and some users need larger values
1613    (speed up transfers).  The variables ``preferred_*'' (the user
1614    request), ``current_*'' (what was actually set) and ``forced_*''
1615    (Positive - a soft limit, negative - a hard limit).  */
1616 
1617 struct memory_packet_config
1618 {
1619   const char *name;
1620   long size;
1621   int fixed_p;
1622 };
1623 
1624 /* The default max memory-write-packet-size, when the setting is
1625    "fixed".  The 16k is historical.  (It came from older GDB's using
1626    alloca for buffers and the knowledge (folklore?) that some hosts
1627    don't cope very well with large alloca calls.)  */
1628 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
1629 
1630 /* The minimum remote packet size for memory transfers.  Ensures we
1631    can write at least one byte.  */
1632 #define MIN_MEMORY_PACKET_SIZE 20
1633 
1634 /* Get the memory packet size, assuming it is fixed.  */
1635 
1636 static long
1637 get_fixed_memory_packet_size (struct memory_packet_config *config)
1638 {
1639   gdb_assert (config->fixed_p);
1640 
1641   if (config->size <= 0)
1642     return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1643   else
1644     return config->size;
1645 }
1646 
1647 /* Compute the current size of a read/write packet.  Since this makes
1648    use of ``actual_register_packet_size'' the computation is dynamic.  */
1649 
1650 long
1651 remote_target::get_memory_packet_size (struct memory_packet_config *config)
1652 {
1653   struct remote_state *rs = get_remote_state ();
1654   remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1655 
1656   long what_they_get;
1657   if (config->fixed_p)
1658     what_they_get = get_fixed_memory_packet_size (config);
1659   else
1660     {
1661       what_they_get = get_remote_packet_size ();
1662       /* Limit the packet to the size specified by the user.  */
1663       if (config->size > 0
1664 	  && what_they_get > config->size)
1665 	what_they_get = config->size;
1666 
1667       /* Limit it to the size of the targets ``g'' response unless we have
1668 	 permission from the stub to use a larger packet size.  */
1669       if (rs->explicit_packet_size == 0
1670 	  && rsa->actual_register_packet_size > 0
1671 	  && what_they_get > rsa->actual_register_packet_size)
1672 	what_they_get = rsa->actual_register_packet_size;
1673     }
1674   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1675     what_they_get = MIN_MEMORY_PACKET_SIZE;
1676 
1677   /* Make sure there is room in the global buffer for this packet
1678      (including its trailing NUL byte).  */
1679   if (rs->buf.size () < what_they_get + 1)
1680     rs->buf.resize (2 * what_they_get);
1681 
1682   return what_they_get;
1683 }
1684 
1685 /* Update the size of a read/write packet.  If they user wants
1686    something really big then do a sanity check.  */
1687 
1688 static void
1689 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1690 {
1691   int fixed_p = config->fixed_p;
1692   long size = config->size;
1693 
1694   if (args == NULL)
1695     error (_("Argument required (integer, `fixed' or `limited')."));
1696   else if (strcmp (args, "hard") == 0
1697       || strcmp (args, "fixed") == 0)
1698     fixed_p = 1;
1699   else if (strcmp (args, "soft") == 0
1700 	   || strcmp (args, "limit") == 0)
1701     fixed_p = 0;
1702   else
1703     {
1704       char *end;
1705 
1706       size = strtoul (args, &end, 0);
1707       if (args == end)
1708 	error (_("Invalid %s (bad syntax)."), config->name);
1709 
1710       /* Instead of explicitly capping the size of a packet to or
1711 	 disallowing it, the user is allowed to set the size to
1712 	 something arbitrarily large.  */
1713     }
1714 
1715   /* Extra checks?  */
1716   if (fixed_p && !config->fixed_p)
1717     {
1718       /* So that the query shows the correct value.  */
1719       long query_size = (size <= 0
1720 			 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1721 			 : size);
1722 
1723       if (! query (_("The target may not be able to correctly handle a %s\n"
1724 		   "of %ld bytes. Change the packet size? "),
1725 		   config->name, query_size))
1726 	error (_("Packet size not changed."));
1727     }
1728   /* Update the config.  */
1729   config->fixed_p = fixed_p;
1730   config->size = size;
1731 }
1732 
1733 static void
1734 show_memory_packet_size (struct memory_packet_config *config)
1735 {
1736   if (config->size == 0)
1737     printf_filtered (_("The %s is 0 (default). "), config->name);
1738   else
1739     printf_filtered (_("The %s is %ld. "), config->name, config->size);
1740   if (config->fixed_p)
1741     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1742 		     get_fixed_memory_packet_size (config));
1743   else
1744     {
1745       remote_target *remote = get_current_remote_target ();
1746 
1747       if (remote != NULL)
1748 	printf_filtered (_("Packets are limited to %ld bytes.\n"),
1749 			 remote->get_memory_packet_size (config));
1750       else
1751 	puts_filtered ("The actual limit will be further reduced "
1752 		       "dependent on the target.\n");
1753     }
1754 }
1755 
1756 /* FIXME: needs to be per-remote-target.  */
1757 static struct memory_packet_config memory_write_packet_config =
1758 {
1759   "memory-write-packet-size",
1760 };
1761 
1762 static void
1763 set_memory_write_packet_size (const char *args, int from_tty)
1764 {
1765   set_memory_packet_size (args, &memory_write_packet_config);
1766 }
1767 
1768 static void
1769 show_memory_write_packet_size (const char *args, int from_tty)
1770 {
1771   show_memory_packet_size (&memory_write_packet_config);
1772 }
1773 
1774 /* Show the number of hardware watchpoints that can be used.  */
1775 
1776 static void
1777 show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1778 				struct cmd_list_element *c,
1779 				const char *value)
1780 {
1781   fprintf_filtered (file, _("The maximum number of target hardware "
1782 			    "watchpoints is %s.\n"), value);
1783 }
1784 
1785 /* Show the length limit (in bytes) for hardware watchpoints.  */
1786 
1787 static void
1788 show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1789 				       struct cmd_list_element *c,
1790 				       const char *value)
1791 {
1792   fprintf_filtered (file, _("The maximum length (in bytes) of a target "
1793 			    "hardware watchpoint is %s.\n"), value);
1794 }
1795 
1796 /* Show the number of hardware breakpoints that can be used.  */
1797 
1798 static void
1799 show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1800 				struct cmd_list_element *c,
1801 				const char *value)
1802 {
1803   fprintf_filtered (file, _("The maximum number of target hardware "
1804 			    "breakpoints is %s.\n"), value);
1805 }
1806 
1807 /* Controls the maximum number of characters to display in the debug output
1808    for each remote packet.  The remaining characters are omitted.  */
1809 
1810 static int remote_packet_max_chars = 512;
1811 
1812 /* Show the maximum number of characters to display for each remote packet
1813    when remote debugging is enabled.  */
1814 
1815 static void
1816 show_remote_packet_max_chars (struct ui_file *file, int from_tty,
1817 			      struct cmd_list_element *c,
1818 			      const char *value)
1819 {
1820   fprintf_filtered (file, _("Number of remote packet characters to "
1821 			    "display is %s.\n"), value);
1822 }
1823 
1824 long
1825 remote_target::get_memory_write_packet_size ()
1826 {
1827   return get_memory_packet_size (&memory_write_packet_config);
1828 }
1829 
1830 /* FIXME: needs to be per-remote-target.  */
1831 static struct memory_packet_config memory_read_packet_config =
1832 {
1833   "memory-read-packet-size",
1834 };
1835 
1836 static void
1837 set_memory_read_packet_size (const char *args, int from_tty)
1838 {
1839   set_memory_packet_size (args, &memory_read_packet_config);
1840 }
1841 
1842 static void
1843 show_memory_read_packet_size (const char *args, int from_tty)
1844 {
1845   show_memory_packet_size (&memory_read_packet_config);
1846 }
1847 
1848 long
1849 remote_target::get_memory_read_packet_size ()
1850 {
1851   long size = get_memory_packet_size (&memory_read_packet_config);
1852 
1853   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1854      extra buffer size argument before the memory read size can be
1855      increased beyond this.  */
1856   if (size > get_remote_packet_size ())
1857     size = get_remote_packet_size ();
1858   return size;
1859 }
1860 
1861 
1862 
1863 struct packet_config
1864   {
1865     const char *name;
1866     const char *title;
1867 
1868     /* If auto, GDB auto-detects support for this packet or feature,
1869        either through qSupported, or by trying the packet and looking
1870        at the response.  If true, GDB assumes the target supports this
1871        packet.  If false, the packet is disabled.  Configs that don't
1872        have an associated command always have this set to auto.  */
1873     enum auto_boolean detect;
1874 
1875     /* Does the target support this packet?  */
1876     enum packet_support support;
1877   };
1878 
1879 static enum packet_support packet_config_support (struct packet_config *config);
1880 static enum packet_support packet_support (int packet);
1881 
1882 static void
1883 show_packet_config_cmd (struct packet_config *config)
1884 {
1885   const char *support = "internal-error";
1886 
1887   switch (packet_config_support (config))
1888     {
1889     case PACKET_ENABLE:
1890       support = "enabled";
1891       break;
1892     case PACKET_DISABLE:
1893       support = "disabled";
1894       break;
1895     case PACKET_SUPPORT_UNKNOWN:
1896       support = "unknown";
1897       break;
1898     }
1899   switch (config->detect)
1900     {
1901     case AUTO_BOOLEAN_AUTO:
1902       printf_filtered (_("Support for the `%s' packet "
1903 			 "is auto-detected, currently %s.\n"),
1904 		       config->name, support);
1905       break;
1906     case AUTO_BOOLEAN_TRUE:
1907     case AUTO_BOOLEAN_FALSE:
1908       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1909 		       config->name, support);
1910       break;
1911     }
1912 }
1913 
1914 static void
1915 add_packet_config_cmd (struct packet_config *config, const char *name,
1916 		       const char *title, int legacy)
1917 {
1918   char *set_doc;
1919   char *show_doc;
1920   char *cmd_name;
1921 
1922   config->name = name;
1923   config->title = title;
1924   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
1925 			name, title);
1926   show_doc = xstrprintf ("Show current use of remote "
1927 			 "protocol `%s' (%s) packet.",
1928 			 name, title);
1929   /* set/show TITLE-packet {auto,on,off} */
1930   cmd_name = xstrprintf ("%s-packet", title);
1931   set_show_commands cmds
1932     = add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1933 				    &config->detect, set_doc,
1934 				    show_doc, NULL, /* help_doc */
1935 				    NULL,
1936 				    show_remote_protocol_packet_cmd,
1937 				    &remote_set_cmdlist, &remote_show_cmdlist);
1938 
1939   /* The command code copies the documentation strings.  */
1940   xfree (set_doc);
1941   xfree (show_doc);
1942 
1943   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1944   if (legacy)
1945     {
1946       char *legacy_name;
1947 
1948       legacy_name = xstrprintf ("%s-packet", name);
1949       add_alias_cmd (legacy_name, cmds.set, class_obscure, 0,
1950 		     &remote_set_cmdlist);
1951       add_alias_cmd (legacy_name, cmds.show, class_obscure, 0,
1952 		     &remote_show_cmdlist);
1953     }
1954 }
1955 
1956 static enum packet_result
1957 packet_check_result (const char *buf)
1958 {
1959   if (buf[0] != '\0')
1960     {
1961       /* The stub recognized the packet request.  Check that the
1962 	 operation succeeded.  */
1963       if (buf[0] == 'E'
1964 	  && isxdigit (buf[1]) && isxdigit (buf[2])
1965 	  && buf[3] == '\0')
1966 	/* "Enn"  - definitely an error.  */
1967 	return PACKET_ERROR;
1968 
1969       /* Always treat "E." as an error.  This will be used for
1970 	 more verbose error messages, such as E.memtypes.  */
1971       if (buf[0] == 'E' && buf[1] == '.')
1972 	return PACKET_ERROR;
1973 
1974       /* The packet may or may not be OK.  Just assume it is.  */
1975       return PACKET_OK;
1976     }
1977   else
1978     /* The stub does not support the packet.  */
1979     return PACKET_UNKNOWN;
1980 }
1981 
1982 static enum packet_result
1983 packet_check_result (const gdb::char_vector &buf)
1984 {
1985   return packet_check_result (buf.data ());
1986 }
1987 
1988 static enum packet_result
1989 packet_ok (const char *buf, struct packet_config *config)
1990 {
1991   enum packet_result result;
1992 
1993   if (config->detect != AUTO_BOOLEAN_TRUE
1994       && config->support == PACKET_DISABLE)
1995     internal_error (__FILE__, __LINE__,
1996 		    _("packet_ok: attempt to use a disabled packet"));
1997 
1998   result = packet_check_result (buf);
1999   switch (result)
2000     {
2001     case PACKET_OK:
2002     case PACKET_ERROR:
2003       /* The stub recognized the packet request.  */
2004       if (config->support == PACKET_SUPPORT_UNKNOWN)
2005 	{
2006 	  remote_debug_printf ("Packet %s (%s) is supported",
2007 			       config->name, config->title);
2008 	  config->support = PACKET_ENABLE;
2009 	}
2010       break;
2011     case PACKET_UNKNOWN:
2012       /* The stub does not support the packet.  */
2013       if (config->detect == AUTO_BOOLEAN_AUTO
2014 	  && config->support == PACKET_ENABLE)
2015 	{
2016 	  /* If the stub previously indicated that the packet was
2017 	     supported then there is a protocol error.  */
2018 	  error (_("Protocol error: %s (%s) conflicting enabled responses."),
2019 		 config->name, config->title);
2020 	}
2021       else if (config->detect == AUTO_BOOLEAN_TRUE)
2022 	{
2023 	  /* The user set it wrong.  */
2024 	  error (_("Enabled packet %s (%s) not recognized by stub"),
2025 		 config->name, config->title);
2026 	}
2027 
2028       remote_debug_printf ("Packet %s (%s) is NOT supported",
2029 			   config->name, config->title);
2030       config->support = PACKET_DISABLE;
2031       break;
2032     }
2033 
2034   return result;
2035 }
2036 
2037 static enum packet_result
2038 packet_ok (const gdb::char_vector &buf, struct packet_config *config)
2039 {
2040   return packet_ok (buf.data (), config);
2041 }
2042 
2043 enum {
2044   PACKET_vCont = 0,
2045   PACKET_X,
2046   PACKET_qSymbol,
2047   PACKET_P,
2048   PACKET_p,
2049   PACKET_Z0,
2050   PACKET_Z1,
2051   PACKET_Z2,
2052   PACKET_Z3,
2053   PACKET_Z4,
2054   PACKET_vFile_setfs,
2055   PACKET_vFile_open,
2056   PACKET_vFile_pread,
2057   PACKET_vFile_pwrite,
2058   PACKET_vFile_close,
2059   PACKET_vFile_unlink,
2060   PACKET_vFile_readlink,
2061   PACKET_vFile_fstat,
2062   PACKET_qXfer_auxv,
2063   PACKET_qXfer_features,
2064   PACKET_qXfer_exec_file,
2065   PACKET_qXfer_libraries,
2066   PACKET_qXfer_libraries_svr4,
2067   PACKET_qXfer_memory_map,
2068   PACKET_qXfer_osdata,
2069   PACKET_qXfer_threads,
2070   PACKET_qXfer_statictrace_read,
2071   PACKET_qXfer_traceframe_info,
2072   PACKET_qXfer_uib,
2073   PACKET_qGetTIBAddr,
2074   PACKET_qGetTLSAddr,
2075   PACKET_qSupported,
2076   PACKET_qTStatus,
2077   PACKET_QPassSignals,
2078   PACKET_QCatchSyscalls,
2079   PACKET_QProgramSignals,
2080   PACKET_QSetWorkingDir,
2081   PACKET_QStartupWithShell,
2082   PACKET_QEnvironmentHexEncoded,
2083   PACKET_QEnvironmentReset,
2084   PACKET_QEnvironmentUnset,
2085   PACKET_qCRC,
2086   PACKET_qSearch_memory,
2087   PACKET_vAttach,
2088   PACKET_vRun,
2089   PACKET_QStartNoAckMode,
2090   PACKET_vKill,
2091   PACKET_qXfer_siginfo_read,
2092   PACKET_qXfer_siginfo_write,
2093   PACKET_qAttached,
2094 
2095   /* Support for conditional tracepoints.  */
2096   PACKET_ConditionalTracepoints,
2097 
2098   /* Support for target-side breakpoint conditions.  */
2099   PACKET_ConditionalBreakpoints,
2100 
2101   /* Support for target-side breakpoint commands.  */
2102   PACKET_BreakpointCommands,
2103 
2104   /* Support for fast tracepoints.  */
2105   PACKET_FastTracepoints,
2106 
2107   /* Support for static tracepoints.  */
2108   PACKET_StaticTracepoints,
2109 
2110   /* Support for installing tracepoints while a trace experiment is
2111      running.  */
2112   PACKET_InstallInTrace,
2113 
2114   PACKET_bc,
2115   PACKET_bs,
2116   PACKET_TracepointSource,
2117   PACKET_QAllow,
2118   PACKET_qXfer_fdpic,
2119   PACKET_QDisableRandomization,
2120   PACKET_QAgent,
2121   PACKET_QTBuffer_size,
2122   PACKET_Qbtrace_off,
2123   PACKET_Qbtrace_bts,
2124   PACKET_Qbtrace_pt,
2125   PACKET_qXfer_btrace,
2126 
2127   /* Support for the QNonStop packet.  */
2128   PACKET_QNonStop,
2129 
2130   /* Support for the QThreadEvents packet.  */
2131   PACKET_QThreadEvents,
2132 
2133   /* Support for multi-process extensions.  */
2134   PACKET_multiprocess_feature,
2135 
2136   /* Support for enabling and disabling tracepoints while a trace
2137      experiment is running.  */
2138   PACKET_EnableDisableTracepoints_feature,
2139 
2140   /* Support for collecting strings using the tracenz bytecode.  */
2141   PACKET_tracenz_feature,
2142 
2143   /* Support for continuing to run a trace experiment while GDB is
2144      disconnected.  */
2145   PACKET_DisconnectedTracing_feature,
2146 
2147   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
2148   PACKET_augmented_libraries_svr4_read_feature,
2149 
2150   /* Support for the qXfer:btrace-conf:read packet.  */
2151   PACKET_qXfer_btrace_conf,
2152 
2153   /* Support for the Qbtrace-conf:bts:size packet.  */
2154   PACKET_Qbtrace_conf_bts_size,
2155 
2156   /* Support for swbreak+ feature.  */
2157   PACKET_swbreak_feature,
2158 
2159   /* Support for hwbreak+ feature.  */
2160   PACKET_hwbreak_feature,
2161 
2162   /* Support for fork events.  */
2163   PACKET_fork_event_feature,
2164 
2165   /* Support for vfork events.  */
2166   PACKET_vfork_event_feature,
2167 
2168   /* Support for the Qbtrace-conf:pt:size packet.  */
2169   PACKET_Qbtrace_conf_pt_size,
2170 
2171   /* Support for exec events.  */
2172   PACKET_exec_event_feature,
2173 
2174   /* Support for query supported vCont actions.  */
2175   PACKET_vContSupported,
2176 
2177   /* Support remote CTRL-C.  */
2178   PACKET_vCtrlC,
2179 
2180   /* Support TARGET_WAITKIND_NO_RESUMED.  */
2181   PACKET_no_resumed,
2182 
2183   /* Support for memory tagging, allocation tag fetch/store
2184      packets and the tag violation stop replies.  */
2185   PACKET_memory_tagging_feature,
2186 
2187   PACKET_MAX
2188 };
2189 
2190 /* FIXME: needs to be per-remote-target.  Ignoring this for now,
2191    assuming all remote targets are the same server (thus all support
2192    the same packets).  */
2193 static struct packet_config remote_protocol_packets[PACKET_MAX];
2194 
2195 /* Returns the packet's corresponding "set remote foo-packet" command
2196    state.  See struct packet_config for more details.  */
2197 
2198 static enum auto_boolean
2199 packet_set_cmd_state (int packet)
2200 {
2201   return remote_protocol_packets[packet].detect;
2202 }
2203 
2204 /* Returns whether a given packet or feature is supported.  This takes
2205    into account the state of the corresponding "set remote foo-packet"
2206    command, which may be used to bypass auto-detection.  */
2207 
2208 static enum packet_support
2209 packet_config_support (struct packet_config *config)
2210 {
2211   switch (config->detect)
2212     {
2213     case AUTO_BOOLEAN_TRUE:
2214       return PACKET_ENABLE;
2215     case AUTO_BOOLEAN_FALSE:
2216       return PACKET_DISABLE;
2217     case AUTO_BOOLEAN_AUTO:
2218       return config->support;
2219     default:
2220       gdb_assert_not_reached (_("bad switch"));
2221     }
2222 }
2223 
2224 /* Same as packet_config_support, but takes the packet's enum value as
2225    argument.  */
2226 
2227 static enum packet_support
2228 packet_support (int packet)
2229 {
2230   struct packet_config *config = &remote_protocol_packets[packet];
2231 
2232   return packet_config_support (config);
2233 }
2234 
2235 static void
2236 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2237 				 struct cmd_list_element *c,
2238 				 const char *value)
2239 {
2240   struct packet_config *packet;
2241 
2242   for (packet = remote_protocol_packets;
2243        packet < &remote_protocol_packets[PACKET_MAX];
2244        packet++)
2245     {
2246       if (&packet->detect == c->var)
2247 	{
2248 	  show_packet_config_cmd (packet);
2249 	  return;
2250 	}
2251     }
2252   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
2253 		  c->name);
2254 }
2255 
2256 /* Should we try one of the 'Z' requests?  */
2257 
2258 enum Z_packet_type
2259 {
2260   Z_PACKET_SOFTWARE_BP,
2261   Z_PACKET_HARDWARE_BP,
2262   Z_PACKET_WRITE_WP,
2263   Z_PACKET_READ_WP,
2264   Z_PACKET_ACCESS_WP,
2265   NR_Z_PACKET_TYPES
2266 };
2267 
2268 /* For compatibility with older distributions.  Provide a ``set remote
2269    Z-packet ...'' command that updates all the Z packet types.  */
2270 
2271 static enum auto_boolean remote_Z_packet_detect;
2272 
2273 static void
2274 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
2275 				  struct cmd_list_element *c)
2276 {
2277   int i;
2278 
2279   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2280     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
2281 }
2282 
2283 static void
2284 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2285 				   struct cmd_list_element *c,
2286 				   const char *value)
2287 {
2288   int i;
2289 
2290   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2291     {
2292       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
2293     }
2294 }
2295 
2296 /* Returns true if the multi-process extensions are in effect.  */
2297 
2298 static int
2299 remote_multi_process_p (struct remote_state *rs)
2300 {
2301   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2302 }
2303 
2304 /* Returns true if fork events are supported.  */
2305 
2306 static int
2307 remote_fork_event_p (struct remote_state *rs)
2308 {
2309   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2310 }
2311 
2312 /* Returns true if vfork events are supported.  */
2313 
2314 static int
2315 remote_vfork_event_p (struct remote_state *rs)
2316 {
2317   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2318 }
2319 
2320 /* Returns true if exec events are supported.  */
2321 
2322 static int
2323 remote_exec_event_p (struct remote_state *rs)
2324 {
2325   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2326 }
2327 
2328 /* Returns true if memory tagging is supported, false otherwise.  */
2329 
2330 static bool
2331 remote_memory_tagging_p ()
2332 {
2333   return packet_support (PACKET_memory_tagging_feature) == PACKET_ENABLE;
2334 }
2335 
2336 /* Insert fork catchpoint target routine.  If fork events are enabled
2337    then return success, nothing more to do.  */
2338 
2339 int
2340 remote_target::insert_fork_catchpoint (int pid)
2341 {
2342   struct remote_state *rs = get_remote_state ();
2343 
2344   return !remote_fork_event_p (rs);
2345 }
2346 
2347 /* Remove fork catchpoint target routine.  Nothing to do, just
2348    return success.  */
2349 
2350 int
2351 remote_target::remove_fork_catchpoint (int pid)
2352 {
2353   return 0;
2354 }
2355 
2356 /* Insert vfork catchpoint target routine.  If vfork events are enabled
2357    then return success, nothing more to do.  */
2358 
2359 int
2360 remote_target::insert_vfork_catchpoint (int pid)
2361 {
2362   struct remote_state *rs = get_remote_state ();
2363 
2364   return !remote_vfork_event_p (rs);
2365 }
2366 
2367 /* Remove vfork catchpoint target routine.  Nothing to do, just
2368    return success.  */
2369 
2370 int
2371 remote_target::remove_vfork_catchpoint (int pid)
2372 {
2373   return 0;
2374 }
2375 
2376 /* Insert exec catchpoint target routine.  If exec events are
2377    enabled, just return success.  */
2378 
2379 int
2380 remote_target::insert_exec_catchpoint (int pid)
2381 {
2382   struct remote_state *rs = get_remote_state ();
2383 
2384   return !remote_exec_event_p (rs);
2385 }
2386 
2387 /* Remove exec catchpoint target routine.  Nothing to do, just
2388    return success.  */
2389 
2390 int
2391 remote_target::remove_exec_catchpoint (int pid)
2392 {
2393   return 0;
2394 }
2395 
2396 
2397 
2398 /* Take advantage of the fact that the TID field is not used, to tag
2399    special ptids with it set to != 0.  */
2400 static const ptid_t magic_null_ptid (42000, -1, 1);
2401 static const ptid_t not_sent_ptid (42000, -2, 1);
2402 static const ptid_t any_thread_ptid (42000, 0, 1);
2403 
2404 /* Find out if the stub attached to PID (and hence GDB should offer to
2405    detach instead of killing it when bailing out).  */
2406 
2407 int
2408 remote_target::remote_query_attached (int pid)
2409 {
2410   struct remote_state *rs = get_remote_state ();
2411   size_t size = get_remote_packet_size ();
2412 
2413   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
2414     return 0;
2415 
2416   if (remote_multi_process_p (rs))
2417     xsnprintf (rs->buf.data (), size, "qAttached:%x", pid);
2418   else
2419     xsnprintf (rs->buf.data (), size, "qAttached");
2420 
2421   putpkt (rs->buf);
2422   getpkt (&rs->buf, 0);
2423 
2424   switch (packet_ok (rs->buf,
2425 		     &remote_protocol_packets[PACKET_qAttached]))
2426     {
2427     case PACKET_OK:
2428       if (strcmp (rs->buf.data (), "1") == 0)
2429 	return 1;
2430       break;
2431     case PACKET_ERROR:
2432       warning (_("Remote failure reply: %s"), rs->buf.data ());
2433       break;
2434     case PACKET_UNKNOWN:
2435       break;
2436     }
2437 
2438   return 0;
2439 }
2440 
2441 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
2442    has been invented by GDB, instead of reported by the target.  Since
2443    we can be connected to a remote system before before knowing about
2444    any inferior, mark the target with execution when we find the first
2445    inferior.  If ATTACHED is 1, then we had just attached to this
2446    inferior.  If it is 0, then we just created this inferior.  If it
2447    is -1, then try querying the remote stub to find out if it had
2448    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
2449    attempt to open this inferior's executable as the main executable
2450    if no main executable is open already.  */
2451 
2452 inferior *
2453 remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached,
2454 				    int try_open_exec)
2455 {
2456   struct inferior *inf;
2457 
2458   /* Check whether this process we're learning about is to be
2459      considered attached, or if is to be considered to have been
2460      spawned by the stub.  */
2461   if (attached == -1)
2462     attached = remote_query_attached (pid);
2463 
2464   if (gdbarch_has_global_solist (target_gdbarch ()))
2465     {
2466       /* If the target shares code across all inferiors, then every
2467 	 attach adds a new inferior.  */
2468       inf = add_inferior (pid);
2469 
2470       /* ... and every inferior is bound to the same program space.
2471 	 However, each inferior may still have its own address
2472 	 space.  */
2473       inf->aspace = maybe_new_address_space ();
2474       inf->pspace = current_program_space;
2475     }
2476   else
2477     {
2478       /* In the traditional debugging scenario, there's a 1-1 match
2479 	 between program/address spaces.  We simply bind the inferior
2480 	 to the program space's address space.  */
2481       inf = current_inferior ();
2482 
2483       /* However, if the current inferior is already bound to a
2484 	 process, find some other empty inferior.  */
2485       if (inf->pid != 0)
2486 	{
2487 	  inf = nullptr;
2488 	  for (inferior *it : all_inferiors ())
2489 	    if (it->pid == 0)
2490 	      {
2491 		inf = it;
2492 		break;
2493 	      }
2494 	}
2495       if (inf == nullptr)
2496 	{
2497 	  /* Since all inferiors were already bound to a process, add
2498 	     a new inferior.  */
2499 	  inf = add_inferior_with_spaces ();
2500 	}
2501       switch_to_inferior_no_thread (inf);
2502       inf->push_target (this);
2503       inferior_appeared (inf, pid);
2504     }
2505 
2506   inf->attach_flag = attached;
2507   inf->fake_pid_p = fake_pid_p;
2508 
2509   /* If no main executable is currently open then attempt to
2510      open the file that was executed to create this inferior.  */
2511   if (try_open_exec && get_exec_file (0) == NULL)
2512     exec_file_locate_attach (pid, 0, 1);
2513 
2514   /* Check for exec file mismatch, and let the user solve it.  */
2515   validate_exec_file (1);
2516 
2517   return inf;
2518 }
2519 
2520 static remote_thread_info *get_remote_thread_info (thread_info *thread);
2521 static remote_thread_info *get_remote_thread_info (remote_target *target,
2522 						   ptid_t ptid);
2523 
2524 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
2525    according to RUNNING.  */
2526 
2527 thread_info *
2528 remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
2529 {
2530   struct remote_state *rs = get_remote_state ();
2531   struct thread_info *thread;
2532 
2533   /* GDB historically didn't pull threads in the initial connection
2534      setup.  If the remote target doesn't even have a concept of
2535      threads (e.g., a bare-metal target), even if internally we
2536      consider that a single-threaded target, mentioning a new thread
2537      might be confusing to the user.  Be silent then, preserving the
2538      age old behavior.  */
2539   if (rs->starting_up)
2540     thread = add_thread_silent (this, ptid);
2541   else
2542     thread = add_thread (this, ptid);
2543 
2544   /* We start by assuming threads are resumed.  That state then gets updated
2545      when we process a matching stop reply.  */
2546   get_remote_thread_info (thread)->set_resumed ();
2547 
2548   set_executing (this, ptid, executing);
2549   set_running (this, ptid, running);
2550 
2551   return thread;
2552 }
2553 
2554 /* Come here when we learn about a thread id from the remote target.
2555    It may be the first time we hear about such thread, so take the
2556    opportunity to add it to GDB's thread list.  In case this is the
2557    first time we're noticing its corresponding inferior, add it to
2558    GDB's inferior list as well.  EXECUTING indicates whether the
2559    thread is (internally) executing or stopped.  */
2560 
2561 void
2562 remote_target::remote_notice_new_inferior (ptid_t currthread, bool executing)
2563 {
2564   /* In non-stop mode, we assume new found threads are (externally)
2565      running until proven otherwise with a stop reply.  In all-stop,
2566      we can only get here if all threads are stopped.  */
2567   bool running = target_is_non_stop_p ();
2568 
2569   /* If this is a new thread, add it to GDB's thread list.
2570      If we leave it up to WFI to do this, bad things will happen.  */
2571 
2572   thread_info *tp = find_thread_ptid (this, currthread);
2573   if (tp != NULL && tp->state == THREAD_EXITED)
2574     {
2575       /* We're seeing an event on a thread id we knew had exited.
2576 	 This has to be a new thread reusing the old id.  Add it.  */
2577       remote_add_thread (currthread, running, executing);
2578       return;
2579     }
2580 
2581   if (!in_thread_list (this, currthread))
2582     {
2583       struct inferior *inf = NULL;
2584       int pid = currthread.pid ();
2585 
2586       if (inferior_ptid.is_pid ()
2587 	  && pid == inferior_ptid.pid ())
2588 	{
2589 	  /* inferior_ptid has no thread member yet.  This can happen
2590 	     with the vAttach -> remote_wait,"TAAthread:" path if the
2591 	     stub doesn't support qC.  This is the first stop reported
2592 	     after an attach, so this is the main thread.  Update the
2593 	     ptid in the thread list.  */
2594 	  if (in_thread_list (this, ptid_t (pid)))
2595 	    thread_change_ptid (this, inferior_ptid, currthread);
2596 	  else
2597 	    {
2598 	      thread_info *thr
2599 		= remote_add_thread (currthread, running, executing);
2600 	      switch_to_thread (thr);
2601 	    }
2602 	  return;
2603 	}
2604 
2605       if (magic_null_ptid == inferior_ptid)
2606 	{
2607 	  /* inferior_ptid is not set yet.  This can happen with the
2608 	     vRun -> remote_wait,"TAAthread:" path if the stub
2609 	     doesn't support qC.  This is the first stop reported
2610 	     after an attach, so this is the main thread.  Update the
2611 	     ptid in the thread list.  */
2612 	  thread_change_ptid (this, inferior_ptid, currthread);
2613 	  return;
2614 	}
2615 
2616       /* When connecting to a target remote, or to a target
2617 	 extended-remote which already was debugging an inferior, we
2618 	 may not know about it yet.  Add it before adding its child
2619 	 thread, so notifications are emitted in a sensible order.  */
2620       if (find_inferior_pid (this, currthread.pid ()) == NULL)
2621 	{
2622 	  struct remote_state *rs = get_remote_state ();
2623 	  bool fake_pid_p = !remote_multi_process_p (rs);
2624 
2625 	  inf = remote_add_inferior (fake_pid_p,
2626 				     currthread.pid (), -1, 1);
2627 	}
2628 
2629       /* This is really a new thread.  Add it.  */
2630       thread_info *new_thr
2631 	= remote_add_thread (currthread, running, executing);
2632 
2633       /* If we found a new inferior, let the common code do whatever
2634 	 it needs to with it (e.g., read shared libraries, insert
2635 	 breakpoints), unless we're just setting up an all-stop
2636 	 connection.  */
2637       if (inf != NULL)
2638 	{
2639 	  struct remote_state *rs = get_remote_state ();
2640 
2641 	  if (!rs->starting_up)
2642 	    notice_new_inferior (new_thr, executing, 0);
2643 	}
2644     }
2645 }
2646 
2647 /* Return THREAD's private thread data, creating it if necessary.  */
2648 
2649 static remote_thread_info *
2650 get_remote_thread_info (thread_info *thread)
2651 {
2652   gdb_assert (thread != NULL);
2653 
2654   if (thread->priv == NULL)
2655     thread->priv.reset (new remote_thread_info);
2656 
2657   return static_cast<remote_thread_info *> (thread->priv.get ());
2658 }
2659 
2660 /* Return PTID's private thread data, creating it if necessary.  */
2661 
2662 static remote_thread_info *
2663 get_remote_thread_info (remote_target *target, ptid_t ptid)
2664 {
2665   thread_info *thr = find_thread_ptid (target, ptid);
2666   return get_remote_thread_info (thr);
2667 }
2668 
2669 /* Call this function as a result of
2670    1) A halt indication (T packet) containing a thread id
2671    2) A direct query of currthread
2672    3) Successful execution of set thread */
2673 
2674 static void
2675 record_currthread (struct remote_state *rs, ptid_t currthread)
2676 {
2677   rs->general_thread = currthread;
2678 }
2679 
2680 /* If 'QPassSignals' is supported, tell the remote stub what signals
2681    it can simply pass through to the inferior without reporting.  */
2682 
2683 void
2684 remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
2685 {
2686   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2687     {
2688       char *pass_packet, *p;
2689       int count = 0;
2690       struct remote_state *rs = get_remote_state ();
2691 
2692       gdb_assert (pass_signals.size () < 256);
2693       for (size_t i = 0; i < pass_signals.size (); i++)
2694 	{
2695 	  if (pass_signals[i])
2696 	    count++;
2697 	}
2698       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2699       strcpy (pass_packet, "QPassSignals:");
2700       p = pass_packet + strlen (pass_packet);
2701       for (size_t i = 0; i < pass_signals.size (); i++)
2702 	{
2703 	  if (pass_signals[i])
2704 	    {
2705 	      if (i >= 16)
2706 		*p++ = tohex (i >> 4);
2707 	      *p++ = tohex (i & 15);
2708 	      if (count)
2709 		*p++ = ';';
2710 	      else
2711 		break;
2712 	      count--;
2713 	    }
2714 	}
2715       *p = 0;
2716       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2717 	{
2718 	  putpkt (pass_packet);
2719 	  getpkt (&rs->buf, 0);
2720 	  packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2721 	  xfree (rs->last_pass_packet);
2722 	  rs->last_pass_packet = pass_packet;
2723 	}
2724       else
2725 	xfree (pass_packet);
2726     }
2727 }
2728 
2729 /* If 'QCatchSyscalls' is supported, tell the remote stub
2730    to report syscalls to GDB.  */
2731 
2732 int
2733 remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2734 				       gdb::array_view<const int> syscall_counts)
2735 {
2736   const char *catch_packet;
2737   enum packet_result result;
2738   int n_sysno = 0;
2739 
2740   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2741     {
2742       /* Not supported.  */
2743       return 1;
2744     }
2745 
2746   if (needed && any_count == 0)
2747     {
2748       /* Count how many syscalls are to be caught.  */
2749       for (size_t i = 0; i < syscall_counts.size (); i++)
2750 	{
2751 	  if (syscall_counts[i] != 0)
2752 	    n_sysno++;
2753 	}
2754     }
2755 
2756   remote_debug_printf ("pid %d needed %d any_count %d n_sysno %d",
2757 		       pid, needed, any_count, n_sysno);
2758 
2759   std::string built_packet;
2760   if (needed)
2761     {
2762       /* Prepare a packet with the sysno list, assuming max 8+1
2763 	 characters for a sysno.  If the resulting packet size is too
2764 	 big, fallback on the non-selective packet.  */
2765       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2766       built_packet.reserve (maxpktsz);
2767       built_packet = "QCatchSyscalls:1";
2768       if (any_count == 0)
2769 	{
2770 	  /* Add in each syscall to be caught.  */
2771 	  for (size_t i = 0; i < syscall_counts.size (); i++)
2772 	    {
2773 	      if (syscall_counts[i] != 0)
2774 		string_appendf (built_packet, ";%zx", i);
2775 	    }
2776 	}
2777       if (built_packet.size () > get_remote_packet_size ())
2778 	{
2779 	  /* catch_packet too big.  Fallback to less efficient
2780 	     non selective mode, with GDB doing the filtering.  */
2781 	  catch_packet = "QCatchSyscalls:1";
2782 	}
2783       else
2784 	catch_packet = built_packet.c_str ();
2785     }
2786   else
2787     catch_packet = "QCatchSyscalls:0";
2788 
2789   struct remote_state *rs = get_remote_state ();
2790 
2791   putpkt (catch_packet);
2792   getpkt (&rs->buf, 0);
2793   result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2794   if (result == PACKET_OK)
2795     return 0;
2796   else
2797     return -1;
2798 }
2799 
2800 /* If 'QProgramSignals' is supported, tell the remote stub what
2801    signals it should pass through to the inferior when detaching.  */
2802 
2803 void
2804 remote_target::program_signals (gdb::array_view<const unsigned char> signals)
2805 {
2806   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2807     {
2808       char *packet, *p;
2809       int count = 0;
2810       struct remote_state *rs = get_remote_state ();
2811 
2812       gdb_assert (signals.size () < 256);
2813       for (size_t i = 0; i < signals.size (); i++)
2814 	{
2815 	  if (signals[i])
2816 	    count++;
2817 	}
2818       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2819       strcpy (packet, "QProgramSignals:");
2820       p = packet + strlen (packet);
2821       for (size_t i = 0; i < signals.size (); i++)
2822 	{
2823 	  if (signal_pass_state (i))
2824 	    {
2825 	      if (i >= 16)
2826 		*p++ = tohex (i >> 4);
2827 	      *p++ = tohex (i & 15);
2828 	      if (count)
2829 		*p++ = ';';
2830 	      else
2831 		break;
2832 	      count--;
2833 	    }
2834 	}
2835       *p = 0;
2836       if (!rs->last_program_signals_packet
2837 	  || strcmp (rs->last_program_signals_packet, packet) != 0)
2838 	{
2839 	  putpkt (packet);
2840 	  getpkt (&rs->buf, 0);
2841 	  packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2842 	  xfree (rs->last_program_signals_packet);
2843 	  rs->last_program_signals_packet = packet;
2844 	}
2845       else
2846 	xfree (packet);
2847     }
2848 }
2849 
2850 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2851    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2852    thread.  If GEN is set, set the general thread, if not, then set
2853    the step/continue thread.  */
2854 void
2855 remote_target::set_thread (ptid_t ptid, int gen)
2856 {
2857   struct remote_state *rs = get_remote_state ();
2858   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2859   char *buf = rs->buf.data ();
2860   char *endbuf = buf + get_remote_packet_size ();
2861 
2862   if (state == ptid)
2863     return;
2864 
2865   *buf++ = 'H';
2866   *buf++ = gen ? 'g' : 'c';
2867   if (ptid == magic_null_ptid)
2868     xsnprintf (buf, endbuf - buf, "0");
2869   else if (ptid == any_thread_ptid)
2870     xsnprintf (buf, endbuf - buf, "0");
2871   else if (ptid == minus_one_ptid)
2872     xsnprintf (buf, endbuf - buf, "-1");
2873   else
2874     write_ptid (buf, endbuf, ptid);
2875   putpkt (rs->buf);
2876   getpkt (&rs->buf, 0);
2877   if (gen)
2878     rs->general_thread = ptid;
2879   else
2880     rs->continue_thread = ptid;
2881 }
2882 
2883 void
2884 remote_target::set_general_thread (ptid_t ptid)
2885 {
2886   set_thread (ptid, 1);
2887 }
2888 
2889 void
2890 remote_target::set_continue_thread (ptid_t ptid)
2891 {
2892   set_thread (ptid, 0);
2893 }
2894 
2895 /* Change the remote current process.  Which thread within the process
2896    ends up selected isn't important, as long as it is the same process
2897    as what INFERIOR_PTID points to.
2898 
2899    This comes from that fact that there is no explicit notion of
2900    "selected process" in the protocol.  The selected process for
2901    general operations is the process the selected general thread
2902    belongs to.  */
2903 
2904 void
2905 remote_target::set_general_process ()
2906 {
2907   struct remote_state *rs = get_remote_state ();
2908 
2909   /* If the remote can't handle multiple processes, don't bother.  */
2910   if (!remote_multi_process_p (rs))
2911     return;
2912 
2913   /* We only need to change the remote current thread if it's pointing
2914      at some other process.  */
2915   if (rs->general_thread.pid () != inferior_ptid.pid ())
2916     set_general_thread (inferior_ptid);
2917 }
2918 
2919 
2920 /* Return nonzero if this is the main thread that we made up ourselves
2921    to model non-threaded targets as single-threaded.  */
2922 
2923 static int
2924 remote_thread_always_alive (ptid_t ptid)
2925 {
2926   if (ptid == magic_null_ptid)
2927     /* The main thread is always alive.  */
2928     return 1;
2929 
2930   if (ptid.pid () != 0 && ptid.lwp () == 0)
2931     /* The main thread is always alive.  This can happen after a
2932        vAttach, if the remote side doesn't support
2933        multi-threading.  */
2934     return 1;
2935 
2936   return 0;
2937 }
2938 
2939 /* Return nonzero if the thread PTID is still alive on the remote
2940    system.  */
2941 
2942 bool
2943 remote_target::thread_alive (ptid_t ptid)
2944 {
2945   struct remote_state *rs = get_remote_state ();
2946   char *p, *endp;
2947 
2948   /* Check if this is a thread that we made up ourselves to model
2949      non-threaded targets as single-threaded.  */
2950   if (remote_thread_always_alive (ptid))
2951     return 1;
2952 
2953   p = rs->buf.data ();
2954   endp = p + get_remote_packet_size ();
2955 
2956   *p++ = 'T';
2957   write_ptid (p, endp, ptid);
2958 
2959   putpkt (rs->buf);
2960   getpkt (&rs->buf, 0);
2961   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2962 }
2963 
2964 /* Return a pointer to a thread name if we know it and NULL otherwise.
2965    The thread_info object owns the memory for the name.  */
2966 
2967 const char *
2968 remote_target::thread_name (struct thread_info *info)
2969 {
2970   if (info->priv != NULL)
2971     {
2972       const std::string &name = get_remote_thread_info (info)->name;
2973       return !name.empty () ? name.c_str () : NULL;
2974     }
2975 
2976   return NULL;
2977 }
2978 
2979 /* About these extended threadlist and threadinfo packets.  They are
2980    variable length packets but, the fields within them are often fixed
2981    length.  They are redundant enough to send over UDP as is the
2982    remote protocol in general.  There is a matching unit test module
2983    in libstub.  */
2984 
2985 /* WARNING: This threadref data structure comes from the remote O.S.,
2986    libstub protocol encoding, and remote.c.  It is not particularly
2987    changable.  */
2988 
2989 /* Right now, the internal structure is int. We want it to be bigger.
2990    Plan to fix this.  */
2991 
2992 typedef int gdb_threadref;	/* Internal GDB thread reference.  */
2993 
2994 /* gdb_ext_thread_info is an internal GDB data structure which is
2995    equivalent to the reply of the remote threadinfo packet.  */
2996 
2997 struct gdb_ext_thread_info
2998   {
2999     threadref threadid;		/* External form of thread reference.  */
3000     int active;			/* Has state interesting to GDB?
3001 				   regs, stack.  */
3002     char display[256];		/* Brief state display, name,
3003 				   blocked/suspended.  */
3004     char shortname[32];		/* To be used to name threads.  */
3005     char more_display[256];	/* Long info, statistics, queue depth,
3006 				   whatever.  */
3007   };
3008 
3009 /* The volume of remote transfers can be limited by submitting
3010    a mask containing bits specifying the desired information.
3011    Use a union of these values as the 'selection' parameter to
3012    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
3013 
3014 #define TAG_THREADID 1
3015 #define TAG_EXISTS 2
3016 #define TAG_DISPLAY 4
3017 #define TAG_THREADNAME 8
3018 #define TAG_MOREDISPLAY 16
3019 
3020 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
3021 
3022 static const char *unpack_nibble (const char *buf, int *val);
3023 
3024 static const char *unpack_byte (const char *buf, int *value);
3025 
3026 static char *pack_int (char *buf, int value);
3027 
3028 static const char *unpack_int (const char *buf, int *value);
3029 
3030 static const char *unpack_string (const char *src, char *dest, int length);
3031 
3032 static char *pack_threadid (char *pkt, threadref *id);
3033 
3034 static const char *unpack_threadid (const char *inbuf, threadref *id);
3035 
3036 void int_to_threadref (threadref *id, int value);
3037 
3038 static int threadref_to_int (threadref *ref);
3039 
3040 static void copy_threadref (threadref *dest, threadref *src);
3041 
3042 static int threadmatch (threadref *dest, threadref *src);
3043 
3044 static char *pack_threadinfo_request (char *pkt, int mode,
3045 				      threadref *id);
3046 
3047 static char *pack_threadlist_request (char *pkt, int startflag,
3048 				      int threadcount,
3049 				      threadref *nextthread);
3050 
3051 static int remote_newthread_step (threadref *ref, void *context);
3052 
3053 
3054 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
3055    buffer we're allowed to write to.  Returns
3056    BUF+CHARACTERS_WRITTEN.  */
3057 
3058 char *
3059 remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
3060 {
3061   int pid, tid;
3062   struct remote_state *rs = get_remote_state ();
3063 
3064   if (remote_multi_process_p (rs))
3065     {
3066       pid = ptid.pid ();
3067       if (pid < 0)
3068 	buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
3069       else
3070 	buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
3071     }
3072   tid = ptid.lwp ();
3073   if (tid < 0)
3074     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
3075   else
3076     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
3077 
3078   return buf;
3079 }
3080 
3081 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
3082    last parsed char.  Returns null_ptid if no thread id is found, and
3083    throws an error if the thread id has an invalid format.  */
3084 
3085 static ptid_t
3086 read_ptid (const char *buf, const char **obuf)
3087 {
3088   const char *p = buf;
3089   const char *pp;
3090   ULONGEST pid = 0, tid = 0;
3091 
3092   if (*p == 'p')
3093     {
3094       /* Multi-process ptid.  */
3095       pp = unpack_varlen_hex (p + 1, &pid);
3096       if (*pp != '.')
3097 	error (_("invalid remote ptid: %s"), p);
3098 
3099       p = pp;
3100       pp = unpack_varlen_hex (p + 1, &tid);
3101       if (obuf)
3102 	*obuf = pp;
3103       return ptid_t (pid, tid, 0);
3104     }
3105 
3106   /* No multi-process.  Just a tid.  */
3107   pp = unpack_varlen_hex (p, &tid);
3108 
3109   /* Return null_ptid when no thread id is found.  */
3110   if (p == pp)
3111     {
3112       if (obuf)
3113 	*obuf = pp;
3114       return null_ptid;
3115     }
3116 
3117   /* Since the stub is not sending a process id, then default to
3118      what's in inferior_ptid, unless it's null at this point.  If so,
3119      then since there's no way to know the pid of the reported
3120      threads, use the magic number.  */
3121   if (inferior_ptid == null_ptid)
3122     pid = magic_null_ptid.pid ();
3123   else
3124     pid = inferior_ptid.pid ();
3125 
3126   if (obuf)
3127     *obuf = pp;
3128   return ptid_t (pid, tid, 0);
3129 }
3130 
3131 static int
3132 stubhex (int ch)
3133 {
3134   if (ch >= 'a' && ch <= 'f')
3135     return ch - 'a' + 10;
3136   if (ch >= '0' && ch <= '9')
3137     return ch - '0';
3138   if (ch >= 'A' && ch <= 'F')
3139     return ch - 'A' + 10;
3140   return -1;
3141 }
3142 
3143 static int
3144 stub_unpack_int (const char *buff, int fieldlength)
3145 {
3146   int nibble;
3147   int retval = 0;
3148 
3149   while (fieldlength)
3150     {
3151       nibble = stubhex (*buff++);
3152       retval |= nibble;
3153       fieldlength--;
3154       if (fieldlength)
3155 	retval = retval << 4;
3156     }
3157   return retval;
3158 }
3159 
3160 static const char *
3161 unpack_nibble (const char *buf, int *val)
3162 {
3163   *val = fromhex (*buf++);
3164   return buf;
3165 }
3166 
3167 static const char *
3168 unpack_byte (const char *buf, int *value)
3169 {
3170   *value = stub_unpack_int (buf, 2);
3171   return buf + 2;
3172 }
3173 
3174 static char *
3175 pack_int (char *buf, int value)
3176 {
3177   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3178   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3179   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3180   buf = pack_hex_byte (buf, (value & 0xff));
3181   return buf;
3182 }
3183 
3184 static const char *
3185 unpack_int (const char *buf, int *value)
3186 {
3187   *value = stub_unpack_int (buf, 8);
3188   return buf + 8;
3189 }
3190 
3191 #if 0			/* Currently unused, uncomment when needed.  */
3192 static char *pack_string (char *pkt, char *string);
3193 
3194 static char *
3195 pack_string (char *pkt, char *string)
3196 {
3197   char ch;
3198   int len;
3199 
3200   len = strlen (string);
3201   if (len > 200)
3202     len = 200;		/* Bigger than most GDB packets, junk???  */
3203   pkt = pack_hex_byte (pkt, len);
3204   while (len-- > 0)
3205     {
3206       ch = *string++;
3207       if ((ch == '\0') || (ch == '#'))
3208 	ch = '*';		/* Protect encapsulation.  */
3209       *pkt++ = ch;
3210     }
3211   return pkt;
3212 }
3213 #endif /* 0 (unused) */
3214 
3215 static const char *
3216 unpack_string (const char *src, char *dest, int length)
3217 {
3218   while (length--)
3219     *dest++ = *src++;
3220   *dest = '\0';
3221   return src;
3222 }
3223 
3224 static char *
3225 pack_threadid (char *pkt, threadref *id)
3226 {
3227   char *limit;
3228   unsigned char *altid;
3229 
3230   altid = (unsigned char *) id;
3231   limit = pkt + BUF_THREAD_ID_SIZE;
3232   while (pkt < limit)
3233     pkt = pack_hex_byte (pkt, *altid++);
3234   return pkt;
3235 }
3236 
3237 
3238 static const char *
3239 unpack_threadid (const char *inbuf, threadref *id)
3240 {
3241   char *altref;
3242   const char *limit = inbuf + BUF_THREAD_ID_SIZE;
3243   int x, y;
3244 
3245   altref = (char *) id;
3246 
3247   while (inbuf < limit)
3248     {
3249       x = stubhex (*inbuf++);
3250       y = stubhex (*inbuf++);
3251       *altref++ = (x << 4) | y;
3252     }
3253   return inbuf;
3254 }
3255 
3256 /* Externally, threadrefs are 64 bits but internally, they are still
3257    ints.  This is due to a mismatch of specifications.  We would like
3258    to use 64bit thread references internally.  This is an adapter
3259    function.  */
3260 
3261 void
3262 int_to_threadref (threadref *id, int value)
3263 {
3264   unsigned char *scan;
3265 
3266   scan = (unsigned char *) id;
3267   {
3268     int i = 4;
3269     while (i--)
3270       *scan++ = 0;
3271   }
3272   *scan++ = (value >> 24) & 0xff;
3273   *scan++ = (value >> 16) & 0xff;
3274   *scan++ = (value >> 8) & 0xff;
3275   *scan++ = (value & 0xff);
3276 }
3277 
3278 static int
3279 threadref_to_int (threadref *ref)
3280 {
3281   int i, value = 0;
3282   unsigned char *scan;
3283 
3284   scan = *ref;
3285   scan += 4;
3286   i = 4;
3287   while (i-- > 0)
3288     value = (value << 8) | ((*scan++) & 0xff);
3289   return value;
3290 }
3291 
3292 static void
3293 copy_threadref (threadref *dest, threadref *src)
3294 {
3295   int i;
3296   unsigned char *csrc, *cdest;
3297 
3298   csrc = (unsigned char *) src;
3299   cdest = (unsigned char *) dest;
3300   i = 8;
3301   while (i--)
3302     *cdest++ = *csrc++;
3303 }
3304 
3305 static int
3306 threadmatch (threadref *dest, threadref *src)
3307 {
3308   /* Things are broken right now, so just assume we got a match.  */
3309 #if 0
3310   unsigned char *srcp, *destp;
3311   int i, result;
3312   srcp = (char *) src;
3313   destp = (char *) dest;
3314 
3315   result = 1;
3316   while (i-- > 0)
3317     result &= (*srcp++ == *destp++) ? 1 : 0;
3318   return result;
3319 #endif
3320   return 1;
3321 }
3322 
3323 /*
3324    threadid:1,        # always request threadid
3325    context_exists:2,
3326    display:4,
3327    unique_name:8,
3328    more_display:16
3329  */
3330 
3331 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
3332 
3333 static char *
3334 pack_threadinfo_request (char *pkt, int mode, threadref *id)
3335 {
3336   *pkt++ = 'q';				/* Info Query */
3337   *pkt++ = 'P';				/* process or thread info */
3338   pkt = pack_int (pkt, mode);		/* mode */
3339   pkt = pack_threadid (pkt, id);	/* threadid */
3340   *pkt = '\0';				/* terminate */
3341   return pkt;
3342 }
3343 
3344 /* These values tag the fields in a thread info response packet.  */
3345 /* Tagging the fields allows us to request specific fields and to
3346    add more fields as time goes by.  */
3347 
3348 #define TAG_THREADID 1		/* Echo the thread identifier.  */
3349 #define TAG_EXISTS 2		/* Is this process defined enough to
3350 				   fetch registers and its stack?  */
3351 #define TAG_DISPLAY 4		/* A short thing maybe to put on a window */
3352 #define TAG_THREADNAME 8	/* string, maps 1-to-1 with a thread is.  */
3353 #define TAG_MOREDISPLAY 16	/* Whatever the kernel wants to say about
3354 				   the process.  */
3355 
3356 int
3357 remote_target::remote_unpack_thread_info_response (const char *pkt,
3358 						   threadref *expectedref,
3359 						   gdb_ext_thread_info *info)
3360 {
3361   struct remote_state *rs = get_remote_state ();
3362   int mask, length;
3363   int tag;
3364   threadref ref;
3365   const char *limit = pkt + rs->buf.size (); /* Plausible parsing limit.  */
3366   int retval = 1;
3367 
3368   /* info->threadid = 0; FIXME: implement zero_threadref.  */
3369   info->active = 0;
3370   info->display[0] = '\0';
3371   info->shortname[0] = '\0';
3372   info->more_display[0] = '\0';
3373 
3374   /* Assume the characters indicating the packet type have been
3375      stripped.  */
3376   pkt = unpack_int (pkt, &mask);	/* arg mask */
3377   pkt = unpack_threadid (pkt, &ref);
3378 
3379   if (mask == 0)
3380     warning (_("Incomplete response to threadinfo request."));
3381   if (!threadmatch (&ref, expectedref))
3382     {			/* This is an answer to a different request.  */
3383       warning (_("ERROR RMT Thread info mismatch."));
3384       return 0;
3385     }
3386   copy_threadref (&info->threadid, &ref);
3387 
3388   /* Loop on tagged fields , try to bail if something goes wrong.  */
3389 
3390   /* Packets are terminated with nulls.  */
3391   while ((pkt < limit) && mask && *pkt)
3392     {
3393       pkt = unpack_int (pkt, &tag);	/* tag */
3394       pkt = unpack_byte (pkt, &length);	/* length */
3395       if (!(tag & mask))		/* Tags out of synch with mask.  */
3396 	{
3397 	  warning (_("ERROR RMT: threadinfo tag mismatch."));
3398 	  retval = 0;
3399 	  break;
3400 	}
3401       if (tag == TAG_THREADID)
3402 	{
3403 	  if (length != 16)
3404 	    {
3405 	      warning (_("ERROR RMT: length of threadid is not 16."));
3406 	      retval = 0;
3407 	      break;
3408 	    }
3409 	  pkt = unpack_threadid (pkt, &ref);
3410 	  mask = mask & ~TAG_THREADID;
3411 	  continue;
3412 	}
3413       if (tag == TAG_EXISTS)
3414 	{
3415 	  info->active = stub_unpack_int (pkt, length);
3416 	  pkt += length;
3417 	  mask = mask & ~(TAG_EXISTS);
3418 	  if (length > 8)
3419 	    {
3420 	      warning (_("ERROR RMT: 'exists' length too long."));
3421 	      retval = 0;
3422 	      break;
3423 	    }
3424 	  continue;
3425 	}
3426       if (tag == TAG_THREADNAME)
3427 	{
3428 	  pkt = unpack_string (pkt, &info->shortname[0], length);
3429 	  mask = mask & ~TAG_THREADNAME;
3430 	  continue;
3431 	}
3432       if (tag == TAG_DISPLAY)
3433 	{
3434 	  pkt = unpack_string (pkt, &info->display[0], length);
3435 	  mask = mask & ~TAG_DISPLAY;
3436 	  continue;
3437 	}
3438       if (tag == TAG_MOREDISPLAY)
3439 	{
3440 	  pkt = unpack_string (pkt, &info->more_display[0], length);
3441 	  mask = mask & ~TAG_MOREDISPLAY;
3442 	  continue;
3443 	}
3444       warning (_("ERROR RMT: unknown thread info tag."));
3445       break;			/* Not a tag we know about.  */
3446     }
3447   return retval;
3448 }
3449 
3450 int
3451 remote_target::remote_get_threadinfo (threadref *threadid,
3452 				      int fieldset,
3453 				      gdb_ext_thread_info *info)
3454 {
3455   struct remote_state *rs = get_remote_state ();
3456   int result;
3457 
3458   pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
3459   putpkt (rs->buf);
3460   getpkt (&rs->buf, 0);
3461 
3462   if (rs->buf[0] == '\0')
3463     return 0;
3464 
3465   result = remote_unpack_thread_info_response (&rs->buf[2],
3466 					       threadid, info);
3467   return result;
3468 }
3469 
3470 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
3471 
3472 static char *
3473 pack_threadlist_request (char *pkt, int startflag, int threadcount,
3474 			 threadref *nextthread)
3475 {
3476   *pkt++ = 'q';			/* info query packet */
3477   *pkt++ = 'L';			/* Process LIST or threadLIST request */
3478   pkt = pack_nibble (pkt, startflag);		/* initflag 1 bytes */
3479   pkt = pack_hex_byte (pkt, threadcount);	/* threadcount 2 bytes */
3480   pkt = pack_threadid (pkt, nextthread);	/* 64 bit thread identifier */
3481   *pkt = '\0';
3482   return pkt;
3483 }
3484 
3485 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3486 
3487 int
3488 remote_target::parse_threadlist_response (const char *pkt, int result_limit,
3489 					  threadref *original_echo,
3490 					  threadref *resultlist,
3491 					  int *doneflag)
3492 {
3493   struct remote_state *rs = get_remote_state ();
3494   int count, resultcount, done;
3495 
3496   resultcount = 0;
3497   /* Assume the 'q' and 'M chars have been stripped.  */
3498   const char *limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
3499   /* done parse past here */
3500   pkt = unpack_byte (pkt, &count);	/* count field */
3501   pkt = unpack_nibble (pkt, &done);
3502   /* The first threadid is the argument threadid.  */
3503   pkt = unpack_threadid (pkt, original_echo);	/* should match query packet */
3504   while ((count-- > 0) && (pkt < limit))
3505     {
3506       pkt = unpack_threadid (pkt, resultlist++);
3507       if (resultcount++ >= result_limit)
3508 	break;
3509     }
3510   if (doneflag)
3511     *doneflag = done;
3512   return resultcount;
3513 }
3514 
3515 /* Fetch the next batch of threads from the remote.  Returns -1 if the
3516    qL packet is not supported, 0 on error and 1 on success.  */
3517 
3518 int
3519 remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3520 				      int result_limit, int *done, int *result_count,
3521 				      threadref *threadlist)
3522 {
3523   struct remote_state *rs = get_remote_state ();
3524   int result = 1;
3525 
3526   /* Truncate result limit to be smaller than the packet size.  */
3527   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3528       >= get_remote_packet_size ())
3529     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
3530 
3531   pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3532 			   nextthread);
3533   putpkt (rs->buf);
3534   getpkt (&rs->buf, 0);
3535   if (rs->buf[0] == '\0')
3536     {
3537       /* Packet not supported.  */
3538       return -1;
3539     }
3540 
3541   *result_count =
3542     parse_threadlist_response (&rs->buf[2], result_limit,
3543 			       &rs->echo_nextthread, threadlist, done);
3544 
3545   if (!threadmatch (&rs->echo_nextthread, nextthread))
3546     {
3547       /* FIXME: This is a good reason to drop the packet.  */
3548       /* Possibly, there is a duplicate response.  */
3549       /* Possibilities :
3550 	 retransmit immediatly - race conditions
3551 	 retransmit after timeout - yes
3552 	 exit
3553 	 wait for packet, then exit
3554        */
3555       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
3556       return 0;			/* I choose simply exiting.  */
3557     }
3558   if (*result_count <= 0)
3559     {
3560       if (*done != 1)
3561 	{
3562 	  warning (_("RMT ERROR : failed to get remote thread list."));
3563 	  result = 0;
3564 	}
3565       return result;		/* break; */
3566     }
3567   if (*result_count > result_limit)
3568     {
3569       *result_count = 0;
3570       warning (_("RMT ERROR: threadlist response longer than requested."));
3571       return 0;
3572     }
3573   return result;
3574 }
3575 
3576 /* Fetch the list of remote threads, with the qL packet, and call
3577    STEPFUNCTION for each thread found.  Stops iterating and returns 1
3578    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
3579    STEPFUNCTION returns false.  If the packet is not supported,
3580    returns -1.  */
3581 
3582 int
3583 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3584 					   void *context, int looplimit)
3585 {
3586   struct remote_state *rs = get_remote_state ();
3587   int done, i, result_count;
3588   int startflag = 1;
3589   int result = 1;
3590   int loopcount = 0;
3591 
3592   done = 0;
3593   while (!done)
3594     {
3595       if (loopcount++ > looplimit)
3596 	{
3597 	  result = 0;
3598 	  warning (_("Remote fetch threadlist -infinite loop-."));
3599 	  break;
3600 	}
3601       result = remote_get_threadlist (startflag, &rs->nextthread,
3602 				      MAXTHREADLISTRESULTS,
3603 				      &done, &result_count,
3604 				      rs->resultthreadlist);
3605       if (result <= 0)
3606 	break;
3607       /* Clear for later iterations.  */
3608       startflag = 0;
3609       /* Setup to resume next batch of thread references, set nextthread.  */
3610       if (result_count >= 1)
3611 	copy_threadref (&rs->nextthread,
3612 			&rs->resultthreadlist[result_count - 1]);
3613       i = 0;
3614       while (result_count--)
3615 	{
3616 	  if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3617 	    {
3618 	      result = 0;
3619 	      break;
3620 	    }
3621 	}
3622     }
3623   return result;
3624 }
3625 
3626 /* A thread found on the remote target.  */
3627 
3628 struct thread_item
3629 {
3630   explicit thread_item (ptid_t ptid_)
3631   : ptid (ptid_)
3632   {}
3633 
3634   thread_item (thread_item &&other) = default;
3635   thread_item &operator= (thread_item &&other) = default;
3636 
3637   DISABLE_COPY_AND_ASSIGN (thread_item);
3638 
3639   /* The thread's PTID.  */
3640   ptid_t ptid;
3641 
3642   /* The thread's extra info.  */
3643   std::string extra;
3644 
3645   /* The thread's name.  */
3646   std::string name;
3647 
3648   /* The core the thread was running on.  -1 if not known.  */
3649   int core = -1;
3650 
3651   /* The thread handle associated with the thread.  */
3652   gdb::byte_vector thread_handle;
3653 };
3654 
3655 /* Context passed around to the various methods listing remote
3656    threads.  As new threads are found, they're added to the ITEMS
3657    vector.  */
3658 
3659 struct threads_listing_context
3660 {
3661   /* Return true if this object contains an entry for a thread with ptid
3662      PTID.  */
3663 
3664   bool contains_thread (ptid_t ptid) const
3665   {
3666     auto match_ptid = [&] (const thread_item &item)
3667       {
3668 	return item.ptid == ptid;
3669       };
3670 
3671     auto it = std::find_if (this->items.begin (),
3672 			    this->items.end (),
3673 			    match_ptid);
3674 
3675     return it != this->items.end ();
3676   }
3677 
3678   /* Remove the thread with ptid PTID.  */
3679 
3680   void remove_thread (ptid_t ptid)
3681   {
3682     auto match_ptid = [&] (const thread_item &item)
3683       {
3684 	return item.ptid == ptid;
3685       };
3686 
3687     auto it = std::remove_if (this->items.begin (),
3688 			      this->items.end (),
3689 			      match_ptid);
3690 
3691     if (it != this->items.end ())
3692       this->items.erase (it);
3693   }
3694 
3695   /* The threads found on the remote target.  */
3696   std::vector<thread_item> items;
3697 };
3698 
3699 static int
3700 remote_newthread_step (threadref *ref, void *data)
3701 {
3702   struct threads_listing_context *context
3703     = (struct threads_listing_context *) data;
3704   int pid = inferior_ptid.pid ();
3705   int lwp = threadref_to_int (ref);
3706   ptid_t ptid (pid, lwp);
3707 
3708   context->items.emplace_back (ptid);
3709 
3710   return 1;			/* continue iterator */
3711 }
3712 
3713 #define CRAZY_MAX_THREADS 1000
3714 
3715 ptid_t
3716 remote_target::remote_current_thread (ptid_t oldpid)
3717 {
3718   struct remote_state *rs = get_remote_state ();
3719 
3720   putpkt ("qC");
3721   getpkt (&rs->buf, 0);
3722   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3723     {
3724       const char *obuf;
3725       ptid_t result;
3726 
3727       result = read_ptid (&rs->buf[2], &obuf);
3728       if (*obuf != '\0')
3729 	remote_debug_printf ("warning: garbage in qC reply");
3730 
3731       return result;
3732     }
3733   else
3734     return oldpid;
3735 }
3736 
3737 /* List remote threads using the deprecated qL packet.  */
3738 
3739 int
3740 remote_target::remote_get_threads_with_ql (threads_listing_context *context)
3741 {
3742   if (remote_threadlist_iterator (remote_newthread_step, context,
3743 				  CRAZY_MAX_THREADS) >= 0)
3744     return 1;
3745 
3746   return 0;
3747 }
3748 
3749 #if defined(HAVE_LIBEXPAT)
3750 
3751 static void
3752 start_thread (struct gdb_xml_parser *parser,
3753 	      const struct gdb_xml_element *element,
3754 	      void *user_data,
3755 	      std::vector<gdb_xml_value> &attributes)
3756 {
3757   struct threads_listing_context *data
3758     = (struct threads_listing_context *) user_data;
3759   struct gdb_xml_value *attr;
3760 
3761   char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
3762   ptid_t ptid = read_ptid (id, NULL);
3763 
3764   data->items.emplace_back (ptid);
3765   thread_item &item = data->items.back ();
3766 
3767   attr = xml_find_attribute (attributes, "core");
3768   if (attr != NULL)
3769     item.core = *(ULONGEST *) attr->value.get ();
3770 
3771   attr = xml_find_attribute (attributes, "name");
3772   if (attr != NULL)
3773     item.name = (const char *) attr->value.get ();
3774 
3775   attr = xml_find_attribute (attributes, "handle");
3776   if (attr != NULL)
3777     item.thread_handle = hex2bin ((const char *) attr->value.get ());
3778 }
3779 
3780 static void
3781 end_thread (struct gdb_xml_parser *parser,
3782 	    const struct gdb_xml_element *element,
3783 	    void *user_data, const char *body_text)
3784 {
3785   struct threads_listing_context *data
3786     = (struct threads_listing_context *) user_data;
3787 
3788   if (body_text != NULL && *body_text != '\0')
3789     data->items.back ().extra = body_text;
3790 }
3791 
3792 const struct gdb_xml_attribute thread_attributes[] = {
3793   { "id", GDB_XML_AF_NONE, NULL, NULL },
3794   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3795   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3796   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3797   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3798 };
3799 
3800 const struct gdb_xml_element thread_children[] = {
3801   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3802 };
3803 
3804 const struct gdb_xml_element threads_children[] = {
3805   { "thread", thread_attributes, thread_children,
3806     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3807     start_thread, end_thread },
3808   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3809 };
3810 
3811 const struct gdb_xml_element threads_elements[] = {
3812   { "threads", NULL, threads_children,
3813     GDB_XML_EF_NONE, NULL, NULL },
3814   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3815 };
3816 
3817 #endif
3818 
3819 /* List remote threads using qXfer:threads:read.  */
3820 
3821 int
3822 remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
3823 {
3824 #if defined(HAVE_LIBEXPAT)
3825   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3826     {
3827       gdb::optional<gdb::char_vector> xml
3828 	= target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
3829 
3830       if (xml && (*xml)[0] != '\0')
3831 	{
3832 	  gdb_xml_parse_quick (_("threads"), "threads.dtd",
3833 			       threads_elements, xml->data (), context);
3834 	}
3835 
3836       return 1;
3837     }
3838 #endif
3839 
3840   return 0;
3841 }
3842 
3843 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3844 
3845 int
3846 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
3847 {
3848   struct remote_state *rs = get_remote_state ();
3849 
3850   if (rs->use_threadinfo_query)
3851     {
3852       const char *bufp;
3853 
3854       putpkt ("qfThreadInfo");
3855       getpkt (&rs->buf, 0);
3856       bufp = rs->buf.data ();
3857       if (bufp[0] != '\0')		/* q packet recognized */
3858 	{
3859 	  while (*bufp++ == 'm')	/* reply contains one or more TID */
3860 	    {
3861 	      do
3862 		{
3863 		  ptid_t ptid = read_ptid (bufp, &bufp);
3864 		  context->items.emplace_back (ptid);
3865 		}
3866 	      while (*bufp++ == ',');	/* comma-separated list */
3867 	      putpkt ("qsThreadInfo");
3868 	      getpkt (&rs->buf, 0);
3869 	      bufp = rs->buf.data ();
3870 	    }
3871 	  return 1;
3872 	}
3873       else
3874 	{
3875 	  /* Packet not recognized.  */
3876 	  rs->use_threadinfo_query = 0;
3877 	}
3878     }
3879 
3880   return 0;
3881 }
3882 
3883 /* Return true if INF only has one non-exited thread.  */
3884 
3885 static bool
3886 has_single_non_exited_thread (inferior *inf)
3887 {
3888   int count = 0;
3889   for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
3890     if (++count > 1)
3891       break;
3892   return count == 1;
3893 }
3894 
3895 /* Implement the to_update_thread_list function for the remote
3896    targets.  */
3897 
3898 void
3899 remote_target::update_thread_list ()
3900 {
3901   struct threads_listing_context context;
3902   int got_list = 0;
3903 
3904   /* We have a few different mechanisms to fetch the thread list.  Try
3905      them all, starting with the most preferred one first, falling
3906      back to older methods.  */
3907   if (remote_get_threads_with_qxfer (&context)
3908       || remote_get_threads_with_qthreadinfo (&context)
3909       || remote_get_threads_with_ql (&context))
3910     {
3911       got_list = 1;
3912 
3913       if (context.items.empty ()
3914 	  && remote_thread_always_alive (inferior_ptid))
3915 	{
3916 	  /* Some targets don't really support threads, but still
3917 	     reply an (empty) thread list in response to the thread
3918 	     listing packets, instead of replying "packet not
3919 	     supported".  Exit early so we don't delete the main
3920 	     thread.  */
3921 	  return;
3922 	}
3923 
3924       /* CONTEXT now holds the current thread list on the remote
3925 	 target end.  Delete GDB-side threads no longer found on the
3926 	 target.  */
3927       for (thread_info *tp : all_threads_safe ())
3928 	{
3929 	  if (tp->inf->process_target () != this)
3930 	    continue;
3931 
3932 	  if (!context.contains_thread (tp->ptid))
3933 	    {
3934 	      /* Do not remove the thread if it is the last thread in
3935 		 the inferior.  This situation happens when we have a
3936 		 pending exit process status to process.  Otherwise we
3937 		 may end up with a seemingly live inferior (i.e.  pid
3938 		 != 0) that has no threads.  */
3939 	      if (has_single_non_exited_thread (tp->inf))
3940 		continue;
3941 
3942 	      /* Not found.  */
3943 	      delete_thread (tp);
3944 	    }
3945 	}
3946 
3947       /* Remove any unreported fork child threads from CONTEXT so
3948 	 that we don't interfere with follow fork, which is where
3949 	 creation of such threads is handled.  */
3950       remove_new_fork_children (&context);
3951 
3952       /* And now add threads we don't know about yet to our list.  */
3953       for (thread_item &item : context.items)
3954 	{
3955 	  if (item.ptid != null_ptid)
3956 	    {
3957 	      /* In non-stop mode, we assume new found threads are
3958 		 executing until proven otherwise with a stop reply.
3959 		 In all-stop, we can only get here if all threads are
3960 		 stopped.  */
3961 	      bool executing = target_is_non_stop_p ();
3962 
3963 	      remote_notice_new_inferior (item.ptid, executing);
3964 
3965 	      thread_info *tp = find_thread_ptid (this, item.ptid);
3966 	      remote_thread_info *info = get_remote_thread_info (tp);
3967 	      info->core = item.core;
3968 	      info->extra = std::move (item.extra);
3969 	      info->name = std::move (item.name);
3970 	      info->thread_handle = std::move (item.thread_handle);
3971 	    }
3972 	}
3973     }
3974 
3975   if (!got_list)
3976     {
3977       /* If no thread listing method is supported, then query whether
3978 	 each known thread is alive, one by one, with the T packet.
3979 	 If the target doesn't support threads at all, then this is a
3980 	 no-op.  See remote_thread_alive.  */
3981       prune_threads ();
3982     }
3983 }
3984 
3985 /*
3986  * Collect a descriptive string about the given thread.
3987  * The target may say anything it wants to about the thread
3988  * (typically info about its blocked / runnable state, name, etc.).
3989  * This string will appear in the info threads display.
3990  *
3991  * Optional: targets are not required to implement this function.
3992  */
3993 
3994 const char *
3995 remote_target::extra_thread_info (thread_info *tp)
3996 {
3997   struct remote_state *rs = get_remote_state ();
3998   int set;
3999   threadref id;
4000   struct gdb_ext_thread_info threadinfo;
4001 
4002   if (rs->remote_desc == 0)		/* paranoia */
4003     internal_error (__FILE__, __LINE__,
4004 		    _("remote_threads_extra_info"));
4005 
4006   if (tp->ptid == magic_null_ptid
4007       || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
4008     /* This is the main thread which was added by GDB.  The remote
4009        server doesn't know about it.  */
4010     return NULL;
4011 
4012   std::string &extra = get_remote_thread_info (tp)->extra;
4013 
4014   /* If already have cached info, use it.  */
4015   if (!extra.empty ())
4016     return extra.c_str ();
4017 
4018   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
4019     {
4020       /* If we're using qXfer:threads:read, then the extra info is
4021 	 included in the XML.  So if we didn't have anything cached,
4022 	 it's because there's really no extra info.  */
4023       return NULL;
4024     }
4025 
4026   if (rs->use_threadextra_query)
4027     {
4028       char *b = rs->buf.data ();
4029       char *endb = b + get_remote_packet_size ();
4030 
4031       xsnprintf (b, endb - b, "qThreadExtraInfo,");
4032       b += strlen (b);
4033       write_ptid (b, endb, tp->ptid);
4034 
4035       putpkt (rs->buf);
4036       getpkt (&rs->buf, 0);
4037       if (rs->buf[0] != 0)
4038 	{
4039 	  extra.resize (strlen (rs->buf.data ()) / 2);
4040 	  hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
4041 	  return extra.c_str ();
4042 	}
4043     }
4044 
4045   /* If the above query fails, fall back to the old method.  */
4046   rs->use_threadextra_query = 0;
4047   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
4048     | TAG_MOREDISPLAY | TAG_DISPLAY;
4049   int_to_threadref (&id, tp->ptid.lwp ());
4050   if (remote_get_threadinfo (&id, set, &threadinfo))
4051     if (threadinfo.active)
4052       {
4053 	if (*threadinfo.shortname)
4054 	  string_appendf (extra, " Name: %s", threadinfo.shortname);
4055 	if (*threadinfo.display)
4056 	  {
4057 	    if (!extra.empty ())
4058 	      extra += ',';
4059 	    string_appendf (extra, " State: %s", threadinfo.display);
4060 	  }
4061 	if (*threadinfo.more_display)
4062 	  {
4063 	    if (!extra.empty ())
4064 	      extra += ',';
4065 	    string_appendf (extra, " Priority: %s", threadinfo.more_display);
4066 	  }
4067 	return extra.c_str ();
4068       }
4069   return NULL;
4070 }
4071 
4072 
4073 bool
4074 remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
4075 					    struct static_tracepoint_marker *marker)
4076 {
4077   struct remote_state *rs = get_remote_state ();
4078   char *p = rs->buf.data ();
4079 
4080   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
4081   p += strlen (p);
4082   p += hexnumstr (p, addr);
4083   putpkt (rs->buf);
4084   getpkt (&rs->buf, 0);
4085   p = rs->buf.data ();
4086 
4087   if (*p == 'E')
4088     error (_("Remote failure reply: %s"), p);
4089 
4090   if (*p++ == 'm')
4091     {
4092       parse_static_tracepoint_marker_definition (p, NULL, marker);
4093       return true;
4094     }
4095 
4096   return false;
4097 }
4098 
4099 std::vector<static_tracepoint_marker>
4100 remote_target::static_tracepoint_markers_by_strid (const char *strid)
4101 {
4102   struct remote_state *rs = get_remote_state ();
4103   std::vector<static_tracepoint_marker> markers;
4104   const char *p;
4105   static_tracepoint_marker marker;
4106 
4107   /* Ask for a first packet of static tracepoint marker
4108      definition.  */
4109   putpkt ("qTfSTM");
4110   getpkt (&rs->buf, 0);
4111   p = rs->buf.data ();
4112   if (*p == 'E')
4113     error (_("Remote failure reply: %s"), p);
4114 
4115   while (*p++ == 'm')
4116     {
4117       do
4118 	{
4119 	  parse_static_tracepoint_marker_definition (p, &p, &marker);
4120 
4121 	  if (strid == NULL || marker.str_id == strid)
4122 	    markers.push_back (std::move (marker));
4123 	}
4124       while (*p++ == ',');	/* comma-separated list */
4125       /* Ask for another packet of static tracepoint definition.  */
4126       putpkt ("qTsSTM");
4127       getpkt (&rs->buf, 0);
4128       p = rs->buf.data ();
4129     }
4130 
4131   return markers;
4132 }
4133 
4134 
4135 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
4136 
4137 ptid_t
4138 remote_target::get_ada_task_ptid (long lwp, long thread)
4139 {
4140   return ptid_t (inferior_ptid.pid (), lwp, 0);
4141 }
4142 
4143 
4144 /* Restart the remote side; this is an extended protocol operation.  */
4145 
4146 void
4147 remote_target::extended_remote_restart ()
4148 {
4149   struct remote_state *rs = get_remote_state ();
4150 
4151   /* Send the restart command; for reasons I don't understand the
4152      remote side really expects a number after the "R".  */
4153   xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
4154   putpkt (rs->buf);
4155 
4156   remote_fileio_reset ();
4157 }
4158 
4159 /* Clean up connection to a remote debugger.  */
4160 
4161 void
4162 remote_target::close ()
4163 {
4164   /* Make sure we leave stdin registered in the event loop.  */
4165   terminal_ours ();
4166 
4167   trace_reset_local_state ();
4168 
4169   delete this;
4170 }
4171 
4172 remote_target::~remote_target ()
4173 {
4174   struct remote_state *rs = get_remote_state ();
4175 
4176   /* Check for NULL because we may get here with a partially
4177      constructed target/connection.  */
4178   if (rs->remote_desc == nullptr)
4179     return;
4180 
4181   serial_close (rs->remote_desc);
4182 
4183   /* We are destroying the remote target, so we should discard
4184      everything of this target.  */
4185   discard_pending_stop_replies_in_queue ();
4186 
4187   if (rs->remote_async_inferior_event_token)
4188     delete_async_event_handler (&rs->remote_async_inferior_event_token);
4189 
4190   delete rs->notif_state;
4191 }
4192 
4193 /* Query the remote side for the text, data and bss offsets.  */
4194 
4195 void
4196 remote_target::get_offsets ()
4197 {
4198   struct remote_state *rs = get_remote_state ();
4199   char *buf;
4200   char *ptr;
4201   int lose, num_segments = 0, do_sections, do_segments;
4202   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
4203 
4204   if (current_program_space->symfile_object_file == NULL)
4205     return;
4206 
4207   putpkt ("qOffsets");
4208   getpkt (&rs->buf, 0);
4209   buf = rs->buf.data ();
4210 
4211   if (buf[0] == '\000')
4212     return;			/* Return silently.  Stub doesn't support
4213 				   this command.  */
4214   if (buf[0] == 'E')
4215     {
4216       warning (_("Remote failure reply: %s"), buf);
4217       return;
4218     }
4219 
4220   /* Pick up each field in turn.  This used to be done with scanf, but
4221      scanf will make trouble if CORE_ADDR size doesn't match
4222      conversion directives correctly.  The following code will work
4223      with any size of CORE_ADDR.  */
4224   text_addr = data_addr = bss_addr = 0;
4225   ptr = buf;
4226   lose = 0;
4227 
4228   if (startswith (ptr, "Text="))
4229     {
4230       ptr += 5;
4231       /* Don't use strtol, could lose on big values.  */
4232       while (*ptr && *ptr != ';')
4233 	text_addr = (text_addr << 4) + fromhex (*ptr++);
4234 
4235       if (startswith (ptr, ";Data="))
4236 	{
4237 	  ptr += 6;
4238 	  while (*ptr && *ptr != ';')
4239 	    data_addr = (data_addr << 4) + fromhex (*ptr++);
4240 	}
4241       else
4242 	lose = 1;
4243 
4244       if (!lose && startswith (ptr, ";Bss="))
4245 	{
4246 	  ptr += 5;
4247 	  while (*ptr && *ptr != ';')
4248 	    bss_addr = (bss_addr << 4) + fromhex (*ptr++);
4249 
4250 	  if (bss_addr != data_addr)
4251 	    warning (_("Target reported unsupported offsets: %s"), buf);
4252 	}
4253       else
4254 	lose = 1;
4255     }
4256   else if (startswith (ptr, "TextSeg="))
4257     {
4258       ptr += 8;
4259       /* Don't use strtol, could lose on big values.  */
4260       while (*ptr && *ptr != ';')
4261 	text_addr = (text_addr << 4) + fromhex (*ptr++);
4262       num_segments = 1;
4263 
4264       if (startswith (ptr, ";DataSeg="))
4265 	{
4266 	  ptr += 9;
4267 	  while (*ptr && *ptr != ';')
4268 	    data_addr = (data_addr << 4) + fromhex (*ptr++);
4269 	  num_segments++;
4270 	}
4271     }
4272   else
4273     lose = 1;
4274 
4275   if (lose)
4276     error (_("Malformed response to offset query, %s"), buf);
4277   else if (*ptr != '\0')
4278     warning (_("Target reported unsupported offsets: %s"), buf);
4279 
4280   objfile *objf = current_program_space->symfile_object_file;
4281   section_offsets offs = objf->section_offsets;
4282 
4283   symfile_segment_data_up data = get_symfile_segment_data (objf->obfd);
4284   do_segments = (data != NULL);
4285   do_sections = num_segments == 0;
4286 
4287   if (num_segments > 0)
4288     {
4289       segments[0] = text_addr;
4290       segments[1] = data_addr;
4291     }
4292   /* If we have two segments, we can still try to relocate everything
4293      by assuming that the .text and .data offsets apply to the whole
4294      text and data segments.  Convert the offsets given in the packet
4295      to base addresses for symfile_map_offsets_to_segments.  */
4296   else if (data != nullptr && data->segments.size () == 2)
4297     {
4298       segments[0] = data->segments[0].base + text_addr;
4299       segments[1] = data->segments[1].base + data_addr;
4300       num_segments = 2;
4301     }
4302   /* If the object file has only one segment, assume that it is text
4303      rather than data; main programs with no writable data are rare,
4304      but programs with no code are useless.  Of course the code might
4305      have ended up in the data segment... to detect that we would need
4306      the permissions here.  */
4307   else if (data && data->segments.size () == 1)
4308     {
4309       segments[0] = data->segments[0].base + text_addr;
4310       num_segments = 1;
4311     }
4312   /* There's no way to relocate by segment.  */
4313   else
4314     do_segments = 0;
4315 
4316   if (do_segments)
4317     {
4318       int ret = symfile_map_offsets_to_segments (objf->obfd,
4319 						 data.get (), offs,
4320 						 num_segments, segments);
4321 
4322       if (ret == 0 && !do_sections)
4323 	error (_("Can not handle qOffsets TextSeg "
4324 		 "response with this symbol file"));
4325 
4326       if (ret > 0)
4327 	do_sections = 0;
4328     }
4329 
4330   if (do_sections)
4331     {
4332       offs[SECT_OFF_TEXT (objf)] = text_addr;
4333 
4334       /* This is a temporary kludge to force data and bss to use the
4335 	 same offsets because that's what nlmconv does now.  The real
4336 	 solution requires changes to the stub and remote.c that I
4337 	 don't have time to do right now.  */
4338 
4339       offs[SECT_OFF_DATA (objf)] = data_addr;
4340       offs[SECT_OFF_BSS (objf)] = data_addr;
4341     }
4342 
4343   objfile_relocate (objf, offs);
4344 }
4345 
4346 /* Send interrupt_sequence to remote target.  */
4347 
4348 void
4349 remote_target::send_interrupt_sequence ()
4350 {
4351   struct remote_state *rs = get_remote_state ();
4352 
4353   if (interrupt_sequence_mode == interrupt_sequence_control_c)
4354     remote_serial_write ("\x03", 1);
4355   else if (interrupt_sequence_mode == interrupt_sequence_break)
4356     serial_send_break (rs->remote_desc);
4357   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4358     {
4359       serial_send_break (rs->remote_desc);
4360       remote_serial_write ("g", 1);
4361     }
4362   else
4363     internal_error (__FILE__, __LINE__,
4364 		    _("Invalid value for interrupt_sequence_mode: %s."),
4365 		    interrupt_sequence_mode);
4366 }
4367 
4368 
4369 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
4370    and extract the PTID.  Returns NULL_PTID if not found.  */
4371 
4372 static ptid_t
4373 stop_reply_extract_thread (const char *stop_reply)
4374 {
4375   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4376     {
4377       const char *p;
4378 
4379       /* Txx r:val ; r:val (...)  */
4380       p = &stop_reply[3];
4381 
4382       /* Look for "register" named "thread".  */
4383       while (*p != '\0')
4384 	{
4385 	  const char *p1;
4386 
4387 	  p1 = strchr (p, ':');
4388 	  if (p1 == NULL)
4389 	    return null_ptid;
4390 
4391 	  if (strncmp (p, "thread", p1 - p) == 0)
4392 	    return read_ptid (++p1, &p);
4393 
4394 	  p1 = strchr (p, ';');
4395 	  if (p1 == NULL)
4396 	    return null_ptid;
4397 	  p1++;
4398 
4399 	  p = p1;
4400 	}
4401     }
4402 
4403   return null_ptid;
4404 }
4405 
4406 /* Determine the remote side's current thread.  If we have a stop
4407    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4408    "thread" register we can extract the current thread from.  If not,
4409    ask the remote which is the current thread with qC.  The former
4410    method avoids a roundtrip.  */
4411 
4412 ptid_t
4413 remote_target::get_current_thread (const char *wait_status)
4414 {
4415   ptid_t ptid = null_ptid;
4416 
4417   /* Note we don't use remote_parse_stop_reply as that makes use of
4418      the target architecture, which we haven't yet fully determined at
4419      this point.  */
4420   if (wait_status != NULL)
4421     ptid = stop_reply_extract_thread (wait_status);
4422   if (ptid == null_ptid)
4423     ptid = remote_current_thread (inferior_ptid);
4424 
4425   return ptid;
4426 }
4427 
4428 /* Query the remote target for which is the current thread/process,
4429    add it to our tables, and update INFERIOR_PTID.  The caller is
4430    responsible for setting the state such that the remote end is ready
4431    to return the current thread.
4432 
4433    This function is called after handling the '?' or 'vRun' packets,
4434    whose response is a stop reply from which we can also try
4435    extracting the thread.  If the target doesn't support the explicit
4436    qC query, we infer the current thread from that stop reply, passed
4437    in in WAIT_STATUS, which may be NULL.
4438 
4439    The function returns pointer to the main thread of the inferior. */
4440 
4441 thread_info *
4442 remote_target::add_current_inferior_and_thread (const char *wait_status)
4443 {
4444   struct remote_state *rs = get_remote_state ();
4445   bool fake_pid_p = false;
4446 
4447   switch_to_no_thread ();
4448 
4449   /* Now, if we have thread information, update the current thread's
4450      ptid.  */
4451   ptid_t curr_ptid = get_current_thread (wait_status);
4452 
4453   if (curr_ptid != null_ptid)
4454     {
4455       if (!remote_multi_process_p (rs))
4456 	fake_pid_p = true;
4457     }
4458   else
4459     {
4460       /* Without this, some commands which require an active target
4461 	 (such as kill) won't work.  This variable serves (at least)
4462 	 double duty as both the pid of the target process (if it has
4463 	 such), and as a flag indicating that a target is active.  */
4464       curr_ptid = magic_null_ptid;
4465       fake_pid_p = true;
4466     }
4467 
4468   remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
4469 
4470   /* Add the main thread and switch to it.  Don't try reading
4471      registers yet, since we haven't fetched the target description
4472      yet.  */
4473   thread_info *tp = add_thread_silent (this, curr_ptid);
4474   switch_to_thread_no_regs (tp);
4475 
4476   return tp;
4477 }
4478 
4479 /* Print info about a thread that was found already stopped on
4480    connection.  */
4481 
4482 static void
4483 print_one_stopped_thread (struct thread_info *thread)
4484 {
4485   struct target_waitstatus *ws = &thread->suspend.waitstatus;
4486 
4487   switch_to_thread (thread);
4488   thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
4489   set_current_sal_from_frame (get_current_frame ());
4490 
4491   thread->suspend.waitstatus_pending_p = 0;
4492 
4493   if (ws->kind == TARGET_WAITKIND_STOPPED)
4494     {
4495       enum gdb_signal sig = ws->value.sig;
4496 
4497       if (signal_print_state (sig))
4498 	gdb::observers::signal_received.notify (sig);
4499     }
4500   gdb::observers::normal_stop.notify (NULL, 1);
4501 }
4502 
4503 /* Process all initial stop replies the remote side sent in response
4504    to the ? packet.  These indicate threads that were already stopped
4505    on initial connection.  We mark these threads as stopped and print
4506    their current frame before giving the user the prompt.  */
4507 
4508 void
4509 remote_target::process_initial_stop_replies (int from_tty)
4510 {
4511   int pending_stop_replies = stop_reply_queue_length ();
4512   struct thread_info *selected = NULL;
4513   struct thread_info *lowest_stopped = NULL;
4514   struct thread_info *first = NULL;
4515 
4516   /* Consume the initial pending events.  */
4517   while (pending_stop_replies-- > 0)
4518     {
4519       ptid_t waiton_ptid = minus_one_ptid;
4520       ptid_t event_ptid;
4521       struct target_waitstatus ws;
4522       int ignore_event = 0;
4523 
4524       memset (&ws, 0, sizeof (ws));
4525       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4526       if (remote_debug)
4527 	print_target_wait_results (waiton_ptid, event_ptid, &ws);
4528 
4529       switch (ws.kind)
4530 	{
4531 	case TARGET_WAITKIND_IGNORE:
4532 	case TARGET_WAITKIND_NO_RESUMED:
4533 	case TARGET_WAITKIND_SIGNALLED:
4534 	case TARGET_WAITKIND_EXITED:
4535 	  /* We shouldn't see these, but if we do, just ignore.  */
4536 	  remote_debug_printf ("event ignored");
4537 	  ignore_event = 1;
4538 	  break;
4539 
4540 	case TARGET_WAITKIND_EXECD:
4541 	  xfree (ws.value.execd_pathname);
4542 	  break;
4543 	default:
4544 	  break;
4545 	}
4546 
4547       if (ignore_event)
4548 	continue;
4549 
4550       thread_info *evthread = find_thread_ptid (this, event_ptid);
4551 
4552       if (ws.kind == TARGET_WAITKIND_STOPPED)
4553 	{
4554 	  enum gdb_signal sig = ws.value.sig;
4555 
4556 	  /* Stubs traditionally report SIGTRAP as initial signal,
4557 	     instead of signal 0.  Suppress it.  */
4558 	  if (sig == GDB_SIGNAL_TRAP)
4559 	    sig = GDB_SIGNAL_0;
4560 	  evthread->suspend.stop_signal = sig;
4561 	  ws.value.sig = sig;
4562 	}
4563 
4564       evthread->suspend.waitstatus = ws;
4565 
4566       if (ws.kind != TARGET_WAITKIND_STOPPED
4567 	  || ws.value.sig != GDB_SIGNAL_0)
4568 	evthread->suspend.waitstatus_pending_p = 1;
4569 
4570       set_executing (this, event_ptid, false);
4571       set_running (this, event_ptid, false);
4572       get_remote_thread_info (evthread)->set_not_resumed ();
4573     }
4574 
4575   /* "Notice" the new inferiors before anything related to
4576      registers/memory.  */
4577   for (inferior *inf : all_non_exited_inferiors (this))
4578     {
4579       inf->needs_setup = 1;
4580 
4581       if (non_stop)
4582 	{
4583 	  thread_info *thread = any_live_thread_of_inferior (inf);
4584 	  notice_new_inferior (thread, thread->state == THREAD_RUNNING,
4585 			       from_tty);
4586 	}
4587     }
4588 
4589   /* If all-stop on top of non-stop, pause all threads.  Note this
4590      records the threads' stop pc, so must be done after "noticing"
4591      the inferiors.  */
4592   if (!non_stop)
4593     {
4594       stop_all_threads ();
4595 
4596       /* If all threads of an inferior were already stopped, we
4597 	 haven't setup the inferior yet.  */
4598       for (inferior *inf : all_non_exited_inferiors (this))
4599 	{
4600 	  if (inf->needs_setup)
4601 	    {
4602 	      thread_info *thread = any_live_thread_of_inferior (inf);
4603 	      switch_to_thread_no_regs (thread);
4604 	      setup_inferior (0);
4605 	    }
4606 	}
4607     }
4608 
4609   /* Now go over all threads that are stopped, and print their current
4610      frame.  If all-stop, then if there's a signalled thread, pick
4611      that as current.  */
4612   for (thread_info *thread : all_non_exited_threads (this))
4613     {
4614       if (first == NULL)
4615 	first = thread;
4616 
4617       if (!non_stop)
4618 	thread->set_running (false);
4619       else if (thread->state != THREAD_STOPPED)
4620 	continue;
4621 
4622       if (selected == NULL
4623 	  && thread->suspend.waitstatus_pending_p)
4624 	selected = thread;
4625 
4626       if (lowest_stopped == NULL
4627 	  || thread->inf->num < lowest_stopped->inf->num
4628 	  || thread->per_inf_num < lowest_stopped->per_inf_num)
4629 	lowest_stopped = thread;
4630 
4631       if (non_stop)
4632 	print_one_stopped_thread (thread);
4633     }
4634 
4635   /* In all-stop, we only print the status of one thread, and leave
4636      others with their status pending.  */
4637   if (!non_stop)
4638     {
4639       thread_info *thread = selected;
4640       if (thread == NULL)
4641 	thread = lowest_stopped;
4642       if (thread == NULL)
4643 	thread = first;
4644 
4645       print_one_stopped_thread (thread);
4646     }
4647 
4648   /* For "info program".  */
4649   thread_info *thread = inferior_thread ();
4650   if (thread->state == THREAD_STOPPED)
4651     set_last_target_status (this, inferior_ptid, thread->suspend.waitstatus);
4652 }
4653 
4654 /* Start the remote connection and sync state.  */
4655 
4656 void
4657 remote_target::start_remote (int from_tty, int extended_p)
4658 {
4659   REMOTE_SCOPED_DEBUG_ENTER_EXIT;
4660 
4661   struct remote_state *rs = get_remote_state ();
4662   struct packet_config *noack_config;
4663 
4664   /* Signal other parts that we're going through the initial setup,
4665      and so things may not be stable yet.  E.g., we don't try to
4666      install tracepoints until we've relocated symbols.  Also, a
4667      Ctrl-C before we're connected and synced up can't interrupt the
4668      target.  Instead, it offers to drop the (potentially wedged)
4669      connection.  */
4670   rs->starting_up = true;
4671 
4672   QUIT;
4673 
4674   if (interrupt_on_connect)
4675     send_interrupt_sequence ();
4676 
4677   /* Ack any packet which the remote side has already sent.  */
4678   remote_serial_write ("+", 1);
4679 
4680   /* The first packet we send to the target is the optional "supported
4681      packets" request.  If the target can answer this, it will tell us
4682      which later probes to skip.  */
4683   remote_query_supported ();
4684 
4685   /* If the stub wants to get a QAllow, compose one and send it.  */
4686   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4687     set_permissions ();
4688 
4689   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4690      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4691      as a reply to known packet.  For packet "vFile:setfs:" it is an
4692      invalid reply and GDB would return error in
4693      remote_hostio_set_filesystem, making remote files access impossible.
4694      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4695      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4696   {
4697     const char v_mustreplyempty[] = "vMustReplyEmpty";
4698 
4699     putpkt (v_mustreplyempty);
4700     getpkt (&rs->buf, 0);
4701     if (strcmp (rs->buf.data (), "OK") == 0)
4702       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4703     else if (strcmp (rs->buf.data (), "") != 0)
4704       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4705 	     rs->buf.data ());
4706   }
4707 
4708   /* Next, we possibly activate noack mode.
4709 
4710      If the QStartNoAckMode packet configuration is set to AUTO,
4711      enable noack mode if the stub reported a wish for it with
4712      qSupported.
4713 
4714      If set to TRUE, then enable noack mode even if the stub didn't
4715      report it in qSupported.  If the stub doesn't reply OK, the
4716      session ends with an error.
4717 
4718      If FALSE, then don't activate noack mode, regardless of what the
4719      stub claimed should be the default with qSupported.  */
4720 
4721   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4722   if (packet_config_support (noack_config) != PACKET_DISABLE)
4723     {
4724       putpkt ("QStartNoAckMode");
4725       getpkt (&rs->buf, 0);
4726       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4727 	rs->noack_mode = 1;
4728     }
4729 
4730   if (extended_p)
4731     {
4732       /* Tell the remote that we are using the extended protocol.  */
4733       putpkt ("!");
4734       getpkt (&rs->buf, 0);
4735     }
4736 
4737   /* Let the target know which signals it is allowed to pass down to
4738      the program.  */
4739   update_signals_program_target ();
4740 
4741   /* Next, if the target can specify a description, read it.  We do
4742      this before anything involving memory or registers.  */
4743   target_find_description ();
4744 
4745   /* Next, now that we know something about the target, update the
4746      address spaces in the program spaces.  */
4747   update_address_spaces ();
4748 
4749   /* On OSs where the list of libraries is global to all
4750      processes, we fetch them early.  */
4751   if (gdbarch_has_global_solist (target_gdbarch ()))
4752     solib_add (NULL, from_tty, auto_solib_add);
4753 
4754   if (target_is_non_stop_p ())
4755     {
4756       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4757 	error (_("Non-stop mode requested, but remote "
4758 		 "does not support non-stop"));
4759 
4760       putpkt ("QNonStop:1");
4761       getpkt (&rs->buf, 0);
4762 
4763       if (strcmp (rs->buf.data (), "OK") != 0)
4764 	error (_("Remote refused setting non-stop mode with: %s"),
4765 	       rs->buf.data ());
4766 
4767       /* Find about threads and processes the stub is already
4768 	 controlling.  We default to adding them in the running state.
4769 	 The '?' query below will then tell us about which threads are
4770 	 stopped.  */
4771       this->update_thread_list ();
4772     }
4773   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4774     {
4775       /* Don't assume that the stub can operate in all-stop mode.
4776 	 Request it explicitly.  */
4777       putpkt ("QNonStop:0");
4778       getpkt (&rs->buf, 0);
4779 
4780       if (strcmp (rs->buf.data (), "OK") != 0)
4781 	error (_("Remote refused setting all-stop mode with: %s"),
4782 	       rs->buf.data ());
4783     }
4784 
4785   /* Upload TSVs regardless of whether the target is running or not.  The
4786      remote stub, such as GDBserver, may have some predefined or builtin
4787      TSVs, even if the target is not running.  */
4788   if (get_trace_status (current_trace_status ()) != -1)
4789     {
4790       struct uploaded_tsv *uploaded_tsvs = NULL;
4791 
4792       upload_trace_state_variables (&uploaded_tsvs);
4793       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4794     }
4795 
4796   /* Check whether the target is running now.  */
4797   putpkt ("?");
4798   getpkt (&rs->buf, 0);
4799 
4800   if (!target_is_non_stop_p ())
4801     {
4802       char *wait_status = NULL;
4803 
4804       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4805 	{
4806 	  if (!extended_p)
4807 	    error (_("The target is not running (try extended-remote?)"));
4808 
4809 	  /* We're connected, but not running.  Drop out before we
4810 	     call start_remote.  */
4811 	  rs->starting_up = false;
4812 	  return;
4813 	}
4814       else
4815 	{
4816 	  /* Save the reply for later.  */
4817 	  wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4818 	  strcpy (wait_status, rs->buf.data ());
4819 	}
4820 
4821       /* Fetch thread list.  */
4822       target_update_thread_list ();
4823 
4824       /* Let the stub know that we want it to return the thread.  */
4825       set_continue_thread (minus_one_ptid);
4826 
4827       if (thread_count (this) == 0)
4828 	{
4829 	  /* Target has no concept of threads at all.  GDB treats
4830 	     non-threaded target as single-threaded; add a main
4831 	     thread.  */
4832 	  thread_info *tp = add_current_inferior_and_thread (wait_status);
4833 	  get_remote_thread_info (tp)->set_resumed ();
4834 	}
4835       else
4836 	{
4837 	  /* We have thread information; select the thread the target
4838 	     says should be current.  If we're reconnecting to a
4839 	     multi-threaded program, this will ideally be the thread
4840 	     that last reported an event before GDB disconnected.  */
4841 	  ptid_t curr_thread = get_current_thread (wait_status);
4842 	  if (curr_thread == null_ptid)
4843 	    {
4844 	      /* Odd... The target was able to list threads, but not
4845 		 tell us which thread was current (no "thread"
4846 		 register in T stop reply?).  Just pick the first
4847 		 thread in the thread list then.  */
4848 
4849 	      remote_debug_printf ("warning: couldn't determine remote "
4850 				   "current thread; picking first in list.");
4851 
4852 	      for (thread_info *tp : all_non_exited_threads (this,
4853 							     minus_one_ptid))
4854 		{
4855 		  switch_to_thread (tp);
4856 		  break;
4857 		}
4858 	    }
4859 	  else
4860 	    switch_to_thread (find_thread_ptid (this, curr_thread));
4861 	}
4862 
4863       /* init_wait_for_inferior should be called before get_offsets in order
4864 	 to manage `inserted' flag in bp loc in a correct state.
4865 	 breakpoint_init_inferior, called from init_wait_for_inferior, set
4866 	 `inserted' flag to 0, while before breakpoint_re_set, called from
4867 	 start_remote, set `inserted' flag to 1.  In the initialization of
4868 	 inferior, breakpoint_init_inferior should be called first, and then
4869 	 breakpoint_re_set can be called.  If this order is broken, state of
4870 	 `inserted' flag is wrong, and cause some problems on breakpoint
4871 	 manipulation.  */
4872       init_wait_for_inferior ();
4873 
4874       get_offsets ();		/* Get text, data & bss offsets.  */
4875 
4876       /* If we could not find a description using qXfer, and we know
4877 	 how to do it some other way, try again.  This is not
4878 	 supported for non-stop; it could be, but it is tricky if
4879 	 there are no stopped threads when we connect.  */
4880       if (remote_read_description_p (this)
4881 	  && gdbarch_target_desc (target_gdbarch ()) == NULL)
4882 	{
4883 	  target_clear_description ();
4884 	  target_find_description ();
4885 	}
4886 
4887       /* Use the previously fetched status.  */
4888       gdb_assert (wait_status != NULL);
4889       strcpy (rs->buf.data (), wait_status);
4890       rs->cached_wait_status = 1;
4891 
4892       ::start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4893     }
4894   else
4895     {
4896       /* Clear WFI global state.  Do this before finding about new
4897 	 threads and inferiors, and setting the current inferior.
4898 	 Otherwise we would clear the proceed status of the current
4899 	 inferior when we want its stop_soon state to be preserved
4900 	 (see notice_new_inferior).  */
4901       init_wait_for_inferior ();
4902 
4903       /* In non-stop, we will either get an "OK", meaning that there
4904 	 are no stopped threads at this time; or, a regular stop
4905 	 reply.  In the latter case, there may be more than one thread
4906 	 stopped --- we pull them all out using the vStopped
4907 	 mechanism.  */
4908       if (strcmp (rs->buf.data (), "OK") != 0)
4909 	{
4910 	  struct notif_client *notif = &notif_client_stop;
4911 
4912 	  /* remote_notif_get_pending_replies acks this one, and gets
4913 	     the rest out.  */
4914 	  rs->notif_state->pending_event[notif_client_stop.id]
4915 	    = remote_notif_parse (this, notif, rs->buf.data ());
4916 	  remote_notif_get_pending_events (notif);
4917 	}
4918 
4919       if (thread_count (this) == 0)
4920 	{
4921 	  if (!extended_p)
4922 	    error (_("The target is not running (try extended-remote?)"));
4923 
4924 	  /* We're connected, but not running.  Drop out before we
4925 	     call start_remote.  */
4926 	  rs->starting_up = false;
4927 	  return;
4928 	}
4929 
4930       /* Report all signals during attach/startup.  */
4931       pass_signals ({});
4932 
4933       /* If there are already stopped threads, mark them stopped and
4934 	 report their stops before giving the prompt to the user.  */
4935       process_initial_stop_replies (from_tty);
4936 
4937       if (target_can_async_p ())
4938 	target_async (1);
4939     }
4940 
4941   /* If we connected to a live target, do some additional setup.  */
4942   if (target_has_execution ())
4943     {
4944       /* No use without a symbol-file.  */
4945       if (current_program_space->symfile_object_file)
4946 	remote_check_symbols ();
4947     }
4948 
4949   /* Possibly the target has been engaged in a trace run started
4950      previously; find out where things are at.  */
4951   if (get_trace_status (current_trace_status ()) != -1)
4952     {
4953       struct uploaded_tp *uploaded_tps = NULL;
4954 
4955       if (current_trace_status ()->running)
4956 	printf_filtered (_("Trace is already running on the target.\n"));
4957 
4958       upload_tracepoints (&uploaded_tps);
4959 
4960       merge_uploaded_tracepoints (&uploaded_tps);
4961     }
4962 
4963   /* Possibly the target has been engaged in a btrace record started
4964      previously; find out where things are at.  */
4965   remote_btrace_maybe_reopen ();
4966 
4967   /* The thread and inferior lists are now synchronized with the
4968      target, our symbols have been relocated, and we're merged the
4969      target's tracepoints with ours.  We're done with basic start
4970      up.  */
4971   rs->starting_up = false;
4972 
4973   /* Maybe breakpoints are global and need to be inserted now.  */
4974   if (breakpoints_should_be_inserted_now ())
4975     insert_breakpoints ();
4976 }
4977 
4978 const char *
4979 remote_target::connection_string ()
4980 {
4981   remote_state *rs = get_remote_state ();
4982 
4983   if (rs->remote_desc->name != NULL)
4984     return rs->remote_desc->name;
4985   else
4986     return NULL;
4987 }
4988 
4989 /* Open a connection to a remote debugger.
4990    NAME is the filename used for communication.  */
4991 
4992 void
4993 remote_target::open (const char *name, int from_tty)
4994 {
4995   open_1 (name, from_tty, 0);
4996 }
4997 
4998 /* Open a connection to a remote debugger using the extended
4999    remote gdb protocol.  NAME is the filename used for communication.  */
5000 
5001 void
5002 extended_remote_target::open (const char *name, int from_tty)
5003 {
5004   open_1 (name, from_tty, 1 /*extended_p */);
5005 }
5006 
5007 /* Reset all packets back to "unknown support".  Called when opening a
5008    new connection to a remote target.  */
5009 
5010 static void
5011 reset_all_packet_configs_support (void)
5012 {
5013   int i;
5014 
5015   for (i = 0; i < PACKET_MAX; i++)
5016     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
5017 }
5018 
5019 /* Initialize all packet configs.  */
5020 
5021 static void
5022 init_all_packet_configs (void)
5023 {
5024   int i;
5025 
5026   for (i = 0; i < PACKET_MAX; i++)
5027     {
5028       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
5029       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
5030     }
5031 }
5032 
5033 /* Symbol look-up.  */
5034 
5035 void
5036 remote_target::remote_check_symbols ()
5037 {
5038   char *tmp;
5039   int end;
5040 
5041   /* The remote side has no concept of inferiors that aren't running
5042      yet, it only knows about running processes.  If we're connected
5043      but our current inferior is not running, we should not invite the
5044      remote target to request symbol lookups related to its
5045      (unrelated) current process.  */
5046   if (!target_has_execution ())
5047     return;
5048 
5049   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
5050     return;
5051 
5052   /* Make sure the remote is pointing at the right process.  Note
5053      there's no way to select "no process".  */
5054   set_general_process ();
5055 
5056   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
5057      because we need both at the same time.  */
5058   gdb::char_vector msg (get_remote_packet_size ());
5059   gdb::char_vector reply (get_remote_packet_size ());
5060 
5061   /* Invite target to request symbol lookups.  */
5062 
5063   putpkt ("qSymbol::");
5064   getpkt (&reply, 0);
5065   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
5066 
5067   while (startswith (reply.data (), "qSymbol:"))
5068     {
5069       struct bound_minimal_symbol sym;
5070 
5071       tmp = &reply[8];
5072       end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
5073 		     strlen (tmp) / 2);
5074       msg[end] = '\0';
5075       sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
5076       if (sym.minsym == NULL)
5077 	xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
5078 		   &reply[8]);
5079       else
5080 	{
5081 	  int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5082 	  CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
5083 
5084 	  /* If this is a function address, return the start of code
5085 	     instead of any data function descriptor.  */
5086 	  sym_addr = gdbarch_convert_from_func_ptr_addr
5087 	    (target_gdbarch (), sym_addr, current_inferior ()->top_target ());
5088 
5089 	  xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
5090 		     phex_nz (sym_addr, addr_size), &reply[8]);
5091 	}
5092 
5093       putpkt (msg.data ());
5094       getpkt (&reply, 0);
5095     }
5096 }
5097 
5098 static struct serial *
5099 remote_serial_open (const char *name)
5100 {
5101   static int udp_warning = 0;
5102 
5103   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
5104      of in ser-tcp.c, because it is the remote protocol assuming that the
5105      serial connection is reliable and not the serial connection promising
5106      to be.  */
5107   if (!udp_warning && startswith (name, "udp:"))
5108     {
5109       warning (_("The remote protocol may be unreliable over UDP.\n"
5110 		 "Some events may be lost, rendering further debugging "
5111 		 "impossible."));
5112       udp_warning = 1;
5113     }
5114 
5115   return serial_open (name);
5116 }
5117 
5118 /* Inform the target of our permission settings.  The permission flags
5119    work without this, but if the target knows the settings, it can do
5120    a couple things.  First, it can add its own check, to catch cases
5121    that somehow manage to get by the permissions checks in target
5122    methods.  Second, if the target is wired to disallow particular
5123    settings (for instance, a system in the field that is not set up to
5124    be able to stop at a breakpoint), it can object to any unavailable
5125    permissions.  */
5126 
5127 void
5128 remote_target::set_permissions ()
5129 {
5130   struct remote_state *rs = get_remote_state ();
5131 
5132   xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
5133 	     "WriteReg:%x;WriteMem:%x;"
5134 	     "InsertBreak:%x;InsertTrace:%x;"
5135 	     "InsertFastTrace:%x;Stop:%x",
5136 	     may_write_registers, may_write_memory,
5137 	     may_insert_breakpoints, may_insert_tracepoints,
5138 	     may_insert_fast_tracepoints, may_stop);
5139   putpkt (rs->buf);
5140   getpkt (&rs->buf, 0);
5141 
5142   /* If the target didn't like the packet, warn the user.  Do not try
5143      to undo the user's settings, that would just be maddening.  */
5144   if (strcmp (rs->buf.data (), "OK") != 0)
5145     warning (_("Remote refused setting permissions with: %s"),
5146 	     rs->buf.data ());
5147 }
5148 
5149 /* This type describes each known response to the qSupported
5150    packet.  */
5151 struct protocol_feature
5152 {
5153   /* The name of this protocol feature.  */
5154   const char *name;
5155 
5156   /* The default for this protocol feature.  */
5157   enum packet_support default_support;
5158 
5159   /* The function to call when this feature is reported, or after
5160      qSupported processing if the feature is not supported.
5161      The first argument points to this structure.  The second
5162      argument indicates whether the packet requested support be
5163      enabled, disabled, or probed (or the default, if this function
5164      is being called at the end of processing and this feature was
5165      not reported).  The third argument may be NULL; if not NULL, it
5166      is a NUL-terminated string taken from the packet following
5167      this feature's name and an equals sign.  */
5168   void (*func) (remote_target *remote, const struct protocol_feature *,
5169 		enum packet_support, const char *);
5170 
5171   /* The corresponding packet for this feature.  Only used if
5172      FUNC is remote_supported_packet.  */
5173   int packet;
5174 };
5175 
5176 static void
5177 remote_supported_packet (remote_target *remote,
5178 			 const struct protocol_feature *feature,
5179 			 enum packet_support support,
5180 			 const char *argument)
5181 {
5182   if (argument)
5183     {
5184       warning (_("Remote qSupported response supplied an unexpected value for"
5185 		 " \"%s\"."), feature->name);
5186       return;
5187     }
5188 
5189   remote_protocol_packets[feature->packet].support = support;
5190 }
5191 
5192 void
5193 remote_target::remote_packet_size (const protocol_feature *feature,
5194 				   enum packet_support support, const char *value)
5195 {
5196   struct remote_state *rs = get_remote_state ();
5197 
5198   int packet_size;
5199   char *value_end;
5200 
5201   if (support != PACKET_ENABLE)
5202     return;
5203 
5204   if (value == NULL || *value == '\0')
5205     {
5206       warning (_("Remote target reported \"%s\" without a size."),
5207 	       feature->name);
5208       return;
5209     }
5210 
5211   errno = 0;
5212   packet_size = strtol (value, &value_end, 16);
5213   if (errno != 0 || *value_end != '\0' || packet_size < 0)
5214     {
5215       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5216 	       feature->name, value);
5217       return;
5218     }
5219 
5220   /* Record the new maximum packet size.  */
5221   rs->explicit_packet_size = packet_size;
5222 }
5223 
5224 static void
5225 remote_packet_size (remote_target *remote, const protocol_feature *feature,
5226 		    enum packet_support support, const char *value)
5227 {
5228   remote->remote_packet_size (feature, support, value);
5229 }
5230 
5231 static const struct protocol_feature remote_protocol_features[] = {
5232   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
5233   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
5234     PACKET_qXfer_auxv },
5235   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5236     PACKET_qXfer_exec_file },
5237   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5238     PACKET_qXfer_features },
5239   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5240     PACKET_qXfer_libraries },
5241   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5242     PACKET_qXfer_libraries_svr4 },
5243   { "augmented-libraries-svr4-read", PACKET_DISABLE,
5244     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
5245   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
5246     PACKET_qXfer_memory_map },
5247   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5248     PACKET_qXfer_osdata },
5249   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5250     PACKET_qXfer_threads },
5251   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5252     PACKET_qXfer_traceframe_info },
5253   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5254     PACKET_QPassSignals },
5255   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5256     PACKET_QCatchSyscalls },
5257   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5258     PACKET_QProgramSignals },
5259   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5260     PACKET_QSetWorkingDir },
5261   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5262     PACKET_QStartupWithShell },
5263   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5264     PACKET_QEnvironmentHexEncoded },
5265   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5266     PACKET_QEnvironmentReset },
5267   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5268     PACKET_QEnvironmentUnset },
5269   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5270     PACKET_QStartNoAckMode },
5271   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5272     PACKET_multiprocess_feature },
5273   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
5274   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5275     PACKET_qXfer_siginfo_read },
5276   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5277     PACKET_qXfer_siginfo_write },
5278   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
5279     PACKET_ConditionalTracepoints },
5280   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
5281     PACKET_ConditionalBreakpoints },
5282   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
5283     PACKET_BreakpointCommands },
5284   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
5285     PACKET_FastTracepoints },
5286   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
5287     PACKET_StaticTracepoints },
5288   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
5289    PACKET_InstallInTrace},
5290   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5291     PACKET_DisconnectedTracing_feature },
5292   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5293     PACKET_bc },
5294   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5295     PACKET_bs },
5296   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5297     PACKET_TracepointSource },
5298   { "QAllow", PACKET_DISABLE, remote_supported_packet,
5299     PACKET_QAllow },
5300   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5301     PACKET_EnableDisableTracepoints_feature },
5302   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5303     PACKET_qXfer_fdpic },
5304   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5305     PACKET_qXfer_uib },
5306   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5307     PACKET_QDisableRandomization },
5308   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
5309   { "QTBuffer:size", PACKET_DISABLE,
5310     remote_supported_packet, PACKET_QTBuffer_size},
5311   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
5312   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5313   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
5314   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
5315   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
5316     PACKET_qXfer_btrace },
5317   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
5318     PACKET_qXfer_btrace_conf },
5319   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
5320     PACKET_Qbtrace_conf_bts_size },
5321   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
5322   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
5323   { "fork-events", PACKET_DISABLE, remote_supported_packet,
5324     PACKET_fork_event_feature },
5325   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5326     PACKET_vfork_event_feature },
5327   { "exec-events", PACKET_DISABLE, remote_supported_packet,
5328     PACKET_exec_event_feature },
5329   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
5330     PACKET_Qbtrace_conf_pt_size },
5331   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5332   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
5333   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
5334   { "memory-tagging", PACKET_DISABLE, remote_supported_packet,
5335     PACKET_memory_tagging_feature },
5336 };
5337 
5338 static char *remote_support_xml;
5339 
5340 /* Register string appended to "xmlRegisters=" in qSupported query.  */
5341 
5342 void
5343 register_remote_support_xml (const char *xml)
5344 {
5345 #if defined(HAVE_LIBEXPAT)
5346   if (remote_support_xml == NULL)
5347     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
5348   else
5349     {
5350       char *copy = xstrdup (remote_support_xml + 13);
5351       char *saveptr;
5352       char *p = strtok_r (copy, ",", &saveptr);
5353 
5354       do
5355 	{
5356 	  if (strcmp (p, xml) == 0)
5357 	    {
5358 	      /* already there */
5359 	      xfree (copy);
5360 	      return;
5361 	    }
5362 	}
5363       while ((p = strtok_r (NULL, ",", &saveptr)) != NULL);
5364       xfree (copy);
5365 
5366       remote_support_xml = reconcat (remote_support_xml,
5367 				     remote_support_xml, ",", xml,
5368 				     (char *) NULL);
5369     }
5370 #endif
5371 }
5372 
5373 static void
5374 remote_query_supported_append (std::string *msg, const char *append)
5375 {
5376   if (!msg->empty ())
5377     msg->append (";");
5378   msg->append (append);
5379 }
5380 
5381 void
5382 remote_target::remote_query_supported ()
5383 {
5384   struct remote_state *rs = get_remote_state ();
5385   char *next;
5386   int i;
5387   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5388 
5389   /* The packet support flags are handled differently for this packet
5390      than for most others.  We treat an error, a disabled packet, and
5391      an empty response identically: any features which must be reported
5392      to be used will be automatically disabled.  An empty buffer
5393      accomplishes this, since that is also the representation for a list
5394      containing no features.  */
5395 
5396   rs->buf[0] = 0;
5397   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
5398     {
5399       std::string q;
5400 
5401       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
5402 	remote_query_supported_append (&q, "multiprocess+");
5403 
5404       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
5405 	remote_query_supported_append (&q, "swbreak+");
5406       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
5407 	remote_query_supported_append (&q, "hwbreak+");
5408 
5409       remote_query_supported_append (&q, "qRelocInsn+");
5410 
5411       if (packet_set_cmd_state (PACKET_fork_event_feature)
5412 	  != AUTO_BOOLEAN_FALSE)
5413 	remote_query_supported_append (&q, "fork-events+");
5414       if (packet_set_cmd_state (PACKET_vfork_event_feature)
5415 	  != AUTO_BOOLEAN_FALSE)
5416 	remote_query_supported_append (&q, "vfork-events+");
5417       if (packet_set_cmd_state (PACKET_exec_event_feature)
5418 	  != AUTO_BOOLEAN_FALSE)
5419 	remote_query_supported_append (&q, "exec-events+");
5420 
5421       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
5422 	remote_query_supported_append (&q, "vContSupported+");
5423 
5424       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
5425 	remote_query_supported_append (&q, "QThreadEvents+");
5426 
5427       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
5428 	remote_query_supported_append (&q, "no-resumed+");
5429 
5430       if (packet_set_cmd_state (PACKET_memory_tagging_feature)
5431 	  != AUTO_BOOLEAN_FALSE)
5432 	remote_query_supported_append (&q, "memory-tagging+");
5433 
5434       /* Keep this one last to work around a gdbserver <= 7.10 bug in
5435 	 the qSupported:xmlRegisters=i386 handling.  */
5436       if (remote_support_xml != NULL
5437 	  && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
5438 	remote_query_supported_append (&q, remote_support_xml);
5439 
5440       q = "qSupported:" + q;
5441       putpkt (q.c_str ());
5442 
5443       getpkt (&rs->buf, 0);
5444 
5445       /* If an error occured, warn, but do not return - just reset the
5446 	 buffer to empty and go on to disable features.  */
5447       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5448 	  == PACKET_ERROR)
5449 	{
5450 	  warning (_("Remote failure reply: %s"), rs->buf.data ());
5451 	  rs->buf[0] = 0;
5452 	}
5453     }
5454 
5455   memset (seen, 0, sizeof (seen));
5456 
5457   next = rs->buf.data ();
5458   while (*next)
5459     {
5460       enum packet_support is_supported;
5461       char *p, *end, *name_end, *value;
5462 
5463       /* First separate out this item from the rest of the packet.  If
5464 	 there's another item after this, we overwrite the separator
5465 	 (terminated strings are much easier to work with).  */
5466       p = next;
5467       end = strchr (p, ';');
5468       if (end == NULL)
5469 	{
5470 	  end = p + strlen (p);
5471 	  next = end;
5472 	}
5473       else
5474 	{
5475 	  *end = '\0';
5476 	  next = end + 1;
5477 
5478 	  if (end == p)
5479 	    {
5480 	      warning (_("empty item in \"qSupported\" response"));
5481 	      continue;
5482 	    }
5483 	}
5484 
5485       name_end = strchr (p, '=');
5486       if (name_end)
5487 	{
5488 	  /* This is a name=value entry.  */
5489 	  is_supported = PACKET_ENABLE;
5490 	  value = name_end + 1;
5491 	  *name_end = '\0';
5492 	}
5493       else
5494 	{
5495 	  value = NULL;
5496 	  switch (end[-1])
5497 	    {
5498 	    case '+':
5499 	      is_supported = PACKET_ENABLE;
5500 	      break;
5501 
5502 	    case '-':
5503 	      is_supported = PACKET_DISABLE;
5504 	      break;
5505 
5506 	    case '?':
5507 	      is_supported = PACKET_SUPPORT_UNKNOWN;
5508 	      break;
5509 
5510 	    default:
5511 	      warning (_("unrecognized item \"%s\" "
5512 			 "in \"qSupported\" response"), p);
5513 	      continue;
5514 	    }
5515 	  end[-1] = '\0';
5516 	}
5517 
5518       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5519 	if (strcmp (remote_protocol_features[i].name, p) == 0)
5520 	  {
5521 	    const struct protocol_feature *feature;
5522 
5523 	    seen[i] = 1;
5524 	    feature = &remote_protocol_features[i];
5525 	    feature->func (this, feature, is_supported, value);
5526 	    break;
5527 	  }
5528     }
5529 
5530   /* If we increased the packet size, make sure to increase the global
5531      buffer size also.  We delay this until after parsing the entire
5532      qSupported packet, because this is the same buffer we were
5533      parsing.  */
5534   if (rs->buf.size () < rs->explicit_packet_size)
5535     rs->buf.resize (rs->explicit_packet_size);
5536 
5537   /* Handle the defaults for unmentioned features.  */
5538   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5539     if (!seen[i])
5540       {
5541 	const struct protocol_feature *feature;
5542 
5543 	feature = &remote_protocol_features[i];
5544 	feature->func (this, feature, feature->default_support, NULL);
5545       }
5546 }
5547 
5548 /* Serial QUIT handler for the remote serial descriptor.
5549 
5550    Defers handling a Ctrl-C until we're done with the current
5551    command/response packet sequence, unless:
5552 
5553    - We're setting up the connection.  Don't send a remote interrupt
5554      request, as we're not fully synced yet.  Quit immediately
5555      instead.
5556 
5557    - The target has been resumed in the foreground
5558      (target_terminal::is_ours is false) with a synchronous resume
5559      packet, and we're blocked waiting for the stop reply, thus a
5560      Ctrl-C should be immediately sent to the target.
5561 
5562    - We get a second Ctrl-C while still within the same serial read or
5563      write.  In that case the serial is seemingly wedged --- offer to
5564      quit/disconnect.
5565 
5566    - We see a second Ctrl-C without target response, after having
5567      previously interrupted the target.  In that case the target/stub
5568      is probably wedged --- offer to quit/disconnect.
5569 */
5570 
5571 void
5572 remote_target::remote_serial_quit_handler ()
5573 {
5574   struct remote_state *rs = get_remote_state ();
5575 
5576   if (check_quit_flag ())
5577     {
5578       /* If we're starting up, we're not fully synced yet.  Quit
5579 	 immediately.  */
5580       if (rs->starting_up)
5581 	quit ();
5582       else if (rs->got_ctrlc_during_io)
5583 	{
5584 	  if (query (_("The target is not responding to GDB commands.\n"
5585 		       "Stop debugging it? ")))
5586 	    remote_unpush_and_throw (this);
5587 	}
5588       /* If ^C has already been sent once, offer to disconnect.  */
5589       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
5590 	interrupt_query ();
5591       /* All-stop protocol, and blocked waiting for stop reply.  Send
5592 	 an interrupt request.  */
5593       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
5594 	target_interrupt ();
5595       else
5596 	rs->got_ctrlc_during_io = 1;
5597     }
5598 }
5599 
5600 /* The remote_target that is current while the quit handler is
5601    overridden with remote_serial_quit_handler.  */
5602 static remote_target *curr_quit_handler_target;
5603 
5604 static void
5605 remote_serial_quit_handler ()
5606 {
5607   curr_quit_handler_target->remote_serial_quit_handler ();
5608 }
5609 
5610 /* Remove the remote target from the target stack of each inferior
5611    that is using it.  Upper targets depend on it so remove them
5612    first.  */
5613 
5614 static void
5615 remote_unpush_target (remote_target *target)
5616 {
5617   /* We have to unpush the target from all inferiors, even those that
5618      aren't running.  */
5619   scoped_restore_current_inferior restore_current_inferior;
5620 
5621   for (inferior *inf : all_inferiors (target))
5622     {
5623       switch_to_inferior_no_thread (inf);
5624       pop_all_targets_at_and_above (process_stratum);
5625       generic_mourn_inferior ();
5626     }
5627 
5628   /* Don't rely on target_close doing this when the target is popped
5629      from the last remote inferior above, because something may be
5630      holding a reference to the target higher up on the stack, meaning
5631      target_close won't be called yet.  We lost the connection to the
5632      target, so clear these now, otherwise we may later throw
5633      TARGET_CLOSE_ERROR while trying to tell the remote target to
5634      close the file.  */
5635   fileio_handles_invalidate_target (target);
5636 }
5637 
5638 static void
5639 remote_unpush_and_throw (remote_target *target)
5640 {
5641   remote_unpush_target (target);
5642   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5643 }
5644 
5645 void
5646 remote_target::open_1 (const char *name, int from_tty, int extended_p)
5647 {
5648   remote_target *curr_remote = get_current_remote_target ();
5649 
5650   if (name == 0)
5651     error (_("To open a remote debug connection, you need to specify what\n"
5652 	   "serial device is attached to the remote system\n"
5653 	   "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5654 
5655   /* If we're connected to a running target, target_preopen will kill it.
5656      Ask this question first, before target_preopen has a chance to kill
5657      anything.  */
5658   if (curr_remote != NULL && !target_has_execution ())
5659     {
5660       if (from_tty
5661 	  && !query (_("Already connected to a remote target.  Disconnect? ")))
5662 	error (_("Still connected."));
5663     }
5664 
5665   /* Here the possibly existing remote target gets unpushed.  */
5666   target_preopen (from_tty);
5667 
5668   remote_fileio_reset ();
5669   reopen_exec_file ();
5670   reread_symbols ();
5671 
5672   remote_target *remote
5673     = (extended_p ? new extended_remote_target () : new remote_target ());
5674   target_ops_up target_holder (remote);
5675 
5676   remote_state *rs = remote->get_remote_state ();
5677 
5678   /* See FIXME above.  */
5679   if (!target_async_permitted)
5680     rs->wait_forever_enabled_p = 1;
5681 
5682   rs->remote_desc = remote_serial_open (name);
5683   if (!rs->remote_desc)
5684     perror_with_name (name);
5685 
5686   if (baud_rate != -1)
5687     {
5688       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5689 	{
5690 	  /* The requested speed could not be set.  Error out to
5691 	     top level after closing remote_desc.  Take care to
5692 	     set remote_desc to NULL to avoid closing remote_desc
5693 	     more than once.  */
5694 	  serial_close (rs->remote_desc);
5695 	  rs->remote_desc = NULL;
5696 	  perror_with_name (name);
5697 	}
5698     }
5699 
5700   serial_setparity (rs->remote_desc, serial_parity);
5701   serial_raw (rs->remote_desc);
5702 
5703   /* If there is something sitting in the buffer we might take it as a
5704      response to a command, which would be bad.  */
5705   serial_flush_input (rs->remote_desc);
5706 
5707   if (from_tty)
5708     {
5709       puts_filtered ("Remote debugging using ");
5710       puts_filtered (name);
5711       puts_filtered ("\n");
5712     }
5713 
5714   /* Switch to using the remote target now.  */
5715   current_inferior ()->push_target (std::move (target_holder));
5716 
5717   /* Register extra event sources in the event loop.  */
5718   rs->remote_async_inferior_event_token
5719     = create_async_event_handler (remote_async_inferior_event_handler, nullptr,
5720 				  "remote");
5721   rs->notif_state = remote_notif_state_allocate (remote);
5722 
5723   /* Reset the target state; these things will be queried either by
5724      remote_query_supported or as they are needed.  */
5725   reset_all_packet_configs_support ();
5726   rs->cached_wait_status = 0;
5727   rs->explicit_packet_size = 0;
5728   rs->noack_mode = 0;
5729   rs->extended = extended_p;
5730   rs->waiting_for_stop_reply = 0;
5731   rs->ctrlc_pending_p = 0;
5732   rs->got_ctrlc_during_io = 0;
5733 
5734   rs->general_thread = not_sent_ptid;
5735   rs->continue_thread = not_sent_ptid;
5736   rs->remote_traceframe_number = -1;
5737 
5738   rs->last_resume_exec_dir = EXEC_FORWARD;
5739 
5740   /* Probe for ability to use "ThreadInfo" query, as required.  */
5741   rs->use_threadinfo_query = 1;
5742   rs->use_threadextra_query = 1;
5743 
5744   rs->readahead_cache.invalidate ();
5745 
5746   if (target_async_permitted)
5747     {
5748       /* FIXME: cagney/1999-09-23: During the initial connection it is
5749 	 assumed that the target is already ready and able to respond to
5750 	 requests.  Unfortunately remote_start_remote() eventually calls
5751 	 wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5752 	 around this.  Eventually a mechanism that allows
5753 	 wait_for_inferior() to expect/get timeouts will be
5754 	 implemented.  */
5755       rs->wait_forever_enabled_p = 0;
5756     }
5757 
5758   /* First delete any symbols previously loaded from shared libraries.  */
5759   no_shared_libraries (NULL, 0);
5760 
5761   /* Start the remote connection.  If error() or QUIT, discard this
5762      target (we'd otherwise be in an inconsistent state) and then
5763      propogate the error on up the exception chain.  This ensures that
5764      the caller doesn't stumble along blindly assuming that the
5765      function succeeded.  The CLI doesn't have this problem but other
5766      UI's, such as MI do.
5767 
5768      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5769      this function should return an error indication letting the
5770      caller restore the previous state.  Unfortunately the command
5771      ``target remote'' is directly wired to this function making that
5772      impossible.  On a positive note, the CLI side of this problem has
5773      been fixed - the function set_cmd_context() makes it possible for
5774      all the ``target ....'' commands to share a common callback
5775      function.  See cli-dump.c.  */
5776   {
5777 
5778     try
5779       {
5780 	remote->start_remote (from_tty, extended_p);
5781       }
5782     catch (const gdb_exception &ex)
5783       {
5784 	/* Pop the partially set up target - unless something else did
5785 	   already before throwing the exception.  */
5786 	if (ex.error != TARGET_CLOSE_ERROR)
5787 	  remote_unpush_target (remote);
5788 	throw;
5789       }
5790   }
5791 
5792   remote_btrace_reset (rs);
5793 
5794   if (target_async_permitted)
5795     rs->wait_forever_enabled_p = 1;
5796 }
5797 
5798 /* Detach the specified process.  */
5799 
5800 void
5801 remote_target::remote_detach_pid (int pid)
5802 {
5803   struct remote_state *rs = get_remote_state ();
5804 
5805   /* This should not be necessary, but the handling for D;PID in
5806      GDBserver versions prior to 8.2 incorrectly assumes that the
5807      selected process points to the same process we're detaching,
5808      leading to misbehavior (and possibly GDBserver crashing) when it
5809      does not.  Since it's easy and cheap, work around it by forcing
5810      GDBserver to select GDB's current process.  */
5811   set_general_process ();
5812 
5813   if (remote_multi_process_p (rs))
5814     xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
5815   else
5816     strcpy (rs->buf.data (), "D");
5817 
5818   putpkt (rs->buf);
5819   getpkt (&rs->buf, 0);
5820 
5821   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5822     ;
5823   else if (rs->buf[0] == '\0')
5824     error (_("Remote doesn't know how to detach"));
5825   else
5826     error (_("Can't detach process."));
5827 }
5828 
5829 /* This detaches a program to which we previously attached, using
5830    inferior_ptid to identify the process.  After this is done, GDB
5831    can be used to debug some other program.  We better not have left
5832    any breakpoints in the target program or it'll die when it hits
5833    one.  */
5834 
5835 void
5836 remote_target::remote_detach_1 (inferior *inf, int from_tty)
5837 {
5838   int pid = inferior_ptid.pid ();
5839   struct remote_state *rs = get_remote_state ();
5840   int is_fork_parent;
5841 
5842   if (!target_has_execution ())
5843     error (_("No process to detach from."));
5844 
5845   target_announce_detach (from_tty);
5846 
5847   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
5848     {
5849       /* If we're in breakpoints-always-inserted mode, or the inferior
5850 	 is running, we have to remove breakpoints before detaching.
5851 	 We don't do this in common code instead because not all
5852 	 targets support removing breakpoints while the target is
5853 	 running.  The remote target / gdbserver does, though.  */
5854       remove_breakpoints_inf (current_inferior ());
5855     }
5856 
5857   /* Tell the remote target to detach.  */
5858   remote_detach_pid (pid);
5859 
5860   /* Exit only if this is the only active inferior.  */
5861   if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1)
5862     puts_filtered (_("Ending remote debugging.\n"));
5863 
5864   thread_info *tp = find_thread_ptid (this, inferior_ptid);
5865 
5866   /* Check to see if we are detaching a fork parent.  Note that if we
5867      are detaching a fork child, tp == NULL.  */
5868   is_fork_parent = (tp != NULL
5869 		    && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5870 
5871   /* If doing detach-on-fork, we don't mourn, because that will delete
5872      breakpoints that should be available for the followed inferior.  */
5873   if (!is_fork_parent)
5874     {
5875       /* Save the pid as a string before mourning, since that will
5876 	 unpush the remote target, and we need the string after.  */
5877       std::string infpid = target_pid_to_str (ptid_t (pid));
5878 
5879       target_mourn_inferior (inferior_ptid);
5880       if (print_inferior_events)
5881 	printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5882 			   inf->num, infpid.c_str ());
5883     }
5884   else
5885     {
5886       switch_to_no_thread ();
5887       detach_inferior (current_inferior ());
5888     }
5889 }
5890 
5891 void
5892 remote_target::detach (inferior *inf, int from_tty)
5893 {
5894   remote_detach_1 (inf, from_tty);
5895 }
5896 
5897 void
5898 extended_remote_target::detach (inferior *inf, int from_tty)
5899 {
5900   remote_detach_1 (inf, from_tty);
5901 }
5902 
5903 /* Target follow-fork function for remote targets.  On entry, and
5904    at return, the current inferior is the fork parent.
5905 
5906    Note that although this is currently only used for extended-remote,
5907    it is named remote_follow_fork in anticipation of using it for the
5908    remote target as well.  */
5909 
5910 void
5911 remote_target::follow_fork (bool follow_child, bool detach_fork)
5912 {
5913   struct remote_state *rs = get_remote_state ();
5914   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5915 
5916   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5917       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5918     {
5919       /* When following the parent and detaching the child, we detach
5920 	 the child here.  For the case of following the child and
5921 	 detaching the parent, the detach is done in the target-
5922 	 independent follow fork code in infrun.c.  We can't use
5923 	 target_detach when detaching an unfollowed child because
5924 	 the client side doesn't know anything about the child.  */
5925       if (detach_fork && !follow_child)
5926 	{
5927 	  /* Detach the fork child.  */
5928 	  ptid_t child_ptid;
5929 	  pid_t child_pid;
5930 
5931 	  child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5932 	  child_pid = child_ptid.pid ();
5933 
5934 	  remote_detach_pid (child_pid);
5935 	}
5936     }
5937 }
5938 
5939 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5940    in the program space of the new inferior.  */
5941 
5942 void
5943 remote_target::follow_exec (inferior *follow_inf, ptid_t ptid,
5944 			    const char *execd_pathname)
5945 {
5946   process_stratum_target::follow_exec (follow_inf, ptid, execd_pathname);
5947 
5948   /* We know that this is a target file name, so if it has the "target:"
5949      prefix we strip it off before saving it in the program space.  */
5950   if (is_target_filename (execd_pathname))
5951     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5952 
5953   set_pspace_remote_exec_file (follow_inf->pspace, execd_pathname);
5954 }
5955 
5956 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5957 
5958 void
5959 remote_target::disconnect (const char *args, int from_tty)
5960 {
5961   if (args)
5962     error (_("Argument given to \"disconnect\" when remotely debugging."));
5963 
5964   /* Make sure we unpush even the extended remote targets.  Calling
5965      target_mourn_inferior won't unpush, and
5966      remote_target::mourn_inferior won't unpush if there is more than
5967      one inferior left.  */
5968   remote_unpush_target (this);
5969 
5970   if (from_tty)
5971     puts_filtered ("Ending remote debugging.\n");
5972 }
5973 
5974 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5975    be chatty about it.  */
5976 
5977 void
5978 extended_remote_target::attach (const char *args, int from_tty)
5979 {
5980   struct remote_state *rs = get_remote_state ();
5981   int pid;
5982   char *wait_status = NULL;
5983 
5984   pid = parse_pid_to_attach (args);
5985 
5986   /* Remote PID can be freely equal to getpid, do not check it here the same
5987      way as in other targets.  */
5988 
5989   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5990     error (_("This target does not support attaching to a process"));
5991 
5992   if (from_tty)
5993     {
5994       const char *exec_file = get_exec_file (0);
5995 
5996       if (exec_file)
5997 	printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5998 			   target_pid_to_str (ptid_t (pid)).c_str ());
5999       else
6000 	printf_unfiltered (_("Attaching to %s\n"),
6001 			   target_pid_to_str (ptid_t (pid)).c_str ());
6002     }
6003 
6004   xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
6005   putpkt (rs->buf);
6006   getpkt (&rs->buf, 0);
6007 
6008   switch (packet_ok (rs->buf,
6009 		     &remote_protocol_packets[PACKET_vAttach]))
6010     {
6011     case PACKET_OK:
6012       if (!target_is_non_stop_p ())
6013 	{
6014 	  /* Save the reply for later.  */
6015 	  wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
6016 	  strcpy (wait_status, rs->buf.data ());
6017 	}
6018       else if (strcmp (rs->buf.data (), "OK") != 0)
6019 	error (_("Attaching to %s failed with: %s"),
6020 	       target_pid_to_str (ptid_t (pid)).c_str (),
6021 	       rs->buf.data ());
6022       break;
6023     case PACKET_UNKNOWN:
6024       error (_("This target does not support attaching to a process"));
6025     default:
6026       error (_("Attaching to %s failed"),
6027 	     target_pid_to_str (ptid_t (pid)).c_str ());
6028     }
6029 
6030   switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0));
6031 
6032   inferior_ptid = ptid_t (pid);
6033 
6034   if (target_is_non_stop_p ())
6035     {
6036       /* Get list of threads.  */
6037       update_thread_list ();
6038 
6039       thread_info *thread = first_thread_of_inferior (current_inferior ());
6040       if (thread != nullptr)
6041 	switch_to_thread (thread);
6042 
6043       /* Invalidate our notion of the remote current thread.  */
6044       record_currthread (rs, minus_one_ptid);
6045     }
6046   else
6047     {
6048       /* Now, if we have thread information, update the main thread's
6049 	 ptid.  */
6050       ptid_t curr_ptid = remote_current_thread (ptid_t (pid));
6051 
6052       /* Add the main thread to the thread list.  */
6053       thread_info *thr = add_thread_silent (this, curr_ptid);
6054 
6055       switch_to_thread (thr);
6056 
6057       /* Don't consider the thread stopped until we've processed the
6058 	 saved stop reply.  */
6059       set_executing (this, thr->ptid, true);
6060     }
6061 
6062   /* Next, if the target can specify a description, read it.  We do
6063      this before anything involving memory or registers.  */
6064   target_find_description ();
6065 
6066   if (!target_is_non_stop_p ())
6067     {
6068       /* Use the previously fetched status.  */
6069       gdb_assert (wait_status != NULL);
6070 
6071       if (target_can_async_p ())
6072 	{
6073 	  struct notif_event *reply
6074 	    =  remote_notif_parse (this, &notif_client_stop, wait_status);
6075 
6076 	  push_stop_reply ((struct stop_reply *) reply);
6077 
6078 	  target_async (1);
6079 	}
6080       else
6081 	{
6082 	  gdb_assert (wait_status != NULL);
6083 	  strcpy (rs->buf.data (), wait_status);
6084 	  rs->cached_wait_status = 1;
6085 	}
6086     }
6087   else
6088     {
6089       gdb_assert (wait_status == NULL);
6090 
6091       gdb_assert (target_can_async_p ());
6092       target_async (1);
6093     }
6094 }
6095 
6096 /* Implementation of the to_post_attach method.  */
6097 
6098 void
6099 extended_remote_target::post_attach (int pid)
6100 {
6101   /* Get text, data & bss offsets.  */
6102   get_offsets ();
6103 
6104   /* In certain cases GDB might not have had the chance to start
6105      symbol lookup up until now.  This could happen if the debugged
6106      binary is not using shared libraries, the vsyscall page is not
6107      present (on Linux) and the binary itself hadn't changed since the
6108      debugging process was started.  */
6109   if (current_program_space->symfile_object_file != NULL)
6110     remote_check_symbols();
6111 }
6112 
6113 
6114 /* Check for the availability of vCont.  This function should also check
6115    the response.  */
6116 
6117 void
6118 remote_target::remote_vcont_probe ()
6119 {
6120   remote_state *rs = get_remote_state ();
6121   char *buf;
6122 
6123   strcpy (rs->buf.data (), "vCont?");
6124   putpkt (rs->buf);
6125   getpkt (&rs->buf, 0);
6126   buf = rs->buf.data ();
6127 
6128   /* Make sure that the features we assume are supported.  */
6129   if (startswith (buf, "vCont"))
6130     {
6131       char *p = &buf[5];
6132       int support_c, support_C;
6133 
6134       rs->supports_vCont.s = 0;
6135       rs->supports_vCont.S = 0;
6136       support_c = 0;
6137       support_C = 0;
6138       rs->supports_vCont.t = 0;
6139       rs->supports_vCont.r = 0;
6140       while (p && *p == ';')
6141 	{
6142 	  p++;
6143 	  if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
6144 	    rs->supports_vCont.s = 1;
6145 	  else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
6146 	    rs->supports_vCont.S = 1;
6147 	  else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
6148 	    support_c = 1;
6149 	  else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
6150 	    support_C = 1;
6151 	  else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
6152 	    rs->supports_vCont.t = 1;
6153 	  else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
6154 	    rs->supports_vCont.r = 1;
6155 
6156 	  p = strchr (p, ';');
6157 	}
6158 
6159       /* If c, and C are not all supported, we can't use vCont.  Clearing
6160 	 BUF will make packet_ok disable the packet.  */
6161       if (!support_c || !support_C)
6162 	buf[0] = 0;
6163     }
6164 
6165   packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
6166   rs->supports_vCont_probed = true;
6167 }
6168 
6169 /* Helper function for building "vCont" resumptions.  Write a
6170    resumption to P.  ENDP points to one-passed-the-end of the buffer
6171    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
6172    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
6173    resumed thread should be single-stepped and/or signalled.  If PTID
6174    equals minus_one_ptid, then all threads are resumed; if PTID
6175    represents a process, then all threads of the process are resumed;
6176    the thread to be stepped and/or signalled is given in the global
6177    INFERIOR_PTID.  */
6178 
6179 char *
6180 remote_target::append_resumption (char *p, char *endp,
6181 				  ptid_t ptid, int step, gdb_signal siggnal)
6182 {
6183   struct remote_state *rs = get_remote_state ();
6184 
6185   if (step && siggnal != GDB_SIGNAL_0)
6186     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
6187   else if (step
6188 	   /* GDB is willing to range step.  */
6189 	   && use_range_stepping
6190 	   /* Target supports range stepping.  */
6191 	   && rs->supports_vCont.r
6192 	   /* We don't currently support range stepping multiple
6193 	      threads with a wildcard (though the protocol allows it,
6194 	      so stubs shouldn't make an active effort to forbid
6195 	      it).  */
6196 	   && !(remote_multi_process_p (rs) && ptid.is_pid ()))
6197     {
6198       struct thread_info *tp;
6199 
6200       if (ptid == minus_one_ptid)
6201 	{
6202 	  /* If we don't know about the target thread's tid, then
6203 	     we're resuming magic_null_ptid (see caller).  */
6204 	  tp = find_thread_ptid (this, magic_null_ptid);
6205 	}
6206       else
6207 	tp = find_thread_ptid (this, ptid);
6208       gdb_assert (tp != NULL);
6209 
6210       if (tp->control.may_range_step)
6211 	{
6212 	  int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6213 
6214 	  p += xsnprintf (p, endp - p, ";r%s,%s",
6215 			  phex_nz (tp->control.step_range_start,
6216 				   addr_size),
6217 			  phex_nz (tp->control.step_range_end,
6218 				   addr_size));
6219 	}
6220       else
6221 	p += xsnprintf (p, endp - p, ";s");
6222     }
6223   else if (step)
6224     p += xsnprintf (p, endp - p, ";s");
6225   else if (siggnal != GDB_SIGNAL_0)
6226     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6227   else
6228     p += xsnprintf (p, endp - p, ";c");
6229 
6230   if (remote_multi_process_p (rs) && ptid.is_pid ())
6231     {
6232       ptid_t nptid;
6233 
6234       /* All (-1) threads of process.  */
6235       nptid = ptid_t (ptid.pid (), -1, 0);
6236 
6237       p += xsnprintf (p, endp - p, ":");
6238       p = write_ptid (p, endp, nptid);
6239     }
6240   else if (ptid != minus_one_ptid)
6241     {
6242       p += xsnprintf (p, endp - p, ":");
6243       p = write_ptid (p, endp, ptid);
6244     }
6245 
6246   return p;
6247 }
6248 
6249 /* Clear the thread's private info on resume.  */
6250 
6251 static void
6252 resume_clear_thread_private_info (struct thread_info *thread)
6253 {
6254   if (thread->priv != NULL)
6255     {
6256       remote_thread_info *priv = get_remote_thread_info (thread);
6257 
6258       priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6259       priv->watch_data_address = 0;
6260     }
6261 }
6262 
6263 /* Append a vCont continue-with-signal action for threads that have a
6264    non-zero stop signal.  */
6265 
6266 char *
6267 remote_target::append_pending_thread_resumptions (char *p, char *endp,
6268 						  ptid_t ptid)
6269 {
6270   for (thread_info *thread : all_non_exited_threads (this, ptid))
6271     if (inferior_ptid != thread->ptid
6272 	&& thread->suspend.stop_signal != GDB_SIGNAL_0)
6273       {
6274 	p = append_resumption (p, endp, thread->ptid,
6275 			       0, thread->suspend.stop_signal);
6276 	thread->suspend.stop_signal = GDB_SIGNAL_0;
6277 	resume_clear_thread_private_info (thread);
6278       }
6279 
6280   return p;
6281 }
6282 
6283 /* Set the target running, using the packets that use Hc
6284    (c/s/C/S).  */
6285 
6286 void
6287 remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6288 				      gdb_signal siggnal)
6289 {
6290   struct remote_state *rs = get_remote_state ();
6291   char *buf;
6292 
6293   rs->last_sent_signal = siggnal;
6294   rs->last_sent_step = step;
6295 
6296   /* The c/s/C/S resume packets use Hc, so set the continue
6297      thread.  */
6298   if (ptid == minus_one_ptid)
6299     set_continue_thread (any_thread_ptid);
6300   else
6301     set_continue_thread (ptid);
6302 
6303   for (thread_info *thread : all_non_exited_threads (this))
6304     resume_clear_thread_private_info (thread);
6305 
6306   buf = rs->buf.data ();
6307   if (::execution_direction == EXEC_REVERSE)
6308     {
6309       /* We don't pass signals to the target in reverse exec mode.  */
6310       if (info_verbose && siggnal != GDB_SIGNAL_0)
6311 	warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6312 		 siggnal);
6313 
6314       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6315 	error (_("Remote reverse-step not supported."));
6316       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6317 	error (_("Remote reverse-continue not supported."));
6318 
6319       strcpy (buf, step ? "bs" : "bc");
6320     }
6321   else if (siggnal != GDB_SIGNAL_0)
6322     {
6323       buf[0] = step ? 'S' : 'C';
6324       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6325       buf[2] = tohex (((int) siggnal) & 0xf);
6326       buf[3] = '\0';
6327     }
6328   else
6329     strcpy (buf, step ? "s" : "c");
6330 
6331   putpkt (buf);
6332 }
6333 
6334 /* Resume the remote inferior by using a "vCont" packet.  The thread
6335    to be resumed is PTID; STEP and SIGGNAL indicate whether the
6336    resumed thread should be single-stepped and/or signalled.  If PTID
6337    equals minus_one_ptid, then all threads are resumed; the thread to
6338    be stepped and/or signalled is given in the global INFERIOR_PTID.
6339    This function returns non-zero iff it resumes the inferior.
6340 
6341    This function issues a strict subset of all possible vCont commands
6342    at the moment.  */
6343 
6344 int
6345 remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6346 					 enum gdb_signal siggnal)
6347 {
6348   struct remote_state *rs = get_remote_state ();
6349   char *p;
6350   char *endp;
6351 
6352   /* No reverse execution actions defined for vCont.  */
6353   if (::execution_direction == EXEC_REVERSE)
6354     return 0;
6355 
6356   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6357     remote_vcont_probe ();
6358 
6359   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6360     return 0;
6361 
6362   p = rs->buf.data ();
6363   endp = p + get_remote_packet_size ();
6364 
6365   /* If we could generate a wider range of packets, we'd have to worry
6366      about overflowing BUF.  Should there be a generic
6367      "multi-part-packet" packet?  */
6368 
6369   p += xsnprintf (p, endp - p, "vCont");
6370 
6371   if (ptid == magic_null_ptid)
6372     {
6373       /* MAGIC_NULL_PTID means that we don't have any active threads,
6374 	 so we don't have any TID numbers the inferior will
6375 	 understand.  Make sure to only send forms that do not specify
6376 	 a TID.  */
6377       append_resumption (p, endp, minus_one_ptid, step, siggnal);
6378     }
6379   else if (ptid == minus_one_ptid || ptid.is_pid ())
6380     {
6381       /* Resume all threads (of all processes, or of a single
6382 	 process), with preference for INFERIOR_PTID.  This assumes
6383 	 inferior_ptid belongs to the set of all threads we are about
6384 	 to resume.  */
6385       if (step || siggnal != GDB_SIGNAL_0)
6386 	{
6387 	  /* Step inferior_ptid, with or without signal.  */
6388 	  p = append_resumption (p, endp, inferior_ptid, step, siggnal);
6389 	}
6390 
6391       /* Also pass down any pending signaled resumption for other
6392 	 threads not the current.  */
6393       p = append_pending_thread_resumptions (p, endp, ptid);
6394 
6395       /* And continue others without a signal.  */
6396       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
6397     }
6398   else
6399     {
6400       /* Scheduler locking; resume only PTID.  */
6401       append_resumption (p, endp, ptid, step, siggnal);
6402     }
6403 
6404   gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
6405   putpkt (rs->buf);
6406 
6407   if (target_is_non_stop_p ())
6408     {
6409       /* In non-stop, the stub replies to vCont with "OK".  The stop
6410 	 reply will be reported asynchronously by means of a `%Stop'
6411 	 notification.  */
6412       getpkt (&rs->buf, 0);
6413       if (strcmp (rs->buf.data (), "OK") != 0)
6414 	error (_("Unexpected vCont reply in non-stop mode: %s"),
6415 	       rs->buf.data ());
6416     }
6417 
6418   return 1;
6419 }
6420 
6421 /* Tell the remote machine to resume.  */
6422 
6423 void
6424 remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
6425 {
6426   struct remote_state *rs = get_remote_state ();
6427 
6428   /* When connected in non-stop mode, the core resumes threads
6429      individually.  Resuming remote threads directly in target_resume
6430      would thus result in sending one packet per thread.  Instead, to
6431      minimize roundtrip latency, here we just store the resume
6432      request (put the thread in RESUMED_PENDING_VCONT state); the actual remote
6433      resumption will be done in remote_target::commit_resume, where we'll be
6434      able to do vCont action coalescing.  */
6435   if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
6436     {
6437       remote_thread_info *remote_thr;
6438 
6439       if (minus_one_ptid == ptid || ptid.is_pid ())
6440 	remote_thr = get_remote_thread_info (this, inferior_ptid);
6441       else
6442 	remote_thr = get_remote_thread_info (this, ptid);
6443 
6444       /* We don't expect the core to ask to resume an already resumed (from
6445          its point of view) thread.  */
6446       gdb_assert (remote_thr->get_resume_state () == resume_state::NOT_RESUMED);
6447 
6448       remote_thr->set_resumed_pending_vcont (step, siggnal);
6449       return;
6450     }
6451 
6452   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6453      (explained in remote-notif.c:handle_notification) so
6454      remote_notif_process is not called.  We need find a place where
6455      it is safe to start a 'vNotif' sequence.  It is good to do it
6456      before resuming inferior, because inferior was stopped and no RSP
6457      traffic at that moment.  */
6458   if (!target_is_non_stop_p ())
6459     remote_notif_process (rs->notif_state, &notif_client_stop);
6460 
6461   rs->last_resume_exec_dir = ::execution_direction;
6462 
6463   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
6464   if (!remote_resume_with_vcont (ptid, step, siggnal))
6465     remote_resume_with_hc (ptid, step, siggnal);
6466 
6467   /* Update resumed state tracked by the remote target.  */
6468   for (thread_info *tp : all_non_exited_threads (this, ptid))
6469     get_remote_thread_info (tp)->set_resumed ();
6470 
6471   /* We are about to start executing the inferior, let's register it
6472      with the event loop.  NOTE: this is the one place where all the
6473      execution commands end up.  We could alternatively do this in each
6474      of the execution commands in infcmd.c.  */
6475   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6476      into infcmd.c in order to allow inferior function calls to work
6477      NOT asynchronously.  */
6478   if (target_can_async_p ())
6479     target_async (1);
6480 
6481   /* We've just told the target to resume.  The remote server will
6482      wait for the inferior to stop, and then send a stop reply.  In
6483      the mean time, we can't start another command/query ourselves
6484      because the stub wouldn't be ready to process it.  This applies
6485      only to the base all-stop protocol, however.  In non-stop (which
6486      only supports vCont), the stub replies with an "OK", and is
6487      immediate able to process further serial input.  */
6488   if (!target_is_non_stop_p ())
6489     rs->waiting_for_stop_reply = 1;
6490 }
6491 
6492 static int is_pending_fork_parent_thread (struct thread_info *thread);
6493 
6494 /* Private per-inferior info for target remote processes.  */
6495 
6496 struct remote_inferior : public private_inferior
6497 {
6498   /* Whether we can send a wildcard vCont for this process.  */
6499   bool may_wildcard_vcont = true;
6500 };
6501 
6502 /* Get the remote private inferior data associated to INF.  */
6503 
6504 static remote_inferior *
6505 get_remote_inferior (inferior *inf)
6506 {
6507   if (inf->priv == NULL)
6508     inf->priv.reset (new remote_inferior);
6509 
6510   return static_cast<remote_inferior *> (inf->priv.get ());
6511 }
6512 
6513 struct stop_reply : public notif_event
6514 {
6515   ~stop_reply ();
6516 
6517   /* The identifier of the thread about this event  */
6518   ptid_t ptid;
6519 
6520   /* The remote state this event is associated with.  When the remote
6521      connection, represented by a remote_state object, is closed,
6522      all the associated stop_reply events should be released.  */
6523   struct remote_state *rs;
6524 
6525   struct target_waitstatus ws;
6526 
6527   /* The architecture associated with the expedited registers.  */
6528   gdbarch *arch;
6529 
6530   /* Expedited registers.  This makes remote debugging a bit more
6531      efficient for those targets that provide critical registers as
6532      part of their normal status mechanism (as another roundtrip to
6533      fetch them is avoided).  */
6534   std::vector<cached_reg_t> regcache;
6535 
6536   enum target_stop_reason stop_reason;
6537 
6538   CORE_ADDR watch_data_address;
6539 
6540   int core;
6541 };
6542 
6543 /* Class used to track the construction of a vCont packet in the
6544    outgoing packet buffer.  This is used to send multiple vCont
6545    packets if we have more actions than would fit a single packet.  */
6546 
6547 class vcont_builder
6548 {
6549 public:
6550   explicit vcont_builder (remote_target *remote)
6551     : m_remote (remote)
6552   {
6553     restart ();
6554   }
6555 
6556   void flush ();
6557   void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6558 
6559 private:
6560   void restart ();
6561 
6562   /* The remote target.  */
6563   remote_target *m_remote;
6564 
6565   /* Pointer to the first action.  P points here if no action has been
6566      appended yet.  */
6567   char *m_first_action;
6568 
6569   /* Where the next action will be appended.  */
6570   char *m_p;
6571 
6572   /* The end of the buffer.  Must never write past this.  */
6573   char *m_endp;
6574 };
6575 
6576 /* Prepare the outgoing buffer for a new vCont packet.  */
6577 
6578 void
6579 vcont_builder::restart ()
6580 {
6581   struct remote_state *rs = m_remote->get_remote_state ();
6582 
6583   m_p = rs->buf.data ();
6584   m_endp = m_p + m_remote->get_remote_packet_size ();
6585   m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6586   m_first_action = m_p;
6587 }
6588 
6589 /* If the vCont packet being built has any action, send it to the
6590    remote end.  */
6591 
6592 void
6593 vcont_builder::flush ()
6594 {
6595   struct remote_state *rs;
6596 
6597   if (m_p == m_first_action)
6598     return;
6599 
6600   rs = m_remote->get_remote_state ();
6601   m_remote->putpkt (rs->buf);
6602   m_remote->getpkt (&rs->buf, 0);
6603   if (strcmp (rs->buf.data (), "OK") != 0)
6604     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
6605 }
6606 
6607 /* The largest action is range-stepping, with its two addresses.  This
6608    is more than sufficient.  If a new, bigger action is created, it'll
6609    quickly trigger a failed assertion in append_resumption (and we'll
6610    just bump this).  */
6611 #define MAX_ACTION_SIZE 200
6612 
6613 /* Append a new vCont action in the outgoing packet being built.  If
6614    the action doesn't fit the packet along with previous actions, push
6615    what we've got so far to the remote end and start over a new vCont
6616    packet (with the new action).  */
6617 
6618 void
6619 vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
6620 {
6621   char buf[MAX_ACTION_SIZE + 1];
6622 
6623   char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6624 					    ptid, step, siggnal);
6625 
6626   /* Check whether this new action would fit in the vCont packet along
6627      with previous actions.  If not, send what we've got so far and
6628      start a new vCont packet.  */
6629   size_t rsize = endp - buf;
6630   if (rsize > m_endp - m_p)
6631     {
6632       flush ();
6633       restart ();
6634 
6635       /* Should now fit.  */
6636       gdb_assert (rsize <= m_endp - m_p);
6637     }
6638 
6639   memcpy (m_p, buf, rsize);
6640   m_p += rsize;
6641   *m_p = '\0';
6642 }
6643 
6644 /* to_commit_resume implementation.  */
6645 
6646 void
6647 remote_target::commit_resumed ()
6648 {
6649   /* If connected in all-stop mode, we'd send the remote resume
6650      request directly from remote_resume.  Likewise if
6651      reverse-debugging, as there are no defined vCont actions for
6652      reverse execution.  */
6653   if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
6654     return;
6655 
6656   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6657      instead of resuming all threads of each process individually.
6658      However, if any thread of a process must remain halted, we can't
6659      send wildcard resumes and must send one action per thread.
6660 
6661      Care must be taken to not resume threads/processes the server
6662      side already told us are stopped, but the core doesn't know about
6663      yet, because the events are still in the vStopped notification
6664      queue.  For example:
6665 
6666        #1 => vCont s:p1.1;c
6667        #2 <= OK
6668        #3 <= %Stopped T05 p1.1
6669        #4 => vStopped
6670        #5 <= T05 p1.2
6671        #6 => vStopped
6672        #7 <= OK
6673        #8 (infrun handles the stop for p1.1 and continues stepping)
6674        #9 => vCont s:p1.1;c
6675 
6676      The last vCont above would resume thread p1.2 by mistake, because
6677      the server has no idea that the event for p1.2 had not been
6678      handled yet.
6679 
6680      The server side must similarly ignore resume actions for the
6681      thread that has a pending %Stopped notification (and any other
6682      threads with events pending), until GDB acks the notification
6683      with vStopped.  Otherwise, e.g., the following case is
6684      mishandled:
6685 
6686        #1 => g  (or any other packet)
6687        #2 <= [registers]
6688        #3 <= %Stopped T05 p1.2
6689        #4 => vCont s:p1.1;c
6690        #5 <= OK
6691 
6692      Above, the server must not resume thread p1.2.  GDB can't know
6693      that p1.2 stopped until it acks the %Stopped notification, and
6694      since from GDB's perspective all threads should be running, it
6695      sends a "c" action.
6696 
6697      Finally, special care must also be given to handling fork/vfork
6698      events.  A (v)fork event actually tells us that two processes
6699      stopped -- the parent and the child.  Until we follow the fork,
6700      we must not resume the child.  Therefore, if we have a pending
6701      fork follow, we must not send a global wildcard resume action
6702      (vCont;c).  We can still send process-wide wildcards though.  */
6703 
6704   /* Start by assuming a global wildcard (vCont;c) is possible.  */
6705   bool may_global_wildcard_vcont = true;
6706 
6707   /* And assume every process is individually wildcard-able too.  */
6708   for (inferior *inf : all_non_exited_inferiors (this))
6709     {
6710       remote_inferior *priv = get_remote_inferior (inf);
6711 
6712       priv->may_wildcard_vcont = true;
6713     }
6714 
6715   /* Check for any pending events (not reported or processed yet) and
6716      disable process and global wildcard resumes appropriately.  */
6717   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6718 
6719   bool any_pending_vcont_resume = false;
6720 
6721   for (thread_info *tp : all_non_exited_threads (this))
6722     {
6723       remote_thread_info *priv = get_remote_thread_info (tp);
6724 
6725       /* If a thread of a process is not meant to be resumed, then we
6726 	 can't wildcard that process.  */
6727       if (priv->get_resume_state () == resume_state::NOT_RESUMED)
6728 	{
6729 	  get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
6730 
6731 	  /* And if we can't wildcard a process, we can't wildcard
6732 	     everything either.  */
6733 	  may_global_wildcard_vcont = false;
6734 	  continue;
6735 	}
6736 
6737       if (priv->get_resume_state () == resume_state::RESUMED_PENDING_VCONT)
6738 	any_pending_vcont_resume = true;
6739 
6740       /* If a thread is the parent of an unfollowed fork, then we
6741 	 can't do a global wildcard, as that would resume the fork
6742 	 child.  */
6743       if (is_pending_fork_parent_thread (tp))
6744 	may_global_wildcard_vcont = false;
6745     }
6746 
6747   /* We didn't have any resumed thread pending a vCont resume, so nothing to
6748      do.  */
6749   if (!any_pending_vcont_resume)
6750     return;
6751 
6752   /* Now let's build the vCont packet(s).  Actions must be appended
6753      from narrower to wider scopes (thread -> process -> global).  If
6754      we end up with too many actions for a single packet vcont_builder
6755      flushes the current vCont packet to the remote side and starts a
6756      new one.  */
6757   struct vcont_builder vcont_builder (this);
6758 
6759   /* Threads first.  */
6760   for (thread_info *tp : all_non_exited_threads (this))
6761     {
6762       remote_thread_info *remote_thr = get_remote_thread_info (tp);
6763 
6764       /* If the thread was previously vCont-resumed, no need to send a specific
6765 	 action for it.  If we didn't receive a resume request for it, don't
6766 	 send an action for it either.  */
6767       if (remote_thr->get_resume_state () != resume_state::RESUMED_PENDING_VCONT)
6768 	continue;
6769 
6770       gdb_assert (!thread_is_in_step_over_chain (tp));
6771 
6772       /* We should never be commit-resuming a thread that has a stop reply.
6773          Otherwise, we would end up reporting a stop event for a thread while
6774 	 it is running on the remote target.  */
6775       remote_state *rs = get_remote_state ();
6776       for (const auto &stop_reply : rs->stop_reply_queue)
6777 	gdb_assert (stop_reply->ptid != tp->ptid);
6778 
6779       const resumed_pending_vcont_info &info
6780 	= remote_thr->resumed_pending_vcont_info ();
6781 
6782       /* Check if we need to send a specific action for this thread.  If not,
6783          it will be included in a wildcard resume instead.  */
6784       if (info.step || info.sig != GDB_SIGNAL_0
6785 	  || !get_remote_inferior (tp->inf)->may_wildcard_vcont)
6786 	vcont_builder.push_action (tp->ptid, info.step, info.sig);
6787 
6788       remote_thr->set_resumed ();
6789     }
6790 
6791   /* Now check whether we can send any process-wide wildcard.  This is
6792      to avoid sending a global wildcard in the case nothing is
6793      supposed to be resumed.  */
6794   bool any_process_wildcard = false;
6795 
6796   for (inferior *inf : all_non_exited_inferiors (this))
6797     {
6798       if (get_remote_inferior (inf)->may_wildcard_vcont)
6799 	{
6800 	  any_process_wildcard = true;
6801 	  break;
6802 	}
6803     }
6804 
6805   if (any_process_wildcard)
6806     {
6807       /* If all processes are wildcard-able, then send a single "c"
6808 	 action, otherwise, send an "all (-1) threads of process"
6809 	 continue action for each running process, if any.  */
6810       if (may_global_wildcard_vcont)
6811 	{
6812 	  vcont_builder.push_action (minus_one_ptid,
6813 				     false, GDB_SIGNAL_0);
6814 	}
6815       else
6816 	{
6817 	  for (inferior *inf : all_non_exited_inferiors (this))
6818 	    {
6819 	      if (get_remote_inferior (inf)->may_wildcard_vcont)
6820 		{
6821 		  vcont_builder.push_action (ptid_t (inf->pid),
6822 					     false, GDB_SIGNAL_0);
6823 		}
6824 	    }
6825 	}
6826     }
6827 
6828   vcont_builder.flush ();
6829 }
6830 
6831 /* Implementation of target_has_pending_events.  */
6832 
6833 bool
6834 remote_target::has_pending_events ()
6835 {
6836   if (target_can_async_p ())
6837     {
6838       remote_state *rs = get_remote_state ();
6839 
6840       if (async_event_handler_marked (rs->remote_async_inferior_event_token))
6841 	return true;
6842 
6843       /* Note that BUFCNT can be negative, indicating sticky
6844 	 error.  */
6845       if (rs->remote_desc->bufcnt != 0)
6846 	return true;
6847     }
6848   return false;
6849 }
6850 
6851 
6852 
6853 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6854    thread, all threads of a remote process, or all threads of all
6855    processes.  */
6856 
6857 void
6858 remote_target::remote_stop_ns (ptid_t ptid)
6859 {
6860   struct remote_state *rs = get_remote_state ();
6861   char *p = rs->buf.data ();
6862   char *endp = p + get_remote_packet_size ();
6863 
6864   /* If any thread that needs to stop was resumed but pending a vCont
6865      resume, generate a phony stop_reply.  However, first check
6866      whether the thread wasn't resumed with a signal.  Generating a
6867      phony stop in that case would result in losing the signal.  */
6868   bool needs_commit = false;
6869   for (thread_info *tp : all_non_exited_threads (this, ptid))
6870     {
6871       remote_thread_info *remote_thr = get_remote_thread_info (tp);
6872 
6873       if (remote_thr->get_resume_state ()
6874 	  == resume_state::RESUMED_PENDING_VCONT)
6875 	{
6876 	  const resumed_pending_vcont_info &info
6877 	    = remote_thr->resumed_pending_vcont_info ();
6878 	  if (info.sig != GDB_SIGNAL_0)
6879 	    {
6880 	      /* This signal must be forwarded to the inferior.  We
6881 		 could commit-resume just this thread, but its simpler
6882 		 to just commit-resume everything.  */
6883 	      needs_commit = true;
6884 	      break;
6885 	    }
6886 	}
6887     }
6888 
6889   if (needs_commit)
6890     commit_resumed ();
6891   else
6892     for (thread_info *tp : all_non_exited_threads (this, ptid))
6893       {
6894 	remote_thread_info *remote_thr = get_remote_thread_info (tp);
6895 
6896 	if (remote_thr->get_resume_state ()
6897 	    == resume_state::RESUMED_PENDING_VCONT)
6898 	  {
6899 	    remote_debug_printf ("Enqueueing phony stop reply for thread pending "
6900 				 "vCont-resume (%d, %ld, %ld)", tp->ptid.pid(),
6901 				 tp->ptid.lwp (), tp->ptid.tid ());
6902 
6903 	    /* Check that the thread wasn't resumed with a signal.
6904 	       Generating a phony stop would result in losing the
6905 	       signal.  */
6906 	    const resumed_pending_vcont_info &info
6907 	      = remote_thr->resumed_pending_vcont_info ();
6908 	    gdb_assert (info.sig == GDB_SIGNAL_0);
6909 
6910 	    stop_reply *sr = new stop_reply ();
6911 	    sr->ptid = tp->ptid;
6912 	    sr->rs = rs;
6913 	    sr->ws.kind = TARGET_WAITKIND_STOPPED;
6914 	    sr->ws.value.sig = GDB_SIGNAL_0;
6915 	    sr->arch = tp->inf->gdbarch;
6916 	    sr->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6917 	    sr->watch_data_address = 0;
6918 	    sr->core = 0;
6919 	    this->push_stop_reply (sr);
6920 
6921 	    /* Pretend that this thread was actually resumed on the
6922 	       remote target, then stopped.  If we leave it in the
6923 	       RESUMED_PENDING_VCONT state and the commit_resumed
6924 	       method is called while the stop reply is still in the
6925 	       queue, we'll end up reporting a stop event to the core
6926 	       for that thread while it is running on the remote
6927 	       target... that would be bad.  */
6928 	    remote_thr->set_resumed ();
6929 	  }
6930       }
6931 
6932   /* FIXME: This supports_vCont_probed check is a workaround until
6933      packet_support is per-connection.  */
6934   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN
6935       || !rs->supports_vCont_probed)
6936     remote_vcont_probe ();
6937 
6938   if (!rs->supports_vCont.t)
6939     error (_("Remote server does not support stopping threads"));
6940 
6941   if (ptid == minus_one_ptid
6942       || (!remote_multi_process_p (rs) && ptid.is_pid ()))
6943     p += xsnprintf (p, endp - p, "vCont;t");
6944   else
6945     {
6946       ptid_t nptid;
6947 
6948       p += xsnprintf (p, endp - p, "vCont;t:");
6949 
6950       if (ptid.is_pid ())
6951 	  /* All (-1) threads of process.  */
6952 	nptid = ptid_t (ptid.pid (), -1, 0);
6953       else
6954 	{
6955 	  /* Small optimization: if we already have a stop reply for
6956 	     this thread, no use in telling the stub we want this
6957 	     stopped.  */
6958 	  if (peek_stop_reply (ptid))
6959 	    return;
6960 
6961 	  nptid = ptid;
6962 	}
6963 
6964       write_ptid (p, endp, nptid);
6965     }
6966 
6967   /* In non-stop, we get an immediate OK reply.  The stop reply will
6968      come in asynchronously by notification.  */
6969   putpkt (rs->buf);
6970   getpkt (&rs->buf, 0);
6971   if (strcmp (rs->buf.data (), "OK") != 0)
6972     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
6973 	   rs->buf.data ());
6974 }
6975 
6976 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6977    interrupt the remote target.  It is undefined which thread of which
6978    process reports the interrupt.  */
6979 
6980 void
6981 remote_target::remote_interrupt_as ()
6982 {
6983   struct remote_state *rs = get_remote_state ();
6984 
6985   rs->ctrlc_pending_p = 1;
6986 
6987   /* If the inferior is stopped already, but the core didn't know
6988      about it yet, just ignore the request.  The cached wait status
6989      will be collected in remote_wait.  */
6990   if (rs->cached_wait_status)
6991     return;
6992 
6993   /* Send interrupt_sequence to remote target.  */
6994   send_interrupt_sequence ();
6995 }
6996 
6997 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6998    the remote target.  It is undefined which thread of which process
6999    reports the interrupt.  Throws an error if the packet is not
7000    supported by the server.  */
7001 
7002 void
7003 remote_target::remote_interrupt_ns ()
7004 {
7005   struct remote_state *rs = get_remote_state ();
7006   char *p = rs->buf.data ();
7007   char *endp = p + get_remote_packet_size ();
7008 
7009   xsnprintf (p, endp - p, "vCtrlC");
7010 
7011   /* In non-stop, we get an immediate OK reply.  The stop reply will
7012      come in asynchronously by notification.  */
7013   putpkt (rs->buf);
7014   getpkt (&rs->buf, 0);
7015 
7016   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
7017     {
7018     case PACKET_OK:
7019       break;
7020     case PACKET_UNKNOWN:
7021       error (_("No support for interrupting the remote target."));
7022     case PACKET_ERROR:
7023       error (_("Interrupting target failed: %s"), rs->buf.data ());
7024     }
7025 }
7026 
7027 /* Implement the to_stop function for the remote targets.  */
7028 
7029 void
7030 remote_target::stop (ptid_t ptid)
7031 {
7032   REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7033 
7034   if (target_is_non_stop_p ())
7035     remote_stop_ns (ptid);
7036   else
7037     {
7038       /* We don't currently have a way to transparently pause the
7039 	 remote target in all-stop mode.  Interrupt it instead.  */
7040       remote_interrupt_as ();
7041     }
7042 }
7043 
7044 /* Implement the to_interrupt function for the remote targets.  */
7045 
7046 void
7047 remote_target::interrupt ()
7048 {
7049   REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7050 
7051   if (target_is_non_stop_p ())
7052     remote_interrupt_ns ();
7053   else
7054     remote_interrupt_as ();
7055 }
7056 
7057 /* Implement the to_pass_ctrlc function for the remote targets.  */
7058 
7059 void
7060 remote_target::pass_ctrlc ()
7061 {
7062   REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7063 
7064   struct remote_state *rs = get_remote_state ();
7065 
7066   /* If we're starting up, we're not fully synced yet.  Quit
7067      immediately.  */
7068   if (rs->starting_up)
7069     quit ();
7070   /* If ^C has already been sent once, offer to disconnect.  */
7071   else if (rs->ctrlc_pending_p)
7072     interrupt_query ();
7073   else
7074     target_interrupt ();
7075 }
7076 
7077 /* Ask the user what to do when an interrupt is received.  */
7078 
7079 void
7080 remote_target::interrupt_query ()
7081 {
7082   struct remote_state *rs = get_remote_state ();
7083 
7084   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
7085     {
7086       if (query (_("The target is not responding to interrupt requests.\n"
7087 		   "Stop debugging it? ")))
7088 	{
7089 	  remote_unpush_target (this);
7090 	  throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
7091 	}
7092     }
7093   else
7094     {
7095       if (query (_("Interrupted while waiting for the program.\n"
7096 		   "Give up waiting? ")))
7097 	quit ();
7098     }
7099 }
7100 
7101 /* Enable/disable target terminal ownership.  Most targets can use
7102    terminal groups to control terminal ownership.  Remote targets are
7103    different in that explicit transfer of ownership to/from GDB/target
7104    is required.  */
7105 
7106 void
7107 remote_target::terminal_inferior ()
7108 {
7109   /* NOTE: At this point we could also register our selves as the
7110      recipient of all input.  Any characters typed could then be
7111      passed on down to the target.  */
7112 }
7113 
7114 void
7115 remote_target::terminal_ours ()
7116 {
7117 }
7118 
7119 static void
7120 remote_console_output (const char *msg)
7121 {
7122   const char *p;
7123 
7124   for (p = msg; p[0] && p[1]; p += 2)
7125     {
7126       char tb[2];
7127       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
7128 
7129       tb[0] = c;
7130       tb[1] = 0;
7131       gdb_stdtarg->puts (tb);
7132     }
7133   gdb_stdtarg->flush ();
7134 }
7135 
7136 /* Return the length of the stop reply queue.  */
7137 
7138 int
7139 remote_target::stop_reply_queue_length ()
7140 {
7141   remote_state *rs = get_remote_state ();
7142   return rs->stop_reply_queue.size ();
7143 }
7144 
7145 static void
7146 remote_notif_stop_parse (remote_target *remote,
7147 			 struct notif_client *self, const char *buf,
7148 			 struct notif_event *event)
7149 {
7150   remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
7151 }
7152 
7153 static void
7154 remote_notif_stop_ack (remote_target *remote,
7155 		       struct notif_client *self, const char *buf,
7156 		       struct notif_event *event)
7157 {
7158   struct stop_reply *stop_reply = (struct stop_reply *) event;
7159 
7160   /* acknowledge */
7161   putpkt (remote, self->ack_command);
7162 
7163   /* Kind can be TARGET_WAITKIND_IGNORE if we have meanwhile discarded
7164      the notification.  It was left in the queue because we need to
7165      acknowledge it and pull the rest of the notifications out.  */
7166   if (stop_reply->ws.kind != TARGET_WAITKIND_IGNORE)
7167     remote->push_stop_reply (stop_reply);
7168 }
7169 
7170 static int
7171 remote_notif_stop_can_get_pending_events (remote_target *remote,
7172 					  struct notif_client *self)
7173 {
7174   /* We can't get pending events in remote_notif_process for
7175      notification stop, and we have to do this in remote_wait_ns
7176      instead.  If we fetch all queued events from stub, remote stub
7177      may exit and we have no chance to process them back in
7178      remote_wait_ns.  */
7179   remote_state *rs = remote->get_remote_state ();
7180   mark_async_event_handler (rs->remote_async_inferior_event_token);
7181   return 0;
7182 }
7183 
7184 stop_reply::~stop_reply ()
7185 {
7186   for (cached_reg_t &reg : regcache)
7187     xfree (reg.data);
7188 }
7189 
7190 static notif_event_up
7191 remote_notif_stop_alloc_reply ()
7192 {
7193   return notif_event_up (new struct stop_reply ());
7194 }
7195 
7196 /* A client of notification Stop.  */
7197 
7198 struct notif_client notif_client_stop =
7199 {
7200   "Stop",
7201   "vStopped",
7202   remote_notif_stop_parse,
7203   remote_notif_stop_ack,
7204   remote_notif_stop_can_get_pending_events,
7205   remote_notif_stop_alloc_reply,
7206   REMOTE_NOTIF_STOP,
7207 };
7208 
7209 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
7210    the pid of the process that owns the threads we want to check, or
7211    -1 if we want to check all threads.  */
7212 
7213 static int
7214 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
7215 			ptid_t thread_ptid)
7216 {
7217   if (ws->kind == TARGET_WAITKIND_FORKED
7218       || ws->kind == TARGET_WAITKIND_VFORKED)
7219     {
7220       if (event_pid == -1 || event_pid == thread_ptid.pid ())
7221 	return 1;
7222     }
7223 
7224   return 0;
7225 }
7226 
7227 /* Return the thread's pending status used to determine whether the
7228    thread is a fork parent stopped at a fork event.  */
7229 
7230 static struct target_waitstatus *
7231 thread_pending_fork_status (struct thread_info *thread)
7232 {
7233   if (thread->suspend.waitstatus_pending_p)
7234     return &thread->suspend.waitstatus;
7235   else
7236     return &thread->pending_follow;
7237 }
7238 
7239 /* Determine if THREAD is a pending fork parent thread.  */
7240 
7241 static int
7242 is_pending_fork_parent_thread (struct thread_info *thread)
7243 {
7244   struct target_waitstatus *ws = thread_pending_fork_status (thread);
7245   int pid = -1;
7246 
7247   return is_pending_fork_parent (ws, pid, thread->ptid);
7248 }
7249 
7250 /* If CONTEXT contains any fork child threads that have not been
7251    reported yet, remove them from the CONTEXT list.  If such a
7252    thread exists it is because we are stopped at a fork catchpoint
7253    and have not yet called follow_fork, which will set up the
7254    host-side data structures for the new process.  */
7255 
7256 void
7257 remote_target::remove_new_fork_children (threads_listing_context *context)
7258 {
7259   int pid = -1;
7260   struct notif_client *notif = &notif_client_stop;
7261 
7262   /* For any threads stopped at a fork event, remove the corresponding
7263      fork child threads from the CONTEXT list.  */
7264   for (thread_info *thread : all_non_exited_threads (this))
7265     {
7266       struct target_waitstatus *ws = thread_pending_fork_status (thread);
7267 
7268       if (is_pending_fork_parent (ws, pid, thread->ptid))
7269 	context->remove_thread (ws->value.related_pid);
7270     }
7271 
7272   /* Check for any pending fork events (not reported or processed yet)
7273      in process PID and remove those fork child threads from the
7274      CONTEXT list as well.  */
7275   remote_notif_get_pending_events (notif);
7276   for (auto &event : get_remote_state ()->stop_reply_queue)
7277     if (event->ws.kind == TARGET_WAITKIND_FORKED
7278 	|| event->ws.kind == TARGET_WAITKIND_VFORKED
7279 	|| event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
7280       context->remove_thread (event->ws.value.related_pid);
7281 }
7282 
7283 /* Check whether any event pending in the vStopped queue would prevent a
7284    global or process wildcard vCont action.  Set *may_global_wildcard to
7285    false if we can't do a global wildcard (vCont;c), and clear the event
7286    inferior's may_wildcard_vcont flag if we can't do a process-wide
7287    wildcard resume (vCont;c:pPID.-1).  */
7288 
7289 void
7290 remote_target::check_pending_events_prevent_wildcard_vcont
7291   (bool *may_global_wildcard)
7292 {
7293   struct notif_client *notif = &notif_client_stop;
7294 
7295   remote_notif_get_pending_events (notif);
7296   for (auto &event : get_remote_state ()->stop_reply_queue)
7297     {
7298       if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
7299 	  || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
7300 	continue;
7301 
7302       if (event->ws.kind == TARGET_WAITKIND_FORKED
7303 	  || event->ws.kind == TARGET_WAITKIND_VFORKED)
7304 	*may_global_wildcard = false;
7305 
7306       /* This may be the first time we heard about this process.
7307 	 Regardless, we must not do a global wildcard resume, otherwise
7308 	 we'd resume this process too.  */
7309       *may_global_wildcard = false;
7310       if (event->ptid != null_ptid)
7311 	{
7312 	  inferior *inf = find_inferior_ptid (this, event->ptid);
7313 	  if (inf != NULL)
7314 	    get_remote_inferior (inf)->may_wildcard_vcont = false;
7315 	}
7316     }
7317 }
7318 
7319 /* Discard all pending stop replies of inferior INF.  */
7320 
7321 void
7322 remote_target::discard_pending_stop_replies (struct inferior *inf)
7323 {
7324   struct stop_reply *reply;
7325   struct remote_state *rs = get_remote_state ();
7326   struct remote_notif_state *rns = rs->notif_state;
7327 
7328   /* This function can be notified when an inferior exists.  When the
7329      target is not remote, the notification state is NULL.  */
7330   if (rs->remote_desc == NULL)
7331     return;
7332 
7333   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
7334 
7335   /* Discard the in-flight notification.  */
7336   if (reply != NULL && reply->ptid.pid () == inf->pid)
7337     {
7338       /* Leave the notification pending, since the server expects that
7339 	 we acknowledge it with vStopped.  But clear its contents, so
7340 	 that later on when we acknowledge it, we also discard it.  */
7341       reply->ws.kind = TARGET_WAITKIND_IGNORE;
7342 
7343       if (remote_debug)
7344 	fprintf_unfiltered (gdb_stdlog,
7345 			    "discarded in-flight notification\n");
7346     }
7347 
7348   /* Discard the stop replies we have already pulled with
7349      vStopped.  */
7350   auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7351 			      rs->stop_reply_queue.end (),
7352 			      [=] (const stop_reply_up &event)
7353 			      {
7354 				return event->ptid.pid () == inf->pid;
7355 			      });
7356   rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7357 }
7358 
7359 /* Discard the stop replies for RS in stop_reply_queue.  */
7360 
7361 void
7362 remote_target::discard_pending_stop_replies_in_queue ()
7363 {
7364   remote_state *rs = get_remote_state ();
7365 
7366   /* Discard the stop replies we have already pulled with
7367      vStopped.  */
7368   auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7369 			      rs->stop_reply_queue.end (),
7370 			      [=] (const stop_reply_up &event)
7371 			      {
7372 				return event->rs == rs;
7373 			      });
7374   rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7375 }
7376 
7377 /* Remove the first reply in 'stop_reply_queue' which matches
7378    PTID.  */
7379 
7380 struct stop_reply *
7381 remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
7382 {
7383   remote_state *rs = get_remote_state ();
7384 
7385   auto iter = std::find_if (rs->stop_reply_queue.begin (),
7386 			    rs->stop_reply_queue.end (),
7387 			    [=] (const stop_reply_up &event)
7388 			    {
7389 			      return event->ptid.matches (ptid);
7390 			    });
7391   struct stop_reply *result;
7392   if (iter == rs->stop_reply_queue.end ())
7393     result = nullptr;
7394   else
7395     {
7396       result = iter->release ();
7397       rs->stop_reply_queue.erase (iter);
7398     }
7399 
7400   if (notif_debug)
7401     fprintf_unfiltered (gdb_stdlog,
7402 			"notif: discard queued event: 'Stop' in %s\n",
7403 			target_pid_to_str (ptid).c_str ());
7404 
7405   return result;
7406 }
7407 
7408 /* Look for a queued stop reply belonging to PTID.  If one is found,
7409    remove it from the queue, and return it.  Returns NULL if none is
7410    found.  If there are still queued events left to process, tell the
7411    event loop to get back to target_wait soon.  */
7412 
7413 struct stop_reply *
7414 remote_target::queued_stop_reply (ptid_t ptid)
7415 {
7416   remote_state *rs = get_remote_state ();
7417   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
7418 
7419   if (!rs->stop_reply_queue.empty ())
7420     {
7421       /* There's still at least an event left.  */
7422       mark_async_event_handler (rs->remote_async_inferior_event_token);
7423     }
7424 
7425   return r;
7426 }
7427 
7428 /* Push a fully parsed stop reply in the stop reply queue.  Since we
7429    know that we now have at least one queued event left to pass to the
7430    core side, tell the event loop to get back to target_wait soon.  */
7431 
7432 void
7433 remote_target::push_stop_reply (struct stop_reply *new_event)
7434 {
7435   remote_state *rs = get_remote_state ();
7436   rs->stop_reply_queue.push_back (stop_reply_up (new_event));
7437 
7438   if (notif_debug)
7439     fprintf_unfiltered (gdb_stdlog,
7440 			"notif: push 'Stop' %s to queue %d\n",
7441 			target_pid_to_str (new_event->ptid).c_str (),
7442 			int (rs->stop_reply_queue.size ()));
7443 
7444   mark_async_event_handler (rs->remote_async_inferior_event_token);
7445 }
7446 
7447 /* Returns true if we have a stop reply for PTID.  */
7448 
7449 int
7450 remote_target::peek_stop_reply (ptid_t ptid)
7451 {
7452   remote_state *rs = get_remote_state ();
7453   for (auto &event : rs->stop_reply_queue)
7454     if (ptid == event->ptid
7455 	&& event->ws.kind == TARGET_WAITKIND_STOPPED)
7456       return 1;
7457   return 0;
7458 }
7459 
7460 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
7461    starting with P and ending with PEND matches PREFIX.  */
7462 
7463 static int
7464 strprefix (const char *p, const char *pend, const char *prefix)
7465 {
7466   for ( ; p < pend; p++, prefix++)
7467     if (*p != *prefix)
7468       return 0;
7469   return *prefix == '\0';
7470 }
7471 
7472 /* Parse the stop reply in BUF.  Either the function succeeds, and the
7473    result is stored in EVENT, or throws an error.  */
7474 
7475 void
7476 remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
7477 {
7478   remote_arch_state *rsa = NULL;
7479   ULONGEST addr;
7480   const char *p;
7481   int skipregs = 0;
7482 
7483   event->ptid = null_ptid;
7484   event->rs = get_remote_state ();
7485   event->ws.kind = TARGET_WAITKIND_IGNORE;
7486   event->ws.value.integer = 0;
7487   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
7488   event->regcache.clear ();
7489   event->core = -1;
7490 
7491   switch (buf[0])
7492     {
7493     case 'T':		/* Status with PC, SP, FP, ...	*/
7494       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
7495       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
7496 	    ss = signal number
7497 	    n... = register number
7498 	    r... = register contents
7499       */
7500 
7501       p = &buf[3];	/* after Txx */
7502       while (*p)
7503 	{
7504 	  const char *p1;
7505 	  int fieldsize;
7506 
7507 	  p1 = strchr (p, ':');
7508 	  if (p1 == NULL)
7509 	    error (_("Malformed packet(a) (missing colon): %s\n\
7510 Packet: '%s'\n"),
7511 		   p, buf);
7512 	  if (p == p1)
7513 	    error (_("Malformed packet(a) (missing register number): %s\n\
7514 Packet: '%s'\n"),
7515 		   p, buf);
7516 
7517 	  /* Some "registers" are actually extended stop information.
7518 	     Note if you're adding a new entry here: GDB 7.9 and
7519 	     earlier assume that all register "numbers" that start
7520 	     with an hex digit are real register numbers.  Make sure
7521 	     the server only sends such a packet if it knows the
7522 	     client understands it.  */
7523 
7524 	  if (strprefix (p, p1, "thread"))
7525 	    event->ptid = read_ptid (++p1, &p);
7526 	  else if (strprefix (p, p1, "syscall_entry"))
7527 	    {
7528 	      ULONGEST sysno;
7529 
7530 	      event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7531 	      p = unpack_varlen_hex (++p1, &sysno);
7532 	      event->ws.value.syscall_number = (int) sysno;
7533 	    }
7534 	  else if (strprefix (p, p1, "syscall_return"))
7535 	    {
7536 	      ULONGEST sysno;
7537 
7538 	      event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7539 	      p = unpack_varlen_hex (++p1, &sysno);
7540 	      event->ws.value.syscall_number = (int) sysno;
7541 	    }
7542 	  else if (strprefix (p, p1, "watch")
7543 		   || strprefix (p, p1, "rwatch")
7544 		   || strprefix (p, p1, "awatch"))
7545 	    {
7546 	      event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
7547 	      p = unpack_varlen_hex (++p1, &addr);
7548 	      event->watch_data_address = (CORE_ADDR) addr;
7549 	    }
7550 	  else if (strprefix (p, p1, "swbreak"))
7551 	    {
7552 	      event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7553 
7554 	      /* Make sure the stub doesn't forget to indicate support
7555 		 with qSupported.  */
7556 	      if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7557 		error (_("Unexpected swbreak stop reason"));
7558 
7559 	      /* The value part is documented as "must be empty",
7560 		 though we ignore it, in case we ever decide to make
7561 		 use of it in a backward compatible way.  */
7562 	      p = strchrnul (p1 + 1, ';');
7563 	    }
7564 	  else if (strprefix (p, p1, "hwbreak"))
7565 	    {
7566 	      event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7567 
7568 	      /* Make sure the stub doesn't forget to indicate support
7569 		 with qSupported.  */
7570 	      if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7571 		error (_("Unexpected hwbreak stop reason"));
7572 
7573 	      /* See above.  */
7574 	      p = strchrnul (p1 + 1, ';');
7575 	    }
7576 	  else if (strprefix (p, p1, "library"))
7577 	    {
7578 	      event->ws.kind = TARGET_WAITKIND_LOADED;
7579 	      p = strchrnul (p1 + 1, ';');
7580 	    }
7581 	  else if (strprefix (p, p1, "replaylog"))
7582 	    {
7583 	      event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7584 	      /* p1 will indicate "begin" or "end", but it makes
7585 		 no difference for now, so ignore it.  */
7586 	      p = strchrnul (p1 + 1, ';');
7587 	    }
7588 	  else if (strprefix (p, p1, "core"))
7589 	    {
7590 	      ULONGEST c;
7591 
7592 	      p = unpack_varlen_hex (++p1, &c);
7593 	      event->core = c;
7594 	    }
7595 	  else if (strprefix (p, p1, "fork"))
7596 	    {
7597 	      event->ws.value.related_pid = read_ptid (++p1, &p);
7598 	      event->ws.kind = TARGET_WAITKIND_FORKED;
7599 	    }
7600 	  else if (strprefix (p, p1, "vfork"))
7601 	    {
7602 	      event->ws.value.related_pid = read_ptid (++p1, &p);
7603 	      event->ws.kind = TARGET_WAITKIND_VFORKED;
7604 	    }
7605 	  else if (strprefix (p, p1, "vforkdone"))
7606 	    {
7607 	      event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
7608 	      p = strchrnul (p1 + 1, ';');
7609 	    }
7610 	  else if (strprefix (p, p1, "exec"))
7611 	    {
7612 	      ULONGEST ignored;
7613 	      int pathlen;
7614 
7615 	      /* Determine the length of the execd pathname.  */
7616 	      p = unpack_varlen_hex (++p1, &ignored);
7617 	      pathlen = (p - p1) / 2;
7618 
7619 	      /* Save the pathname for event reporting and for
7620 		 the next run command.  */
7621 	      gdb::unique_xmalloc_ptr<char[]> pathname
7622 		((char *) xmalloc (pathlen + 1));
7623 	      hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
7624 	      pathname[pathlen] = '\0';
7625 
7626 	      /* This is freed during event handling.  */
7627 	      event->ws.value.execd_pathname = pathname.release ();
7628 	      event->ws.kind = TARGET_WAITKIND_EXECD;
7629 
7630 	      /* Skip the registers included in this packet, since
7631 		 they may be for an architecture different from the
7632 		 one used by the original program.  */
7633 	      skipregs = 1;
7634 	    }
7635 	  else if (strprefix (p, p1, "create"))
7636 	    {
7637 	      event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
7638 	      p = strchrnul (p1 + 1, ';');
7639 	    }
7640 	  else
7641 	    {
7642 	      ULONGEST pnum;
7643 	      const char *p_temp;
7644 
7645 	      if (skipregs)
7646 		{
7647 		  p = strchrnul (p1 + 1, ';');
7648 		  p++;
7649 		  continue;
7650 		}
7651 
7652 	      /* Maybe a real ``P'' register number.  */
7653 	      p_temp = unpack_varlen_hex (p, &pnum);
7654 	      /* If the first invalid character is the colon, we got a
7655 		 register number.  Otherwise, it's an unknown stop
7656 		 reason.  */
7657 	      if (p_temp == p1)
7658 		{
7659 		  /* If we haven't parsed the event's thread yet, find
7660 		     it now, in order to find the architecture of the
7661 		     reported expedited registers.  */
7662 		  if (event->ptid == null_ptid)
7663 		    {
7664 		      /* If there is no thread-id information then leave
7665 			 the event->ptid as null_ptid.  Later in
7666 			 process_stop_reply we will pick a suitable
7667 			 thread.  */
7668 		      const char *thr = strstr (p1 + 1, ";thread:");
7669 		      if (thr != NULL)
7670 			event->ptid = read_ptid (thr + strlen (";thread:"),
7671 						 NULL);
7672 		    }
7673 
7674 		  if (rsa == NULL)
7675 		    {
7676 		      inferior *inf
7677 			= (event->ptid == null_ptid
7678 			   ? NULL
7679 			   : find_inferior_ptid (this, event->ptid));
7680 		      /* If this is the first time we learn anything
7681 			 about this process, skip the registers
7682 			 included in this packet, since we don't yet
7683 			 know which architecture to use to parse them.
7684 			 We'll determine the architecture later when
7685 			 we process the stop reply and retrieve the
7686 			 target description, via
7687 			 remote_notice_new_inferior ->
7688 			 post_create_inferior.  */
7689 		      if (inf == NULL)
7690 			{
7691 			  p = strchrnul (p1 + 1, ';');
7692 			  p++;
7693 			  continue;
7694 			}
7695 
7696 		      event->arch = inf->gdbarch;
7697 		      rsa = event->rs->get_remote_arch_state (event->arch);
7698 		    }
7699 
7700 		  packet_reg *reg
7701 		    = packet_reg_from_pnum (event->arch, rsa, pnum);
7702 		  cached_reg_t cached_reg;
7703 
7704 		  if (reg == NULL)
7705 		    error (_("Remote sent bad register number %s: %s\n\
7706 Packet: '%s'\n"),
7707 			   hex_string (pnum), p, buf);
7708 
7709 		  cached_reg.num = reg->regnum;
7710 		  cached_reg.data = (gdb_byte *)
7711 		    xmalloc (register_size (event->arch, reg->regnum));
7712 
7713 		  p = p1 + 1;
7714 		  fieldsize = hex2bin (p, cached_reg.data,
7715 				       register_size (event->arch, reg->regnum));
7716 		  p += 2 * fieldsize;
7717 		  if (fieldsize < register_size (event->arch, reg->regnum))
7718 		    warning (_("Remote reply is too short: %s"), buf);
7719 
7720 		  event->regcache.push_back (cached_reg);
7721 		}
7722 	      else
7723 		{
7724 		  /* Not a number.  Silently skip unknown optional
7725 		     info.  */
7726 		  p = strchrnul (p1 + 1, ';');
7727 		}
7728 	    }
7729 
7730 	  if (*p != ';')
7731 	    error (_("Remote register badly formatted: %s\nhere: %s"),
7732 		   buf, p);
7733 	  ++p;
7734 	}
7735 
7736       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7737 	break;
7738 
7739       /* fall through */
7740     case 'S':		/* Old style status, just signal only.  */
7741       {
7742 	int sig;
7743 
7744 	event->ws.kind = TARGET_WAITKIND_STOPPED;
7745 	sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7746 	if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7747 	  event->ws.value.sig = (enum gdb_signal) sig;
7748 	else
7749 	  event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7750       }
7751       break;
7752     case 'w':		/* Thread exited.  */
7753       {
7754 	ULONGEST value;
7755 
7756 	event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7757 	p = unpack_varlen_hex (&buf[1], &value);
7758 	event->ws.value.integer = value;
7759 	if (*p != ';')
7760 	  error (_("stop reply packet badly formatted: %s"), buf);
7761 	event->ptid = read_ptid (++p, NULL);
7762 	break;
7763       }
7764     case 'W':		/* Target exited.  */
7765     case 'X':
7766       {
7767 	ULONGEST value;
7768 
7769 	/* GDB used to accept only 2 hex chars here.  Stubs should
7770 	   only send more if they detect GDB supports multi-process
7771 	   support.  */
7772 	p = unpack_varlen_hex (&buf[1], &value);
7773 
7774 	if (buf[0] == 'W')
7775 	  {
7776 	    /* The remote process exited.  */
7777 	    event->ws.kind = TARGET_WAITKIND_EXITED;
7778 	    event->ws.value.integer = value;
7779 	  }
7780 	else
7781 	  {
7782 	    /* The remote process exited with a signal.  */
7783 	    event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7784 	    if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7785 	      event->ws.value.sig = (enum gdb_signal) value;
7786 	    else
7787 	      event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7788 	  }
7789 
7790 	/* If no process is specified, return null_ptid, and let the
7791 	   caller figure out the right process to use.  */
7792 	int pid = 0;
7793 	if (*p == '\0')
7794 	  ;
7795 	else if (*p == ';')
7796 	  {
7797 	    p++;
7798 
7799 	    if (*p == '\0')
7800 	      ;
7801 	    else if (startswith (p, "process:"))
7802 	      {
7803 		ULONGEST upid;
7804 
7805 		p += sizeof ("process:") - 1;
7806 		unpack_varlen_hex (p, &upid);
7807 		pid = upid;
7808 	      }
7809 	    else
7810 	      error (_("unknown stop reply packet: %s"), buf);
7811 	  }
7812 	else
7813 	  error (_("unknown stop reply packet: %s"), buf);
7814 	event->ptid = ptid_t (pid);
7815       }
7816       break;
7817     case 'N':
7818       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7819       event->ptid = minus_one_ptid;
7820       break;
7821     }
7822 }
7823 
7824 /* When the stub wants to tell GDB about a new notification reply, it
7825    sends a notification (%Stop, for example).  Those can come it at
7826    any time, hence, we have to make sure that any pending
7827    putpkt/getpkt sequence we're making is finished, before querying
7828    the stub for more events with the corresponding ack command
7829    (vStopped, for example).  E.g., if we started a vStopped sequence
7830    immediately upon receiving the notification, something like this
7831    could happen:
7832 
7833     1.1) --> Hg 1
7834     1.2) <-- OK
7835     1.3) --> g
7836     1.4) <-- %Stop
7837     1.5) --> vStopped
7838     1.6) <-- (registers reply to step #1.3)
7839 
7840    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7841    query.
7842 
7843    To solve this, whenever we parse a %Stop notification successfully,
7844    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7845    doing whatever we were doing:
7846 
7847     2.1) --> Hg 1
7848     2.2) <-- OK
7849     2.3) --> g
7850     2.4) <-- %Stop
7851       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7852     2.5) <-- (registers reply to step #2.3)
7853 
7854    Eventually after step #2.5, we return to the event loop, which
7855    notices there's an event on the
7856    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7857    associated callback --- the function below.  At this point, we're
7858    always safe to start a vStopped sequence. :
7859 
7860     2.6) --> vStopped
7861     2.7) <-- T05 thread:2
7862     2.8) --> vStopped
7863     2.9) --> OK
7864 */
7865 
7866 void
7867 remote_target::remote_notif_get_pending_events (notif_client *nc)
7868 {
7869   struct remote_state *rs = get_remote_state ();
7870 
7871   if (rs->notif_state->pending_event[nc->id] != NULL)
7872     {
7873       if (notif_debug)
7874 	fprintf_unfiltered (gdb_stdlog,
7875 			    "notif: process: '%s' ack pending event\n",
7876 			    nc->name);
7877 
7878       /* acknowledge */
7879       nc->ack (this, nc, rs->buf.data (),
7880 	       rs->notif_state->pending_event[nc->id]);
7881       rs->notif_state->pending_event[nc->id] = NULL;
7882 
7883       while (1)
7884 	{
7885 	  getpkt (&rs->buf, 0);
7886 	  if (strcmp (rs->buf.data (), "OK") == 0)
7887 	    break;
7888 	  else
7889 	    remote_notif_ack (this, nc, rs->buf.data ());
7890 	}
7891     }
7892   else
7893     {
7894       if (notif_debug)
7895 	fprintf_unfiltered (gdb_stdlog,
7896 			    "notif: process: '%s' no pending reply\n",
7897 			    nc->name);
7898     }
7899 }
7900 
7901 /* Wrapper around remote_target::remote_notif_get_pending_events to
7902    avoid having to export the whole remote_target class.  */
7903 
7904 void
7905 remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7906 {
7907   remote->remote_notif_get_pending_events (nc);
7908 }
7909 
7910 /* Called from process_stop_reply when the stop packet we are responding
7911    to didn't include a process-id or thread-id.  STATUS is the stop event
7912    we are responding to.
7913 
7914    It is the task of this function to select a suitable thread (or process)
7915    and return its ptid, this is the thread (or process) we will assume the
7916    stop event came from.
7917 
7918    In some cases there isn't really any choice about which thread (or
7919    process) is selected, a basic remote with a single process containing a
7920    single thread might choose not to send any process-id or thread-id in
7921    its stop packets, this function will select and return the one and only
7922    thread.
7923 
7924    However, if a target supports multiple threads (or processes) and still
7925    doesn't include a thread-id (or process-id) in its stop packet then
7926    first, this is a badly behaving target, and second, we're going to have
7927    to select a thread (or process) at random and use that.  This function
7928    will print a warning to the user if it detects that there is the
7929    possibility that GDB is guessing which thread (or process) to
7930    report.
7931 
7932    Note that this is called before GDB fetches the updated thread list from the
7933    target.  So it's possible for the stop reply to be ambiguous and for GDB to
7934    not realize it.  For example, if there's initially one thread, the target
7935    spawns a second thread, and then sends a stop reply without an id that
7936    concerns the first thread.  GDB will assume the stop reply is about the
7937    first thread - the only thread it knows about - without printing a warning.
7938    Anyway, if the remote meant for the stop reply to be about the second thread,
7939    then it would be really broken, because GDB doesn't know about that thread
7940    yet.  */
7941 
7942 ptid_t
7943 remote_target::select_thread_for_ambiguous_stop_reply
7944   (const struct target_waitstatus *status)
7945 {
7946   REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7947 
7948   /* Some stop events apply to all threads in an inferior, while others
7949      only apply to a single thread.  */
7950   bool process_wide_stop
7951     = (status->kind == TARGET_WAITKIND_EXITED
7952        || status->kind == TARGET_WAITKIND_SIGNALLED);
7953 
7954   remote_debug_printf ("process_wide_stop = %d", process_wide_stop);
7955 
7956   thread_info *first_resumed_thread = nullptr;
7957   bool ambiguous = false;
7958 
7959   /* Consider all non-exited threads of the target, find the first resumed
7960      one.  */
7961   for (thread_info *thr : all_non_exited_threads (this))
7962     {
7963       remote_thread_info *remote_thr = get_remote_thread_info (thr);
7964 
7965       if (remote_thr->get_resume_state () != resume_state::RESUMED)
7966 	continue;
7967 
7968       if (first_resumed_thread == nullptr)
7969 	first_resumed_thread = thr;
7970       else if (!process_wide_stop
7971 	       || first_resumed_thread->ptid.pid () != thr->ptid.pid ())
7972 	ambiguous = true;
7973     }
7974 
7975   remote_debug_printf ("first resumed thread is %s",
7976 		       pid_to_str (first_resumed_thread->ptid).c_str ());
7977   remote_debug_printf ("is this guess ambiguous? = %d", ambiguous);
7978 
7979   gdb_assert (first_resumed_thread != nullptr);
7980 
7981   /* Warn if the remote target is sending ambiguous stop replies.  */
7982   if (ambiguous)
7983     {
7984       static bool warned = false;
7985 
7986       if (!warned)
7987 	{
7988 	  /* If you are seeing this warning then the remote target has
7989 	     stopped without specifying a thread-id, but the target
7990 	     does have multiple threads (or inferiors), and so GDB is
7991 	     having to guess which thread stopped.
7992 
7993 	     Examples of what might cause this are the target sending
7994 	     and 'S' stop packet, or a 'T' stop packet and not
7995 	     including a thread-id.
7996 
7997 	     Additionally, the target might send a 'W' or 'X packet
7998 	     without including a process-id, when the target has
7999 	     multiple running inferiors.  */
8000 	  if (process_wide_stop)
8001 	    warning (_("multi-inferior target stopped without "
8002 		       "sending a process-id, using first "
8003 		       "non-exited inferior"));
8004 	  else
8005 	    warning (_("multi-threaded target stopped without "
8006 		       "sending a thread-id, using first "
8007 		       "non-exited thread"));
8008 	  warned = true;
8009 	}
8010     }
8011 
8012   /* If this is a stop for all threads then don't use a particular threads
8013      ptid, instead create a new ptid where only the pid field is set.  */
8014   if (process_wide_stop)
8015     return ptid_t (first_resumed_thread->ptid.pid ());
8016   else
8017     return first_resumed_thread->ptid;
8018 }
8019 
8020 /* Called when it is decided that STOP_REPLY holds the info of the
8021    event that is to be returned to the core.  This function always
8022    destroys STOP_REPLY.  */
8023 
8024 ptid_t
8025 remote_target::process_stop_reply (struct stop_reply *stop_reply,
8026 				   struct target_waitstatus *status)
8027 {
8028   *status = stop_reply->ws;
8029   ptid_t ptid = stop_reply->ptid;
8030 
8031   /* If no thread/process was reported by the stub then select a suitable
8032      thread/process.  */
8033   if (ptid == null_ptid)
8034     ptid = select_thread_for_ambiguous_stop_reply (status);
8035   gdb_assert (ptid != null_ptid);
8036 
8037   if (status->kind != TARGET_WAITKIND_EXITED
8038       && status->kind != TARGET_WAITKIND_SIGNALLED
8039       && status->kind != TARGET_WAITKIND_NO_RESUMED)
8040     {
8041       /* Expedited registers.  */
8042       if (!stop_reply->regcache.empty ())
8043 	{
8044 	  struct regcache *regcache
8045 	    = get_thread_arch_regcache (this, ptid, stop_reply->arch);
8046 
8047 	  for (cached_reg_t &reg : stop_reply->regcache)
8048 	    {
8049 	      regcache->raw_supply (reg.num, reg.data);
8050 	      xfree (reg.data);
8051 	    }
8052 
8053 	  stop_reply->regcache.clear ();
8054 	}
8055 
8056       remote_notice_new_inferior (ptid, false);
8057       remote_thread_info *remote_thr = get_remote_thread_info (this, ptid);
8058       remote_thr->core = stop_reply->core;
8059       remote_thr->stop_reason = stop_reply->stop_reason;
8060       remote_thr->watch_data_address = stop_reply->watch_data_address;
8061 
8062       if (target_is_non_stop_p ())
8063 	{
8064 	  /* If the target works in non-stop mode, a stop-reply indicates that
8065 	     only this thread stopped.  */
8066 	  remote_thr->set_not_resumed ();
8067 	}
8068       else
8069 	{
8070 	  /* If the target works in all-stop mode, a stop-reply indicates that
8071 	     all the target's threads stopped.  */
8072 	  for (thread_info *tp : all_non_exited_threads (this))
8073 	    get_remote_thread_info (tp)->set_not_resumed ();
8074 	}
8075     }
8076 
8077   delete stop_reply;
8078   return ptid;
8079 }
8080 
8081 /* The non-stop mode version of target_wait.  */
8082 
8083 ptid_t
8084 remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status,
8085 			target_wait_flags options)
8086 {
8087   struct remote_state *rs = get_remote_state ();
8088   struct stop_reply *stop_reply;
8089   int ret;
8090   int is_notif = 0;
8091 
8092   /* If in non-stop mode, get out of getpkt even if a
8093      notification is received.	*/
8094 
8095   ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
8096   while (1)
8097     {
8098       if (ret != -1 && !is_notif)
8099 	switch (rs->buf[0])
8100 	  {
8101 	  case 'E':		/* Error of some sort.	*/
8102 	    /* We're out of sync with the target now.  Did it continue
8103 	       or not?  We can't tell which thread it was in non-stop,
8104 	       so just ignore this.  */
8105 	    warning (_("Remote failure reply: %s"), rs->buf.data ());
8106 	    break;
8107 	  case 'O':		/* Console output.  */
8108 	    remote_console_output (&rs->buf[1]);
8109 	    break;
8110 	  default:
8111 	    warning (_("Invalid remote reply: %s"), rs->buf.data ());
8112 	    break;
8113 	  }
8114 
8115       /* Acknowledge a pending stop reply that may have arrived in the
8116 	 mean time.  */
8117       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
8118 	remote_notif_get_pending_events (&notif_client_stop);
8119 
8120       /* If indeed we noticed a stop reply, we're done.  */
8121       stop_reply = queued_stop_reply (ptid);
8122       if (stop_reply != NULL)
8123 	return process_stop_reply (stop_reply, status);
8124 
8125       /* Still no event.  If we're just polling for an event, then
8126 	 return to the event loop.  */
8127       if (options & TARGET_WNOHANG)
8128 	{
8129 	  status->kind = TARGET_WAITKIND_IGNORE;
8130 	  return minus_one_ptid;
8131 	}
8132 
8133       /* Otherwise do a blocking wait.  */
8134       ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
8135     }
8136 }
8137 
8138 /* Return the first resumed thread.  */
8139 
8140 static ptid_t
8141 first_remote_resumed_thread (remote_target *target)
8142 {
8143   for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid))
8144     if (tp->resumed)
8145       return tp->ptid;
8146   return null_ptid;
8147 }
8148 
8149 /* Wait until the remote machine stops, then return, storing status in
8150    STATUS just as `wait' would.  */
8151 
8152 ptid_t
8153 remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
8154 			target_wait_flags options)
8155 {
8156   struct remote_state *rs = get_remote_state ();
8157   ptid_t event_ptid = null_ptid;
8158   char *buf;
8159   struct stop_reply *stop_reply;
8160 
8161  again:
8162 
8163   status->kind = TARGET_WAITKIND_IGNORE;
8164   status->value.integer = 0;
8165 
8166   stop_reply = queued_stop_reply (ptid);
8167   if (stop_reply != NULL)
8168     return process_stop_reply (stop_reply, status);
8169 
8170   if (rs->cached_wait_status)
8171     /* Use the cached wait status, but only once.  */
8172     rs->cached_wait_status = 0;
8173   else
8174     {
8175       int ret;
8176       int is_notif;
8177       int forever = ((options & TARGET_WNOHANG) == 0
8178 		     && rs->wait_forever_enabled_p);
8179 
8180       if (!rs->waiting_for_stop_reply)
8181 	{
8182 	  status->kind = TARGET_WAITKIND_NO_RESUMED;
8183 	  return minus_one_ptid;
8184 	}
8185 
8186       /* FIXME: cagney/1999-09-27: If we're in async mode we should
8187 	 _never_ wait for ever -> test on target_is_async_p().
8188 	 However, before we do that we need to ensure that the caller
8189 	 knows how to take the target into/out of async mode.  */
8190       ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
8191 
8192       /* GDB gets a notification.  Return to core as this event is
8193 	 not interesting.  */
8194       if (ret != -1 && is_notif)
8195 	return minus_one_ptid;
8196 
8197       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
8198 	return minus_one_ptid;
8199     }
8200 
8201   buf = rs->buf.data ();
8202 
8203   /* Assume that the target has acknowledged Ctrl-C unless we receive
8204      an 'F' or 'O' packet.  */
8205   if (buf[0] != 'F' && buf[0] != 'O')
8206     rs->ctrlc_pending_p = 0;
8207 
8208   switch (buf[0])
8209     {
8210     case 'E':		/* Error of some sort.	*/
8211       /* We're out of sync with the target now.  Did it continue or
8212 	 not?  Not is more likely, so report a stop.  */
8213       rs->waiting_for_stop_reply = 0;
8214 
8215       warning (_("Remote failure reply: %s"), buf);
8216       status->kind = TARGET_WAITKIND_STOPPED;
8217       status->value.sig = GDB_SIGNAL_0;
8218       break;
8219     case 'F':		/* File-I/O request.  */
8220       /* GDB may access the inferior memory while handling the File-I/O
8221 	 request, but we don't want GDB accessing memory while waiting
8222 	 for a stop reply.  See the comments in putpkt_binary.  Set
8223 	 waiting_for_stop_reply to 0 temporarily.  */
8224       rs->waiting_for_stop_reply = 0;
8225       remote_fileio_request (this, buf, rs->ctrlc_pending_p);
8226       rs->ctrlc_pending_p = 0;
8227       /* GDB handled the File-I/O request, and the target is running
8228 	 again.  Keep waiting for events.  */
8229       rs->waiting_for_stop_reply = 1;
8230       break;
8231     case 'N': case 'T': case 'S': case 'X': case 'W':
8232       {
8233 	/* There is a stop reply to handle.  */
8234 	rs->waiting_for_stop_reply = 0;
8235 
8236 	stop_reply
8237 	  = (struct stop_reply *) remote_notif_parse (this,
8238 						      &notif_client_stop,
8239 						      rs->buf.data ());
8240 
8241 	event_ptid = process_stop_reply (stop_reply, status);
8242 	break;
8243       }
8244     case 'O':		/* Console output.  */
8245       remote_console_output (buf + 1);
8246       break;
8247     case '\0':
8248       if (rs->last_sent_signal != GDB_SIGNAL_0)
8249 	{
8250 	  /* Zero length reply means that we tried 'S' or 'C' and the
8251 	     remote system doesn't support it.  */
8252 	  target_terminal::ours_for_output ();
8253 	  printf_filtered
8254 	    ("Can't send signals to this remote system.  %s not sent.\n",
8255 	     gdb_signal_to_name (rs->last_sent_signal));
8256 	  rs->last_sent_signal = GDB_SIGNAL_0;
8257 	  target_terminal::inferior ();
8258 
8259 	  strcpy (buf, rs->last_sent_step ? "s" : "c");
8260 	  putpkt (buf);
8261 	  break;
8262 	}
8263       /* fallthrough */
8264     default:
8265       warning (_("Invalid remote reply: %s"), buf);
8266       break;
8267     }
8268 
8269   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
8270     return minus_one_ptid;
8271   else if (status->kind == TARGET_WAITKIND_IGNORE)
8272     {
8273       /* Nothing interesting happened.  If we're doing a non-blocking
8274 	 poll, we're done.  Otherwise, go back to waiting.  */
8275       if (options & TARGET_WNOHANG)
8276 	return minus_one_ptid;
8277       else
8278 	goto again;
8279     }
8280   else if (status->kind != TARGET_WAITKIND_EXITED
8281 	   && status->kind != TARGET_WAITKIND_SIGNALLED)
8282     {
8283       if (event_ptid != null_ptid)
8284 	record_currthread (rs, event_ptid);
8285       else
8286 	event_ptid = first_remote_resumed_thread (this);
8287     }
8288   else
8289     {
8290       /* A process exit.  Invalidate our notion of current thread.  */
8291       record_currthread (rs, minus_one_ptid);
8292       /* It's possible that the packet did not include a pid.  */
8293       if (event_ptid == null_ptid)
8294 	event_ptid = first_remote_resumed_thread (this);
8295       /* EVENT_PTID could still be NULL_PTID.  Double-check.  */
8296       if (event_ptid == null_ptid)
8297 	event_ptid = magic_null_ptid;
8298     }
8299 
8300   return event_ptid;
8301 }
8302 
8303 /* Wait until the remote machine stops, then return, storing status in
8304    STATUS just as `wait' would.  */
8305 
8306 ptid_t
8307 remote_target::wait (ptid_t ptid, struct target_waitstatus *status,
8308 		     target_wait_flags options)
8309 {
8310   REMOTE_SCOPED_DEBUG_ENTER_EXIT;
8311 
8312   remote_state *rs = get_remote_state ();
8313 
8314   /* Start by clearing the flag that asks for our wait method to be called,
8315      we'll mark it again at the end if needed.  */
8316   if (target_is_async_p ())
8317     clear_async_event_handler (rs->remote_async_inferior_event_token);
8318 
8319   ptid_t event_ptid;
8320 
8321   if (target_is_non_stop_p ())
8322     event_ptid = wait_ns (ptid, status, options);
8323   else
8324     event_ptid = wait_as (ptid, status, options);
8325 
8326   if (target_is_async_p ())
8327     {
8328       /* If there are events left in the queue, or unacknowledged
8329 	 notifications, then tell the event loop to call us again.  */
8330       if (!rs->stop_reply_queue.empty ()
8331 	  || rs->notif_state->pending_event[notif_client_stop.id] != nullptr)
8332 	mark_async_event_handler (rs->remote_async_inferior_event_token);
8333     }
8334 
8335   return event_ptid;
8336 }
8337 
8338 /* Fetch a single register using a 'p' packet.  */
8339 
8340 int
8341 remote_target::fetch_register_using_p (struct regcache *regcache,
8342 				       packet_reg *reg)
8343 {
8344   struct gdbarch *gdbarch = regcache->arch ();
8345   struct remote_state *rs = get_remote_state ();
8346   char *buf, *p;
8347   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8348   int i;
8349 
8350   if (packet_support (PACKET_p) == PACKET_DISABLE)
8351     return 0;
8352 
8353   if (reg->pnum == -1)
8354     return 0;
8355 
8356   p = rs->buf.data ();
8357   *p++ = 'p';
8358   p += hexnumstr (p, reg->pnum);
8359   *p++ = '\0';
8360   putpkt (rs->buf);
8361   getpkt (&rs->buf, 0);
8362 
8363   buf = rs->buf.data ();
8364 
8365   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
8366     {
8367     case PACKET_OK:
8368       break;
8369     case PACKET_UNKNOWN:
8370       return 0;
8371     case PACKET_ERROR:
8372       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
8373 	     gdbarch_register_name (regcache->arch (),
8374 				    reg->regnum),
8375 	     buf);
8376     }
8377 
8378   /* If this register is unfetchable, tell the regcache.  */
8379   if (buf[0] == 'x')
8380     {
8381       regcache->raw_supply (reg->regnum, NULL);
8382       return 1;
8383     }
8384 
8385   /* Otherwise, parse and supply the value.  */
8386   p = buf;
8387   i = 0;
8388   while (p[0] != 0)
8389     {
8390       if (p[1] == 0)
8391 	error (_("fetch_register_using_p: early buf termination"));
8392 
8393       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
8394       p += 2;
8395     }
8396   regcache->raw_supply (reg->regnum, regp);
8397   return 1;
8398 }
8399 
8400 /* Fetch the registers included in the target's 'g' packet.  */
8401 
8402 int
8403 remote_target::send_g_packet ()
8404 {
8405   struct remote_state *rs = get_remote_state ();
8406   int buf_len;
8407 
8408   xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
8409   putpkt (rs->buf);
8410   getpkt (&rs->buf, 0);
8411   if (packet_check_result (rs->buf) == PACKET_ERROR)
8412     error (_("Could not read registers; remote failure reply '%s'"),
8413 	   rs->buf.data ());
8414 
8415   /* We can get out of synch in various cases.  If the first character
8416      in the buffer is not a hex character, assume that has happened
8417      and try to fetch another packet to read.  */
8418   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
8419 	 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
8420 	 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
8421 	 && rs->buf[0] != 'x')	/* New: unavailable register value.  */
8422     {
8423       remote_debug_printf ("Bad register packet; fetching a new packet");
8424       getpkt (&rs->buf, 0);
8425     }
8426 
8427   buf_len = strlen (rs->buf.data ());
8428 
8429   /* Sanity check the received packet.  */
8430   if (buf_len % 2 != 0)
8431     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
8432 
8433   return buf_len / 2;
8434 }
8435 
8436 void
8437 remote_target::process_g_packet (struct regcache *regcache)
8438 {
8439   struct gdbarch *gdbarch = regcache->arch ();
8440   struct remote_state *rs = get_remote_state ();
8441   remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8442   int i, buf_len;
8443   char *p;
8444   char *regs;
8445 
8446   buf_len = strlen (rs->buf.data ());
8447 
8448   /* Further sanity checks, with knowledge of the architecture.  */
8449   if (buf_len > 2 * rsa->sizeof_g_packet)
8450     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8451 	     "bytes): %s"),
8452 	   rsa->sizeof_g_packet, buf_len / 2,
8453 	   rs->buf.data ());
8454 
8455   /* Save the size of the packet sent to us by the target.  It is used
8456      as a heuristic when determining the max size of packets that the
8457      target can safely receive.  */
8458   if (rsa->actual_register_packet_size == 0)
8459     rsa->actual_register_packet_size = buf_len;
8460 
8461   /* If this is smaller than we guessed the 'g' packet would be,
8462      update our records.  A 'g' reply that doesn't include a register's
8463      value implies either that the register is not available, or that
8464      the 'p' packet must be used.  */
8465   if (buf_len < 2 * rsa->sizeof_g_packet)
8466     {
8467       long sizeof_g_packet = buf_len / 2;
8468 
8469       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8470 	{
8471 	  long offset = rsa->regs[i].offset;
8472 	  long reg_size = register_size (gdbarch, i);
8473 
8474 	  if (rsa->regs[i].pnum == -1)
8475 	    continue;
8476 
8477 	  if (offset >= sizeof_g_packet)
8478 	    rsa->regs[i].in_g_packet = 0;
8479 	  else if (offset + reg_size > sizeof_g_packet)
8480 	    error (_("Truncated register %d in remote 'g' packet"), i);
8481 	  else
8482 	    rsa->regs[i].in_g_packet = 1;
8483 	}
8484 
8485       /* Looks valid enough, we can assume this is the correct length
8486 	 for a 'g' packet.  It's important not to adjust
8487 	 rsa->sizeof_g_packet if we have truncated registers otherwise
8488 	 this "if" won't be run the next time the method is called
8489 	 with a packet of the same size and one of the internal errors
8490 	 below will trigger instead.  */
8491       rsa->sizeof_g_packet = sizeof_g_packet;
8492     }
8493 
8494   regs = (char *) alloca (rsa->sizeof_g_packet);
8495 
8496   /* Unimplemented registers read as all bits zero.  */
8497   memset (regs, 0, rsa->sizeof_g_packet);
8498 
8499   /* Reply describes registers byte by byte, each byte encoded as two
8500      hex characters.  Suck them all up, then supply them to the
8501      register cacheing/storage mechanism.  */
8502 
8503   p = rs->buf.data ();
8504   for (i = 0; i < rsa->sizeof_g_packet; i++)
8505     {
8506       if (p[0] == 0 || p[1] == 0)
8507 	/* This shouldn't happen - we adjusted sizeof_g_packet above.  */
8508 	internal_error (__FILE__, __LINE__,
8509 			_("unexpected end of 'g' packet reply"));
8510 
8511       if (p[0] == 'x' && p[1] == 'x')
8512 	regs[i] = 0;		/* 'x' */
8513       else
8514 	regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8515       p += 2;
8516     }
8517 
8518   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8519     {
8520       struct packet_reg *r = &rsa->regs[i];
8521       long reg_size = register_size (gdbarch, i);
8522 
8523       if (r->in_g_packet)
8524 	{
8525 	  if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
8526 	    /* This shouldn't happen - we adjusted in_g_packet above.  */
8527 	    internal_error (__FILE__, __LINE__,
8528 			    _("unexpected end of 'g' packet reply"));
8529 	  else if (rs->buf[r->offset * 2] == 'x')
8530 	    {
8531 	      gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
8532 	      /* The register isn't available, mark it as such (at
8533 		 the same time setting the value to zero).  */
8534 	      regcache->raw_supply (r->regnum, NULL);
8535 	    }
8536 	  else
8537 	    regcache->raw_supply (r->regnum, regs + r->offset);
8538 	}
8539     }
8540 }
8541 
8542 void
8543 remote_target::fetch_registers_using_g (struct regcache *regcache)
8544 {
8545   send_g_packet ();
8546   process_g_packet (regcache);
8547 }
8548 
8549 /* Make the remote selected traceframe match GDB's selected
8550    traceframe.  */
8551 
8552 void
8553 remote_target::set_remote_traceframe ()
8554 {
8555   int newnum;
8556   struct remote_state *rs = get_remote_state ();
8557 
8558   if (rs->remote_traceframe_number == get_traceframe_number ())
8559     return;
8560 
8561   /* Avoid recursion, remote_trace_find calls us again.  */
8562   rs->remote_traceframe_number = get_traceframe_number ();
8563 
8564   newnum = target_trace_find (tfind_number,
8565 			      get_traceframe_number (), 0, 0, NULL);
8566 
8567   /* Should not happen.  If it does, all bets are off.  */
8568   if (newnum != get_traceframe_number ())
8569     warning (_("could not set remote traceframe"));
8570 }
8571 
8572 void
8573 remote_target::fetch_registers (struct regcache *regcache, int regnum)
8574 {
8575   struct gdbarch *gdbarch = regcache->arch ();
8576   struct remote_state *rs = get_remote_state ();
8577   remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8578   int i;
8579 
8580   set_remote_traceframe ();
8581   set_general_thread (regcache->ptid ());
8582 
8583   if (regnum >= 0)
8584     {
8585       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8586 
8587       gdb_assert (reg != NULL);
8588 
8589       /* If this register might be in the 'g' packet, try that first -
8590 	 we are likely to read more than one register.  If this is the
8591 	 first 'g' packet, we might be overly optimistic about its
8592 	 contents, so fall back to 'p'.  */
8593       if (reg->in_g_packet)
8594 	{
8595 	  fetch_registers_using_g (regcache);
8596 	  if (reg->in_g_packet)
8597 	    return;
8598 	}
8599 
8600       if (fetch_register_using_p (regcache, reg))
8601 	return;
8602 
8603       /* This register is not available.  */
8604       regcache->raw_supply (reg->regnum, NULL);
8605 
8606       return;
8607     }
8608 
8609   fetch_registers_using_g (regcache);
8610 
8611   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8612     if (!rsa->regs[i].in_g_packet)
8613       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
8614 	{
8615 	  /* This register is not available.  */
8616 	  regcache->raw_supply (i, NULL);
8617 	}
8618 }
8619 
8620 /* Prepare to store registers.  Since we may send them all (using a
8621    'G' request), we have to read out the ones we don't want to change
8622    first.  */
8623 
8624 void
8625 remote_target::prepare_to_store (struct regcache *regcache)
8626 {
8627   struct remote_state *rs = get_remote_state ();
8628   remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8629   int i;
8630 
8631   /* Make sure the entire registers array is valid.  */
8632   switch (packet_support (PACKET_P))
8633     {
8634     case PACKET_DISABLE:
8635     case PACKET_SUPPORT_UNKNOWN:
8636       /* Make sure all the necessary registers are cached.  */
8637       for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8638 	if (rsa->regs[i].in_g_packet)
8639 	  regcache->raw_update (rsa->regs[i].regnum);
8640       break;
8641     case PACKET_ENABLE:
8642       break;
8643     }
8644 }
8645 
8646 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
8647    packet was not recognized.  */
8648 
8649 int
8650 remote_target::store_register_using_P (const struct regcache *regcache,
8651 				       packet_reg *reg)
8652 {
8653   struct gdbarch *gdbarch = regcache->arch ();
8654   struct remote_state *rs = get_remote_state ();
8655   /* Try storing a single register.  */
8656   char *buf = rs->buf.data ();
8657   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8658   char *p;
8659 
8660   if (packet_support (PACKET_P) == PACKET_DISABLE)
8661     return 0;
8662 
8663   if (reg->pnum == -1)
8664     return 0;
8665 
8666   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
8667   p = buf + strlen (buf);
8668   regcache->raw_collect (reg->regnum, regp);
8669   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
8670   putpkt (rs->buf);
8671   getpkt (&rs->buf, 0);
8672 
8673   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8674     {
8675     case PACKET_OK:
8676       return 1;
8677     case PACKET_ERROR:
8678       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8679 	     gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
8680     case PACKET_UNKNOWN:
8681       return 0;
8682     default:
8683       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8684     }
8685 }
8686 
8687 /* Store register REGNUM, or all registers if REGNUM == -1, from the
8688    contents of the register cache buffer.  FIXME: ignores errors.  */
8689 
8690 void
8691 remote_target::store_registers_using_G (const struct regcache *regcache)
8692 {
8693   struct remote_state *rs = get_remote_state ();
8694   remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8695   gdb_byte *regs;
8696   char *p;
8697 
8698   /* Extract all the registers in the regcache copying them into a
8699      local buffer.  */
8700   {
8701     int i;
8702 
8703     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
8704     memset (regs, 0, rsa->sizeof_g_packet);
8705     for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8706       {
8707 	struct packet_reg *r = &rsa->regs[i];
8708 
8709 	if (r->in_g_packet)
8710 	  regcache->raw_collect (r->regnum, regs + r->offset);
8711       }
8712   }
8713 
8714   /* Command describes registers byte by byte,
8715      each byte encoded as two hex characters.  */
8716   p = rs->buf.data ();
8717   *p++ = 'G';
8718   bin2hex (regs, p, rsa->sizeof_g_packet);
8719   putpkt (rs->buf);
8720   getpkt (&rs->buf, 0);
8721   if (packet_check_result (rs->buf) == PACKET_ERROR)
8722     error (_("Could not write registers; remote failure reply '%s'"),
8723 	   rs->buf.data ());
8724 }
8725 
8726 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8727    of the register cache buffer.  FIXME: ignores errors.  */
8728 
8729 void
8730 remote_target::store_registers (struct regcache *regcache, int regnum)
8731 {
8732   struct gdbarch *gdbarch = regcache->arch ();
8733   struct remote_state *rs = get_remote_state ();
8734   remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8735   int i;
8736 
8737   set_remote_traceframe ();
8738   set_general_thread (regcache->ptid ());
8739 
8740   if (regnum >= 0)
8741     {
8742       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8743 
8744       gdb_assert (reg != NULL);
8745 
8746       /* Always prefer to store registers using the 'P' packet if
8747 	 possible; we often change only a small number of registers.
8748 	 Sometimes we change a larger number; we'd need help from a
8749 	 higher layer to know to use 'G'.  */
8750       if (store_register_using_P (regcache, reg))
8751 	return;
8752 
8753       /* For now, don't complain if we have no way to write the
8754 	 register.  GDB loses track of unavailable registers too
8755 	 easily.  Some day, this may be an error.  We don't have
8756 	 any way to read the register, either...  */
8757       if (!reg->in_g_packet)
8758 	return;
8759 
8760       store_registers_using_G (regcache);
8761       return;
8762     }
8763 
8764   store_registers_using_G (regcache);
8765 
8766   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8767     if (!rsa->regs[i].in_g_packet)
8768       if (!store_register_using_P (regcache, &rsa->regs[i]))
8769 	/* See above for why we do not issue an error here.  */
8770 	continue;
8771 }
8772 
8773 
8774 /* Return the number of hex digits in num.  */
8775 
8776 static int
8777 hexnumlen (ULONGEST num)
8778 {
8779   int i;
8780 
8781   for (i = 0; num != 0; i++)
8782     num >>= 4;
8783 
8784   return std::max (i, 1);
8785 }
8786 
8787 /* Set BUF to the minimum number of hex digits representing NUM.  */
8788 
8789 static int
8790 hexnumstr (char *buf, ULONGEST num)
8791 {
8792   int len = hexnumlen (num);
8793 
8794   return hexnumnstr (buf, num, len);
8795 }
8796 
8797 
8798 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
8799 
8800 static int
8801 hexnumnstr (char *buf, ULONGEST num, int width)
8802 {
8803   int i;
8804 
8805   buf[width] = '\0';
8806 
8807   for (i = width - 1; i >= 0; i--)
8808     {
8809       buf[i] = "0123456789abcdef"[(num & 0xf)];
8810       num >>= 4;
8811     }
8812 
8813   return width;
8814 }
8815 
8816 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
8817 
8818 static CORE_ADDR
8819 remote_address_masked (CORE_ADDR addr)
8820 {
8821   unsigned int address_size = remote_address_size;
8822 
8823   /* If "remoteaddresssize" was not set, default to target address size.  */
8824   if (!address_size)
8825     address_size = gdbarch_addr_bit (target_gdbarch ());
8826 
8827   if (address_size > 0
8828       && address_size < (sizeof (ULONGEST) * 8))
8829     {
8830       /* Only create a mask when that mask can safely be constructed
8831 	 in a ULONGEST variable.  */
8832       ULONGEST mask = 1;
8833 
8834       mask = (mask << address_size) - 1;
8835       addr &= mask;
8836     }
8837   return addr;
8838 }
8839 
8840 /* Determine whether the remote target supports binary downloading.
8841    This is accomplished by sending a no-op memory write of zero length
8842    to the target at the specified address. It does not suffice to send
8843    the whole packet, since many stubs strip the eighth bit and
8844    subsequently compute a wrong checksum, which causes real havoc with
8845    remote_write_bytes.
8846 
8847    NOTE: This can still lose if the serial line is not eight-bit
8848    clean.  In cases like this, the user should clear "remote
8849    X-packet".  */
8850 
8851 void
8852 remote_target::check_binary_download (CORE_ADDR addr)
8853 {
8854   struct remote_state *rs = get_remote_state ();
8855 
8856   switch (packet_support (PACKET_X))
8857     {
8858     case PACKET_DISABLE:
8859       break;
8860     case PACKET_ENABLE:
8861       break;
8862     case PACKET_SUPPORT_UNKNOWN:
8863       {
8864 	char *p;
8865 
8866 	p = rs->buf.data ();
8867 	*p++ = 'X';
8868 	p += hexnumstr (p, (ULONGEST) addr);
8869 	*p++ = ',';
8870 	p += hexnumstr (p, (ULONGEST) 0);
8871 	*p++ = ':';
8872 	*p = '\0';
8873 
8874 	putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8875 	getpkt (&rs->buf, 0);
8876 
8877 	if (rs->buf[0] == '\0')
8878 	  {
8879 	    remote_debug_printf ("binary downloading NOT supported by target");
8880 	    remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8881 	  }
8882 	else
8883 	  {
8884 	    remote_debug_printf ("binary downloading supported by target");
8885 	    remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8886 	  }
8887 	break;
8888       }
8889     }
8890 }
8891 
8892 /* Helper function to resize the payload in order to try to get a good
8893    alignment.  We try to write an amount of data such that the next write will
8894    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8895 
8896 static int
8897 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8898 {
8899   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8900 }
8901 
8902 /* Write memory data directly to the remote machine.
8903    This does not inform the data cache; the data cache uses this.
8904    HEADER is the starting part of the packet.
8905    MEMADDR is the address in the remote memory space.
8906    MYADDR is the address of the buffer in our space.
8907    LEN_UNITS is the number of addressable units to write.
8908    UNIT_SIZE is the length in bytes of an addressable unit.
8909    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8910    should send data as binary ('X'), or hex-encoded ('M').
8911 
8912    The function creates packet of the form
8913        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8914 
8915    where encoding of <DATA> is terminated by PACKET_FORMAT.
8916 
8917    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8918    are omitted.
8919 
8920    Return the transferred status, error or OK (an
8921    'enum target_xfer_status' value).  Save the number of addressable units
8922    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8923 
8924    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8925    exchange between gdb and the stub could look like (?? in place of the
8926    checksum):
8927 
8928    -> $m1000,4#??
8929    <- aaaabbbbccccdddd
8930 
8931    -> $M1000,3:eeeeffffeeee#??
8932    <- OK
8933 
8934    -> $m1000,4#??
8935    <- eeeeffffeeeedddd  */
8936 
8937 target_xfer_status
8938 remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8939 				       const gdb_byte *myaddr,
8940 				       ULONGEST len_units,
8941 				       int unit_size,
8942 				       ULONGEST *xfered_len_units,
8943 				       char packet_format, int use_length)
8944 {
8945   struct remote_state *rs = get_remote_state ();
8946   char *p;
8947   char *plen = NULL;
8948   int plenlen = 0;
8949   int todo_units;
8950   int units_written;
8951   int payload_capacity_bytes;
8952   int payload_length_bytes;
8953 
8954   if (packet_format != 'X' && packet_format != 'M')
8955     internal_error (__FILE__, __LINE__,
8956 		    _("remote_write_bytes_aux: bad packet format"));
8957 
8958   if (len_units == 0)
8959     return TARGET_XFER_EOF;
8960 
8961   payload_capacity_bytes = get_memory_write_packet_size ();
8962 
8963   /* The packet buffer will be large enough for the payload;
8964      get_memory_packet_size ensures this.  */
8965   rs->buf[0] = '\0';
8966 
8967   /* Compute the size of the actual payload by subtracting out the
8968      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8969 
8970   payload_capacity_bytes -= strlen ("$,:#NN");
8971   if (!use_length)
8972     /* The comma won't be used.  */
8973     payload_capacity_bytes += 1;
8974   payload_capacity_bytes -= strlen (header);
8975   payload_capacity_bytes -= hexnumlen (memaddr);
8976 
8977   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8978 
8979   strcat (rs->buf.data (), header);
8980   p = rs->buf.data () + strlen (header);
8981 
8982   /* Compute a best guess of the number of bytes actually transfered.  */
8983   if (packet_format == 'X')
8984     {
8985       /* Best guess at number of bytes that will fit.  */
8986       todo_units = std::min (len_units,
8987 			     (ULONGEST) payload_capacity_bytes / unit_size);
8988       if (use_length)
8989 	payload_capacity_bytes -= hexnumlen (todo_units);
8990       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8991     }
8992   else
8993     {
8994       /* Number of bytes that will fit.  */
8995       todo_units
8996 	= std::min (len_units,
8997 		    (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8998       if (use_length)
8999 	payload_capacity_bytes -= hexnumlen (todo_units);
9000       todo_units = std::min (todo_units,
9001 			     (payload_capacity_bytes / unit_size) / 2);
9002     }
9003 
9004   if (todo_units <= 0)
9005     internal_error (__FILE__, __LINE__,
9006 		    _("minimum packet size too small to write data"));
9007 
9008   /* If we already need another packet, then try to align the end
9009      of this packet to a useful boundary.  */
9010   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
9011     todo_units = align_for_efficient_write (todo_units, memaddr);
9012 
9013   /* Append "<memaddr>".  */
9014   memaddr = remote_address_masked (memaddr);
9015   p += hexnumstr (p, (ULONGEST) memaddr);
9016 
9017   if (use_length)
9018     {
9019       /* Append ",".  */
9020       *p++ = ',';
9021 
9022       /* Append the length and retain its location and size.  It may need to be
9023 	 adjusted once the packet body has been created.  */
9024       plen = p;
9025       plenlen = hexnumstr (p, (ULONGEST) todo_units);
9026       p += plenlen;
9027     }
9028 
9029   /* Append ":".  */
9030   *p++ = ':';
9031   *p = '\0';
9032 
9033   /* Append the packet body.  */
9034   if (packet_format == 'X')
9035     {
9036       /* Binary mode.  Send target system values byte by byte, in
9037 	 increasing byte addresses.  Only escape certain critical
9038 	 characters.  */
9039       payload_length_bytes =
9040 	  remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
9041 				&units_written, payload_capacity_bytes);
9042 
9043       /* If not all TODO units fit, then we'll need another packet.  Make
9044 	 a second try to keep the end of the packet aligned.  Don't do
9045 	 this if the packet is tiny.  */
9046       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
9047 	{
9048 	  int new_todo_units;
9049 
9050 	  new_todo_units = align_for_efficient_write (units_written, memaddr);
9051 
9052 	  if (new_todo_units != units_written)
9053 	    payload_length_bytes =
9054 		remote_escape_output (myaddr, new_todo_units, unit_size,
9055 				      (gdb_byte *) p, &units_written,
9056 				      payload_capacity_bytes);
9057 	}
9058 
9059       p += payload_length_bytes;
9060       if (use_length && units_written < todo_units)
9061 	{
9062 	  /* Escape chars have filled up the buffer prematurely,
9063 	     and we have actually sent fewer units than planned.
9064 	     Fix-up the length field of the packet.  Use the same
9065 	     number of characters as before.  */
9066 	  plen += hexnumnstr (plen, (ULONGEST) units_written,
9067 			      plenlen);
9068 	  *plen = ':';  /* overwrite \0 from hexnumnstr() */
9069 	}
9070     }
9071   else
9072     {
9073       /* Normal mode: Send target system values byte by byte, in
9074 	 increasing byte addresses.  Each byte is encoded as a two hex
9075 	 value.  */
9076       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
9077       units_written = todo_units;
9078     }
9079 
9080   putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
9081   getpkt (&rs->buf, 0);
9082 
9083   if (rs->buf[0] == 'E')
9084     return TARGET_XFER_E_IO;
9085 
9086   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
9087      send fewer units than we'd planned.  */
9088   *xfered_len_units = (ULONGEST) units_written;
9089   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9090 }
9091 
9092 /* Write memory data directly to the remote machine.
9093    This does not inform the data cache; the data cache uses this.
9094    MEMADDR is the address in the remote memory space.
9095    MYADDR is the address of the buffer in our space.
9096    LEN is the number of bytes.
9097 
9098    Return the transferred status, error or OK (an
9099    'enum target_xfer_status' value).  Save the number of bytes
9100    transferred in *XFERED_LEN.  Only transfer a single packet.  */
9101 
9102 target_xfer_status
9103 remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
9104 				   ULONGEST len, int unit_size,
9105 				   ULONGEST *xfered_len)
9106 {
9107   const char *packet_format = NULL;
9108 
9109   /* Check whether the target supports binary download.  */
9110   check_binary_download (memaddr);
9111 
9112   switch (packet_support (PACKET_X))
9113     {
9114     case PACKET_ENABLE:
9115       packet_format = "X";
9116       break;
9117     case PACKET_DISABLE:
9118       packet_format = "M";
9119       break;
9120     case PACKET_SUPPORT_UNKNOWN:
9121       internal_error (__FILE__, __LINE__,
9122 		      _("remote_write_bytes: bad internal state"));
9123     default:
9124       internal_error (__FILE__, __LINE__, _("bad switch"));
9125     }
9126 
9127   return remote_write_bytes_aux (packet_format,
9128 				 memaddr, myaddr, len, unit_size, xfered_len,
9129 				 packet_format[0], 1);
9130 }
9131 
9132 /* Read memory data directly from the remote machine.
9133    This does not use the data cache; the data cache uses this.
9134    MEMADDR is the address in the remote memory space.
9135    MYADDR is the address of the buffer in our space.
9136    LEN_UNITS is the number of addressable memory units to read..
9137    UNIT_SIZE is the length in bytes of an addressable unit.
9138 
9139    Return the transferred status, error or OK (an
9140    'enum target_xfer_status' value).  Save the number of bytes
9141    transferred in *XFERED_LEN_UNITS.
9142 
9143    See the comment of remote_write_bytes_aux for an example of
9144    memory read/write exchange between gdb and the stub.  */
9145 
9146 target_xfer_status
9147 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
9148 				    ULONGEST len_units,
9149 				    int unit_size, ULONGEST *xfered_len_units)
9150 {
9151   struct remote_state *rs = get_remote_state ();
9152   int buf_size_bytes;		/* Max size of packet output buffer.  */
9153   char *p;
9154   int todo_units;
9155   int decoded_bytes;
9156 
9157   buf_size_bytes = get_memory_read_packet_size ();
9158   /* The packet buffer will be large enough for the payload;
9159      get_memory_packet_size ensures this.  */
9160 
9161   /* Number of units that will fit.  */
9162   todo_units = std::min (len_units,
9163 			 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9164 
9165   /* Construct "m"<memaddr>","<len>".  */
9166   memaddr = remote_address_masked (memaddr);
9167   p = rs->buf.data ();
9168   *p++ = 'm';
9169   p += hexnumstr (p, (ULONGEST) memaddr);
9170   *p++ = ',';
9171   p += hexnumstr (p, (ULONGEST) todo_units);
9172   *p = '\0';
9173   putpkt (rs->buf);
9174   getpkt (&rs->buf, 0);
9175   if (rs->buf[0] == 'E'
9176       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
9177       && rs->buf[3] == '\0')
9178     return TARGET_XFER_E_IO;
9179   /* Reply describes memory byte by byte, each byte encoded as two hex
9180      characters.  */
9181   p = rs->buf.data ();
9182   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9183   /* Return what we have.  Let higher layers handle partial reads.  */
9184   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
9185   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9186 }
9187 
9188 /* Using the set of read-only target sections of remote, read live
9189    read-only memory.
9190 
9191    For interface/parameters/return description see target.h,
9192    to_xfer_partial.  */
9193 
9194 target_xfer_status
9195 remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
9196 						  ULONGEST memaddr,
9197 						  ULONGEST len,
9198 						  int unit_size,
9199 						  ULONGEST *xfered_len)
9200 {
9201   const struct target_section *secp;
9202 
9203   secp = target_section_by_addr (this, memaddr);
9204   if (secp != NULL
9205       && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
9206     {
9207       ULONGEST memend = memaddr + len;
9208 
9209       const target_section_table *table = target_get_section_table (this);
9210       for (const target_section &p : *table)
9211 	{
9212 	  if (memaddr >= p.addr)
9213 	    {
9214 	      if (memend <= p.endaddr)
9215 		{
9216 		  /* Entire transfer is within this section.  */
9217 		  return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
9218 					      xfered_len);
9219 		}
9220 	      else if (memaddr >= p.endaddr)
9221 		{
9222 		  /* This section ends before the transfer starts.  */
9223 		  continue;
9224 		}
9225 	      else
9226 		{
9227 		  /* This section overlaps the transfer.  Just do half.  */
9228 		  len = p.endaddr - memaddr;
9229 		  return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
9230 					      xfered_len);
9231 		}
9232 	    }
9233 	}
9234     }
9235 
9236   return TARGET_XFER_EOF;
9237 }
9238 
9239 /* Similar to remote_read_bytes_1, but it reads from the remote stub
9240    first if the requested memory is unavailable in traceframe.
9241    Otherwise, fall back to remote_read_bytes_1.  */
9242 
9243 target_xfer_status
9244 remote_target::remote_read_bytes (CORE_ADDR memaddr,
9245 				  gdb_byte *myaddr, ULONGEST len, int unit_size,
9246 				  ULONGEST *xfered_len)
9247 {
9248   if (len == 0)
9249     return TARGET_XFER_EOF;
9250 
9251   if (get_traceframe_number () != -1)
9252     {
9253       std::vector<mem_range> available;
9254 
9255       /* If we fail to get the set of available memory, then the
9256 	 target does not support querying traceframe info, and so we
9257 	 attempt reading from the traceframe anyway (assuming the
9258 	 target implements the old QTro packet then).  */
9259       if (traceframe_available_memory (&available, memaddr, len))
9260 	{
9261 	  if (available.empty () || available[0].start != memaddr)
9262 	    {
9263 	      enum target_xfer_status res;
9264 
9265 	      /* Don't read into the traceframe's available
9266 		 memory.  */
9267 	      if (!available.empty ())
9268 		{
9269 		  LONGEST oldlen = len;
9270 
9271 		  len = available[0].start - memaddr;
9272 		  gdb_assert (len <= oldlen);
9273 		}
9274 
9275 	      /* This goes through the topmost target again.  */
9276 	      res = remote_xfer_live_readonly_partial (myaddr, memaddr,
9277 						       len, unit_size, xfered_len);
9278 	      if (res == TARGET_XFER_OK)
9279 		return TARGET_XFER_OK;
9280 	      else
9281 		{
9282 		  /* No use trying further, we know some memory starting
9283 		     at MEMADDR isn't available.  */
9284 		  *xfered_len = len;
9285 		  return (*xfered_len != 0) ?
9286 		    TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
9287 		}
9288 	    }
9289 
9290 	  /* Don't try to read more than how much is available, in
9291 	     case the target implements the deprecated QTro packet to
9292 	     cater for older GDBs (the target's knowledge of read-only
9293 	     sections may be outdated by now).  */
9294 	  len = available[0].length;
9295 	}
9296     }
9297 
9298   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
9299 }
9300 
9301 
9302 
9303 /* Sends a packet with content determined by the printf format string
9304    FORMAT and the remaining arguments, then gets the reply.  Returns
9305    whether the packet was a success, a failure, or unknown.  */
9306 
9307 packet_result
9308 remote_target::remote_send_printf (const char *format, ...)
9309 {
9310   struct remote_state *rs = get_remote_state ();
9311   int max_size = get_remote_packet_size ();
9312   va_list ap;
9313 
9314   va_start (ap, format);
9315 
9316   rs->buf[0] = '\0';
9317   int size = vsnprintf (rs->buf.data (), max_size, format, ap);
9318 
9319   va_end (ap);
9320 
9321   if (size >= max_size)
9322     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
9323 
9324   if (putpkt (rs->buf) < 0)
9325     error (_("Communication problem with target."));
9326 
9327   rs->buf[0] = '\0';
9328   getpkt (&rs->buf, 0);
9329 
9330   return packet_check_result (rs->buf);
9331 }
9332 
9333 /* Flash writing can take quite some time.  We'll set
9334    effectively infinite timeout for flash operations.
9335    In future, we'll need to decide on a better approach.  */
9336 static const int remote_flash_timeout = 1000;
9337 
9338 void
9339 remote_target::flash_erase (ULONGEST address, LONGEST length)
9340 {
9341   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
9342   enum packet_result ret;
9343   scoped_restore restore_timeout
9344     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9345 
9346   ret = remote_send_printf ("vFlashErase:%s,%s",
9347 			    phex (address, addr_size),
9348 			    phex (length, 4));
9349   switch (ret)
9350     {
9351     case PACKET_UNKNOWN:
9352       error (_("Remote target does not support flash erase"));
9353     case PACKET_ERROR:
9354       error (_("Error erasing flash with vFlashErase packet"));
9355     default:
9356       break;
9357     }
9358 }
9359 
9360 target_xfer_status
9361 remote_target::remote_flash_write (ULONGEST address,
9362 				   ULONGEST length, ULONGEST *xfered_len,
9363 				   const gdb_byte *data)
9364 {
9365   scoped_restore restore_timeout
9366     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9367   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9368 				 xfered_len,'X', 0);
9369 }
9370 
9371 void
9372 remote_target::flash_done ()
9373 {
9374   int ret;
9375 
9376   scoped_restore restore_timeout
9377     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9378 
9379   ret = remote_send_printf ("vFlashDone");
9380 
9381   switch (ret)
9382     {
9383     case PACKET_UNKNOWN:
9384       error (_("Remote target does not support vFlashDone"));
9385     case PACKET_ERROR:
9386       error (_("Error finishing flash operation"));
9387     default:
9388       break;
9389     }
9390 }
9391 
9392 void
9393 remote_target::files_info ()
9394 {
9395   puts_filtered ("Debugging a target over a serial line.\n");
9396 }
9397 
9398 /* Stuff for dealing with the packets which are part of this protocol.
9399    See comment at top of file for details.  */
9400 
9401 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
9402    error to higher layers.  Called when a serial error is detected.
9403    The exception message is STRING, followed by a colon and a blank,
9404    the system error message for errno at function entry and final dot
9405    for output compatibility with throw_perror_with_name.  */
9406 
9407 static void
9408 unpush_and_perror (remote_target *target, const char *string)
9409 {
9410   int saved_errno = errno;
9411 
9412   remote_unpush_target (target);
9413   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
9414 	       safe_strerror (saved_errno));
9415 }
9416 
9417 /* Read a single character from the remote end.  The current quit
9418    handler is overridden to avoid quitting in the middle of packet
9419    sequence, as that would break communication with the remote server.
9420    See remote_serial_quit_handler for more detail.  */
9421 
9422 int
9423 remote_target::readchar (int timeout)
9424 {
9425   int ch;
9426   struct remote_state *rs = get_remote_state ();
9427 
9428   {
9429     scoped_restore restore_quit_target
9430       = make_scoped_restore (&curr_quit_handler_target, this);
9431     scoped_restore restore_quit
9432       = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9433 
9434     rs->got_ctrlc_during_io = 0;
9435 
9436     ch = serial_readchar (rs->remote_desc, timeout);
9437 
9438     if (rs->got_ctrlc_during_io)
9439       set_quit_flag ();
9440   }
9441 
9442   if (ch >= 0)
9443     return ch;
9444 
9445   switch ((enum serial_rc) ch)
9446     {
9447     case SERIAL_EOF:
9448       remote_unpush_target (this);
9449       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
9450       /* no return */
9451     case SERIAL_ERROR:
9452       unpush_and_perror (this, _("Remote communication error.  "
9453 				 "Target disconnected."));
9454       /* no return */
9455     case SERIAL_TIMEOUT:
9456       break;
9457     }
9458   return ch;
9459 }
9460 
9461 /* Wrapper for serial_write that closes the target and throws if
9462    writing fails.  The current quit handler is overridden to avoid
9463    quitting in the middle of packet sequence, as that would break
9464    communication with the remote server.  See
9465    remote_serial_quit_handler for more detail.  */
9466 
9467 void
9468 remote_target::remote_serial_write (const char *str, int len)
9469 {
9470   struct remote_state *rs = get_remote_state ();
9471 
9472   scoped_restore restore_quit_target
9473     = make_scoped_restore (&curr_quit_handler_target, this);
9474   scoped_restore restore_quit
9475     = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9476 
9477   rs->got_ctrlc_during_io = 0;
9478 
9479   if (serial_write (rs->remote_desc, str, len))
9480     {
9481       unpush_and_perror (this, _("Remote communication error.  "
9482 				 "Target disconnected."));
9483     }
9484 
9485   if (rs->got_ctrlc_during_io)
9486     set_quit_flag ();
9487 }
9488 
9489 /* Return a string representing an escaped version of BUF, of len N.
9490    E.g. \n is converted to \\n, \t to \\t, etc.  */
9491 
9492 static std::string
9493 escape_buffer (const char *buf, int n)
9494 {
9495   string_file stb;
9496 
9497   stb.putstrn (buf, n, '\\');
9498   return std::move (stb.string ());
9499 }
9500 
9501 /* Display a null-terminated packet on stdout, for debugging, using C
9502    string notation.  */
9503 
9504 static void
9505 print_packet (const char *buf)
9506 {
9507   puts_filtered ("\"");
9508   fputstr_filtered (buf, '"', gdb_stdout);
9509   puts_filtered ("\"");
9510 }
9511 
9512 int
9513 remote_target::putpkt (const char *buf)
9514 {
9515   return putpkt_binary (buf, strlen (buf));
9516 }
9517 
9518 /* Wrapper around remote_target::putpkt to avoid exporting
9519    remote_target.  */
9520 
9521 int
9522 putpkt (remote_target *remote, const char *buf)
9523 {
9524   return remote->putpkt (buf);
9525 }
9526 
9527 /* Send a packet to the remote machine, with error checking.  The data
9528    of the packet is in BUF.  The string in BUF can be at most
9529    get_remote_packet_size () - 5 to account for the $, # and checksum,
9530    and for a possible /0 if we are debugging (remote_debug) and want
9531    to print the sent packet as a string.  */
9532 
9533 int
9534 remote_target::putpkt_binary (const char *buf, int cnt)
9535 {
9536   struct remote_state *rs = get_remote_state ();
9537   int i;
9538   unsigned char csum = 0;
9539   gdb::def_vector<char> data (cnt + 6);
9540   char *buf2 = data.data ();
9541 
9542   int ch;
9543   int tcount = 0;
9544   char *p;
9545 
9546   /* Catch cases like trying to read memory or listing threads while
9547      we're waiting for a stop reply.  The remote server wouldn't be
9548      ready to handle this request, so we'd hang and timeout.  We don't
9549      have to worry about this in synchronous mode, because in that
9550      case it's not possible to issue a command while the target is
9551      running.  This is not a problem in non-stop mode, because in that
9552      case, the stub is always ready to process serial input.  */
9553   if (!target_is_non_stop_p ()
9554       && target_is_async_p ()
9555       && rs->waiting_for_stop_reply)
9556     {
9557       error (_("Cannot execute this command while the target is running.\n"
9558 	       "Use the \"interrupt\" command to stop the target\n"
9559 	       "and then try again."));
9560     }
9561 
9562   /* We're sending out a new packet.  Make sure we don't look at a
9563      stale cached response.  */
9564   rs->cached_wait_status = 0;
9565 
9566   /* Copy the packet into buffer BUF2, encapsulating it
9567      and giving it a checksum.  */
9568 
9569   p = buf2;
9570   *p++ = '$';
9571 
9572   for (i = 0; i < cnt; i++)
9573     {
9574       csum += buf[i];
9575       *p++ = buf[i];
9576     }
9577   *p++ = '#';
9578   *p++ = tohex ((csum >> 4) & 0xf);
9579   *p++ = tohex (csum & 0xf);
9580 
9581   /* Send it over and over until we get a positive ack.  */
9582 
9583   while (1)
9584     {
9585       if (remote_debug)
9586 	{
9587 	  *p = '\0';
9588 
9589 	  int len = (int) (p - buf2);
9590 	  int max_chars;
9591 
9592 	  if (remote_packet_max_chars < 0)
9593 	    max_chars = len;
9594 	  else
9595 	    max_chars = remote_packet_max_chars;
9596 
9597 	  std::string str
9598 	    = escape_buffer (buf2, std::min (len, max_chars));
9599 
9600 	  if (len > max_chars)
9601 	    remote_debug_printf_nofunc
9602 	      ("Sending packet: %s [%d bytes omitted]", str.c_str (),
9603 	       len - max_chars);
9604 	  else
9605 	    remote_debug_printf_nofunc ("Sending packet: %s", str.c_str ());
9606 	}
9607       remote_serial_write (buf2, p - buf2);
9608 
9609       /* If this is a no acks version of the remote protocol, send the
9610 	 packet and move on.  */
9611       if (rs->noack_mode)
9612 	break;
9613 
9614       /* Read until either a timeout occurs (-2) or '+' is read.
9615 	 Handle any notification that arrives in the mean time.  */
9616       while (1)
9617 	{
9618 	  ch = readchar (remote_timeout);
9619 
9620 	  switch (ch)
9621 	    {
9622 	    case '+':
9623 	      remote_debug_printf_nofunc ("Received Ack");
9624 	      return 1;
9625 	    case '-':
9626 	      remote_debug_printf_nofunc ("Received Nak");
9627 	      /* FALLTHROUGH */
9628 	    case SERIAL_TIMEOUT:
9629 	      tcount++;
9630 	      if (tcount > 3)
9631 		return 0;
9632 	      break;		/* Retransmit buffer.  */
9633 	    case '$':
9634 	      {
9635 		remote_debug_printf ("Packet instead of Ack, ignoring it");
9636 		/* It's probably an old response sent because an ACK
9637 		   was lost.  Gobble up the packet and ack it so it
9638 		   doesn't get retransmitted when we resend this
9639 		   packet.  */
9640 		skip_frame ();
9641 		remote_serial_write ("+", 1);
9642 		continue;	/* Now, go look for +.  */
9643 	      }
9644 
9645 	    case '%':
9646 	      {
9647 		int val;
9648 
9649 		/* If we got a notification, handle it, and go back to looking
9650 		   for an ack.  */
9651 		/* We've found the start of a notification.  Now
9652 		   collect the data.  */
9653 		val = read_frame (&rs->buf);
9654 		if (val >= 0)
9655 		  {
9656 		    remote_debug_printf_nofunc
9657 		      ("  Notification received: %s",
9658 		       escape_buffer (rs->buf.data (), val).c_str ());
9659 
9660 		    handle_notification (rs->notif_state, rs->buf.data ());
9661 		    /* We're in sync now, rewait for the ack.  */
9662 		    tcount = 0;
9663 		  }
9664 		else
9665 		  remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177,
9666 					      rs->buf.data ());
9667 		continue;
9668 	      }
9669 	      /* fall-through */
9670 	    default:
9671 	      remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177,
9672 					  rs->buf.data ());
9673 	      continue;
9674 	    }
9675 	  break;		/* Here to retransmit.  */
9676 	}
9677 
9678 #if 0
9679       /* This is wrong.  If doing a long backtrace, the user should be
9680 	 able to get out next time we call QUIT, without anything as
9681 	 violent as interrupt_query.  If we want to provide a way out of
9682 	 here without getting to the next QUIT, it should be based on
9683 	 hitting ^C twice as in remote_wait.  */
9684       if (quit_flag)
9685 	{
9686 	  quit_flag = 0;
9687 	  interrupt_query ();
9688 	}
9689 #endif
9690     }
9691 
9692   return 0;
9693 }
9694 
9695 /* Come here after finding the start of a frame when we expected an
9696    ack.  Do our best to discard the rest of this packet.  */
9697 
9698 void
9699 remote_target::skip_frame ()
9700 {
9701   int c;
9702 
9703   while (1)
9704     {
9705       c = readchar (remote_timeout);
9706       switch (c)
9707 	{
9708 	case SERIAL_TIMEOUT:
9709 	  /* Nothing we can do.  */
9710 	  return;
9711 	case '#':
9712 	  /* Discard the two bytes of checksum and stop.  */
9713 	  c = readchar (remote_timeout);
9714 	  if (c >= 0)
9715 	    c = readchar (remote_timeout);
9716 
9717 	  return;
9718 	case '*':		/* Run length encoding.  */
9719 	  /* Discard the repeat count.  */
9720 	  c = readchar (remote_timeout);
9721 	  if (c < 0)
9722 	    return;
9723 	  break;
9724 	default:
9725 	  /* A regular character.  */
9726 	  break;
9727 	}
9728     }
9729 }
9730 
9731 /* Come here after finding the start of the frame.  Collect the rest
9732    into *BUF, verifying the checksum, length, and handling run-length
9733    compression.  NUL terminate the buffer.  If there is not enough room,
9734    expand *BUF.
9735 
9736    Returns -1 on error, number of characters in buffer (ignoring the
9737    trailing NULL) on success. (could be extended to return one of the
9738    SERIAL status indications).  */
9739 
9740 long
9741 remote_target::read_frame (gdb::char_vector *buf_p)
9742 {
9743   unsigned char csum;
9744   long bc;
9745   int c;
9746   char *buf = buf_p->data ();
9747   struct remote_state *rs = get_remote_state ();
9748 
9749   csum = 0;
9750   bc = 0;
9751 
9752   while (1)
9753     {
9754       c = readchar (remote_timeout);
9755       switch (c)
9756 	{
9757 	case SERIAL_TIMEOUT:
9758 	  remote_debug_printf ("Timeout in mid-packet, retrying");
9759 	  return -1;
9760 
9761 	case '$':
9762 	  remote_debug_printf ("Saw new packet start in middle of old one");
9763 	  return -1;		/* Start a new packet, count retries.  */
9764 
9765 	case '#':
9766 	  {
9767 	    unsigned char pktcsum;
9768 	    int check_0 = 0;
9769 	    int check_1 = 0;
9770 
9771 	    buf[bc] = '\0';
9772 
9773 	    check_0 = readchar (remote_timeout);
9774 	    if (check_0 >= 0)
9775 	      check_1 = readchar (remote_timeout);
9776 
9777 	    if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9778 	      {
9779 		remote_debug_printf ("Timeout in checksum, retrying");
9780 		return -1;
9781 	      }
9782 	    else if (check_0 < 0 || check_1 < 0)
9783 	      {
9784 		remote_debug_printf ("Communication error in checksum");
9785 		return -1;
9786 	      }
9787 
9788 	    /* Don't recompute the checksum; with no ack packets we
9789 	       don't have any way to indicate a packet retransmission
9790 	       is necessary.  */
9791 	    if (rs->noack_mode)
9792 	      return bc;
9793 
9794 	    pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9795 	    if (csum == pktcsum)
9796 	      return bc;
9797 
9798 	    remote_debug_printf
9799 	      ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s",
9800 	       pktcsum, csum, escape_buffer (buf, bc).c_str ());
9801 
9802 	    /* Number of characters in buffer ignoring trailing
9803 	       NULL.  */
9804 	    return -1;
9805 	  }
9806 	case '*':		/* Run length encoding.  */
9807 	  {
9808 	    int repeat;
9809 
9810 	    csum += c;
9811 	    c = readchar (remote_timeout);
9812 	    csum += c;
9813 	    repeat = c - ' ' + 3;	/* Compute repeat count.  */
9814 
9815 	    /* The character before ``*'' is repeated.  */
9816 
9817 	    if (repeat > 0 && repeat <= 255 && bc > 0)
9818 	      {
9819 		if (bc + repeat - 1 >= buf_p->size () - 1)
9820 		  {
9821 		    /* Make some more room in the buffer.  */
9822 		    buf_p->resize (buf_p->size () + repeat);
9823 		    buf = buf_p->data ();
9824 		  }
9825 
9826 		memset (&buf[bc], buf[bc - 1], repeat);
9827 		bc += repeat;
9828 		continue;
9829 	      }
9830 
9831 	    buf[bc] = '\0';
9832 	    printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9833 	    return -1;
9834 	  }
9835 	default:
9836 	  if (bc >= buf_p->size () - 1)
9837 	    {
9838 	      /* Make some more room in the buffer.  */
9839 	      buf_p->resize (buf_p->size () * 2);
9840 	      buf = buf_p->data ();
9841 	    }
9842 
9843 	  buf[bc++] = c;
9844 	  csum += c;
9845 	  continue;
9846 	}
9847     }
9848 }
9849 
9850 /* Set this to the maximum number of seconds to wait instead of waiting forever
9851    in target_wait().  If this timer times out, then it generates an error and
9852    the command is aborted.  This replaces most of the need for timeouts in the
9853    GDB test suite, and makes it possible to distinguish between a hung target
9854    and one with slow communications.  */
9855 
9856 static int watchdog = 0;
9857 static void
9858 show_watchdog (struct ui_file *file, int from_tty,
9859 	       struct cmd_list_element *c, const char *value)
9860 {
9861   fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
9862 }
9863 
9864 /* Read a packet from the remote machine, with error checking, and
9865    store it in *BUF.  Resize *BUF if necessary to hold the result.  If
9866    FOREVER, wait forever rather than timing out; this is used (in
9867    synchronous mode) to wait for a target that is is executing user
9868    code to stop.  */
9869 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9870    don't have to change all the calls to getpkt to deal with the
9871    return value, because at the moment I don't know what the right
9872    thing to do it for those.  */
9873 
9874 void
9875 remote_target::getpkt (gdb::char_vector *buf, int forever)
9876 {
9877   getpkt_sane (buf, forever);
9878 }
9879 
9880 
9881 /* Read a packet from the remote machine, with error checking, and
9882    store it in *BUF.  Resize *BUF if necessary to hold the result.  If
9883    FOREVER, wait forever rather than timing out; this is used (in
9884    synchronous mode) to wait for a target that is is executing user
9885    code to stop.  If FOREVER == 0, this function is allowed to time
9886    out gracefully and return an indication of this to the caller.
9887    Otherwise return the number of bytes read.  If EXPECTING_NOTIF,
9888    consider receiving a notification enough reason to return to the
9889    caller.  *IS_NOTIF is an output boolean that indicates whether *BUF
9890    holds a notification or not (a regular packet).  */
9891 
9892 int
9893 remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
9894 				       int forever, int expecting_notif,
9895 				       int *is_notif)
9896 {
9897   struct remote_state *rs = get_remote_state ();
9898   int c;
9899   int tries;
9900   int timeout;
9901   int val = -1;
9902 
9903   /* We're reading a new response.  Make sure we don't look at a
9904      previously cached response.  */
9905   rs->cached_wait_status = 0;
9906 
9907   strcpy (buf->data (), "timeout");
9908 
9909   if (forever)
9910     timeout = watchdog > 0 ? watchdog : -1;
9911   else if (expecting_notif)
9912     timeout = 0; /* There should already be a char in the buffer.  If
9913 		    not, bail out.  */
9914   else
9915     timeout = remote_timeout;
9916 
9917 #define MAX_TRIES 3
9918 
9919   /* Process any number of notifications, and then return when
9920      we get a packet.  */
9921   for (;;)
9922     {
9923       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9924 	 times.  */
9925       for (tries = 1; tries <= MAX_TRIES; tries++)
9926 	{
9927 	  /* This can loop forever if the remote side sends us
9928 	     characters continuously, but if it pauses, we'll get
9929 	     SERIAL_TIMEOUT from readchar because of timeout.  Then
9930 	     we'll count that as a retry.
9931 
9932 	     Note that even when forever is set, we will only wait
9933 	     forever prior to the start of a packet.  After that, we
9934 	     expect characters to arrive at a brisk pace.  They should
9935 	     show up within remote_timeout intervals.  */
9936 	  do
9937 	    c = readchar (timeout);
9938 	  while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9939 
9940 	  if (c == SERIAL_TIMEOUT)
9941 	    {
9942 	      if (expecting_notif)
9943 		return -1; /* Don't complain, it's normal to not get
9944 			      anything in this case.  */
9945 
9946 	      if (forever)	/* Watchdog went off?  Kill the target.  */
9947 		{
9948 		  remote_unpush_target (this);
9949 		  throw_error (TARGET_CLOSE_ERROR,
9950 			       _("Watchdog timeout has expired.  "
9951 				 "Target detached."));
9952 		}
9953 
9954 	      remote_debug_printf ("Timed out.");
9955 	    }
9956 	  else
9957 	    {
9958 	      /* We've found the start of a packet or notification.
9959 		 Now collect the data.  */
9960 	      val = read_frame (buf);
9961 	      if (val >= 0)
9962 		break;
9963 	    }
9964 
9965 	  remote_serial_write ("-", 1);
9966 	}
9967 
9968       if (tries > MAX_TRIES)
9969 	{
9970 	  /* We have tried hard enough, and just can't receive the
9971 	     packet/notification.  Give up.  */
9972 	  printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9973 
9974 	  /* Skip the ack char if we're in no-ack mode.  */
9975 	  if (!rs->noack_mode)
9976 	    remote_serial_write ("+", 1);
9977 	  return -1;
9978 	}
9979 
9980       /* If we got an ordinary packet, return that to our caller.  */
9981       if (c == '$')
9982 	{
9983 	  if (remote_debug)
9984 	    {
9985 	      int max_chars;
9986 
9987 	      if (remote_packet_max_chars < 0)
9988 		max_chars = val;
9989 	      else
9990 		max_chars = remote_packet_max_chars;
9991 
9992 	      std::string str
9993 		= escape_buffer (buf->data (),
9994 				 std::min (val, max_chars));
9995 
9996 	      if (val > max_chars)
9997 		remote_debug_printf_nofunc
9998 		  ("Packet received: %s [%d bytes omitted]", str.c_str (),
9999 		   val - max_chars);
10000 	      else
10001 		remote_debug_printf_nofunc ("Packet received: %s",
10002 					    str.c_str ());
10003 	    }
10004 
10005 	  /* Skip the ack char if we're in no-ack mode.  */
10006 	  if (!rs->noack_mode)
10007 	    remote_serial_write ("+", 1);
10008 	  if (is_notif != NULL)
10009 	    *is_notif = 0;
10010 	  return val;
10011 	}
10012 
10013        /* If we got a notification, handle it, and go back to looking
10014 	 for a packet.  */
10015       else
10016 	{
10017 	  gdb_assert (c == '%');
10018 
10019 	  remote_debug_printf_nofunc
10020 	    ("  Notification received: %s",
10021 	     escape_buffer (buf->data (), val).c_str ());
10022 
10023 	  if (is_notif != NULL)
10024 	    *is_notif = 1;
10025 
10026 	  handle_notification (rs->notif_state, buf->data ());
10027 
10028 	  /* Notifications require no acknowledgement.  */
10029 
10030 	  if (expecting_notif)
10031 	    return val;
10032 	}
10033     }
10034 }
10035 
10036 int
10037 remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
10038 {
10039   return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
10040 }
10041 
10042 int
10043 remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
10044 				     int *is_notif)
10045 {
10046   return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
10047 }
10048 
10049 /* Kill any new fork children of process PID that haven't been
10050    processed by follow_fork.  */
10051 
10052 void
10053 remote_target::kill_new_fork_children (int pid)
10054 {
10055   remote_state *rs = get_remote_state ();
10056   struct notif_client *notif = &notif_client_stop;
10057 
10058   /* Kill the fork child threads of any threads in process PID
10059      that are stopped at a fork event.  */
10060   for (thread_info *thread : all_non_exited_threads (this))
10061     {
10062       struct target_waitstatus *ws = &thread->pending_follow;
10063 
10064       if (is_pending_fork_parent (ws, pid, thread->ptid))
10065 	{
10066 	  int child_pid = ws->value.related_pid.pid ();
10067 	  int res;
10068 
10069 	  res = remote_vkill (child_pid);
10070 	  if (res != 0)
10071 	    error (_("Can't kill fork child process %d"), child_pid);
10072 	}
10073     }
10074 
10075   /* Check for any pending fork events (not reported or processed yet)
10076      in process PID and kill those fork child threads as well.  */
10077   remote_notif_get_pending_events (notif);
10078   for (auto &event : rs->stop_reply_queue)
10079     if (is_pending_fork_parent (&event->ws, pid, event->ptid))
10080       {
10081 	int child_pid = event->ws.value.related_pid.pid ();
10082 	int res;
10083 
10084 	res = remote_vkill (child_pid);
10085 	if (res != 0)
10086 	  error (_("Can't kill fork child process %d"), child_pid);
10087       }
10088 }
10089 
10090 
10091 /* Target hook to kill the current inferior.  */
10092 
10093 void
10094 remote_target::kill ()
10095 {
10096   int res = -1;
10097   int pid = inferior_ptid.pid ();
10098   struct remote_state *rs = get_remote_state ();
10099 
10100   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
10101     {
10102       /* If we're stopped while forking and we haven't followed yet,
10103 	 kill the child task.  We need to do this before killing the
10104 	 parent task because if this is a vfork then the parent will
10105 	 be sleeping.  */
10106       kill_new_fork_children (pid);
10107 
10108       res = remote_vkill (pid);
10109       if (res == 0)
10110 	{
10111 	  target_mourn_inferior (inferior_ptid);
10112 	  return;
10113 	}
10114     }
10115 
10116   /* If we are in 'target remote' mode and we are killing the only
10117      inferior, then we will tell gdbserver to exit and unpush the
10118      target.  */
10119   if (res == -1 && !remote_multi_process_p (rs)
10120       && number_of_live_inferiors (this) == 1)
10121     {
10122       remote_kill_k ();
10123 
10124       /* We've killed the remote end, we get to mourn it.  If we are
10125 	 not in extended mode, mourning the inferior also unpushes
10126 	 remote_ops from the target stack, which closes the remote
10127 	 connection.  */
10128       target_mourn_inferior (inferior_ptid);
10129 
10130       return;
10131     }
10132 
10133   error (_("Can't kill process"));
10134 }
10135 
10136 /* Send a kill request to the target using the 'vKill' packet.  */
10137 
10138 int
10139 remote_target::remote_vkill (int pid)
10140 {
10141   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
10142     return -1;
10143 
10144   remote_state *rs = get_remote_state ();
10145 
10146   /* Tell the remote target to detach.  */
10147   xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
10148   putpkt (rs->buf);
10149   getpkt (&rs->buf, 0);
10150 
10151   switch (packet_ok (rs->buf,
10152 		     &remote_protocol_packets[PACKET_vKill]))
10153     {
10154     case PACKET_OK:
10155       return 0;
10156     case PACKET_ERROR:
10157       return 1;
10158     case PACKET_UNKNOWN:
10159       return -1;
10160     default:
10161       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
10162     }
10163 }
10164 
10165 /* Send a kill request to the target using the 'k' packet.  */
10166 
10167 void
10168 remote_target::remote_kill_k ()
10169 {
10170   /* Catch errors so the user can quit from gdb even when we
10171      aren't on speaking terms with the remote system.  */
10172   try
10173     {
10174       putpkt ("k");
10175     }
10176   catch (const gdb_exception_error &ex)
10177     {
10178       if (ex.error == TARGET_CLOSE_ERROR)
10179 	{
10180 	  /* If we got an (EOF) error that caused the target
10181 	     to go away, then we're done, that's what we wanted.
10182 	     "k" is susceptible to cause a premature EOF, given
10183 	     that the remote server isn't actually required to
10184 	     reply to "k", and it can happen that it doesn't
10185 	     even get to reply ACK to the "k".  */
10186 	  return;
10187 	}
10188 
10189       /* Otherwise, something went wrong.  We didn't actually kill
10190 	 the target.  Just propagate the exception, and let the
10191 	 user or higher layers decide what to do.  */
10192       throw;
10193     }
10194 }
10195 
10196 void
10197 remote_target::mourn_inferior ()
10198 {
10199   struct remote_state *rs = get_remote_state ();
10200 
10201   /* We're no longer interested in notification events of an inferior
10202      that exited or was killed/detached.  */
10203   discard_pending_stop_replies (current_inferior ());
10204 
10205   /* In 'target remote' mode with one inferior, we close the connection.  */
10206   if (!rs->extended && number_of_live_inferiors (this) <= 1)
10207     {
10208       remote_unpush_target (this);
10209       return;
10210     }
10211 
10212   /* In case we got here due to an error, but we're going to stay
10213      connected.  */
10214   rs->waiting_for_stop_reply = 0;
10215 
10216   /* If the current general thread belonged to the process we just
10217      detached from or has exited, the remote side current general
10218      thread becomes undefined.  Considering a case like this:
10219 
10220      - We just got here due to a detach.
10221      - The process that we're detaching from happens to immediately
10222        report a global breakpoint being hit in non-stop mode, in the
10223        same thread we had selected before.
10224      - GDB attaches to this process again.
10225      - This event happens to be the next event we handle.
10226 
10227      GDB would consider that the current general thread didn't need to
10228      be set on the stub side (with Hg), since for all it knew,
10229      GENERAL_THREAD hadn't changed.
10230 
10231      Notice that although in all-stop mode, the remote server always
10232      sets the current thread to the thread reporting the stop event,
10233      that doesn't happen in non-stop mode; in non-stop, the stub *must
10234      not* change the current thread when reporting a breakpoint hit,
10235      due to the decoupling of event reporting and event handling.
10236 
10237      To keep things simple, we always invalidate our notion of the
10238      current thread.  */
10239   record_currthread (rs, minus_one_ptid);
10240 
10241   /* Call common code to mark the inferior as not running.  */
10242   generic_mourn_inferior ();
10243 }
10244 
10245 bool
10246 extended_remote_target::supports_disable_randomization ()
10247 {
10248   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
10249 }
10250 
10251 void
10252 remote_target::extended_remote_disable_randomization (int val)
10253 {
10254   struct remote_state *rs = get_remote_state ();
10255   char *reply;
10256 
10257   xsnprintf (rs->buf.data (), get_remote_packet_size (),
10258 	     "QDisableRandomization:%x", val);
10259   putpkt (rs->buf);
10260   reply = remote_get_noisy_reply ();
10261   if (*reply == '\0')
10262     error (_("Target does not support QDisableRandomization."));
10263   if (strcmp (reply, "OK") != 0)
10264     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
10265 }
10266 
10267 int
10268 remote_target::extended_remote_run (const std::string &args)
10269 {
10270   struct remote_state *rs = get_remote_state ();
10271   int len;
10272   const char *remote_exec_file = get_remote_exec_file ();
10273 
10274   /* If the user has disabled vRun support, or we have detected that
10275      support is not available, do not try it.  */
10276   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
10277     return -1;
10278 
10279   strcpy (rs->buf.data (), "vRun;");
10280   len = strlen (rs->buf.data ());
10281 
10282   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
10283     error (_("Remote file name too long for run packet"));
10284   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
10285 		      strlen (remote_exec_file));
10286 
10287   if (!args.empty ())
10288     {
10289       int i;
10290 
10291       gdb_argv argv (args.c_str ());
10292       for (i = 0; argv[i] != NULL; i++)
10293 	{
10294 	  if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
10295 	    error (_("Argument list too long for run packet"));
10296 	  rs->buf[len++] = ';';
10297 	  len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
10298 			      strlen (argv[i]));
10299 	}
10300     }
10301 
10302   rs->buf[len++] = '\0';
10303 
10304   putpkt (rs->buf);
10305   getpkt (&rs->buf, 0);
10306 
10307   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
10308     {
10309     case PACKET_OK:
10310       /* We have a wait response.  All is well.  */
10311       return 0;
10312     case PACKET_UNKNOWN:
10313       return -1;
10314     case PACKET_ERROR:
10315       if (remote_exec_file[0] == '\0')
10316 	error (_("Running the default executable on the remote target failed; "
10317 		 "try \"set remote exec-file\"?"));
10318       else
10319 	error (_("Running \"%s\" on the remote target failed"),
10320 	       remote_exec_file);
10321     default:
10322       gdb_assert_not_reached (_("bad switch"));
10323     }
10324 }
10325 
10326 /* Helper function to send set/unset environment packets.  ACTION is
10327    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
10328    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
10329    sent.  */
10330 
10331 void
10332 remote_target::send_environment_packet (const char *action,
10333 					const char *packet,
10334 					const char *value)
10335 {
10336   remote_state *rs = get_remote_state ();
10337 
10338   /* Convert the environment variable to an hex string, which
10339      is the best format to be transmitted over the wire.  */
10340   std::string encoded_value = bin2hex ((const gdb_byte *) value,
10341 					 strlen (value));
10342 
10343   xsnprintf (rs->buf.data (), get_remote_packet_size (),
10344 	     "%s:%s", packet, encoded_value.c_str ());
10345 
10346   putpkt (rs->buf);
10347   getpkt (&rs->buf, 0);
10348   if (strcmp (rs->buf.data (), "OK") != 0)
10349     warning (_("Unable to %s environment variable '%s' on remote."),
10350 	     action, value);
10351 }
10352 
10353 /* Helper function to handle the QEnvironment* packets.  */
10354 
10355 void
10356 remote_target::extended_remote_environment_support ()
10357 {
10358   remote_state *rs = get_remote_state ();
10359 
10360   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10361     {
10362       putpkt ("QEnvironmentReset");
10363       getpkt (&rs->buf, 0);
10364       if (strcmp (rs->buf.data (), "OK") != 0)
10365 	warning (_("Unable to reset environment on remote."));
10366     }
10367 
10368   gdb_environ *e = &current_inferior ()->environment;
10369 
10370   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10371     for (const std::string &el : e->user_set_env ())
10372       send_environment_packet ("set", "QEnvironmentHexEncoded",
10373 			       el.c_str ());
10374 
10375   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10376     for (const std::string &el : e->user_unset_env ())
10377       send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
10378 }
10379 
10380 /* Helper function to set the current working directory for the
10381    inferior in the remote target.  */
10382 
10383 void
10384 remote_target::extended_remote_set_inferior_cwd ()
10385 {
10386   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10387     {
10388       const char *inferior_cwd = get_inferior_cwd ();
10389       remote_state *rs = get_remote_state ();
10390 
10391       if (inferior_cwd != NULL)
10392 	{
10393 	  std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10394 					 strlen (inferior_cwd));
10395 
10396 	  xsnprintf (rs->buf.data (), get_remote_packet_size (),
10397 		     "QSetWorkingDir:%s", hexpath.c_str ());
10398 	}
10399       else
10400 	{
10401 	  /* An empty inferior_cwd means that the user wants us to
10402 	     reset the remote server's inferior's cwd.  */
10403 	  xsnprintf (rs->buf.data (), get_remote_packet_size (),
10404 		     "QSetWorkingDir:");
10405 	}
10406 
10407       putpkt (rs->buf);
10408       getpkt (&rs->buf, 0);
10409       if (packet_ok (rs->buf,
10410 		     &remote_protocol_packets[PACKET_QSetWorkingDir])
10411 	  != PACKET_OK)
10412 	error (_("\
10413 Remote replied unexpectedly while setting the inferior's working\n\
10414 directory: %s"),
10415 	       rs->buf.data ());
10416 
10417     }
10418 }
10419 
10420 /* In the extended protocol we want to be able to do things like
10421    "run" and have them basically work as expected.  So we need
10422    a special create_inferior function.  We support changing the
10423    executable file and the command line arguments, but not the
10424    environment.  */
10425 
10426 void
10427 extended_remote_target::create_inferior (const char *exec_file,
10428 					 const std::string &args,
10429 					 char **env, int from_tty)
10430 {
10431   int run_worked;
10432   char *stop_reply;
10433   struct remote_state *rs = get_remote_state ();
10434   const char *remote_exec_file = get_remote_exec_file ();
10435 
10436   /* If running asynchronously, register the target file descriptor
10437      with the event loop.  */
10438   if (target_can_async_p ())
10439     target_async (1);
10440 
10441   /* Disable address space randomization if requested (and supported).  */
10442   if (supports_disable_randomization ())
10443     extended_remote_disable_randomization (disable_randomization);
10444 
10445   /* If startup-with-shell is on, we inform gdbserver to start the
10446      remote inferior using a shell.  */
10447   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10448     {
10449       xsnprintf (rs->buf.data (), get_remote_packet_size (),
10450 		 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10451       putpkt (rs->buf);
10452       getpkt (&rs->buf, 0);
10453       if (strcmp (rs->buf.data (), "OK") != 0)
10454 	error (_("\
10455 Remote replied unexpectedly while setting startup-with-shell: %s"),
10456 	       rs->buf.data ());
10457     }
10458 
10459   extended_remote_environment_support ();
10460 
10461   extended_remote_set_inferior_cwd ();
10462 
10463   /* Now restart the remote server.  */
10464   run_worked = extended_remote_run (args) != -1;
10465   if (!run_worked)
10466     {
10467       /* vRun was not supported.  Fail if we need it to do what the
10468 	 user requested.  */
10469       if (remote_exec_file[0])
10470 	error (_("Remote target does not support \"set remote exec-file\""));
10471       if (!args.empty ())
10472 	error (_("Remote target does not support \"set args\" or run ARGS"));
10473 
10474       /* Fall back to "R".  */
10475       extended_remote_restart ();
10476     }
10477 
10478   /* vRun's success return is a stop reply.  */
10479   stop_reply = run_worked ? rs->buf.data () : NULL;
10480   add_current_inferior_and_thread (stop_reply);
10481 
10482   /* Get updated offsets, if the stub uses qOffsets.  */
10483   get_offsets ();
10484 }
10485 
10486 
10487 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
10488    the list of conditions (in agent expression bytecode format), if any, the
10489    target needs to evaluate.  The output is placed into the packet buffer
10490    started from BUF and ended at BUF_END.  */
10491 
10492 static int
10493 remote_add_target_side_condition (struct gdbarch *gdbarch,
10494 				  struct bp_target_info *bp_tgt, char *buf,
10495 				  char *buf_end)
10496 {
10497   if (bp_tgt->conditions.empty ())
10498     return 0;
10499 
10500   buf += strlen (buf);
10501   xsnprintf (buf, buf_end - buf, "%s", ";");
10502   buf++;
10503 
10504   /* Send conditions to the target.  */
10505   for (agent_expr *aexpr : bp_tgt->conditions)
10506     {
10507       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
10508       buf += strlen (buf);
10509       for (int i = 0; i < aexpr->len; ++i)
10510 	buf = pack_hex_byte (buf, aexpr->buf[i]);
10511       *buf = '\0';
10512     }
10513   return 0;
10514 }
10515 
10516 static void
10517 remote_add_target_side_commands (struct gdbarch *gdbarch,
10518 				 struct bp_target_info *bp_tgt, char *buf)
10519 {
10520   if (bp_tgt->tcommands.empty ())
10521     return;
10522 
10523   buf += strlen (buf);
10524 
10525   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10526   buf += strlen (buf);
10527 
10528   /* Concatenate all the agent expressions that are commands into the
10529      cmds parameter.  */
10530   for (agent_expr *aexpr : bp_tgt->tcommands)
10531     {
10532       sprintf (buf, "X%x,", aexpr->len);
10533       buf += strlen (buf);
10534       for (int i = 0; i < aexpr->len; ++i)
10535 	buf = pack_hex_byte (buf, aexpr->buf[i]);
10536       *buf = '\0';
10537     }
10538 }
10539 
10540 /* Insert a breakpoint.  On targets that have software breakpoint
10541    support, we ask the remote target to do the work; on targets
10542    which don't, we insert a traditional memory breakpoint.  */
10543 
10544 int
10545 remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10546 				  struct bp_target_info *bp_tgt)
10547 {
10548   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10549      If it succeeds, then set the support to PACKET_ENABLE.  If it
10550      fails, and the user has explicitly requested the Z support then
10551      report an error, otherwise, mark it disabled and go on.  */
10552 
10553   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10554     {
10555       CORE_ADDR addr = bp_tgt->reqstd_address;
10556       struct remote_state *rs;
10557       char *p, *endbuf;
10558 
10559       /* Make sure the remote is pointing at the right process, if
10560 	 necessary.  */
10561       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10562 	set_general_process ();
10563 
10564       rs = get_remote_state ();
10565       p = rs->buf.data ();
10566       endbuf = p + get_remote_packet_size ();
10567 
10568       *(p++) = 'Z';
10569       *(p++) = '0';
10570       *(p++) = ',';
10571       addr = (ULONGEST) remote_address_masked (addr);
10572       p += hexnumstr (p, addr);
10573       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10574 
10575       if (supports_evaluation_of_breakpoint_conditions ())
10576 	remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10577 
10578       if (can_run_breakpoint_commands ())
10579 	remote_add_target_side_commands (gdbarch, bp_tgt, p);
10580 
10581       putpkt (rs->buf);
10582       getpkt (&rs->buf, 0);
10583 
10584       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
10585 	{
10586 	case PACKET_ERROR:
10587 	  return -1;
10588 	case PACKET_OK:
10589 	  return 0;
10590 	case PACKET_UNKNOWN:
10591 	  break;
10592 	}
10593     }
10594 
10595   /* If this breakpoint has target-side commands but this stub doesn't
10596      support Z0 packets, throw error.  */
10597   if (!bp_tgt->tcommands.empty ())
10598     throw_error (NOT_SUPPORTED_ERROR, _("\
10599 Target doesn't support breakpoints that have target side commands."));
10600 
10601   return memory_insert_breakpoint (this, gdbarch, bp_tgt);
10602 }
10603 
10604 int
10605 remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10606 				  struct bp_target_info *bp_tgt,
10607 				  enum remove_bp_reason reason)
10608 {
10609   CORE_ADDR addr = bp_tgt->placed_address;
10610   struct remote_state *rs = get_remote_state ();
10611 
10612   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10613     {
10614       char *p = rs->buf.data ();
10615       char *endbuf = p + get_remote_packet_size ();
10616 
10617       /* Make sure the remote is pointing at the right process, if
10618 	 necessary.  */
10619       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10620 	set_general_process ();
10621 
10622       *(p++) = 'z';
10623       *(p++) = '0';
10624       *(p++) = ',';
10625 
10626       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10627       p += hexnumstr (p, addr);
10628       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10629 
10630       putpkt (rs->buf);
10631       getpkt (&rs->buf, 0);
10632 
10633       return (rs->buf[0] == 'E');
10634     }
10635 
10636   return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
10637 }
10638 
10639 static enum Z_packet_type
10640 watchpoint_to_Z_packet (int type)
10641 {
10642   switch (type)
10643     {
10644     case hw_write:
10645       return Z_PACKET_WRITE_WP;
10646       break;
10647     case hw_read:
10648       return Z_PACKET_READ_WP;
10649       break;
10650     case hw_access:
10651       return Z_PACKET_ACCESS_WP;
10652       break;
10653     default:
10654       internal_error (__FILE__, __LINE__,
10655 		      _("hw_bp_to_z: bad watchpoint type %d"), type);
10656     }
10657 }
10658 
10659 int
10660 remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10661 				  enum target_hw_bp_type type, struct expression *cond)
10662 {
10663   struct remote_state *rs = get_remote_state ();
10664   char *endbuf = rs->buf.data () + get_remote_packet_size ();
10665   char *p;
10666   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10667 
10668   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10669     return 1;
10670 
10671   /* Make sure the remote is pointing at the right process, if
10672      necessary.  */
10673   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10674     set_general_process ();
10675 
10676   xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10677   p = strchr (rs->buf.data (), '\0');
10678   addr = remote_address_masked (addr);
10679   p += hexnumstr (p, (ULONGEST) addr);
10680   xsnprintf (p, endbuf - p, ",%x", len);
10681 
10682   putpkt (rs->buf);
10683   getpkt (&rs->buf, 0);
10684 
10685   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10686     {
10687     case PACKET_ERROR:
10688       return -1;
10689     case PACKET_UNKNOWN:
10690       return 1;
10691     case PACKET_OK:
10692       return 0;
10693     }
10694   internal_error (__FILE__, __LINE__,
10695 		  _("remote_insert_watchpoint: reached end of function"));
10696 }
10697 
10698 bool
10699 remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10700 					     CORE_ADDR start, int length)
10701 {
10702   CORE_ADDR diff = remote_address_masked (addr - start);
10703 
10704   return diff < length;
10705 }
10706 
10707 
10708 int
10709 remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10710 				  enum target_hw_bp_type type, struct expression *cond)
10711 {
10712   struct remote_state *rs = get_remote_state ();
10713   char *endbuf = rs->buf.data () + get_remote_packet_size ();
10714   char *p;
10715   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10716 
10717   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10718     return -1;
10719 
10720   /* Make sure the remote is pointing at the right process, if
10721      necessary.  */
10722   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10723     set_general_process ();
10724 
10725   xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10726   p = strchr (rs->buf.data (), '\0');
10727   addr = remote_address_masked (addr);
10728   p += hexnumstr (p, (ULONGEST) addr);
10729   xsnprintf (p, endbuf - p, ",%x", len);
10730   putpkt (rs->buf);
10731   getpkt (&rs->buf, 0);
10732 
10733   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10734     {
10735     case PACKET_ERROR:
10736     case PACKET_UNKNOWN:
10737       return -1;
10738     case PACKET_OK:
10739       return 0;
10740     }
10741   internal_error (__FILE__, __LINE__,
10742 		  _("remote_remove_watchpoint: reached end of function"));
10743 }
10744 
10745 
10746 static int remote_hw_watchpoint_limit = -1;
10747 static int remote_hw_watchpoint_length_limit = -1;
10748 static int remote_hw_breakpoint_limit = -1;
10749 
10750 int
10751 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
10752 {
10753   if (remote_hw_watchpoint_length_limit == 0)
10754     return 0;
10755   else if (remote_hw_watchpoint_length_limit < 0)
10756     return 1;
10757   else if (len <= remote_hw_watchpoint_length_limit)
10758     return 1;
10759   else
10760     return 0;
10761 }
10762 
10763 int
10764 remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
10765 {
10766   if (type == bp_hardware_breakpoint)
10767     {
10768       if (remote_hw_breakpoint_limit == 0)
10769 	return 0;
10770       else if (remote_hw_breakpoint_limit < 0)
10771 	return 1;
10772       else if (cnt <= remote_hw_breakpoint_limit)
10773 	return 1;
10774     }
10775   else
10776     {
10777       if (remote_hw_watchpoint_limit == 0)
10778 	return 0;
10779       else if (remote_hw_watchpoint_limit < 0)
10780 	return 1;
10781       else if (ot)
10782 	return -1;
10783       else if (cnt <= remote_hw_watchpoint_limit)
10784 	return 1;
10785     }
10786   return -1;
10787 }
10788 
10789 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10790 
10791 bool
10792 remote_target::stopped_by_sw_breakpoint ()
10793 {
10794   struct thread_info *thread = inferior_thread ();
10795 
10796   return (thread->priv != NULL
10797 	  && (get_remote_thread_info (thread)->stop_reason
10798 	      == TARGET_STOPPED_BY_SW_BREAKPOINT));
10799 }
10800 
10801 /* The to_supports_stopped_by_sw_breakpoint method of target
10802    remote.  */
10803 
10804 bool
10805 remote_target::supports_stopped_by_sw_breakpoint ()
10806 {
10807   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10808 }
10809 
10810 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10811 
10812 bool
10813 remote_target::stopped_by_hw_breakpoint ()
10814 {
10815   struct thread_info *thread = inferior_thread ();
10816 
10817   return (thread->priv != NULL
10818 	  && (get_remote_thread_info (thread)->stop_reason
10819 	      == TARGET_STOPPED_BY_HW_BREAKPOINT));
10820 }
10821 
10822 /* The to_supports_stopped_by_hw_breakpoint method of target
10823    remote.  */
10824 
10825 bool
10826 remote_target::supports_stopped_by_hw_breakpoint ()
10827 {
10828   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10829 }
10830 
10831 bool
10832 remote_target::stopped_by_watchpoint ()
10833 {
10834   struct thread_info *thread = inferior_thread ();
10835 
10836   return (thread->priv != NULL
10837 	  && (get_remote_thread_info (thread)->stop_reason
10838 	      == TARGET_STOPPED_BY_WATCHPOINT));
10839 }
10840 
10841 bool
10842 remote_target::stopped_data_address (CORE_ADDR *addr_p)
10843 {
10844   struct thread_info *thread = inferior_thread ();
10845 
10846   if (thread->priv != NULL
10847       && (get_remote_thread_info (thread)->stop_reason
10848 	  == TARGET_STOPPED_BY_WATCHPOINT))
10849     {
10850       *addr_p = get_remote_thread_info (thread)->watch_data_address;
10851       return true;
10852     }
10853 
10854   return false;
10855 }
10856 
10857 
10858 int
10859 remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10860 				     struct bp_target_info *bp_tgt)
10861 {
10862   CORE_ADDR addr = bp_tgt->reqstd_address;
10863   struct remote_state *rs;
10864   char *p, *endbuf;
10865   char *message;
10866 
10867   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10868     return -1;
10869 
10870   /* Make sure the remote is pointing at the right process, if
10871      necessary.  */
10872   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10873     set_general_process ();
10874 
10875   rs = get_remote_state ();
10876   p = rs->buf.data ();
10877   endbuf = p + get_remote_packet_size ();
10878 
10879   *(p++) = 'Z';
10880   *(p++) = '1';
10881   *(p++) = ',';
10882 
10883   addr = remote_address_masked (addr);
10884   p += hexnumstr (p, (ULONGEST) addr);
10885   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10886 
10887   if (supports_evaluation_of_breakpoint_conditions ())
10888     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10889 
10890   if (can_run_breakpoint_commands ())
10891     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10892 
10893   putpkt (rs->buf);
10894   getpkt (&rs->buf, 0);
10895 
10896   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10897     {
10898     case PACKET_ERROR:
10899       if (rs->buf[1] == '.')
10900 	{
10901 	  message = strchr (&rs->buf[2], '.');
10902 	  if (message)
10903 	    error (_("Remote failure reply: %s"), message + 1);
10904 	}
10905       return -1;
10906     case PACKET_UNKNOWN:
10907       return -1;
10908     case PACKET_OK:
10909       return 0;
10910     }
10911   internal_error (__FILE__, __LINE__,
10912 		  _("remote_insert_hw_breakpoint: reached end of function"));
10913 }
10914 
10915 
10916 int
10917 remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10918 				     struct bp_target_info *bp_tgt)
10919 {
10920   CORE_ADDR addr;
10921   struct remote_state *rs = get_remote_state ();
10922   char *p = rs->buf.data ();
10923   char *endbuf = p + get_remote_packet_size ();
10924 
10925   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10926     return -1;
10927 
10928   /* Make sure the remote is pointing at the right process, if
10929      necessary.  */
10930   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10931     set_general_process ();
10932 
10933   *(p++) = 'z';
10934   *(p++) = '1';
10935   *(p++) = ',';
10936 
10937   addr = remote_address_masked (bp_tgt->placed_address);
10938   p += hexnumstr (p, (ULONGEST) addr);
10939   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10940 
10941   putpkt (rs->buf);
10942   getpkt (&rs->buf, 0);
10943 
10944   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10945     {
10946     case PACKET_ERROR:
10947     case PACKET_UNKNOWN:
10948       return -1;
10949     case PACKET_OK:
10950       return 0;
10951     }
10952   internal_error (__FILE__, __LINE__,
10953 		  _("remote_remove_hw_breakpoint: reached end of function"));
10954 }
10955 
10956 /* Verify memory using the "qCRC:" request.  */
10957 
10958 int
10959 remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10960 {
10961   struct remote_state *rs = get_remote_state ();
10962   unsigned long host_crc, target_crc;
10963   char *tmp;
10964 
10965   /* It doesn't make sense to use qCRC if the remote target is
10966      connected but not running.  */
10967   if (target_has_execution ()
10968       && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10969     {
10970       enum packet_result result;
10971 
10972       /* Make sure the remote is pointing at the right process.  */
10973       set_general_process ();
10974 
10975       /* FIXME: assumes lma can fit into long.  */
10976       xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
10977 		 (long) lma, (long) size);
10978       putpkt (rs->buf);
10979 
10980       /* Be clever; compute the host_crc before waiting for target
10981 	 reply.  */
10982       host_crc = xcrc32 (data, size, 0xffffffff);
10983 
10984       getpkt (&rs->buf, 0);
10985 
10986       result = packet_ok (rs->buf,
10987 			  &remote_protocol_packets[PACKET_qCRC]);
10988       if (result == PACKET_ERROR)
10989 	return -1;
10990       else if (result == PACKET_OK)
10991 	{
10992 	  for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10993 	    target_crc = target_crc * 16 + fromhex (*tmp);
10994 
10995 	  return (host_crc == target_crc);
10996 	}
10997     }
10998 
10999   return simple_verify_memory (this, data, lma, size);
11000 }
11001 
11002 /* compare-sections command
11003 
11004    With no arguments, compares each loadable section in the exec bfd
11005    with the same memory range on the target, and reports mismatches.
11006    Useful for verifying the image on the target against the exec file.  */
11007 
11008 static void
11009 compare_sections_command (const char *args, int from_tty)
11010 {
11011   asection *s;
11012   const char *sectname;
11013   bfd_size_type size;
11014   bfd_vma lma;
11015   int matched = 0;
11016   int mismatched = 0;
11017   int res;
11018   int read_only = 0;
11019 
11020   if (!current_program_space->exec_bfd ())
11021     error (_("command cannot be used without an exec file"));
11022 
11023   if (args != NULL && strcmp (args, "-r") == 0)
11024     {
11025       read_only = 1;
11026       args = NULL;
11027     }
11028 
11029   for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
11030     {
11031       if (!(s->flags & SEC_LOAD))
11032 	continue;		/* Skip non-loadable section.  */
11033 
11034       if (read_only && (s->flags & SEC_READONLY) == 0)
11035 	continue;		/* Skip writeable sections */
11036 
11037       size = bfd_section_size (s);
11038       if (size == 0)
11039 	continue;		/* Skip zero-length section.  */
11040 
11041       sectname = bfd_section_name (s);
11042       if (args && strcmp (args, sectname) != 0)
11043 	continue;		/* Not the section selected by user.  */
11044 
11045       matched = 1;		/* Do this section.  */
11046       lma = s->lma;
11047 
11048       gdb::byte_vector sectdata (size);
11049       bfd_get_section_contents (current_program_space->exec_bfd (), s,
11050 				sectdata.data (), 0, size);
11051 
11052       res = target_verify_memory (sectdata.data (), lma, size);
11053 
11054       if (res == -1)
11055 	error (_("target memory fault, section %s, range %s -- %s"), sectname,
11056 	       paddress (target_gdbarch (), lma),
11057 	       paddress (target_gdbarch (), lma + size));
11058 
11059       printf_filtered ("Section %s, range %s -- %s: ", sectname,
11060 		       paddress (target_gdbarch (), lma),
11061 		       paddress (target_gdbarch (), lma + size));
11062       if (res)
11063 	printf_filtered ("matched.\n");
11064       else
11065 	{
11066 	  printf_filtered ("MIS-MATCHED!\n");
11067 	  mismatched++;
11068 	}
11069     }
11070   if (mismatched > 0)
11071     warning (_("One or more sections of the target image does not match\n\
11072 the loaded file\n"));
11073   if (args && !matched)
11074     printf_filtered (_("No loaded section named '%s'.\n"), args);
11075 }
11076 
11077 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
11078    into remote target.  The number of bytes written to the remote
11079    target is returned, or -1 for error.  */
11080 
11081 target_xfer_status
11082 remote_target::remote_write_qxfer (const char *object_name,
11083 				   const char *annex, const gdb_byte *writebuf,
11084 				   ULONGEST offset, LONGEST len,
11085 				   ULONGEST *xfered_len,
11086 				   struct packet_config *packet)
11087 {
11088   int i, buf_len;
11089   ULONGEST n;
11090   struct remote_state *rs = get_remote_state ();
11091   int max_size = get_memory_write_packet_size ();
11092 
11093   if (packet_config_support (packet) == PACKET_DISABLE)
11094     return TARGET_XFER_E_IO;
11095 
11096   /* Insert header.  */
11097   i = snprintf (rs->buf.data (), max_size,
11098 		"qXfer:%s:write:%s:%s:",
11099 		object_name, annex ? annex : "",
11100 		phex_nz (offset, sizeof offset));
11101   max_size -= (i + 1);
11102 
11103   /* Escape as much data as fits into rs->buf.  */
11104   buf_len = remote_escape_output
11105     (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
11106 
11107   if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
11108       || getpkt_sane (&rs->buf, 0) < 0
11109       || packet_ok (rs->buf, packet) != PACKET_OK)
11110     return TARGET_XFER_E_IO;
11111 
11112   unpack_varlen_hex (rs->buf.data (), &n);
11113 
11114   *xfered_len = n;
11115   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11116 }
11117 
11118 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
11119    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
11120    number of bytes read is returned, or 0 for EOF, or -1 for error.
11121    The number of bytes read may be less than LEN without indicating an
11122    EOF.  PACKET is checked and updated to indicate whether the remote
11123    target supports this object.  */
11124 
11125 target_xfer_status
11126 remote_target::remote_read_qxfer (const char *object_name,
11127 				  const char *annex,
11128 				  gdb_byte *readbuf, ULONGEST offset,
11129 				  LONGEST len,
11130 				  ULONGEST *xfered_len,
11131 				  struct packet_config *packet)
11132 {
11133   struct remote_state *rs = get_remote_state ();
11134   LONGEST i, n, packet_len;
11135 
11136   if (packet_config_support (packet) == PACKET_DISABLE)
11137     return TARGET_XFER_E_IO;
11138 
11139   /* Check whether we've cached an end-of-object packet that matches
11140      this request.  */
11141   if (rs->finished_object)
11142     {
11143       if (strcmp (object_name, rs->finished_object) == 0
11144 	  && strcmp (annex ? annex : "", rs->finished_annex) == 0
11145 	  && offset == rs->finished_offset)
11146 	return TARGET_XFER_EOF;
11147 
11148 
11149       /* Otherwise, we're now reading something different.  Discard
11150 	 the cache.  */
11151       xfree (rs->finished_object);
11152       xfree (rs->finished_annex);
11153       rs->finished_object = NULL;
11154       rs->finished_annex = NULL;
11155     }
11156 
11157   /* Request only enough to fit in a single packet.  The actual data
11158      may not, since we don't know how much of it will need to be escaped;
11159      the target is free to respond with slightly less data.  We subtract
11160      five to account for the response type and the protocol frame.  */
11161   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
11162   snprintf (rs->buf.data (), get_remote_packet_size () - 4,
11163 	    "qXfer:%s:read:%s:%s,%s",
11164 	    object_name, annex ? annex : "",
11165 	    phex_nz (offset, sizeof offset),
11166 	    phex_nz (n, sizeof n));
11167   i = putpkt (rs->buf);
11168   if (i < 0)
11169     return TARGET_XFER_E_IO;
11170 
11171   rs->buf[0] = '\0';
11172   packet_len = getpkt_sane (&rs->buf, 0);
11173   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
11174     return TARGET_XFER_E_IO;
11175 
11176   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
11177     error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
11178 
11179   /* 'm' means there is (or at least might be) more data after this
11180      batch.  That does not make sense unless there's at least one byte
11181      of data in this reply.  */
11182   if (rs->buf[0] == 'm' && packet_len == 1)
11183     error (_("Remote qXfer reply contained no data."));
11184 
11185   /* Got some data.  */
11186   i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
11187 			     packet_len - 1, readbuf, n);
11188 
11189   /* 'l' is an EOF marker, possibly including a final block of data,
11190      or possibly empty.  If we have the final block of a non-empty
11191      object, record this fact to bypass a subsequent partial read.  */
11192   if (rs->buf[0] == 'l' && offset + i > 0)
11193     {
11194       rs->finished_object = xstrdup (object_name);
11195       rs->finished_annex = xstrdup (annex ? annex : "");
11196       rs->finished_offset = offset + i;
11197     }
11198 
11199   if (i == 0)
11200     return TARGET_XFER_EOF;
11201   else
11202     {
11203       *xfered_len = i;
11204       return TARGET_XFER_OK;
11205     }
11206 }
11207 
11208 enum target_xfer_status
11209 remote_target::xfer_partial (enum target_object object,
11210 			     const char *annex, gdb_byte *readbuf,
11211 			     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
11212 			     ULONGEST *xfered_len)
11213 {
11214   struct remote_state *rs;
11215   int i;
11216   char *p2;
11217   char query_type;
11218   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
11219 
11220   set_remote_traceframe ();
11221   set_general_thread (inferior_ptid);
11222 
11223   rs = get_remote_state ();
11224 
11225   /* Handle memory using the standard memory routines.  */
11226   if (object == TARGET_OBJECT_MEMORY)
11227     {
11228       /* If the remote target is connected but not running, we should
11229 	 pass this request down to a lower stratum (e.g. the executable
11230 	 file).  */
11231       if (!target_has_execution ())
11232 	return TARGET_XFER_EOF;
11233 
11234       if (writebuf != NULL)
11235 	return remote_write_bytes (offset, writebuf, len, unit_size,
11236 				   xfered_len);
11237       else
11238 	return remote_read_bytes (offset, readbuf, len, unit_size,
11239 				  xfered_len);
11240     }
11241 
11242   /* Handle extra signal info using qxfer packets.  */
11243   if (object == TARGET_OBJECT_SIGNAL_INFO)
11244     {
11245       if (readbuf)
11246 	return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
11247 				  xfered_len, &remote_protocol_packets
11248 				  [PACKET_qXfer_siginfo_read]);
11249       else
11250 	return remote_write_qxfer ("siginfo", annex,
11251 				   writebuf, offset, len, xfered_len,
11252 				   &remote_protocol_packets
11253 				   [PACKET_qXfer_siginfo_write]);
11254     }
11255 
11256   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
11257     {
11258       if (readbuf)
11259 	return remote_read_qxfer ("statictrace", annex,
11260 				  readbuf, offset, len, xfered_len,
11261 				  &remote_protocol_packets
11262 				  [PACKET_qXfer_statictrace_read]);
11263       else
11264 	return TARGET_XFER_E_IO;
11265     }
11266 
11267   /* Only handle flash writes.  */
11268   if (writebuf != NULL)
11269     {
11270       switch (object)
11271 	{
11272 	case TARGET_OBJECT_FLASH:
11273 	  return remote_flash_write (offset, len, xfered_len,
11274 				     writebuf);
11275 
11276 	default:
11277 	  return TARGET_XFER_E_IO;
11278 	}
11279     }
11280 
11281   /* Map pre-existing objects onto letters.  DO NOT do this for new
11282      objects!!!  Instead specify new query packets.  */
11283   switch (object)
11284     {
11285     case TARGET_OBJECT_AVR:
11286       query_type = 'R';
11287       break;
11288 
11289     case TARGET_OBJECT_AUXV:
11290       gdb_assert (annex == NULL);
11291       return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
11292 				xfered_len,
11293 				&remote_protocol_packets[PACKET_qXfer_auxv]);
11294 
11295     case TARGET_OBJECT_AVAILABLE_FEATURES:
11296       return remote_read_qxfer
11297 	("features", annex, readbuf, offset, len, xfered_len,
11298 	 &remote_protocol_packets[PACKET_qXfer_features]);
11299 
11300     case TARGET_OBJECT_LIBRARIES:
11301       return remote_read_qxfer
11302 	("libraries", annex, readbuf, offset, len, xfered_len,
11303 	 &remote_protocol_packets[PACKET_qXfer_libraries]);
11304 
11305     case TARGET_OBJECT_LIBRARIES_SVR4:
11306       return remote_read_qxfer
11307 	("libraries-svr4", annex, readbuf, offset, len, xfered_len,
11308 	 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
11309 
11310     case TARGET_OBJECT_MEMORY_MAP:
11311       gdb_assert (annex == NULL);
11312       return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
11313 				 xfered_len,
11314 				&remote_protocol_packets[PACKET_qXfer_memory_map]);
11315 
11316     case TARGET_OBJECT_OSDATA:
11317       /* Should only get here if we're connected.  */
11318       gdb_assert (rs->remote_desc);
11319       return remote_read_qxfer
11320 	("osdata", annex, readbuf, offset, len, xfered_len,
11321 	&remote_protocol_packets[PACKET_qXfer_osdata]);
11322 
11323     case TARGET_OBJECT_THREADS:
11324       gdb_assert (annex == NULL);
11325       return remote_read_qxfer ("threads", annex, readbuf, offset, len,
11326 				xfered_len,
11327 				&remote_protocol_packets[PACKET_qXfer_threads]);
11328 
11329     case TARGET_OBJECT_TRACEFRAME_INFO:
11330       gdb_assert (annex == NULL);
11331       return remote_read_qxfer
11332 	("traceframe-info", annex, readbuf, offset, len, xfered_len,
11333 	 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
11334 
11335     case TARGET_OBJECT_FDPIC:
11336       return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
11337 				xfered_len,
11338 				&remote_protocol_packets[PACKET_qXfer_fdpic]);
11339 
11340     case TARGET_OBJECT_OPENVMS_UIB:
11341       return remote_read_qxfer ("uib", annex, readbuf, offset, len,
11342 				xfered_len,
11343 				&remote_protocol_packets[PACKET_qXfer_uib]);
11344 
11345     case TARGET_OBJECT_BTRACE:
11346       return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
11347 				xfered_len,
11348 	&remote_protocol_packets[PACKET_qXfer_btrace]);
11349 
11350     case TARGET_OBJECT_BTRACE_CONF:
11351       return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
11352 				len, xfered_len,
11353 	&remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11354 
11355     case TARGET_OBJECT_EXEC_FILE:
11356       return remote_read_qxfer ("exec-file", annex, readbuf, offset,
11357 				len, xfered_len,
11358 	&remote_protocol_packets[PACKET_qXfer_exec_file]);
11359 
11360     default:
11361       return TARGET_XFER_E_IO;
11362     }
11363 
11364   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
11365      large enough let the caller deal with it.  */
11366   if (len < get_remote_packet_size ())
11367     return TARGET_XFER_E_IO;
11368   len = get_remote_packet_size ();
11369 
11370   /* Except for querying the minimum buffer size, target must be open.  */
11371   if (!rs->remote_desc)
11372     error (_("remote query is only available after target open"));
11373 
11374   gdb_assert (annex != NULL);
11375   gdb_assert (readbuf != NULL);
11376 
11377   p2 = rs->buf.data ();
11378   *p2++ = 'q';
11379   *p2++ = query_type;
11380 
11381   /* We used one buffer char for the remote protocol q command and
11382      another for the query type.  As the remote protocol encapsulation
11383      uses 4 chars plus one extra in case we are debugging
11384      (remote_debug), we have PBUFZIZ - 7 left to pack the query
11385      string.  */
11386   i = 0;
11387   while (annex[i] && (i < (get_remote_packet_size () - 8)))
11388     {
11389       /* Bad caller may have sent forbidden characters.  */
11390       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11391       *p2++ = annex[i];
11392       i++;
11393     }
11394   *p2 = '\0';
11395   gdb_assert (annex[i] == '\0');
11396 
11397   i = putpkt (rs->buf);
11398   if (i < 0)
11399     return TARGET_XFER_E_IO;
11400 
11401   getpkt (&rs->buf, 0);
11402   strcpy ((char *) readbuf, rs->buf.data ());
11403 
11404   *xfered_len = strlen ((char *) readbuf);
11405   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11406 }
11407 
11408 /* Implementation of to_get_memory_xfer_limit.  */
11409 
11410 ULONGEST
11411 remote_target::get_memory_xfer_limit ()
11412 {
11413   return get_memory_write_packet_size ();
11414 }
11415 
11416 int
11417 remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11418 			      const gdb_byte *pattern, ULONGEST pattern_len,
11419 			      CORE_ADDR *found_addrp)
11420 {
11421   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
11422   struct remote_state *rs = get_remote_state ();
11423   int max_size = get_memory_write_packet_size ();
11424   struct packet_config *packet =
11425     &remote_protocol_packets[PACKET_qSearch_memory];
11426   /* Number of packet bytes used to encode the pattern;
11427      this could be more than PATTERN_LEN due to escape characters.  */
11428   int escaped_pattern_len;
11429   /* Amount of pattern that was encodable in the packet.  */
11430   int used_pattern_len;
11431   int i;
11432   int found;
11433   ULONGEST found_addr;
11434 
11435   auto read_memory = [=] (CORE_ADDR addr, gdb_byte *result, size_t len)
11436     {
11437       return (target_read (this, TARGET_OBJECT_MEMORY, NULL, result, addr, len)
11438 	      == len);
11439     };
11440 
11441   /* Don't go to the target if we don't have to.  This is done before
11442      checking packet_config_support to avoid the possibility that a
11443      success for this edge case means the facility works in
11444      general.  */
11445   if (pattern_len > search_space_len)
11446     return 0;
11447   if (pattern_len == 0)
11448     {
11449       *found_addrp = start_addr;
11450       return 1;
11451     }
11452 
11453   /* If we already know the packet isn't supported, fall back to the simple
11454      way of searching memory.  */
11455 
11456   if (packet_config_support (packet) == PACKET_DISABLE)
11457     {
11458       /* Target doesn't provided special support, fall back and use the
11459 	 standard support (copy memory and do the search here).  */
11460       return simple_search_memory (read_memory, start_addr, search_space_len,
11461 				   pattern, pattern_len, found_addrp);
11462     }
11463 
11464   /* Make sure the remote is pointing at the right process.  */
11465   set_general_process ();
11466 
11467   /* Insert header.  */
11468   i = snprintf (rs->buf.data (), max_size,
11469 		"qSearch:memory:%s;%s;",
11470 		phex_nz (start_addr, addr_size),
11471 		phex_nz (search_space_len, sizeof (search_space_len)));
11472   max_size -= (i + 1);
11473 
11474   /* Escape as much data as fits into rs->buf.  */
11475   escaped_pattern_len =
11476     remote_escape_output (pattern, pattern_len, 1,
11477 			  (gdb_byte *) rs->buf.data () + i,
11478 			  &used_pattern_len, max_size);
11479 
11480   /* Bail if the pattern is too large.  */
11481   if (used_pattern_len != pattern_len)
11482     error (_("Pattern is too large to transmit to remote target."));
11483 
11484   if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11485       || getpkt_sane (&rs->buf, 0) < 0
11486       || packet_ok (rs->buf, packet) != PACKET_OK)
11487     {
11488       /* The request may not have worked because the command is not
11489 	 supported.  If so, fall back to the simple way.  */
11490       if (packet_config_support (packet) == PACKET_DISABLE)
11491 	{
11492 	  return simple_search_memory (read_memory, start_addr, search_space_len,
11493 				       pattern, pattern_len, found_addrp);
11494 	}
11495       return -1;
11496     }
11497 
11498   if (rs->buf[0] == '0')
11499     found = 0;
11500   else if (rs->buf[0] == '1')
11501     {
11502       found = 1;
11503       if (rs->buf[1] != ',')
11504 	error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11505       unpack_varlen_hex (&rs->buf[2], &found_addr);
11506       *found_addrp = found_addr;
11507     }
11508   else
11509     error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11510 
11511   return found;
11512 }
11513 
11514 void
11515 remote_target::rcmd (const char *command, struct ui_file *outbuf)
11516 {
11517   struct remote_state *rs = get_remote_state ();
11518   char *p = rs->buf.data ();
11519 
11520   if (!rs->remote_desc)
11521     error (_("remote rcmd is only available after target open"));
11522 
11523   /* Send a NULL command across as an empty command.  */
11524   if (command == NULL)
11525     command = "";
11526 
11527   /* The query prefix.  */
11528   strcpy (rs->buf.data (), "qRcmd,");
11529   p = strchr (rs->buf.data (), '\0');
11530 
11531   if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
11532       > get_remote_packet_size ())
11533     error (_("\"monitor\" command ``%s'' is too long."), command);
11534 
11535   /* Encode the actual command.  */
11536   bin2hex ((const gdb_byte *) command, p, strlen (command));
11537 
11538   if (putpkt (rs->buf) < 0)
11539     error (_("Communication problem with target."));
11540 
11541   /* get/display the response */
11542   while (1)
11543     {
11544       char *buf;
11545 
11546       /* XXX - see also remote_get_noisy_reply().  */
11547       QUIT;			/* Allow user to bail out with ^C.  */
11548       rs->buf[0] = '\0';
11549       if (getpkt_sane (&rs->buf, 0) == -1)
11550 	{
11551 	  /* Timeout.  Continue to (try to) read responses.
11552 	     This is better than stopping with an error, assuming the stub
11553 	     is still executing the (long) monitor command.
11554 	     If needed, the user can interrupt gdb using C-c, obtaining
11555 	     an effect similar to stop on timeout.  */
11556 	  continue;
11557 	}
11558       buf = rs->buf.data ();
11559       if (buf[0] == '\0')
11560 	error (_("Target does not support this command."));
11561       if (buf[0] == 'O' && buf[1] != 'K')
11562 	{
11563 	  remote_console_output (buf + 1); /* 'O' message from stub.  */
11564 	  continue;
11565 	}
11566       if (strcmp (buf, "OK") == 0)
11567 	break;
11568       if (strlen (buf) == 3 && buf[0] == 'E'
11569 	  && isdigit (buf[1]) && isdigit (buf[2]))
11570 	{
11571 	  error (_("Protocol error with Rcmd"));
11572 	}
11573       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11574 	{
11575 	  char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
11576 
11577 	  fputc_unfiltered (c, outbuf);
11578 	}
11579       break;
11580     }
11581 }
11582 
11583 std::vector<mem_region>
11584 remote_target::memory_map ()
11585 {
11586   std::vector<mem_region> result;
11587   gdb::optional<gdb::char_vector> text
11588     = target_read_stralloc (current_inferior ()->top_target (),
11589 			    TARGET_OBJECT_MEMORY_MAP, NULL);
11590 
11591   if (text)
11592     result = parse_memory_map (text->data ());
11593 
11594   return result;
11595 }
11596 
11597 static void
11598 packet_command (const char *args, int from_tty)
11599 {
11600   remote_target *remote = get_current_remote_target ();
11601 
11602   if (remote == nullptr)
11603     error (_("command can only be used with remote target"));
11604 
11605   remote->packet_command (args, from_tty);
11606 }
11607 
11608 void
11609 remote_target::packet_command (const char *args, int from_tty)
11610 {
11611   if (!args)
11612     error (_("remote-packet command requires packet text as argument"));
11613 
11614   puts_filtered ("sending: ");
11615   print_packet (args);
11616   puts_filtered ("\n");
11617   putpkt (args);
11618 
11619   remote_state *rs = get_remote_state ();
11620 
11621   getpkt (&rs->buf, 0);
11622   puts_filtered ("received: ");
11623   print_packet (rs->buf.data ());
11624   puts_filtered ("\n");
11625 }
11626 
11627 #if 0
11628 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
11629 
11630 static void display_thread_info (struct gdb_ext_thread_info *info);
11631 
11632 static void threadset_test_cmd (char *cmd, int tty);
11633 
11634 static void threadalive_test (char *cmd, int tty);
11635 
11636 static void threadlist_test_cmd (char *cmd, int tty);
11637 
11638 int get_and_display_threadinfo (threadref *ref);
11639 
11640 static void threadinfo_test_cmd (char *cmd, int tty);
11641 
11642 static int thread_display_step (threadref *ref, void *context);
11643 
11644 static void threadlist_update_test_cmd (char *cmd, int tty);
11645 
11646 static void init_remote_threadtests (void);
11647 
11648 #define SAMPLE_THREAD  0x05060708	/* Truncated 64 bit threadid.  */
11649 
11650 static void
11651 threadset_test_cmd (const char *cmd, int tty)
11652 {
11653   int sample_thread = SAMPLE_THREAD;
11654 
11655   printf_filtered (_("Remote threadset test\n"));
11656   set_general_thread (sample_thread);
11657 }
11658 
11659 
11660 static void
11661 threadalive_test (const char *cmd, int tty)
11662 {
11663   int sample_thread = SAMPLE_THREAD;
11664   int pid = inferior_ptid.pid ();
11665   ptid_t ptid = ptid_t (pid, sample_thread, 0);
11666 
11667   if (remote_thread_alive (ptid))
11668     printf_filtered ("PASS: Thread alive test\n");
11669   else
11670     printf_filtered ("FAIL: Thread alive test\n");
11671 }
11672 
11673 void output_threadid (char *title, threadref *ref);
11674 
11675 void
11676 output_threadid (char *title, threadref *ref)
11677 {
11678   char hexid[20];
11679 
11680   pack_threadid (&hexid[0], ref);	/* Convert thread id into hex.  */
11681   hexid[16] = 0;
11682   printf_filtered ("%s  %s\n", title, (&hexid[0]));
11683 }
11684 
11685 static void
11686 threadlist_test_cmd (const char *cmd, int tty)
11687 {
11688   int startflag = 1;
11689   threadref nextthread;
11690   int done, result_count;
11691   threadref threadlist[3];
11692 
11693   printf_filtered ("Remote Threadlist test\n");
11694   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11695 			      &result_count, &threadlist[0]))
11696     printf_filtered ("FAIL: threadlist test\n");
11697   else
11698     {
11699       threadref *scan = threadlist;
11700       threadref *limit = scan + result_count;
11701 
11702       while (scan < limit)
11703 	output_threadid (" thread ", scan++);
11704     }
11705 }
11706 
11707 void
11708 display_thread_info (struct gdb_ext_thread_info *info)
11709 {
11710   output_threadid ("Threadid: ", &info->threadid);
11711   printf_filtered ("Name: %s\n ", info->shortname);
11712   printf_filtered ("State: %s\n", info->display);
11713   printf_filtered ("other: %s\n\n", info->more_display);
11714 }
11715 
11716 int
11717 get_and_display_threadinfo (threadref *ref)
11718 {
11719   int result;
11720   int set;
11721   struct gdb_ext_thread_info threadinfo;
11722 
11723   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11724     | TAG_MOREDISPLAY | TAG_DISPLAY;
11725   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11726     display_thread_info (&threadinfo);
11727   return result;
11728 }
11729 
11730 static void
11731 threadinfo_test_cmd (const char *cmd, int tty)
11732 {
11733   int athread = SAMPLE_THREAD;
11734   threadref thread;
11735   int set;
11736 
11737   int_to_threadref (&thread, athread);
11738   printf_filtered ("Remote Threadinfo test\n");
11739   if (!get_and_display_threadinfo (&thread))
11740     printf_filtered ("FAIL cannot get thread info\n");
11741 }
11742 
11743 static int
11744 thread_display_step (threadref *ref, void *context)
11745 {
11746   /* output_threadid(" threadstep ",ref); *//* simple test */
11747   return get_and_display_threadinfo (ref);
11748 }
11749 
11750 static void
11751 threadlist_update_test_cmd (const char *cmd, int tty)
11752 {
11753   printf_filtered ("Remote Threadlist update test\n");
11754   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11755 }
11756 
11757 static void
11758 init_remote_threadtests (void)
11759 {
11760   add_com ("tlist", class_obscure, threadlist_test_cmd,
11761 	   _("Fetch and print the remote list of "
11762 	     "thread identifiers, one pkt only."));
11763   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11764 	   _("Fetch and display info about one thread."));
11765   add_com ("tset", class_obscure, threadset_test_cmd,
11766 	   _("Test setting to a different thread."));
11767   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11768 	   _("Iterate through updating all remote thread info."));
11769   add_com ("talive", class_obscure, threadalive_test,
11770 	   _("Remote thread alive test."));
11771 }
11772 
11773 #endif /* 0 */
11774 
11775 /* Convert a thread ID to a string.  */
11776 
11777 std::string
11778 remote_target::pid_to_str (ptid_t ptid)
11779 {
11780   struct remote_state *rs = get_remote_state ();
11781 
11782   if (ptid == null_ptid)
11783     return normal_pid_to_str (ptid);
11784   else if (ptid.is_pid ())
11785     {
11786       /* Printing an inferior target id.  */
11787 
11788       /* When multi-process extensions are off, there's no way in the
11789 	 remote protocol to know the remote process id, if there's any
11790 	 at all.  There's one exception --- when we're connected with
11791 	 target extended-remote, and we manually attached to a process
11792 	 with "attach PID".  We don't record anywhere a flag that
11793 	 allows us to distinguish that case from the case of
11794 	 connecting with extended-remote and the stub already being
11795 	 attached to a process, and reporting yes to qAttached, hence
11796 	 no smart special casing here.  */
11797       if (!remote_multi_process_p (rs))
11798 	return "Remote target";
11799 
11800       return normal_pid_to_str (ptid);
11801     }
11802   else
11803     {
11804       if (magic_null_ptid == ptid)
11805 	return "Thread <main>";
11806       else if (remote_multi_process_p (rs))
11807 	if (ptid.lwp () == 0)
11808 	  return normal_pid_to_str (ptid);
11809 	else
11810 	  return string_printf ("Thread %d.%ld",
11811 				ptid.pid (), ptid.lwp ());
11812       else
11813 	return string_printf ("Thread %ld", ptid.lwp ());
11814     }
11815 }
11816 
11817 /* Get the address of the thread local variable in OBJFILE which is
11818    stored at OFFSET within the thread local storage for thread PTID.  */
11819 
11820 CORE_ADDR
11821 remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11822 					 CORE_ADDR offset)
11823 {
11824   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11825     {
11826       struct remote_state *rs = get_remote_state ();
11827       char *p = rs->buf.data ();
11828       char *endp = p + get_remote_packet_size ();
11829       enum packet_result result;
11830 
11831       strcpy (p, "qGetTLSAddr:");
11832       p += strlen (p);
11833       p = write_ptid (p, endp, ptid);
11834       *p++ = ',';
11835       p += hexnumstr (p, offset);
11836       *p++ = ',';
11837       p += hexnumstr (p, lm);
11838       *p++ = '\0';
11839 
11840       putpkt (rs->buf);
11841       getpkt (&rs->buf, 0);
11842       result = packet_ok (rs->buf,
11843 			  &remote_protocol_packets[PACKET_qGetTLSAddr]);
11844       if (result == PACKET_OK)
11845 	{
11846 	  ULONGEST addr;
11847 
11848 	  unpack_varlen_hex (rs->buf.data (), &addr);
11849 	  return addr;
11850 	}
11851       else if (result == PACKET_UNKNOWN)
11852 	throw_error (TLS_GENERIC_ERROR,
11853 		     _("Remote target doesn't support qGetTLSAddr packet"));
11854       else
11855 	throw_error (TLS_GENERIC_ERROR,
11856 		     _("Remote target failed to process qGetTLSAddr request"));
11857     }
11858   else
11859     throw_error (TLS_GENERIC_ERROR,
11860 		 _("TLS not supported or disabled on this target"));
11861   /* Not reached.  */
11862   return 0;
11863 }
11864 
11865 /* Provide thread local base, i.e. Thread Information Block address.
11866    Returns 1 if ptid is found and thread_local_base is non zero.  */
11867 
11868 bool
11869 remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
11870 {
11871   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11872     {
11873       struct remote_state *rs = get_remote_state ();
11874       char *p = rs->buf.data ();
11875       char *endp = p + get_remote_packet_size ();
11876       enum packet_result result;
11877 
11878       strcpy (p, "qGetTIBAddr:");
11879       p += strlen (p);
11880       p = write_ptid (p, endp, ptid);
11881       *p++ = '\0';
11882 
11883       putpkt (rs->buf);
11884       getpkt (&rs->buf, 0);
11885       result = packet_ok (rs->buf,
11886 			  &remote_protocol_packets[PACKET_qGetTIBAddr]);
11887       if (result == PACKET_OK)
11888 	{
11889 	  ULONGEST val;
11890 	  unpack_varlen_hex (rs->buf.data (), &val);
11891 	  if (addr)
11892 	    *addr = (CORE_ADDR) val;
11893 	  return true;
11894 	}
11895       else if (result == PACKET_UNKNOWN)
11896 	error (_("Remote target doesn't support qGetTIBAddr packet"));
11897       else
11898 	error (_("Remote target failed to process qGetTIBAddr request"));
11899     }
11900   else
11901     error (_("qGetTIBAddr not supported or disabled on this target"));
11902   /* Not reached.  */
11903   return false;
11904 }
11905 
11906 /* Support for inferring a target description based on the current
11907    architecture and the size of a 'g' packet.  While the 'g' packet
11908    can have any size (since optional registers can be left off the
11909    end), some sizes are easily recognizable given knowledge of the
11910    approximate architecture.  */
11911 
11912 struct remote_g_packet_guess
11913 {
11914   remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11915     : bytes (bytes_),
11916       tdesc (tdesc_)
11917   {
11918   }
11919 
11920   int bytes;
11921   const struct target_desc *tdesc;
11922 };
11923 
11924 struct remote_g_packet_data : public allocate_on_obstack
11925 {
11926   std::vector<remote_g_packet_guess> guesses;
11927 };
11928 
11929 static struct gdbarch_data *remote_g_packet_data_handle;
11930 
11931 static void *
11932 remote_g_packet_data_init (struct obstack *obstack)
11933 {
11934   return new (obstack) remote_g_packet_data;
11935 }
11936 
11937 void
11938 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11939 				const struct target_desc *tdesc)
11940 {
11941   struct remote_g_packet_data *data
11942     = ((struct remote_g_packet_data *)
11943        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11944 
11945   gdb_assert (tdesc != NULL);
11946 
11947   for (const remote_g_packet_guess &guess : data->guesses)
11948     if (guess.bytes == bytes)
11949       internal_error (__FILE__, __LINE__,
11950 		      _("Duplicate g packet description added for size %d"),
11951 		      bytes);
11952 
11953   data->guesses.emplace_back (bytes, tdesc);
11954 }
11955 
11956 /* Return true if remote_read_description would do anything on this target
11957    and architecture, false otherwise.  */
11958 
11959 static bool
11960 remote_read_description_p (struct target_ops *target)
11961 {
11962   struct remote_g_packet_data *data
11963     = ((struct remote_g_packet_data *)
11964        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11965 
11966   return !data->guesses.empty ();
11967 }
11968 
11969 const struct target_desc *
11970 remote_target::read_description ()
11971 {
11972   struct remote_g_packet_data *data
11973     = ((struct remote_g_packet_data *)
11974        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11975 
11976   /* Do not try this during initial connection, when we do not know
11977      whether there is a running but stopped thread.  */
11978   if (!target_has_execution () || inferior_ptid == null_ptid)
11979     return beneath ()->read_description ();
11980 
11981   if (!data->guesses.empty ())
11982     {
11983       int bytes = send_g_packet ();
11984 
11985       for (const remote_g_packet_guess &guess : data->guesses)
11986 	if (guess.bytes == bytes)
11987 	  return guess.tdesc;
11988 
11989       /* We discard the g packet.  A minor optimization would be to
11990 	 hold on to it, and fill the register cache once we have selected
11991 	 an architecture, but it's too tricky to do safely.  */
11992     }
11993 
11994   return beneath ()->read_description ();
11995 }
11996 
11997 /* Remote file transfer support.  This is host-initiated I/O, not
11998    target-initiated; for target-initiated, see remote-fileio.c.  */
11999 
12000 /* If *LEFT is at least the length of STRING, copy STRING to
12001    *BUFFER, update *BUFFER to point to the new end of the buffer, and
12002    decrease *LEFT.  Otherwise raise an error.  */
12003 
12004 static void
12005 remote_buffer_add_string (char **buffer, int *left, const char *string)
12006 {
12007   int len = strlen (string);
12008 
12009   if (len > *left)
12010     error (_("Packet too long for target."));
12011 
12012   memcpy (*buffer, string, len);
12013   *buffer += len;
12014   *left -= len;
12015 
12016   /* NUL-terminate the buffer as a convenience, if there is
12017      room.  */
12018   if (*left)
12019     **buffer = '\0';
12020 }
12021 
12022 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
12023    *BUFFER, update *BUFFER to point to the new end of the buffer, and
12024    decrease *LEFT.  Otherwise raise an error.  */
12025 
12026 static void
12027 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
12028 			 int len)
12029 {
12030   if (2 * len > *left)
12031     error (_("Packet too long for target."));
12032 
12033   bin2hex (bytes, *buffer, len);
12034   *buffer += 2 * len;
12035   *left -= 2 * len;
12036 
12037   /* NUL-terminate the buffer as a convenience, if there is
12038      room.  */
12039   if (*left)
12040     **buffer = '\0';
12041 }
12042 
12043 /* If *LEFT is large enough, convert VALUE to hex and add it to
12044    *BUFFER, update *BUFFER to point to the new end of the buffer, and
12045    decrease *LEFT.  Otherwise raise an error.  */
12046 
12047 static void
12048 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
12049 {
12050   int len = hexnumlen (value);
12051 
12052   if (len > *left)
12053     error (_("Packet too long for target."));
12054 
12055   hexnumstr (*buffer, value);
12056   *buffer += len;
12057   *left -= len;
12058 
12059   /* NUL-terminate the buffer as a convenience, if there is
12060      room.  */
12061   if (*left)
12062     **buffer = '\0';
12063 }
12064 
12065 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
12066    value, *REMOTE_ERRNO to the remote error number or zero if none
12067    was included, and *ATTACHMENT to point to the start of the annex
12068    if any.  The length of the packet isn't needed here; there may
12069    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
12070 
12071    Return 0 if the packet could be parsed, -1 if it could not.  If
12072    -1 is returned, the other variables may not be initialized.  */
12073 
12074 static int
12075 remote_hostio_parse_result (const char *buffer, int *retcode,
12076 			    int *remote_errno, const char **attachment)
12077 {
12078   char *p, *p2;
12079 
12080   *remote_errno = 0;
12081   *attachment = NULL;
12082 
12083   if (buffer[0] != 'F')
12084     return -1;
12085 
12086   errno = 0;
12087   *retcode = strtol (&buffer[1], &p, 16);
12088   if (errno != 0 || p == &buffer[1])
12089     return -1;
12090 
12091   /* Check for ",errno".  */
12092   if (*p == ',')
12093     {
12094       errno = 0;
12095       *remote_errno = strtol (p + 1, &p2, 16);
12096       if (errno != 0 || p + 1 == p2)
12097 	return -1;
12098       p = p2;
12099     }
12100 
12101   /* Check for ";attachment".  If there is no attachment, the
12102      packet should end here.  */
12103   if (*p == ';')
12104     {
12105       *attachment = p + 1;
12106       return 0;
12107     }
12108   else if (*p == '\0')
12109     return 0;
12110   else
12111     return -1;
12112 }
12113 
12114 /* Send a prepared I/O packet to the target and read its response.
12115    The prepared packet is in the global RS->BUF before this function
12116    is called, and the answer is there when we return.
12117 
12118    COMMAND_BYTES is the length of the request to send, which may include
12119    binary data.  WHICH_PACKET is the packet configuration to check
12120    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
12121    is set to the error number and -1 is returned.  Otherwise the value
12122    returned by the function is returned.
12123 
12124    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
12125    attachment is expected; an error will be reported if there's a
12126    mismatch.  If one is found, *ATTACHMENT will be set to point into
12127    the packet buffer and *ATTACHMENT_LEN will be set to the
12128    attachment's length.  */
12129 
12130 int
12131 remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
12132 					   int *remote_errno, const char **attachment,
12133 					   int *attachment_len)
12134 {
12135   struct remote_state *rs = get_remote_state ();
12136   int ret, bytes_read;
12137   const char *attachment_tmp;
12138 
12139   if (packet_support (which_packet) == PACKET_DISABLE)
12140     {
12141       *remote_errno = FILEIO_ENOSYS;
12142       return -1;
12143     }
12144 
12145   putpkt_binary (rs->buf.data (), command_bytes);
12146   bytes_read = getpkt_sane (&rs->buf, 0);
12147 
12148   /* If it timed out, something is wrong.  Don't try to parse the
12149      buffer.  */
12150   if (bytes_read < 0)
12151     {
12152       *remote_errno = FILEIO_EINVAL;
12153       return -1;
12154     }
12155 
12156   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
12157     {
12158     case PACKET_ERROR:
12159       *remote_errno = FILEIO_EINVAL;
12160       return -1;
12161     case PACKET_UNKNOWN:
12162       *remote_errno = FILEIO_ENOSYS;
12163       return -1;
12164     case PACKET_OK:
12165       break;
12166     }
12167 
12168   if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
12169 				  &attachment_tmp))
12170     {
12171       *remote_errno = FILEIO_EINVAL;
12172       return -1;
12173     }
12174 
12175   /* Make sure we saw an attachment if and only if we expected one.  */
12176   if ((attachment_tmp == NULL && attachment != NULL)
12177       || (attachment_tmp != NULL && attachment == NULL))
12178     {
12179       *remote_errno = FILEIO_EINVAL;
12180       return -1;
12181     }
12182 
12183   /* If an attachment was found, it must point into the packet buffer;
12184      work out how many bytes there were.  */
12185   if (attachment_tmp != NULL)
12186     {
12187       *attachment = attachment_tmp;
12188       *attachment_len = bytes_read - (*attachment - rs->buf.data ());
12189     }
12190 
12191   return ret;
12192 }
12193 
12194 /* See declaration.h.  */
12195 
12196 void
12197 readahead_cache::invalidate ()
12198 {
12199   this->fd = -1;
12200 }
12201 
12202 /* See declaration.h.  */
12203 
12204 void
12205 readahead_cache::invalidate_fd (int fd)
12206 {
12207   if (this->fd == fd)
12208     this->fd = -1;
12209 }
12210 
12211 /* Set the filesystem remote_hostio functions that take FILENAME
12212    arguments will use.  Return 0 on success, or -1 if an error
12213    occurs (and set *REMOTE_ERRNO).  */
12214 
12215 int
12216 remote_target::remote_hostio_set_filesystem (struct inferior *inf,
12217 					     int *remote_errno)
12218 {
12219   struct remote_state *rs = get_remote_state ();
12220   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
12221   char *p = rs->buf.data ();
12222   int left = get_remote_packet_size () - 1;
12223   char arg[9];
12224   int ret;
12225 
12226   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12227     return 0;
12228 
12229   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
12230     return 0;
12231 
12232   remote_buffer_add_string (&p, &left, "vFile:setfs:");
12233 
12234   xsnprintf (arg, sizeof (arg), "%x", required_pid);
12235   remote_buffer_add_string (&p, &left, arg);
12236 
12237   ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
12238 				    remote_errno, NULL, NULL);
12239 
12240   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12241     return 0;
12242 
12243   if (ret == 0)
12244     rs->fs_pid = required_pid;
12245 
12246   return ret;
12247 }
12248 
12249 /* Implementation of to_fileio_open.  */
12250 
12251 int
12252 remote_target::remote_hostio_open (inferior *inf, const char *filename,
12253 				   int flags, int mode, int warn_if_slow,
12254 				   int *remote_errno)
12255 {
12256   struct remote_state *rs = get_remote_state ();
12257   char *p = rs->buf.data ();
12258   int left = get_remote_packet_size () - 1;
12259 
12260   if (warn_if_slow)
12261     {
12262       static int warning_issued = 0;
12263 
12264       printf_unfiltered (_("Reading %s from remote target...\n"),
12265 			 filename);
12266 
12267       if (!warning_issued)
12268 	{
12269 	  warning (_("File transfers from remote targets can be slow."
12270 		     " Use \"set sysroot\" to access files locally"
12271 		     " instead."));
12272 	  warning_issued = 1;
12273 	}
12274     }
12275 
12276   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12277     return -1;
12278 
12279   remote_buffer_add_string (&p, &left, "vFile:open:");
12280 
12281   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12282 			   strlen (filename));
12283   remote_buffer_add_string (&p, &left, ",");
12284 
12285   remote_buffer_add_int (&p, &left, flags);
12286   remote_buffer_add_string (&p, &left, ",");
12287 
12288   remote_buffer_add_int (&p, &left, mode);
12289 
12290   return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
12291 				     remote_errno, NULL, NULL);
12292 }
12293 
12294 int
12295 remote_target::fileio_open (struct inferior *inf, const char *filename,
12296 			    int flags, int mode, int warn_if_slow,
12297 			    int *remote_errno)
12298 {
12299   return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
12300 			     remote_errno);
12301 }
12302 
12303 /* Implementation of to_fileio_pwrite.  */
12304 
12305 int
12306 remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
12307 				     ULONGEST offset, int *remote_errno)
12308 {
12309   struct remote_state *rs = get_remote_state ();
12310   char *p = rs->buf.data ();
12311   int left = get_remote_packet_size ();
12312   int out_len;
12313 
12314   rs->readahead_cache.invalidate_fd (fd);
12315 
12316   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
12317 
12318   remote_buffer_add_int (&p, &left, fd);
12319   remote_buffer_add_string (&p, &left, ",");
12320 
12321   remote_buffer_add_int (&p, &left, offset);
12322   remote_buffer_add_string (&p, &left, ",");
12323 
12324   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
12325 			     (get_remote_packet_size ()
12326 			      - (p - rs->buf.data ())));
12327 
12328   return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
12329 				     remote_errno, NULL, NULL);
12330 }
12331 
12332 int
12333 remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12334 			      ULONGEST offset, int *remote_errno)
12335 {
12336   return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
12337 }
12338 
12339 /* Helper for the implementation of to_fileio_pread.  Read the file
12340    from the remote side with vFile:pread.  */
12341 
12342 int
12343 remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12344 					  ULONGEST offset, int *remote_errno)
12345 {
12346   struct remote_state *rs = get_remote_state ();
12347   char *p = rs->buf.data ();
12348   const char *attachment;
12349   int left = get_remote_packet_size ();
12350   int ret, attachment_len;
12351   int read_len;
12352 
12353   remote_buffer_add_string (&p, &left, "vFile:pread:");
12354 
12355   remote_buffer_add_int (&p, &left, fd);
12356   remote_buffer_add_string (&p, &left, ",");
12357 
12358   remote_buffer_add_int (&p, &left, len);
12359   remote_buffer_add_string (&p, &left, ",");
12360 
12361   remote_buffer_add_int (&p, &left, offset);
12362 
12363   ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
12364 				    remote_errno, &attachment,
12365 				    &attachment_len);
12366 
12367   if (ret < 0)
12368     return ret;
12369 
12370   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12371 				    read_buf, len);
12372   if (read_len != ret)
12373     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12374 
12375   return ret;
12376 }
12377 
12378 /* See declaration.h.  */
12379 
12380 int
12381 readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12382 			ULONGEST offset)
12383 {
12384   if (this->fd == fd
12385       && this->offset <= offset
12386       && offset < this->offset + this->bufsize)
12387     {
12388       ULONGEST max = this->offset + this->bufsize;
12389 
12390       if (offset + len > max)
12391 	len = max - offset;
12392 
12393       memcpy (read_buf, this->buf + offset - this->offset, len);
12394       return len;
12395     }
12396 
12397   return 0;
12398 }
12399 
12400 /* Implementation of to_fileio_pread.  */
12401 
12402 int
12403 remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12404 				    ULONGEST offset, int *remote_errno)
12405 {
12406   int ret;
12407   struct remote_state *rs = get_remote_state ();
12408   readahead_cache *cache = &rs->readahead_cache;
12409 
12410   ret = cache->pread (fd, read_buf, len, offset);
12411   if (ret > 0)
12412     {
12413       cache->hit_count++;
12414 
12415       remote_debug_printf ("readahead cache hit %s",
12416 			   pulongest (cache->hit_count));
12417       return ret;
12418     }
12419 
12420   cache->miss_count++;
12421 
12422   remote_debug_printf ("readahead cache miss %s",
12423 		       pulongest (cache->miss_count));
12424 
12425   cache->fd = fd;
12426   cache->offset = offset;
12427   cache->bufsize = get_remote_packet_size ();
12428   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
12429 
12430   ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
12431 				   cache->offset, remote_errno);
12432   if (ret <= 0)
12433     {
12434       cache->invalidate_fd (fd);
12435       return ret;
12436     }
12437 
12438   cache->bufsize = ret;
12439   return cache->pread (fd, read_buf, len, offset);
12440 }
12441 
12442 int
12443 remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12444 			     ULONGEST offset, int *remote_errno)
12445 {
12446   return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
12447 }
12448 
12449 /* Implementation of to_fileio_close.  */
12450 
12451 int
12452 remote_target::remote_hostio_close (int fd, int *remote_errno)
12453 {
12454   struct remote_state *rs = get_remote_state ();
12455   char *p = rs->buf.data ();
12456   int left = get_remote_packet_size () - 1;
12457 
12458   rs->readahead_cache.invalidate_fd (fd);
12459 
12460   remote_buffer_add_string (&p, &left, "vFile:close:");
12461 
12462   remote_buffer_add_int (&p, &left, fd);
12463 
12464   return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
12465 				     remote_errno, NULL, NULL);
12466 }
12467 
12468 int
12469 remote_target::fileio_close (int fd, int *remote_errno)
12470 {
12471   return remote_hostio_close (fd, remote_errno);
12472 }
12473 
12474 /* Implementation of to_fileio_unlink.  */
12475 
12476 int
12477 remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12478 				     int *remote_errno)
12479 {
12480   struct remote_state *rs = get_remote_state ();
12481   char *p = rs->buf.data ();
12482   int left = get_remote_packet_size () - 1;
12483 
12484   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12485     return -1;
12486 
12487   remote_buffer_add_string (&p, &left, "vFile:unlink:");
12488 
12489   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12490 			   strlen (filename));
12491 
12492   return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
12493 				     remote_errno, NULL, NULL);
12494 }
12495 
12496 int
12497 remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12498 			      int *remote_errno)
12499 {
12500   return remote_hostio_unlink (inf, filename, remote_errno);
12501 }
12502 
12503 /* Implementation of to_fileio_readlink.  */
12504 
12505 gdb::optional<std::string>
12506 remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12507 				int *remote_errno)
12508 {
12509   struct remote_state *rs = get_remote_state ();
12510   char *p = rs->buf.data ();
12511   const char *attachment;
12512   int left = get_remote_packet_size ();
12513   int len, attachment_len;
12514   int read_len;
12515 
12516   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12517     return {};
12518 
12519   remote_buffer_add_string (&p, &left, "vFile:readlink:");
12520 
12521   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12522 			   strlen (filename));
12523 
12524   len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
12525 				    remote_errno, &attachment,
12526 				    &attachment_len);
12527 
12528   if (len < 0)
12529     return {};
12530 
12531   std::string ret (len, '\0');
12532 
12533   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12534 				    (gdb_byte *) &ret[0], len);
12535   if (read_len != len)
12536     error (_("Readlink returned %d, but %d bytes."), len, read_len);
12537 
12538   return ret;
12539 }
12540 
12541 /* Implementation of to_fileio_fstat.  */
12542 
12543 int
12544 remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
12545 {
12546   struct remote_state *rs = get_remote_state ();
12547   char *p = rs->buf.data ();
12548   int left = get_remote_packet_size ();
12549   int attachment_len, ret;
12550   const char *attachment;
12551   struct fio_stat fst;
12552   int read_len;
12553 
12554   remote_buffer_add_string (&p, &left, "vFile:fstat:");
12555 
12556   remote_buffer_add_int (&p, &left, fd);
12557 
12558   ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
12559 				    remote_errno, &attachment,
12560 				    &attachment_len);
12561   if (ret < 0)
12562     {
12563       if (*remote_errno != FILEIO_ENOSYS)
12564 	return ret;
12565 
12566       /* Strictly we should return -1, ENOSYS here, but when
12567 	 "set sysroot remote:" was implemented in August 2008
12568 	 BFD's need for a stat function was sidestepped with
12569 	 this hack.  This was not remedied until March 2015
12570 	 so we retain the previous behavior to avoid breaking
12571 	 compatibility.
12572 
12573 	 Note that the memset is a March 2015 addition; older
12574 	 GDBs set st_size *and nothing else* so the structure
12575 	 would have garbage in all other fields.  This might
12576 	 break something but retaining the previous behavior
12577 	 here would be just too wrong.  */
12578 
12579       memset (st, 0, sizeof (struct stat));
12580       st->st_size = INT_MAX;
12581       return 0;
12582     }
12583 
12584   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12585 				    (gdb_byte *) &fst, sizeof (fst));
12586 
12587   if (read_len != ret)
12588     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12589 
12590   if (read_len != sizeof (fst))
12591     error (_("vFile:fstat returned %d bytes, but expecting %d."),
12592 	   read_len, (int) sizeof (fst));
12593 
12594   remote_fileio_to_host_stat (&fst, st);
12595 
12596   return 0;
12597 }
12598 
12599 /* Implementation of to_filesystem_is_local.  */
12600 
12601 bool
12602 remote_target::filesystem_is_local ()
12603 {
12604   /* Valgrind GDB presents itself as a remote target but works
12605      on the local filesystem: it does not implement remote get
12606      and users are not expected to set a sysroot.  To handle
12607      this case we treat the remote filesystem as local if the
12608      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12609      does not support vFile:open.  */
12610   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
12611     {
12612       enum packet_support ps = packet_support (PACKET_vFile_open);
12613 
12614       if (ps == PACKET_SUPPORT_UNKNOWN)
12615 	{
12616 	  int fd, remote_errno;
12617 
12618 	  /* Try opening a file to probe support.  The supplied
12619 	     filename is irrelevant, we only care about whether
12620 	     the stub recognizes the packet or not.  */
12621 	  fd = remote_hostio_open (NULL, "just probing",
12622 				   FILEIO_O_RDONLY, 0700, 0,
12623 				   &remote_errno);
12624 
12625 	  if (fd >= 0)
12626 	    remote_hostio_close (fd, &remote_errno);
12627 
12628 	  ps = packet_support (PACKET_vFile_open);
12629 	}
12630 
12631       if (ps == PACKET_DISABLE)
12632 	{
12633 	  static int warning_issued = 0;
12634 
12635 	  if (!warning_issued)
12636 	    {
12637 	      warning (_("remote target does not support file"
12638 			 " transfer, attempting to access files"
12639 			 " from local filesystem."));
12640 	      warning_issued = 1;
12641 	    }
12642 
12643 	  return true;
12644 	}
12645     }
12646 
12647   return false;
12648 }
12649 
12650 static int
12651 remote_fileio_errno_to_host (int errnum)
12652 {
12653   switch (errnum)
12654     {
12655       case FILEIO_EPERM:
12656 	return EPERM;
12657       case FILEIO_ENOENT:
12658 	return ENOENT;
12659       case FILEIO_EINTR:
12660 	return EINTR;
12661       case FILEIO_EIO:
12662 	return EIO;
12663       case FILEIO_EBADF:
12664 	return EBADF;
12665       case FILEIO_EACCES:
12666 	return EACCES;
12667       case FILEIO_EFAULT:
12668 	return EFAULT;
12669       case FILEIO_EBUSY:
12670 	return EBUSY;
12671       case FILEIO_EEXIST:
12672 	return EEXIST;
12673       case FILEIO_ENODEV:
12674 	return ENODEV;
12675       case FILEIO_ENOTDIR:
12676 	return ENOTDIR;
12677       case FILEIO_EISDIR:
12678 	return EISDIR;
12679       case FILEIO_EINVAL:
12680 	return EINVAL;
12681       case FILEIO_ENFILE:
12682 	return ENFILE;
12683       case FILEIO_EMFILE:
12684 	return EMFILE;
12685       case FILEIO_EFBIG:
12686 	return EFBIG;
12687       case FILEIO_ENOSPC:
12688 	return ENOSPC;
12689       case FILEIO_ESPIPE:
12690 	return ESPIPE;
12691       case FILEIO_EROFS:
12692 	return EROFS;
12693       case FILEIO_ENOSYS:
12694 	return ENOSYS;
12695       case FILEIO_ENAMETOOLONG:
12696 	return ENAMETOOLONG;
12697     }
12698   return -1;
12699 }
12700 
12701 static char *
12702 remote_hostio_error (int errnum)
12703 {
12704   int host_error = remote_fileio_errno_to_host (errnum);
12705 
12706   if (host_error == -1)
12707     error (_("Unknown remote I/O error %d"), errnum);
12708   else
12709     error (_("Remote I/O error: %s"), safe_strerror (host_error));
12710 }
12711 
12712 /* A RAII wrapper around a remote file descriptor.  */
12713 
12714 class scoped_remote_fd
12715 {
12716 public:
12717   scoped_remote_fd (remote_target *remote, int fd)
12718     : m_remote (remote), m_fd (fd)
12719   {
12720   }
12721 
12722   ~scoped_remote_fd ()
12723   {
12724     if (m_fd != -1)
12725       {
12726 	try
12727 	  {
12728 	    int remote_errno;
12729 	    m_remote->remote_hostio_close (m_fd, &remote_errno);
12730 	  }
12731 	catch (...)
12732 	  {
12733 	    /* Swallow exception before it escapes the dtor.  If
12734 	       something goes wrong, likely the connection is gone,
12735 	       and there's nothing else that can be done.  */
12736 	  }
12737       }
12738   }
12739 
12740   DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12741 
12742   /* Release ownership of the file descriptor, and return it.  */
12743   ATTRIBUTE_UNUSED_RESULT int release () noexcept
12744   {
12745     int fd = m_fd;
12746     m_fd = -1;
12747     return fd;
12748   }
12749 
12750   /* Return the owned file descriptor.  */
12751   int get () const noexcept
12752   {
12753     return m_fd;
12754   }
12755 
12756 private:
12757   /* The remote target.  */
12758   remote_target *m_remote;
12759 
12760   /* The owned remote I/O file descriptor.  */
12761   int m_fd;
12762 };
12763 
12764 void
12765 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12766 {
12767   remote_target *remote = get_current_remote_target ();
12768 
12769   if (remote == nullptr)
12770     error (_("command can only be used with remote target"));
12771 
12772   remote->remote_file_put (local_file, remote_file, from_tty);
12773 }
12774 
12775 void
12776 remote_target::remote_file_put (const char *local_file, const char *remote_file,
12777 				int from_tty)
12778 {
12779   int retcode, remote_errno, bytes, io_size;
12780   int bytes_in_buffer;
12781   int saw_eof;
12782   ULONGEST offset;
12783 
12784   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12785   if (file == NULL)
12786     perror_with_name (local_file);
12787 
12788   scoped_remote_fd fd
12789     (this, remote_hostio_open (NULL,
12790 			       remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12791 					     | FILEIO_O_TRUNC),
12792 			       0700, 0, &remote_errno));
12793   if (fd.get () == -1)
12794     remote_hostio_error (remote_errno);
12795 
12796   /* Send up to this many bytes at once.  They won't all fit in the
12797      remote packet limit, so we'll transfer slightly fewer.  */
12798   io_size = get_remote_packet_size ();
12799   gdb::byte_vector buffer (io_size);
12800 
12801   bytes_in_buffer = 0;
12802   saw_eof = 0;
12803   offset = 0;
12804   while (bytes_in_buffer || !saw_eof)
12805     {
12806       if (!saw_eof)
12807 	{
12808 	  bytes = fread (buffer.data () + bytes_in_buffer, 1,
12809 			 io_size - bytes_in_buffer,
12810 			 file.get ());
12811 	  if (bytes == 0)
12812 	    {
12813 	      if (ferror (file.get ()))
12814 		error (_("Error reading %s."), local_file);
12815 	      else
12816 		{
12817 		  /* EOF.  Unless there is something still in the
12818 		     buffer from the last iteration, we are done.  */
12819 		  saw_eof = 1;
12820 		  if (bytes_in_buffer == 0)
12821 		    break;
12822 		}
12823 	    }
12824 	}
12825       else
12826 	bytes = 0;
12827 
12828       bytes += bytes_in_buffer;
12829       bytes_in_buffer = 0;
12830 
12831       retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
12832 				      offset, &remote_errno);
12833 
12834       if (retcode < 0)
12835 	remote_hostio_error (remote_errno);
12836       else if (retcode == 0)
12837 	error (_("Remote write of %d bytes returned 0!"), bytes);
12838       else if (retcode < bytes)
12839 	{
12840 	  /* Short write.  Save the rest of the read data for the next
12841 	     write.  */
12842 	  bytes_in_buffer = bytes - retcode;
12843 	  memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
12844 	}
12845 
12846       offset += retcode;
12847     }
12848 
12849   if (remote_hostio_close (fd.release (), &remote_errno))
12850     remote_hostio_error (remote_errno);
12851 
12852   if (from_tty)
12853     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12854 }
12855 
12856 void
12857 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12858 {
12859   remote_target *remote = get_current_remote_target ();
12860 
12861   if (remote == nullptr)
12862     error (_("command can only be used with remote target"));
12863 
12864   remote->remote_file_get (remote_file, local_file, from_tty);
12865 }
12866 
12867 void
12868 remote_target::remote_file_get (const char *remote_file, const char *local_file,
12869 				int from_tty)
12870 {
12871   int remote_errno, bytes, io_size;
12872   ULONGEST offset;
12873 
12874   scoped_remote_fd fd
12875     (this, remote_hostio_open (NULL,
12876 			       remote_file, FILEIO_O_RDONLY, 0, 0,
12877 			       &remote_errno));
12878   if (fd.get () == -1)
12879     remote_hostio_error (remote_errno);
12880 
12881   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12882   if (file == NULL)
12883     perror_with_name (local_file);
12884 
12885   /* Send up to this many bytes at once.  They won't all fit in the
12886      remote packet limit, so we'll transfer slightly fewer.  */
12887   io_size = get_remote_packet_size ();
12888   gdb::byte_vector buffer (io_size);
12889 
12890   offset = 0;
12891   while (1)
12892     {
12893       bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
12894 				   &remote_errno);
12895       if (bytes == 0)
12896 	/* Success, but no bytes, means end-of-file.  */
12897 	break;
12898       if (bytes == -1)
12899 	remote_hostio_error (remote_errno);
12900 
12901       offset += bytes;
12902 
12903       bytes = fwrite (buffer.data (), 1, bytes, file.get ());
12904       if (bytes == 0)
12905 	perror_with_name (local_file);
12906     }
12907 
12908   if (remote_hostio_close (fd.release (), &remote_errno))
12909     remote_hostio_error (remote_errno);
12910 
12911   if (from_tty)
12912     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12913 }
12914 
12915 void
12916 remote_file_delete (const char *remote_file, int from_tty)
12917 {
12918   remote_target *remote = get_current_remote_target ();
12919 
12920   if (remote == nullptr)
12921     error (_("command can only be used with remote target"));
12922 
12923   remote->remote_file_delete (remote_file, from_tty);
12924 }
12925 
12926 void
12927 remote_target::remote_file_delete (const char *remote_file, int from_tty)
12928 {
12929   int retcode, remote_errno;
12930 
12931   retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
12932   if (retcode == -1)
12933     remote_hostio_error (remote_errno);
12934 
12935   if (from_tty)
12936     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12937 }
12938 
12939 static void
12940 remote_put_command (const char *args, int from_tty)
12941 {
12942   if (args == NULL)
12943     error_no_arg (_("file to put"));
12944 
12945   gdb_argv argv (args);
12946   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12947     error (_("Invalid parameters to remote put"));
12948 
12949   remote_file_put (argv[0], argv[1], from_tty);
12950 }
12951 
12952 static void
12953 remote_get_command (const char *args, int from_tty)
12954 {
12955   if (args == NULL)
12956     error_no_arg (_("file to get"));
12957 
12958   gdb_argv argv (args);
12959   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12960     error (_("Invalid parameters to remote get"));
12961 
12962   remote_file_get (argv[0], argv[1], from_tty);
12963 }
12964 
12965 static void
12966 remote_delete_command (const char *args, int from_tty)
12967 {
12968   if (args == NULL)
12969     error_no_arg (_("file to delete"));
12970 
12971   gdb_argv argv (args);
12972   if (argv[0] == NULL || argv[1] != NULL)
12973     error (_("Invalid parameters to remote delete"));
12974 
12975   remote_file_delete (argv[0], from_tty);
12976 }
12977 
12978 bool
12979 remote_target::can_execute_reverse ()
12980 {
12981   if (packet_support (PACKET_bs) == PACKET_ENABLE
12982       || packet_support (PACKET_bc) == PACKET_ENABLE)
12983     return true;
12984   else
12985     return false;
12986 }
12987 
12988 bool
12989 remote_target::supports_non_stop ()
12990 {
12991   return true;
12992 }
12993 
12994 bool
12995 remote_target::supports_disable_randomization ()
12996 {
12997   /* Only supported in extended mode.  */
12998   return false;
12999 }
13000 
13001 bool
13002 remote_target::supports_multi_process ()
13003 {
13004   struct remote_state *rs = get_remote_state ();
13005 
13006   return remote_multi_process_p (rs);
13007 }
13008 
13009 static int
13010 remote_supports_cond_tracepoints ()
13011 {
13012   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
13013 }
13014 
13015 bool
13016 remote_target::supports_evaluation_of_breakpoint_conditions ()
13017 {
13018   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
13019 }
13020 
13021 static int
13022 remote_supports_fast_tracepoints ()
13023 {
13024   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
13025 }
13026 
13027 static int
13028 remote_supports_static_tracepoints ()
13029 {
13030   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
13031 }
13032 
13033 static int
13034 remote_supports_install_in_trace ()
13035 {
13036   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
13037 }
13038 
13039 bool
13040 remote_target::supports_enable_disable_tracepoint ()
13041 {
13042   return (packet_support (PACKET_EnableDisableTracepoints_feature)
13043 	  == PACKET_ENABLE);
13044 }
13045 
13046 bool
13047 remote_target::supports_string_tracing ()
13048 {
13049   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
13050 }
13051 
13052 bool
13053 remote_target::can_run_breakpoint_commands ()
13054 {
13055   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
13056 }
13057 
13058 void
13059 remote_target::trace_init ()
13060 {
13061   struct remote_state *rs = get_remote_state ();
13062 
13063   putpkt ("QTinit");
13064   remote_get_noisy_reply ();
13065   if (strcmp (rs->buf.data (), "OK") != 0)
13066     error (_("Target does not support this command."));
13067 }
13068 
13069 /* Recursive routine to walk through command list including loops, and
13070    download packets for each command.  */
13071 
13072 void
13073 remote_target::remote_download_command_source (int num, ULONGEST addr,
13074 					       struct command_line *cmds)
13075 {
13076   struct remote_state *rs = get_remote_state ();
13077   struct command_line *cmd;
13078 
13079   for (cmd = cmds; cmd; cmd = cmd->next)
13080     {
13081       QUIT;	/* Allow user to bail out with ^C.  */
13082       strcpy (rs->buf.data (), "QTDPsrc:");
13083       encode_source_string (num, addr, "cmd", cmd->line,
13084 			    rs->buf.data () + strlen (rs->buf.data ()),
13085 			    rs->buf.size () - strlen (rs->buf.data ()));
13086       putpkt (rs->buf);
13087       remote_get_noisy_reply ();
13088       if (strcmp (rs->buf.data (), "OK"))
13089 	warning (_("Target does not support source download."));
13090 
13091       if (cmd->control_type == while_control
13092 	  || cmd->control_type == while_stepping_control)
13093 	{
13094 	  remote_download_command_source (num, addr, cmd->body_list_0.get ());
13095 
13096 	  QUIT;	/* Allow user to bail out with ^C.  */
13097 	  strcpy (rs->buf.data (), "QTDPsrc:");
13098 	  encode_source_string (num, addr, "cmd", "end",
13099 				rs->buf.data () + strlen (rs->buf.data ()),
13100 				rs->buf.size () - strlen (rs->buf.data ()));
13101 	  putpkt (rs->buf);
13102 	  remote_get_noisy_reply ();
13103 	  if (strcmp (rs->buf.data (), "OK"))
13104 	    warning (_("Target does not support source download."));
13105 	}
13106     }
13107 }
13108 
13109 void
13110 remote_target::download_tracepoint (struct bp_location *loc)
13111 {
13112   CORE_ADDR tpaddr;
13113   char addrbuf[40];
13114   std::vector<std::string> tdp_actions;
13115   std::vector<std::string> stepping_actions;
13116   char *pkt;
13117   struct breakpoint *b = loc->owner;
13118   struct tracepoint *t = (struct tracepoint *) b;
13119   struct remote_state *rs = get_remote_state ();
13120   int ret;
13121   const char *err_msg = _("Tracepoint packet too large for target.");
13122   size_t size_left;
13123 
13124   /* We use a buffer other than rs->buf because we'll build strings
13125      across multiple statements, and other statements in between could
13126      modify rs->buf.  */
13127   gdb::char_vector buf (get_remote_packet_size ());
13128 
13129   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
13130 
13131   tpaddr = loc->address;
13132   strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR)));
13133   ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
13134 		  b->number, addrbuf, /* address */
13135 		  (b->enable_state == bp_enabled ? 'E' : 'D'),
13136 		  t->step_count, t->pass_count);
13137 
13138   if (ret < 0 || ret >= buf.size ())
13139     error ("%s", err_msg);
13140 
13141   /* Fast tracepoints are mostly handled by the target, but we can
13142      tell the target how big of an instruction block should be moved
13143      around.  */
13144   if (b->type == bp_fast_tracepoint)
13145     {
13146       /* Only test for support at download time; we may not know
13147 	 target capabilities at definition time.  */
13148       if (remote_supports_fast_tracepoints ())
13149 	{
13150 	  if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
13151 						NULL))
13152 	    {
13153 	      size_left = buf.size () - strlen (buf.data ());
13154 	      ret = snprintf (buf.data () + strlen (buf.data ()),
13155 			      size_left, ":F%x",
13156 			      gdb_insn_length (loc->gdbarch, tpaddr));
13157 
13158 	      if (ret < 0 || ret >= size_left)
13159 		error ("%s", err_msg);
13160 	    }
13161 	  else
13162 	    /* If it passed validation at definition but fails now,
13163 	       something is very wrong.  */
13164 	    internal_error (__FILE__, __LINE__,
13165 			    _("Fast tracepoint not "
13166 			      "valid during download"));
13167 	}
13168       else
13169 	/* Fast tracepoints are functionally identical to regular
13170 	   tracepoints, so don't take lack of support as a reason to
13171 	   give up on the trace run.  */
13172 	warning (_("Target does not support fast tracepoints, "
13173 		   "downloading %d as regular tracepoint"), b->number);
13174     }
13175   else if (b->type == bp_static_tracepoint)
13176     {
13177       /* Only test for support at download time; we may not know
13178 	 target capabilities at definition time.  */
13179       if (remote_supports_static_tracepoints ())
13180 	{
13181 	  struct static_tracepoint_marker marker;
13182 
13183 	  if (target_static_tracepoint_marker_at (tpaddr, &marker))
13184 	    {
13185 	      size_left = buf.size () - strlen (buf.data ());
13186 	      ret = snprintf (buf.data () + strlen (buf.data ()),
13187 			      size_left, ":S");
13188 
13189 	      if (ret < 0 || ret >= size_left)
13190 		error ("%s", err_msg);
13191 	    }
13192 	  else
13193 	    error (_("Static tracepoint not valid during download"));
13194 	}
13195       else
13196 	/* Fast tracepoints are functionally identical to regular
13197 	   tracepoints, so don't take lack of support as a reason
13198 	   to give up on the trace run.  */
13199 	error (_("Target does not support static tracepoints"));
13200     }
13201   /* If the tracepoint has a conditional, make it into an agent
13202      expression and append to the definition.  */
13203   if (loc->cond)
13204     {
13205       /* Only test support at download time, we may not know target
13206 	 capabilities at definition time.  */
13207       if (remote_supports_cond_tracepoints ())
13208 	{
13209 	  agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
13210 						   loc->cond.get ());
13211 
13212 	  size_left = buf.size () - strlen (buf.data ());
13213 
13214 	  ret = snprintf (buf.data () + strlen (buf.data ()),
13215 			  size_left, ":X%x,", aexpr->len);
13216 
13217 	  if (ret < 0 || ret >= size_left)
13218 	    error ("%s", err_msg);
13219 
13220 	  size_left = buf.size () - strlen (buf.data ());
13221 
13222 	  /* Two bytes to encode each aexpr byte, plus the terminating
13223 	     null byte.  */
13224 	  if (aexpr->len * 2 + 1 > size_left)
13225 	    error ("%s", err_msg);
13226 
13227 	  pkt = buf.data () + strlen (buf.data ());
13228 
13229 	  for (int ndx = 0; ndx < aexpr->len; ++ndx)
13230 	    pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
13231 	  *pkt = '\0';
13232 	}
13233       else
13234 	warning (_("Target does not support conditional tracepoints, "
13235 		   "ignoring tp %d cond"), b->number);
13236     }
13237 
13238   if (b->commands || *default_collect)
13239     {
13240       size_left = buf.size () - strlen (buf.data ());
13241 
13242       ret = snprintf (buf.data () + strlen (buf.data ()),
13243 		      size_left, "-");
13244 
13245       if (ret < 0 || ret >= size_left)
13246 	error ("%s", err_msg);
13247     }
13248 
13249   putpkt (buf.data ());
13250   remote_get_noisy_reply ();
13251   if (strcmp (rs->buf.data (), "OK"))
13252     error (_("Target does not support tracepoints."));
13253 
13254   /* do_single_steps (t); */
13255   for (auto action_it = tdp_actions.begin ();
13256        action_it != tdp_actions.end (); action_it++)
13257     {
13258       QUIT;	/* Allow user to bail out with ^C.  */
13259 
13260       bool has_more = ((action_it + 1) != tdp_actions.end ()
13261 		       || !stepping_actions.empty ());
13262 
13263       ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
13264 		      b->number, addrbuf, /* address */
13265 		      action_it->c_str (),
13266 		      has_more ? '-' : 0);
13267 
13268       if (ret < 0 || ret >= buf.size ())
13269 	error ("%s", err_msg);
13270 
13271       putpkt (buf.data ());
13272       remote_get_noisy_reply ();
13273       if (strcmp (rs->buf.data (), "OK"))
13274 	error (_("Error on target while setting tracepoints."));
13275     }
13276 
13277   for (auto action_it = stepping_actions.begin ();
13278        action_it != stepping_actions.end (); action_it++)
13279     {
13280       QUIT;	/* Allow user to bail out with ^C.  */
13281 
13282       bool is_first = action_it == stepping_actions.begin ();
13283       bool has_more = (action_it + 1) != stepping_actions.end ();
13284 
13285       ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
13286 		      b->number, addrbuf, /* address */
13287 		      is_first ? "S" : "",
13288 		      action_it->c_str (),
13289 		      has_more ? "-" : "");
13290 
13291       if (ret < 0 || ret >= buf.size ())
13292 	error ("%s", err_msg);
13293 
13294       putpkt (buf.data ());
13295       remote_get_noisy_reply ();
13296       if (strcmp (rs->buf.data (), "OK"))
13297 	error (_("Error on target while setting tracepoints."));
13298     }
13299 
13300   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
13301     {
13302       if (b->location != NULL)
13303 	{
13304 	  ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13305 
13306 	  if (ret < 0 || ret >= buf.size ())
13307 	    error ("%s", err_msg);
13308 
13309 	  encode_source_string (b->number, loc->address, "at",
13310 				event_location_to_string (b->location.get ()),
13311 				buf.data () + strlen (buf.data ()),
13312 				buf.size () - strlen (buf.data ()));
13313 	  putpkt (buf.data ());
13314 	  remote_get_noisy_reply ();
13315 	  if (strcmp (rs->buf.data (), "OK"))
13316 	    warning (_("Target does not support source download."));
13317 	}
13318       if (b->cond_string)
13319 	{
13320 	  ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13321 
13322 	  if (ret < 0 || ret >= buf.size ())
13323 	    error ("%s", err_msg);
13324 
13325 	  encode_source_string (b->number, loc->address,
13326 				"cond", b->cond_string,
13327 				buf.data () + strlen (buf.data ()),
13328 				buf.size () - strlen (buf.data ()));
13329 	  putpkt (buf.data ());
13330 	  remote_get_noisy_reply ();
13331 	  if (strcmp (rs->buf.data (), "OK"))
13332 	    warning (_("Target does not support source download."));
13333 	}
13334       remote_download_command_source (b->number, loc->address,
13335 				      breakpoint_commands (b));
13336     }
13337 }
13338 
13339 bool
13340 remote_target::can_download_tracepoint ()
13341 {
13342   struct remote_state *rs = get_remote_state ();
13343   struct trace_status *ts;
13344   int status;
13345 
13346   /* Don't try to install tracepoints until we've relocated our
13347      symbols, and fetched and merged the target's tracepoint list with
13348      ours.  */
13349   if (rs->starting_up)
13350     return false;
13351 
13352   ts = current_trace_status ();
13353   status = get_trace_status (ts);
13354 
13355   if (status == -1 || !ts->running_known || !ts->running)
13356     return false;
13357 
13358   /* If we are in a tracing experiment, but remote stub doesn't support
13359      installing tracepoint in trace, we have to return.  */
13360   if (!remote_supports_install_in_trace ())
13361     return false;
13362 
13363   return true;
13364 }
13365 
13366 
13367 void
13368 remote_target::download_trace_state_variable (const trace_state_variable &tsv)
13369 {
13370   struct remote_state *rs = get_remote_state ();
13371   char *p;
13372 
13373   xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
13374 	     tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
13375 	     tsv.builtin);
13376   p = rs->buf.data () + strlen (rs->buf.data ());
13377   if ((p - rs->buf.data ()) + tsv.name.length () * 2
13378       >= get_remote_packet_size ())
13379     error (_("Trace state variable name too long for tsv definition packet"));
13380   p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
13381   *p++ = '\0';
13382   putpkt (rs->buf);
13383   remote_get_noisy_reply ();
13384   if (rs->buf[0] == '\0')
13385     error (_("Target does not support this command."));
13386   if (strcmp (rs->buf.data (), "OK") != 0)
13387     error (_("Error on target while downloading trace state variable."));
13388 }
13389 
13390 void
13391 remote_target::enable_tracepoint (struct bp_location *location)
13392 {
13393   struct remote_state *rs = get_remote_state ();
13394 
13395   xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
13396 	     location->owner->number,
13397 	     phex (location->address, sizeof (CORE_ADDR)));
13398   putpkt (rs->buf);
13399   remote_get_noisy_reply ();
13400   if (rs->buf[0] == '\0')
13401     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13402   if (strcmp (rs->buf.data (), "OK") != 0)
13403     error (_("Error on target while enabling tracepoint."));
13404 }
13405 
13406 void
13407 remote_target::disable_tracepoint (struct bp_location *location)
13408 {
13409   struct remote_state *rs = get_remote_state ();
13410 
13411   xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
13412 	     location->owner->number,
13413 	     phex (location->address, sizeof (CORE_ADDR)));
13414   putpkt (rs->buf);
13415   remote_get_noisy_reply ();
13416   if (rs->buf[0] == '\0')
13417     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13418   if (strcmp (rs->buf.data (), "OK") != 0)
13419     error (_("Error on target while disabling tracepoint."));
13420 }
13421 
13422 void
13423 remote_target::trace_set_readonly_regions ()
13424 {
13425   asection *s;
13426   bfd_size_type size;
13427   bfd_vma vma;
13428   int anysecs = 0;
13429   int offset = 0;
13430 
13431   if (!current_program_space->exec_bfd ())
13432     return;			/* No information to give.  */
13433 
13434   struct remote_state *rs = get_remote_state ();
13435 
13436   strcpy (rs->buf.data (), "QTro");
13437   offset = strlen (rs->buf.data ());
13438   for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
13439     {
13440       char tmp1[40], tmp2[40];
13441       int sec_length;
13442 
13443       if ((s->flags & SEC_LOAD) == 0 ||
13444       /*  (s->flags & SEC_CODE) == 0 || */
13445 	  (s->flags & SEC_READONLY) == 0)
13446 	continue;
13447 
13448       anysecs = 1;
13449       vma = bfd_section_vma (s);
13450       size = bfd_section_size (s);
13451       sprintf_vma (tmp1, vma);
13452       sprintf_vma (tmp2, vma + size);
13453       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
13454       if (offset + sec_length + 1 > rs->buf.size ())
13455 	{
13456 	  if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
13457 	    warning (_("\
13458 Too many sections for read-only sections definition packet."));
13459 	  break;
13460 	}
13461       xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
13462 		 tmp1, tmp2);
13463       offset += sec_length;
13464     }
13465   if (anysecs)
13466     {
13467       putpkt (rs->buf);
13468       getpkt (&rs->buf, 0);
13469     }
13470 }
13471 
13472 void
13473 remote_target::trace_start ()
13474 {
13475   struct remote_state *rs = get_remote_state ();
13476 
13477   putpkt ("QTStart");
13478   remote_get_noisy_reply ();
13479   if (rs->buf[0] == '\0')
13480     error (_("Target does not support this command."));
13481   if (strcmp (rs->buf.data (), "OK") != 0)
13482     error (_("Bogus reply from target: %s"), rs->buf.data ());
13483 }
13484 
13485 int
13486 remote_target::get_trace_status (struct trace_status *ts)
13487 {
13488   /* Initialize it just to avoid a GCC false warning.  */
13489   char *p = NULL;
13490   enum packet_result result;
13491   struct remote_state *rs = get_remote_state ();
13492 
13493   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
13494     return -1;
13495 
13496   /* FIXME we need to get register block size some other way.  */
13497   trace_regblock_size
13498     = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
13499 
13500   putpkt ("qTStatus");
13501 
13502   try
13503     {
13504       p = remote_get_noisy_reply ();
13505     }
13506   catch (const gdb_exception_error &ex)
13507     {
13508       if (ex.error != TARGET_CLOSE_ERROR)
13509 	{
13510 	  exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13511 	  return -1;
13512 	}
13513       throw;
13514     }
13515 
13516   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13517 
13518   /* If the remote target doesn't do tracing, flag it.  */
13519   if (result == PACKET_UNKNOWN)
13520     return -1;
13521 
13522   /* We're working with a live target.  */
13523   ts->filename = NULL;
13524 
13525   if (*p++ != 'T')
13526     error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
13527 
13528   /* Function 'parse_trace_status' sets default value of each field of
13529      'ts' at first, so we don't have to do it here.  */
13530   parse_trace_status (p, ts);
13531 
13532   return ts->running;
13533 }
13534 
13535 void
13536 remote_target::get_tracepoint_status (struct breakpoint *bp,
13537 				      struct uploaded_tp *utp)
13538 {
13539   struct remote_state *rs = get_remote_state ();
13540   char *reply;
13541   struct tracepoint *tp = (struct tracepoint *) bp;
13542   size_t size = get_remote_packet_size ();
13543 
13544   if (tp)
13545     {
13546       tp->hit_count = 0;
13547       tp->traceframe_usage = 0;
13548       for (bp_location *loc : tp->locations ())
13549 	{
13550 	  /* If the tracepoint was never downloaded, don't go asking for
13551 	     any status.  */
13552 	  if (tp->number_on_target == 0)
13553 	    continue;
13554 	  xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
13555 		     phex_nz (loc->address, 0));
13556 	  putpkt (rs->buf);
13557 	  reply = remote_get_noisy_reply ();
13558 	  if (reply && *reply)
13559 	    {
13560 	      if (*reply == 'V')
13561 		parse_tracepoint_status (reply + 1, bp, utp);
13562 	    }
13563 	}
13564     }
13565   else if (utp)
13566     {
13567       utp->hit_count = 0;
13568       utp->traceframe_usage = 0;
13569       xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
13570 		 phex_nz (utp->addr, 0));
13571       putpkt (rs->buf);
13572       reply = remote_get_noisy_reply ();
13573       if (reply && *reply)
13574 	{
13575 	  if (*reply == 'V')
13576 	    parse_tracepoint_status (reply + 1, bp, utp);
13577 	}
13578     }
13579 }
13580 
13581 void
13582 remote_target::trace_stop ()
13583 {
13584   struct remote_state *rs = get_remote_state ();
13585 
13586   putpkt ("QTStop");
13587   remote_get_noisy_reply ();
13588   if (rs->buf[0] == '\0')
13589     error (_("Target does not support this command."));
13590   if (strcmp (rs->buf.data (), "OK") != 0)
13591     error (_("Bogus reply from target: %s"), rs->buf.data ());
13592 }
13593 
13594 int
13595 remote_target::trace_find (enum trace_find_type type, int num,
13596 			   CORE_ADDR addr1, CORE_ADDR addr2,
13597 			   int *tpp)
13598 {
13599   struct remote_state *rs = get_remote_state ();
13600   char *endbuf = rs->buf.data () + get_remote_packet_size ();
13601   char *p, *reply;
13602   int target_frameno = -1, target_tracept = -1;
13603 
13604   /* Lookups other than by absolute frame number depend on the current
13605      trace selected, so make sure it is correct on the remote end
13606      first.  */
13607   if (type != tfind_number)
13608     set_remote_traceframe ();
13609 
13610   p = rs->buf.data ();
13611   strcpy (p, "QTFrame:");
13612   p = strchr (p, '\0');
13613   switch (type)
13614     {
13615     case tfind_number:
13616       xsnprintf (p, endbuf - p, "%x", num);
13617       break;
13618     case tfind_pc:
13619       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
13620       break;
13621     case tfind_tp:
13622       xsnprintf (p, endbuf - p, "tdp:%x", num);
13623       break;
13624     case tfind_range:
13625       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13626 		 phex_nz (addr2, 0));
13627       break;
13628     case tfind_outside:
13629       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13630 		 phex_nz (addr2, 0));
13631       break;
13632     default:
13633       error (_("Unknown trace find type %d"), type);
13634     }
13635 
13636   putpkt (rs->buf);
13637   reply = remote_get_noisy_reply ();
13638   if (*reply == '\0')
13639     error (_("Target does not support this command."));
13640 
13641   while (reply && *reply)
13642     switch (*reply)
13643       {
13644       case 'F':
13645 	p = ++reply;
13646 	target_frameno = (int) strtol (p, &reply, 16);
13647 	if (reply == p)
13648 	  error (_("Unable to parse trace frame number"));
13649 	/* Don't update our remote traceframe number cache on failure
13650 	   to select a remote traceframe.  */
13651 	if (target_frameno == -1)
13652 	  return -1;
13653 	break;
13654       case 'T':
13655 	p = ++reply;
13656 	target_tracept = (int) strtol (p, &reply, 16);
13657 	if (reply == p)
13658 	  error (_("Unable to parse tracepoint number"));
13659 	break;
13660       case 'O':		/* "OK"? */
13661 	if (reply[1] == 'K' && reply[2] == '\0')
13662 	  reply += 2;
13663 	else
13664 	  error (_("Bogus reply from target: %s"), reply);
13665 	break;
13666       default:
13667 	error (_("Bogus reply from target: %s"), reply);
13668       }
13669   if (tpp)
13670     *tpp = target_tracept;
13671 
13672   rs->remote_traceframe_number = target_frameno;
13673   return target_frameno;
13674 }
13675 
13676 bool
13677 remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
13678 {
13679   struct remote_state *rs = get_remote_state ();
13680   char *reply;
13681   ULONGEST uval;
13682 
13683   set_remote_traceframe ();
13684 
13685   xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
13686   putpkt (rs->buf);
13687   reply = remote_get_noisy_reply ();
13688   if (reply && *reply)
13689     {
13690       if (*reply == 'V')
13691 	{
13692 	  unpack_varlen_hex (reply + 1, &uval);
13693 	  *val = (LONGEST) uval;
13694 	  return true;
13695 	}
13696     }
13697   return false;
13698 }
13699 
13700 int
13701 remote_target::save_trace_data (const char *filename)
13702 {
13703   struct remote_state *rs = get_remote_state ();
13704   char *p, *reply;
13705 
13706   p = rs->buf.data ();
13707   strcpy (p, "QTSave:");
13708   p += strlen (p);
13709   if ((p - rs->buf.data ()) + strlen (filename) * 2
13710       >= get_remote_packet_size ())
13711     error (_("Remote file name too long for trace save packet"));
13712   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
13713   *p++ = '\0';
13714   putpkt (rs->buf);
13715   reply = remote_get_noisy_reply ();
13716   if (*reply == '\0')
13717     error (_("Target does not support this command."));
13718   if (strcmp (reply, "OK") != 0)
13719     error (_("Bogus reply from target: %s"), reply);
13720   return 0;
13721 }
13722 
13723 /* This is basically a memory transfer, but needs to be its own packet
13724    because we don't know how the target actually organizes its trace
13725    memory, plus we want to be able to ask for as much as possible, but
13726    not be unhappy if we don't get as much as we ask for.  */
13727 
13728 LONGEST
13729 remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
13730 {
13731   struct remote_state *rs = get_remote_state ();
13732   char *reply;
13733   char *p;
13734   int rslt;
13735 
13736   p = rs->buf.data ();
13737   strcpy (p, "qTBuffer:");
13738   p += strlen (p);
13739   p += hexnumstr (p, offset);
13740   *p++ = ',';
13741   p += hexnumstr (p, len);
13742   *p++ = '\0';
13743 
13744   putpkt (rs->buf);
13745   reply = remote_get_noisy_reply ();
13746   if (reply && *reply)
13747     {
13748       /* 'l' by itself means we're at the end of the buffer and
13749 	 there is nothing more to get.  */
13750       if (*reply == 'l')
13751 	return 0;
13752 
13753       /* Convert the reply into binary.  Limit the number of bytes to
13754 	 convert according to our passed-in buffer size, rather than
13755 	 what was returned in the packet; if the target is
13756 	 unexpectedly generous and gives us a bigger reply than we
13757 	 asked for, we don't want to crash.  */
13758       rslt = hex2bin (reply, buf, len);
13759       return rslt;
13760     }
13761 
13762   /* Something went wrong, flag as an error.  */
13763   return -1;
13764 }
13765 
13766 void
13767 remote_target::set_disconnected_tracing (int val)
13768 {
13769   struct remote_state *rs = get_remote_state ();
13770 
13771   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
13772     {
13773       char *reply;
13774 
13775       xsnprintf (rs->buf.data (), get_remote_packet_size (),
13776 		 "QTDisconnected:%x", val);
13777       putpkt (rs->buf);
13778       reply = remote_get_noisy_reply ();
13779       if (*reply == '\0')
13780 	error (_("Target does not support this command."));
13781       if (strcmp (reply, "OK") != 0)
13782 	error (_("Bogus reply from target: %s"), reply);
13783     }
13784   else if (val)
13785     warning (_("Target does not support disconnected tracing."));
13786 }
13787 
13788 int
13789 remote_target::core_of_thread (ptid_t ptid)
13790 {
13791   thread_info *info = find_thread_ptid (this, ptid);
13792 
13793   if (info != NULL && info->priv != NULL)
13794     return get_remote_thread_info (info)->core;
13795 
13796   return -1;
13797 }
13798 
13799 void
13800 remote_target::set_circular_trace_buffer (int val)
13801 {
13802   struct remote_state *rs = get_remote_state ();
13803   char *reply;
13804 
13805   xsnprintf (rs->buf.data (), get_remote_packet_size (),
13806 	     "QTBuffer:circular:%x", val);
13807   putpkt (rs->buf);
13808   reply = remote_get_noisy_reply ();
13809   if (*reply == '\0')
13810     error (_("Target does not support this command."));
13811   if (strcmp (reply, "OK") != 0)
13812     error (_("Bogus reply from target: %s"), reply);
13813 }
13814 
13815 traceframe_info_up
13816 remote_target::traceframe_info ()
13817 {
13818   gdb::optional<gdb::char_vector> text
13819     = target_read_stralloc (current_inferior ()->top_target (),
13820 			    TARGET_OBJECT_TRACEFRAME_INFO,
13821 			    NULL);
13822   if (text)
13823     return parse_traceframe_info (text->data ());
13824 
13825   return NULL;
13826 }
13827 
13828 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
13829    instruction on which a fast tracepoint may be placed.  Returns -1
13830    if the packet is not supported, and 0 if the minimum instruction
13831    length is unknown.  */
13832 
13833 int
13834 remote_target::get_min_fast_tracepoint_insn_len ()
13835 {
13836   struct remote_state *rs = get_remote_state ();
13837   char *reply;
13838 
13839   /* If we're not debugging a process yet, the IPA can't be
13840      loaded.  */
13841   if (!target_has_execution ())
13842     return 0;
13843 
13844   /* Make sure the remote is pointing at the right process.  */
13845   set_general_process ();
13846 
13847   xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
13848   putpkt (rs->buf);
13849   reply = remote_get_noisy_reply ();
13850   if (*reply == '\0')
13851     return -1;
13852   else
13853     {
13854       ULONGEST min_insn_len;
13855 
13856       unpack_varlen_hex (reply, &min_insn_len);
13857 
13858       return (int) min_insn_len;
13859     }
13860 }
13861 
13862 void
13863 remote_target::set_trace_buffer_size (LONGEST val)
13864 {
13865   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13866     {
13867       struct remote_state *rs = get_remote_state ();
13868       char *buf = rs->buf.data ();
13869       char *endbuf = buf + get_remote_packet_size ();
13870       enum packet_result result;
13871 
13872       gdb_assert (val >= 0 || val == -1);
13873       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13874       /* Send -1 as literal "-1" to avoid host size dependency.  */
13875       if (val < 0)
13876 	{
13877 	  *buf++ = '-';
13878 	  buf += hexnumstr (buf, (ULONGEST) -val);
13879 	}
13880       else
13881 	buf += hexnumstr (buf, (ULONGEST) val);
13882 
13883       putpkt (rs->buf);
13884       remote_get_noisy_reply ();
13885       result = packet_ok (rs->buf,
13886 		  &remote_protocol_packets[PACKET_QTBuffer_size]);
13887 
13888       if (result != PACKET_OK)
13889 	warning (_("Bogus reply from target: %s"), rs->buf.data ());
13890     }
13891 }
13892 
13893 bool
13894 remote_target::set_trace_notes (const char *user, const char *notes,
13895 				const char *stop_notes)
13896 {
13897   struct remote_state *rs = get_remote_state ();
13898   char *reply;
13899   char *buf = rs->buf.data ();
13900   char *endbuf = buf + get_remote_packet_size ();
13901   int nbytes;
13902 
13903   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13904   if (user)
13905     {
13906       buf += xsnprintf (buf, endbuf - buf, "user:");
13907       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13908       buf += 2 * nbytes;
13909       *buf++ = ';';
13910     }
13911   if (notes)
13912     {
13913       buf += xsnprintf (buf, endbuf - buf, "notes:");
13914       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13915       buf += 2 * nbytes;
13916       *buf++ = ';';
13917     }
13918   if (stop_notes)
13919     {
13920       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13921       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13922       buf += 2 * nbytes;
13923       *buf++ = ';';
13924     }
13925   /* Ensure the buffer is terminated.  */
13926   *buf = '\0';
13927 
13928   putpkt (rs->buf);
13929   reply = remote_get_noisy_reply ();
13930   if (*reply == '\0')
13931     return false;
13932 
13933   if (strcmp (reply, "OK") != 0)
13934     error (_("Bogus reply from target: %s"), reply);
13935 
13936   return true;
13937 }
13938 
13939 bool
13940 remote_target::use_agent (bool use)
13941 {
13942   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13943     {
13944       struct remote_state *rs = get_remote_state ();
13945 
13946       /* If the stub supports QAgent.  */
13947       xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
13948       putpkt (rs->buf);
13949       getpkt (&rs->buf, 0);
13950 
13951       if (strcmp (rs->buf.data (), "OK") == 0)
13952 	{
13953 	  ::use_agent = use;
13954 	  return true;
13955 	}
13956     }
13957 
13958   return false;
13959 }
13960 
13961 bool
13962 remote_target::can_use_agent ()
13963 {
13964   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13965 }
13966 
13967 struct btrace_target_info
13968 {
13969   /* The ptid of the traced thread.  */
13970   ptid_t ptid;
13971 
13972   /* The obtained branch trace configuration.  */
13973   struct btrace_config conf;
13974 };
13975 
13976 /* Reset our idea of our target's btrace configuration.  */
13977 
13978 static void
13979 remote_btrace_reset (remote_state *rs)
13980 {
13981   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13982 }
13983 
13984 /* Synchronize the configuration with the target.  */
13985 
13986 void
13987 remote_target::btrace_sync_conf (const btrace_config *conf)
13988 {
13989   struct packet_config *packet;
13990   struct remote_state *rs;
13991   char *buf, *pos, *endbuf;
13992 
13993   rs = get_remote_state ();
13994   buf = rs->buf.data ();
13995   endbuf = buf + get_remote_packet_size ();
13996 
13997   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13998   if (packet_config_support (packet) == PACKET_ENABLE
13999       && conf->bts.size != rs->btrace_config.bts.size)
14000     {
14001       pos = buf;
14002       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
14003 			conf->bts.size);
14004 
14005       putpkt (buf);
14006       getpkt (&rs->buf, 0);
14007 
14008       if (packet_ok (buf, packet) == PACKET_ERROR)
14009 	{
14010 	  if (buf[0] == 'E' && buf[1] == '.')
14011 	    error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
14012 	  else
14013 	    error (_("Failed to configure the BTS buffer size."));
14014 	}
14015 
14016       rs->btrace_config.bts.size = conf->bts.size;
14017     }
14018 
14019   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
14020   if (packet_config_support (packet) == PACKET_ENABLE
14021       && conf->pt.size != rs->btrace_config.pt.size)
14022     {
14023       pos = buf;
14024       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
14025 			conf->pt.size);
14026 
14027       putpkt (buf);
14028       getpkt (&rs->buf, 0);
14029 
14030       if (packet_ok (buf, packet) == PACKET_ERROR)
14031 	{
14032 	  if (buf[0] == 'E' && buf[1] == '.')
14033 	    error (_("Failed to configure the trace buffer size: %s"), buf + 2);
14034 	  else
14035 	    error (_("Failed to configure the trace buffer size."));
14036 	}
14037 
14038       rs->btrace_config.pt.size = conf->pt.size;
14039     }
14040 }
14041 
14042 /* Read the current thread's btrace configuration from the target and
14043    store it into CONF.  */
14044 
14045 static void
14046 btrace_read_config (struct btrace_config *conf)
14047 {
14048   gdb::optional<gdb::char_vector> xml
14049     = target_read_stralloc (current_inferior ()->top_target (),
14050 			    TARGET_OBJECT_BTRACE_CONF, "");
14051   if (xml)
14052     parse_xml_btrace_conf (conf, xml->data ());
14053 }
14054 
14055 /* Maybe reopen target btrace.  */
14056 
14057 void
14058 remote_target::remote_btrace_maybe_reopen ()
14059 {
14060   struct remote_state *rs = get_remote_state ();
14061   int btrace_target_pushed = 0;
14062 #if !defined (HAVE_LIBIPT)
14063   int warned = 0;
14064 #endif
14065 
14066   /* Don't bother walking the entirety of the remote thread list when
14067      we know the feature isn't supported by the remote.  */
14068   if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
14069     return;
14070 
14071   scoped_restore_current_thread restore_thread;
14072 
14073   for (thread_info *tp : all_non_exited_threads (this))
14074     {
14075       set_general_thread (tp->ptid);
14076 
14077       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
14078       btrace_read_config (&rs->btrace_config);
14079 
14080       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
14081 	continue;
14082 
14083 #if !defined (HAVE_LIBIPT)
14084       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
14085 	{
14086 	  if (!warned)
14087 	    {
14088 	      warned = 1;
14089 	      warning (_("Target is recording using Intel Processor Trace "
14090 			 "but support was disabled at compile time."));
14091 	    }
14092 
14093 	  continue;
14094 	}
14095 #endif /* !defined (HAVE_LIBIPT) */
14096 
14097       /* Push target, once, but before anything else happens.  This way our
14098 	 changes to the threads will be cleaned up by unpushing the target
14099 	 in case btrace_read_config () throws.  */
14100       if (!btrace_target_pushed)
14101 	{
14102 	  btrace_target_pushed = 1;
14103 	  record_btrace_push_target ();
14104 	  printf_filtered (_("Target is recording using %s.\n"),
14105 			   btrace_format_string (rs->btrace_config.format));
14106 	}
14107 
14108       tp->btrace.target = XCNEW (struct btrace_target_info);
14109       tp->btrace.target->ptid = tp->ptid;
14110       tp->btrace.target->conf = rs->btrace_config;
14111     }
14112 }
14113 
14114 /* Enable branch tracing.  */
14115 
14116 struct btrace_target_info *
14117 remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
14118 {
14119   struct btrace_target_info *tinfo = NULL;
14120   struct packet_config *packet = NULL;
14121   struct remote_state *rs = get_remote_state ();
14122   char *buf = rs->buf.data ();
14123   char *endbuf = buf + get_remote_packet_size ();
14124 
14125   switch (conf->format)
14126     {
14127       case BTRACE_FORMAT_BTS:
14128 	packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
14129 	break;
14130 
14131       case BTRACE_FORMAT_PT:
14132 	packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
14133 	break;
14134     }
14135 
14136   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
14137     error (_("Target does not support branch tracing."));
14138 
14139   btrace_sync_conf (conf);
14140 
14141   set_general_thread (ptid);
14142 
14143   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14144   putpkt (rs->buf);
14145   getpkt (&rs->buf, 0);
14146 
14147   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14148     {
14149       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14150 	error (_("Could not enable branch tracing for %s: %s"),
14151 	       target_pid_to_str (ptid).c_str (), &rs->buf[2]);
14152       else
14153 	error (_("Could not enable branch tracing for %s."),
14154 	       target_pid_to_str (ptid).c_str ());
14155     }
14156 
14157   tinfo = XCNEW (struct btrace_target_info);
14158   tinfo->ptid = ptid;
14159 
14160   /* If we fail to read the configuration, we lose some information, but the
14161      tracing itself is not impacted.  */
14162   try
14163     {
14164       btrace_read_config (&tinfo->conf);
14165     }
14166   catch (const gdb_exception_error &err)
14167     {
14168       if (err.message != NULL)
14169 	warning ("%s", err.what ());
14170     }
14171 
14172   return tinfo;
14173 }
14174 
14175 /* Disable branch tracing.  */
14176 
14177 void
14178 remote_target::disable_btrace (struct btrace_target_info *tinfo)
14179 {
14180   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
14181   struct remote_state *rs = get_remote_state ();
14182   char *buf = rs->buf.data ();
14183   char *endbuf = buf + get_remote_packet_size ();
14184 
14185   if (packet_config_support (packet) != PACKET_ENABLE)
14186     error (_("Target does not support branch tracing."));
14187 
14188   set_general_thread (tinfo->ptid);
14189 
14190   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14191   putpkt (rs->buf);
14192   getpkt (&rs->buf, 0);
14193 
14194   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14195     {
14196       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14197 	error (_("Could not disable branch tracing for %s: %s"),
14198 	       target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
14199       else
14200 	error (_("Could not disable branch tracing for %s."),
14201 	       target_pid_to_str (tinfo->ptid).c_str ());
14202     }
14203 
14204   xfree (tinfo);
14205 }
14206 
14207 /* Teardown branch tracing.  */
14208 
14209 void
14210 remote_target::teardown_btrace (struct btrace_target_info *tinfo)
14211 {
14212   /* We must not talk to the target during teardown.  */
14213   xfree (tinfo);
14214 }
14215 
14216 /* Read the branch trace.  */
14217 
14218 enum btrace_error
14219 remote_target::read_btrace (struct btrace_data *btrace,
14220 			    struct btrace_target_info *tinfo,
14221 			    enum btrace_read_type type)
14222 {
14223   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
14224   const char *annex;
14225 
14226   if (packet_config_support (packet) != PACKET_ENABLE)
14227     error (_("Target does not support branch tracing."));
14228 
14229 #if !defined(HAVE_LIBEXPAT)
14230   error (_("Cannot process branch tracing result. XML parsing not supported."));
14231 #endif
14232 
14233   switch (type)
14234     {
14235     case BTRACE_READ_ALL:
14236       annex = "all";
14237       break;
14238     case BTRACE_READ_NEW:
14239       annex = "new";
14240       break;
14241     case BTRACE_READ_DELTA:
14242       annex = "delta";
14243       break;
14244     default:
14245       internal_error (__FILE__, __LINE__,
14246 		      _("Bad branch tracing read type: %u."),
14247 		      (unsigned int) type);
14248     }
14249 
14250   gdb::optional<gdb::char_vector> xml
14251     = target_read_stralloc (current_inferior ()->top_target (),
14252 			    TARGET_OBJECT_BTRACE, annex);
14253   if (!xml)
14254     return BTRACE_ERR_UNKNOWN;
14255 
14256   parse_xml_btrace (btrace, xml->data ());
14257 
14258   return BTRACE_ERR_NONE;
14259 }
14260 
14261 const struct btrace_config *
14262 remote_target::btrace_conf (const struct btrace_target_info *tinfo)
14263 {
14264   return &tinfo->conf;
14265 }
14266 
14267 bool
14268 remote_target::augmented_libraries_svr4_read ()
14269 {
14270   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
14271 	  == PACKET_ENABLE);
14272 }
14273 
14274 /* Implementation of to_load.  */
14275 
14276 void
14277 remote_target::load (const char *name, int from_tty)
14278 {
14279   generic_load (name, from_tty);
14280 }
14281 
14282 /* Accepts an integer PID; returns a string representing a file that
14283    can be opened on the remote side to get the symbols for the child
14284    process.  Returns NULL if the operation is not supported.  */
14285 
14286 char *
14287 remote_target::pid_to_exec_file (int pid)
14288 {
14289   static gdb::optional<gdb::char_vector> filename;
14290   char *annex = NULL;
14291 
14292   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
14293     return NULL;
14294 
14295   inferior *inf = find_inferior_pid (this, pid);
14296   if (inf == NULL)
14297     internal_error (__FILE__, __LINE__,
14298 		    _("not currently attached to process %d"), pid);
14299 
14300   if (!inf->fake_pid_p)
14301     {
14302       const int annex_size = 9;
14303 
14304       annex = (char *) alloca (annex_size);
14305       xsnprintf (annex, annex_size, "%x", pid);
14306     }
14307 
14308   filename = target_read_stralloc (current_inferior ()->top_target (),
14309 				   TARGET_OBJECT_EXEC_FILE, annex);
14310 
14311   return filename ? filename->data () : nullptr;
14312 }
14313 
14314 /* Implement the to_can_do_single_step target_ops method.  */
14315 
14316 int
14317 remote_target::can_do_single_step ()
14318 {
14319   /* We can only tell whether target supports single step or not by
14320      supported s and S vCont actions if the stub supports vContSupported
14321      feature.  If the stub doesn't support vContSupported feature,
14322      we have conservatively to think target doesn't supports single
14323      step.  */
14324   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
14325     {
14326       struct remote_state *rs = get_remote_state ();
14327 
14328       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14329 	remote_vcont_probe ();
14330 
14331       return rs->supports_vCont.s && rs->supports_vCont.S;
14332     }
14333   else
14334     return 0;
14335 }
14336 
14337 /* Implementation of the to_execution_direction method for the remote
14338    target.  */
14339 
14340 enum exec_direction_kind
14341 remote_target::execution_direction ()
14342 {
14343   struct remote_state *rs = get_remote_state ();
14344 
14345   return rs->last_resume_exec_dir;
14346 }
14347 
14348 /* Return pointer to the thread_info struct which corresponds to
14349    THREAD_HANDLE (having length HANDLE_LEN).  */
14350 
14351 thread_info *
14352 remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
14353 					     int handle_len,
14354 					     inferior *inf)
14355 {
14356   for (thread_info *tp : all_non_exited_threads (this))
14357     {
14358       remote_thread_info *priv = get_remote_thread_info (tp);
14359 
14360       if (tp->inf == inf && priv != NULL)
14361 	{
14362 	  if (handle_len != priv->thread_handle.size ())
14363 	    error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
14364 		   handle_len, priv->thread_handle.size ());
14365 	  if (memcmp (thread_handle, priv->thread_handle.data (),
14366 		      handle_len) == 0)
14367 	    return tp;
14368 	}
14369     }
14370 
14371   return NULL;
14372 }
14373 
14374 gdb::byte_vector
14375 remote_target::thread_info_to_thread_handle (struct thread_info *tp)
14376 {
14377   remote_thread_info *priv = get_remote_thread_info (tp);
14378   return priv->thread_handle;
14379 }
14380 
14381 bool
14382 remote_target::can_async_p ()
14383 {
14384   struct remote_state *rs = get_remote_state ();
14385 
14386   /* We don't go async if the user has explicitly prevented it with the
14387      "maint set target-async" command.  */
14388   if (!target_async_permitted)
14389     return false;
14390 
14391   /* We're async whenever the serial device is.  */
14392   return serial_can_async_p (rs->remote_desc);
14393 }
14394 
14395 bool
14396 remote_target::is_async_p ()
14397 {
14398   struct remote_state *rs = get_remote_state ();
14399 
14400   if (!target_async_permitted)
14401     /* We only enable async when the user specifically asks for it.  */
14402     return false;
14403 
14404   /* We're async whenever the serial device is.  */
14405   return serial_is_async_p (rs->remote_desc);
14406 }
14407 
14408 /* Pass the SERIAL event on and up to the client.  One day this code
14409    will be able to delay notifying the client of an event until the
14410    point where an entire packet has been received.  */
14411 
14412 static serial_event_ftype remote_async_serial_handler;
14413 
14414 static void
14415 remote_async_serial_handler (struct serial *scb, void *context)
14416 {
14417   /* Don't propogate error information up to the client.  Instead let
14418      the client find out about the error by querying the target.  */
14419   inferior_event_handler (INF_REG_EVENT);
14420 }
14421 
14422 static void
14423 remote_async_inferior_event_handler (gdb_client_data data)
14424 {
14425   inferior_event_handler (INF_REG_EVENT);
14426 }
14427 
14428 int
14429 remote_target::async_wait_fd ()
14430 {
14431   struct remote_state *rs = get_remote_state ();
14432   return rs->remote_desc->fd;
14433 }
14434 
14435 void
14436 remote_target::async (int enable)
14437 {
14438   struct remote_state *rs = get_remote_state ();
14439 
14440   if (enable)
14441     {
14442       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
14443 
14444       /* If there are pending events in the stop reply queue tell the
14445 	 event loop to process them.  */
14446       if (!rs->stop_reply_queue.empty ())
14447 	mark_async_event_handler (rs->remote_async_inferior_event_token);
14448       /* For simplicity, below we clear the pending events token
14449 	 without remembering whether it is marked, so here we always
14450 	 mark it.  If there's actually no pending notification to
14451 	 process, this ends up being a no-op (other than a spurious
14452 	 event-loop wakeup).  */
14453       if (target_is_non_stop_p ())
14454 	mark_async_event_handler (rs->notif_state->get_pending_events_token);
14455     }
14456   else
14457     {
14458       serial_async (rs->remote_desc, NULL, NULL);
14459       /* If the core is disabling async, it doesn't want to be
14460 	 disturbed with target events.  Clear all async event sources
14461 	 too.  */
14462       clear_async_event_handler (rs->remote_async_inferior_event_token);
14463       if (target_is_non_stop_p ())
14464 	clear_async_event_handler (rs->notif_state->get_pending_events_token);
14465     }
14466 }
14467 
14468 /* Implementation of the to_thread_events method.  */
14469 
14470 void
14471 remote_target::thread_events (int enable)
14472 {
14473   struct remote_state *rs = get_remote_state ();
14474   size_t size = get_remote_packet_size ();
14475 
14476   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14477     return;
14478 
14479   xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
14480   putpkt (rs->buf);
14481   getpkt (&rs->buf, 0);
14482 
14483   switch (packet_ok (rs->buf,
14484 		     &remote_protocol_packets[PACKET_QThreadEvents]))
14485     {
14486     case PACKET_OK:
14487       if (strcmp (rs->buf.data (), "OK") != 0)
14488 	error (_("Remote refused setting thread events: %s"), rs->buf.data ());
14489       break;
14490     case PACKET_ERROR:
14491       warning (_("Remote failure reply: %s"), rs->buf.data ());
14492       break;
14493     case PACKET_UNKNOWN:
14494       break;
14495     }
14496 }
14497 
14498 static void
14499 show_remote_cmd (const char *args, int from_tty)
14500 {
14501   /* We can't just use cmd_show_list here, because we want to skip
14502      the redundant "show remote Z-packet" and the legacy aliases.  */
14503   struct cmd_list_element *list = remote_show_cmdlist;
14504   struct ui_out *uiout = current_uiout;
14505 
14506   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
14507   for (; list != NULL; list = list->next)
14508     if (strcmp (list->name, "Z-packet") == 0)
14509       continue;
14510     else if (list->type == not_set_cmd)
14511       /* Alias commands are exactly like the original, except they
14512 	 don't have the normal type.  */
14513       continue;
14514     else
14515       {
14516 	ui_out_emit_tuple option_emitter (uiout, "option");
14517 
14518 	uiout->field_string ("name", list->name);
14519 	uiout->text (":  ");
14520 	if (list->type == show_cmd)
14521 	  do_show_command (NULL, from_tty, list);
14522 	else
14523 	  cmd_func (list, NULL, from_tty);
14524       }
14525 }
14526 
14527 
14528 /* Function to be called whenever a new objfile (shlib) is detected.  */
14529 static void
14530 remote_new_objfile (struct objfile *objfile)
14531 {
14532   remote_target *remote = get_current_remote_target ();
14533 
14534   /* First, check whether the current inferior's process target is a remote
14535      target.  */
14536   if (remote == nullptr)
14537     return;
14538 
14539   /* When we are attaching or handling a fork child and the shared library
14540      subsystem reads the list of loaded libraries, we receive new objfile
14541      events in between each found library.  The libraries are read in an
14542      undefined order, so if we gave the remote side a chance to look up
14543      symbols between each objfile, we might give it an inconsistent picture
14544      of the inferior.  It could appear that a library A appears loaded but
14545      a library B does not, even though library A requires library B.  That
14546      would present a state that couldn't normally exist in the inferior.
14547 
14548      So, skip these events, we'll give the remote a chance to look up symbols
14549      once all the loaded libraries and their symbols are known to GDB.  */
14550   if (current_inferior ()->in_initial_library_scan)
14551     return;
14552 
14553   remote->remote_check_symbols ();
14554 }
14555 
14556 /* Pull all the tracepoints defined on the target and create local
14557    data structures representing them.  We don't want to create real
14558    tracepoints yet, we don't want to mess up the user's existing
14559    collection.  */
14560 
14561 int
14562 remote_target::upload_tracepoints (struct uploaded_tp **utpp)
14563 {
14564   struct remote_state *rs = get_remote_state ();
14565   char *p;
14566 
14567   /* Ask for a first packet of tracepoint definition.  */
14568   putpkt ("qTfP");
14569   getpkt (&rs->buf, 0);
14570   p = rs->buf.data ();
14571   while (*p && *p != 'l')
14572     {
14573       parse_tracepoint_definition (p, utpp);
14574       /* Ask for another packet of tracepoint definition.  */
14575       putpkt ("qTsP");
14576       getpkt (&rs->buf, 0);
14577       p = rs->buf.data ();
14578     }
14579   return 0;
14580 }
14581 
14582 int
14583 remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
14584 {
14585   struct remote_state *rs = get_remote_state ();
14586   char *p;
14587 
14588   /* Ask for a first packet of variable definition.  */
14589   putpkt ("qTfV");
14590   getpkt (&rs->buf, 0);
14591   p = rs->buf.data ();
14592   while (*p && *p != 'l')
14593     {
14594       parse_tsv_definition (p, utsvp);
14595       /* Ask for another packet of variable definition.  */
14596       putpkt ("qTsV");
14597       getpkt (&rs->buf, 0);
14598       p = rs->buf.data ();
14599     }
14600   return 0;
14601 }
14602 
14603 /* The "set/show range-stepping" show hook.  */
14604 
14605 static void
14606 show_range_stepping (struct ui_file *file, int from_tty,
14607 		     struct cmd_list_element *c,
14608 		     const char *value)
14609 {
14610   fprintf_filtered (file,
14611 		    _("Debugger's willingness to use range stepping "
14612 		      "is %s.\n"), value);
14613 }
14614 
14615 /* Return true if the vCont;r action is supported by the remote
14616    stub.  */
14617 
14618 bool
14619 remote_target::vcont_r_supported ()
14620 {
14621   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14622     remote_vcont_probe ();
14623 
14624   return (packet_support (PACKET_vCont) == PACKET_ENABLE
14625 	  && get_remote_state ()->supports_vCont.r);
14626 }
14627 
14628 /* The "set/show range-stepping" set hook.  */
14629 
14630 static void
14631 set_range_stepping (const char *ignore_args, int from_tty,
14632 		    struct cmd_list_element *c)
14633 {
14634   /* When enabling, check whether range stepping is actually supported
14635      by the target, and warn if not.  */
14636   if (use_range_stepping)
14637     {
14638       remote_target *remote = get_current_remote_target ();
14639       if (remote == NULL
14640 	  || !remote->vcont_r_supported ())
14641 	warning (_("Range stepping is not supported by the current target"));
14642     }
14643 }
14644 
14645 static void
14646 show_remote_debug (struct ui_file *file, int from_tty,
14647 		   struct cmd_list_element *c, const char *value)
14648 {
14649   fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
14650 		    value);
14651 }
14652 
14653 static void
14654 show_remote_timeout (struct ui_file *file, int from_tty,
14655 		     struct cmd_list_element *c, const char *value)
14656 {
14657   fprintf_filtered (file,
14658 		    _("Timeout limit to wait for target to respond is %s.\n"),
14659 		    value);
14660 }
14661 
14662 /* Implement the "supports_memory_tagging" target_ops method.  */
14663 
14664 bool
14665 remote_target::supports_memory_tagging ()
14666 {
14667   return remote_memory_tagging_p ();
14668 }
14669 
14670 /* Create the qMemTags packet given ADDRESS, LEN and TYPE.  */
14671 
14672 static void
14673 create_fetch_memtags_request (gdb::char_vector &packet, CORE_ADDR address,
14674 			      size_t len, int type)
14675 {
14676   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
14677 
14678   std::string request = string_printf ("qMemTags:%s,%s:%s",
14679 				       phex_nz (address, addr_size),
14680 				       phex_nz (len, sizeof (len)),
14681 				       phex_nz (type, sizeof (type)));
14682 
14683   strcpy (packet.data (), request.c_str ());
14684 }
14685 
14686 /* Parse the qMemTags packet reply into TAGS.
14687 
14688    Return true if successful, false otherwise.  */
14689 
14690 static bool
14691 parse_fetch_memtags_reply (const gdb::char_vector &reply,
14692 			   gdb::byte_vector &tags)
14693 {
14694   if (reply.empty () || reply[0] == 'E' || reply[0] != 'm')
14695     return false;
14696 
14697   /* Copy the tag data.  */
14698   tags = hex2bin (reply.data () + 1);
14699 
14700   return true;
14701 }
14702 
14703 /* Create the QMemTags packet given ADDRESS, LEN, TYPE and TAGS.  */
14704 
14705 static void
14706 create_store_memtags_request (gdb::char_vector &packet, CORE_ADDR address,
14707 			      size_t len, int type,
14708 			      const gdb::byte_vector &tags)
14709 {
14710   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
14711 
14712   /* Put together the main packet, address and length.  */
14713   std::string request = string_printf ("QMemTags:%s,%s:%s:",
14714 				       phex_nz (address, addr_size),
14715 				       phex_nz (len, sizeof (len)),
14716 				       phex_nz (type, sizeof (type)));
14717   request += bin2hex (tags.data (), tags.size ());
14718 
14719   /* Check if we have exceeded the maximum packet size.  */
14720   if (packet.size () < request.length ())
14721     error (_("Contents too big for packet QMemTags."));
14722 
14723   strcpy (packet.data (), request.c_str ());
14724 }
14725 
14726 /* Implement the "fetch_memtags" target_ops method.  */
14727 
14728 bool
14729 remote_target::fetch_memtags (CORE_ADDR address, size_t len,
14730 			      gdb::byte_vector &tags, int type)
14731 {
14732   /* Make sure the qMemTags packet is supported.  */
14733   if (!remote_memory_tagging_p ())
14734     gdb_assert_not_reached ("remote fetch_memtags called with packet disabled");
14735 
14736   struct remote_state *rs = get_remote_state ();
14737 
14738   create_fetch_memtags_request (rs->buf, address, len, type);
14739 
14740   putpkt (rs->buf);
14741   getpkt (&rs->buf, 0);
14742 
14743   return parse_fetch_memtags_reply (rs->buf, tags);
14744 }
14745 
14746 /* Implement the "store_memtags" target_ops method.  */
14747 
14748 bool
14749 remote_target::store_memtags (CORE_ADDR address, size_t len,
14750 			      const gdb::byte_vector &tags, int type)
14751 {
14752   /* Make sure the QMemTags packet is supported.  */
14753   if (!remote_memory_tagging_p ())
14754     gdb_assert_not_reached ("remote store_memtags called with packet disabled");
14755 
14756   struct remote_state *rs = get_remote_state ();
14757 
14758   create_store_memtags_request (rs->buf, address, len, type, tags);
14759 
14760   putpkt (rs->buf);
14761   getpkt (&rs->buf, 0);
14762 
14763   /* Verify if the request was successful.  */
14764   return packet_check_result (rs->buf.data ()) == PACKET_OK;
14765 }
14766 
14767 /* Return true if remote target T is non-stop.  */
14768 
14769 bool
14770 remote_target_is_non_stop_p (remote_target *t)
14771 {
14772   scoped_restore_current_thread restore_thread;
14773   switch_to_target_no_thread (t);
14774 
14775   return target_is_non_stop_p ();
14776 }
14777 
14778 #if GDB_SELF_TEST
14779 
14780 namespace selftests {
14781 
14782 static void
14783 test_memory_tagging_functions ()
14784 {
14785   remote_target remote;
14786 
14787   struct packet_config *config
14788     = &remote_protocol_packets[PACKET_memory_tagging_feature];
14789 
14790   scoped_restore restore_memtag_support_
14791     = make_scoped_restore (&config->support);
14792 
14793   /* Test memory tagging packet support.  */
14794   config->support = PACKET_SUPPORT_UNKNOWN;
14795   SELF_CHECK (remote.supports_memory_tagging () == false);
14796   config->support = PACKET_DISABLE;
14797   SELF_CHECK (remote.supports_memory_tagging () == false);
14798   config->support = PACKET_ENABLE;
14799   SELF_CHECK (remote.supports_memory_tagging () == true);
14800 
14801   /* Setup testing.  */
14802   gdb::char_vector packet;
14803   gdb::byte_vector tags, bv;
14804   std::string expected, reply;
14805   packet.resize (32000);
14806 
14807   /* Test creating a qMemTags request.  */
14808 
14809   expected = "qMemTags:0,0:0";
14810   create_fetch_memtags_request (packet, 0x0, 0x0, 0);
14811   SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
14812 
14813   expected = "qMemTags:deadbeef,10:1";
14814   create_fetch_memtags_request (packet, 0xdeadbeef, 16, 1);
14815   SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
14816 
14817   /* Test parsing a qMemTags reply.  */
14818 
14819   /* Error reply, tags vector unmodified.  */
14820   reply = "E00";
14821   strcpy (packet.data (), reply.c_str ());
14822   tags.resize (0);
14823   SELF_CHECK (parse_fetch_memtags_reply (packet, tags) == false);
14824   SELF_CHECK (tags.size () == 0);
14825 
14826   /* Valid reply, tags vector updated.  */
14827   tags.resize (0);
14828   bv.resize (0);
14829 
14830   for (int i = 0; i < 5; i++)
14831     bv.push_back (i);
14832 
14833   reply = "m" + bin2hex (bv.data (), bv.size ());
14834   strcpy (packet.data (), reply.c_str ());
14835 
14836   SELF_CHECK (parse_fetch_memtags_reply (packet, tags) == true);
14837   SELF_CHECK (tags.size () == 5);
14838 
14839   for (int i = 0; i < 5; i++)
14840     SELF_CHECK (tags[i] == i);
14841 
14842   /* Test creating a QMemTags request.  */
14843 
14844   /* Empty tag data.  */
14845   tags.resize (0);
14846   expected = "QMemTags:0,0:0:";
14847   create_store_memtags_request (packet, 0x0, 0x0, 0, tags);
14848   SELF_CHECK (memcmp (packet.data (), expected.c_str (),
14849 		      expected.length ()) == 0);
14850 
14851   /* Non-empty tag data.  */
14852   tags.resize (0);
14853   for (int i = 0; i < 5; i++)
14854     tags.push_back (i);
14855   expected = "QMemTags:deadbeef,ff:1:0001020304";
14856   create_store_memtags_request (packet, 0xdeadbeef, 255, 1, tags);
14857   SELF_CHECK (memcmp (packet.data (), expected.c_str (),
14858 		      expected.length ()) == 0);
14859 }
14860 
14861 } // namespace selftests
14862 #endif /* GDB_SELF_TEST */
14863 
14864 void _initialize_remote ();
14865 void
14866 _initialize_remote ()
14867 {
14868   /* architecture specific data */
14869   remote_g_packet_data_handle =
14870     gdbarch_data_register_pre_init (remote_g_packet_data_init);
14871 
14872   add_target (remote_target_info, remote_target::open);
14873   add_target (extended_remote_target_info, extended_remote_target::open);
14874 
14875   /* Hook into new objfile notification.  */
14876   gdb::observers::new_objfile.attach (remote_new_objfile, "remote");
14877 
14878 #if 0
14879   init_remote_threadtests ();
14880 #endif
14881 
14882   /* set/show remote ...  */
14883 
14884   add_basic_prefix_cmd ("remote", class_maintenance, _("\
14885 Remote protocol specific variables.\n\
14886 Configure various remote-protocol specific variables such as\n\
14887 the packets being used."),
14888 			&remote_set_cmdlist,
14889 			0 /* allow-unknown */, &setlist);
14890   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14891 Remote protocol specific variables.\n\
14892 Configure various remote-protocol specific variables such as\n\
14893 the packets being used."),
14894 		  &remote_show_cmdlist,
14895 		  0 /* allow-unknown */, &showlist);
14896 
14897   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14898 Compare section data on target to the exec file.\n\
14899 Argument is a single section name (default: all loaded sections).\n\
14900 To compare only read-only loaded sections, specify the -r option."),
14901 	   &cmdlist);
14902 
14903   add_cmd ("packet", class_maintenance, packet_command, _("\
14904 Send an arbitrary packet to a remote target.\n\
14905    maintenance packet TEXT\n\
14906 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14907 this command sends the string TEXT to the inferior, and displays the\n\
14908 response packet.  GDB supplies the initial `$' character, and the\n\
14909 terminating `#' character and checksum."),
14910 	   &maintenancelist);
14911 
14912   set_show_commands remotebreak_cmds
14913     = add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14914 Set whether to send break if interrupted."), _("\
14915 Show whether to send break if interrupted."), _("\
14916 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14917 			       set_remotebreak, show_remotebreak,
14918 			       &setlist, &showlist);
14919   deprecate_cmd (remotebreak_cmds.set, "set remote interrupt-sequence");
14920   deprecate_cmd (remotebreak_cmds.show, "show remote interrupt-sequence");
14921 
14922   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14923 			interrupt_sequence_modes, &interrupt_sequence_mode,
14924 			_("\
14925 Set interrupt sequence to remote target."), _("\
14926 Show interrupt sequence to remote target."), _("\
14927 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14928 			NULL, show_interrupt_sequence,
14929 			&remote_set_cmdlist,
14930 			&remote_show_cmdlist);
14931 
14932   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14933 			   &interrupt_on_connect, _("\
14934 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14935 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14936 If set, interrupt sequence is sent to remote target."),
14937 			   NULL, NULL,
14938 			   &remote_set_cmdlist, &remote_show_cmdlist);
14939 
14940   /* Install commands for configuring memory read/write packets.  */
14941 
14942   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14943 Set the maximum number of bytes per memory write packet (deprecated)."),
14944 	   &setlist);
14945   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14946 Show the maximum number of bytes per memory write packet (deprecated)."),
14947 	   &showlist);
14948   add_cmd ("memory-write-packet-size", no_class,
14949 	   set_memory_write_packet_size, _("\
14950 Set the maximum number of bytes per memory-write packet.\n\
14951 Specify the number of bytes in a packet or 0 (zero) for the\n\
14952 default packet size.  The actual limit is further reduced\n\
14953 dependent on the target.  Specify ``fixed'' to disable the\n\
14954 further restriction and ``limit'' to enable that restriction."),
14955 	   &remote_set_cmdlist);
14956   add_cmd ("memory-read-packet-size", no_class,
14957 	   set_memory_read_packet_size, _("\
14958 Set the maximum number of bytes per memory-read packet.\n\
14959 Specify the number of bytes in a packet or 0 (zero) for the\n\
14960 default packet size.  The actual limit is further reduced\n\
14961 dependent on the target.  Specify ``fixed'' to disable the\n\
14962 further restriction and ``limit'' to enable that restriction."),
14963 	   &remote_set_cmdlist);
14964   add_cmd ("memory-write-packet-size", no_class,
14965 	   show_memory_write_packet_size,
14966 	   _("Show the maximum number of bytes per memory-write packet."),
14967 	   &remote_show_cmdlist);
14968   add_cmd ("memory-read-packet-size", no_class,
14969 	   show_memory_read_packet_size,
14970 	   _("Show the maximum number of bytes per memory-read packet."),
14971 	   &remote_show_cmdlist);
14972 
14973   add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
14974 			    &remote_hw_watchpoint_limit, _("\
14975 Set the maximum number of target hardware watchpoints."), _("\
14976 Show the maximum number of target hardware watchpoints."), _("\
14977 Specify \"unlimited\" for unlimited hardware watchpoints."),
14978 			    NULL, show_hardware_watchpoint_limit,
14979 			    &remote_set_cmdlist,
14980 			    &remote_show_cmdlist);
14981   add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
14982 			    no_class,
14983 			    &remote_hw_watchpoint_length_limit, _("\
14984 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14985 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14986 Specify \"unlimited\" to allow watchpoints of unlimited size."),
14987 			    NULL, show_hardware_watchpoint_length_limit,
14988 			    &remote_set_cmdlist, &remote_show_cmdlist);
14989   add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
14990 			    &remote_hw_breakpoint_limit, _("\
14991 Set the maximum number of target hardware breakpoints."), _("\
14992 Show the maximum number of target hardware breakpoints."), _("\
14993 Specify \"unlimited\" for unlimited hardware breakpoints."),
14994 			    NULL, show_hardware_breakpoint_limit,
14995 			    &remote_set_cmdlist, &remote_show_cmdlist);
14996 
14997   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14998 			     &remote_address_size, _("\
14999 Set the maximum size of the address (in bits) in a memory packet."), _("\
15000 Show the maximum size of the address (in bits) in a memory packet."), NULL,
15001 			     NULL,
15002 			     NULL, /* FIXME: i18n: */
15003 			     &setlist, &showlist);
15004 
15005   init_all_packet_configs ();
15006 
15007   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
15008 			 "X", "binary-download", 1);
15009 
15010   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
15011 			 "vCont", "verbose-resume", 0);
15012 
15013   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
15014 			 "QPassSignals", "pass-signals", 0);
15015 
15016   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
15017 			 "QCatchSyscalls", "catch-syscalls", 0);
15018 
15019   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
15020 			 "QProgramSignals", "program-signals", 0);
15021 
15022   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
15023 			 "QSetWorkingDir", "set-working-dir", 0);
15024 
15025   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
15026 			 "QStartupWithShell", "startup-with-shell", 0);
15027 
15028   add_packet_config_cmd (&remote_protocol_packets
15029 			 [PACKET_QEnvironmentHexEncoded],
15030 			 "QEnvironmentHexEncoded", "environment-hex-encoded",
15031 			 0);
15032 
15033   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
15034 			 "QEnvironmentReset", "environment-reset",
15035 			 0);
15036 
15037   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
15038 			 "QEnvironmentUnset", "environment-unset",
15039 			 0);
15040 
15041   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
15042 			 "qSymbol", "symbol-lookup", 0);
15043 
15044   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
15045 			 "P", "set-register", 1);
15046 
15047   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
15048 			 "p", "fetch-register", 1);
15049 
15050   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
15051 			 "Z0", "software-breakpoint", 0);
15052 
15053   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
15054 			 "Z1", "hardware-breakpoint", 0);
15055 
15056   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
15057 			 "Z2", "write-watchpoint", 0);
15058 
15059   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
15060 			 "Z3", "read-watchpoint", 0);
15061 
15062   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
15063 			 "Z4", "access-watchpoint", 0);
15064 
15065   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
15066 			 "qXfer:auxv:read", "read-aux-vector", 0);
15067 
15068   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
15069 			 "qXfer:exec-file:read", "pid-to-exec-file", 0);
15070 
15071   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
15072 			 "qXfer:features:read", "target-features", 0);
15073 
15074   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
15075 			 "qXfer:libraries:read", "library-info", 0);
15076 
15077   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
15078 			 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
15079 
15080   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
15081 			 "qXfer:memory-map:read", "memory-map", 0);
15082 
15083   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
15084 			"qXfer:osdata:read", "osdata", 0);
15085 
15086   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
15087 			 "qXfer:threads:read", "threads", 0);
15088 
15089   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
15090 			 "qXfer:siginfo:read", "read-siginfo-object", 0);
15091 
15092   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
15093 			 "qXfer:siginfo:write", "write-siginfo-object", 0);
15094 
15095   add_packet_config_cmd
15096     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
15097      "qXfer:traceframe-info:read", "traceframe-info", 0);
15098 
15099   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
15100 			 "qXfer:uib:read", "unwind-info-block", 0);
15101 
15102   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
15103 			 "qGetTLSAddr", "get-thread-local-storage-address",
15104 			 0);
15105 
15106   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
15107 			 "qGetTIBAddr", "get-thread-information-block-address",
15108 			 0);
15109 
15110   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
15111 			 "bc", "reverse-continue", 0);
15112 
15113   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
15114 			 "bs", "reverse-step", 0);
15115 
15116   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
15117 			 "qSupported", "supported-packets", 0);
15118 
15119   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
15120 			 "qSearch:memory", "search-memory", 0);
15121 
15122   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
15123 			 "qTStatus", "trace-status", 0);
15124 
15125   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
15126 			 "vFile:setfs", "hostio-setfs", 0);
15127 
15128   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
15129 			 "vFile:open", "hostio-open", 0);
15130 
15131   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
15132 			 "vFile:pread", "hostio-pread", 0);
15133 
15134   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
15135 			 "vFile:pwrite", "hostio-pwrite", 0);
15136 
15137   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
15138 			 "vFile:close", "hostio-close", 0);
15139 
15140   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
15141 			 "vFile:unlink", "hostio-unlink", 0);
15142 
15143   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
15144 			 "vFile:readlink", "hostio-readlink", 0);
15145 
15146   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
15147 			 "vFile:fstat", "hostio-fstat", 0);
15148 
15149   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
15150 			 "vAttach", "attach", 0);
15151 
15152   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
15153 			 "vRun", "run", 0);
15154 
15155   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
15156 			 "QStartNoAckMode", "noack", 0);
15157 
15158   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
15159 			 "vKill", "kill", 0);
15160 
15161   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
15162 			 "qAttached", "query-attached", 0);
15163 
15164   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
15165 			 "ConditionalTracepoints",
15166 			 "conditional-tracepoints", 0);
15167 
15168   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
15169 			 "ConditionalBreakpoints",
15170 			 "conditional-breakpoints", 0);
15171 
15172   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
15173 			 "BreakpointCommands",
15174 			 "breakpoint-commands", 0);
15175 
15176   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
15177 			 "FastTracepoints", "fast-tracepoints", 0);
15178 
15179   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
15180 			 "TracepointSource", "TracepointSource", 0);
15181 
15182   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
15183 			 "QAllow", "allow", 0);
15184 
15185   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
15186 			 "StaticTracepoints", "static-tracepoints", 0);
15187 
15188   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
15189 			 "InstallInTrace", "install-in-trace", 0);
15190 
15191   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
15192 			 "qXfer:statictrace:read", "read-sdata-object", 0);
15193 
15194   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
15195 			 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
15196 
15197   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
15198 			 "QDisableRandomization", "disable-randomization", 0);
15199 
15200   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
15201 			 "QAgent", "agent", 0);
15202 
15203   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
15204 			 "QTBuffer:size", "trace-buffer-size", 0);
15205 
15206   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
15207        "Qbtrace:off", "disable-btrace", 0);
15208 
15209   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
15210        "Qbtrace:bts", "enable-btrace-bts", 0);
15211 
15212   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
15213        "Qbtrace:pt", "enable-btrace-pt", 0);
15214 
15215   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
15216        "qXfer:btrace", "read-btrace", 0);
15217 
15218   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
15219        "qXfer:btrace-conf", "read-btrace-conf", 0);
15220 
15221   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
15222        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
15223 
15224   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
15225        "multiprocess-feature", "multiprocess-feature", 0);
15226 
15227   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
15228 			 "swbreak-feature", "swbreak-feature", 0);
15229 
15230   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
15231 			 "hwbreak-feature", "hwbreak-feature", 0);
15232 
15233   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
15234 			 "fork-event-feature", "fork-event-feature", 0);
15235 
15236   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
15237 			 "vfork-event-feature", "vfork-event-feature", 0);
15238 
15239   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
15240        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
15241 
15242   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
15243 			 "vContSupported", "verbose-resume-supported", 0);
15244 
15245   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
15246 			 "exec-event-feature", "exec-event-feature", 0);
15247 
15248   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
15249 			 "vCtrlC", "ctrl-c", 0);
15250 
15251   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
15252 			 "QThreadEvents", "thread-events", 0);
15253 
15254   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
15255 			 "N stop reply", "no-resumed-stop-reply", 0);
15256 
15257   add_packet_config_cmd (&remote_protocol_packets[PACKET_memory_tagging_feature],
15258 			 "memory-tagging-feature", "memory-tagging-feature", 0);
15259 
15260   /* Assert that we've registered "set remote foo-packet" commands
15261      for all packet configs.  */
15262   {
15263     int i;
15264 
15265     for (i = 0; i < PACKET_MAX; i++)
15266       {
15267 	/* Ideally all configs would have a command associated.  Some
15268 	   still don't though.  */
15269 	int excepted;
15270 
15271 	switch (i)
15272 	  {
15273 	  case PACKET_QNonStop:
15274 	  case PACKET_EnableDisableTracepoints_feature:
15275 	  case PACKET_tracenz_feature:
15276 	  case PACKET_DisconnectedTracing_feature:
15277 	  case PACKET_augmented_libraries_svr4_read_feature:
15278 	  case PACKET_qCRC:
15279 	    /* Additions to this list need to be well justified:
15280 	       pre-existing packets are OK; new packets are not.  */
15281 	    excepted = 1;
15282 	    break;
15283 	  default:
15284 	    excepted = 0;
15285 	    break;
15286 	  }
15287 
15288 	/* This catches both forgetting to add a config command, and
15289 	   forgetting to remove a packet from the exception list.  */
15290 	gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
15291       }
15292   }
15293 
15294   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
15295      Z sub-packet has its own set and show commands, but users may
15296      have sets to this variable in their .gdbinit files (or in their
15297      documentation).  */
15298   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
15299 				&remote_Z_packet_detect, _("\
15300 Set use of remote protocol `Z' packets."), _("\
15301 Show use of remote protocol `Z' packets."), _("\
15302 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
15303 packets."),
15304 				set_remote_protocol_Z_packet_cmd,
15305 				show_remote_protocol_Z_packet_cmd,
15306 				/* FIXME: i18n: Use of remote protocol
15307 				   `Z' packets is %s.  */
15308 				&remote_set_cmdlist, &remote_show_cmdlist);
15309 
15310   add_basic_prefix_cmd ("remote", class_files, _("\
15311 Manipulate files on the remote system.\n\
15312 Transfer files to and from the remote target system."),
15313 			&remote_cmdlist,
15314 			0 /* allow-unknown */, &cmdlist);
15315 
15316   add_cmd ("put", class_files, remote_put_command,
15317 	   _("Copy a local file to the remote system."),
15318 	   &remote_cmdlist);
15319 
15320   add_cmd ("get", class_files, remote_get_command,
15321 	   _("Copy a remote file to the local system."),
15322 	   &remote_cmdlist);
15323 
15324   add_cmd ("delete", class_files, remote_delete_command,
15325 	   _("Delete a remote file."),
15326 	   &remote_cmdlist);
15327 
15328   add_setshow_string_noescape_cmd ("exec-file", class_files,
15329 				   &remote_exec_file_var, _("\
15330 Set the remote pathname for \"run\"."), _("\
15331 Show the remote pathname for \"run\"."), NULL,
15332 				   set_remote_exec_file,
15333 				   show_remote_exec_file,
15334 				   &remote_set_cmdlist,
15335 				   &remote_show_cmdlist);
15336 
15337   add_setshow_boolean_cmd ("range-stepping", class_run,
15338 			   &use_range_stepping, _("\
15339 Enable or disable range stepping."), _("\
15340 Show whether target-assisted range stepping is enabled."), _("\
15341 If on, and the target supports it, when stepping a source line, GDB\n\
15342 tells the target to step the corresponding range of addresses itself instead\n\
15343 of issuing multiple single-steps.  This speeds up source level\n\
15344 stepping.  If off, GDB always issues single-steps, even if range\n\
15345 stepping is supported by the target.  The default is on."),
15346 			   set_range_stepping,
15347 			   show_range_stepping,
15348 			   &setlist,
15349 			   &showlist);
15350 
15351   add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
15352 Set watchdog timer."), _("\
15353 Show watchdog timer."), _("\
15354 When non-zero, this timeout is used instead of waiting forever for a target\n\
15355 to finish a low-level step or continue operation.  If the specified amount\n\
15356 of time passes without a response from the target, an error occurs."),
15357 			    NULL,
15358 			    show_watchdog,
15359 			    &setlist, &showlist);
15360 
15361   add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class,
15362 				       &remote_packet_max_chars, _("\
15363 Set the maximum number of characters to display for each remote packet."), _("\
15364 Show the maximum number of characters to display for each remote packet."), _("\
15365 Specify \"unlimited\" to display all the characters."),
15366 				       NULL, show_remote_packet_max_chars,
15367 				       &setdebuglist, &showdebuglist);
15368 
15369   add_setshow_boolean_cmd ("remote", no_class, &remote_debug,
15370 			   _("Set debugging of remote protocol."),
15371 			   _("Show debugging of remote protocol."),
15372 			   _("\
15373 When enabled, each packet sent or received with the remote target\n\
15374 is displayed."),
15375 			   NULL,
15376 			   show_remote_debug,
15377 			   &setdebuglist, &showdebuglist);
15378 
15379   add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
15380 				       &remote_timeout, _("\
15381 Set timeout limit to wait for target to respond."), _("\
15382 Show timeout limit to wait for target to respond."), _("\
15383 This value is used to set the time limit for gdb to wait for a response\n\
15384 from the target."),
15385 				       NULL,
15386 				       show_remote_timeout,
15387 				       &setlist, &showlist);
15388 
15389   /* Eventually initialize fileio.  See fileio.c */
15390   initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist);
15391 
15392 #if GDB_SELF_TEST
15393   selftests::register_test ("remote_memory_tagging",
15394 			    selftests::test_memory_tagging_functions);
15395 #endif
15396 }
15397