f2271ad3b5066e5b14feae995b3e487d17be738c
[deliverable/binutils-gdb.git] / gdb / remote.c
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
413 const target_info &info () const override
414 { return remote_target_info; }
415
416 const char *connection_string () override;
417
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
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
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:
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
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
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 }
This page took 0.317246 seconds and 3 git commands to generate.