]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote.c
Change target_ops::async to accept bool
[thirdparty/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3 Copyright (C) 1988-2022 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 /* True, if in no ack mode. That is, neither GDB nor the stub will
262 expect acks from each other. The connection is assumed to be
263 reliable. */
264 bool noack_mode = false;
265
266 /* True if we're connected in extended remote mode. */
267 bool extended = false;
268
269 /* True if we resumed the target and we're waiting for the target to
270 stop. In the mean time, we can't start another command/query.
271 The remote server wouldn't be ready to process it, so we'd
272 timeout waiting for a reply that would never come and eventually
273 we'd close the connection. This can happen in asynchronous mode
274 because we allow GDB commands while the target is running. */
275 bool waiting_for_stop_reply = false;
276
277 /* The status of the stub support for the various vCont actions. */
278 vCont_action_support supports_vCont;
279 /* Whether vCont support was probed already. This is a workaround
280 until packet_support is per-connection. */
281 bool supports_vCont_probed;
282
283 /* True if the user has pressed Ctrl-C, but the target hasn't
284 responded to that. */
285 bool ctrlc_pending_p = false;
286
287 /* True if we saw a Ctrl-C while reading or writing from/to the
288 remote descriptor. At that point it is not safe to send a remote
289 interrupt packet, so we instead remember we saw the Ctrl-C and
290 process it once we're done with sending/receiving the current
291 packet, which should be shortly. If however that takes too long,
292 and the user presses Ctrl-C again, we offer to disconnect. */
293 bool got_ctrlc_during_io = false;
294
295 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
296 remote_open knows that we don't have a file open when the program
297 starts. */
298 struct serial *remote_desc = nullptr;
299
300 /* These are the threads which we last sent to the remote system. The
301 TID member will be -1 for all or -2 for not sent yet. */
302 ptid_t general_thread = null_ptid;
303 ptid_t continue_thread = null_ptid;
304
305 /* This is the traceframe which we last selected on the remote system.
306 It will be -1 if no traceframe is selected. */
307 int remote_traceframe_number = -1;
308
309 char *last_pass_packet = nullptr;
310
311 /* The last QProgramSignals packet sent to the target. We bypass
312 sending a new program signals list down to the target if the new
313 packet is exactly the same as the last we sent. IOW, we only let
314 the target know about program signals list changes. */
315 char *last_program_signals_packet = nullptr;
316
317 gdb_signal last_sent_signal = GDB_SIGNAL_0;
318
319 bool last_sent_step = false;
320
321 /* The execution direction of the last resume we got. */
322 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
323
324 char *finished_object = nullptr;
325 char *finished_annex = nullptr;
326 ULONGEST finished_offset = 0;
327
328 /* Should we try the 'ThreadInfo' query packet?
329
330 This variable (NOT available to the user: auto-detect only!)
331 determines whether GDB will use the new, simpler "ThreadInfo"
332 query or the older, more complex syntax for thread queries.
333 This is an auto-detect variable (set to true at each connect,
334 and set to false when the target fails to recognize it). */
335 bool use_threadinfo_query = false;
336 bool use_threadextra_query = false;
337
338 threadref echo_nextthread {};
339 threadref nextthread {};
340 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
341
342 /* The state of remote notification. */
343 struct remote_notif_state *notif_state = nullptr;
344
345 /* The branch trace configuration. */
346 struct btrace_config btrace_config {};
347
348 /* The argument to the last "vFile:setfs:" packet we sent, used
349 to avoid sending repeated unnecessary "vFile:setfs:" packets.
350 Initialized to -1 to indicate that no "vFile:setfs:" packet
351 has yet been sent. */
352 int fs_pid = -1;
353
354 /* A readahead cache for vFile:pread. Often, reading a binary
355 involves a sequence of small reads. E.g., when parsing an ELF
356 file. A readahead cache helps mostly the case of remote
357 debugging on a connection with higher latency, due to the
358 request/reply nature of the RSP. We only cache data for a single
359 file descriptor at a time. */
360 struct readahead_cache readahead_cache;
361
362 /* The list of already fetched and acknowledged stop events. This
363 queue is used for notification Stop, and other notifications
364 don't need queue for their events, because the notification
365 events of Stop can't be consumed immediately, so that events
366 should be queued first, and be consumed by remote_wait_{ns,as}
367 one per time. Other notifications can consume their events
368 immediately, so queue is not needed for them. */
369 std::vector<stop_reply_up> stop_reply_queue;
370
371 /* Asynchronous signal handle registered as event loop source for
372 when we have pending events ready to be passed to the core. */
373 struct async_event_handler *remote_async_inferior_event_token = nullptr;
374
375 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
376 ``forever'' still use the normal timeout mechanism. This is
377 currently used by the ASYNC code to guarentee that target reads
378 during the initial connect always time-out. Once getpkt has been
379 modified to return a timeout indication and, in turn
380 remote_wait()/wait_for_inferior() have gained a timeout parameter
381 this can go away. */
382 int wait_forever_enabled_p = 1;
383
384 private:
385 /* Mapping of remote protocol data for each gdbarch. Usually there
386 is only one entry here, though we may see more with stubs that
387 support multi-process. */
388 std::unordered_map<struct gdbarch *, remote_arch_state>
389 m_arch_states;
390 };
391
392 static const target_info remote_target_info = {
393 "remote",
394 N_("Remote target using gdb-specific protocol"),
395 remote_doc
396 };
397
398 class remote_target : public process_stratum_target
399 {
400 public:
401 remote_target () = default;
402 ~remote_target () override;
403
404 const target_info &info () const override
405 { return remote_target_info; }
406
407 const char *connection_string () override;
408
409 thread_control_capabilities get_thread_control_capabilities () override
410 { return tc_schedlock; }
411
412 /* Open a remote connection. */
413 static void open (const char *, int);
414
415 void close () override;
416
417 void detach (inferior *, int) override;
418 void disconnect (const char *, int) override;
419
420 void commit_resumed () override;
421 void resume (ptid_t, int, enum gdb_signal) override;
422 ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
423 bool has_pending_events () override;
424
425 void fetch_registers (struct regcache *, int) override;
426 void store_registers (struct regcache *, int) override;
427 void prepare_to_store (struct regcache *) override;
428
429 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
430
431 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
432 enum remove_bp_reason) override;
433
434
435 bool stopped_by_sw_breakpoint () override;
436 bool supports_stopped_by_sw_breakpoint () override;
437
438 bool stopped_by_hw_breakpoint () override;
439
440 bool supports_stopped_by_hw_breakpoint () override;
441
442 bool stopped_by_watchpoint () override;
443
444 bool stopped_data_address (CORE_ADDR *) override;
445
446 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
447
448 int can_use_hw_breakpoint (enum bptype, int, int) override;
449
450 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
451
452 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
453
454 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
455
456 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
457 struct expression *) override;
458
459 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
460 struct expression *) override;
461
462 void kill () override;
463
464 void load (const char *, int) override;
465
466 void mourn_inferior () override;
467
468 void pass_signals (gdb::array_view<const unsigned char>) override;
469
470 int set_syscall_catchpoint (int, bool, int,
471 gdb::array_view<const int>) override;
472
473 void program_signals (gdb::array_view<const unsigned char>) override;
474
475 bool thread_alive (ptid_t ptid) override;
476
477 const char *thread_name (struct thread_info *) override;
478
479 void update_thread_list () override;
480
481 std::string pid_to_str (ptid_t) override;
482
483 const char *extra_thread_info (struct thread_info *) override;
484
485 ptid_t get_ada_task_ptid (long lwp, ULONGEST thread) override;
486
487 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
488 int handle_len,
489 inferior *inf) override;
490
491 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
492 override;
493
494 void stop (ptid_t) override;
495
496 void interrupt () override;
497
498 void pass_ctrlc () override;
499
500 enum target_xfer_status xfer_partial (enum target_object object,
501 const char *annex,
502 gdb_byte *readbuf,
503 const gdb_byte *writebuf,
504 ULONGEST offset, ULONGEST len,
505 ULONGEST *xfered_len) override;
506
507 ULONGEST get_memory_xfer_limit () override;
508
509 void rcmd (const char *command, struct ui_file *output) override;
510
511 const char *pid_to_exec_file (int pid) override;
512
513 void log_command (const char *cmd) override
514 {
515 serial_log_command (this, cmd);
516 }
517
518 CORE_ADDR get_thread_local_address (ptid_t ptid,
519 CORE_ADDR load_module_addr,
520 CORE_ADDR offset) override;
521
522 bool can_execute_reverse () override;
523
524 std::vector<mem_region> memory_map () override;
525
526 void flash_erase (ULONGEST address, LONGEST length) override;
527
528 void flash_done () override;
529
530 const struct target_desc *read_description () override;
531
532 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
533 const gdb_byte *pattern, ULONGEST pattern_len,
534 CORE_ADDR *found_addrp) override;
535
536 bool can_async_p () override;
537
538 bool is_async_p () override;
539
540 void async (bool) override;
541
542 int async_wait_fd () override;
543
544 void thread_events (int) override;
545
546 int can_do_single_step () override;
547
548 void terminal_inferior () override;
549
550 void terminal_ours () override;
551
552 bool supports_non_stop () override;
553
554 bool supports_multi_process () override;
555
556 bool supports_disable_randomization () override;
557
558 bool filesystem_is_local () override;
559
560
561 int fileio_open (struct inferior *inf, const char *filename,
562 int flags, int mode, int warn_if_slow,
563 int *target_errno) override;
564
565 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
566 ULONGEST offset, int *target_errno) override;
567
568 int fileio_pread (int fd, gdb_byte *read_buf, int len,
569 ULONGEST offset, int *target_errno) override;
570
571 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
572
573 int fileio_close (int fd, int *target_errno) override;
574
575 int fileio_unlink (struct inferior *inf,
576 const char *filename,
577 int *target_errno) override;
578
579 gdb::optional<std::string>
580 fileio_readlink (struct inferior *inf,
581 const char *filename,
582 int *target_errno) override;
583
584 bool supports_enable_disable_tracepoint () override;
585
586 bool supports_string_tracing () override;
587
588 bool supports_evaluation_of_breakpoint_conditions () override;
589
590 bool can_run_breakpoint_commands () override;
591
592 void trace_init () override;
593
594 void download_tracepoint (struct bp_location *location) override;
595
596 bool can_download_tracepoint () override;
597
598 void download_trace_state_variable (const trace_state_variable &tsv) override;
599
600 void enable_tracepoint (struct bp_location *location) override;
601
602 void disable_tracepoint (struct bp_location *location) override;
603
604 void trace_set_readonly_regions () override;
605
606 void trace_start () override;
607
608 int get_trace_status (struct trace_status *ts) override;
609
610 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
611 override;
612
613 void trace_stop () override;
614
615 int trace_find (enum trace_find_type type, int num,
616 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
617
618 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
619
620 int save_trace_data (const char *filename) override;
621
622 int upload_tracepoints (struct uploaded_tp **utpp) override;
623
624 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
625
626 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
627
628 int get_min_fast_tracepoint_insn_len () override;
629
630 void set_disconnected_tracing (int val) override;
631
632 void set_circular_trace_buffer (int val) override;
633
634 void set_trace_buffer_size (LONGEST val) override;
635
636 bool set_trace_notes (const char *user, const char *notes,
637 const char *stopnotes) override;
638
639 int core_of_thread (ptid_t ptid) override;
640
641 int verify_memory (const gdb_byte *data,
642 CORE_ADDR memaddr, ULONGEST size) override;
643
644
645 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
646
647 void set_permissions () override;
648
649 bool static_tracepoint_marker_at (CORE_ADDR,
650 struct static_tracepoint_marker *marker)
651 override;
652
653 std::vector<static_tracepoint_marker>
654 static_tracepoint_markers_by_strid (const char *id) override;
655
656 traceframe_info_up traceframe_info () override;
657
658 bool use_agent (bool use) override;
659 bool can_use_agent () override;
660
661 struct btrace_target_info *
662 enable_btrace (thread_info *tp, const struct btrace_config *conf) override;
663
664 void disable_btrace (struct btrace_target_info *tinfo) override;
665
666 void teardown_btrace (struct btrace_target_info *tinfo) override;
667
668 enum btrace_error read_btrace (struct btrace_data *data,
669 struct btrace_target_info *btinfo,
670 enum btrace_read_type type) override;
671
672 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
673 bool augmented_libraries_svr4_read () override;
674 void follow_fork (inferior *, ptid_t, target_waitkind, bool, bool) override;
675 void follow_exec (inferior *, ptid_t, const char *) override;
676 int insert_fork_catchpoint (int) override;
677 int remove_fork_catchpoint (int) override;
678 int insert_vfork_catchpoint (int) override;
679 int remove_vfork_catchpoint (int) override;
680 int insert_exec_catchpoint (int) override;
681 int remove_exec_catchpoint (int) override;
682 enum exec_direction_kind execution_direction () override;
683
684 bool supports_memory_tagging () override;
685
686 bool fetch_memtags (CORE_ADDR address, size_t len,
687 gdb::byte_vector &tags, int type) override;
688
689 bool store_memtags (CORE_ADDR address, size_t len,
690 const gdb::byte_vector &tags, int type) override;
691
692 public: /* Remote specific methods. */
693
694 void remote_download_command_source (int num, ULONGEST addr,
695 struct command_line *cmds);
696
697 void remote_file_put (const char *local_file, const char *remote_file,
698 int from_tty);
699 void remote_file_get (const char *remote_file, const char *local_file,
700 int from_tty);
701 void remote_file_delete (const char *remote_file, int from_tty);
702
703 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
704 ULONGEST offset, int *remote_errno);
705 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
706 ULONGEST offset, int *remote_errno);
707 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
708 ULONGEST offset, int *remote_errno);
709
710 int remote_hostio_send_command (int command_bytes, int which_packet,
711 int *remote_errno, const char **attachment,
712 int *attachment_len);
713 int remote_hostio_set_filesystem (struct inferior *inf,
714 int *remote_errno);
715 /* We should get rid of this and use fileio_open directly. */
716 int remote_hostio_open (struct inferior *inf, const char *filename,
717 int flags, int mode, int warn_if_slow,
718 int *remote_errno);
719 int remote_hostio_close (int fd, int *remote_errno);
720
721 int remote_hostio_unlink (inferior *inf, const char *filename,
722 int *remote_errno);
723
724 struct remote_state *get_remote_state ();
725
726 long get_remote_packet_size (void);
727 long get_memory_packet_size (struct memory_packet_config *config);
728
729 long get_memory_write_packet_size ();
730 long get_memory_read_packet_size ();
731
732 char *append_pending_thread_resumptions (char *p, char *endp,
733 ptid_t ptid);
734 static void open_1 (const char *name, int from_tty, int extended_p);
735 void start_remote (int from_tty, int extended_p);
736 void remote_detach_1 (struct inferior *inf, int from_tty);
737
738 char *append_resumption (char *p, char *endp,
739 ptid_t ptid, int step, gdb_signal siggnal);
740 int remote_resume_with_vcont (ptid_t scope_ptid, int step,
741 gdb_signal siggnal);
742
743 thread_info *add_current_inferior_and_thread (const char *wait_status);
744
745 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
746 target_wait_flags options);
747 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
748 target_wait_flags options);
749
750 ptid_t process_stop_reply (struct stop_reply *stop_reply,
751 target_waitstatus *status);
752
753 ptid_t select_thread_for_ambiguous_stop_reply
754 (const struct target_waitstatus &status);
755
756 void remote_notice_new_inferior (ptid_t currthread, bool executing);
757
758 void print_one_stopped_thread (thread_info *thread);
759 void process_initial_stop_replies (int from_tty);
760
761 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing,
762 bool silent_p);
763
764 void btrace_sync_conf (const btrace_config *conf);
765
766 void remote_btrace_maybe_reopen ();
767
768 void remove_new_fork_children (threads_listing_context *context);
769 void kill_new_fork_children (inferior *inf);
770 void discard_pending_stop_replies (struct inferior *inf);
771 int stop_reply_queue_length ();
772
773 void check_pending_events_prevent_wildcard_vcont
774 (bool *may_global_wildcard_vcont);
775
776 void discard_pending_stop_replies_in_queue ();
777 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
778 struct stop_reply *queued_stop_reply (ptid_t ptid);
779 int peek_stop_reply (ptid_t ptid);
780 void remote_parse_stop_reply (const char *buf, stop_reply *event);
781
782 void remote_stop_ns (ptid_t ptid);
783 void remote_interrupt_as ();
784 void remote_interrupt_ns ();
785
786 char *remote_get_noisy_reply ();
787 int remote_query_attached (int pid);
788 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
789 int try_open_exec);
790
791 ptid_t remote_current_thread (ptid_t oldpid);
792 ptid_t get_current_thread (const char *wait_status);
793
794 void set_thread (ptid_t ptid, int gen);
795 void set_general_thread (ptid_t ptid);
796 void set_continue_thread (ptid_t ptid);
797 void set_general_process ();
798
799 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
800
801 int remote_unpack_thread_info_response (const char *pkt, threadref *expectedref,
802 gdb_ext_thread_info *info);
803 int remote_get_threadinfo (threadref *threadid, int fieldset,
804 gdb_ext_thread_info *info);
805
806 int parse_threadlist_response (const char *pkt, int result_limit,
807 threadref *original_echo,
808 threadref *resultlist,
809 int *doneflag);
810 int remote_get_threadlist (int startflag, threadref *nextthread,
811 int result_limit, int *done, int *result_count,
812 threadref *threadlist);
813
814 int remote_threadlist_iterator (rmt_thread_action stepfunction,
815 void *context, int looplimit);
816
817 int remote_get_threads_with_ql (threads_listing_context *context);
818 int remote_get_threads_with_qxfer (threads_listing_context *context);
819 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
820
821 void extended_remote_restart ();
822
823 void get_offsets ();
824
825 void remote_check_symbols ();
826
827 void remote_supported_packet (const struct protocol_feature *feature,
828 enum packet_support support,
829 const char *argument);
830
831 void remote_query_supported ();
832
833 void remote_packet_size (const protocol_feature *feature,
834 packet_support support, const char *value);
835
836 void remote_serial_quit_handler ();
837
838 void remote_detach_pid (int pid);
839
840 void remote_vcont_probe ();
841
842 void remote_resume_with_hc (ptid_t ptid, int step,
843 gdb_signal siggnal);
844
845 void send_interrupt_sequence ();
846 void interrupt_query ();
847
848 void remote_notif_get_pending_events (notif_client *nc);
849
850 int fetch_register_using_p (struct regcache *regcache,
851 packet_reg *reg);
852 int send_g_packet ();
853 void process_g_packet (struct regcache *regcache);
854 void fetch_registers_using_g (struct regcache *regcache);
855 int store_register_using_P (const struct regcache *regcache,
856 packet_reg *reg);
857 void store_registers_using_G (const struct regcache *regcache);
858
859 void set_remote_traceframe ();
860
861 void check_binary_download (CORE_ADDR addr);
862
863 target_xfer_status remote_write_bytes_aux (const char *header,
864 CORE_ADDR memaddr,
865 const gdb_byte *myaddr,
866 ULONGEST len_units,
867 int unit_size,
868 ULONGEST *xfered_len_units,
869 char packet_format,
870 int use_length);
871
872 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
873 const gdb_byte *myaddr, ULONGEST len,
874 int unit_size, ULONGEST *xfered_len);
875
876 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
877 ULONGEST len_units,
878 int unit_size, ULONGEST *xfered_len_units);
879
880 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
881 ULONGEST memaddr,
882 ULONGEST len,
883 int unit_size,
884 ULONGEST *xfered_len);
885
886 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
887 gdb_byte *myaddr, ULONGEST len,
888 int unit_size,
889 ULONGEST *xfered_len);
890
891 packet_result remote_send_printf (const char *format, ...)
892 ATTRIBUTE_PRINTF (2, 3);
893
894 target_xfer_status remote_flash_write (ULONGEST address,
895 ULONGEST length, ULONGEST *xfered_len,
896 const gdb_byte *data);
897
898 int readchar (int timeout);
899
900 void remote_serial_write (const char *str, int len);
901
902 int putpkt (const char *buf);
903 int putpkt_binary (const char *buf, int cnt);
904
905 int putpkt (const gdb::char_vector &buf)
906 {
907 return putpkt (buf.data ());
908 }
909
910 void skip_frame ();
911 long read_frame (gdb::char_vector *buf_p);
912 void getpkt (gdb::char_vector *buf, int forever);
913 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
914 int expecting_notif, int *is_notif);
915 int getpkt_sane (gdb::char_vector *buf, int forever);
916 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
917 int *is_notif);
918 int remote_vkill (int pid);
919 void remote_kill_k ();
920
921 void extended_remote_disable_randomization (int val);
922 int extended_remote_run (const std::string &args);
923
924 void send_environment_packet (const char *action,
925 const char *packet,
926 const char *value);
927
928 void extended_remote_environment_support ();
929 void extended_remote_set_inferior_cwd ();
930
931 target_xfer_status remote_write_qxfer (const char *object_name,
932 const char *annex,
933 const gdb_byte *writebuf,
934 ULONGEST offset, LONGEST len,
935 ULONGEST *xfered_len,
936 struct packet_config *packet);
937
938 target_xfer_status remote_read_qxfer (const char *object_name,
939 const char *annex,
940 gdb_byte *readbuf, ULONGEST offset,
941 LONGEST len,
942 ULONGEST *xfered_len,
943 struct packet_config *packet);
944
945 void push_stop_reply (struct stop_reply *new_event);
946
947 bool vcont_r_supported ();
948
949 private:
950
951 bool start_remote_1 (int from_tty, int extended_p);
952
953 /* The remote state. Don't reference this directly. Use the
954 get_remote_state method instead. */
955 remote_state m_remote_state;
956 };
957
958 static const target_info extended_remote_target_info = {
959 "extended-remote",
960 N_("Extended remote target using gdb-specific protocol"),
961 remote_doc
962 };
963
964 /* Set up the extended remote target by extending the standard remote
965 target and adding to it. */
966
967 class extended_remote_target final : public remote_target
968 {
969 public:
970 const target_info &info () const override
971 { return extended_remote_target_info; }
972
973 /* Open an extended-remote connection. */
974 static void open (const char *, int);
975
976 bool can_create_inferior () override { return true; }
977 void create_inferior (const char *, const std::string &,
978 char **, int) override;
979
980 void detach (inferior *, int) override;
981
982 bool can_attach () override { return true; }
983 void attach (const char *, int) override;
984
985 void post_attach (int) override;
986 bool supports_disable_randomization () override;
987 };
988
989 struct stop_reply : public notif_event
990 {
991 ~stop_reply ();
992
993 /* The identifier of the thread about this event */
994 ptid_t ptid;
995
996 /* The remote state this event is associated with. When the remote
997 connection, represented by a remote_state object, is closed,
998 all the associated stop_reply events should be released. */
999 struct remote_state *rs;
1000
1001 struct target_waitstatus ws;
1002
1003 /* The architecture associated with the expedited registers. */
1004 gdbarch *arch;
1005
1006 /* Expedited registers. This makes remote debugging a bit more
1007 efficient for those targets that provide critical registers as
1008 part of their normal status mechanism (as another roundtrip to
1009 fetch them is avoided). */
1010 std::vector<cached_reg_t> regcache;
1011
1012 enum target_stop_reason stop_reason;
1013
1014 CORE_ADDR watch_data_address;
1015
1016 int core;
1017 };
1018
1019 /* Return TARGET as a remote_target if it is one, else nullptr. */
1020
1021 static remote_target *
1022 as_remote_target (process_stratum_target *target)
1023 {
1024 return dynamic_cast<remote_target *> (target);
1025 }
1026
1027 /* See remote.h. */
1028
1029 bool
1030 is_remote_target (process_stratum_target *target)
1031 {
1032 return as_remote_target (target) != nullptr;
1033 }
1034
1035 /* Per-program-space data key. */
1036 static const struct program_space_key<char, gdb::xfree_deleter<char>>
1037 remote_pspace_data;
1038
1039 /* The variable registered as the control variable used by the
1040 remote exec-file commands. While the remote exec-file setting is
1041 per-program-space, the set/show machinery uses this as the
1042 location of the remote exec-file value. */
1043 static std::string remote_exec_file_var;
1044
1045 /* The size to align memory write packets, when practical. The protocol
1046 does not guarantee any alignment, and gdb will generate short
1047 writes and unaligned writes, but even as a best-effort attempt this
1048 can improve bulk transfers. For instance, if a write is misaligned
1049 relative to the target's data bus, the stub may need to make an extra
1050 round trip fetching data from the target. This doesn't make a
1051 huge difference, but it's easy to do, so we try to be helpful.
1052
1053 The alignment chosen is arbitrary; usually data bus width is
1054 important here, not the possibly larger cache line size. */
1055 enum { REMOTE_ALIGN_WRITES = 16 };
1056
1057 /* Prototypes for local functions. */
1058
1059 static int hexnumlen (ULONGEST num);
1060
1061 static int stubhex (int ch);
1062
1063 static int hexnumstr (char *, ULONGEST);
1064
1065 static int hexnumnstr (char *, ULONGEST, int);
1066
1067 static CORE_ADDR remote_address_masked (CORE_ADDR);
1068
1069 static int stub_unpack_int (const char *buff, int fieldlength);
1070
1071 struct packet_config;
1072
1073 static void show_remote_protocol_packet_cmd (struct ui_file *file,
1074 int from_tty,
1075 struct cmd_list_element *c,
1076 const char *value);
1077
1078 static ptid_t read_ptid (const char *buf, const char **obuf);
1079
1080 static void remote_async_inferior_event_handler (gdb_client_data);
1081
1082 static bool remote_read_description_p (struct target_ops *target);
1083
1084 static void remote_console_output (const char *msg);
1085
1086 static void remote_btrace_reset (remote_state *rs);
1087
1088 static void remote_unpush_and_throw (remote_target *target);
1089
1090 /* For "remote". */
1091
1092 static struct cmd_list_element *remote_cmdlist;
1093
1094 /* For "set remote" and "show remote". */
1095
1096 static struct cmd_list_element *remote_set_cmdlist;
1097 static struct cmd_list_element *remote_show_cmdlist;
1098
1099 /* Controls whether GDB is willing to use range stepping. */
1100
1101 static bool use_range_stepping = true;
1102
1103 /* From the remote target's point of view, each thread is in one of these three
1104 states. */
1105 enum class resume_state
1106 {
1107 /* Not resumed - we haven't been asked to resume this thread. */
1108 NOT_RESUMED,
1109
1110 /* We have been asked to resume this thread, but haven't sent a vCont action
1111 for it yet. We'll need to consider it next time commit_resume is
1112 called. */
1113 RESUMED_PENDING_VCONT,
1114
1115 /* We have been asked to resume this thread, and we have sent a vCont action
1116 for it. */
1117 RESUMED,
1118 };
1119
1120 /* Information about a thread's pending vCont-resume. Used when a thread is in
1121 the remote_resume_state::RESUMED_PENDING_VCONT state. remote_target::resume
1122 stores this information which is then picked up by
1123 remote_target::commit_resume to know which is the proper action for this
1124 thread to include in the vCont packet. */
1125 struct resumed_pending_vcont_info
1126 {
1127 /* True if the last resume call for this thread was a step request, false
1128 if a continue request. */
1129 bool step;
1130
1131 /* The signal specified in the last resume call for this thread. */
1132 gdb_signal sig;
1133 };
1134
1135 /* Private data that we'll store in (struct thread_info)->priv. */
1136 struct remote_thread_info : public private_thread_info
1137 {
1138 std::string extra;
1139 std::string name;
1140 int core = -1;
1141
1142 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1143 sequence of bytes. */
1144 gdb::byte_vector thread_handle;
1145
1146 /* Whether the target stopped for a breakpoint/watchpoint. */
1147 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
1148
1149 /* This is set to the data address of the access causing the target
1150 to stop for a watchpoint. */
1151 CORE_ADDR watch_data_address = 0;
1152
1153 /* Get the thread's resume state. */
1154 enum resume_state get_resume_state () const
1155 {
1156 return m_resume_state;
1157 }
1158
1159 /* Put the thread in the NOT_RESUMED state. */
1160 void set_not_resumed ()
1161 {
1162 m_resume_state = resume_state::NOT_RESUMED;
1163 }
1164
1165 /* Put the thread in the RESUMED_PENDING_VCONT state. */
1166 void set_resumed_pending_vcont (bool step, gdb_signal sig)
1167 {
1168 m_resume_state = resume_state::RESUMED_PENDING_VCONT;
1169 m_resumed_pending_vcont_info.step = step;
1170 m_resumed_pending_vcont_info.sig = sig;
1171 }
1172
1173 /* Get the information this thread's pending vCont-resumption.
1174
1175 Must only be called if the thread is in the RESUMED_PENDING_VCONT resume
1176 state. */
1177 const struct resumed_pending_vcont_info &resumed_pending_vcont_info () const
1178 {
1179 gdb_assert (m_resume_state == resume_state::RESUMED_PENDING_VCONT);
1180
1181 return m_resumed_pending_vcont_info;
1182 }
1183
1184 /* Put the thread in the VCONT_RESUMED state. */
1185 void set_resumed ()
1186 {
1187 m_resume_state = resume_state::RESUMED;
1188 }
1189
1190 private:
1191 /* Resume state for this thread. This is used to implement vCont action
1192 coalescing (only when the target operates in non-stop mode).
1193
1194 remote_target::resume moves the thread to the RESUMED_PENDING_VCONT state,
1195 which notes that this thread must be considered in the next commit_resume
1196 call.
1197
1198 remote_target::commit_resume sends a vCont packet with actions for the
1199 threads in the RESUMED_PENDING_VCONT state and moves them to the
1200 VCONT_RESUMED state.
1201
1202 When reporting a stop to the core for a thread, that thread is moved back
1203 to the NOT_RESUMED state. */
1204 enum resume_state m_resume_state = resume_state::NOT_RESUMED;
1205
1206 /* Extra info used if the thread is in the RESUMED_PENDING_VCONT state. */
1207 struct resumed_pending_vcont_info m_resumed_pending_vcont_info;
1208 };
1209
1210 remote_state::remote_state ()
1211 : buf (400)
1212 {
1213 }
1214
1215 remote_state::~remote_state ()
1216 {
1217 xfree (this->last_pass_packet);
1218 xfree (this->last_program_signals_packet);
1219 xfree (this->finished_object);
1220 xfree (this->finished_annex);
1221 }
1222
1223 /* Utility: generate error from an incoming stub packet. */
1224 static void
1225 trace_error (char *buf)
1226 {
1227 if (*buf++ != 'E')
1228 return; /* not an error msg */
1229 switch (*buf)
1230 {
1231 case '1': /* malformed packet error */
1232 if (*++buf == '0') /* general case: */
1233 error (_("remote.c: error in outgoing packet."));
1234 else
1235 error (_("remote.c: error in outgoing packet at field #%ld."),
1236 strtol (buf, NULL, 16));
1237 default:
1238 error (_("Target returns error code '%s'."), buf);
1239 }
1240 }
1241
1242 /* Utility: wait for reply from stub, while accepting "O" packets. */
1243
1244 char *
1245 remote_target::remote_get_noisy_reply ()
1246 {
1247 struct remote_state *rs = get_remote_state ();
1248
1249 do /* Loop on reply from remote stub. */
1250 {
1251 char *buf;
1252
1253 QUIT; /* Allow user to bail out with ^C. */
1254 getpkt (&rs->buf, 0);
1255 buf = rs->buf.data ();
1256 if (buf[0] == 'E')
1257 trace_error (buf);
1258 else if (startswith (buf, "qRelocInsn:"))
1259 {
1260 ULONGEST ul;
1261 CORE_ADDR from, to, org_to;
1262 const char *p, *pp;
1263 int adjusted_size = 0;
1264 int relocated = 0;
1265
1266 p = buf + strlen ("qRelocInsn:");
1267 pp = unpack_varlen_hex (p, &ul);
1268 if (*pp != ';')
1269 error (_("invalid qRelocInsn packet: %s"), buf);
1270 from = ul;
1271
1272 p = pp + 1;
1273 unpack_varlen_hex (p, &ul);
1274 to = ul;
1275
1276 org_to = to;
1277
1278 try
1279 {
1280 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
1281 relocated = 1;
1282 }
1283 catch (const gdb_exception &ex)
1284 {
1285 if (ex.error == MEMORY_ERROR)
1286 {
1287 /* Propagate memory errors silently back to the
1288 target. The stub may have limited the range of
1289 addresses we can write to, for example. */
1290 }
1291 else
1292 {
1293 /* Something unexpectedly bad happened. Be verbose
1294 so we can tell what, and propagate the error back
1295 to the stub, so it doesn't get stuck waiting for
1296 a response. */
1297 exception_fprintf (gdb_stderr, ex,
1298 _("warning: relocating instruction: "));
1299 }
1300 putpkt ("E01");
1301 }
1302
1303 if (relocated)
1304 {
1305 adjusted_size = to - org_to;
1306
1307 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
1308 putpkt (buf);
1309 }
1310 }
1311 else if (buf[0] == 'O' && buf[1] != 'K')
1312 remote_console_output (buf + 1); /* 'O' message from stub */
1313 else
1314 return buf; /* Here's the actual reply. */
1315 }
1316 while (1);
1317 }
1318
1319 struct remote_arch_state *
1320 remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
1321 {
1322 remote_arch_state *rsa;
1323
1324 auto it = this->m_arch_states.find (gdbarch);
1325 if (it == this->m_arch_states.end ())
1326 {
1327 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1328 std::forward_as_tuple (gdbarch),
1329 std::forward_as_tuple (gdbarch));
1330 rsa = &p.first->second;
1331
1332 /* Make sure that the packet buffer is plenty big enough for
1333 this architecture. */
1334 if (this->buf.size () < rsa->remote_packet_size)
1335 this->buf.resize (2 * rsa->remote_packet_size);
1336 }
1337 else
1338 rsa = &it->second;
1339
1340 return rsa;
1341 }
1342
1343 /* Fetch the global remote target state. */
1344
1345 remote_state *
1346 remote_target::get_remote_state ()
1347 {
1348 /* Make sure that the remote architecture state has been
1349 initialized, because doing so might reallocate rs->buf. Any
1350 function which calls getpkt also needs to be mindful of changes
1351 to rs->buf, but this call limits the number of places which run
1352 into trouble. */
1353 m_remote_state.get_remote_arch_state (target_gdbarch ());
1354
1355 return &m_remote_state;
1356 }
1357
1358 /* Fetch the remote exec-file from the current program space. */
1359
1360 static const char *
1361 get_remote_exec_file (void)
1362 {
1363 char *remote_exec_file;
1364
1365 remote_exec_file = remote_pspace_data.get (current_program_space);
1366 if (remote_exec_file == NULL)
1367 return "";
1368
1369 return remote_exec_file;
1370 }
1371
1372 /* Set the remote exec file for PSPACE. */
1373
1374 static void
1375 set_pspace_remote_exec_file (struct program_space *pspace,
1376 const char *remote_exec_file)
1377 {
1378 char *old_file = remote_pspace_data.get (pspace);
1379
1380 xfree (old_file);
1381 remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
1382 }
1383
1384 /* The "set/show remote exec-file" set command hook. */
1385
1386 static void
1387 set_remote_exec_file (const char *ignored, int from_tty,
1388 struct cmd_list_element *c)
1389 {
1390 set_pspace_remote_exec_file (current_program_space,
1391 remote_exec_file_var.c_str ());
1392 }
1393
1394 /* The "set/show remote exec-file" show command hook. */
1395
1396 static void
1397 show_remote_exec_file (struct ui_file *file, int from_tty,
1398 struct cmd_list_element *cmd, const char *value)
1399 {
1400 gdb_printf (file, "%s\n", get_remote_exec_file ());
1401 }
1402
1403 static int
1404 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
1405 {
1406 int regnum, num_remote_regs, offset;
1407 struct packet_reg **remote_regs;
1408
1409 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1410 {
1411 struct packet_reg *r = &regs[regnum];
1412
1413 if (register_size (gdbarch, regnum) == 0)
1414 /* Do not try to fetch zero-sized (placeholder) registers. */
1415 r->pnum = -1;
1416 else
1417 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1418
1419 r->regnum = regnum;
1420 }
1421
1422 /* Define the g/G packet format as the contents of each register
1423 with a remote protocol number, in order of ascending protocol
1424 number. */
1425
1426 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
1427 for (num_remote_regs = 0, regnum = 0;
1428 regnum < gdbarch_num_regs (gdbarch);
1429 regnum++)
1430 if (regs[regnum].pnum != -1)
1431 remote_regs[num_remote_regs++] = &regs[regnum];
1432
1433 std::sort (remote_regs, remote_regs + num_remote_regs,
1434 [] (const packet_reg *a, const packet_reg *b)
1435 { return a->pnum < b->pnum; });
1436
1437 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1438 {
1439 remote_regs[regnum]->in_g_packet = 1;
1440 remote_regs[regnum]->offset = offset;
1441 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
1442 }
1443
1444 return offset;
1445 }
1446
1447 /* Given the architecture described by GDBARCH, return the remote
1448 protocol register's number and the register's offset in the g/G
1449 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1450 If the target does not have a mapping for REGNUM, return false,
1451 otherwise, return true. */
1452
1453 int
1454 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1455 int *pnum, int *poffset)
1456 {
1457 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1458
1459 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
1460
1461 map_regcache_remote_table (gdbarch, regs.data ());
1462
1463 *pnum = regs[regnum].pnum;
1464 *poffset = regs[regnum].offset;
1465
1466 return *pnum != -1;
1467 }
1468
1469 remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
1470 {
1471 /* Use the architecture to build a regnum<->pnum table, which will be
1472 1:1 unless a feature set specifies otherwise. */
1473 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
1474
1475 /* Record the maximum possible size of the g packet - it may turn out
1476 to be smaller. */
1477 this->sizeof_g_packet
1478 = map_regcache_remote_table (gdbarch, this->regs.get ());
1479
1480 /* Default maximum number of characters in a packet body. Many
1481 remote stubs have a hardwired buffer size of 400 bytes
1482 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1483 as the maximum packet-size to ensure that the packet and an extra
1484 NUL character can always fit in the buffer. This stops GDB
1485 trashing stubs that try to squeeze an extra NUL into what is
1486 already a full buffer (As of 1999-12-04 that was most stubs). */
1487 this->remote_packet_size = 400 - 1;
1488
1489 /* This one is filled in when a ``g'' packet is received. */
1490 this->actual_register_packet_size = 0;
1491
1492 /* Should rsa->sizeof_g_packet needs more space than the
1493 default, adjust the size accordingly. Remember that each byte is
1494 encoded as two characters. 32 is the overhead for the packet
1495 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
1496 (``$NN:G...#NN'') is a better guess, the below has been padded a
1497 little. */
1498 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1499 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
1500 }
1501
1502 /* Get a pointer to the current remote target. If not connected to a
1503 remote target, return NULL. */
1504
1505 static remote_target *
1506 get_current_remote_target ()
1507 {
1508 target_ops *proc_target = current_inferior ()->process_target ();
1509 return dynamic_cast<remote_target *> (proc_target);
1510 }
1511
1512 /* Return the current allowed size of a remote packet. This is
1513 inferred from the current architecture, and should be used to
1514 limit the length of outgoing packets. */
1515 long
1516 remote_target::get_remote_packet_size ()
1517 {
1518 struct remote_state *rs = get_remote_state ();
1519 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1520
1521 if (rs->explicit_packet_size)
1522 return rs->explicit_packet_size;
1523
1524 return rsa->remote_packet_size;
1525 }
1526
1527 static struct packet_reg *
1528 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1529 long regnum)
1530 {
1531 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
1532 return NULL;
1533 else
1534 {
1535 struct packet_reg *r = &rsa->regs[regnum];
1536
1537 gdb_assert (r->regnum == regnum);
1538 return r;
1539 }
1540 }
1541
1542 static struct packet_reg *
1543 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1544 LONGEST pnum)
1545 {
1546 int i;
1547
1548 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
1549 {
1550 struct packet_reg *r = &rsa->regs[i];
1551
1552 if (r->pnum == pnum)
1553 return r;
1554 }
1555 return NULL;
1556 }
1557
1558 /* Allow the user to specify what sequence to send to the remote
1559 when he requests a program interruption: Although ^C is usually
1560 what remote systems expect (this is the default, here), it is
1561 sometimes preferable to send a break. On other systems such
1562 as the Linux kernel, a break followed by g, which is Magic SysRq g
1563 is required in order to interrupt the execution. */
1564 const char interrupt_sequence_control_c[] = "Ctrl-C";
1565 const char interrupt_sequence_break[] = "BREAK";
1566 const char interrupt_sequence_break_g[] = "BREAK-g";
1567 static const char *const interrupt_sequence_modes[] =
1568 {
1569 interrupt_sequence_control_c,
1570 interrupt_sequence_break,
1571 interrupt_sequence_break_g,
1572 NULL
1573 };
1574 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1575
1576 static void
1577 show_interrupt_sequence (struct ui_file *file, int from_tty,
1578 struct cmd_list_element *c,
1579 const char *value)
1580 {
1581 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1582 gdb_printf (file,
1583 _("Send the ASCII ETX character (Ctrl-c) "
1584 "to the remote target to interrupt the "
1585 "execution of the program.\n"));
1586 else if (interrupt_sequence_mode == interrupt_sequence_break)
1587 gdb_printf (file,
1588 _("send a break signal to the remote target "
1589 "to interrupt the execution of the program.\n"));
1590 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1591 gdb_printf (file,
1592 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1593 "the remote target to interrupt the execution "
1594 "of Linux kernel.\n"));
1595 else
1596 internal_error (__FILE__, __LINE__,
1597 _("Invalid value for interrupt_sequence_mode: %s."),
1598 interrupt_sequence_mode);
1599 }
1600
1601 /* This boolean variable specifies whether interrupt_sequence is sent
1602 to the remote target when gdb connects to it.
1603 This is mostly needed when you debug the Linux kernel: The Linux kernel
1604 expects BREAK g which is Magic SysRq g for connecting gdb. */
1605 static bool interrupt_on_connect = false;
1606
1607 /* This variable is used to implement the "set/show remotebreak" commands.
1608 Since these commands are now deprecated in favor of "set/show remote
1609 interrupt-sequence", it no longer has any effect on the code. */
1610 static bool remote_break;
1611
1612 static void
1613 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
1614 {
1615 if (remote_break)
1616 interrupt_sequence_mode = interrupt_sequence_break;
1617 else
1618 interrupt_sequence_mode = interrupt_sequence_control_c;
1619 }
1620
1621 static void
1622 show_remotebreak (struct ui_file *file, int from_tty,
1623 struct cmd_list_element *c,
1624 const char *value)
1625 {
1626 }
1627
1628 /* This variable sets the number of bits in an address that are to be
1629 sent in a memory ("M" or "m") packet. Normally, after stripping
1630 leading zeros, the entire address would be sent. This variable
1631 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1632 initial implementation of remote.c restricted the address sent in
1633 memory packets to ``host::sizeof long'' bytes - (typically 32
1634 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1635 address was never sent. Since fixing this bug may cause a break in
1636 some remote targets this variable is principally provided to
1637 facilitate backward compatibility. */
1638
1639 static unsigned int remote_address_size;
1640
1641 \f
1642 /* User configurable variables for the number of characters in a
1643 memory read/write packet. MIN (rsa->remote_packet_size,
1644 rsa->sizeof_g_packet) is the default. Some targets need smaller
1645 values (fifo overruns, et.al.) and some users need larger values
1646 (speed up transfers). The variables ``preferred_*'' (the user
1647 request), ``current_*'' (what was actually set) and ``forced_*''
1648 (Positive - a soft limit, negative - a hard limit). */
1649
1650 struct memory_packet_config
1651 {
1652 const char *name;
1653 long size;
1654 int fixed_p;
1655 };
1656
1657 /* The default max memory-write-packet-size, when the setting is
1658 "fixed". The 16k is historical. (It came from older GDB's using
1659 alloca for buffers and the knowledge (folklore?) that some hosts
1660 don't cope very well with large alloca calls.) */
1661 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
1662
1663 /* The minimum remote packet size for memory transfers. Ensures we
1664 can write at least one byte. */
1665 #define MIN_MEMORY_PACKET_SIZE 20
1666
1667 /* Get the memory packet size, assuming it is fixed. */
1668
1669 static long
1670 get_fixed_memory_packet_size (struct memory_packet_config *config)
1671 {
1672 gdb_assert (config->fixed_p);
1673
1674 if (config->size <= 0)
1675 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1676 else
1677 return config->size;
1678 }
1679
1680 /* Compute the current size of a read/write packet. Since this makes
1681 use of ``actual_register_packet_size'' the computation is dynamic. */
1682
1683 long
1684 remote_target::get_memory_packet_size (struct memory_packet_config *config)
1685 {
1686 struct remote_state *rs = get_remote_state ();
1687 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1688
1689 long what_they_get;
1690 if (config->fixed_p)
1691 what_they_get = get_fixed_memory_packet_size (config);
1692 else
1693 {
1694 what_they_get = get_remote_packet_size ();
1695 /* Limit the packet to the size specified by the user. */
1696 if (config->size > 0
1697 && what_they_get > config->size)
1698 what_they_get = config->size;
1699
1700 /* Limit it to the size of the targets ``g'' response unless we have
1701 permission from the stub to use a larger packet size. */
1702 if (rs->explicit_packet_size == 0
1703 && rsa->actual_register_packet_size > 0
1704 && what_they_get > rsa->actual_register_packet_size)
1705 what_they_get = rsa->actual_register_packet_size;
1706 }
1707 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1708 what_they_get = MIN_MEMORY_PACKET_SIZE;
1709
1710 /* Make sure there is room in the global buffer for this packet
1711 (including its trailing NUL byte). */
1712 if (rs->buf.size () < what_they_get + 1)
1713 rs->buf.resize (2 * what_they_get);
1714
1715 return what_they_get;
1716 }
1717
1718 /* Update the size of a read/write packet. If they user wants
1719 something really big then do a sanity check. */
1720
1721 static void
1722 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1723 {
1724 int fixed_p = config->fixed_p;
1725 long size = config->size;
1726
1727 if (args == NULL)
1728 error (_("Argument required (integer, `fixed' or `limited')."));
1729 else if (strcmp (args, "hard") == 0
1730 || strcmp (args, "fixed") == 0)
1731 fixed_p = 1;
1732 else if (strcmp (args, "soft") == 0
1733 || strcmp (args, "limit") == 0)
1734 fixed_p = 0;
1735 else
1736 {
1737 char *end;
1738
1739 size = strtoul (args, &end, 0);
1740 if (args == end)
1741 error (_("Invalid %s (bad syntax)."), config->name);
1742
1743 /* Instead of explicitly capping the size of a packet to or
1744 disallowing it, the user is allowed to set the size to
1745 something arbitrarily large. */
1746 }
1747
1748 /* Extra checks? */
1749 if (fixed_p && !config->fixed_p)
1750 {
1751 /* So that the query shows the correct value. */
1752 long query_size = (size <= 0
1753 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1754 : size);
1755
1756 if (! query (_("The target may not be able to correctly handle a %s\n"
1757 "of %ld bytes. Change the packet size? "),
1758 config->name, query_size))
1759 error (_("Packet size not changed."));
1760 }
1761 /* Update the config. */
1762 config->fixed_p = fixed_p;
1763 config->size = size;
1764 }
1765
1766 static void
1767 show_memory_packet_size (struct memory_packet_config *config)
1768 {
1769 if (config->size == 0)
1770 gdb_printf (_("The %s is 0 (default). "), config->name);
1771 else
1772 gdb_printf (_("The %s is %ld. "), config->name, config->size);
1773 if (config->fixed_p)
1774 gdb_printf (_("Packets are fixed at %ld bytes.\n"),
1775 get_fixed_memory_packet_size (config));
1776 else
1777 {
1778 remote_target *remote = get_current_remote_target ();
1779
1780 if (remote != NULL)
1781 gdb_printf (_("Packets are limited to %ld bytes.\n"),
1782 remote->get_memory_packet_size (config));
1783 else
1784 gdb_puts ("The actual limit will be further reduced "
1785 "dependent on the target.\n");
1786 }
1787 }
1788
1789 /* FIXME: needs to be per-remote-target. */
1790 static struct memory_packet_config memory_write_packet_config =
1791 {
1792 "memory-write-packet-size",
1793 };
1794
1795 static void
1796 set_memory_write_packet_size (const char *args, int from_tty)
1797 {
1798 set_memory_packet_size (args, &memory_write_packet_config);
1799 }
1800
1801 static void
1802 show_memory_write_packet_size (const char *args, int from_tty)
1803 {
1804 show_memory_packet_size (&memory_write_packet_config);
1805 }
1806
1807 /* Show the number of hardware watchpoints that can be used. */
1808
1809 static void
1810 show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1811 struct cmd_list_element *c,
1812 const char *value)
1813 {
1814 gdb_printf (file, _("The maximum number of target hardware "
1815 "watchpoints is %s.\n"), value);
1816 }
1817
1818 /* Show the length limit (in bytes) for hardware watchpoints. */
1819
1820 static void
1821 show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1822 struct cmd_list_element *c,
1823 const char *value)
1824 {
1825 gdb_printf (file, _("The maximum length (in bytes) of a target "
1826 "hardware watchpoint is %s.\n"), value);
1827 }
1828
1829 /* Show the number of hardware breakpoints that can be used. */
1830
1831 static void
1832 show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1833 struct cmd_list_element *c,
1834 const char *value)
1835 {
1836 gdb_printf (file, _("The maximum number of target hardware "
1837 "breakpoints is %s.\n"), value);
1838 }
1839
1840 /* Controls the maximum number of characters to display in the debug output
1841 for each remote packet. The remaining characters are omitted. */
1842
1843 static int remote_packet_max_chars = 512;
1844
1845 /* Show the maximum number of characters to display for each remote packet
1846 when remote debugging is enabled. */
1847
1848 static void
1849 show_remote_packet_max_chars (struct ui_file *file, int from_tty,
1850 struct cmd_list_element *c,
1851 const char *value)
1852 {
1853 gdb_printf (file, _("Number of remote packet characters to "
1854 "display is %s.\n"), value);
1855 }
1856
1857 long
1858 remote_target::get_memory_write_packet_size ()
1859 {
1860 return get_memory_packet_size (&memory_write_packet_config);
1861 }
1862
1863 /* FIXME: needs to be per-remote-target. */
1864 static struct memory_packet_config memory_read_packet_config =
1865 {
1866 "memory-read-packet-size",
1867 };
1868
1869 static void
1870 set_memory_read_packet_size (const char *args, int from_tty)
1871 {
1872 set_memory_packet_size (args, &memory_read_packet_config);
1873 }
1874
1875 static void
1876 show_memory_read_packet_size (const char *args, int from_tty)
1877 {
1878 show_memory_packet_size (&memory_read_packet_config);
1879 }
1880
1881 long
1882 remote_target::get_memory_read_packet_size ()
1883 {
1884 long size = get_memory_packet_size (&memory_read_packet_config);
1885
1886 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1887 extra buffer size argument before the memory read size can be
1888 increased beyond this. */
1889 if (size > get_remote_packet_size ())
1890 size = get_remote_packet_size ();
1891 return size;
1892 }
1893
1894 \f
1895
1896 struct packet_config
1897 {
1898 const char *name;
1899 const char *title;
1900
1901 /* If auto, GDB auto-detects support for this packet or feature,
1902 either through qSupported, or by trying the packet and looking
1903 at the response. If true, GDB assumes the target supports this
1904 packet. If false, the packet is disabled. Configs that don't
1905 have an associated command always have this set to auto. */
1906 enum auto_boolean detect;
1907
1908 /* The "show remote foo-packet" command created for this packet. */
1909 cmd_list_element *show_cmd;
1910
1911 /* Does the target support this packet? */
1912 enum packet_support support;
1913 };
1914
1915 static enum packet_support packet_config_support (struct packet_config *config);
1916 static enum packet_support packet_support (int packet);
1917
1918 static void
1919 show_packet_config_cmd (ui_file *file, struct packet_config *config)
1920 {
1921 const char *support = "internal-error";
1922
1923 switch (packet_config_support (config))
1924 {
1925 case PACKET_ENABLE:
1926 support = "enabled";
1927 break;
1928 case PACKET_DISABLE:
1929 support = "disabled";
1930 break;
1931 case PACKET_SUPPORT_UNKNOWN:
1932 support = "unknown";
1933 break;
1934 }
1935 switch (config->detect)
1936 {
1937 case AUTO_BOOLEAN_AUTO:
1938 gdb_printf (file,
1939 _("Support for the `%s' packet "
1940 "is auto-detected, currently %s.\n"),
1941 config->name, support);
1942 break;
1943 case AUTO_BOOLEAN_TRUE:
1944 case AUTO_BOOLEAN_FALSE:
1945 gdb_printf (file,
1946 _("Support for the `%s' packet is currently %s.\n"),
1947 config->name, support);
1948 break;
1949 }
1950 }
1951
1952 static void
1953 add_packet_config_cmd (struct packet_config *config, const char *name,
1954 const char *title, int legacy)
1955 {
1956 config->name = name;
1957 config->title = title;
1958 gdb::unique_xmalloc_ptr<char> set_doc
1959 = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
1960 name, title);
1961 gdb::unique_xmalloc_ptr<char> show_doc
1962 = xstrprintf ("Show current use of remote protocol `%s' (%s) packet.",
1963 name, title);
1964 /* set/show TITLE-packet {auto,on,off} */
1965 gdb::unique_xmalloc_ptr<char> cmd_name = xstrprintf ("%s-packet", title);
1966 set_show_commands cmds
1967 = add_setshow_auto_boolean_cmd (cmd_name.release (), class_obscure,
1968 &config->detect, set_doc.get (),
1969 show_doc.get (), NULL, /* help_doc */
1970 NULL,
1971 show_remote_protocol_packet_cmd,
1972 &remote_set_cmdlist, &remote_show_cmdlist);
1973 config->show_cmd = cmds.show;
1974
1975 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
1976 if (legacy)
1977 {
1978 /* It's not clear who should take ownership of the LEGACY_NAME string
1979 created below, so, for now, place the string into a static vector
1980 which ensures the strings is released when GDB exits. */
1981 static std::vector<gdb::unique_xmalloc_ptr<char>> legacy_names;
1982 gdb::unique_xmalloc_ptr<char> legacy_name
1983 = xstrprintf ("%s-packet", name);
1984 add_alias_cmd (legacy_name.get (), cmds.set, class_obscure, 0,
1985 &remote_set_cmdlist);
1986 add_alias_cmd (legacy_name.get (), cmds.show, class_obscure, 0,
1987 &remote_show_cmdlist);
1988 legacy_names.emplace_back (std::move (legacy_name));
1989 }
1990 }
1991
1992 static enum packet_result
1993 packet_check_result (const char *buf)
1994 {
1995 if (buf[0] != '\0')
1996 {
1997 /* The stub recognized the packet request. Check that the
1998 operation succeeded. */
1999 if (buf[0] == 'E'
2000 && isxdigit (buf[1]) && isxdigit (buf[2])
2001 && buf[3] == '\0')
2002 /* "Enn" - definitely an error. */
2003 return PACKET_ERROR;
2004
2005 /* Always treat "E." as an error. This will be used for
2006 more verbose error messages, such as E.memtypes. */
2007 if (buf[0] == 'E' && buf[1] == '.')
2008 return PACKET_ERROR;
2009
2010 /* The packet may or may not be OK. Just assume it is. */
2011 return PACKET_OK;
2012 }
2013 else
2014 /* The stub does not support the packet. */
2015 return PACKET_UNKNOWN;
2016 }
2017
2018 static enum packet_result
2019 packet_check_result (const gdb::char_vector &buf)
2020 {
2021 return packet_check_result (buf.data ());
2022 }
2023
2024 static enum packet_result
2025 packet_ok (const char *buf, struct packet_config *config)
2026 {
2027 enum packet_result result;
2028
2029 if (config->detect != AUTO_BOOLEAN_TRUE
2030 && config->support == PACKET_DISABLE)
2031 internal_error (__FILE__, __LINE__,
2032 _("packet_ok: attempt to use a disabled packet"));
2033
2034 result = packet_check_result (buf);
2035 switch (result)
2036 {
2037 case PACKET_OK:
2038 case PACKET_ERROR:
2039 /* The stub recognized the packet request. */
2040 if (config->support == PACKET_SUPPORT_UNKNOWN)
2041 {
2042 remote_debug_printf ("Packet %s (%s) is supported",
2043 config->name, config->title);
2044 config->support = PACKET_ENABLE;
2045 }
2046 break;
2047 case PACKET_UNKNOWN:
2048 /* The stub does not support the packet. */
2049 if (config->detect == AUTO_BOOLEAN_AUTO
2050 && config->support == PACKET_ENABLE)
2051 {
2052 /* If the stub previously indicated that the packet was
2053 supported then there is a protocol error. */
2054 error (_("Protocol error: %s (%s) conflicting enabled responses."),
2055 config->name, config->title);
2056 }
2057 else if (config->detect == AUTO_BOOLEAN_TRUE)
2058 {
2059 /* The user set it wrong. */
2060 error (_("Enabled packet %s (%s) not recognized by stub"),
2061 config->name, config->title);
2062 }
2063
2064 remote_debug_printf ("Packet %s (%s) is NOT supported",
2065 config->name, config->title);
2066 config->support = PACKET_DISABLE;
2067 break;
2068 }
2069
2070 return result;
2071 }
2072
2073 static enum packet_result
2074 packet_ok (const gdb::char_vector &buf, struct packet_config *config)
2075 {
2076 return packet_ok (buf.data (), config);
2077 }
2078
2079 enum {
2080 PACKET_vCont = 0,
2081 PACKET_X,
2082 PACKET_qSymbol,
2083 PACKET_P,
2084 PACKET_p,
2085 PACKET_Z0,
2086 PACKET_Z1,
2087 PACKET_Z2,
2088 PACKET_Z3,
2089 PACKET_Z4,
2090 PACKET_vFile_setfs,
2091 PACKET_vFile_open,
2092 PACKET_vFile_pread,
2093 PACKET_vFile_pwrite,
2094 PACKET_vFile_close,
2095 PACKET_vFile_unlink,
2096 PACKET_vFile_readlink,
2097 PACKET_vFile_fstat,
2098 PACKET_qXfer_auxv,
2099 PACKET_qXfer_features,
2100 PACKET_qXfer_exec_file,
2101 PACKET_qXfer_libraries,
2102 PACKET_qXfer_libraries_svr4,
2103 PACKET_qXfer_memory_map,
2104 PACKET_qXfer_osdata,
2105 PACKET_qXfer_threads,
2106 PACKET_qXfer_statictrace_read,
2107 PACKET_qXfer_traceframe_info,
2108 PACKET_qXfer_uib,
2109 PACKET_qGetTIBAddr,
2110 PACKET_qGetTLSAddr,
2111 PACKET_qSupported,
2112 PACKET_qTStatus,
2113 PACKET_QPassSignals,
2114 PACKET_QCatchSyscalls,
2115 PACKET_QProgramSignals,
2116 PACKET_QSetWorkingDir,
2117 PACKET_QStartupWithShell,
2118 PACKET_QEnvironmentHexEncoded,
2119 PACKET_QEnvironmentReset,
2120 PACKET_QEnvironmentUnset,
2121 PACKET_qCRC,
2122 PACKET_qSearch_memory,
2123 PACKET_vAttach,
2124 PACKET_vRun,
2125 PACKET_QStartNoAckMode,
2126 PACKET_vKill,
2127 PACKET_qXfer_siginfo_read,
2128 PACKET_qXfer_siginfo_write,
2129 PACKET_qAttached,
2130
2131 /* Support for conditional tracepoints. */
2132 PACKET_ConditionalTracepoints,
2133
2134 /* Support for target-side breakpoint conditions. */
2135 PACKET_ConditionalBreakpoints,
2136
2137 /* Support for target-side breakpoint commands. */
2138 PACKET_BreakpointCommands,
2139
2140 /* Support for fast tracepoints. */
2141 PACKET_FastTracepoints,
2142
2143 /* Support for static tracepoints. */
2144 PACKET_StaticTracepoints,
2145
2146 /* Support for installing tracepoints while a trace experiment is
2147 running. */
2148 PACKET_InstallInTrace,
2149
2150 PACKET_bc,
2151 PACKET_bs,
2152 PACKET_TracepointSource,
2153 PACKET_QAllow,
2154 PACKET_qXfer_fdpic,
2155 PACKET_QDisableRandomization,
2156 PACKET_QAgent,
2157 PACKET_QTBuffer_size,
2158 PACKET_Qbtrace_off,
2159 PACKET_Qbtrace_bts,
2160 PACKET_Qbtrace_pt,
2161 PACKET_qXfer_btrace,
2162
2163 /* Support for the QNonStop packet. */
2164 PACKET_QNonStop,
2165
2166 /* Support for the QThreadEvents packet. */
2167 PACKET_QThreadEvents,
2168
2169 /* Support for multi-process extensions. */
2170 PACKET_multiprocess_feature,
2171
2172 /* Support for enabling and disabling tracepoints while a trace
2173 experiment is running. */
2174 PACKET_EnableDisableTracepoints_feature,
2175
2176 /* Support for collecting strings using the tracenz bytecode. */
2177 PACKET_tracenz_feature,
2178
2179 /* Support for continuing to run a trace experiment while GDB is
2180 disconnected. */
2181 PACKET_DisconnectedTracing_feature,
2182
2183 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
2184 PACKET_augmented_libraries_svr4_read_feature,
2185
2186 /* Support for the qXfer:btrace-conf:read packet. */
2187 PACKET_qXfer_btrace_conf,
2188
2189 /* Support for the Qbtrace-conf:bts:size packet. */
2190 PACKET_Qbtrace_conf_bts_size,
2191
2192 /* Support for swbreak+ feature. */
2193 PACKET_swbreak_feature,
2194
2195 /* Support for hwbreak+ feature. */
2196 PACKET_hwbreak_feature,
2197
2198 /* Support for fork events. */
2199 PACKET_fork_event_feature,
2200
2201 /* Support for vfork events. */
2202 PACKET_vfork_event_feature,
2203
2204 /* Support for the Qbtrace-conf:pt:size packet. */
2205 PACKET_Qbtrace_conf_pt_size,
2206
2207 /* Support for exec events. */
2208 PACKET_exec_event_feature,
2209
2210 /* Support for query supported vCont actions. */
2211 PACKET_vContSupported,
2212
2213 /* Support remote CTRL-C. */
2214 PACKET_vCtrlC,
2215
2216 /* Support TARGET_WAITKIND_NO_RESUMED. */
2217 PACKET_no_resumed,
2218
2219 /* Support for memory tagging, allocation tag fetch/store
2220 packets and the tag violation stop replies. */
2221 PACKET_memory_tagging_feature,
2222
2223 PACKET_MAX
2224 };
2225
2226 /* FIXME: needs to be per-remote-target. Ignoring this for now,
2227 assuming all remote targets are the same server (thus all support
2228 the same packets). */
2229 static struct packet_config remote_protocol_packets[PACKET_MAX];
2230
2231 /* Returns the packet's corresponding "set remote foo-packet" command
2232 state. See struct packet_config for more details. */
2233
2234 static enum auto_boolean
2235 packet_set_cmd_state (int packet)
2236 {
2237 return remote_protocol_packets[packet].detect;
2238 }
2239
2240 /* Returns whether a given packet or feature is supported. This takes
2241 into account the state of the corresponding "set remote foo-packet"
2242 command, which may be used to bypass auto-detection. */
2243
2244 static enum packet_support
2245 packet_config_support (struct packet_config *config)
2246 {
2247 switch (config->detect)
2248 {
2249 case AUTO_BOOLEAN_TRUE:
2250 return PACKET_ENABLE;
2251 case AUTO_BOOLEAN_FALSE:
2252 return PACKET_DISABLE;
2253 case AUTO_BOOLEAN_AUTO:
2254 return config->support;
2255 default:
2256 gdb_assert_not_reached ("bad switch");
2257 }
2258 }
2259
2260 /* Same as packet_config_support, but takes the packet's enum value as
2261 argument. */
2262
2263 static enum packet_support
2264 packet_support (int packet)
2265 {
2266 struct packet_config *config = &remote_protocol_packets[packet];
2267
2268 return packet_config_support (config);
2269 }
2270
2271 static void
2272 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2273 struct cmd_list_element *c,
2274 const char *value)
2275 {
2276 struct packet_config *packet;
2277 gdb_assert (c->var.has_value ());
2278
2279 for (packet = remote_protocol_packets;
2280 packet < &remote_protocol_packets[PACKET_MAX];
2281 packet++)
2282 {
2283 if (c == packet->show_cmd)
2284 {
2285 show_packet_config_cmd (file, packet);
2286 return;
2287 }
2288 }
2289 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
2290 c->name);
2291 }
2292
2293 /* Should we try one of the 'Z' requests? */
2294
2295 enum Z_packet_type
2296 {
2297 Z_PACKET_SOFTWARE_BP,
2298 Z_PACKET_HARDWARE_BP,
2299 Z_PACKET_WRITE_WP,
2300 Z_PACKET_READ_WP,
2301 Z_PACKET_ACCESS_WP,
2302 NR_Z_PACKET_TYPES
2303 };
2304
2305 /* For compatibility with older distributions. Provide a ``set remote
2306 Z-packet ...'' command that updates all the Z packet types. */
2307
2308 static enum auto_boolean remote_Z_packet_detect;
2309
2310 static void
2311 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
2312 struct cmd_list_element *c)
2313 {
2314 int i;
2315
2316 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2317 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
2318 }
2319
2320 static void
2321 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2322 struct cmd_list_element *c,
2323 const char *value)
2324 {
2325 int i;
2326
2327 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2328 {
2329 show_packet_config_cmd (file, &remote_protocol_packets[PACKET_Z0 + i]);
2330 }
2331 }
2332
2333 /* Returns true if the multi-process extensions are in effect. */
2334
2335 static int
2336 remote_multi_process_p (struct remote_state *rs)
2337 {
2338 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2339 }
2340
2341 /* Returns true if fork events are supported. */
2342
2343 static int
2344 remote_fork_event_p (struct remote_state *rs)
2345 {
2346 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2347 }
2348
2349 /* Returns true if vfork events are supported. */
2350
2351 static int
2352 remote_vfork_event_p (struct remote_state *rs)
2353 {
2354 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2355 }
2356
2357 /* Returns true if exec events are supported. */
2358
2359 static int
2360 remote_exec_event_p (struct remote_state *rs)
2361 {
2362 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2363 }
2364
2365 /* Returns true if memory tagging is supported, false otherwise. */
2366
2367 static bool
2368 remote_memory_tagging_p ()
2369 {
2370 return packet_support (PACKET_memory_tagging_feature) == PACKET_ENABLE;
2371 }
2372
2373 /* Insert fork catchpoint target routine. If fork events are enabled
2374 then return success, nothing more to do. */
2375
2376 int
2377 remote_target::insert_fork_catchpoint (int pid)
2378 {
2379 struct remote_state *rs = get_remote_state ();
2380
2381 return !remote_fork_event_p (rs);
2382 }
2383
2384 /* Remove fork catchpoint target routine. Nothing to do, just
2385 return success. */
2386
2387 int
2388 remote_target::remove_fork_catchpoint (int pid)
2389 {
2390 return 0;
2391 }
2392
2393 /* Insert vfork catchpoint target routine. If vfork events are enabled
2394 then return success, nothing more to do. */
2395
2396 int
2397 remote_target::insert_vfork_catchpoint (int pid)
2398 {
2399 struct remote_state *rs = get_remote_state ();
2400
2401 return !remote_vfork_event_p (rs);
2402 }
2403
2404 /* Remove vfork catchpoint target routine. Nothing to do, just
2405 return success. */
2406
2407 int
2408 remote_target::remove_vfork_catchpoint (int pid)
2409 {
2410 return 0;
2411 }
2412
2413 /* Insert exec catchpoint target routine. If exec events are
2414 enabled, just return success. */
2415
2416 int
2417 remote_target::insert_exec_catchpoint (int pid)
2418 {
2419 struct remote_state *rs = get_remote_state ();
2420
2421 return !remote_exec_event_p (rs);
2422 }
2423
2424 /* Remove exec catchpoint target routine. Nothing to do, just
2425 return success. */
2426
2427 int
2428 remote_target::remove_exec_catchpoint (int pid)
2429 {
2430 return 0;
2431 }
2432
2433 \f
2434
2435 /* Take advantage of the fact that the TID field is not used, to tag
2436 special ptids with it set to != 0. */
2437 static const ptid_t magic_null_ptid (42000, -1, 1);
2438 static const ptid_t not_sent_ptid (42000, -2, 1);
2439 static const ptid_t any_thread_ptid (42000, 0, 1);
2440
2441 /* Find out if the stub attached to PID (and hence GDB should offer to
2442 detach instead of killing it when bailing out). */
2443
2444 int
2445 remote_target::remote_query_attached (int pid)
2446 {
2447 struct remote_state *rs = get_remote_state ();
2448 size_t size = get_remote_packet_size ();
2449
2450 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
2451 return 0;
2452
2453 if (remote_multi_process_p (rs))
2454 xsnprintf (rs->buf.data (), size, "qAttached:%x", pid);
2455 else
2456 xsnprintf (rs->buf.data (), size, "qAttached");
2457
2458 putpkt (rs->buf);
2459 getpkt (&rs->buf, 0);
2460
2461 switch (packet_ok (rs->buf,
2462 &remote_protocol_packets[PACKET_qAttached]))
2463 {
2464 case PACKET_OK:
2465 if (strcmp (rs->buf.data (), "1") == 0)
2466 return 1;
2467 break;
2468 case PACKET_ERROR:
2469 warning (_("Remote failure reply: %s"), rs->buf.data ());
2470 break;
2471 case PACKET_UNKNOWN:
2472 break;
2473 }
2474
2475 return 0;
2476 }
2477
2478 /* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2479 has been invented by GDB, instead of reported by the target. Since
2480 we can be connected to a remote system before before knowing about
2481 any inferior, mark the target with execution when we find the first
2482 inferior. If ATTACHED is 1, then we had just attached to this
2483 inferior. If it is 0, then we just created this inferior. If it
2484 is -1, then try querying the remote stub to find out if it had
2485 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2486 attempt to open this inferior's executable as the main executable
2487 if no main executable is open already. */
2488
2489 inferior *
2490 remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached,
2491 int try_open_exec)
2492 {
2493 struct inferior *inf;
2494
2495 /* Check whether this process we're learning about is to be
2496 considered attached, or if is to be considered to have been
2497 spawned by the stub. */
2498 if (attached == -1)
2499 attached = remote_query_attached (pid);
2500
2501 if (gdbarch_has_global_solist (target_gdbarch ()))
2502 {
2503 /* If the target shares code across all inferiors, then every
2504 attach adds a new inferior. */
2505 inf = add_inferior (pid);
2506
2507 /* ... and every inferior is bound to the same program space.
2508 However, each inferior may still have its own address
2509 space. */
2510 inf->aspace = maybe_new_address_space ();
2511 inf->pspace = current_program_space;
2512 }
2513 else
2514 {
2515 /* In the traditional debugging scenario, there's a 1-1 match
2516 between program/address spaces. We simply bind the inferior
2517 to the program space's address space. */
2518 inf = current_inferior ();
2519
2520 /* However, if the current inferior is already bound to a
2521 process, find some other empty inferior. */
2522 if (inf->pid != 0)
2523 {
2524 inf = nullptr;
2525 for (inferior *it : all_inferiors ())
2526 if (it->pid == 0)
2527 {
2528 inf = it;
2529 break;
2530 }
2531 }
2532 if (inf == nullptr)
2533 {
2534 /* Since all inferiors were already bound to a process, add
2535 a new inferior. */
2536 inf = add_inferior_with_spaces ();
2537 }
2538 switch_to_inferior_no_thread (inf);
2539 inf->push_target (this);
2540 inferior_appeared (inf, pid);
2541 }
2542
2543 inf->attach_flag = attached;
2544 inf->fake_pid_p = fake_pid_p;
2545
2546 /* If no main executable is currently open then attempt to
2547 open the file that was executed to create this inferior. */
2548 if (try_open_exec && get_exec_file (0) == NULL)
2549 exec_file_locate_attach (pid, 0, 1);
2550
2551 /* Check for exec file mismatch, and let the user solve it. */
2552 validate_exec_file (1);
2553
2554 return inf;
2555 }
2556
2557 static remote_thread_info *get_remote_thread_info (thread_info *thread);
2558 static remote_thread_info *get_remote_thread_info (remote_target *target,
2559 ptid_t ptid);
2560
2561 /* Add thread PTID to GDB's thread list. Tag it as executing/running
2562 according to EXECUTING and RUNNING respectively. If SILENT_P (or the
2563 remote_state::starting_up flag) is true then the new thread is added
2564 silently, otherwise the new thread will be announced to the user. */
2565
2566 thread_info *
2567 remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing,
2568 bool silent_p)
2569 {
2570 struct remote_state *rs = get_remote_state ();
2571 struct thread_info *thread;
2572
2573 /* GDB historically didn't pull threads in the initial connection
2574 setup. If the remote target doesn't even have a concept of
2575 threads (e.g., a bare-metal target), even if internally we
2576 consider that a single-threaded target, mentioning a new thread
2577 might be confusing to the user. Be silent then, preserving the
2578 age old behavior. */
2579 if (rs->starting_up || silent_p)
2580 thread = add_thread_silent (this, ptid);
2581 else
2582 thread = add_thread (this, ptid);
2583
2584 /* We start by assuming threads are resumed. That state then gets updated
2585 when we process a matching stop reply. */
2586 get_remote_thread_info (thread)->set_resumed ();
2587
2588 set_executing (this, ptid, executing);
2589 set_running (this, ptid, running);
2590
2591 return thread;
2592 }
2593
2594 /* Come here when we learn about a thread id from the remote target.
2595 It may be the first time we hear about such thread, so take the
2596 opportunity to add it to GDB's thread list. In case this is the
2597 first time we're noticing its corresponding inferior, add it to
2598 GDB's inferior list as well. EXECUTING indicates whether the
2599 thread is (internally) executing or stopped. */
2600
2601 void
2602 remote_target::remote_notice_new_inferior (ptid_t currthread, bool executing)
2603 {
2604 /* In non-stop mode, we assume new found threads are (externally)
2605 running until proven otherwise with a stop reply. In all-stop,
2606 we can only get here if all threads are stopped. */
2607 bool running = target_is_non_stop_p ();
2608
2609 /* If this is a new thread, add it to GDB's thread list.
2610 If we leave it up to WFI to do this, bad things will happen. */
2611
2612 thread_info *tp = find_thread_ptid (this, currthread);
2613 if (tp != NULL && tp->state == THREAD_EXITED)
2614 {
2615 /* We're seeing an event on a thread id we knew had exited.
2616 This has to be a new thread reusing the old id. Add it. */
2617 remote_add_thread (currthread, running, executing, false);
2618 return;
2619 }
2620
2621 if (!in_thread_list (this, currthread))
2622 {
2623 struct inferior *inf = NULL;
2624 int pid = currthread.pid ();
2625
2626 if (inferior_ptid.is_pid ()
2627 && pid == inferior_ptid.pid ())
2628 {
2629 /* inferior_ptid has no thread member yet. This can happen
2630 with the vAttach -> remote_wait,"TAAthread:" path if the
2631 stub doesn't support qC. This is the first stop reported
2632 after an attach, so this is the main thread. Update the
2633 ptid in the thread list. */
2634 if (in_thread_list (this, ptid_t (pid)))
2635 thread_change_ptid (this, inferior_ptid, currthread);
2636 else
2637 {
2638 thread_info *thr
2639 = remote_add_thread (currthread, running, executing, false);
2640 switch_to_thread (thr);
2641 }
2642 return;
2643 }
2644
2645 if (magic_null_ptid == inferior_ptid)
2646 {
2647 /* inferior_ptid is not set yet. This can happen with the
2648 vRun -> remote_wait,"TAAthread:" path if the stub
2649 doesn't support qC. This is the first stop reported
2650 after an attach, so this is the main thread. Update the
2651 ptid in the thread list. */
2652 thread_change_ptid (this, inferior_ptid, currthread);
2653 return;
2654 }
2655
2656 /* When connecting to a target remote, or to a target
2657 extended-remote which already was debugging an inferior, we
2658 may not know about it yet. Add it before adding its child
2659 thread, so notifications are emitted in a sensible order. */
2660 if (find_inferior_pid (this, currthread.pid ()) == NULL)
2661 {
2662 struct remote_state *rs = get_remote_state ();
2663 bool fake_pid_p = !remote_multi_process_p (rs);
2664
2665 inf = remote_add_inferior (fake_pid_p,
2666 currthread.pid (), -1, 1);
2667 }
2668
2669 /* This is really a new thread. Add it. */
2670 thread_info *new_thr
2671 = remote_add_thread (currthread, running, executing, false);
2672
2673 /* If we found a new inferior, let the common code do whatever
2674 it needs to with it (e.g., read shared libraries, insert
2675 breakpoints), unless we're just setting up an all-stop
2676 connection. */
2677 if (inf != NULL)
2678 {
2679 struct remote_state *rs = get_remote_state ();
2680
2681 if (!rs->starting_up)
2682 notice_new_inferior (new_thr, executing, 0);
2683 }
2684 }
2685 }
2686
2687 /* Return THREAD's private thread data, creating it if necessary. */
2688
2689 static remote_thread_info *
2690 get_remote_thread_info (thread_info *thread)
2691 {
2692 gdb_assert (thread != NULL);
2693
2694 if (thread->priv == NULL)
2695 thread->priv.reset (new remote_thread_info);
2696
2697 return static_cast<remote_thread_info *> (thread->priv.get ());
2698 }
2699
2700 /* Return PTID's private thread data, creating it if necessary. */
2701
2702 static remote_thread_info *
2703 get_remote_thread_info (remote_target *target, ptid_t ptid)
2704 {
2705 thread_info *thr = find_thread_ptid (target, ptid);
2706 return get_remote_thread_info (thr);
2707 }
2708
2709 /* Call this function as a result of
2710 1) A halt indication (T packet) containing a thread id
2711 2) A direct query of currthread
2712 3) Successful execution of set thread */
2713
2714 static void
2715 record_currthread (struct remote_state *rs, ptid_t currthread)
2716 {
2717 rs->general_thread = currthread;
2718 }
2719
2720 /* If 'QPassSignals' is supported, tell the remote stub what signals
2721 it can simply pass through to the inferior without reporting. */
2722
2723 void
2724 remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
2725 {
2726 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2727 {
2728 char *pass_packet, *p;
2729 int count = 0;
2730 struct remote_state *rs = get_remote_state ();
2731
2732 gdb_assert (pass_signals.size () < 256);
2733 for (size_t i = 0; i < pass_signals.size (); i++)
2734 {
2735 if (pass_signals[i])
2736 count++;
2737 }
2738 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2739 strcpy (pass_packet, "QPassSignals:");
2740 p = pass_packet + strlen (pass_packet);
2741 for (size_t i = 0; i < pass_signals.size (); i++)
2742 {
2743 if (pass_signals[i])
2744 {
2745 if (i >= 16)
2746 *p++ = tohex (i >> 4);
2747 *p++ = tohex (i & 15);
2748 if (count)
2749 *p++ = ';';
2750 else
2751 break;
2752 count--;
2753 }
2754 }
2755 *p = 0;
2756 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2757 {
2758 putpkt (pass_packet);
2759 getpkt (&rs->buf, 0);
2760 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2761 xfree (rs->last_pass_packet);
2762 rs->last_pass_packet = pass_packet;
2763 }
2764 else
2765 xfree (pass_packet);
2766 }
2767 }
2768
2769 /* If 'QCatchSyscalls' is supported, tell the remote stub
2770 to report syscalls to GDB. */
2771
2772 int
2773 remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2774 gdb::array_view<const int> syscall_counts)
2775 {
2776 const char *catch_packet;
2777 enum packet_result result;
2778 int n_sysno = 0;
2779
2780 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2781 {
2782 /* Not supported. */
2783 return 1;
2784 }
2785
2786 if (needed && any_count == 0)
2787 {
2788 /* Count how many syscalls are to be caught. */
2789 for (size_t i = 0; i < syscall_counts.size (); i++)
2790 {
2791 if (syscall_counts[i] != 0)
2792 n_sysno++;
2793 }
2794 }
2795
2796 remote_debug_printf ("pid %d needed %d any_count %d n_sysno %d",
2797 pid, needed, any_count, n_sysno);
2798
2799 std::string built_packet;
2800 if (needed)
2801 {
2802 /* Prepare a packet with the sysno list, assuming max 8+1
2803 characters for a sysno. If the resulting packet size is too
2804 big, fallback on the non-selective packet. */
2805 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2806 built_packet.reserve (maxpktsz);
2807 built_packet = "QCatchSyscalls:1";
2808 if (any_count == 0)
2809 {
2810 /* Add in each syscall to be caught. */
2811 for (size_t i = 0; i < syscall_counts.size (); i++)
2812 {
2813 if (syscall_counts[i] != 0)
2814 string_appendf (built_packet, ";%zx", i);
2815 }
2816 }
2817 if (built_packet.size () > get_remote_packet_size ())
2818 {
2819 /* catch_packet too big. Fallback to less efficient
2820 non selective mode, with GDB doing the filtering. */
2821 catch_packet = "QCatchSyscalls:1";
2822 }
2823 else
2824 catch_packet = built_packet.c_str ();
2825 }
2826 else
2827 catch_packet = "QCatchSyscalls:0";
2828
2829 struct remote_state *rs = get_remote_state ();
2830
2831 putpkt (catch_packet);
2832 getpkt (&rs->buf, 0);
2833 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2834 if (result == PACKET_OK)
2835 return 0;
2836 else
2837 return -1;
2838 }
2839
2840 /* If 'QProgramSignals' is supported, tell the remote stub what
2841 signals it should pass through to the inferior when detaching. */
2842
2843 void
2844 remote_target::program_signals (gdb::array_view<const unsigned char> signals)
2845 {
2846 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2847 {
2848 char *packet, *p;
2849 int count = 0;
2850 struct remote_state *rs = get_remote_state ();
2851
2852 gdb_assert (signals.size () < 256);
2853 for (size_t i = 0; i < signals.size (); i++)
2854 {
2855 if (signals[i])
2856 count++;
2857 }
2858 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2859 strcpy (packet, "QProgramSignals:");
2860 p = packet + strlen (packet);
2861 for (size_t i = 0; i < signals.size (); i++)
2862 {
2863 if (signal_pass_state (i))
2864 {
2865 if (i >= 16)
2866 *p++ = tohex (i >> 4);
2867 *p++ = tohex (i & 15);
2868 if (count)
2869 *p++ = ';';
2870 else
2871 break;
2872 count--;
2873 }
2874 }
2875 *p = 0;
2876 if (!rs->last_program_signals_packet
2877 || strcmp (rs->last_program_signals_packet, packet) != 0)
2878 {
2879 putpkt (packet);
2880 getpkt (&rs->buf, 0);
2881 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2882 xfree (rs->last_program_signals_packet);
2883 rs->last_program_signals_packet = packet;
2884 }
2885 else
2886 xfree (packet);
2887 }
2888 }
2889
2890 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2891 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2892 thread. If GEN is set, set the general thread, if not, then set
2893 the step/continue thread. */
2894 void
2895 remote_target::set_thread (ptid_t ptid, int gen)
2896 {
2897 struct remote_state *rs = get_remote_state ();
2898 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2899 char *buf = rs->buf.data ();
2900 char *endbuf = buf + get_remote_packet_size ();
2901
2902 if (state == ptid)
2903 return;
2904
2905 *buf++ = 'H';
2906 *buf++ = gen ? 'g' : 'c';
2907 if (ptid == magic_null_ptid)
2908 xsnprintf (buf, endbuf - buf, "0");
2909 else if (ptid == any_thread_ptid)
2910 xsnprintf (buf, endbuf - buf, "0");
2911 else if (ptid == minus_one_ptid)
2912 xsnprintf (buf, endbuf - buf, "-1");
2913 else
2914 write_ptid (buf, endbuf, ptid);
2915 putpkt (rs->buf);
2916 getpkt (&rs->buf, 0);
2917 if (gen)
2918 rs->general_thread = ptid;
2919 else
2920 rs->continue_thread = ptid;
2921 }
2922
2923 void
2924 remote_target::set_general_thread (ptid_t ptid)
2925 {
2926 set_thread (ptid, 1);
2927 }
2928
2929 void
2930 remote_target::set_continue_thread (ptid_t ptid)
2931 {
2932 set_thread (ptid, 0);
2933 }
2934
2935 /* Change the remote current process. Which thread within the process
2936 ends up selected isn't important, as long as it is the same process
2937 as what INFERIOR_PTID points to.
2938
2939 This comes from that fact that there is no explicit notion of
2940 "selected process" in the protocol. The selected process for
2941 general operations is the process the selected general thread
2942 belongs to. */
2943
2944 void
2945 remote_target::set_general_process ()
2946 {
2947 struct remote_state *rs = get_remote_state ();
2948
2949 /* If the remote can't handle multiple processes, don't bother. */
2950 if (!remote_multi_process_p (rs))
2951 return;
2952
2953 /* We only need to change the remote current thread if it's pointing
2954 at some other process. */
2955 if (rs->general_thread.pid () != inferior_ptid.pid ())
2956 set_general_thread (inferior_ptid);
2957 }
2958
2959 \f
2960 /* Return nonzero if this is the main thread that we made up ourselves
2961 to model non-threaded targets as single-threaded. */
2962
2963 static int
2964 remote_thread_always_alive (ptid_t ptid)
2965 {
2966 if (ptid == magic_null_ptid)
2967 /* The main thread is always alive. */
2968 return 1;
2969
2970 if (ptid.pid () != 0 && ptid.lwp () == 0)
2971 /* The main thread is always alive. This can happen after a
2972 vAttach, if the remote side doesn't support
2973 multi-threading. */
2974 return 1;
2975
2976 return 0;
2977 }
2978
2979 /* Return nonzero if the thread PTID is still alive on the remote
2980 system. */
2981
2982 bool
2983 remote_target::thread_alive (ptid_t ptid)
2984 {
2985 struct remote_state *rs = get_remote_state ();
2986 char *p, *endp;
2987
2988 /* Check if this is a thread that we made up ourselves to model
2989 non-threaded targets as single-threaded. */
2990 if (remote_thread_always_alive (ptid))
2991 return 1;
2992
2993 p = rs->buf.data ();
2994 endp = p + get_remote_packet_size ();
2995
2996 *p++ = 'T';
2997 write_ptid (p, endp, ptid);
2998
2999 putpkt (rs->buf);
3000 getpkt (&rs->buf, 0);
3001 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
3002 }
3003
3004 /* Return a pointer to a thread name if we know it and NULL otherwise.
3005 The thread_info object owns the memory for the name. */
3006
3007 const char *
3008 remote_target::thread_name (struct thread_info *info)
3009 {
3010 if (info->priv != NULL)
3011 {
3012 const std::string &name = get_remote_thread_info (info)->name;
3013 return !name.empty () ? name.c_str () : NULL;
3014 }
3015
3016 return NULL;
3017 }
3018
3019 /* About these extended threadlist and threadinfo packets. They are
3020 variable length packets but, the fields within them are often fixed
3021 length. They are redundant enough to send over UDP as is the
3022 remote protocol in general. There is a matching unit test module
3023 in libstub. */
3024
3025 /* WARNING: This threadref data structure comes from the remote O.S.,
3026 libstub protocol encoding, and remote.c. It is not particularly
3027 changable. */
3028
3029 /* Right now, the internal structure is int. We want it to be bigger.
3030 Plan to fix this. */
3031
3032 typedef int gdb_threadref; /* Internal GDB thread reference. */
3033
3034 /* gdb_ext_thread_info is an internal GDB data structure which is
3035 equivalent to the reply of the remote threadinfo packet. */
3036
3037 struct gdb_ext_thread_info
3038 {
3039 threadref threadid; /* External form of thread reference. */
3040 int active; /* Has state interesting to GDB?
3041 regs, stack. */
3042 char display[256]; /* Brief state display, name,
3043 blocked/suspended. */
3044 char shortname[32]; /* To be used to name threads. */
3045 char more_display[256]; /* Long info, statistics, queue depth,
3046 whatever. */
3047 };
3048
3049 /* The volume of remote transfers can be limited by submitting
3050 a mask containing bits specifying the desired information.
3051 Use a union of these values as the 'selection' parameter to
3052 get_thread_info. FIXME: Make these TAG names more thread specific. */
3053
3054 #define TAG_THREADID 1
3055 #define TAG_EXISTS 2
3056 #define TAG_DISPLAY 4
3057 #define TAG_THREADNAME 8
3058 #define TAG_MOREDISPLAY 16
3059
3060 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
3061
3062 static const char *unpack_nibble (const char *buf, int *val);
3063
3064 static const char *unpack_byte (const char *buf, int *value);
3065
3066 static char *pack_int (char *buf, int value);
3067
3068 static const char *unpack_int (const char *buf, int *value);
3069
3070 static const char *unpack_string (const char *src, char *dest, int length);
3071
3072 static char *pack_threadid (char *pkt, threadref *id);
3073
3074 static const char *unpack_threadid (const char *inbuf, threadref *id);
3075
3076 void int_to_threadref (threadref *id, int value);
3077
3078 static int threadref_to_int (threadref *ref);
3079
3080 static void copy_threadref (threadref *dest, threadref *src);
3081
3082 static int threadmatch (threadref *dest, threadref *src);
3083
3084 static char *pack_threadinfo_request (char *pkt, int mode,
3085 threadref *id);
3086
3087 static char *pack_threadlist_request (char *pkt, int startflag,
3088 int threadcount,
3089 threadref *nextthread);
3090
3091 static int remote_newthread_step (threadref *ref, void *context);
3092
3093
3094 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
3095 buffer we're allowed to write to. Returns
3096 BUF+CHARACTERS_WRITTEN. */
3097
3098 char *
3099 remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
3100 {
3101 int pid, tid;
3102 struct remote_state *rs = get_remote_state ();
3103
3104 if (remote_multi_process_p (rs))
3105 {
3106 pid = ptid.pid ();
3107 if (pid < 0)
3108 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
3109 else
3110 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
3111 }
3112 tid = ptid.lwp ();
3113 if (tid < 0)
3114 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
3115 else
3116 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
3117
3118 return buf;
3119 }
3120
3121 /* Extract a PTID from BUF. If non-null, OBUF is set to one past the
3122 last parsed char. Returns null_ptid if no thread id is found, and
3123 throws an error if the thread id has an invalid format. */
3124
3125 static ptid_t
3126 read_ptid (const char *buf, const char **obuf)
3127 {
3128 const char *p = buf;
3129 const char *pp;
3130 ULONGEST pid = 0, tid = 0;
3131
3132 if (*p == 'p')
3133 {
3134 /* Multi-process ptid. */
3135 pp = unpack_varlen_hex (p + 1, &pid);
3136 if (*pp != '.')
3137 error (_("invalid remote ptid: %s"), p);
3138
3139 p = pp;
3140 pp = unpack_varlen_hex (p + 1, &tid);
3141 if (obuf)
3142 *obuf = pp;
3143 return ptid_t (pid, tid);
3144 }
3145
3146 /* No multi-process. Just a tid. */
3147 pp = unpack_varlen_hex (p, &tid);
3148
3149 /* Return null_ptid when no thread id is found. */
3150 if (p == pp)
3151 {
3152 if (obuf)
3153 *obuf = pp;
3154 return null_ptid;
3155 }
3156
3157 /* Since the stub is not sending a process id, default to what's
3158 current_inferior, unless it doesn't have a PID yet. If so,
3159 then since there's no way to know the pid of the reported
3160 threads, use the magic number. */
3161 inferior *inf = current_inferior ();
3162 if (inf->pid == 0)
3163 pid = magic_null_ptid.pid ();
3164 else
3165 pid = inf->pid;
3166
3167 if (obuf)
3168 *obuf = pp;
3169 return ptid_t (pid, tid);
3170 }
3171
3172 static int
3173 stubhex (int ch)
3174 {
3175 if (ch >= 'a' && ch <= 'f')
3176 return ch - 'a' + 10;
3177 if (ch >= '0' && ch <= '9')
3178 return ch - '0';
3179 if (ch >= 'A' && ch <= 'F')
3180 return ch - 'A' + 10;
3181 return -1;
3182 }
3183
3184 static int
3185 stub_unpack_int (const char *buff, int fieldlength)
3186 {
3187 int nibble;
3188 int retval = 0;
3189
3190 while (fieldlength)
3191 {
3192 nibble = stubhex (*buff++);
3193 retval |= nibble;
3194 fieldlength--;
3195 if (fieldlength)
3196 retval = retval << 4;
3197 }
3198 return retval;
3199 }
3200
3201 static const char *
3202 unpack_nibble (const char *buf, int *val)
3203 {
3204 *val = fromhex (*buf++);
3205 return buf;
3206 }
3207
3208 static const char *
3209 unpack_byte (const char *buf, int *value)
3210 {
3211 *value = stub_unpack_int (buf, 2);
3212 return buf + 2;
3213 }
3214
3215 static char *
3216 pack_int (char *buf, int value)
3217 {
3218 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3219 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3220 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3221 buf = pack_hex_byte (buf, (value & 0xff));
3222 return buf;
3223 }
3224
3225 static const char *
3226 unpack_int (const char *buf, int *value)
3227 {
3228 *value = stub_unpack_int (buf, 8);
3229 return buf + 8;
3230 }
3231
3232 #if 0 /* Currently unused, uncomment when needed. */
3233 static char *pack_string (char *pkt, char *string);
3234
3235 static char *
3236 pack_string (char *pkt, char *string)
3237 {
3238 char ch;
3239 int len;
3240
3241 len = strlen (string);
3242 if (len > 200)
3243 len = 200; /* Bigger than most GDB packets, junk??? */
3244 pkt = pack_hex_byte (pkt, len);
3245 while (len-- > 0)
3246 {
3247 ch = *string++;
3248 if ((ch == '\0') || (ch == '#'))
3249 ch = '*'; /* Protect encapsulation. */
3250 *pkt++ = ch;
3251 }
3252 return pkt;
3253 }
3254 #endif /* 0 (unused) */
3255
3256 static const char *
3257 unpack_string (const char *src, char *dest, int length)
3258 {
3259 while (length--)
3260 *dest++ = *src++;
3261 *dest = '\0';
3262 return src;
3263 }
3264
3265 static char *
3266 pack_threadid (char *pkt, threadref *id)
3267 {
3268 char *limit;
3269 unsigned char *altid;
3270
3271 altid = (unsigned char *) id;
3272 limit = pkt + BUF_THREAD_ID_SIZE;
3273 while (pkt < limit)
3274 pkt = pack_hex_byte (pkt, *altid++);
3275 return pkt;
3276 }
3277
3278
3279 static const char *
3280 unpack_threadid (const char *inbuf, threadref *id)
3281 {
3282 char *altref;
3283 const char *limit = inbuf + BUF_THREAD_ID_SIZE;
3284 int x, y;
3285
3286 altref = (char *) id;
3287
3288 while (inbuf < limit)
3289 {
3290 x = stubhex (*inbuf++);
3291 y = stubhex (*inbuf++);
3292 *altref++ = (x << 4) | y;
3293 }
3294 return inbuf;
3295 }
3296
3297 /* Externally, threadrefs are 64 bits but internally, they are still
3298 ints. This is due to a mismatch of specifications. We would like
3299 to use 64bit thread references internally. This is an adapter
3300 function. */
3301
3302 void
3303 int_to_threadref (threadref *id, int value)
3304 {
3305 unsigned char *scan;
3306
3307 scan = (unsigned char *) id;
3308 {
3309 int i = 4;
3310 while (i--)
3311 *scan++ = 0;
3312 }
3313 *scan++ = (value >> 24) & 0xff;
3314 *scan++ = (value >> 16) & 0xff;
3315 *scan++ = (value >> 8) & 0xff;
3316 *scan++ = (value & 0xff);
3317 }
3318
3319 static int
3320 threadref_to_int (threadref *ref)
3321 {
3322 int i, value = 0;
3323 unsigned char *scan;
3324
3325 scan = *ref;
3326 scan += 4;
3327 i = 4;
3328 while (i-- > 0)
3329 value = (value << 8) | ((*scan++) & 0xff);
3330 return value;
3331 }
3332
3333 static void
3334 copy_threadref (threadref *dest, threadref *src)
3335 {
3336 int i;
3337 unsigned char *csrc, *cdest;
3338
3339 csrc = (unsigned char *) src;
3340 cdest = (unsigned char *) dest;
3341 i = 8;
3342 while (i--)
3343 *cdest++ = *csrc++;
3344 }
3345
3346 static int
3347 threadmatch (threadref *dest, threadref *src)
3348 {
3349 /* Things are broken right now, so just assume we got a match. */
3350 #if 0
3351 unsigned char *srcp, *destp;
3352 int i, result;
3353 srcp = (char *) src;
3354 destp = (char *) dest;
3355
3356 result = 1;
3357 while (i-- > 0)
3358 result &= (*srcp++ == *destp++) ? 1 : 0;
3359 return result;
3360 #endif
3361 return 1;
3362 }
3363
3364 /*
3365 threadid:1, # always request threadid
3366 context_exists:2,
3367 display:4,
3368 unique_name:8,
3369 more_display:16
3370 */
3371
3372 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3373
3374 static char *
3375 pack_threadinfo_request (char *pkt, int mode, threadref *id)
3376 {
3377 *pkt++ = 'q'; /* Info Query */
3378 *pkt++ = 'P'; /* process or thread info */
3379 pkt = pack_int (pkt, mode); /* mode */
3380 pkt = pack_threadid (pkt, id); /* threadid */
3381 *pkt = '\0'; /* terminate */
3382 return pkt;
3383 }
3384
3385 /* These values tag the fields in a thread info response packet. */
3386 /* Tagging the fields allows us to request specific fields and to
3387 add more fields as time goes by. */
3388
3389 #define TAG_THREADID 1 /* Echo the thread identifier. */
3390 #define TAG_EXISTS 2 /* Is this process defined enough to
3391 fetch registers and its stack? */
3392 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
3393 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
3394 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
3395 the process. */
3396
3397 int
3398 remote_target::remote_unpack_thread_info_response (const char *pkt,
3399 threadref *expectedref,
3400 gdb_ext_thread_info *info)
3401 {
3402 struct remote_state *rs = get_remote_state ();
3403 int mask, length;
3404 int tag;
3405 threadref ref;
3406 const char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */
3407 int retval = 1;
3408
3409 /* info->threadid = 0; FIXME: implement zero_threadref. */
3410 info->active = 0;
3411 info->display[0] = '\0';
3412 info->shortname[0] = '\0';
3413 info->more_display[0] = '\0';
3414
3415 /* Assume the characters indicating the packet type have been
3416 stripped. */
3417 pkt = unpack_int (pkt, &mask); /* arg mask */
3418 pkt = unpack_threadid (pkt, &ref);
3419
3420 if (mask == 0)
3421 warning (_("Incomplete response to threadinfo request."));
3422 if (!threadmatch (&ref, expectedref))
3423 { /* This is an answer to a different request. */
3424 warning (_("ERROR RMT Thread info mismatch."));
3425 return 0;
3426 }
3427 copy_threadref (&info->threadid, &ref);
3428
3429 /* Loop on tagged fields , try to bail if something goes wrong. */
3430
3431 /* Packets are terminated with nulls. */
3432 while ((pkt < limit) && mask && *pkt)
3433 {
3434 pkt = unpack_int (pkt, &tag); /* tag */
3435 pkt = unpack_byte (pkt, &length); /* length */
3436 if (!(tag & mask)) /* Tags out of synch with mask. */
3437 {
3438 warning (_("ERROR RMT: threadinfo tag mismatch."));
3439 retval = 0;
3440 break;
3441 }
3442 if (tag == TAG_THREADID)
3443 {
3444 if (length != 16)
3445 {
3446 warning (_("ERROR RMT: length of threadid is not 16."));
3447 retval = 0;
3448 break;
3449 }
3450 pkt = unpack_threadid (pkt, &ref);
3451 mask = mask & ~TAG_THREADID;
3452 continue;
3453 }
3454 if (tag == TAG_EXISTS)
3455 {
3456 info->active = stub_unpack_int (pkt, length);
3457 pkt += length;
3458 mask = mask & ~(TAG_EXISTS);
3459 if (length > 8)
3460 {
3461 warning (_("ERROR RMT: 'exists' length too long."));
3462 retval = 0;
3463 break;
3464 }
3465 continue;
3466 }
3467 if (tag == TAG_THREADNAME)
3468 {
3469 pkt = unpack_string (pkt, &info->shortname[0], length);
3470 mask = mask & ~TAG_THREADNAME;
3471 continue;
3472 }
3473 if (tag == TAG_DISPLAY)
3474 {
3475 pkt = unpack_string (pkt, &info->display[0], length);
3476 mask = mask & ~TAG_DISPLAY;
3477 continue;
3478 }
3479 if (tag == TAG_MOREDISPLAY)
3480 {
3481 pkt = unpack_string (pkt, &info->more_display[0], length);
3482 mask = mask & ~TAG_MOREDISPLAY;
3483 continue;
3484 }
3485 warning (_("ERROR RMT: unknown thread info tag."));
3486 break; /* Not a tag we know about. */
3487 }
3488 return retval;
3489 }
3490
3491 int
3492 remote_target::remote_get_threadinfo (threadref *threadid,
3493 int fieldset,
3494 gdb_ext_thread_info *info)
3495 {
3496 struct remote_state *rs = get_remote_state ();
3497 int result;
3498
3499 pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
3500 putpkt (rs->buf);
3501 getpkt (&rs->buf, 0);
3502
3503 if (rs->buf[0] == '\0')
3504 return 0;
3505
3506 result = remote_unpack_thread_info_response (&rs->buf[2],
3507 threadid, info);
3508 return result;
3509 }
3510
3511 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3512
3513 static char *
3514 pack_threadlist_request (char *pkt, int startflag, int threadcount,
3515 threadref *nextthread)
3516 {
3517 *pkt++ = 'q'; /* info query packet */
3518 *pkt++ = 'L'; /* Process LIST or threadLIST request */
3519 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
3520 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3521 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3522 *pkt = '\0';
3523 return pkt;
3524 }
3525
3526 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3527
3528 int
3529 remote_target::parse_threadlist_response (const char *pkt, int result_limit,
3530 threadref *original_echo,
3531 threadref *resultlist,
3532 int *doneflag)
3533 {
3534 struct remote_state *rs = get_remote_state ();
3535 int count, resultcount, done;
3536
3537 resultcount = 0;
3538 /* Assume the 'q' and 'M chars have been stripped. */
3539 const char *limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
3540 /* done parse past here */
3541 pkt = unpack_byte (pkt, &count); /* count field */
3542 pkt = unpack_nibble (pkt, &done);
3543 /* The first threadid is the argument threadid. */
3544 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3545 while ((count-- > 0) && (pkt < limit))
3546 {
3547 pkt = unpack_threadid (pkt, resultlist++);
3548 if (resultcount++ >= result_limit)
3549 break;
3550 }
3551 if (doneflag)
3552 *doneflag = done;
3553 return resultcount;
3554 }
3555
3556 /* Fetch the next batch of threads from the remote. Returns -1 if the
3557 qL packet is not supported, 0 on error and 1 on success. */
3558
3559 int
3560 remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3561 int result_limit, int *done, int *result_count,
3562 threadref *threadlist)
3563 {
3564 struct remote_state *rs = get_remote_state ();
3565 int result = 1;
3566
3567 /* Truncate result limit to be smaller than the packet size. */
3568 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3569 >= get_remote_packet_size ())
3570 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
3571
3572 pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3573 nextthread);
3574 putpkt (rs->buf);
3575 getpkt (&rs->buf, 0);
3576 if (rs->buf[0] == '\0')
3577 {
3578 /* Packet not supported. */
3579 return -1;
3580 }
3581
3582 *result_count =
3583 parse_threadlist_response (&rs->buf[2], result_limit,
3584 &rs->echo_nextthread, threadlist, done);
3585
3586 if (!threadmatch (&rs->echo_nextthread, nextthread))
3587 {
3588 /* FIXME: This is a good reason to drop the packet. */
3589 /* Possibly, there is a duplicate response. */
3590 /* Possibilities :
3591 retransmit immediatly - race conditions
3592 retransmit after timeout - yes
3593 exit
3594 wait for packet, then exit
3595 */
3596 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
3597 return 0; /* I choose simply exiting. */
3598 }
3599 if (*result_count <= 0)
3600 {
3601 if (*done != 1)
3602 {
3603 warning (_("RMT ERROR : failed to get remote thread list."));
3604 result = 0;
3605 }
3606 return result; /* break; */
3607 }
3608 if (*result_count > result_limit)
3609 {
3610 *result_count = 0;
3611 warning (_("RMT ERROR: threadlist response longer than requested."));
3612 return 0;
3613 }
3614 return result;
3615 }
3616
3617 /* Fetch the list of remote threads, with the qL packet, and call
3618 STEPFUNCTION for each thread found. Stops iterating and returns 1
3619 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3620 STEPFUNCTION returns false. If the packet is not supported,
3621 returns -1. */
3622
3623 int
3624 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3625 void *context, int looplimit)
3626 {
3627 struct remote_state *rs = get_remote_state ();
3628 int done, i, result_count;
3629 int startflag = 1;
3630 int result = 1;
3631 int loopcount = 0;
3632
3633 done = 0;
3634 while (!done)
3635 {
3636 if (loopcount++ > looplimit)
3637 {
3638 result = 0;
3639 warning (_("Remote fetch threadlist -infinite loop-."));
3640 break;
3641 }
3642 result = remote_get_threadlist (startflag, &rs->nextthread,
3643 MAXTHREADLISTRESULTS,
3644 &done, &result_count,
3645 rs->resultthreadlist);
3646 if (result <= 0)
3647 break;
3648 /* Clear for later iterations. */
3649 startflag = 0;
3650 /* Setup to resume next batch of thread references, set nextthread. */
3651 if (result_count >= 1)
3652 copy_threadref (&rs->nextthread,
3653 &rs->resultthreadlist[result_count - 1]);
3654 i = 0;
3655 while (result_count--)
3656 {
3657 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3658 {
3659 result = 0;
3660 break;
3661 }
3662 }
3663 }
3664 return result;
3665 }
3666
3667 /* A thread found on the remote target. */
3668
3669 struct thread_item
3670 {
3671 explicit thread_item (ptid_t ptid_)
3672 : ptid (ptid_)
3673 {}
3674
3675 thread_item (thread_item &&other) = default;
3676 thread_item &operator= (thread_item &&other) = default;
3677
3678 DISABLE_COPY_AND_ASSIGN (thread_item);
3679
3680 /* The thread's PTID. */
3681 ptid_t ptid;
3682
3683 /* The thread's extra info. */
3684 std::string extra;
3685
3686 /* The thread's name. */
3687 std::string name;
3688
3689 /* The core the thread was running on. -1 if not known. */
3690 int core = -1;
3691
3692 /* The thread handle associated with the thread. */
3693 gdb::byte_vector thread_handle;
3694 };
3695
3696 /* Context passed around to the various methods listing remote
3697 threads. As new threads are found, they're added to the ITEMS
3698 vector. */
3699
3700 struct threads_listing_context
3701 {
3702 /* Return true if this object contains an entry for a thread with ptid
3703 PTID. */
3704
3705 bool contains_thread (ptid_t ptid) const
3706 {
3707 auto match_ptid = [&] (const thread_item &item)
3708 {
3709 return item.ptid == ptid;
3710 };
3711
3712 auto it = std::find_if (this->items.begin (),
3713 this->items.end (),
3714 match_ptid);
3715
3716 return it != this->items.end ();
3717 }
3718
3719 /* Remove the thread with ptid PTID. */
3720
3721 void remove_thread (ptid_t ptid)
3722 {
3723 auto match_ptid = [&] (const thread_item &item)
3724 {
3725 return item.ptid == ptid;
3726 };
3727
3728 auto it = std::remove_if (this->items.begin (),
3729 this->items.end (),
3730 match_ptid);
3731
3732 if (it != this->items.end ())
3733 this->items.erase (it);
3734 }
3735
3736 /* The threads found on the remote target. */
3737 std::vector<thread_item> items;
3738 };
3739
3740 static int
3741 remote_newthread_step (threadref *ref, void *data)
3742 {
3743 struct threads_listing_context *context
3744 = (struct threads_listing_context *) data;
3745 int pid = inferior_ptid.pid ();
3746 int lwp = threadref_to_int (ref);
3747 ptid_t ptid (pid, lwp);
3748
3749 context->items.emplace_back (ptid);
3750
3751 return 1; /* continue iterator */
3752 }
3753
3754 #define CRAZY_MAX_THREADS 1000
3755
3756 ptid_t
3757 remote_target::remote_current_thread (ptid_t oldpid)
3758 {
3759 struct remote_state *rs = get_remote_state ();
3760
3761 putpkt ("qC");
3762 getpkt (&rs->buf, 0);
3763 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3764 {
3765 const char *obuf;
3766 ptid_t result;
3767
3768 result = read_ptid (&rs->buf[2], &obuf);
3769 if (*obuf != '\0')
3770 remote_debug_printf ("warning: garbage in qC reply");
3771
3772 return result;
3773 }
3774 else
3775 return oldpid;
3776 }
3777
3778 /* List remote threads using the deprecated qL packet. */
3779
3780 int
3781 remote_target::remote_get_threads_with_ql (threads_listing_context *context)
3782 {
3783 if (remote_threadlist_iterator (remote_newthread_step, context,
3784 CRAZY_MAX_THREADS) >= 0)
3785 return 1;
3786
3787 return 0;
3788 }
3789
3790 #if defined(HAVE_LIBEXPAT)
3791
3792 static void
3793 start_thread (struct gdb_xml_parser *parser,
3794 const struct gdb_xml_element *element,
3795 void *user_data,
3796 std::vector<gdb_xml_value> &attributes)
3797 {
3798 struct threads_listing_context *data
3799 = (struct threads_listing_context *) user_data;
3800 struct gdb_xml_value *attr;
3801
3802 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
3803 ptid_t ptid = read_ptid (id, NULL);
3804
3805 data->items.emplace_back (ptid);
3806 thread_item &item = data->items.back ();
3807
3808 attr = xml_find_attribute (attributes, "core");
3809 if (attr != NULL)
3810 item.core = *(ULONGEST *) attr->value.get ();
3811
3812 attr = xml_find_attribute (attributes, "name");
3813 if (attr != NULL)
3814 item.name = (const char *) attr->value.get ();
3815
3816 attr = xml_find_attribute (attributes, "handle");
3817 if (attr != NULL)
3818 item.thread_handle = hex2bin ((const char *) attr->value.get ());
3819 }
3820
3821 static void
3822 end_thread (struct gdb_xml_parser *parser,
3823 const struct gdb_xml_element *element,
3824 void *user_data, const char *body_text)
3825 {
3826 struct threads_listing_context *data
3827 = (struct threads_listing_context *) user_data;
3828
3829 if (body_text != NULL && *body_text != '\0')
3830 data->items.back ().extra = body_text;
3831 }
3832
3833 const struct gdb_xml_attribute thread_attributes[] = {
3834 { "id", GDB_XML_AF_NONE, NULL, NULL },
3835 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3836 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3837 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3838 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3839 };
3840
3841 const struct gdb_xml_element thread_children[] = {
3842 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3843 };
3844
3845 const struct gdb_xml_element threads_children[] = {
3846 { "thread", thread_attributes, thread_children,
3847 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3848 start_thread, end_thread },
3849 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3850 };
3851
3852 const struct gdb_xml_element threads_elements[] = {
3853 { "threads", NULL, threads_children,
3854 GDB_XML_EF_NONE, NULL, NULL },
3855 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3856 };
3857
3858 #endif
3859
3860 /* List remote threads using qXfer:threads:read. */
3861
3862 int
3863 remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
3864 {
3865 #if defined(HAVE_LIBEXPAT)
3866 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3867 {
3868 gdb::optional<gdb::char_vector> xml
3869 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
3870
3871 if (xml && (*xml)[0] != '\0')
3872 {
3873 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3874 threads_elements, xml->data (), context);
3875 }
3876
3877 return 1;
3878 }
3879 #endif
3880
3881 return 0;
3882 }
3883
3884 /* List remote threads using qfThreadInfo/qsThreadInfo. */
3885
3886 int
3887 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
3888 {
3889 struct remote_state *rs = get_remote_state ();
3890
3891 if (rs->use_threadinfo_query)
3892 {
3893 const char *bufp;
3894
3895 putpkt ("qfThreadInfo");
3896 getpkt (&rs->buf, 0);
3897 bufp = rs->buf.data ();
3898 if (bufp[0] != '\0') /* q packet recognized */
3899 {
3900 while (*bufp++ == 'm') /* reply contains one or more TID */
3901 {
3902 do
3903 {
3904 ptid_t ptid = read_ptid (bufp, &bufp);
3905 context->items.emplace_back (ptid);
3906 }
3907 while (*bufp++ == ','); /* comma-separated list */
3908 putpkt ("qsThreadInfo");
3909 getpkt (&rs->buf, 0);
3910 bufp = rs->buf.data ();
3911 }
3912 return 1;
3913 }
3914 else
3915 {
3916 /* Packet not recognized. */
3917 rs->use_threadinfo_query = 0;
3918 }
3919 }
3920
3921 return 0;
3922 }
3923
3924 /* Return true if INF only has one non-exited thread. */
3925
3926 static bool
3927 has_single_non_exited_thread (inferior *inf)
3928 {
3929 int count = 0;
3930 for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
3931 if (++count > 1)
3932 break;
3933 return count == 1;
3934 }
3935
3936 /* Implement the to_update_thread_list function for the remote
3937 targets. */
3938
3939 void
3940 remote_target::update_thread_list ()
3941 {
3942 struct threads_listing_context context;
3943 int got_list = 0;
3944
3945 /* We have a few different mechanisms to fetch the thread list. Try
3946 them all, starting with the most preferred one first, falling
3947 back to older methods. */
3948 if (remote_get_threads_with_qxfer (&context)
3949 || remote_get_threads_with_qthreadinfo (&context)
3950 || remote_get_threads_with_ql (&context))
3951 {
3952 got_list = 1;
3953
3954 if (context.items.empty ()
3955 && remote_thread_always_alive (inferior_ptid))
3956 {
3957 /* Some targets don't really support threads, but still
3958 reply an (empty) thread list in response to the thread
3959 listing packets, instead of replying "packet not
3960 supported". Exit early so we don't delete the main
3961 thread. */
3962 return;
3963 }
3964
3965 /* CONTEXT now holds the current thread list on the remote
3966 target end. Delete GDB-side threads no longer found on the
3967 target. */
3968 for (thread_info *tp : all_threads_safe ())
3969 {
3970 if (tp->inf->process_target () != this)
3971 continue;
3972
3973 if (!context.contains_thread (tp->ptid))
3974 {
3975 /* Do not remove the thread if it is the last thread in
3976 the inferior. This situation happens when we have a
3977 pending exit process status to process. Otherwise we
3978 may end up with a seemingly live inferior (i.e. pid
3979 != 0) that has no threads. */
3980 if (has_single_non_exited_thread (tp->inf))
3981 continue;
3982
3983 /* Not found. */
3984 delete_thread (tp);
3985 }
3986 }
3987
3988 /* Remove any unreported fork child threads from CONTEXT so
3989 that we don't interfere with follow fork, which is where
3990 creation of such threads is handled. */
3991 remove_new_fork_children (&context);
3992
3993 /* And now add threads we don't know about yet to our list. */
3994 for (thread_item &item : context.items)
3995 {
3996 if (item.ptid != null_ptid)
3997 {
3998 /* In non-stop mode, we assume new found threads are
3999 executing until proven otherwise with a stop reply.
4000 In all-stop, we can only get here if all threads are
4001 stopped. */
4002 bool executing = target_is_non_stop_p ();
4003
4004 remote_notice_new_inferior (item.ptid, executing);
4005
4006 thread_info *tp = find_thread_ptid (this, item.ptid);
4007 remote_thread_info *info = get_remote_thread_info (tp);
4008 info->core = item.core;
4009 info->extra = std::move (item.extra);
4010 info->name = std::move (item.name);
4011 info->thread_handle = std::move (item.thread_handle);
4012 }
4013 }
4014 }
4015
4016 if (!got_list)
4017 {
4018 /* If no thread listing method is supported, then query whether
4019 each known thread is alive, one by one, with the T packet.
4020 If the target doesn't support threads at all, then this is a
4021 no-op. See remote_thread_alive. */
4022 prune_threads ();
4023 }
4024 }
4025
4026 /*
4027 * Collect a descriptive string about the given thread.
4028 * The target may say anything it wants to about the thread
4029 * (typically info about its blocked / runnable state, name, etc.).
4030 * This string will appear in the info threads display.
4031 *
4032 * Optional: targets are not required to implement this function.
4033 */
4034
4035 const char *
4036 remote_target::extra_thread_info (thread_info *tp)
4037 {
4038 struct remote_state *rs = get_remote_state ();
4039 int set;
4040 threadref id;
4041 struct gdb_ext_thread_info threadinfo;
4042
4043 if (rs->remote_desc == 0) /* paranoia */
4044 internal_error (__FILE__, __LINE__,
4045 _("remote_threads_extra_info"));
4046
4047 if (tp->ptid == magic_null_ptid
4048 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
4049 /* This is the main thread which was added by GDB. The remote
4050 server doesn't know about it. */
4051 return NULL;
4052
4053 std::string &extra = get_remote_thread_info (tp)->extra;
4054
4055 /* If already have cached info, use it. */
4056 if (!extra.empty ())
4057 return extra.c_str ();
4058
4059 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
4060 {
4061 /* If we're using qXfer:threads:read, then the extra info is
4062 included in the XML. So if we didn't have anything cached,
4063 it's because there's really no extra info. */
4064 return NULL;
4065 }
4066
4067 if (rs->use_threadextra_query)
4068 {
4069 char *b = rs->buf.data ();
4070 char *endb = b + get_remote_packet_size ();
4071
4072 xsnprintf (b, endb - b, "qThreadExtraInfo,");
4073 b += strlen (b);
4074 write_ptid (b, endb, tp->ptid);
4075
4076 putpkt (rs->buf);
4077 getpkt (&rs->buf, 0);
4078 if (rs->buf[0] != 0)
4079 {
4080 extra.resize (strlen (rs->buf.data ()) / 2);
4081 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
4082 return extra.c_str ();
4083 }
4084 }
4085
4086 /* If the above query fails, fall back to the old method. */
4087 rs->use_threadextra_query = 0;
4088 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
4089 | TAG_MOREDISPLAY | TAG_DISPLAY;
4090 int_to_threadref (&id, tp->ptid.lwp ());
4091 if (remote_get_threadinfo (&id, set, &threadinfo))
4092 if (threadinfo.active)
4093 {
4094 if (*threadinfo.shortname)
4095 string_appendf (extra, " Name: %s", threadinfo.shortname);
4096 if (*threadinfo.display)
4097 {
4098 if (!extra.empty ())
4099 extra += ',';
4100 string_appendf (extra, " State: %s", threadinfo.display);
4101 }
4102 if (*threadinfo.more_display)
4103 {
4104 if (!extra.empty ())
4105 extra += ',';
4106 string_appendf (extra, " Priority: %s", threadinfo.more_display);
4107 }
4108 return extra.c_str ();
4109 }
4110 return NULL;
4111 }
4112 \f
4113
4114 bool
4115 remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
4116 struct static_tracepoint_marker *marker)
4117 {
4118 struct remote_state *rs = get_remote_state ();
4119 char *p = rs->buf.data ();
4120
4121 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
4122 p += strlen (p);
4123 p += hexnumstr (p, addr);
4124 putpkt (rs->buf);
4125 getpkt (&rs->buf, 0);
4126 p = rs->buf.data ();
4127
4128 if (*p == 'E')
4129 error (_("Remote failure reply: %s"), p);
4130
4131 if (*p++ == 'm')
4132 {
4133 parse_static_tracepoint_marker_definition (p, NULL, marker);
4134 return true;
4135 }
4136
4137 return false;
4138 }
4139
4140 std::vector<static_tracepoint_marker>
4141 remote_target::static_tracepoint_markers_by_strid (const char *strid)
4142 {
4143 struct remote_state *rs = get_remote_state ();
4144 std::vector<static_tracepoint_marker> markers;
4145 const char *p;
4146 static_tracepoint_marker marker;
4147
4148 /* Ask for a first packet of static tracepoint marker
4149 definition. */
4150 putpkt ("qTfSTM");
4151 getpkt (&rs->buf, 0);
4152 p = rs->buf.data ();
4153 if (*p == 'E')
4154 error (_("Remote failure reply: %s"), p);
4155
4156 while (*p++ == 'm')
4157 {
4158 do
4159 {
4160 parse_static_tracepoint_marker_definition (p, &p, &marker);
4161
4162 if (strid == NULL || marker.str_id == strid)
4163 markers.push_back (std::move (marker));
4164 }
4165 while (*p++ == ','); /* comma-separated list */
4166 /* Ask for another packet of static tracepoint definition. */
4167 putpkt ("qTsSTM");
4168 getpkt (&rs->buf, 0);
4169 p = rs->buf.data ();
4170 }
4171
4172 return markers;
4173 }
4174
4175 \f
4176 /* Implement the to_get_ada_task_ptid function for the remote targets. */
4177
4178 ptid_t
4179 remote_target::get_ada_task_ptid (long lwp, ULONGEST thread)
4180 {
4181 return ptid_t (inferior_ptid.pid (), lwp);
4182 }
4183 \f
4184
4185 /* Restart the remote side; this is an extended protocol operation. */
4186
4187 void
4188 remote_target::extended_remote_restart ()
4189 {
4190 struct remote_state *rs = get_remote_state ();
4191
4192 /* Send the restart command; for reasons I don't understand the
4193 remote side really expects a number after the "R". */
4194 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
4195 putpkt (rs->buf);
4196
4197 remote_fileio_reset ();
4198 }
4199 \f
4200 /* Clean up connection to a remote debugger. */
4201
4202 void
4203 remote_target::close ()
4204 {
4205 /* Make sure we leave stdin registered in the event loop. */
4206 terminal_ours ();
4207
4208 trace_reset_local_state ();
4209
4210 delete this;
4211 }
4212
4213 remote_target::~remote_target ()
4214 {
4215 struct remote_state *rs = get_remote_state ();
4216
4217 /* Check for NULL because we may get here with a partially
4218 constructed target/connection. */
4219 if (rs->remote_desc == nullptr)
4220 return;
4221
4222 serial_close (rs->remote_desc);
4223
4224 /* We are destroying the remote target, so we should discard
4225 everything of this target. */
4226 discard_pending_stop_replies_in_queue ();
4227
4228 if (rs->remote_async_inferior_event_token)
4229 delete_async_event_handler (&rs->remote_async_inferior_event_token);
4230
4231 delete rs->notif_state;
4232 }
4233
4234 /* Query the remote side for the text, data and bss offsets. */
4235
4236 void
4237 remote_target::get_offsets ()
4238 {
4239 struct remote_state *rs = get_remote_state ();
4240 char *buf;
4241 char *ptr;
4242 int lose, num_segments = 0, do_sections, do_segments;
4243 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
4244
4245 if (current_program_space->symfile_object_file == NULL)
4246 return;
4247
4248 putpkt ("qOffsets");
4249 getpkt (&rs->buf, 0);
4250 buf = rs->buf.data ();
4251
4252 if (buf[0] == '\000')
4253 return; /* Return silently. Stub doesn't support
4254 this command. */
4255 if (buf[0] == 'E')
4256 {
4257 warning (_("Remote failure reply: %s"), buf);
4258 return;
4259 }
4260
4261 /* Pick up each field in turn. This used to be done with scanf, but
4262 scanf will make trouble if CORE_ADDR size doesn't match
4263 conversion directives correctly. The following code will work
4264 with any size of CORE_ADDR. */
4265 text_addr = data_addr = bss_addr = 0;
4266 ptr = buf;
4267 lose = 0;
4268
4269 if (startswith (ptr, "Text="))
4270 {
4271 ptr += 5;
4272 /* Don't use strtol, could lose on big values. */
4273 while (*ptr && *ptr != ';')
4274 text_addr = (text_addr << 4) + fromhex (*ptr++);
4275
4276 if (startswith (ptr, ";Data="))
4277 {
4278 ptr += 6;
4279 while (*ptr && *ptr != ';')
4280 data_addr = (data_addr << 4) + fromhex (*ptr++);
4281 }
4282 else
4283 lose = 1;
4284
4285 if (!lose && startswith (ptr, ";Bss="))
4286 {
4287 ptr += 5;
4288 while (*ptr && *ptr != ';')
4289 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
4290
4291 if (bss_addr != data_addr)
4292 warning (_("Target reported unsupported offsets: %s"), buf);
4293 }
4294 else
4295 lose = 1;
4296 }
4297 else if (startswith (ptr, "TextSeg="))
4298 {
4299 ptr += 8;
4300 /* Don't use strtol, could lose on big values. */
4301 while (*ptr && *ptr != ';')
4302 text_addr = (text_addr << 4) + fromhex (*ptr++);
4303 num_segments = 1;
4304
4305 if (startswith (ptr, ";DataSeg="))
4306 {
4307 ptr += 9;
4308 while (*ptr && *ptr != ';')
4309 data_addr = (data_addr << 4) + fromhex (*ptr++);
4310 num_segments++;
4311 }
4312 }
4313 else
4314 lose = 1;
4315
4316 if (lose)
4317 error (_("Malformed response to offset query, %s"), buf);
4318 else if (*ptr != '\0')
4319 warning (_("Target reported unsupported offsets: %s"), buf);
4320
4321 objfile *objf = current_program_space->symfile_object_file;
4322 section_offsets offs = objf->section_offsets;
4323
4324 symfile_segment_data_up data = get_symfile_segment_data (objf->obfd);
4325 do_segments = (data != NULL);
4326 do_sections = num_segments == 0;
4327
4328 if (num_segments > 0)
4329 {
4330 segments[0] = text_addr;
4331 segments[1] = data_addr;
4332 }
4333 /* If we have two segments, we can still try to relocate everything
4334 by assuming that the .text and .data offsets apply to the whole
4335 text and data segments. Convert the offsets given in the packet
4336 to base addresses for symfile_map_offsets_to_segments. */
4337 else if (data != nullptr && data->segments.size () == 2)
4338 {
4339 segments[0] = data->segments[0].base + text_addr;
4340 segments[1] = data->segments[1].base + data_addr;
4341 num_segments = 2;
4342 }
4343 /* If the object file has only one segment, assume that it is text
4344 rather than data; main programs with no writable data are rare,
4345 but programs with no code are useless. Of course the code might
4346 have ended up in the data segment... to detect that we would need
4347 the permissions here. */
4348 else if (data && data->segments.size () == 1)
4349 {
4350 segments[0] = data->segments[0].base + text_addr;
4351 num_segments = 1;
4352 }
4353 /* There's no way to relocate by segment. */
4354 else
4355 do_segments = 0;
4356
4357 if (do_segments)
4358 {
4359 int ret = symfile_map_offsets_to_segments (objf->obfd,
4360 data.get (), offs,
4361 num_segments, segments);
4362
4363 if (ret == 0 && !do_sections)
4364 error (_("Can not handle qOffsets TextSeg "
4365 "response with this symbol file"));
4366
4367 if (ret > 0)
4368 do_sections = 0;
4369 }
4370
4371 if (do_sections)
4372 {
4373 offs[SECT_OFF_TEXT (objf)] = text_addr;
4374
4375 /* This is a temporary kludge to force data and bss to use the
4376 same offsets because that's what nlmconv does now. The real
4377 solution requires changes to the stub and remote.c that I
4378 don't have time to do right now. */
4379
4380 offs[SECT_OFF_DATA (objf)] = data_addr;
4381 offs[SECT_OFF_BSS (objf)] = data_addr;
4382 }
4383
4384 objfile_relocate (objf, offs);
4385 }
4386
4387 /* Send interrupt_sequence to remote target. */
4388
4389 void
4390 remote_target::send_interrupt_sequence ()
4391 {
4392 struct remote_state *rs = get_remote_state ();
4393
4394 if (interrupt_sequence_mode == interrupt_sequence_control_c)
4395 remote_serial_write ("\x03", 1);
4396 else if (interrupt_sequence_mode == interrupt_sequence_break)
4397 serial_send_break (rs->remote_desc);
4398 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4399 {
4400 serial_send_break (rs->remote_desc);
4401 remote_serial_write ("g", 1);
4402 }
4403 else
4404 internal_error (__FILE__, __LINE__,
4405 _("Invalid value for interrupt_sequence_mode: %s."),
4406 interrupt_sequence_mode);
4407 }
4408
4409
4410 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
4411 and extract the PTID. Returns NULL_PTID if not found. */
4412
4413 static ptid_t
4414 stop_reply_extract_thread (const char *stop_reply)
4415 {
4416 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4417 {
4418 const char *p;
4419
4420 /* Txx r:val ; r:val (...) */
4421 p = &stop_reply[3];
4422
4423 /* Look for "register" named "thread". */
4424 while (*p != '\0')
4425 {
4426 const char *p1;
4427
4428 p1 = strchr (p, ':');
4429 if (p1 == NULL)
4430 return null_ptid;
4431
4432 if (strncmp (p, "thread", p1 - p) == 0)
4433 return read_ptid (++p1, &p);
4434
4435 p1 = strchr (p, ';');
4436 if (p1 == NULL)
4437 return null_ptid;
4438 p1++;
4439
4440 p = p1;
4441 }
4442 }
4443
4444 return null_ptid;
4445 }
4446
4447 /* Determine the remote side's current thread. If we have a stop
4448 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4449 "thread" register we can extract the current thread from. If not,
4450 ask the remote which is the current thread with qC. The former
4451 method avoids a roundtrip. */
4452
4453 ptid_t
4454 remote_target::get_current_thread (const char *wait_status)
4455 {
4456 ptid_t ptid = null_ptid;
4457
4458 /* Note we don't use remote_parse_stop_reply as that makes use of
4459 the target architecture, which we haven't yet fully determined at
4460 this point. */
4461 if (wait_status != NULL)
4462 ptid = stop_reply_extract_thread (wait_status);
4463 if (ptid == null_ptid)
4464 ptid = remote_current_thread (inferior_ptid);
4465
4466 return ptid;
4467 }
4468
4469 /* Query the remote target for which is the current thread/process,
4470 add it to our tables, and update INFERIOR_PTID. The caller is
4471 responsible for setting the state such that the remote end is ready
4472 to return the current thread.
4473
4474 This function is called after handling the '?' or 'vRun' packets,
4475 whose response is a stop reply from which we can also try
4476 extracting the thread. If the target doesn't support the explicit
4477 qC query, we infer the current thread from that stop reply, passed
4478 in in WAIT_STATUS, which may be NULL.
4479
4480 The function returns pointer to the main thread of the inferior. */
4481
4482 thread_info *
4483 remote_target::add_current_inferior_and_thread (const char *wait_status)
4484 {
4485 struct remote_state *rs = get_remote_state ();
4486 bool fake_pid_p = false;
4487
4488 switch_to_no_thread ();
4489
4490 /* Now, if we have thread information, update the current thread's
4491 ptid. */
4492 ptid_t curr_ptid = get_current_thread (wait_status);
4493
4494 if (curr_ptid != null_ptid)
4495 {
4496 if (!remote_multi_process_p (rs))
4497 fake_pid_p = true;
4498 }
4499 else
4500 {
4501 /* Without this, some commands which require an active target
4502 (such as kill) won't work. This variable serves (at least)
4503 double duty as both the pid of the target process (if it has
4504 such), and as a flag indicating that a target is active. */
4505 curr_ptid = magic_null_ptid;
4506 fake_pid_p = true;
4507 }
4508
4509 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
4510
4511 /* Add the main thread and switch to it. Don't try reading
4512 registers yet, since we haven't fetched the target description
4513 yet. */
4514 thread_info *tp = add_thread_silent (this, curr_ptid);
4515 switch_to_thread_no_regs (tp);
4516
4517 return tp;
4518 }
4519
4520 /* Print info about a thread that was found already stopped on
4521 connection. */
4522
4523 void
4524 remote_target::print_one_stopped_thread (thread_info *thread)
4525 {
4526 target_waitstatus ws;
4527
4528 /* If there is a pending waitstatus, use it. If there isn't it's because
4529 the thread's stop was reported with TARGET_WAITKIND_STOPPED / GDB_SIGNAL_0
4530 and process_initial_stop_replies decided it wasn't interesting to save
4531 and report to the core. */
4532 if (thread->has_pending_waitstatus ())
4533 {
4534 ws = thread->pending_waitstatus ();
4535 thread->clear_pending_waitstatus ();
4536 }
4537 else
4538 {
4539 ws.set_stopped (GDB_SIGNAL_0);
4540 }
4541
4542 switch_to_thread (thread);
4543 thread->set_stop_pc (get_frame_pc (get_current_frame ()));
4544 set_current_sal_from_frame (get_current_frame ());
4545
4546 /* For "info program". */
4547 set_last_target_status (this, thread->ptid, ws);
4548
4549 if (ws.kind () == TARGET_WAITKIND_STOPPED)
4550 {
4551 enum gdb_signal sig = ws.sig ();
4552
4553 if (signal_print_state (sig))
4554 gdb::observers::signal_received.notify (sig);
4555 }
4556 gdb::observers::normal_stop.notify (NULL, 1);
4557 }
4558
4559 /* Process all initial stop replies the remote side sent in response
4560 to the ? packet. These indicate threads that were already stopped
4561 on initial connection. We mark these threads as stopped and print
4562 their current frame before giving the user the prompt. */
4563
4564 void
4565 remote_target::process_initial_stop_replies (int from_tty)
4566 {
4567 int pending_stop_replies = stop_reply_queue_length ();
4568 struct thread_info *selected = NULL;
4569 struct thread_info *lowest_stopped = NULL;
4570 struct thread_info *first = NULL;
4571
4572 /* This is only used when the target is non-stop. */
4573 gdb_assert (target_is_non_stop_p ());
4574
4575 /* Consume the initial pending events. */
4576 while (pending_stop_replies-- > 0)
4577 {
4578 ptid_t waiton_ptid = minus_one_ptid;
4579 ptid_t event_ptid;
4580 struct target_waitstatus ws;
4581 int ignore_event = 0;
4582
4583 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4584 if (remote_debug)
4585 print_target_wait_results (waiton_ptid, event_ptid, ws);
4586
4587 switch (ws.kind ())
4588 {
4589 case TARGET_WAITKIND_IGNORE:
4590 case TARGET_WAITKIND_NO_RESUMED:
4591 case TARGET_WAITKIND_SIGNALLED:
4592 case TARGET_WAITKIND_EXITED:
4593 /* We shouldn't see these, but if we do, just ignore. */
4594 remote_debug_printf ("event ignored");
4595 ignore_event = 1;
4596 break;
4597
4598 default:
4599 break;
4600 }
4601
4602 if (ignore_event)
4603 continue;
4604
4605 thread_info *evthread = find_thread_ptid (this, event_ptid);
4606
4607 if (ws.kind () == TARGET_WAITKIND_STOPPED)
4608 {
4609 enum gdb_signal sig = ws.sig ();
4610
4611 /* Stubs traditionally report SIGTRAP as initial signal,
4612 instead of signal 0. Suppress it. */
4613 if (sig == GDB_SIGNAL_TRAP)
4614 sig = GDB_SIGNAL_0;
4615 evthread->set_stop_signal (sig);
4616 ws.set_stopped (sig);
4617 }
4618
4619 if (ws.kind () != TARGET_WAITKIND_STOPPED
4620 || ws.sig () != GDB_SIGNAL_0)
4621 evthread->set_pending_waitstatus (ws);
4622
4623 set_executing (this, event_ptid, false);
4624 set_running (this, event_ptid, false);
4625 get_remote_thread_info (evthread)->set_not_resumed ();
4626 }
4627
4628 /* "Notice" the new inferiors before anything related to
4629 registers/memory. */
4630 for (inferior *inf : all_non_exited_inferiors (this))
4631 {
4632 inf->needs_setup = 1;
4633
4634 if (non_stop)
4635 {
4636 thread_info *thread = any_live_thread_of_inferior (inf);
4637 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
4638 from_tty);
4639 }
4640 }
4641
4642 /* If all-stop on top of non-stop, pause all threads. Note this
4643 records the threads' stop pc, so must be done after "noticing"
4644 the inferiors. */
4645 if (!non_stop)
4646 {
4647 {
4648 /* At this point, the remote target is not async. It needs to be for
4649 the poll in stop_all_threads to consider events from it, so enable
4650 it temporarily. */
4651 gdb_assert (!this->is_async_p ());
4652 SCOPE_EXIT { target_async (false); };
4653 target_async (true);
4654 stop_all_threads ("remote connect in all-stop");
4655 }
4656
4657 /* If all threads of an inferior were already stopped, we
4658 haven't setup the inferior yet. */
4659 for (inferior *inf : all_non_exited_inferiors (this))
4660 {
4661 if (inf->needs_setup)
4662 {
4663 thread_info *thread = any_live_thread_of_inferior (inf);
4664 switch_to_thread_no_regs (thread);
4665 setup_inferior (0);
4666 }
4667 }
4668 }
4669
4670 /* Now go over all threads that are stopped, and print their current
4671 frame. If all-stop, then if there's a signalled thread, pick
4672 that as current. */
4673 for (thread_info *thread : all_non_exited_threads (this))
4674 {
4675 if (first == NULL)
4676 first = thread;
4677
4678 if (!non_stop)
4679 thread->set_running (false);
4680 else if (thread->state != THREAD_STOPPED)
4681 continue;
4682
4683 if (selected == nullptr && thread->has_pending_waitstatus ())
4684 selected = thread;
4685
4686 if (lowest_stopped == NULL
4687 || thread->inf->num < lowest_stopped->inf->num
4688 || thread->per_inf_num < lowest_stopped->per_inf_num)
4689 lowest_stopped = thread;
4690
4691 if (non_stop)
4692 print_one_stopped_thread (thread);
4693 }
4694
4695 /* In all-stop, we only print the status of one thread, and leave
4696 others with their status pending. */
4697 if (!non_stop)
4698 {
4699 thread_info *thread = selected;
4700 if (thread == NULL)
4701 thread = lowest_stopped;
4702 if (thread == NULL)
4703 thread = first;
4704
4705 print_one_stopped_thread (thread);
4706 }
4707 }
4708
4709 /* Mark a remote_target as marking (by setting the starting_up flag within
4710 its remote_state) for the lifetime of this object. The reference count
4711 on the remote target is temporarily incremented, to prevent the target
4712 being deleted under our feet. */
4713
4714 struct scoped_mark_target_starting
4715 {
4716 /* Constructor, TARGET is the target to be marked as starting, its
4717 reference count will be incremented. */
4718 scoped_mark_target_starting (remote_target *target)
4719 : m_remote_target (target)
4720 {
4721 m_remote_target->incref ();
4722 remote_state *rs = m_remote_target->get_remote_state ();
4723 rs->starting_up = true;
4724 }
4725
4726 /* Destructor, mark the target being worked on as no longer starting, and
4727 decrement the reference count. */
4728 ~scoped_mark_target_starting ()
4729 {
4730 remote_state *rs = m_remote_target->get_remote_state ();
4731 rs->starting_up = false;
4732 decref_target (m_remote_target);
4733 }
4734
4735 private:
4736
4737 /* The target on which we are operating. */
4738 remote_target *m_remote_target;
4739 };
4740
4741 /* Helper for remote_target::start_remote, start the remote connection and
4742 sync state. Return true if everything goes OK, otherwise, return false.
4743 This function exists so that the scoped_restore created within it will
4744 expire before we return to remote_target::start_remote. */
4745
4746 bool
4747 remote_target::start_remote_1 (int from_tty, int extended_p)
4748 {
4749 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
4750
4751 struct remote_state *rs = get_remote_state ();
4752 struct packet_config *noack_config;
4753
4754 /* Signal other parts that we're going through the initial setup,
4755 and so things may not be stable yet. E.g., we don't try to
4756 install tracepoints until we've relocated symbols. Also, a
4757 Ctrl-C before we're connected and synced up can't interrupt the
4758 target. Instead, it offers to drop the (potentially wedged)
4759 connection. */
4760 scoped_mark_target_starting target_is_starting (this);
4761
4762 QUIT;
4763
4764 if (interrupt_on_connect)
4765 send_interrupt_sequence ();
4766
4767 /* Ack any packet which the remote side has already sent. */
4768 remote_serial_write ("+", 1);
4769
4770 /* The first packet we send to the target is the optional "supported
4771 packets" request. If the target can answer this, it will tell us
4772 which later probes to skip. */
4773 remote_query_supported ();
4774
4775 /* If the stub wants to get a QAllow, compose one and send it. */
4776 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4777 set_permissions ();
4778
4779 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4780 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4781 as a reply to known packet. For packet "vFile:setfs:" it is an
4782 invalid reply and GDB would return error in
4783 remote_hostio_set_filesystem, making remote files access impossible.
4784 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4785 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4786 {
4787 const char v_mustreplyempty[] = "vMustReplyEmpty";
4788
4789 putpkt (v_mustreplyempty);
4790 getpkt (&rs->buf, 0);
4791 if (strcmp (rs->buf.data (), "OK") == 0)
4792 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4793 else if (strcmp (rs->buf.data (), "") != 0)
4794 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4795 rs->buf.data ());
4796 }
4797
4798 /* Next, we possibly activate noack mode.
4799
4800 If the QStartNoAckMode packet configuration is set to AUTO,
4801 enable noack mode if the stub reported a wish for it with
4802 qSupported.
4803
4804 If set to TRUE, then enable noack mode even if the stub didn't
4805 report it in qSupported. If the stub doesn't reply OK, the
4806 session ends with an error.
4807
4808 If FALSE, then don't activate noack mode, regardless of what the
4809 stub claimed should be the default with qSupported. */
4810
4811 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4812 if (packet_config_support (noack_config) != PACKET_DISABLE)
4813 {
4814 putpkt ("QStartNoAckMode");
4815 getpkt (&rs->buf, 0);
4816 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4817 rs->noack_mode = 1;
4818 }
4819
4820 if (extended_p)
4821 {
4822 /* Tell the remote that we are using the extended protocol. */
4823 putpkt ("!");
4824 getpkt (&rs->buf, 0);
4825 }
4826
4827 /* Let the target know which signals it is allowed to pass down to
4828 the program. */
4829 update_signals_program_target ();
4830
4831 /* Next, if the target can specify a description, read it. We do
4832 this before anything involving memory or registers. */
4833 target_find_description ();
4834
4835 /* Next, now that we know something about the target, update the
4836 address spaces in the program spaces. */
4837 update_address_spaces ();
4838
4839 /* On OSs where the list of libraries is global to all
4840 processes, we fetch them early. */
4841 if (gdbarch_has_global_solist (target_gdbarch ()))
4842 solib_add (NULL, from_tty, auto_solib_add);
4843
4844 if (target_is_non_stop_p ())
4845 {
4846 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4847 error (_("Non-stop mode requested, but remote "
4848 "does not support non-stop"));
4849
4850 putpkt ("QNonStop:1");
4851 getpkt (&rs->buf, 0);
4852
4853 if (strcmp (rs->buf.data (), "OK") != 0)
4854 error (_("Remote refused setting non-stop mode with: %s"),
4855 rs->buf.data ());
4856
4857 /* Find about threads and processes the stub is already
4858 controlling. We default to adding them in the running state.
4859 The '?' query below will then tell us about which threads are
4860 stopped. */
4861 this->update_thread_list ();
4862 }
4863 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4864 {
4865 /* Don't assume that the stub can operate in all-stop mode.
4866 Request it explicitly. */
4867 putpkt ("QNonStop:0");
4868 getpkt (&rs->buf, 0);
4869
4870 if (strcmp (rs->buf.data (), "OK") != 0)
4871 error (_("Remote refused setting all-stop mode with: %s"),
4872 rs->buf.data ());
4873 }
4874
4875 /* Upload TSVs regardless of whether the target is running or not. The
4876 remote stub, such as GDBserver, may have some predefined or builtin
4877 TSVs, even if the target is not running. */
4878 if (get_trace_status (current_trace_status ()) != -1)
4879 {
4880 struct uploaded_tsv *uploaded_tsvs = NULL;
4881
4882 upload_trace_state_variables (&uploaded_tsvs);
4883 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4884 }
4885
4886 /* Check whether the target is running now. */
4887 putpkt ("?");
4888 getpkt (&rs->buf, 0);
4889
4890 if (!target_is_non_stop_p ())
4891 {
4892 char *wait_status = NULL;
4893
4894 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4895 {
4896 if (!extended_p)
4897 error (_("The target is not running (try extended-remote?)"));
4898 return false;
4899 }
4900 else
4901 {
4902 /* Save the reply for later. */
4903 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4904 strcpy (wait_status, rs->buf.data ());
4905 }
4906
4907 /* Fetch thread list. */
4908 target_update_thread_list ();
4909
4910 /* Let the stub know that we want it to return the thread. */
4911 set_continue_thread (minus_one_ptid);
4912
4913 if (thread_count (this) == 0)
4914 {
4915 /* Target has no concept of threads at all. GDB treats
4916 non-threaded target as single-threaded; add a main
4917 thread. */
4918 thread_info *tp = add_current_inferior_and_thread (wait_status);
4919 get_remote_thread_info (tp)->set_resumed ();
4920 }
4921 else
4922 {
4923 /* We have thread information; select the thread the target
4924 says should be current. If we're reconnecting to a
4925 multi-threaded program, this will ideally be the thread
4926 that last reported an event before GDB disconnected. */
4927 ptid_t curr_thread = get_current_thread (wait_status);
4928 if (curr_thread == null_ptid)
4929 {
4930 /* Odd... The target was able to list threads, but not
4931 tell us which thread was current (no "thread"
4932 register in T stop reply?). Just pick the first
4933 thread in the thread list then. */
4934
4935 remote_debug_printf ("warning: couldn't determine remote "
4936 "current thread; picking first in list.");
4937
4938 for (thread_info *tp : all_non_exited_threads (this,
4939 minus_one_ptid))
4940 {
4941 switch_to_thread (tp);
4942 break;
4943 }
4944 }
4945 else
4946 switch_to_thread (find_thread_ptid (this, curr_thread));
4947 }
4948
4949 /* init_wait_for_inferior should be called before get_offsets in order
4950 to manage `inserted' flag in bp loc in a correct state.
4951 breakpoint_init_inferior, called from init_wait_for_inferior, set
4952 `inserted' flag to 0, while before breakpoint_re_set, called from
4953 start_remote, set `inserted' flag to 1. In the initialization of
4954 inferior, breakpoint_init_inferior should be called first, and then
4955 breakpoint_re_set can be called. If this order is broken, state of
4956 `inserted' flag is wrong, and cause some problems on breakpoint
4957 manipulation. */
4958 init_wait_for_inferior ();
4959
4960 get_offsets (); /* Get text, data & bss offsets. */
4961
4962 /* If we could not find a description using qXfer, and we know
4963 how to do it some other way, try again. This is not
4964 supported for non-stop; it could be, but it is tricky if
4965 there are no stopped threads when we connect. */
4966 if (remote_read_description_p (this)
4967 && gdbarch_target_desc (target_gdbarch ()) == NULL)
4968 {
4969 target_clear_description ();
4970 target_find_description ();
4971 }
4972
4973 /* Use the previously fetched status. */
4974 gdb_assert (wait_status != NULL);
4975 struct notif_event *reply
4976 = remote_notif_parse (this, &notif_client_stop, wait_status);
4977 push_stop_reply ((struct stop_reply *) reply);
4978
4979 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
4980 }
4981 else
4982 {
4983 /* Clear WFI global state. Do this before finding about new
4984 threads and inferiors, and setting the current inferior.
4985 Otherwise we would clear the proceed status of the current
4986 inferior when we want its stop_soon state to be preserved
4987 (see notice_new_inferior). */
4988 init_wait_for_inferior ();
4989
4990 /* In non-stop, we will either get an "OK", meaning that there
4991 are no stopped threads at this time; or, a regular stop
4992 reply. In the latter case, there may be more than one thread
4993 stopped --- we pull them all out using the vStopped
4994 mechanism. */
4995 if (strcmp (rs->buf.data (), "OK") != 0)
4996 {
4997 struct notif_client *notif = &notif_client_stop;
4998
4999 /* remote_notif_get_pending_replies acks this one, and gets
5000 the rest out. */
5001 rs->notif_state->pending_event[notif_client_stop.id]
5002 = remote_notif_parse (this, notif, rs->buf.data ());
5003 remote_notif_get_pending_events (notif);
5004 }
5005
5006 if (thread_count (this) == 0)
5007 {
5008 if (!extended_p)
5009 error (_("The target is not running (try extended-remote?)"));
5010 return false;
5011 }
5012
5013 /* Report all signals during attach/startup. */
5014 pass_signals ({});
5015
5016 /* If there are already stopped threads, mark them stopped and
5017 report their stops before giving the prompt to the user. */
5018 process_initial_stop_replies (from_tty);
5019
5020 if (target_can_async_p ())
5021 target_async (true);
5022 }
5023
5024 /* Give the target a chance to look up symbols. */
5025 for (inferior *inf : all_inferiors (this))
5026 {
5027 /* The inferiors that exist at this point were created from what
5028 was found already running on the remote side, so we know they
5029 have execution. */
5030 gdb_assert (this->has_execution (inf));
5031
5032 /* No use without a symbol-file. */
5033 if (inf->pspace->symfile_object_file == nullptr)
5034 continue;
5035
5036 /* Need to switch to a specific thread, because remote_check_symbols
5037 uses INFERIOR_PTID to set the general thread. */
5038 scoped_restore_current_thread restore_thread;
5039 thread_info *thread = any_thread_of_inferior (inf);
5040 switch_to_thread (thread);
5041 this->remote_check_symbols ();
5042 }
5043
5044 /* Possibly the target has been engaged in a trace run started
5045 previously; find out where things are at. */
5046 if (get_trace_status (current_trace_status ()) != -1)
5047 {
5048 struct uploaded_tp *uploaded_tps = NULL;
5049
5050 if (current_trace_status ()->running)
5051 gdb_printf (_("Trace is already running on the target.\n"));
5052
5053 upload_tracepoints (&uploaded_tps);
5054
5055 merge_uploaded_tracepoints (&uploaded_tps);
5056 }
5057
5058 /* Possibly the target has been engaged in a btrace record started
5059 previously; find out where things are at. */
5060 remote_btrace_maybe_reopen ();
5061
5062 return true;
5063 }
5064
5065 /* Start the remote connection and sync state. */
5066
5067 void
5068 remote_target::start_remote (int from_tty, int extended_p)
5069 {
5070 if (start_remote_1 (from_tty, extended_p)
5071 && breakpoints_should_be_inserted_now ())
5072 insert_breakpoints ();
5073 }
5074
5075 const char *
5076 remote_target::connection_string ()
5077 {
5078 remote_state *rs = get_remote_state ();
5079
5080 if (rs->remote_desc->name != NULL)
5081 return rs->remote_desc->name;
5082 else
5083 return NULL;
5084 }
5085
5086 /* Open a connection to a remote debugger.
5087 NAME is the filename used for communication. */
5088
5089 void
5090 remote_target::open (const char *name, int from_tty)
5091 {
5092 open_1 (name, from_tty, 0);
5093 }
5094
5095 /* Open a connection to a remote debugger using the extended
5096 remote gdb protocol. NAME is the filename used for communication. */
5097
5098 void
5099 extended_remote_target::open (const char *name, int from_tty)
5100 {
5101 open_1 (name, from_tty, 1 /*extended_p */);
5102 }
5103
5104 /* Reset all packets back to "unknown support". Called when opening a
5105 new connection to a remote target. */
5106
5107 static void
5108 reset_all_packet_configs_support (void)
5109 {
5110 int i;
5111
5112 for (i = 0; i < PACKET_MAX; i++)
5113 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
5114 }
5115
5116 /* Initialize all packet configs. */
5117
5118 static void
5119 init_all_packet_configs (void)
5120 {
5121 int i;
5122
5123 for (i = 0; i < PACKET_MAX; i++)
5124 {
5125 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
5126 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
5127 }
5128 }
5129
5130 /* Symbol look-up. */
5131
5132 void
5133 remote_target::remote_check_symbols ()
5134 {
5135 char *tmp;
5136 int end;
5137
5138 /* It doesn't make sense to send a qSymbol packet for an inferior that
5139 doesn't have execution, because the remote side doesn't know about
5140 inferiors without execution. */
5141 gdb_assert (target_has_execution ());
5142
5143 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
5144 return;
5145
5146 /* Make sure the remote is pointing at the right process. Note
5147 there's no way to select "no process". */
5148 set_general_process ();
5149
5150 /* Allocate a message buffer. We can't reuse the input buffer in RS,
5151 because we need both at the same time. */
5152 gdb::char_vector msg (get_remote_packet_size ());
5153 gdb::char_vector reply (get_remote_packet_size ());
5154
5155 /* Invite target to request symbol lookups. */
5156
5157 putpkt ("qSymbol::");
5158 getpkt (&reply, 0);
5159 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
5160
5161 while (startswith (reply.data (), "qSymbol:"))
5162 {
5163 struct bound_minimal_symbol sym;
5164
5165 tmp = &reply[8];
5166 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
5167 strlen (tmp) / 2);
5168 msg[end] = '\0';
5169 sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
5170 if (sym.minsym == NULL)
5171 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
5172 &reply[8]);
5173 else
5174 {
5175 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5176 CORE_ADDR sym_addr = sym.value_address ();
5177
5178 /* If this is a function address, return the start of code
5179 instead of any data function descriptor. */
5180 sym_addr = gdbarch_convert_from_func_ptr_addr
5181 (target_gdbarch (), sym_addr, current_inferior ()->top_target ());
5182
5183 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
5184 phex_nz (sym_addr, addr_size), &reply[8]);
5185 }
5186
5187 putpkt (msg.data ());
5188 getpkt (&reply, 0);
5189 }
5190 }
5191
5192 static struct serial *
5193 remote_serial_open (const char *name)
5194 {
5195 static int udp_warning = 0;
5196
5197 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
5198 of in ser-tcp.c, because it is the remote protocol assuming that the
5199 serial connection is reliable and not the serial connection promising
5200 to be. */
5201 if (!udp_warning && startswith (name, "udp:"))
5202 {
5203 warning (_("The remote protocol may be unreliable over UDP.\n"
5204 "Some events may be lost, rendering further debugging "
5205 "impossible."));
5206 udp_warning = 1;
5207 }
5208
5209 return serial_open (name);
5210 }
5211
5212 /* Inform the target of our permission settings. The permission flags
5213 work without this, but if the target knows the settings, it can do
5214 a couple things. First, it can add its own check, to catch cases
5215 that somehow manage to get by the permissions checks in target
5216 methods. Second, if the target is wired to disallow particular
5217 settings (for instance, a system in the field that is not set up to
5218 be able to stop at a breakpoint), it can object to any unavailable
5219 permissions. */
5220
5221 void
5222 remote_target::set_permissions ()
5223 {
5224 struct remote_state *rs = get_remote_state ();
5225
5226 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
5227 "WriteReg:%x;WriteMem:%x;"
5228 "InsertBreak:%x;InsertTrace:%x;"
5229 "InsertFastTrace:%x;Stop:%x",
5230 may_write_registers, may_write_memory,
5231 may_insert_breakpoints, may_insert_tracepoints,
5232 may_insert_fast_tracepoints, may_stop);
5233 putpkt (rs->buf);
5234 getpkt (&rs->buf, 0);
5235
5236 /* If the target didn't like the packet, warn the user. Do not try
5237 to undo the user's settings, that would just be maddening. */
5238 if (strcmp (rs->buf.data (), "OK") != 0)
5239 warning (_("Remote refused setting permissions with: %s"),
5240 rs->buf.data ());
5241 }
5242
5243 /* This type describes each known response to the qSupported
5244 packet. */
5245 struct protocol_feature
5246 {
5247 /* The name of this protocol feature. */
5248 const char *name;
5249
5250 /* The default for this protocol feature. */
5251 enum packet_support default_support;
5252
5253 /* The function to call when this feature is reported, or after
5254 qSupported processing if the feature is not supported.
5255 The first argument points to this structure. The second
5256 argument indicates whether the packet requested support be
5257 enabled, disabled, or probed (or the default, if this function
5258 is being called at the end of processing and this feature was
5259 not reported). The third argument may be NULL; if not NULL, it
5260 is a NUL-terminated string taken from the packet following
5261 this feature's name and an equals sign. */
5262 void (*func) (remote_target *remote, const struct protocol_feature *,
5263 enum packet_support, const char *);
5264
5265 /* The corresponding packet for this feature. Only used if
5266 FUNC is remote_supported_packet. */
5267 int packet;
5268 };
5269
5270 static void
5271 remote_supported_packet (remote_target *remote,
5272 const struct protocol_feature *feature,
5273 enum packet_support support,
5274 const char *argument)
5275 {
5276 if (argument)
5277 {
5278 warning (_("Remote qSupported response supplied an unexpected value for"
5279 " \"%s\"."), feature->name);
5280 return;
5281 }
5282
5283 remote_protocol_packets[feature->packet].support = support;
5284 }
5285
5286 void
5287 remote_target::remote_packet_size (const protocol_feature *feature,
5288 enum packet_support support, const char *value)
5289 {
5290 struct remote_state *rs = get_remote_state ();
5291
5292 int packet_size;
5293 char *value_end;
5294
5295 if (support != PACKET_ENABLE)
5296 return;
5297
5298 if (value == NULL || *value == '\0')
5299 {
5300 warning (_("Remote target reported \"%s\" without a size."),
5301 feature->name);
5302 return;
5303 }
5304
5305 errno = 0;
5306 packet_size = strtol (value, &value_end, 16);
5307 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5308 {
5309 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5310 feature->name, value);
5311 return;
5312 }
5313
5314 /* Record the new maximum packet size. */
5315 rs->explicit_packet_size = packet_size;
5316 }
5317
5318 static void
5319 remote_packet_size (remote_target *remote, const protocol_feature *feature,
5320 enum packet_support support, const char *value)
5321 {
5322 remote->remote_packet_size (feature, support, value);
5323 }
5324
5325 static const struct protocol_feature remote_protocol_features[] = {
5326 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
5327 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
5328 PACKET_qXfer_auxv },
5329 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5330 PACKET_qXfer_exec_file },
5331 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5332 PACKET_qXfer_features },
5333 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5334 PACKET_qXfer_libraries },
5335 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5336 PACKET_qXfer_libraries_svr4 },
5337 { "augmented-libraries-svr4-read", PACKET_DISABLE,
5338 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
5339 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
5340 PACKET_qXfer_memory_map },
5341 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5342 PACKET_qXfer_osdata },
5343 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5344 PACKET_qXfer_threads },
5345 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5346 PACKET_qXfer_traceframe_info },
5347 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5348 PACKET_QPassSignals },
5349 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5350 PACKET_QCatchSyscalls },
5351 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5352 PACKET_QProgramSignals },
5353 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5354 PACKET_QSetWorkingDir },
5355 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5356 PACKET_QStartupWithShell },
5357 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5358 PACKET_QEnvironmentHexEncoded },
5359 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5360 PACKET_QEnvironmentReset },
5361 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5362 PACKET_QEnvironmentUnset },
5363 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5364 PACKET_QStartNoAckMode },
5365 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5366 PACKET_multiprocess_feature },
5367 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
5368 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5369 PACKET_qXfer_siginfo_read },
5370 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5371 PACKET_qXfer_siginfo_write },
5372 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
5373 PACKET_ConditionalTracepoints },
5374 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
5375 PACKET_ConditionalBreakpoints },
5376 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
5377 PACKET_BreakpointCommands },
5378 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
5379 PACKET_FastTracepoints },
5380 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
5381 PACKET_StaticTracepoints },
5382 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
5383 PACKET_InstallInTrace},
5384 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5385 PACKET_DisconnectedTracing_feature },
5386 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5387 PACKET_bc },
5388 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5389 PACKET_bs },
5390 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5391 PACKET_TracepointSource },
5392 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5393 PACKET_QAllow },
5394 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5395 PACKET_EnableDisableTracepoints_feature },
5396 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5397 PACKET_qXfer_fdpic },
5398 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5399 PACKET_qXfer_uib },
5400 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5401 PACKET_QDisableRandomization },
5402 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
5403 { "QTBuffer:size", PACKET_DISABLE,
5404 remote_supported_packet, PACKET_QTBuffer_size},
5405 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
5406 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5407 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
5408 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
5409 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
5410 PACKET_qXfer_btrace },
5411 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
5412 PACKET_qXfer_btrace_conf },
5413 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
5414 PACKET_Qbtrace_conf_bts_size },
5415 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
5416 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
5417 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5418 PACKET_fork_event_feature },
5419 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5420 PACKET_vfork_event_feature },
5421 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5422 PACKET_exec_event_feature },
5423 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
5424 PACKET_Qbtrace_conf_pt_size },
5425 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5426 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
5427 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
5428 { "memory-tagging", PACKET_DISABLE, remote_supported_packet,
5429 PACKET_memory_tagging_feature },
5430 };
5431
5432 static char *remote_support_xml;
5433
5434 /* Register string appended to "xmlRegisters=" in qSupported query. */
5435
5436 void
5437 register_remote_support_xml (const char *xml)
5438 {
5439 #if defined(HAVE_LIBEXPAT)
5440 if (remote_support_xml == NULL)
5441 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
5442 else
5443 {
5444 char *copy = xstrdup (remote_support_xml + 13);
5445 char *saveptr;
5446 char *p = strtok_r (copy, ",", &saveptr);
5447
5448 do
5449 {
5450 if (strcmp (p, xml) == 0)
5451 {
5452 /* already there */
5453 xfree (copy);
5454 return;
5455 }
5456 }
5457 while ((p = strtok_r (NULL, ",", &saveptr)) != NULL);
5458 xfree (copy);
5459
5460 remote_support_xml = reconcat (remote_support_xml,
5461 remote_support_xml, ",", xml,
5462 (char *) NULL);
5463 }
5464 #endif
5465 }
5466
5467 static void
5468 remote_query_supported_append (std::string *msg, const char *append)
5469 {
5470 if (!msg->empty ())
5471 msg->append (";");
5472 msg->append (append);
5473 }
5474
5475 void
5476 remote_target::remote_query_supported ()
5477 {
5478 struct remote_state *rs = get_remote_state ();
5479 char *next;
5480 int i;
5481 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5482
5483 /* The packet support flags are handled differently for this packet
5484 than for most others. We treat an error, a disabled packet, and
5485 an empty response identically: any features which must be reported
5486 to be used will be automatically disabled. An empty buffer
5487 accomplishes this, since that is also the representation for a list
5488 containing no features. */
5489
5490 rs->buf[0] = 0;
5491 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
5492 {
5493 std::string q;
5494
5495 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
5496 remote_query_supported_append (&q, "multiprocess+");
5497
5498 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
5499 remote_query_supported_append (&q, "swbreak+");
5500 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
5501 remote_query_supported_append (&q, "hwbreak+");
5502
5503 remote_query_supported_append (&q, "qRelocInsn+");
5504
5505 if (packet_set_cmd_state (PACKET_fork_event_feature)
5506 != AUTO_BOOLEAN_FALSE)
5507 remote_query_supported_append (&q, "fork-events+");
5508 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5509 != AUTO_BOOLEAN_FALSE)
5510 remote_query_supported_append (&q, "vfork-events+");
5511 if (packet_set_cmd_state (PACKET_exec_event_feature)
5512 != AUTO_BOOLEAN_FALSE)
5513 remote_query_supported_append (&q, "exec-events+");
5514
5515 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
5516 remote_query_supported_append (&q, "vContSupported+");
5517
5518 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
5519 remote_query_supported_append (&q, "QThreadEvents+");
5520
5521 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
5522 remote_query_supported_append (&q, "no-resumed+");
5523
5524 if (packet_set_cmd_state (PACKET_memory_tagging_feature)
5525 != AUTO_BOOLEAN_FALSE)
5526 remote_query_supported_append (&q, "memory-tagging+");
5527
5528 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5529 the qSupported:xmlRegisters=i386 handling. */
5530 if (remote_support_xml != NULL
5531 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
5532 remote_query_supported_append (&q, remote_support_xml);
5533
5534 q = "qSupported:" + q;
5535 putpkt (q.c_str ());
5536
5537 getpkt (&rs->buf, 0);
5538
5539 /* If an error occured, warn, but do not return - just reset the
5540 buffer to empty and go on to disable features. */
5541 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5542 == PACKET_ERROR)
5543 {
5544 warning (_("Remote failure reply: %s"), rs->buf.data ());
5545 rs->buf[0] = 0;
5546 }
5547 }
5548
5549 memset (seen, 0, sizeof (seen));
5550
5551 next = rs->buf.data ();
5552 while (*next)
5553 {
5554 enum packet_support is_supported;
5555 char *p, *end, *name_end, *value;
5556
5557 /* First separate out this item from the rest of the packet. If
5558 there's another item after this, we overwrite the separator
5559 (terminated strings are much easier to work with). */
5560 p = next;
5561 end = strchr (p, ';');
5562 if (end == NULL)
5563 {
5564 end = p + strlen (p);
5565 next = end;
5566 }
5567 else
5568 {
5569 *end = '\0';
5570 next = end + 1;
5571
5572 if (end == p)
5573 {
5574 warning (_("empty item in \"qSupported\" response"));
5575 continue;
5576 }
5577 }
5578
5579 name_end = strchr (p, '=');
5580 if (name_end)
5581 {
5582 /* This is a name=value entry. */
5583 is_supported = PACKET_ENABLE;
5584 value = name_end + 1;
5585 *name_end = '\0';
5586 }
5587 else
5588 {
5589 value = NULL;
5590 switch (end[-1])
5591 {
5592 case '+':
5593 is_supported = PACKET_ENABLE;
5594 break;
5595
5596 case '-':
5597 is_supported = PACKET_DISABLE;
5598 break;
5599
5600 case '?':
5601 is_supported = PACKET_SUPPORT_UNKNOWN;
5602 break;
5603
5604 default:
5605 warning (_("unrecognized item \"%s\" "
5606 "in \"qSupported\" response"), p);
5607 continue;
5608 }
5609 end[-1] = '\0';
5610 }
5611
5612 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5613 if (strcmp (remote_protocol_features[i].name, p) == 0)
5614 {
5615 const struct protocol_feature *feature;
5616
5617 seen[i] = 1;
5618 feature = &remote_protocol_features[i];
5619 feature->func (this, feature, is_supported, value);
5620 break;
5621 }
5622 }
5623
5624 /* If we increased the packet size, make sure to increase the global
5625 buffer size also. We delay this until after parsing the entire
5626 qSupported packet, because this is the same buffer we were
5627 parsing. */
5628 if (rs->buf.size () < rs->explicit_packet_size)
5629 rs->buf.resize (rs->explicit_packet_size);
5630
5631 /* Handle the defaults for unmentioned features. */
5632 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5633 if (!seen[i])
5634 {
5635 const struct protocol_feature *feature;
5636
5637 feature = &remote_protocol_features[i];
5638 feature->func (this, feature, feature->default_support, NULL);
5639 }
5640 }
5641
5642 /* Serial QUIT handler for the remote serial descriptor.
5643
5644 Defers handling a Ctrl-C until we're done with the current
5645 command/response packet sequence, unless:
5646
5647 - We're setting up the connection. Don't send a remote interrupt
5648 request, as we're not fully synced yet. Quit immediately
5649 instead.
5650
5651 - The target has been resumed in the foreground
5652 (target_terminal::is_ours is false) with a synchronous resume
5653 packet, and we're blocked waiting for the stop reply, thus a
5654 Ctrl-C should be immediately sent to the target.
5655
5656 - We get a second Ctrl-C while still within the same serial read or
5657 write. In that case the serial is seemingly wedged --- offer to
5658 quit/disconnect.
5659
5660 - We see a second Ctrl-C without target response, after having
5661 previously interrupted the target. In that case the target/stub
5662 is probably wedged --- offer to quit/disconnect.
5663 */
5664
5665 void
5666 remote_target::remote_serial_quit_handler ()
5667 {
5668 struct remote_state *rs = get_remote_state ();
5669
5670 if (check_quit_flag ())
5671 {
5672 /* If we're starting up, we're not fully synced yet. Quit
5673 immediately. */
5674 if (rs->starting_up)
5675 quit ();
5676 else if (rs->got_ctrlc_during_io)
5677 {
5678 if (query (_("The target is not responding to GDB commands.\n"
5679 "Stop debugging it? ")))
5680 remote_unpush_and_throw (this);
5681 }
5682 /* If ^C has already been sent once, offer to disconnect. */
5683 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
5684 interrupt_query ();
5685 /* All-stop protocol, and blocked waiting for stop reply. Send
5686 an interrupt request. */
5687 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
5688 target_interrupt ();
5689 else
5690 rs->got_ctrlc_during_io = 1;
5691 }
5692 }
5693
5694 /* The remote_target that is current while the quit handler is
5695 overridden with remote_serial_quit_handler. */
5696 static remote_target *curr_quit_handler_target;
5697
5698 static void
5699 remote_serial_quit_handler ()
5700 {
5701 curr_quit_handler_target->remote_serial_quit_handler ();
5702 }
5703
5704 /* Remove the remote target from the target stack of each inferior
5705 that is using it. Upper targets depend on it so remove them
5706 first. */
5707
5708 static void
5709 remote_unpush_target (remote_target *target)
5710 {
5711 /* We have to unpush the target from all inferiors, even those that
5712 aren't running. */
5713 scoped_restore_current_inferior restore_current_inferior;
5714
5715 for (inferior *inf : all_inferiors (target))
5716 {
5717 switch_to_inferior_no_thread (inf);
5718 pop_all_targets_at_and_above (process_stratum);
5719 generic_mourn_inferior ();
5720 }
5721
5722 /* Don't rely on target_close doing this when the target is popped
5723 from the last remote inferior above, because something may be
5724 holding a reference to the target higher up on the stack, meaning
5725 target_close won't be called yet. We lost the connection to the
5726 target, so clear these now, otherwise we may later throw
5727 TARGET_CLOSE_ERROR while trying to tell the remote target to
5728 close the file. */
5729 fileio_handles_invalidate_target (target);
5730 }
5731
5732 static void
5733 remote_unpush_and_throw (remote_target *target)
5734 {
5735 remote_unpush_target (target);
5736 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5737 }
5738
5739 void
5740 remote_target::open_1 (const char *name, int from_tty, int extended_p)
5741 {
5742 remote_target *curr_remote = get_current_remote_target ();
5743
5744 if (name == 0)
5745 error (_("To open a remote debug connection, you need to specify what\n"
5746 "serial device is attached to the remote system\n"
5747 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5748
5749 /* If we're connected to a running target, target_preopen will kill it.
5750 Ask this question first, before target_preopen has a chance to kill
5751 anything. */
5752 if (curr_remote != NULL && !target_has_execution ())
5753 {
5754 if (from_tty
5755 && !query (_("Already connected to a remote target. Disconnect? ")))
5756 error (_("Still connected."));
5757 }
5758
5759 /* Here the possibly existing remote target gets unpushed. */
5760 target_preopen (from_tty);
5761
5762 remote_fileio_reset ();
5763 reopen_exec_file ();
5764 reread_symbols (from_tty);
5765
5766 remote_target *remote
5767 = (extended_p ? new extended_remote_target () : new remote_target ());
5768 target_ops_up target_holder (remote);
5769
5770 remote_state *rs = remote->get_remote_state ();
5771
5772 /* See FIXME above. */
5773 if (!target_async_permitted)
5774 rs->wait_forever_enabled_p = 1;
5775
5776 rs->remote_desc = remote_serial_open (name);
5777 if (!rs->remote_desc)
5778 perror_with_name (name);
5779
5780 if (baud_rate != -1)
5781 {
5782 if (serial_setbaudrate (rs->remote_desc, baud_rate))
5783 {
5784 /* The requested speed could not be set. Error out to
5785 top level after closing remote_desc. Take care to
5786 set remote_desc to NULL to avoid closing remote_desc
5787 more than once. */
5788 serial_close (rs->remote_desc);
5789 rs->remote_desc = NULL;
5790 perror_with_name (name);
5791 }
5792 }
5793
5794 serial_setparity (rs->remote_desc, serial_parity);
5795 serial_raw (rs->remote_desc);
5796
5797 /* If there is something sitting in the buffer we might take it as a
5798 response to a command, which would be bad. */
5799 serial_flush_input (rs->remote_desc);
5800
5801 if (from_tty)
5802 {
5803 gdb_puts ("Remote debugging using ");
5804 gdb_puts (name);
5805 gdb_puts ("\n");
5806 }
5807
5808 /* Switch to using the remote target now. */
5809 current_inferior ()->push_target (std::move (target_holder));
5810
5811 /* Register extra event sources in the event loop. */
5812 rs->remote_async_inferior_event_token
5813 = create_async_event_handler (remote_async_inferior_event_handler, nullptr,
5814 "remote");
5815 rs->notif_state = remote_notif_state_allocate (remote);
5816
5817 /* Reset the target state; these things will be queried either by
5818 remote_query_supported or as they are needed. */
5819 reset_all_packet_configs_support ();
5820 rs->explicit_packet_size = 0;
5821 rs->noack_mode = 0;
5822 rs->extended = extended_p;
5823 rs->waiting_for_stop_reply = 0;
5824 rs->ctrlc_pending_p = 0;
5825 rs->got_ctrlc_during_io = 0;
5826
5827 rs->general_thread = not_sent_ptid;
5828 rs->continue_thread = not_sent_ptid;
5829 rs->remote_traceframe_number = -1;
5830
5831 rs->last_resume_exec_dir = EXEC_FORWARD;
5832
5833 /* Probe for ability to use "ThreadInfo" query, as required. */
5834 rs->use_threadinfo_query = 1;
5835 rs->use_threadextra_query = 1;
5836
5837 rs->readahead_cache.invalidate ();
5838
5839 if (target_async_permitted)
5840 {
5841 /* FIXME: cagney/1999-09-23: During the initial connection it is
5842 assumed that the target is already ready and able to respond to
5843 requests. Unfortunately remote_start_remote() eventually calls
5844 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
5845 around this. Eventually a mechanism that allows
5846 wait_for_inferior() to expect/get timeouts will be
5847 implemented. */
5848 rs->wait_forever_enabled_p = 0;
5849 }
5850
5851 /* First delete any symbols previously loaded from shared libraries. */
5852 no_shared_libraries (NULL, 0);
5853
5854 /* Start the remote connection. If error() or QUIT, discard this
5855 target (we'd otherwise be in an inconsistent state) and then
5856 propogate the error on up the exception chain. This ensures that
5857 the caller doesn't stumble along blindly assuming that the
5858 function succeeded. The CLI doesn't have this problem but other
5859 UI's, such as MI do.
5860
5861 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5862 this function should return an error indication letting the
5863 caller restore the previous state. Unfortunately the command
5864 ``target remote'' is directly wired to this function making that
5865 impossible. On a positive note, the CLI side of this problem has
5866 been fixed - the function set_cmd_context() makes it possible for
5867 all the ``target ....'' commands to share a common callback
5868 function. See cli-dump.c. */
5869 {
5870
5871 try
5872 {
5873 remote->start_remote (from_tty, extended_p);
5874 }
5875 catch (const gdb_exception &ex)
5876 {
5877 /* Pop the partially set up target - unless something else did
5878 already before throwing the exception. */
5879 if (ex.error != TARGET_CLOSE_ERROR)
5880 remote_unpush_target (remote);
5881 throw;
5882 }
5883 }
5884
5885 remote_btrace_reset (rs);
5886
5887 if (target_async_permitted)
5888 rs->wait_forever_enabled_p = 1;
5889 }
5890
5891 /* Determine if WS represents a fork status. */
5892
5893 static bool
5894 is_fork_status (target_waitkind kind)
5895 {
5896 return (kind == TARGET_WAITKIND_FORKED
5897 || kind == TARGET_WAITKIND_VFORKED);
5898 }
5899
5900 /* Return THREAD's pending status if it is a pending fork parent, else
5901 return nullptr. */
5902
5903 static const target_waitstatus *
5904 thread_pending_fork_status (struct thread_info *thread)
5905 {
5906 const target_waitstatus &ws
5907 = (thread->has_pending_waitstatus ()
5908 ? thread->pending_waitstatus ()
5909 : thread->pending_follow);
5910
5911 if (!is_fork_status (ws.kind ()))
5912 return nullptr;
5913
5914 return &ws;
5915 }
5916
5917 /* Detach the specified process. */
5918
5919 void
5920 remote_target::remote_detach_pid (int pid)
5921 {
5922 struct remote_state *rs = get_remote_state ();
5923
5924 /* This should not be necessary, but the handling for D;PID in
5925 GDBserver versions prior to 8.2 incorrectly assumes that the
5926 selected process points to the same process we're detaching,
5927 leading to misbehavior (and possibly GDBserver crashing) when it
5928 does not. Since it's easy and cheap, work around it by forcing
5929 GDBserver to select GDB's current process. */
5930 set_general_process ();
5931
5932 if (remote_multi_process_p (rs))
5933 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
5934 else
5935 strcpy (rs->buf.data (), "D");
5936
5937 putpkt (rs->buf);
5938 getpkt (&rs->buf, 0);
5939
5940 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5941 ;
5942 else if (rs->buf[0] == '\0')
5943 error (_("Remote doesn't know how to detach"));
5944 else
5945 error (_("Can't detach process."));
5946 }
5947
5948 /* This detaches a program to which we previously attached, using
5949 inferior_ptid to identify the process. After this is done, GDB
5950 can be used to debug some other program. We better not have left
5951 any breakpoints in the target program or it'll die when it hits
5952 one. */
5953
5954 void
5955 remote_target::remote_detach_1 (inferior *inf, int from_tty)
5956 {
5957 int pid = inferior_ptid.pid ();
5958 struct remote_state *rs = get_remote_state ();
5959 int is_fork_parent;
5960
5961 if (!target_has_execution ())
5962 error (_("No process to detach from."));
5963
5964 target_announce_detach (from_tty);
5965
5966 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
5967 {
5968 /* If we're in breakpoints-always-inserted mode, or the inferior
5969 is running, we have to remove breakpoints before detaching.
5970 We don't do this in common code instead because not all
5971 targets support removing breakpoints while the target is
5972 running. The remote target / gdbserver does, though. */
5973 remove_breakpoints_inf (current_inferior ());
5974 }
5975
5976 /* Tell the remote target to detach. */
5977 remote_detach_pid (pid);
5978
5979 /* Exit only if this is the only active inferior. */
5980 if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1)
5981 gdb_puts (_("Ending remote debugging.\n"));
5982
5983 /* See if any thread of the inferior we are detaching has a pending fork
5984 status. In that case, we must detach from the child resulting from
5985 that fork. */
5986 for (thread_info *thread : inf->non_exited_threads ())
5987 {
5988 const target_waitstatus *ws = thread_pending_fork_status (thread);
5989
5990 if (ws == nullptr)
5991 continue;
5992
5993 remote_detach_pid (ws->child_ptid ().pid ());
5994 }
5995
5996 /* Check also for any pending fork events in the stop reply queue. */
5997 remote_notif_get_pending_events (&notif_client_stop);
5998 for (stop_reply_up &reply : rs->stop_reply_queue)
5999 {
6000 if (reply->ptid.pid () != pid)
6001 continue;
6002
6003 if (!is_fork_status (reply->ws.kind ()))
6004 continue;
6005
6006 remote_detach_pid (reply->ws.child_ptid ().pid ());
6007 }
6008
6009 thread_info *tp = find_thread_ptid (this, inferior_ptid);
6010
6011 /* Check to see if we are detaching a fork parent. Note that if we
6012 are detaching a fork child, tp == NULL. */
6013 is_fork_parent = (tp != NULL
6014 && tp->pending_follow.kind () == TARGET_WAITKIND_FORKED);
6015
6016 /* If doing detach-on-fork, we don't mourn, because that will delete
6017 breakpoints that should be available for the followed inferior. */
6018 if (!is_fork_parent)
6019 {
6020 /* Save the pid as a string before mourning, since that will
6021 unpush the remote target, and we need the string after. */
6022 std::string infpid = target_pid_to_str (ptid_t (pid));
6023
6024 target_mourn_inferior (inferior_ptid);
6025 if (print_inferior_events)
6026 gdb_printf (_("[Inferior %d (%s) detached]\n"),
6027 inf->num, infpid.c_str ());
6028 }
6029 else
6030 {
6031 switch_to_no_thread ();
6032 detach_inferior (current_inferior ());
6033 }
6034 }
6035
6036 void
6037 remote_target::detach (inferior *inf, int from_tty)
6038 {
6039 remote_detach_1 (inf, from_tty);
6040 }
6041
6042 void
6043 extended_remote_target::detach (inferior *inf, int from_tty)
6044 {
6045 remote_detach_1 (inf, from_tty);
6046 }
6047
6048 /* Target follow-fork function for remote targets. On entry, and
6049 at return, the current inferior is the fork parent.
6050
6051 Note that although this is currently only used for extended-remote,
6052 it is named remote_follow_fork in anticipation of using it for the
6053 remote target as well. */
6054
6055 void
6056 remote_target::follow_fork (inferior *child_inf, ptid_t child_ptid,
6057 target_waitkind fork_kind, bool follow_child,
6058 bool detach_fork)
6059 {
6060 process_stratum_target::follow_fork (child_inf, child_ptid,
6061 fork_kind, follow_child, detach_fork);
6062
6063 struct remote_state *rs = get_remote_state ();
6064
6065 if ((fork_kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
6066 || (fork_kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
6067 {
6068 /* When following the parent and detaching the child, we detach
6069 the child here. For the case of following the child and
6070 detaching the parent, the detach is done in the target-
6071 independent follow fork code in infrun.c. We can't use
6072 target_detach when detaching an unfollowed child because
6073 the client side doesn't know anything about the child. */
6074 if (detach_fork && !follow_child)
6075 {
6076 /* Detach the fork child. */
6077 remote_detach_pid (child_ptid.pid ());
6078 }
6079 }
6080 }
6081
6082 /* Target follow-exec function for remote targets. Save EXECD_PATHNAME
6083 in the program space of the new inferior. */
6084
6085 void
6086 remote_target::follow_exec (inferior *follow_inf, ptid_t ptid,
6087 const char *execd_pathname)
6088 {
6089 process_stratum_target::follow_exec (follow_inf, ptid, execd_pathname);
6090
6091 /* We know that this is a target file name, so if it has the "target:"
6092 prefix we strip it off before saving it in the program space. */
6093 if (is_target_filename (execd_pathname))
6094 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
6095
6096 set_pspace_remote_exec_file (follow_inf->pspace, execd_pathname);
6097 }
6098
6099 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
6100
6101 void
6102 remote_target::disconnect (const char *args, int from_tty)
6103 {
6104 if (args)
6105 error (_("Argument given to \"disconnect\" when remotely debugging."));
6106
6107 /* Make sure we unpush even the extended remote targets. Calling
6108 target_mourn_inferior won't unpush, and
6109 remote_target::mourn_inferior won't unpush if there is more than
6110 one inferior left. */
6111 remote_unpush_target (this);
6112
6113 if (from_tty)
6114 gdb_puts ("Ending remote debugging.\n");
6115 }
6116
6117 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
6118 be chatty about it. */
6119
6120 void
6121 extended_remote_target::attach (const char *args, int from_tty)
6122 {
6123 struct remote_state *rs = get_remote_state ();
6124 int pid;
6125 char *wait_status = NULL;
6126
6127 pid = parse_pid_to_attach (args);
6128
6129 /* Remote PID can be freely equal to getpid, do not check it here the same
6130 way as in other targets. */
6131
6132 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
6133 error (_("This target does not support attaching to a process"));
6134
6135 target_announce_attach (from_tty, pid);
6136
6137 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
6138 putpkt (rs->buf);
6139 getpkt (&rs->buf, 0);
6140
6141 switch (packet_ok (rs->buf,
6142 &remote_protocol_packets[PACKET_vAttach]))
6143 {
6144 case PACKET_OK:
6145 if (!target_is_non_stop_p ())
6146 {
6147 /* Save the reply for later. */
6148 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
6149 strcpy (wait_status, rs->buf.data ());
6150 }
6151 else if (strcmp (rs->buf.data (), "OK") != 0)
6152 error (_("Attaching to %s failed with: %s"),
6153 target_pid_to_str (ptid_t (pid)).c_str (),
6154 rs->buf.data ());
6155 break;
6156 case PACKET_UNKNOWN:
6157 error (_("This target does not support attaching to a process"));
6158 default:
6159 error (_("Attaching to %s failed"),
6160 target_pid_to_str (ptid_t (pid)).c_str ());
6161 }
6162
6163 switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0));
6164
6165 inferior_ptid = ptid_t (pid);
6166
6167 if (target_is_non_stop_p ())
6168 {
6169 /* Get list of threads. */
6170 update_thread_list ();
6171
6172 thread_info *thread = first_thread_of_inferior (current_inferior ());
6173 if (thread != nullptr)
6174 switch_to_thread (thread);
6175
6176 /* Invalidate our notion of the remote current thread. */
6177 record_currthread (rs, minus_one_ptid);
6178 }
6179 else
6180 {
6181 /* Now, if we have thread information, update the main thread's
6182 ptid. */
6183 ptid_t curr_ptid = remote_current_thread (ptid_t (pid));
6184
6185 /* Add the main thread to the thread list. We add the thread
6186 silently in this case (the final true parameter). */
6187 thread_info *thr = remote_add_thread (curr_ptid, true, true, true);
6188
6189 switch_to_thread (thr);
6190 }
6191
6192 /* Next, if the target can specify a description, read it. We do
6193 this before anything involving memory or registers. */
6194 target_find_description ();
6195
6196 if (!target_is_non_stop_p ())
6197 {
6198 /* Use the previously fetched status. */
6199 gdb_assert (wait_status != NULL);
6200
6201 struct notif_event *reply
6202 = remote_notif_parse (this, &notif_client_stop, wait_status);
6203
6204 push_stop_reply ((struct stop_reply *) reply);
6205 }
6206 else
6207 {
6208 gdb_assert (wait_status == NULL);
6209
6210 gdb_assert (target_can_async_p ());
6211 }
6212 }
6213
6214 /* Implementation of the to_post_attach method. */
6215
6216 void
6217 extended_remote_target::post_attach (int pid)
6218 {
6219 /* Get text, data & bss offsets. */
6220 get_offsets ();
6221
6222 /* In certain cases GDB might not have had the chance to start
6223 symbol lookup up until now. This could happen if the debugged
6224 binary is not using shared libraries, the vsyscall page is not
6225 present (on Linux) and the binary itself hadn't changed since the
6226 debugging process was started. */
6227 if (current_program_space->symfile_object_file != NULL)
6228 remote_check_symbols();
6229 }
6230
6231 \f
6232 /* Check for the availability of vCont. This function should also check
6233 the response. */
6234
6235 void
6236 remote_target::remote_vcont_probe ()
6237 {
6238 remote_state *rs = get_remote_state ();
6239 char *buf;
6240
6241 strcpy (rs->buf.data (), "vCont?");
6242 putpkt (rs->buf);
6243 getpkt (&rs->buf, 0);
6244 buf = rs->buf.data ();
6245
6246 /* Make sure that the features we assume are supported. */
6247 if (startswith (buf, "vCont"))
6248 {
6249 char *p = &buf[5];
6250 int support_c, support_C;
6251
6252 rs->supports_vCont.s = 0;
6253 rs->supports_vCont.S = 0;
6254 support_c = 0;
6255 support_C = 0;
6256 rs->supports_vCont.t = 0;
6257 rs->supports_vCont.r = 0;
6258 while (p && *p == ';')
6259 {
6260 p++;
6261 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
6262 rs->supports_vCont.s = 1;
6263 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
6264 rs->supports_vCont.S = 1;
6265 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
6266 support_c = 1;
6267 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
6268 support_C = 1;
6269 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
6270 rs->supports_vCont.t = 1;
6271 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
6272 rs->supports_vCont.r = 1;
6273
6274 p = strchr (p, ';');
6275 }
6276
6277 /* If c, and C are not all supported, we can't use vCont. Clearing
6278 BUF will make packet_ok disable the packet. */
6279 if (!support_c || !support_C)
6280 buf[0] = 0;
6281 }
6282
6283 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
6284 rs->supports_vCont_probed = true;
6285 }
6286
6287 /* Helper function for building "vCont" resumptions. Write a
6288 resumption to P. ENDP points to one-passed-the-end of the buffer
6289 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
6290 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
6291 resumed thread should be single-stepped and/or signalled. If PTID
6292 equals minus_one_ptid, then all threads are resumed; if PTID
6293 represents a process, then all threads of the process are
6294 resumed. */
6295
6296 char *
6297 remote_target::append_resumption (char *p, char *endp,
6298 ptid_t ptid, int step, gdb_signal siggnal)
6299 {
6300 struct remote_state *rs = get_remote_state ();
6301
6302 if (step && siggnal != GDB_SIGNAL_0)
6303 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
6304 else if (step
6305 /* GDB is willing to range step. */
6306 && use_range_stepping
6307 /* Target supports range stepping. */
6308 && rs->supports_vCont.r
6309 /* We don't currently support range stepping multiple
6310 threads with a wildcard (though the protocol allows it,
6311 so stubs shouldn't make an active effort to forbid
6312 it). */
6313 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
6314 {
6315 struct thread_info *tp;
6316
6317 if (ptid == minus_one_ptid)
6318 {
6319 /* If we don't know about the target thread's tid, then
6320 we're resuming magic_null_ptid (see caller). */
6321 tp = find_thread_ptid (this, magic_null_ptid);
6322 }
6323 else
6324 tp = find_thread_ptid (this, ptid);
6325 gdb_assert (tp != NULL);
6326
6327 if (tp->control.may_range_step)
6328 {
6329 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6330
6331 p += xsnprintf (p, endp - p, ";r%s,%s",
6332 phex_nz (tp->control.step_range_start,
6333 addr_size),
6334 phex_nz (tp->control.step_range_end,
6335 addr_size));
6336 }
6337 else
6338 p += xsnprintf (p, endp - p, ";s");
6339 }
6340 else if (step)
6341 p += xsnprintf (p, endp - p, ";s");
6342 else if (siggnal != GDB_SIGNAL_0)
6343 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6344 else
6345 p += xsnprintf (p, endp - p, ";c");
6346
6347 if (remote_multi_process_p (rs) && ptid.is_pid ())
6348 {
6349 ptid_t nptid;
6350
6351 /* All (-1) threads of process. */
6352 nptid = ptid_t (ptid.pid (), -1);
6353
6354 p += xsnprintf (p, endp - p, ":");
6355 p = write_ptid (p, endp, nptid);
6356 }
6357 else if (ptid != minus_one_ptid)
6358 {
6359 p += xsnprintf (p, endp - p, ":");
6360 p = write_ptid (p, endp, ptid);
6361 }
6362
6363 return p;
6364 }
6365
6366 /* Clear the thread's private info on resume. */
6367
6368 static void
6369 resume_clear_thread_private_info (struct thread_info *thread)
6370 {
6371 if (thread->priv != NULL)
6372 {
6373 remote_thread_info *priv = get_remote_thread_info (thread);
6374
6375 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6376 priv->watch_data_address = 0;
6377 }
6378 }
6379
6380 /* Append a vCont continue-with-signal action for threads that have a
6381 non-zero stop signal. */
6382
6383 char *
6384 remote_target::append_pending_thread_resumptions (char *p, char *endp,
6385 ptid_t ptid)
6386 {
6387 for (thread_info *thread : all_non_exited_threads (this, ptid))
6388 if (inferior_ptid != thread->ptid
6389 && thread->stop_signal () != GDB_SIGNAL_0)
6390 {
6391 p = append_resumption (p, endp, thread->ptid,
6392 0, thread->stop_signal ());
6393 thread->set_stop_signal (GDB_SIGNAL_0);
6394 resume_clear_thread_private_info (thread);
6395 }
6396
6397 return p;
6398 }
6399
6400 /* Set the target running, using the packets that use Hc
6401 (c/s/C/S). */
6402
6403 void
6404 remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6405 gdb_signal siggnal)
6406 {
6407 struct remote_state *rs = get_remote_state ();
6408 char *buf;
6409
6410 rs->last_sent_signal = siggnal;
6411 rs->last_sent_step = step;
6412
6413 /* The c/s/C/S resume packets use Hc, so set the continue
6414 thread. */
6415 if (ptid == minus_one_ptid)
6416 set_continue_thread (any_thread_ptid);
6417 else
6418 set_continue_thread (ptid);
6419
6420 for (thread_info *thread : all_non_exited_threads (this))
6421 resume_clear_thread_private_info (thread);
6422
6423 buf = rs->buf.data ();
6424 if (::execution_direction == EXEC_REVERSE)
6425 {
6426 /* We don't pass signals to the target in reverse exec mode. */
6427 if (info_verbose && siggnal != GDB_SIGNAL_0)
6428 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6429 siggnal);
6430
6431 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6432 error (_("Remote reverse-step not supported."));
6433 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6434 error (_("Remote reverse-continue not supported."));
6435
6436 strcpy (buf, step ? "bs" : "bc");
6437 }
6438 else if (siggnal != GDB_SIGNAL_0)
6439 {
6440 buf[0] = step ? 'S' : 'C';
6441 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6442 buf[2] = tohex (((int) siggnal) & 0xf);
6443 buf[3] = '\0';
6444 }
6445 else
6446 strcpy (buf, step ? "s" : "c");
6447
6448 putpkt (buf);
6449 }
6450
6451 /* Resume the remote inferior by using a "vCont" packet. SCOPE_PTID,
6452 STEP, and SIGGNAL have the same meaning as in target_resume. This
6453 function returns non-zero iff it resumes the inferior.
6454
6455 This function issues a strict subset of all possible vCont commands
6456 at the moment. */
6457
6458 int
6459 remote_target::remote_resume_with_vcont (ptid_t scope_ptid, int step,
6460 enum gdb_signal siggnal)
6461 {
6462 struct remote_state *rs = get_remote_state ();
6463 char *p;
6464 char *endp;
6465
6466 /* No reverse execution actions defined for vCont. */
6467 if (::execution_direction == EXEC_REVERSE)
6468 return 0;
6469
6470 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6471 remote_vcont_probe ();
6472
6473 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6474 return 0;
6475
6476 p = rs->buf.data ();
6477 endp = p + get_remote_packet_size ();
6478
6479 /* If we could generate a wider range of packets, we'd have to worry
6480 about overflowing BUF. Should there be a generic
6481 "multi-part-packet" packet? */
6482
6483 p += xsnprintf (p, endp - p, "vCont");
6484
6485 if (scope_ptid == magic_null_ptid)
6486 {
6487 /* MAGIC_NULL_PTID means that we don't have any active threads,
6488 so we don't have any TID numbers the inferior will
6489 understand. Make sure to only send forms that do not specify
6490 a TID. */
6491 append_resumption (p, endp, minus_one_ptid, step, siggnal);
6492 }
6493 else if (scope_ptid == minus_one_ptid || scope_ptid.is_pid ())
6494 {
6495 /* Resume all threads (of all processes, or of a single
6496 process), with preference for INFERIOR_PTID. This assumes
6497 inferior_ptid belongs to the set of all threads we are about
6498 to resume. */
6499 if (step || siggnal != GDB_SIGNAL_0)
6500 {
6501 /* Step inferior_ptid, with or without signal. */
6502 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
6503 }
6504
6505 /* Also pass down any pending signaled resumption for other
6506 threads not the current. */
6507 p = append_pending_thread_resumptions (p, endp, scope_ptid);
6508
6509 /* And continue others without a signal. */
6510 append_resumption (p, endp, scope_ptid, /*step=*/ 0, GDB_SIGNAL_0);
6511 }
6512 else
6513 {
6514 /* Scheduler locking; resume only SCOPE_PTID. */
6515 append_resumption (p, endp, scope_ptid, step, siggnal);
6516 }
6517
6518 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
6519 putpkt (rs->buf);
6520
6521 if (target_is_non_stop_p ())
6522 {
6523 /* In non-stop, the stub replies to vCont with "OK". The stop
6524 reply will be reported asynchronously by means of a `%Stop'
6525 notification. */
6526 getpkt (&rs->buf, 0);
6527 if (strcmp (rs->buf.data (), "OK") != 0)
6528 error (_("Unexpected vCont reply in non-stop mode: %s"),
6529 rs->buf.data ());
6530 }
6531
6532 return 1;
6533 }
6534
6535 /* Tell the remote machine to resume. */
6536
6537 void
6538 remote_target::resume (ptid_t scope_ptid, int step, enum gdb_signal siggnal)
6539 {
6540 struct remote_state *rs = get_remote_state ();
6541
6542 /* When connected in non-stop mode, the core resumes threads
6543 individually. Resuming remote threads directly in target_resume
6544 would thus result in sending one packet per thread. Instead, to
6545 minimize roundtrip latency, here we just store the resume
6546 request (put the thread in RESUMED_PENDING_VCONT state); the actual remote
6547 resumption will be done in remote_target::commit_resume, where we'll be
6548 able to do vCont action coalescing. */
6549 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
6550 {
6551 remote_thread_info *remote_thr
6552 = get_remote_thread_info (inferior_thread ());
6553
6554 /* We don't expect the core to ask to resume an already resumed (from
6555 its point of view) thread. */
6556 gdb_assert (remote_thr->get_resume_state () == resume_state::NOT_RESUMED);
6557
6558 remote_thr->set_resumed_pending_vcont (step, siggnal);
6559
6560 /* There's actually nothing that says that the core can't
6561 request a wildcard resume in non-stop mode, though. It's
6562 just that we know it doesn't currently, so we don't bother
6563 with it. */
6564 gdb_assert (scope_ptid == inferior_ptid);
6565 return;
6566 }
6567
6568 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6569 (explained in remote-notif.c:handle_notification) so
6570 remote_notif_process is not called. We need find a place where
6571 it is safe to start a 'vNotif' sequence. It is good to do it
6572 before resuming inferior, because inferior was stopped and no RSP
6573 traffic at that moment. */
6574 if (!target_is_non_stop_p ())
6575 remote_notif_process (rs->notif_state, &notif_client_stop);
6576
6577 rs->last_resume_exec_dir = ::execution_direction;
6578
6579 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6580 if (!remote_resume_with_vcont (scope_ptid, step, siggnal))
6581 remote_resume_with_hc (scope_ptid, step, siggnal);
6582
6583 /* Update resumed state tracked by the remote target. */
6584 for (thread_info *tp : all_non_exited_threads (this, scope_ptid))
6585 get_remote_thread_info (tp)->set_resumed ();
6586
6587 /* We've just told the target to resume. The remote server will
6588 wait for the inferior to stop, and then send a stop reply. In
6589 the mean time, we can't start another command/query ourselves
6590 because the stub wouldn't be ready to process it. This applies
6591 only to the base all-stop protocol, however. In non-stop (which
6592 only supports vCont), the stub replies with an "OK", and is
6593 immediate able to process further serial input. */
6594 if (!target_is_non_stop_p ())
6595 rs->waiting_for_stop_reply = 1;
6596 }
6597
6598 /* Private per-inferior info for target remote processes. */
6599
6600 struct remote_inferior : public private_inferior
6601 {
6602 /* Whether we can send a wildcard vCont for this process. */
6603 bool may_wildcard_vcont = true;
6604 };
6605
6606 /* Get the remote private inferior data associated to INF. */
6607
6608 static remote_inferior *
6609 get_remote_inferior (inferior *inf)
6610 {
6611 if (inf->priv == NULL)
6612 inf->priv.reset (new remote_inferior);
6613
6614 return static_cast<remote_inferior *> (inf->priv.get ());
6615 }
6616
6617 /* Class used to track the construction of a vCont packet in the
6618 outgoing packet buffer. This is used to send multiple vCont
6619 packets if we have more actions than would fit a single packet. */
6620
6621 class vcont_builder
6622 {
6623 public:
6624 explicit vcont_builder (remote_target *remote)
6625 : m_remote (remote)
6626 {
6627 restart ();
6628 }
6629
6630 void flush ();
6631 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6632
6633 private:
6634 void restart ();
6635
6636 /* The remote target. */
6637 remote_target *m_remote;
6638
6639 /* Pointer to the first action. P points here if no action has been
6640 appended yet. */
6641 char *m_first_action;
6642
6643 /* Where the next action will be appended. */
6644 char *m_p;
6645
6646 /* The end of the buffer. Must never write past this. */
6647 char *m_endp;
6648 };
6649
6650 /* Prepare the outgoing buffer for a new vCont packet. */
6651
6652 void
6653 vcont_builder::restart ()
6654 {
6655 struct remote_state *rs = m_remote->get_remote_state ();
6656
6657 m_p = rs->buf.data ();
6658 m_endp = m_p + m_remote->get_remote_packet_size ();
6659 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6660 m_first_action = m_p;
6661 }
6662
6663 /* If the vCont packet being built has any action, send it to the
6664 remote end. */
6665
6666 void
6667 vcont_builder::flush ()
6668 {
6669 struct remote_state *rs;
6670
6671 if (m_p == m_first_action)
6672 return;
6673
6674 rs = m_remote->get_remote_state ();
6675 m_remote->putpkt (rs->buf);
6676 m_remote->getpkt (&rs->buf, 0);
6677 if (strcmp (rs->buf.data (), "OK") != 0)
6678 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
6679 }
6680
6681 /* The largest action is range-stepping, with its two addresses. This
6682 is more than sufficient. If a new, bigger action is created, it'll
6683 quickly trigger a failed assertion in append_resumption (and we'll
6684 just bump this). */
6685 #define MAX_ACTION_SIZE 200
6686
6687 /* Append a new vCont action in the outgoing packet being built. If
6688 the action doesn't fit the packet along with previous actions, push
6689 what we've got so far to the remote end and start over a new vCont
6690 packet (with the new action). */
6691
6692 void
6693 vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
6694 {
6695 char buf[MAX_ACTION_SIZE + 1];
6696
6697 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6698 ptid, step, siggnal);
6699
6700 /* Check whether this new action would fit in the vCont packet along
6701 with previous actions. If not, send what we've got so far and
6702 start a new vCont packet. */
6703 size_t rsize = endp - buf;
6704 if (rsize > m_endp - m_p)
6705 {
6706 flush ();
6707 restart ();
6708
6709 /* Should now fit. */
6710 gdb_assert (rsize <= m_endp - m_p);
6711 }
6712
6713 memcpy (m_p, buf, rsize);
6714 m_p += rsize;
6715 *m_p = '\0';
6716 }
6717
6718 /* to_commit_resume implementation. */
6719
6720 void
6721 remote_target::commit_resumed ()
6722 {
6723 /* If connected in all-stop mode, we'd send the remote resume
6724 request directly from remote_resume. Likewise if
6725 reverse-debugging, as there are no defined vCont actions for
6726 reverse execution. */
6727 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
6728 return;
6729
6730 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6731 instead of resuming all threads of each process individually.
6732 However, if any thread of a process must remain halted, we can't
6733 send wildcard resumes and must send one action per thread.
6734
6735 Care must be taken to not resume threads/processes the server
6736 side already told us are stopped, but the core doesn't know about
6737 yet, because the events are still in the vStopped notification
6738 queue. For example:
6739
6740 #1 => vCont s:p1.1;c
6741 #2 <= OK
6742 #3 <= %Stopped T05 p1.1
6743 #4 => vStopped
6744 #5 <= T05 p1.2
6745 #6 => vStopped
6746 #7 <= OK
6747 #8 (infrun handles the stop for p1.1 and continues stepping)
6748 #9 => vCont s:p1.1;c
6749
6750 The last vCont above would resume thread p1.2 by mistake, because
6751 the server has no idea that the event for p1.2 had not been
6752 handled yet.
6753
6754 The server side must similarly ignore resume actions for the
6755 thread that has a pending %Stopped notification (and any other
6756 threads with events pending), until GDB acks the notification
6757 with vStopped. Otherwise, e.g., the following case is
6758 mishandled:
6759
6760 #1 => g (or any other packet)
6761 #2 <= [registers]
6762 #3 <= %Stopped T05 p1.2
6763 #4 => vCont s:p1.1;c
6764 #5 <= OK
6765
6766 Above, the server must not resume thread p1.2. GDB can't know
6767 that p1.2 stopped until it acks the %Stopped notification, and
6768 since from GDB's perspective all threads should be running, it
6769 sends a "c" action.
6770
6771 Finally, special care must also be given to handling fork/vfork
6772 events. A (v)fork event actually tells us that two processes
6773 stopped -- the parent and the child. Until we follow the fork,
6774 we must not resume the child. Therefore, if we have a pending
6775 fork follow, we must not send a global wildcard resume action
6776 (vCont;c). We can still send process-wide wildcards though. */
6777
6778 /* Start by assuming a global wildcard (vCont;c) is possible. */
6779 bool may_global_wildcard_vcont = true;
6780
6781 /* And assume every process is individually wildcard-able too. */
6782 for (inferior *inf : all_non_exited_inferiors (this))
6783 {
6784 remote_inferior *priv = get_remote_inferior (inf);
6785
6786 priv->may_wildcard_vcont = true;
6787 }
6788
6789 /* Check for any pending events (not reported or processed yet) and
6790 disable process and global wildcard resumes appropriately. */
6791 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6792
6793 bool any_pending_vcont_resume = false;
6794
6795 for (thread_info *tp : all_non_exited_threads (this))
6796 {
6797 remote_thread_info *priv = get_remote_thread_info (tp);
6798
6799 /* If a thread of a process is not meant to be resumed, then we
6800 can't wildcard that process. */
6801 if (priv->get_resume_state () == resume_state::NOT_RESUMED)
6802 {
6803 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
6804
6805 /* And if we can't wildcard a process, we can't wildcard
6806 everything either. */
6807 may_global_wildcard_vcont = false;
6808 continue;
6809 }
6810
6811 if (priv->get_resume_state () == resume_state::RESUMED_PENDING_VCONT)
6812 any_pending_vcont_resume = true;
6813
6814 /* If a thread is the parent of an unfollowed fork, then we
6815 can't do a global wildcard, as that would resume the fork
6816 child. */
6817 if (thread_pending_fork_status (tp) != nullptr)
6818 may_global_wildcard_vcont = false;
6819 }
6820
6821 /* We didn't have any resumed thread pending a vCont resume, so nothing to
6822 do. */
6823 if (!any_pending_vcont_resume)
6824 return;
6825
6826 /* Now let's build the vCont packet(s). Actions must be appended
6827 from narrower to wider scopes (thread -> process -> global). If
6828 we end up with too many actions for a single packet vcont_builder
6829 flushes the current vCont packet to the remote side and starts a
6830 new one. */
6831 struct vcont_builder vcont_builder (this);
6832
6833 /* Threads first. */
6834 for (thread_info *tp : all_non_exited_threads (this))
6835 {
6836 remote_thread_info *remote_thr = get_remote_thread_info (tp);
6837
6838 /* If the thread was previously vCont-resumed, no need to send a specific
6839 action for it. If we didn't receive a resume request for it, don't
6840 send an action for it either. */
6841 if (remote_thr->get_resume_state () != resume_state::RESUMED_PENDING_VCONT)
6842 continue;
6843
6844 gdb_assert (!thread_is_in_step_over_chain (tp));
6845
6846 /* We should never be commit-resuming a thread that has a stop reply.
6847 Otherwise, we would end up reporting a stop event for a thread while
6848 it is running on the remote target. */
6849 remote_state *rs = get_remote_state ();
6850 for (const auto &stop_reply : rs->stop_reply_queue)
6851 gdb_assert (stop_reply->ptid != tp->ptid);
6852
6853 const resumed_pending_vcont_info &info
6854 = remote_thr->resumed_pending_vcont_info ();
6855
6856 /* Check if we need to send a specific action for this thread. If not,
6857 it will be included in a wildcard resume instead. */
6858 if (info.step || info.sig != GDB_SIGNAL_0
6859 || !get_remote_inferior (tp->inf)->may_wildcard_vcont)
6860 vcont_builder.push_action (tp->ptid, info.step, info.sig);
6861
6862 remote_thr->set_resumed ();
6863 }
6864
6865 /* Now check whether we can send any process-wide wildcard. This is
6866 to avoid sending a global wildcard in the case nothing is
6867 supposed to be resumed. */
6868 bool any_process_wildcard = false;
6869
6870 for (inferior *inf : all_non_exited_inferiors (this))
6871 {
6872 if (get_remote_inferior (inf)->may_wildcard_vcont)
6873 {
6874 any_process_wildcard = true;
6875 break;
6876 }
6877 }
6878
6879 if (any_process_wildcard)
6880 {
6881 /* If all processes are wildcard-able, then send a single "c"
6882 action, otherwise, send an "all (-1) threads of process"
6883 continue action for each running process, if any. */
6884 if (may_global_wildcard_vcont)
6885 {
6886 vcont_builder.push_action (minus_one_ptid,
6887 false, GDB_SIGNAL_0);
6888 }
6889 else
6890 {
6891 for (inferior *inf : all_non_exited_inferiors (this))
6892 {
6893 if (get_remote_inferior (inf)->may_wildcard_vcont)
6894 {
6895 vcont_builder.push_action (ptid_t (inf->pid),
6896 false, GDB_SIGNAL_0);
6897 }
6898 }
6899 }
6900 }
6901
6902 vcont_builder.flush ();
6903 }
6904
6905 /* Implementation of target_has_pending_events. */
6906
6907 bool
6908 remote_target::has_pending_events ()
6909 {
6910 if (target_can_async_p ())
6911 {
6912 remote_state *rs = get_remote_state ();
6913
6914 if (async_event_handler_marked (rs->remote_async_inferior_event_token))
6915 return true;
6916
6917 /* Note that BUFCNT can be negative, indicating sticky
6918 error. */
6919 if (rs->remote_desc->bufcnt != 0)
6920 return true;
6921 }
6922 return false;
6923 }
6924
6925 \f
6926
6927 /* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6928 thread, all threads of a remote process, or all threads of all
6929 processes. */
6930
6931 void
6932 remote_target::remote_stop_ns (ptid_t ptid)
6933 {
6934 struct remote_state *rs = get_remote_state ();
6935 char *p = rs->buf.data ();
6936 char *endp = p + get_remote_packet_size ();
6937
6938 /* If any thread that needs to stop was resumed but pending a vCont
6939 resume, generate a phony stop_reply. However, first check
6940 whether the thread wasn't resumed with a signal. Generating a
6941 phony stop in that case would result in losing the signal. */
6942 bool needs_commit = false;
6943 for (thread_info *tp : all_non_exited_threads (this, ptid))
6944 {
6945 remote_thread_info *remote_thr = get_remote_thread_info (tp);
6946
6947 if (remote_thr->get_resume_state ()
6948 == resume_state::RESUMED_PENDING_VCONT)
6949 {
6950 const resumed_pending_vcont_info &info
6951 = remote_thr->resumed_pending_vcont_info ();
6952 if (info.sig != GDB_SIGNAL_0)
6953 {
6954 /* This signal must be forwarded to the inferior. We
6955 could commit-resume just this thread, but its simpler
6956 to just commit-resume everything. */
6957 needs_commit = true;
6958 break;
6959 }
6960 }
6961 }
6962
6963 if (needs_commit)
6964 commit_resumed ();
6965 else
6966 for (thread_info *tp : all_non_exited_threads (this, ptid))
6967 {
6968 remote_thread_info *remote_thr = get_remote_thread_info (tp);
6969
6970 if (remote_thr->get_resume_state ()
6971 == resume_state::RESUMED_PENDING_VCONT)
6972 {
6973 remote_debug_printf ("Enqueueing phony stop reply for thread pending "
6974 "vCont-resume (%d, %ld, %s)", tp->ptid.pid(),
6975 tp->ptid.lwp (),
6976 pulongest (tp->ptid.tid ()));
6977
6978 /* Check that the thread wasn't resumed with a signal.
6979 Generating a phony stop would result in losing the
6980 signal. */
6981 const resumed_pending_vcont_info &info
6982 = remote_thr->resumed_pending_vcont_info ();
6983 gdb_assert (info.sig == GDB_SIGNAL_0);
6984
6985 stop_reply *sr = new stop_reply ();
6986 sr->ptid = tp->ptid;
6987 sr->rs = rs;
6988 sr->ws.set_stopped (GDB_SIGNAL_0);
6989 sr->arch = tp->inf->gdbarch;
6990 sr->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6991 sr->watch_data_address = 0;
6992 sr->core = 0;
6993 this->push_stop_reply (sr);
6994
6995 /* Pretend that this thread was actually resumed on the
6996 remote target, then stopped. If we leave it in the
6997 RESUMED_PENDING_VCONT state and the commit_resumed
6998 method is called while the stop reply is still in the
6999 queue, we'll end up reporting a stop event to the core
7000 for that thread while it is running on the remote
7001 target... that would be bad. */
7002 remote_thr->set_resumed ();
7003 }
7004 }
7005
7006 /* FIXME: This supports_vCont_probed check is a workaround until
7007 packet_support is per-connection. */
7008 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN
7009 || !rs->supports_vCont_probed)
7010 remote_vcont_probe ();
7011
7012 if (!rs->supports_vCont.t)
7013 error (_("Remote server does not support stopping threads"));
7014
7015 if (ptid == minus_one_ptid
7016 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
7017 p += xsnprintf (p, endp - p, "vCont;t");
7018 else
7019 {
7020 ptid_t nptid;
7021
7022 p += xsnprintf (p, endp - p, "vCont;t:");
7023
7024 if (ptid.is_pid ())
7025 /* All (-1) threads of process. */
7026 nptid = ptid_t (ptid.pid (), -1);
7027 else
7028 {
7029 /* Small optimization: if we already have a stop reply for
7030 this thread, no use in telling the stub we want this
7031 stopped. */
7032 if (peek_stop_reply (ptid))
7033 return;
7034
7035 nptid = ptid;
7036 }
7037
7038 write_ptid (p, endp, nptid);
7039 }
7040
7041 /* In non-stop, we get an immediate OK reply. The stop reply will
7042 come in asynchronously by notification. */
7043 putpkt (rs->buf);
7044 getpkt (&rs->buf, 0);
7045 if (strcmp (rs->buf.data (), "OK") != 0)
7046 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
7047 rs->buf.data ());
7048 }
7049
7050 /* All-stop version of target_interrupt. Sends a break or a ^C to
7051 interrupt the remote target. It is undefined which thread of which
7052 process reports the interrupt. */
7053
7054 void
7055 remote_target::remote_interrupt_as ()
7056 {
7057 struct remote_state *rs = get_remote_state ();
7058
7059 rs->ctrlc_pending_p = 1;
7060
7061 /* If the inferior is stopped already, but the core didn't know
7062 about it yet, just ignore the request. The pending stop events
7063 will be collected in remote_wait. */
7064 if (stop_reply_queue_length () > 0)
7065 return;
7066
7067 /* Send interrupt_sequence to remote target. */
7068 send_interrupt_sequence ();
7069 }
7070
7071 /* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
7072 the remote target. It is undefined which thread of which process
7073 reports the interrupt. Throws an error if the packet is not
7074 supported by the server. */
7075
7076 void
7077 remote_target::remote_interrupt_ns ()
7078 {
7079 struct remote_state *rs = get_remote_state ();
7080 char *p = rs->buf.data ();
7081 char *endp = p + get_remote_packet_size ();
7082
7083 xsnprintf (p, endp - p, "vCtrlC");
7084
7085 /* In non-stop, we get an immediate OK reply. The stop reply will
7086 come in asynchronously by notification. */
7087 putpkt (rs->buf);
7088 getpkt (&rs->buf, 0);
7089
7090 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
7091 {
7092 case PACKET_OK:
7093 break;
7094 case PACKET_UNKNOWN:
7095 error (_("No support for interrupting the remote target."));
7096 case PACKET_ERROR:
7097 error (_("Interrupting target failed: %s"), rs->buf.data ());
7098 }
7099 }
7100
7101 /* Implement the to_stop function for the remote targets. */
7102
7103 void
7104 remote_target::stop (ptid_t ptid)
7105 {
7106 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7107
7108 if (target_is_non_stop_p ())
7109 remote_stop_ns (ptid);
7110 else
7111 {
7112 /* We don't currently have a way to transparently pause the
7113 remote target in all-stop mode. Interrupt it instead. */
7114 remote_interrupt_as ();
7115 }
7116 }
7117
7118 /* Implement the to_interrupt function for the remote targets. */
7119
7120 void
7121 remote_target::interrupt ()
7122 {
7123 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7124
7125 if (target_is_non_stop_p ())
7126 remote_interrupt_ns ();
7127 else
7128 remote_interrupt_as ();
7129 }
7130
7131 /* Implement the to_pass_ctrlc function for the remote targets. */
7132
7133 void
7134 remote_target::pass_ctrlc ()
7135 {
7136 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7137
7138 struct remote_state *rs = get_remote_state ();
7139
7140 /* If we're starting up, we're not fully synced yet. Quit
7141 immediately. */
7142 if (rs->starting_up)
7143 quit ();
7144 /* If ^C has already been sent once, offer to disconnect. */
7145 else if (rs->ctrlc_pending_p)
7146 interrupt_query ();
7147 else
7148 target_interrupt ();
7149 }
7150
7151 /* Ask the user what to do when an interrupt is received. */
7152
7153 void
7154 remote_target::interrupt_query ()
7155 {
7156 struct remote_state *rs = get_remote_state ();
7157
7158 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
7159 {
7160 if (query (_("The target is not responding to interrupt requests.\n"
7161 "Stop debugging it? ")))
7162 {
7163 remote_unpush_target (this);
7164 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
7165 }
7166 }
7167 else
7168 {
7169 if (query (_("Interrupted while waiting for the program.\n"
7170 "Give up waiting? ")))
7171 quit ();
7172 }
7173 }
7174
7175 /* Enable/disable target terminal ownership. Most targets can use
7176 terminal groups to control terminal ownership. Remote targets are
7177 different in that explicit transfer of ownership to/from GDB/target
7178 is required. */
7179
7180 void
7181 remote_target::terminal_inferior ()
7182 {
7183 /* NOTE: At this point we could also register our selves as the
7184 recipient of all input. Any characters typed could then be
7185 passed on down to the target. */
7186 }
7187
7188 void
7189 remote_target::terminal_ours ()
7190 {
7191 }
7192
7193 static void
7194 remote_console_output (const char *msg)
7195 {
7196 const char *p;
7197
7198 for (p = msg; p[0] && p[1]; p += 2)
7199 {
7200 char tb[2];
7201 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
7202
7203 tb[0] = c;
7204 tb[1] = 0;
7205 gdb_stdtarg->puts (tb);
7206 }
7207 gdb_stdtarg->flush ();
7208 }
7209
7210 /* Return the length of the stop reply queue. */
7211
7212 int
7213 remote_target::stop_reply_queue_length ()
7214 {
7215 remote_state *rs = get_remote_state ();
7216 return rs->stop_reply_queue.size ();
7217 }
7218
7219 static void
7220 remote_notif_stop_parse (remote_target *remote,
7221 struct notif_client *self, const char *buf,
7222 struct notif_event *event)
7223 {
7224 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
7225 }
7226
7227 static void
7228 remote_notif_stop_ack (remote_target *remote,
7229 struct notif_client *self, const char *buf,
7230 struct notif_event *event)
7231 {
7232 struct stop_reply *stop_reply = (struct stop_reply *) event;
7233
7234 /* acknowledge */
7235 putpkt (remote, self->ack_command);
7236
7237 /* Kind can be TARGET_WAITKIND_IGNORE if we have meanwhile discarded
7238 the notification. It was left in the queue because we need to
7239 acknowledge it and pull the rest of the notifications out. */
7240 if (stop_reply->ws.kind () != TARGET_WAITKIND_IGNORE)
7241 remote->push_stop_reply (stop_reply);
7242 }
7243
7244 static int
7245 remote_notif_stop_can_get_pending_events (remote_target *remote,
7246 struct notif_client *self)
7247 {
7248 /* We can't get pending events in remote_notif_process for
7249 notification stop, and we have to do this in remote_wait_ns
7250 instead. If we fetch all queued events from stub, remote stub
7251 may exit and we have no chance to process them back in
7252 remote_wait_ns. */
7253 remote_state *rs = remote->get_remote_state ();
7254 mark_async_event_handler (rs->remote_async_inferior_event_token);
7255 return 0;
7256 }
7257
7258 stop_reply::~stop_reply ()
7259 {
7260 for (cached_reg_t &reg : regcache)
7261 xfree (reg.data);
7262 }
7263
7264 static notif_event_up
7265 remote_notif_stop_alloc_reply ()
7266 {
7267 return notif_event_up (new struct stop_reply ());
7268 }
7269
7270 /* A client of notification Stop. */
7271
7272 struct notif_client notif_client_stop =
7273 {
7274 "Stop",
7275 "vStopped",
7276 remote_notif_stop_parse,
7277 remote_notif_stop_ack,
7278 remote_notif_stop_can_get_pending_events,
7279 remote_notif_stop_alloc_reply,
7280 REMOTE_NOTIF_STOP,
7281 };
7282
7283 /* If CONTEXT contains any fork child threads that have not been
7284 reported yet, remove them from the CONTEXT list. If such a
7285 thread exists it is because we are stopped at a fork catchpoint
7286 and have not yet called follow_fork, which will set up the
7287 host-side data structures for the new process. */
7288
7289 void
7290 remote_target::remove_new_fork_children (threads_listing_context *context)
7291 {
7292 struct notif_client *notif = &notif_client_stop;
7293
7294 /* For any threads stopped at a fork event, remove the corresponding
7295 fork child threads from the CONTEXT list. */
7296 for (thread_info *thread : all_non_exited_threads (this))
7297 {
7298 const target_waitstatus *ws = thread_pending_fork_status (thread);
7299
7300 if (ws == nullptr)
7301 continue;
7302
7303 context->remove_thread (ws->child_ptid ());
7304 }
7305
7306 /* Check for any pending fork events (not reported or processed yet)
7307 in process PID and remove those fork child threads from the
7308 CONTEXT list as well. */
7309 remote_notif_get_pending_events (notif);
7310 for (auto &event : get_remote_state ()->stop_reply_queue)
7311 if (event->ws.kind () == TARGET_WAITKIND_FORKED
7312 || event->ws.kind () == TARGET_WAITKIND_VFORKED)
7313 context->remove_thread (event->ws.child_ptid ());
7314 else if (event->ws.kind () == TARGET_WAITKIND_THREAD_EXITED)
7315 context->remove_thread (event->ptid);
7316 }
7317
7318 /* Check whether any event pending in the vStopped queue would prevent a
7319 global or process wildcard vCont action. Set *may_global_wildcard to
7320 false if we can't do a global wildcard (vCont;c), and clear the event
7321 inferior's may_wildcard_vcont flag if we can't do a process-wide
7322 wildcard resume (vCont;c:pPID.-1). */
7323
7324 void
7325 remote_target::check_pending_events_prevent_wildcard_vcont
7326 (bool *may_global_wildcard)
7327 {
7328 struct notif_client *notif = &notif_client_stop;
7329
7330 remote_notif_get_pending_events (notif);
7331 for (auto &event : get_remote_state ()->stop_reply_queue)
7332 {
7333 if (event->ws.kind () == TARGET_WAITKIND_NO_RESUMED
7334 || event->ws.kind () == TARGET_WAITKIND_NO_HISTORY)
7335 continue;
7336
7337 if (event->ws.kind () == TARGET_WAITKIND_FORKED
7338 || event->ws.kind () == TARGET_WAITKIND_VFORKED)
7339 *may_global_wildcard = false;
7340
7341 /* This may be the first time we heard about this process.
7342 Regardless, we must not do a global wildcard resume, otherwise
7343 we'd resume this process too. */
7344 *may_global_wildcard = false;
7345 if (event->ptid != null_ptid)
7346 {
7347 inferior *inf = find_inferior_ptid (this, event->ptid);
7348 if (inf != NULL)
7349 get_remote_inferior (inf)->may_wildcard_vcont = false;
7350 }
7351 }
7352 }
7353
7354 /* Discard all pending stop replies of inferior INF. */
7355
7356 void
7357 remote_target::discard_pending_stop_replies (struct inferior *inf)
7358 {
7359 struct stop_reply *reply;
7360 struct remote_state *rs = get_remote_state ();
7361 struct remote_notif_state *rns = rs->notif_state;
7362
7363 /* This function can be notified when an inferior exists. When the
7364 target is not remote, the notification state is NULL. */
7365 if (rs->remote_desc == NULL)
7366 return;
7367
7368 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
7369
7370 /* Discard the in-flight notification. */
7371 if (reply != NULL && reply->ptid.pid () == inf->pid)
7372 {
7373 /* Leave the notification pending, since the server expects that
7374 we acknowledge it with vStopped. But clear its contents, so
7375 that later on when we acknowledge it, we also discard it. */
7376 remote_debug_printf
7377 ("discarding in-flight notification: ptid: %s, ws: %s\n",
7378 reply->ptid.to_string().c_str(),
7379 reply->ws.to_string ().c_str ());
7380 reply->ws.set_ignore ();
7381 }
7382
7383 /* Discard the stop replies we have already pulled with
7384 vStopped. */
7385 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7386 rs->stop_reply_queue.end (),
7387 [=] (const stop_reply_up &event)
7388 {
7389 return event->ptid.pid () == inf->pid;
7390 });
7391 for (auto it = iter; it != rs->stop_reply_queue.end (); ++it)
7392 remote_debug_printf
7393 ("discarding queued stop reply: ptid: %s, ws: %s\n",
7394 reply->ptid.to_string().c_str(),
7395 reply->ws.to_string ().c_str ());
7396 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7397 }
7398
7399 /* Discard the stop replies for RS in stop_reply_queue. */
7400
7401 void
7402 remote_target::discard_pending_stop_replies_in_queue ()
7403 {
7404 remote_state *rs = get_remote_state ();
7405
7406 /* Discard the stop replies we have already pulled with
7407 vStopped. */
7408 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7409 rs->stop_reply_queue.end (),
7410 [=] (const stop_reply_up &event)
7411 {
7412 return event->rs == rs;
7413 });
7414 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7415 }
7416
7417 /* Remove the first reply in 'stop_reply_queue' which matches
7418 PTID. */
7419
7420 struct stop_reply *
7421 remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
7422 {
7423 remote_state *rs = get_remote_state ();
7424
7425 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7426 rs->stop_reply_queue.end (),
7427 [=] (const stop_reply_up &event)
7428 {
7429 return event->ptid.matches (ptid);
7430 });
7431 struct stop_reply *result;
7432 if (iter == rs->stop_reply_queue.end ())
7433 result = nullptr;
7434 else
7435 {
7436 result = iter->release ();
7437 rs->stop_reply_queue.erase (iter);
7438 }
7439
7440 if (notif_debug)
7441 gdb_printf (gdb_stdlog,
7442 "notif: discard queued event: 'Stop' in %s\n",
7443 ptid.to_string ().c_str ());
7444
7445 return result;
7446 }
7447
7448 /* Look for a queued stop reply belonging to PTID. If one is found,
7449 remove it from the queue, and return it. Returns NULL if none is
7450 found. If there are still queued events left to process, tell the
7451 event loop to get back to target_wait soon. */
7452
7453 struct stop_reply *
7454 remote_target::queued_stop_reply (ptid_t ptid)
7455 {
7456 remote_state *rs = get_remote_state ();
7457 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
7458
7459 if (!rs->stop_reply_queue.empty () && target_can_async_p ())
7460 {
7461 /* There's still at least an event left. */
7462 mark_async_event_handler (rs->remote_async_inferior_event_token);
7463 }
7464
7465 return r;
7466 }
7467
7468 /* Push a fully parsed stop reply in the stop reply queue. Since we
7469 know that we now have at least one queued event left to pass to the
7470 core side, tell the event loop to get back to target_wait soon. */
7471
7472 void
7473 remote_target::push_stop_reply (struct stop_reply *new_event)
7474 {
7475 remote_state *rs = get_remote_state ();
7476 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
7477
7478 if (notif_debug)
7479 gdb_printf (gdb_stdlog,
7480 "notif: push 'Stop' %s to queue %d\n",
7481 new_event->ptid.to_string ().c_str (),
7482 int (rs->stop_reply_queue.size ()));
7483
7484 /* Mark the pending event queue only if async mode is currently enabled.
7485 If async mode is not currently enabled, then, if it later becomes
7486 enabled, and there are events in this queue, we will mark the event
7487 token at that point, see remote_target::async. */
7488 if (target_is_async_p ())
7489 mark_async_event_handler (rs->remote_async_inferior_event_token);
7490 }
7491
7492 /* Returns true if we have a stop reply for PTID. */
7493
7494 int
7495 remote_target::peek_stop_reply (ptid_t ptid)
7496 {
7497 remote_state *rs = get_remote_state ();
7498 for (auto &event : rs->stop_reply_queue)
7499 if (ptid == event->ptid
7500 && event->ws.kind () == TARGET_WAITKIND_STOPPED)
7501 return 1;
7502 return 0;
7503 }
7504
7505 /* Helper for remote_parse_stop_reply. Return nonzero if the substring
7506 starting with P and ending with PEND matches PREFIX. */
7507
7508 static int
7509 strprefix (const char *p, const char *pend, const char *prefix)
7510 {
7511 for ( ; p < pend; p++, prefix++)
7512 if (*p != *prefix)
7513 return 0;
7514 return *prefix == '\0';
7515 }
7516
7517 /* Parse the stop reply in BUF. Either the function succeeds, and the
7518 result is stored in EVENT, or throws an error. */
7519
7520 void
7521 remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
7522 {
7523 remote_arch_state *rsa = NULL;
7524 ULONGEST addr;
7525 const char *p;
7526 int skipregs = 0;
7527
7528 event->ptid = null_ptid;
7529 event->rs = get_remote_state ();
7530 event->ws.set_ignore ();
7531 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
7532 event->regcache.clear ();
7533 event->core = -1;
7534
7535 switch (buf[0])
7536 {
7537 case 'T': /* Status with PC, SP, FP, ... */
7538 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7539 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7540 ss = signal number
7541 n... = register number
7542 r... = register contents
7543 */
7544
7545 p = &buf[3]; /* after Txx */
7546 while (*p)
7547 {
7548 const char *p1;
7549 int fieldsize;
7550
7551 p1 = strchr (p, ':');
7552 if (p1 == NULL)
7553 error (_("Malformed packet(a) (missing colon): %s\n\
7554 Packet: '%s'\n"),
7555 p, buf);
7556 if (p == p1)
7557 error (_("Malformed packet(a) (missing register number): %s\n\
7558 Packet: '%s'\n"),
7559 p, buf);
7560
7561 /* Some "registers" are actually extended stop information.
7562 Note if you're adding a new entry here: GDB 7.9 and
7563 earlier assume that all register "numbers" that start
7564 with an hex digit are real register numbers. Make sure
7565 the server only sends such a packet if it knows the
7566 client understands it. */
7567
7568 if (strprefix (p, p1, "thread"))
7569 event->ptid = read_ptid (++p1, &p);
7570 else if (strprefix (p, p1, "syscall_entry"))
7571 {
7572 ULONGEST sysno;
7573
7574 p = unpack_varlen_hex (++p1, &sysno);
7575 event->ws.set_syscall_entry ((int) sysno);
7576 }
7577 else if (strprefix (p, p1, "syscall_return"))
7578 {
7579 ULONGEST sysno;
7580
7581 p = unpack_varlen_hex (++p1, &sysno);
7582 event->ws.set_syscall_return ((int) sysno);
7583 }
7584 else if (strprefix (p, p1, "watch")
7585 || strprefix (p, p1, "rwatch")
7586 || strprefix (p, p1, "awatch"))
7587 {
7588 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
7589 p = unpack_varlen_hex (++p1, &addr);
7590 event->watch_data_address = (CORE_ADDR) addr;
7591 }
7592 else if (strprefix (p, p1, "swbreak"))
7593 {
7594 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7595
7596 /* Make sure the stub doesn't forget to indicate support
7597 with qSupported. */
7598 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7599 error (_("Unexpected swbreak stop reason"));
7600
7601 /* The value part is documented as "must be empty",
7602 though we ignore it, in case we ever decide to make
7603 use of it in a backward compatible way. */
7604 p = strchrnul (p1 + 1, ';');
7605 }
7606 else if (strprefix (p, p1, "hwbreak"))
7607 {
7608 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7609
7610 /* Make sure the stub doesn't forget to indicate support
7611 with qSupported. */
7612 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7613 error (_("Unexpected hwbreak stop reason"));
7614
7615 /* See above. */
7616 p = strchrnul (p1 + 1, ';');
7617 }
7618 else if (strprefix (p, p1, "library"))
7619 {
7620 event->ws.set_loaded ();
7621 p = strchrnul (p1 + 1, ';');
7622 }
7623 else if (strprefix (p, p1, "replaylog"))
7624 {
7625 event->ws.set_no_history ();
7626 /* p1 will indicate "begin" or "end", but it makes
7627 no difference for now, so ignore it. */
7628 p = strchrnul (p1 + 1, ';');
7629 }
7630 else if (strprefix (p, p1, "core"))
7631 {
7632 ULONGEST c;
7633
7634 p = unpack_varlen_hex (++p1, &c);
7635 event->core = c;
7636 }
7637 else if (strprefix (p, p1, "fork"))
7638 event->ws.set_forked (read_ptid (++p1, &p));
7639 else if (strprefix (p, p1, "vfork"))
7640 event->ws.set_vforked (read_ptid (++p1, &p));
7641 else if (strprefix (p, p1, "vforkdone"))
7642 {
7643 event->ws.set_vfork_done ();
7644 p = strchrnul (p1 + 1, ';');
7645 }
7646 else if (strprefix (p, p1, "exec"))
7647 {
7648 ULONGEST ignored;
7649 int pathlen;
7650
7651 /* Determine the length of the execd pathname. */
7652 p = unpack_varlen_hex (++p1, &ignored);
7653 pathlen = (p - p1) / 2;
7654
7655 /* Save the pathname for event reporting and for
7656 the next run command. */
7657 gdb::unique_xmalloc_ptr<char> pathname
7658 ((char *) xmalloc (pathlen + 1));
7659 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
7660 pathname.get ()[pathlen] = '\0';
7661
7662 /* This is freed during event handling. */
7663 event->ws.set_execd (std::move (pathname));
7664
7665 /* Skip the registers included in this packet, since
7666 they may be for an architecture different from the
7667 one used by the original program. */
7668 skipregs = 1;
7669 }
7670 else if (strprefix (p, p1, "create"))
7671 {
7672 event->ws.set_thread_created ();
7673 p = strchrnul (p1 + 1, ';');
7674 }
7675 else
7676 {
7677 ULONGEST pnum;
7678 const char *p_temp;
7679
7680 if (skipregs)
7681 {
7682 p = strchrnul (p1 + 1, ';');
7683 p++;
7684 continue;
7685 }
7686
7687 /* Maybe a real ``P'' register number. */
7688 p_temp = unpack_varlen_hex (p, &pnum);
7689 /* If the first invalid character is the colon, we got a
7690 register number. Otherwise, it's an unknown stop
7691 reason. */
7692 if (p_temp == p1)
7693 {
7694 /* If we haven't parsed the event's thread yet, find
7695 it now, in order to find the architecture of the
7696 reported expedited registers. */
7697 if (event->ptid == null_ptid)
7698 {
7699 /* If there is no thread-id information then leave
7700 the event->ptid as null_ptid. Later in
7701 process_stop_reply we will pick a suitable
7702 thread. */
7703 const char *thr = strstr (p1 + 1, ";thread:");
7704 if (thr != NULL)
7705 event->ptid = read_ptid (thr + strlen (";thread:"),
7706 NULL);
7707 }
7708
7709 if (rsa == NULL)
7710 {
7711 inferior *inf
7712 = (event->ptid == null_ptid
7713 ? NULL
7714 : find_inferior_ptid (this, event->ptid));
7715 /* If this is the first time we learn anything
7716 about this process, skip the registers
7717 included in this packet, since we don't yet
7718 know which architecture to use to parse them.
7719 We'll determine the architecture later when
7720 we process the stop reply and retrieve the
7721 target description, via
7722 remote_notice_new_inferior ->
7723 post_create_inferior. */
7724 if (inf == NULL)
7725 {
7726 p = strchrnul (p1 + 1, ';');
7727 p++;
7728 continue;
7729 }
7730
7731 event->arch = inf->gdbarch;
7732 rsa = event->rs->get_remote_arch_state (event->arch);
7733 }
7734
7735 packet_reg *reg
7736 = packet_reg_from_pnum (event->arch, rsa, pnum);
7737 cached_reg_t cached_reg;
7738
7739 if (reg == NULL)
7740 error (_("Remote sent bad register number %s: %s\n\
7741 Packet: '%s'\n"),
7742 hex_string (pnum), p, buf);
7743
7744 cached_reg.num = reg->regnum;
7745 cached_reg.data = (gdb_byte *)
7746 xmalloc (register_size (event->arch, reg->regnum));
7747
7748 p = p1 + 1;
7749 fieldsize = hex2bin (p, cached_reg.data,
7750 register_size (event->arch, reg->regnum));
7751 p += 2 * fieldsize;
7752 if (fieldsize < register_size (event->arch, reg->regnum))
7753 warning (_("Remote reply is too short: %s"), buf);
7754
7755 event->regcache.push_back (cached_reg);
7756 }
7757 else
7758 {
7759 /* Not a number. Silently skip unknown optional
7760 info. */
7761 p = strchrnul (p1 + 1, ';');
7762 }
7763 }
7764
7765 if (*p != ';')
7766 error (_("Remote register badly formatted: %s\nhere: %s"),
7767 buf, p);
7768 ++p;
7769 }
7770
7771 if (event->ws.kind () != TARGET_WAITKIND_IGNORE)
7772 break;
7773
7774 /* fall through */
7775 case 'S': /* Old style status, just signal only. */
7776 {
7777 int sig;
7778
7779 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7780 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7781 event->ws.set_stopped ((enum gdb_signal) sig);
7782 else
7783 event->ws.set_stopped (GDB_SIGNAL_UNKNOWN);
7784 }
7785 break;
7786 case 'w': /* Thread exited. */
7787 {
7788 ULONGEST value;
7789
7790 p = unpack_varlen_hex (&buf[1], &value);
7791 event->ws.set_thread_exited (value);
7792 if (*p != ';')
7793 error (_("stop reply packet badly formatted: %s"), buf);
7794 event->ptid = read_ptid (++p, NULL);
7795 break;
7796 }
7797 case 'W': /* Target exited. */
7798 case 'X':
7799 {
7800 ULONGEST value;
7801
7802 /* GDB used to accept only 2 hex chars here. Stubs should
7803 only send more if they detect GDB supports multi-process
7804 support. */
7805 p = unpack_varlen_hex (&buf[1], &value);
7806
7807 if (buf[0] == 'W')
7808 {
7809 /* The remote process exited. */
7810 event->ws.set_exited (value);
7811 }
7812 else
7813 {
7814 /* The remote process exited with a signal. */
7815 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7816 event->ws.set_signalled ((enum gdb_signal) value);
7817 else
7818 event->ws.set_signalled (GDB_SIGNAL_UNKNOWN);
7819 }
7820
7821 /* If no process is specified, return null_ptid, and let the
7822 caller figure out the right process to use. */
7823 int pid = 0;
7824 if (*p == '\0')
7825 ;
7826 else if (*p == ';')
7827 {
7828 p++;
7829
7830 if (*p == '\0')
7831 ;
7832 else if (startswith (p, "process:"))
7833 {
7834 ULONGEST upid;
7835
7836 p += sizeof ("process:") - 1;
7837 unpack_varlen_hex (p, &upid);
7838 pid = upid;
7839 }
7840 else
7841 error (_("unknown stop reply packet: %s"), buf);
7842 }
7843 else
7844 error (_("unknown stop reply packet: %s"), buf);
7845 event->ptid = ptid_t (pid);
7846 }
7847 break;
7848 case 'N':
7849 event->ws.set_no_resumed ();
7850 event->ptid = minus_one_ptid;
7851 break;
7852 }
7853 }
7854
7855 /* When the stub wants to tell GDB about a new notification reply, it
7856 sends a notification (%Stop, for example). Those can come it at
7857 any time, hence, we have to make sure that any pending
7858 putpkt/getpkt sequence we're making is finished, before querying
7859 the stub for more events with the corresponding ack command
7860 (vStopped, for example). E.g., if we started a vStopped sequence
7861 immediately upon receiving the notification, something like this
7862 could happen:
7863
7864 1.1) --> Hg 1
7865 1.2) <-- OK
7866 1.3) --> g
7867 1.4) <-- %Stop
7868 1.5) --> vStopped
7869 1.6) <-- (registers reply to step #1.3)
7870
7871 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7872 query.
7873
7874 To solve this, whenever we parse a %Stop notification successfully,
7875 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7876 doing whatever we were doing:
7877
7878 2.1) --> Hg 1
7879 2.2) <-- OK
7880 2.3) --> g
7881 2.4) <-- %Stop
7882 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7883 2.5) <-- (registers reply to step #2.3)
7884
7885 Eventually after step #2.5, we return to the event loop, which
7886 notices there's an event on the
7887 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7888 associated callback --- the function below. At this point, we're
7889 always safe to start a vStopped sequence. :
7890
7891 2.6) --> vStopped
7892 2.7) <-- T05 thread:2
7893 2.8) --> vStopped
7894 2.9) --> OK
7895 */
7896
7897 void
7898 remote_target::remote_notif_get_pending_events (notif_client *nc)
7899 {
7900 struct remote_state *rs = get_remote_state ();
7901
7902 if (rs->notif_state->pending_event[nc->id] != NULL)
7903 {
7904 if (notif_debug)
7905 gdb_printf (gdb_stdlog,
7906 "notif: process: '%s' ack pending event\n",
7907 nc->name);
7908
7909 /* acknowledge */
7910 nc->ack (this, nc, rs->buf.data (),
7911 rs->notif_state->pending_event[nc->id]);
7912 rs->notif_state->pending_event[nc->id] = NULL;
7913
7914 while (1)
7915 {
7916 getpkt (&rs->buf, 0);
7917 if (strcmp (rs->buf.data (), "OK") == 0)
7918 break;
7919 else
7920 remote_notif_ack (this, nc, rs->buf.data ());
7921 }
7922 }
7923 else
7924 {
7925 if (notif_debug)
7926 gdb_printf (gdb_stdlog,
7927 "notif: process: '%s' no pending reply\n",
7928 nc->name);
7929 }
7930 }
7931
7932 /* Wrapper around remote_target::remote_notif_get_pending_events to
7933 avoid having to export the whole remote_target class. */
7934
7935 void
7936 remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7937 {
7938 remote->remote_notif_get_pending_events (nc);
7939 }
7940
7941 /* Called from process_stop_reply when the stop packet we are responding
7942 to didn't include a process-id or thread-id. STATUS is the stop event
7943 we are responding to.
7944
7945 It is the task of this function to select a suitable thread (or process)
7946 and return its ptid, this is the thread (or process) we will assume the
7947 stop event came from.
7948
7949 In some cases there isn't really any choice about which thread (or
7950 process) is selected, a basic remote with a single process containing a
7951 single thread might choose not to send any process-id or thread-id in
7952 its stop packets, this function will select and return the one and only
7953 thread.
7954
7955 However, if a target supports multiple threads (or processes) and still
7956 doesn't include a thread-id (or process-id) in its stop packet then
7957 first, this is a badly behaving target, and second, we're going to have
7958 to select a thread (or process) at random and use that. This function
7959 will print a warning to the user if it detects that there is the
7960 possibility that GDB is guessing which thread (or process) to
7961 report.
7962
7963 Note that this is called before GDB fetches the updated thread list from the
7964 target. So it's possible for the stop reply to be ambiguous and for GDB to
7965 not realize it. For example, if there's initially one thread, the target
7966 spawns a second thread, and then sends a stop reply without an id that
7967 concerns the first thread. GDB will assume the stop reply is about the
7968 first thread - the only thread it knows about - without printing a warning.
7969 Anyway, if the remote meant for the stop reply to be about the second thread,
7970 then it would be really broken, because GDB doesn't know about that thread
7971 yet. */
7972
7973 ptid_t
7974 remote_target::select_thread_for_ambiguous_stop_reply
7975 (const target_waitstatus &status)
7976 {
7977 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
7978
7979 /* Some stop events apply to all threads in an inferior, while others
7980 only apply to a single thread. */
7981 bool process_wide_stop
7982 = (status.kind () == TARGET_WAITKIND_EXITED
7983 || status.kind () == TARGET_WAITKIND_SIGNALLED);
7984
7985 remote_debug_printf ("process_wide_stop = %d", process_wide_stop);
7986
7987 thread_info *first_resumed_thread = nullptr;
7988 bool ambiguous = false;
7989
7990 /* Consider all non-exited threads of the target, find the first resumed
7991 one. */
7992 for (thread_info *thr : all_non_exited_threads (this))
7993 {
7994 remote_thread_info *remote_thr = get_remote_thread_info (thr);
7995
7996 if (remote_thr->get_resume_state () != resume_state::RESUMED)
7997 continue;
7998
7999 if (first_resumed_thread == nullptr)
8000 first_resumed_thread = thr;
8001 else if (!process_wide_stop
8002 || first_resumed_thread->ptid.pid () != thr->ptid.pid ())
8003 ambiguous = true;
8004 }
8005
8006 gdb_assert (first_resumed_thread != nullptr);
8007
8008 remote_debug_printf ("first resumed thread is %s",
8009 pid_to_str (first_resumed_thread->ptid).c_str ());
8010 remote_debug_printf ("is this guess ambiguous? = %d", ambiguous);
8011
8012 /* Warn if the remote target is sending ambiguous stop replies. */
8013 if (ambiguous)
8014 {
8015 static bool warned = false;
8016
8017 if (!warned)
8018 {
8019 /* If you are seeing this warning then the remote target has
8020 stopped without specifying a thread-id, but the target
8021 does have multiple threads (or inferiors), and so GDB is
8022 having to guess which thread stopped.
8023
8024 Examples of what might cause this are the target sending
8025 and 'S' stop packet, or a 'T' stop packet and not
8026 including a thread-id.
8027
8028 Additionally, the target might send a 'W' or 'X packet
8029 without including a process-id, when the target has
8030 multiple running inferiors. */
8031 if (process_wide_stop)
8032 warning (_("multi-inferior target stopped without "
8033 "sending a process-id, using first "
8034 "non-exited inferior"));
8035 else
8036 warning (_("multi-threaded target stopped without "
8037 "sending a thread-id, using first "
8038 "non-exited thread"));
8039 warned = true;
8040 }
8041 }
8042
8043 /* If this is a stop for all threads then don't use a particular threads
8044 ptid, instead create a new ptid where only the pid field is set. */
8045 if (process_wide_stop)
8046 return ptid_t (first_resumed_thread->ptid.pid ());
8047 else
8048 return first_resumed_thread->ptid;
8049 }
8050
8051 /* Called when it is decided that STOP_REPLY holds the info of the
8052 event that is to be returned to the core. This function always
8053 destroys STOP_REPLY. */
8054
8055 ptid_t
8056 remote_target::process_stop_reply (struct stop_reply *stop_reply,
8057 struct target_waitstatus *status)
8058 {
8059 *status = stop_reply->ws;
8060 ptid_t ptid = stop_reply->ptid;
8061
8062 /* If no thread/process was reported by the stub then select a suitable
8063 thread/process. */
8064 if (ptid == null_ptid)
8065 ptid = select_thread_for_ambiguous_stop_reply (*status);
8066 gdb_assert (ptid != null_ptid);
8067
8068 if (status->kind () != TARGET_WAITKIND_EXITED
8069 && status->kind () != TARGET_WAITKIND_SIGNALLED
8070 && status->kind () != TARGET_WAITKIND_NO_RESUMED)
8071 {
8072 /* Expedited registers. */
8073 if (!stop_reply->regcache.empty ())
8074 {
8075 struct regcache *regcache
8076 = get_thread_arch_regcache (this, ptid, stop_reply->arch);
8077
8078 for (cached_reg_t &reg : stop_reply->regcache)
8079 {
8080 regcache->raw_supply (reg.num, reg.data);
8081 xfree (reg.data);
8082 }
8083
8084 stop_reply->regcache.clear ();
8085 }
8086
8087 remote_notice_new_inferior (ptid, false);
8088 remote_thread_info *remote_thr = get_remote_thread_info (this, ptid);
8089 remote_thr->core = stop_reply->core;
8090 remote_thr->stop_reason = stop_reply->stop_reason;
8091 remote_thr->watch_data_address = stop_reply->watch_data_address;
8092
8093 if (target_is_non_stop_p ())
8094 {
8095 /* If the target works in non-stop mode, a stop-reply indicates that
8096 only this thread stopped. */
8097 remote_thr->set_not_resumed ();
8098 }
8099 else
8100 {
8101 /* If the target works in all-stop mode, a stop-reply indicates that
8102 all the target's threads stopped. */
8103 for (thread_info *tp : all_non_exited_threads (this))
8104 get_remote_thread_info (tp)->set_not_resumed ();
8105 }
8106 }
8107
8108 delete stop_reply;
8109 return ptid;
8110 }
8111
8112 /* The non-stop mode version of target_wait. */
8113
8114 ptid_t
8115 remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status,
8116 target_wait_flags options)
8117 {
8118 struct remote_state *rs = get_remote_state ();
8119 struct stop_reply *stop_reply;
8120 int ret;
8121 int is_notif = 0;
8122
8123 /* If in non-stop mode, get out of getpkt even if a
8124 notification is received. */
8125
8126 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
8127 while (1)
8128 {
8129 if (ret != -1 && !is_notif)
8130 switch (rs->buf[0])
8131 {
8132 case 'E': /* Error of some sort. */
8133 /* We're out of sync with the target now. Did it continue
8134 or not? We can't tell which thread it was in non-stop,
8135 so just ignore this. */
8136 warning (_("Remote failure reply: %s"), rs->buf.data ());
8137 break;
8138 case 'O': /* Console output. */
8139 remote_console_output (&rs->buf[1]);
8140 break;
8141 default:
8142 warning (_("Invalid remote reply: %s"), rs->buf.data ());
8143 break;
8144 }
8145
8146 /* Acknowledge a pending stop reply that may have arrived in the
8147 mean time. */
8148 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
8149 remote_notif_get_pending_events (&notif_client_stop);
8150
8151 /* If indeed we noticed a stop reply, we're done. */
8152 stop_reply = queued_stop_reply (ptid);
8153 if (stop_reply != NULL)
8154 return process_stop_reply (stop_reply, status);
8155
8156 /* Still no event. If we're just polling for an event, then
8157 return to the event loop. */
8158 if (options & TARGET_WNOHANG)
8159 {
8160 status->set_ignore ();
8161 return minus_one_ptid;
8162 }
8163
8164 /* Otherwise do a blocking wait. */
8165 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
8166 }
8167 }
8168
8169 /* Return the first resumed thread. */
8170
8171 static ptid_t
8172 first_remote_resumed_thread (remote_target *target)
8173 {
8174 for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid))
8175 if (tp->resumed ())
8176 return tp->ptid;
8177 return null_ptid;
8178 }
8179
8180 /* Wait until the remote machine stops, then return, storing status in
8181 STATUS just as `wait' would. */
8182
8183 ptid_t
8184 remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
8185 target_wait_flags options)
8186 {
8187 struct remote_state *rs = get_remote_state ();
8188 ptid_t event_ptid = null_ptid;
8189 char *buf;
8190 struct stop_reply *stop_reply;
8191
8192 again:
8193
8194 status->set_ignore ();
8195
8196 stop_reply = queued_stop_reply (ptid);
8197 if (stop_reply != NULL)
8198 {
8199 /* None of the paths that push a stop reply onto the queue should
8200 have set the waiting_for_stop_reply flag. */
8201 gdb_assert (!rs->waiting_for_stop_reply);
8202 event_ptid = process_stop_reply (stop_reply, status);
8203 }
8204 else
8205 {
8206 int forever = ((options & TARGET_WNOHANG) == 0
8207 && rs->wait_forever_enabled_p);
8208
8209 if (!rs->waiting_for_stop_reply)
8210 {
8211 status->set_no_resumed ();
8212 return minus_one_ptid;
8213 }
8214
8215 /* FIXME: cagney/1999-09-27: If we're in async mode we should
8216 _never_ wait for ever -> test on target_is_async_p().
8217 However, before we do that we need to ensure that the caller
8218 knows how to take the target into/out of async mode. */
8219 int is_notif;
8220 int ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
8221
8222 /* GDB gets a notification. Return to core as this event is
8223 not interesting. */
8224 if (ret != -1 && is_notif)
8225 return minus_one_ptid;
8226
8227 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
8228 return minus_one_ptid;
8229
8230 buf = rs->buf.data ();
8231
8232 /* Assume that the target has acknowledged Ctrl-C unless we receive
8233 an 'F' or 'O' packet. */
8234 if (buf[0] != 'F' && buf[0] != 'O')
8235 rs->ctrlc_pending_p = 0;
8236
8237 switch (buf[0])
8238 {
8239 case 'E': /* Error of some sort. */
8240 /* We're out of sync with the target now. Did it continue or
8241 not? Not is more likely, so report a stop. */
8242 rs->waiting_for_stop_reply = 0;
8243
8244 warning (_("Remote failure reply: %s"), buf);
8245 status->set_stopped (GDB_SIGNAL_0);
8246 break;
8247 case 'F': /* File-I/O request. */
8248 /* GDB may access the inferior memory while handling the File-I/O
8249 request, but we don't want GDB accessing memory while waiting
8250 for a stop reply. See the comments in putpkt_binary. Set
8251 waiting_for_stop_reply to 0 temporarily. */
8252 rs->waiting_for_stop_reply = 0;
8253 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
8254 rs->ctrlc_pending_p = 0;
8255 /* GDB handled the File-I/O request, and the target is running
8256 again. Keep waiting for events. */
8257 rs->waiting_for_stop_reply = 1;
8258 break;
8259 case 'N': case 'T': case 'S': case 'X': case 'W':
8260 {
8261 /* There is a stop reply to handle. */
8262 rs->waiting_for_stop_reply = 0;
8263
8264 stop_reply
8265 = (struct stop_reply *) remote_notif_parse (this,
8266 &notif_client_stop,
8267 rs->buf.data ());
8268
8269 event_ptid = process_stop_reply (stop_reply, status);
8270 break;
8271 }
8272 case 'O': /* Console output. */
8273 remote_console_output (buf + 1);
8274 break;
8275 case '\0':
8276 if (rs->last_sent_signal != GDB_SIGNAL_0)
8277 {
8278 /* Zero length reply means that we tried 'S' or 'C' and the
8279 remote system doesn't support it. */
8280 target_terminal::ours_for_output ();
8281 gdb_printf
8282 ("Can't send signals to this remote system. %s not sent.\n",
8283 gdb_signal_to_name (rs->last_sent_signal));
8284 rs->last_sent_signal = GDB_SIGNAL_0;
8285 target_terminal::inferior ();
8286
8287 strcpy (buf, rs->last_sent_step ? "s" : "c");
8288 putpkt (buf);
8289 break;
8290 }
8291 /* fallthrough */
8292 default:
8293 warning (_("Invalid remote reply: %s"), buf);
8294 break;
8295 }
8296 }
8297
8298 if (status->kind () == TARGET_WAITKIND_NO_RESUMED)
8299 return minus_one_ptid;
8300 else if (status->kind () == TARGET_WAITKIND_IGNORE)
8301 {
8302 /* Nothing interesting happened. If we're doing a non-blocking
8303 poll, we're done. Otherwise, go back to waiting. */
8304 if (options & TARGET_WNOHANG)
8305 return minus_one_ptid;
8306 else
8307 goto again;
8308 }
8309 else if (status->kind () != TARGET_WAITKIND_EXITED
8310 && status->kind () != TARGET_WAITKIND_SIGNALLED)
8311 {
8312 if (event_ptid != null_ptid)
8313 record_currthread (rs, event_ptid);
8314 else
8315 event_ptid = first_remote_resumed_thread (this);
8316 }
8317 else
8318 {
8319 /* A process exit. Invalidate our notion of current thread. */
8320 record_currthread (rs, minus_one_ptid);
8321 /* It's possible that the packet did not include a pid. */
8322 if (event_ptid == null_ptid)
8323 event_ptid = first_remote_resumed_thread (this);
8324 /* EVENT_PTID could still be NULL_PTID. Double-check. */
8325 if (event_ptid == null_ptid)
8326 event_ptid = magic_null_ptid;
8327 }
8328
8329 return event_ptid;
8330 }
8331
8332 /* Wait until the remote machine stops, then return, storing status in
8333 STATUS just as `wait' would. */
8334
8335 ptid_t
8336 remote_target::wait (ptid_t ptid, struct target_waitstatus *status,
8337 target_wait_flags options)
8338 {
8339 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
8340
8341 remote_state *rs = get_remote_state ();
8342
8343 /* Start by clearing the flag that asks for our wait method to be called,
8344 we'll mark it again at the end if needed. If the target is not in
8345 async mode then the async token should not be marked. */
8346 if (target_is_async_p ())
8347 clear_async_event_handler (rs->remote_async_inferior_event_token);
8348 else
8349 gdb_assert (!async_event_handler_marked
8350 (rs->remote_async_inferior_event_token));
8351
8352 ptid_t event_ptid;
8353
8354 if (target_is_non_stop_p ())
8355 event_ptid = wait_ns (ptid, status, options);
8356 else
8357 event_ptid = wait_as (ptid, status, options);
8358
8359 if (target_is_async_p ())
8360 {
8361 /* If there are events left in the queue, or unacknowledged
8362 notifications, then tell the event loop to call us again. */
8363 if (!rs->stop_reply_queue.empty ()
8364 || rs->notif_state->pending_event[notif_client_stop.id] != nullptr)
8365 mark_async_event_handler (rs->remote_async_inferior_event_token);
8366 }
8367
8368 return event_ptid;
8369 }
8370
8371 /* Fetch a single register using a 'p' packet. */
8372
8373 int
8374 remote_target::fetch_register_using_p (struct regcache *regcache,
8375 packet_reg *reg)
8376 {
8377 struct gdbarch *gdbarch = regcache->arch ();
8378 struct remote_state *rs = get_remote_state ();
8379 char *buf, *p;
8380 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8381 int i;
8382
8383 if (packet_support (PACKET_p) == PACKET_DISABLE)
8384 return 0;
8385
8386 if (reg->pnum == -1)
8387 return 0;
8388
8389 p = rs->buf.data ();
8390 *p++ = 'p';
8391 p += hexnumstr (p, reg->pnum);
8392 *p++ = '\0';
8393 putpkt (rs->buf);
8394 getpkt (&rs->buf, 0);
8395
8396 buf = rs->buf.data ();
8397
8398 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
8399 {
8400 case PACKET_OK:
8401 break;
8402 case PACKET_UNKNOWN:
8403 return 0;
8404 case PACKET_ERROR:
8405 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
8406 gdbarch_register_name (regcache->arch (),
8407 reg->regnum),
8408 buf);
8409 }
8410
8411 /* If this register is unfetchable, tell the regcache. */
8412 if (buf[0] == 'x')
8413 {
8414 regcache->raw_supply (reg->regnum, NULL);
8415 return 1;
8416 }
8417
8418 /* Otherwise, parse and supply the value. */
8419 p = buf;
8420 i = 0;
8421 while (p[0] != 0)
8422 {
8423 if (p[1] == 0)
8424 error (_("fetch_register_using_p: early buf termination"));
8425
8426 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
8427 p += 2;
8428 }
8429 regcache->raw_supply (reg->regnum, regp);
8430 return 1;
8431 }
8432
8433 /* Fetch the registers included in the target's 'g' packet. */
8434
8435 int
8436 remote_target::send_g_packet ()
8437 {
8438 struct remote_state *rs = get_remote_state ();
8439 int buf_len;
8440
8441 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
8442 putpkt (rs->buf);
8443 getpkt (&rs->buf, 0);
8444 if (packet_check_result (rs->buf) == PACKET_ERROR)
8445 error (_("Could not read registers; remote failure reply '%s'"),
8446 rs->buf.data ());
8447
8448 /* We can get out of synch in various cases. If the first character
8449 in the buffer is not a hex character, assume that has happened
8450 and try to fetch another packet to read. */
8451 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
8452 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
8453 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
8454 && rs->buf[0] != 'x') /* New: unavailable register value. */
8455 {
8456 remote_debug_printf ("Bad register packet; fetching a new packet");
8457 getpkt (&rs->buf, 0);
8458 }
8459
8460 buf_len = strlen (rs->buf.data ());
8461
8462 /* Sanity check the received packet. */
8463 if (buf_len % 2 != 0)
8464 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
8465
8466 return buf_len / 2;
8467 }
8468
8469 void
8470 remote_target::process_g_packet (struct regcache *regcache)
8471 {
8472 struct gdbarch *gdbarch = regcache->arch ();
8473 struct remote_state *rs = get_remote_state ();
8474 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8475 int i, buf_len;
8476 char *p;
8477 char *regs;
8478
8479 buf_len = strlen (rs->buf.data ());
8480
8481 /* Further sanity checks, with knowledge of the architecture. */
8482 if (buf_len > 2 * rsa->sizeof_g_packet)
8483 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8484 "bytes): %s"),
8485 rsa->sizeof_g_packet, buf_len / 2,
8486 rs->buf.data ());
8487
8488 /* Save the size of the packet sent to us by the target. It is used
8489 as a heuristic when determining the max size of packets that the
8490 target can safely receive. */
8491 if (rsa->actual_register_packet_size == 0)
8492 rsa->actual_register_packet_size = buf_len;
8493
8494 /* If this is smaller than we guessed the 'g' packet would be,
8495 update our records. A 'g' reply that doesn't include a register's
8496 value implies either that the register is not available, or that
8497 the 'p' packet must be used. */
8498 if (buf_len < 2 * rsa->sizeof_g_packet)
8499 {
8500 long sizeof_g_packet = buf_len / 2;
8501
8502 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8503 {
8504 long offset = rsa->regs[i].offset;
8505 long reg_size = register_size (gdbarch, i);
8506
8507 if (rsa->regs[i].pnum == -1)
8508 continue;
8509
8510 if (offset >= sizeof_g_packet)
8511 rsa->regs[i].in_g_packet = 0;
8512 else if (offset + reg_size > sizeof_g_packet)
8513 error (_("Truncated register %d in remote 'g' packet"), i);
8514 else
8515 rsa->regs[i].in_g_packet = 1;
8516 }
8517
8518 /* Looks valid enough, we can assume this is the correct length
8519 for a 'g' packet. It's important not to adjust
8520 rsa->sizeof_g_packet if we have truncated registers otherwise
8521 this "if" won't be run the next time the method is called
8522 with a packet of the same size and one of the internal errors
8523 below will trigger instead. */
8524 rsa->sizeof_g_packet = sizeof_g_packet;
8525 }
8526
8527 regs = (char *) alloca (rsa->sizeof_g_packet);
8528
8529 /* Unimplemented registers read as all bits zero. */
8530 memset (regs, 0, rsa->sizeof_g_packet);
8531
8532 /* Reply describes registers byte by byte, each byte encoded as two
8533 hex characters. Suck them all up, then supply them to the
8534 register cacheing/storage mechanism. */
8535
8536 p = rs->buf.data ();
8537 for (i = 0; i < rsa->sizeof_g_packet; i++)
8538 {
8539 if (p[0] == 0 || p[1] == 0)
8540 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8541 internal_error (__FILE__, __LINE__,
8542 _("unexpected end of 'g' packet reply"));
8543
8544 if (p[0] == 'x' && p[1] == 'x')
8545 regs[i] = 0; /* 'x' */
8546 else
8547 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8548 p += 2;
8549 }
8550
8551 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8552 {
8553 struct packet_reg *r = &rsa->regs[i];
8554 long reg_size = register_size (gdbarch, i);
8555
8556 if (r->in_g_packet)
8557 {
8558 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
8559 /* This shouldn't happen - we adjusted in_g_packet above. */
8560 internal_error (__FILE__, __LINE__,
8561 _("unexpected end of 'g' packet reply"));
8562 else if (rs->buf[r->offset * 2] == 'x')
8563 {
8564 gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
8565 /* The register isn't available, mark it as such (at
8566 the same time setting the value to zero). */
8567 regcache->raw_supply (r->regnum, NULL);
8568 }
8569 else
8570 regcache->raw_supply (r->regnum, regs + r->offset);
8571 }
8572 }
8573 }
8574
8575 void
8576 remote_target::fetch_registers_using_g (struct regcache *regcache)
8577 {
8578 send_g_packet ();
8579 process_g_packet (regcache);
8580 }
8581
8582 /* Make the remote selected traceframe match GDB's selected
8583 traceframe. */
8584
8585 void
8586 remote_target::set_remote_traceframe ()
8587 {
8588 int newnum;
8589 struct remote_state *rs = get_remote_state ();
8590
8591 if (rs->remote_traceframe_number == get_traceframe_number ())
8592 return;
8593
8594 /* Avoid recursion, remote_trace_find calls us again. */
8595 rs->remote_traceframe_number = get_traceframe_number ();
8596
8597 newnum = target_trace_find (tfind_number,
8598 get_traceframe_number (), 0, 0, NULL);
8599
8600 /* Should not happen. If it does, all bets are off. */
8601 if (newnum != get_traceframe_number ())
8602 warning (_("could not set remote traceframe"));
8603 }
8604
8605 void
8606 remote_target::fetch_registers (struct regcache *regcache, int regnum)
8607 {
8608 struct gdbarch *gdbarch = regcache->arch ();
8609 struct remote_state *rs = get_remote_state ();
8610 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8611 int i;
8612
8613 set_remote_traceframe ();
8614 set_general_thread (regcache->ptid ());
8615
8616 if (regnum >= 0)
8617 {
8618 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8619
8620 gdb_assert (reg != NULL);
8621
8622 /* If this register might be in the 'g' packet, try that first -
8623 we are likely to read more than one register. If this is the
8624 first 'g' packet, we might be overly optimistic about its
8625 contents, so fall back to 'p'. */
8626 if (reg->in_g_packet)
8627 {
8628 fetch_registers_using_g (regcache);
8629 if (reg->in_g_packet)
8630 return;
8631 }
8632
8633 if (fetch_register_using_p (regcache, reg))
8634 return;
8635
8636 /* This register is not available. */
8637 regcache->raw_supply (reg->regnum, NULL);
8638
8639 return;
8640 }
8641
8642 fetch_registers_using_g (regcache);
8643
8644 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8645 if (!rsa->regs[i].in_g_packet)
8646 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
8647 {
8648 /* This register is not available. */
8649 regcache->raw_supply (i, NULL);
8650 }
8651 }
8652
8653 /* Prepare to store registers. Since we may send them all (using a
8654 'G' request), we have to read out the ones we don't want to change
8655 first. */
8656
8657 void
8658 remote_target::prepare_to_store (struct regcache *regcache)
8659 {
8660 struct remote_state *rs = get_remote_state ();
8661 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8662 int i;
8663
8664 /* Make sure the entire registers array is valid. */
8665 switch (packet_support (PACKET_P))
8666 {
8667 case PACKET_DISABLE:
8668 case PACKET_SUPPORT_UNKNOWN:
8669 /* Make sure all the necessary registers are cached. */
8670 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8671 if (rsa->regs[i].in_g_packet)
8672 regcache->raw_update (rsa->regs[i].regnum);
8673 break;
8674 case PACKET_ENABLE:
8675 break;
8676 }
8677 }
8678
8679 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
8680 packet was not recognized. */
8681
8682 int
8683 remote_target::store_register_using_P (const struct regcache *regcache,
8684 packet_reg *reg)
8685 {
8686 struct gdbarch *gdbarch = regcache->arch ();
8687 struct remote_state *rs = get_remote_state ();
8688 /* Try storing a single register. */
8689 char *buf = rs->buf.data ();
8690 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8691 char *p;
8692
8693 if (packet_support (PACKET_P) == PACKET_DISABLE)
8694 return 0;
8695
8696 if (reg->pnum == -1)
8697 return 0;
8698
8699 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
8700 p = buf + strlen (buf);
8701 regcache->raw_collect (reg->regnum, regp);
8702 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
8703 putpkt (rs->buf);
8704 getpkt (&rs->buf, 0);
8705
8706 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8707 {
8708 case PACKET_OK:
8709 return 1;
8710 case PACKET_ERROR:
8711 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8712 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
8713 case PACKET_UNKNOWN:
8714 return 0;
8715 default:
8716 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8717 }
8718 }
8719
8720 /* Store register REGNUM, or all registers if REGNUM == -1, from the
8721 contents of the register cache buffer. FIXME: ignores errors. */
8722
8723 void
8724 remote_target::store_registers_using_G (const struct regcache *regcache)
8725 {
8726 struct remote_state *rs = get_remote_state ();
8727 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8728 gdb_byte *regs;
8729 char *p;
8730
8731 /* Extract all the registers in the regcache copying them into a
8732 local buffer. */
8733 {
8734 int i;
8735
8736 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
8737 memset (regs, 0, rsa->sizeof_g_packet);
8738 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8739 {
8740 struct packet_reg *r = &rsa->regs[i];
8741
8742 if (r->in_g_packet)
8743 regcache->raw_collect (r->regnum, regs + r->offset);
8744 }
8745 }
8746
8747 /* Command describes registers byte by byte,
8748 each byte encoded as two hex characters. */
8749 p = rs->buf.data ();
8750 *p++ = 'G';
8751 bin2hex (regs, p, rsa->sizeof_g_packet);
8752 putpkt (rs->buf);
8753 getpkt (&rs->buf, 0);
8754 if (packet_check_result (rs->buf) == PACKET_ERROR)
8755 error (_("Could not write registers; remote failure reply '%s'"),
8756 rs->buf.data ());
8757 }
8758
8759 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8760 of the register cache buffer. FIXME: ignores errors. */
8761
8762 void
8763 remote_target::store_registers (struct regcache *regcache, int regnum)
8764 {
8765 struct gdbarch *gdbarch = regcache->arch ();
8766 struct remote_state *rs = get_remote_state ();
8767 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8768 int i;
8769
8770 set_remote_traceframe ();
8771 set_general_thread (regcache->ptid ());
8772
8773 if (regnum >= 0)
8774 {
8775 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8776
8777 gdb_assert (reg != NULL);
8778
8779 /* Always prefer to store registers using the 'P' packet if
8780 possible; we often change only a small number of registers.
8781 Sometimes we change a larger number; we'd need help from a
8782 higher layer to know to use 'G'. */
8783 if (store_register_using_P (regcache, reg))
8784 return;
8785
8786 /* For now, don't complain if we have no way to write the
8787 register. GDB loses track of unavailable registers too
8788 easily. Some day, this may be an error. We don't have
8789 any way to read the register, either... */
8790 if (!reg->in_g_packet)
8791 return;
8792
8793 store_registers_using_G (regcache);
8794 return;
8795 }
8796
8797 store_registers_using_G (regcache);
8798
8799 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8800 if (!rsa->regs[i].in_g_packet)
8801 if (!store_register_using_P (regcache, &rsa->regs[i]))
8802 /* See above for why we do not issue an error here. */
8803 continue;
8804 }
8805 \f
8806
8807 /* Return the number of hex digits in num. */
8808
8809 static int
8810 hexnumlen (ULONGEST num)
8811 {
8812 int i;
8813
8814 for (i = 0; num != 0; i++)
8815 num >>= 4;
8816
8817 return std::max (i, 1);
8818 }
8819
8820 /* Set BUF to the minimum number of hex digits representing NUM. */
8821
8822 static int
8823 hexnumstr (char *buf, ULONGEST num)
8824 {
8825 int len = hexnumlen (num);
8826
8827 return hexnumnstr (buf, num, len);
8828 }
8829
8830
8831 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
8832
8833 static int
8834 hexnumnstr (char *buf, ULONGEST num, int width)
8835 {
8836 int i;
8837
8838 buf[width] = '\0';
8839
8840 for (i = width - 1; i >= 0; i--)
8841 {
8842 buf[i] = "0123456789abcdef"[(num & 0xf)];
8843 num >>= 4;
8844 }
8845
8846 return width;
8847 }
8848
8849 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
8850
8851 static CORE_ADDR
8852 remote_address_masked (CORE_ADDR addr)
8853 {
8854 unsigned int address_size = remote_address_size;
8855
8856 /* If "remoteaddresssize" was not set, default to target address size. */
8857 if (!address_size)
8858 address_size = gdbarch_addr_bit (target_gdbarch ());
8859
8860 if (address_size > 0
8861 && address_size < (sizeof (ULONGEST) * 8))
8862 {
8863 /* Only create a mask when that mask can safely be constructed
8864 in a ULONGEST variable. */
8865 ULONGEST mask = 1;
8866
8867 mask = (mask << address_size) - 1;
8868 addr &= mask;
8869 }
8870 return addr;
8871 }
8872
8873 /* Determine whether the remote target supports binary downloading.
8874 This is accomplished by sending a no-op memory write of zero length
8875 to the target at the specified address. It does not suffice to send
8876 the whole packet, since many stubs strip the eighth bit and
8877 subsequently compute a wrong checksum, which causes real havoc with
8878 remote_write_bytes.
8879
8880 NOTE: This can still lose if the serial line is not eight-bit
8881 clean. In cases like this, the user should clear "remote
8882 X-packet". */
8883
8884 void
8885 remote_target::check_binary_download (CORE_ADDR addr)
8886 {
8887 struct remote_state *rs = get_remote_state ();
8888
8889 switch (packet_support (PACKET_X))
8890 {
8891 case PACKET_DISABLE:
8892 break;
8893 case PACKET_ENABLE:
8894 break;
8895 case PACKET_SUPPORT_UNKNOWN:
8896 {
8897 char *p;
8898
8899 p = rs->buf.data ();
8900 *p++ = 'X';
8901 p += hexnumstr (p, (ULONGEST) addr);
8902 *p++ = ',';
8903 p += hexnumstr (p, (ULONGEST) 0);
8904 *p++ = ':';
8905 *p = '\0';
8906
8907 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8908 getpkt (&rs->buf, 0);
8909
8910 if (rs->buf[0] == '\0')
8911 {
8912 remote_debug_printf ("binary downloading NOT supported by target");
8913 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8914 }
8915 else
8916 {
8917 remote_debug_printf ("binary downloading supported by target");
8918 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8919 }
8920 break;
8921 }
8922 }
8923 }
8924
8925 /* Helper function to resize the payload in order to try to get a good
8926 alignment. We try to write an amount of data such that the next write will
8927 start on an address aligned on REMOTE_ALIGN_WRITES. */
8928
8929 static int
8930 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8931 {
8932 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8933 }
8934
8935 /* Write memory data directly to the remote machine.
8936 This does not inform the data cache; the data cache uses this.
8937 HEADER is the starting part of the packet.
8938 MEMADDR is the address in the remote memory space.
8939 MYADDR is the address of the buffer in our space.
8940 LEN_UNITS is the number of addressable units to write.
8941 UNIT_SIZE is the length in bytes of an addressable unit.
8942 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8943 should send data as binary ('X'), or hex-encoded ('M').
8944
8945 The function creates packet of the form
8946 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8947
8948 where encoding of <DATA> is terminated by PACKET_FORMAT.
8949
8950 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8951 are omitted.
8952
8953 Return the transferred status, error or OK (an
8954 'enum target_xfer_status' value). Save the number of addressable units
8955 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8956
8957 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8958 exchange between gdb and the stub could look like (?? in place of the
8959 checksum):
8960
8961 -> $m1000,4#??
8962 <- aaaabbbbccccdddd
8963
8964 -> $M1000,3:eeeeffffeeee#??
8965 <- OK
8966
8967 -> $m1000,4#??
8968 <- eeeeffffeeeedddd */
8969
8970 target_xfer_status
8971 remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8972 const gdb_byte *myaddr,
8973 ULONGEST len_units,
8974 int unit_size,
8975 ULONGEST *xfered_len_units,
8976 char packet_format, int use_length)
8977 {
8978 struct remote_state *rs = get_remote_state ();
8979 char *p;
8980 char *plen = NULL;
8981 int plenlen = 0;
8982 int todo_units;
8983 int units_written;
8984 int payload_capacity_bytes;
8985 int payload_length_bytes;
8986
8987 if (packet_format != 'X' && packet_format != 'M')
8988 internal_error (__FILE__, __LINE__,
8989 _("remote_write_bytes_aux: bad packet format"));
8990
8991 if (len_units == 0)
8992 return TARGET_XFER_EOF;
8993
8994 payload_capacity_bytes = get_memory_write_packet_size ();
8995
8996 /* The packet buffer will be large enough for the payload;
8997 get_memory_packet_size ensures this. */
8998 rs->buf[0] = '\0';
8999
9000 /* Compute the size of the actual payload by subtracting out the
9001 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
9002
9003 payload_capacity_bytes -= strlen ("$,:#NN");
9004 if (!use_length)
9005 /* The comma won't be used. */
9006 payload_capacity_bytes += 1;
9007 payload_capacity_bytes -= strlen (header);
9008 payload_capacity_bytes -= hexnumlen (memaddr);
9009
9010 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
9011
9012 strcat (rs->buf.data (), header);
9013 p = rs->buf.data () + strlen (header);
9014
9015 /* Compute a best guess of the number of bytes actually transfered. */
9016 if (packet_format == 'X')
9017 {
9018 /* Best guess at number of bytes that will fit. */
9019 todo_units = std::min (len_units,
9020 (ULONGEST) payload_capacity_bytes / unit_size);
9021 if (use_length)
9022 payload_capacity_bytes -= hexnumlen (todo_units);
9023 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
9024 }
9025 else
9026 {
9027 /* Number of bytes that will fit. */
9028 todo_units
9029 = std::min (len_units,
9030 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
9031 if (use_length)
9032 payload_capacity_bytes -= hexnumlen (todo_units);
9033 todo_units = std::min (todo_units,
9034 (payload_capacity_bytes / unit_size) / 2);
9035 }
9036
9037 if (todo_units <= 0)
9038 internal_error (__FILE__, __LINE__,
9039 _("minimum packet size too small to write data"));
9040
9041 /* If we already need another packet, then try to align the end
9042 of this packet to a useful boundary. */
9043 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
9044 todo_units = align_for_efficient_write (todo_units, memaddr);
9045
9046 /* Append "<memaddr>". */
9047 memaddr = remote_address_masked (memaddr);
9048 p += hexnumstr (p, (ULONGEST) memaddr);
9049
9050 if (use_length)
9051 {
9052 /* Append ",". */
9053 *p++ = ',';
9054
9055 /* Append the length and retain its location and size. It may need to be
9056 adjusted once the packet body has been created. */
9057 plen = p;
9058 plenlen = hexnumstr (p, (ULONGEST) todo_units);
9059 p += plenlen;
9060 }
9061
9062 /* Append ":". */
9063 *p++ = ':';
9064 *p = '\0';
9065
9066 /* Append the packet body. */
9067 if (packet_format == 'X')
9068 {
9069 /* Binary mode. Send target system values byte by byte, in
9070 increasing byte addresses. Only escape certain critical
9071 characters. */
9072 payload_length_bytes =
9073 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
9074 &units_written, payload_capacity_bytes);
9075
9076 /* If not all TODO units fit, then we'll need another packet. Make
9077 a second try to keep the end of the packet aligned. Don't do
9078 this if the packet is tiny. */
9079 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
9080 {
9081 int new_todo_units;
9082
9083 new_todo_units = align_for_efficient_write (units_written, memaddr);
9084
9085 if (new_todo_units != units_written)
9086 payload_length_bytes =
9087 remote_escape_output (myaddr, new_todo_units, unit_size,
9088 (gdb_byte *) p, &units_written,
9089 payload_capacity_bytes);
9090 }
9091
9092 p += payload_length_bytes;
9093 if (use_length && units_written < todo_units)
9094 {
9095 /* Escape chars have filled up the buffer prematurely,
9096 and we have actually sent fewer units than planned.
9097 Fix-up the length field of the packet. Use the same
9098 number of characters as before. */
9099 plen += hexnumnstr (plen, (ULONGEST) units_written,
9100 plenlen);
9101 *plen = ':'; /* overwrite \0 from hexnumnstr() */
9102 }
9103 }
9104 else
9105 {
9106 /* Normal mode: Send target system values byte by byte, in
9107 increasing byte addresses. Each byte is encoded as a two hex
9108 value. */
9109 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
9110 units_written = todo_units;
9111 }
9112
9113 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
9114 getpkt (&rs->buf, 0);
9115
9116 if (rs->buf[0] == 'E')
9117 return TARGET_XFER_E_IO;
9118
9119 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
9120 send fewer units than we'd planned. */
9121 *xfered_len_units = (ULONGEST) units_written;
9122 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9123 }
9124
9125 /* Write memory data directly to the remote machine.
9126 This does not inform the data cache; the data cache uses this.
9127 MEMADDR is the address in the remote memory space.
9128 MYADDR is the address of the buffer in our space.
9129 LEN is the number of bytes.
9130
9131 Return the transferred status, error or OK (an
9132 'enum target_xfer_status' value). Save the number of bytes
9133 transferred in *XFERED_LEN. Only transfer a single packet. */
9134
9135 target_xfer_status
9136 remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
9137 ULONGEST len, int unit_size,
9138 ULONGEST *xfered_len)
9139 {
9140 const char *packet_format = NULL;
9141
9142 /* Check whether the target supports binary download. */
9143 check_binary_download (memaddr);
9144
9145 switch (packet_support (PACKET_X))
9146 {
9147 case PACKET_ENABLE:
9148 packet_format = "X";
9149 break;
9150 case PACKET_DISABLE:
9151 packet_format = "M";
9152 break;
9153 case PACKET_SUPPORT_UNKNOWN:
9154 internal_error (__FILE__, __LINE__,
9155 _("remote_write_bytes: bad internal state"));
9156 default:
9157 internal_error (__FILE__, __LINE__, _("bad switch"));
9158 }
9159
9160 return remote_write_bytes_aux (packet_format,
9161 memaddr, myaddr, len, unit_size, xfered_len,
9162 packet_format[0], 1);
9163 }
9164
9165 /* Read memory data directly from the remote machine.
9166 This does not use the data cache; the data cache uses this.
9167 MEMADDR is the address in the remote memory space.
9168 MYADDR is the address of the buffer in our space.
9169 LEN_UNITS is the number of addressable memory units to read..
9170 UNIT_SIZE is the length in bytes of an addressable unit.
9171
9172 Return the transferred status, error or OK (an
9173 'enum target_xfer_status' value). Save the number of bytes
9174 transferred in *XFERED_LEN_UNITS.
9175
9176 See the comment of remote_write_bytes_aux for an example of
9177 memory read/write exchange between gdb and the stub. */
9178
9179 target_xfer_status
9180 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
9181 ULONGEST len_units,
9182 int unit_size, ULONGEST *xfered_len_units)
9183 {
9184 struct remote_state *rs = get_remote_state ();
9185 int buf_size_bytes; /* Max size of packet output buffer. */
9186 char *p;
9187 int todo_units;
9188 int decoded_bytes;
9189
9190 buf_size_bytes = get_memory_read_packet_size ();
9191 /* The packet buffer will be large enough for the payload;
9192 get_memory_packet_size ensures this. */
9193
9194 /* Number of units that will fit. */
9195 todo_units = std::min (len_units,
9196 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9197
9198 /* Construct "m"<memaddr>","<len>". */
9199 memaddr = remote_address_masked (memaddr);
9200 p = rs->buf.data ();
9201 *p++ = 'm';
9202 p += hexnumstr (p, (ULONGEST) memaddr);
9203 *p++ = ',';
9204 p += hexnumstr (p, (ULONGEST) todo_units);
9205 *p = '\0';
9206 putpkt (rs->buf);
9207 getpkt (&rs->buf, 0);
9208 if (rs->buf[0] == 'E'
9209 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
9210 && rs->buf[3] == '\0')
9211 return TARGET_XFER_E_IO;
9212 /* Reply describes memory byte by byte, each byte encoded as two hex
9213 characters. */
9214 p = rs->buf.data ();
9215 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9216 /* Return what we have. Let higher layers handle partial reads. */
9217 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
9218 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9219 }
9220
9221 /* Using the set of read-only target sections of remote, read live
9222 read-only memory.
9223
9224 For interface/parameters/return description see target.h,
9225 to_xfer_partial. */
9226
9227 target_xfer_status
9228 remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
9229 ULONGEST memaddr,
9230 ULONGEST len,
9231 int unit_size,
9232 ULONGEST *xfered_len)
9233 {
9234 const struct target_section *secp;
9235
9236 secp = target_section_by_addr (this, memaddr);
9237 if (secp != NULL
9238 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
9239 {
9240 ULONGEST memend = memaddr + len;
9241
9242 const target_section_table *table = target_get_section_table (this);
9243 for (const target_section &p : *table)
9244 {
9245 if (memaddr >= p.addr)
9246 {
9247 if (memend <= p.endaddr)
9248 {
9249 /* Entire transfer is within this section. */
9250 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
9251 xfered_len);
9252 }
9253 else if (memaddr >= p.endaddr)
9254 {
9255 /* This section ends before the transfer starts. */
9256 continue;
9257 }
9258 else
9259 {
9260 /* This section overlaps the transfer. Just do half. */
9261 len = p.endaddr - memaddr;
9262 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
9263 xfered_len);
9264 }
9265 }
9266 }
9267 }
9268
9269 return TARGET_XFER_EOF;
9270 }
9271
9272 /* Similar to remote_read_bytes_1, but it reads from the remote stub
9273 first if the requested memory is unavailable in traceframe.
9274 Otherwise, fall back to remote_read_bytes_1. */
9275
9276 target_xfer_status
9277 remote_target::remote_read_bytes (CORE_ADDR memaddr,
9278 gdb_byte *myaddr, ULONGEST len, int unit_size,
9279 ULONGEST *xfered_len)
9280 {
9281 if (len == 0)
9282 return TARGET_XFER_EOF;
9283
9284 if (get_traceframe_number () != -1)
9285 {
9286 std::vector<mem_range> available;
9287
9288 /* If we fail to get the set of available memory, then the
9289 target does not support querying traceframe info, and so we
9290 attempt reading from the traceframe anyway (assuming the
9291 target implements the old QTro packet then). */
9292 if (traceframe_available_memory (&available, memaddr, len))
9293 {
9294 if (available.empty () || available[0].start != memaddr)
9295 {
9296 enum target_xfer_status res;
9297
9298 /* Don't read into the traceframe's available
9299 memory. */
9300 if (!available.empty ())
9301 {
9302 LONGEST oldlen = len;
9303
9304 len = available[0].start - memaddr;
9305 gdb_assert (len <= oldlen);
9306 }
9307
9308 /* This goes through the topmost target again. */
9309 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
9310 len, unit_size, xfered_len);
9311 if (res == TARGET_XFER_OK)
9312 return TARGET_XFER_OK;
9313 else
9314 {
9315 /* No use trying further, we know some memory starting
9316 at MEMADDR isn't available. */
9317 *xfered_len = len;
9318 return (*xfered_len != 0) ?
9319 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
9320 }
9321 }
9322
9323 /* Don't try to read more than how much is available, in
9324 case the target implements the deprecated QTro packet to
9325 cater for older GDBs (the target's knowledge of read-only
9326 sections may be outdated by now). */
9327 len = available[0].length;
9328 }
9329 }
9330
9331 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
9332 }
9333
9334 \f
9335
9336 /* Sends a packet with content determined by the printf format string
9337 FORMAT and the remaining arguments, then gets the reply. Returns
9338 whether the packet was a success, a failure, or unknown. */
9339
9340 packet_result
9341 remote_target::remote_send_printf (const char *format, ...)
9342 {
9343 struct remote_state *rs = get_remote_state ();
9344 int max_size = get_remote_packet_size ();
9345 va_list ap;
9346
9347 va_start (ap, format);
9348
9349 rs->buf[0] = '\0';
9350 int size = vsnprintf (rs->buf.data (), max_size, format, ap);
9351
9352 va_end (ap);
9353
9354 if (size >= max_size)
9355 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
9356
9357 if (putpkt (rs->buf) < 0)
9358 error (_("Communication problem with target."));
9359
9360 rs->buf[0] = '\0';
9361 getpkt (&rs->buf, 0);
9362
9363 return packet_check_result (rs->buf);
9364 }
9365
9366 /* Flash writing can take quite some time. We'll set
9367 effectively infinite timeout for flash operations.
9368 In future, we'll need to decide on a better approach. */
9369 static const int remote_flash_timeout = 1000;
9370
9371 void
9372 remote_target::flash_erase (ULONGEST address, LONGEST length)
9373 {
9374 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
9375 enum packet_result ret;
9376 scoped_restore restore_timeout
9377 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9378
9379 ret = remote_send_printf ("vFlashErase:%s,%s",
9380 phex (address, addr_size),
9381 phex (length, 4));
9382 switch (ret)
9383 {
9384 case PACKET_UNKNOWN:
9385 error (_("Remote target does not support flash erase"));
9386 case PACKET_ERROR:
9387 error (_("Error erasing flash with vFlashErase packet"));
9388 default:
9389 break;
9390 }
9391 }
9392
9393 target_xfer_status
9394 remote_target::remote_flash_write (ULONGEST address,
9395 ULONGEST length, ULONGEST *xfered_len,
9396 const gdb_byte *data)
9397 {
9398 scoped_restore restore_timeout
9399 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9400 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9401 xfered_len,'X', 0);
9402 }
9403
9404 void
9405 remote_target::flash_done ()
9406 {
9407 int ret;
9408
9409 scoped_restore restore_timeout
9410 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9411
9412 ret = remote_send_printf ("vFlashDone");
9413
9414 switch (ret)
9415 {
9416 case PACKET_UNKNOWN:
9417 error (_("Remote target does not support vFlashDone"));
9418 case PACKET_ERROR:
9419 error (_("Error finishing flash operation"));
9420 default:
9421 break;
9422 }
9423 }
9424
9425 \f
9426 /* Stuff for dealing with the packets which are part of this protocol.
9427 See comment at top of file for details. */
9428
9429 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
9430 error to higher layers. Called when a serial error is detected.
9431 The exception message is STRING, followed by a colon and a blank,
9432 the system error message for errno at function entry and final dot
9433 for output compatibility with throw_perror_with_name. */
9434
9435 static void
9436 unpush_and_perror (remote_target *target, const char *string)
9437 {
9438 int saved_errno = errno;
9439
9440 remote_unpush_target (target);
9441 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
9442 safe_strerror (saved_errno));
9443 }
9444
9445 /* Read a single character from the remote end. The current quit
9446 handler is overridden to avoid quitting in the middle of packet
9447 sequence, as that would break communication with the remote server.
9448 See remote_serial_quit_handler for more detail. */
9449
9450 int
9451 remote_target::readchar (int timeout)
9452 {
9453 int ch;
9454 struct remote_state *rs = get_remote_state ();
9455
9456 {
9457 scoped_restore restore_quit_target
9458 = make_scoped_restore (&curr_quit_handler_target, this);
9459 scoped_restore restore_quit
9460 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9461
9462 rs->got_ctrlc_during_io = 0;
9463
9464 ch = serial_readchar (rs->remote_desc, timeout);
9465
9466 if (rs->got_ctrlc_during_io)
9467 set_quit_flag ();
9468 }
9469
9470 if (ch >= 0)
9471 return ch;
9472
9473 switch ((enum serial_rc) ch)
9474 {
9475 case SERIAL_EOF:
9476 remote_unpush_target (this);
9477 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
9478 /* no return */
9479 case SERIAL_ERROR:
9480 unpush_and_perror (this, _("Remote communication error. "
9481 "Target disconnected."));
9482 /* no return */
9483 case SERIAL_TIMEOUT:
9484 break;
9485 }
9486 return ch;
9487 }
9488
9489 /* Wrapper for serial_write that closes the target and throws if
9490 writing fails. The current quit handler is overridden to avoid
9491 quitting in the middle of packet sequence, as that would break
9492 communication with the remote server. See
9493 remote_serial_quit_handler for more detail. */
9494
9495 void
9496 remote_target::remote_serial_write (const char *str, int len)
9497 {
9498 struct remote_state *rs = get_remote_state ();
9499
9500 scoped_restore restore_quit_target
9501 = make_scoped_restore (&curr_quit_handler_target, this);
9502 scoped_restore restore_quit
9503 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9504
9505 rs->got_ctrlc_during_io = 0;
9506
9507 if (serial_write (rs->remote_desc, str, len))
9508 {
9509 unpush_and_perror (this, _("Remote communication error. "
9510 "Target disconnected."));
9511 }
9512
9513 if (rs->got_ctrlc_during_io)
9514 set_quit_flag ();
9515 }
9516
9517 /* Return a string representing an escaped version of BUF, of len N.
9518 E.g. \n is converted to \\n, \t to \\t, etc. */
9519
9520 static std::string
9521 escape_buffer (const char *buf, int n)
9522 {
9523 string_file stb;
9524
9525 stb.putstrn (buf, n, '\\');
9526 return stb.release ();
9527 }
9528
9529 int
9530 remote_target::putpkt (const char *buf)
9531 {
9532 return putpkt_binary (buf, strlen (buf));
9533 }
9534
9535 /* Wrapper around remote_target::putpkt to avoid exporting
9536 remote_target. */
9537
9538 int
9539 putpkt (remote_target *remote, const char *buf)
9540 {
9541 return remote->putpkt (buf);
9542 }
9543
9544 /* Send a packet to the remote machine, with error checking. The data
9545 of the packet is in BUF. The string in BUF can be at most
9546 get_remote_packet_size () - 5 to account for the $, # and checksum,
9547 and for a possible /0 if we are debugging (remote_debug) and want
9548 to print the sent packet as a string. */
9549
9550 int
9551 remote_target::putpkt_binary (const char *buf, int cnt)
9552 {
9553 struct remote_state *rs = get_remote_state ();
9554 int i;
9555 unsigned char csum = 0;
9556 gdb::def_vector<char> data (cnt + 6);
9557 char *buf2 = data.data ();
9558
9559 int ch;
9560 int tcount = 0;
9561 char *p;
9562
9563 /* Catch cases like trying to read memory or listing threads while
9564 we're waiting for a stop reply. The remote server wouldn't be
9565 ready to handle this request, so we'd hang and timeout. We don't
9566 have to worry about this in synchronous mode, because in that
9567 case it's not possible to issue a command while the target is
9568 running. This is not a problem in non-stop mode, because in that
9569 case, the stub is always ready to process serial input. */
9570 if (!target_is_non_stop_p ()
9571 && target_is_async_p ()
9572 && rs->waiting_for_stop_reply)
9573 {
9574 error (_("Cannot execute this command while the target is running.\n"
9575 "Use the \"interrupt\" command to stop the target\n"
9576 "and then try again."));
9577 }
9578
9579 /* Copy the packet into buffer BUF2, encapsulating it
9580 and giving it a checksum. */
9581
9582 p = buf2;
9583 *p++ = '$';
9584
9585 for (i = 0; i < cnt; i++)
9586 {
9587 csum += buf[i];
9588 *p++ = buf[i];
9589 }
9590 *p++ = '#';
9591 *p++ = tohex ((csum >> 4) & 0xf);
9592 *p++ = tohex (csum & 0xf);
9593
9594 /* Send it over and over until we get a positive ack. */
9595
9596 while (1)
9597 {
9598 if (remote_debug)
9599 {
9600 *p = '\0';
9601
9602 int len = (int) (p - buf2);
9603 int max_chars;
9604
9605 if (remote_packet_max_chars < 0)
9606 max_chars = len;
9607 else
9608 max_chars = remote_packet_max_chars;
9609
9610 std::string str
9611 = escape_buffer (buf2, std::min (len, max_chars));
9612
9613 if (len > max_chars)
9614 remote_debug_printf_nofunc
9615 ("Sending packet: %s [%d bytes omitted]", str.c_str (),
9616 len - max_chars);
9617 else
9618 remote_debug_printf_nofunc ("Sending packet: %s", str.c_str ());
9619 }
9620 remote_serial_write (buf2, p - buf2);
9621
9622 /* If this is a no acks version of the remote protocol, send the
9623 packet and move on. */
9624 if (rs->noack_mode)
9625 break;
9626
9627 /* Read until either a timeout occurs (-2) or '+' is read.
9628 Handle any notification that arrives in the mean time. */
9629 while (1)
9630 {
9631 ch = readchar (remote_timeout);
9632
9633 switch (ch)
9634 {
9635 case '+':
9636 remote_debug_printf_nofunc ("Received Ack");
9637 return 1;
9638 case '-':
9639 remote_debug_printf_nofunc ("Received Nak");
9640 /* FALLTHROUGH */
9641 case SERIAL_TIMEOUT:
9642 tcount++;
9643 if (tcount > 3)
9644 return 0;
9645 break; /* Retransmit buffer. */
9646 case '$':
9647 {
9648 remote_debug_printf ("Packet instead of Ack, ignoring it");
9649 /* It's probably an old response sent because an ACK
9650 was lost. Gobble up the packet and ack it so it
9651 doesn't get retransmitted when we resend this
9652 packet. */
9653 skip_frame ();
9654 remote_serial_write ("+", 1);
9655 continue; /* Now, go look for +. */
9656 }
9657
9658 case '%':
9659 {
9660 int val;
9661
9662 /* If we got a notification, handle it, and go back to looking
9663 for an ack. */
9664 /* We've found the start of a notification. Now
9665 collect the data. */
9666 val = read_frame (&rs->buf);
9667 if (val >= 0)
9668 {
9669 remote_debug_printf_nofunc
9670 (" Notification received: %s",
9671 escape_buffer (rs->buf.data (), val).c_str ());
9672
9673 handle_notification (rs->notif_state, rs->buf.data ());
9674 /* We're in sync now, rewait for the ack. */
9675 tcount = 0;
9676 }
9677 else
9678 remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177,
9679 rs->buf.data ());
9680 continue;
9681 }
9682 /* fall-through */
9683 default:
9684 remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177,
9685 rs->buf.data ());
9686 continue;
9687 }
9688 break; /* Here to retransmit. */
9689 }
9690
9691 #if 0
9692 /* This is wrong. If doing a long backtrace, the user should be
9693 able to get out next time we call QUIT, without anything as
9694 violent as interrupt_query. If we want to provide a way out of
9695 here without getting to the next QUIT, it should be based on
9696 hitting ^C twice as in remote_wait. */
9697 if (quit_flag)
9698 {
9699 quit_flag = 0;
9700 interrupt_query ();
9701 }
9702 #endif
9703 }
9704
9705 return 0;
9706 }
9707
9708 /* Come here after finding the start of a frame when we expected an
9709 ack. Do our best to discard the rest of this packet. */
9710
9711 void
9712 remote_target::skip_frame ()
9713 {
9714 int c;
9715
9716 while (1)
9717 {
9718 c = readchar (remote_timeout);
9719 switch (c)
9720 {
9721 case SERIAL_TIMEOUT:
9722 /* Nothing we can do. */
9723 return;
9724 case '#':
9725 /* Discard the two bytes of checksum and stop. */
9726 c = readchar (remote_timeout);
9727 if (c >= 0)
9728 c = readchar (remote_timeout);
9729
9730 return;
9731 case '*': /* Run length encoding. */
9732 /* Discard the repeat count. */
9733 c = readchar (remote_timeout);
9734 if (c < 0)
9735 return;
9736 break;
9737 default:
9738 /* A regular character. */
9739 break;
9740 }
9741 }
9742 }
9743
9744 /* Come here after finding the start of the frame. Collect the rest
9745 into *BUF, verifying the checksum, length, and handling run-length
9746 compression. NUL terminate the buffer. If there is not enough room,
9747 expand *BUF.
9748
9749 Returns -1 on error, number of characters in buffer (ignoring the
9750 trailing NULL) on success. (could be extended to return one of the
9751 SERIAL status indications). */
9752
9753 long
9754 remote_target::read_frame (gdb::char_vector *buf_p)
9755 {
9756 unsigned char csum;
9757 long bc;
9758 int c;
9759 char *buf = buf_p->data ();
9760 struct remote_state *rs = get_remote_state ();
9761
9762 csum = 0;
9763 bc = 0;
9764
9765 while (1)
9766 {
9767 c = readchar (remote_timeout);
9768 switch (c)
9769 {
9770 case SERIAL_TIMEOUT:
9771 remote_debug_printf ("Timeout in mid-packet, retrying");
9772 return -1;
9773
9774 case '$':
9775 remote_debug_printf ("Saw new packet start in middle of old one");
9776 return -1; /* Start a new packet, count retries. */
9777
9778 case '#':
9779 {
9780 unsigned char pktcsum;
9781 int check_0 = 0;
9782 int check_1 = 0;
9783
9784 buf[bc] = '\0';
9785
9786 check_0 = readchar (remote_timeout);
9787 if (check_0 >= 0)
9788 check_1 = readchar (remote_timeout);
9789
9790 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9791 {
9792 remote_debug_printf ("Timeout in checksum, retrying");
9793 return -1;
9794 }
9795 else if (check_0 < 0 || check_1 < 0)
9796 {
9797 remote_debug_printf ("Communication error in checksum");
9798 return -1;
9799 }
9800
9801 /* Don't recompute the checksum; with no ack packets we
9802 don't have any way to indicate a packet retransmission
9803 is necessary. */
9804 if (rs->noack_mode)
9805 return bc;
9806
9807 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9808 if (csum == pktcsum)
9809 return bc;
9810
9811 remote_debug_printf
9812 ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s",
9813 pktcsum, csum, escape_buffer (buf, bc).c_str ());
9814
9815 /* Number of characters in buffer ignoring trailing
9816 NULL. */
9817 return -1;
9818 }
9819 case '*': /* Run length encoding. */
9820 {
9821 int repeat;
9822
9823 csum += c;
9824 c = readchar (remote_timeout);
9825 csum += c;
9826 repeat = c - ' ' + 3; /* Compute repeat count. */
9827
9828 /* The character before ``*'' is repeated. */
9829
9830 if (repeat > 0 && repeat <= 255 && bc > 0)
9831 {
9832 if (bc + repeat - 1 >= buf_p->size () - 1)
9833 {
9834 /* Make some more room in the buffer. */
9835 buf_p->resize (buf_p->size () + repeat);
9836 buf = buf_p->data ();
9837 }
9838
9839 memset (&buf[bc], buf[bc - 1], repeat);
9840 bc += repeat;
9841 continue;
9842 }
9843
9844 buf[bc] = '\0';
9845 gdb_printf (_("Invalid run length encoding: %s\n"), buf);
9846 return -1;
9847 }
9848 default:
9849 if (bc >= buf_p->size () - 1)
9850 {
9851 /* Make some more room in the buffer. */
9852 buf_p->resize (buf_p->size () * 2);
9853 buf = buf_p->data ();
9854 }
9855
9856 buf[bc++] = c;
9857 csum += c;
9858 continue;
9859 }
9860 }
9861 }
9862
9863 /* Set this to the maximum number of seconds to wait instead of waiting forever
9864 in target_wait(). If this timer times out, then it generates an error and
9865 the command is aborted. This replaces most of the need for timeouts in the
9866 GDB test suite, and makes it possible to distinguish between a hung target
9867 and one with slow communications. */
9868
9869 static int watchdog = 0;
9870 static void
9871 show_watchdog (struct ui_file *file, int from_tty,
9872 struct cmd_list_element *c, const char *value)
9873 {
9874 gdb_printf (file, _("Watchdog timer is %s.\n"), value);
9875 }
9876
9877 /* Read a packet from the remote machine, with error checking, and
9878 store it in *BUF. Resize *BUF if necessary to hold the result. If
9879 FOREVER, wait forever rather than timing out; this is used (in
9880 synchronous mode) to wait for a target that is is executing user
9881 code to stop. */
9882 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9883 don't have to change all the calls to getpkt to deal with the
9884 return value, because at the moment I don't know what the right
9885 thing to do it for those. */
9886
9887 void
9888 remote_target::getpkt (gdb::char_vector *buf, int forever)
9889 {
9890 getpkt_sane (buf, forever);
9891 }
9892
9893
9894 /* Read a packet from the remote machine, with error checking, and
9895 store it in *BUF. Resize *BUF if necessary to hold the result. If
9896 FOREVER, wait forever rather than timing out; this is used (in
9897 synchronous mode) to wait for a target that is is executing user
9898 code to stop. If FOREVER == 0, this function is allowed to time
9899 out gracefully and return an indication of this to the caller.
9900 Otherwise return the number of bytes read. If EXPECTING_NOTIF,
9901 consider receiving a notification enough reason to return to the
9902 caller. *IS_NOTIF is an output boolean that indicates whether *BUF
9903 holds a notification or not (a regular packet). */
9904
9905 int
9906 remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
9907 int forever, int expecting_notif,
9908 int *is_notif)
9909 {
9910 struct remote_state *rs = get_remote_state ();
9911 int c;
9912 int tries;
9913 int timeout;
9914 int val = -1;
9915
9916 strcpy (buf->data (), "timeout");
9917
9918 if (forever)
9919 timeout = watchdog > 0 ? watchdog : -1;
9920 else if (expecting_notif)
9921 timeout = 0; /* There should already be a char in the buffer. If
9922 not, bail out. */
9923 else
9924 timeout = remote_timeout;
9925
9926 #define MAX_TRIES 3
9927
9928 /* Process any number of notifications, and then return when
9929 we get a packet. */
9930 for (;;)
9931 {
9932 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9933 times. */
9934 for (tries = 1; tries <= MAX_TRIES; tries++)
9935 {
9936 /* This can loop forever if the remote side sends us
9937 characters continuously, but if it pauses, we'll get
9938 SERIAL_TIMEOUT from readchar because of timeout. Then
9939 we'll count that as a retry.
9940
9941 Note that even when forever is set, we will only wait
9942 forever prior to the start of a packet. After that, we
9943 expect characters to arrive at a brisk pace. They should
9944 show up within remote_timeout intervals. */
9945 do
9946 c = readchar (timeout);
9947 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9948
9949 if (c == SERIAL_TIMEOUT)
9950 {
9951 if (expecting_notif)
9952 return -1; /* Don't complain, it's normal to not get
9953 anything in this case. */
9954
9955 if (forever) /* Watchdog went off? Kill the target. */
9956 {
9957 remote_unpush_target (this);
9958 throw_error (TARGET_CLOSE_ERROR,
9959 _("Watchdog timeout has expired. "
9960 "Target detached."));
9961 }
9962
9963 remote_debug_printf ("Timed out.");
9964 }
9965 else
9966 {
9967 /* We've found the start of a packet or notification.
9968 Now collect the data. */
9969 val = read_frame (buf);
9970 if (val >= 0)
9971 break;
9972 }
9973
9974 remote_serial_write ("-", 1);
9975 }
9976
9977 if (tries > MAX_TRIES)
9978 {
9979 /* We have tried hard enough, and just can't receive the
9980 packet/notification. Give up. */
9981 gdb_printf (_("Ignoring packet error, continuing...\n"));
9982
9983 /* Skip the ack char if we're in no-ack mode. */
9984 if (!rs->noack_mode)
9985 remote_serial_write ("+", 1);
9986 return -1;
9987 }
9988
9989 /* If we got an ordinary packet, return that to our caller. */
9990 if (c == '$')
9991 {
9992 if (remote_debug)
9993 {
9994 int max_chars;
9995
9996 if (remote_packet_max_chars < 0)
9997 max_chars = val;
9998 else
9999 max_chars = remote_packet_max_chars;
10000
10001 std::string str
10002 = escape_buffer (buf->data (),
10003 std::min (val, max_chars));
10004
10005 if (val > max_chars)
10006 remote_debug_printf_nofunc
10007 ("Packet received: %s [%d bytes omitted]", str.c_str (),
10008 val - max_chars);
10009 else
10010 remote_debug_printf_nofunc ("Packet received: %s",
10011 str.c_str ());
10012 }
10013
10014 /* Skip the ack char if we're in no-ack mode. */
10015 if (!rs->noack_mode)
10016 remote_serial_write ("+", 1);
10017 if (is_notif != NULL)
10018 *is_notif = 0;
10019 return val;
10020 }
10021
10022 /* If we got a notification, handle it, and go back to looking
10023 for a packet. */
10024 else
10025 {
10026 gdb_assert (c == '%');
10027
10028 remote_debug_printf_nofunc
10029 (" Notification received: %s",
10030 escape_buffer (buf->data (), val).c_str ());
10031
10032 if (is_notif != NULL)
10033 *is_notif = 1;
10034
10035 handle_notification (rs->notif_state, buf->data ());
10036
10037 /* Notifications require no acknowledgement. */
10038
10039 if (expecting_notif)
10040 return val;
10041 }
10042 }
10043 }
10044
10045 int
10046 remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
10047 {
10048 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
10049 }
10050
10051 int
10052 remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
10053 int *is_notif)
10054 {
10055 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
10056 }
10057
10058 /* Kill any new fork children of inferior INF that haven't been
10059 processed by follow_fork. */
10060
10061 void
10062 remote_target::kill_new_fork_children (inferior *inf)
10063 {
10064 remote_state *rs = get_remote_state ();
10065 struct notif_client *notif = &notif_client_stop;
10066
10067 /* Kill the fork child threads of any threads in inferior INF that are stopped
10068 at a fork event. */
10069 for (thread_info *thread : inf->non_exited_threads ())
10070 {
10071 const target_waitstatus *ws = thread_pending_fork_status (thread);
10072
10073 if (ws == nullptr)
10074 continue;
10075
10076 int child_pid = ws->child_ptid ().pid ();
10077 int res = remote_vkill (child_pid);
10078
10079 if (res != 0)
10080 error (_("Can't kill fork child process %d"), child_pid);
10081 }
10082
10083 /* Check for any pending fork events (not reported or processed yet)
10084 in inferior INF and kill those fork child threads as well. */
10085 remote_notif_get_pending_events (notif);
10086 for (auto &event : rs->stop_reply_queue)
10087 {
10088 if (event->ptid.pid () != inf->pid)
10089 continue;
10090
10091 if (!is_fork_status (event->ws.kind ()))
10092 continue;
10093
10094 int child_pid = event->ws.child_ptid ().pid ();
10095 int res = remote_vkill (child_pid);
10096
10097 if (res != 0)
10098 error (_("Can't kill fork child process %d"), child_pid);
10099 }
10100 }
10101
10102 \f
10103 /* Target hook to kill the current inferior. */
10104
10105 void
10106 remote_target::kill ()
10107 {
10108 int res = -1;
10109 inferior *inf = find_inferior_pid (this, inferior_ptid.pid ());
10110 struct remote_state *rs = get_remote_state ();
10111
10112 gdb_assert (inf != nullptr);
10113
10114 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
10115 {
10116 /* If we're stopped while forking and we haven't followed yet,
10117 kill the child task. We need to do this before killing the
10118 parent task because if this is a vfork then the parent will
10119 be sleeping. */
10120 kill_new_fork_children (inf);
10121
10122 res = remote_vkill (inf->pid);
10123 if (res == 0)
10124 {
10125 target_mourn_inferior (inferior_ptid);
10126 return;
10127 }
10128 }
10129
10130 /* If we are in 'target remote' mode and we are killing the only
10131 inferior, then we will tell gdbserver to exit and unpush the
10132 target. */
10133 if (res == -1 && !remote_multi_process_p (rs)
10134 && number_of_live_inferiors (this) == 1)
10135 {
10136 remote_kill_k ();
10137
10138 /* We've killed the remote end, we get to mourn it. If we are
10139 not in extended mode, mourning the inferior also unpushes
10140 remote_ops from the target stack, which closes the remote
10141 connection. */
10142 target_mourn_inferior (inferior_ptid);
10143
10144 return;
10145 }
10146
10147 error (_("Can't kill process"));
10148 }
10149
10150 /* Send a kill request to the target using the 'vKill' packet. */
10151
10152 int
10153 remote_target::remote_vkill (int pid)
10154 {
10155 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
10156 return -1;
10157
10158 remote_state *rs = get_remote_state ();
10159
10160 /* Tell the remote target to detach. */
10161 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
10162 putpkt (rs->buf);
10163 getpkt (&rs->buf, 0);
10164
10165 switch (packet_ok (rs->buf,
10166 &remote_protocol_packets[PACKET_vKill]))
10167 {
10168 case PACKET_OK:
10169 return 0;
10170 case PACKET_ERROR:
10171 return 1;
10172 case PACKET_UNKNOWN:
10173 return -1;
10174 default:
10175 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
10176 }
10177 }
10178
10179 /* Send a kill request to the target using the 'k' packet. */
10180
10181 void
10182 remote_target::remote_kill_k ()
10183 {
10184 /* Catch errors so the user can quit from gdb even when we
10185 aren't on speaking terms with the remote system. */
10186 try
10187 {
10188 putpkt ("k");
10189 }
10190 catch (const gdb_exception_error &ex)
10191 {
10192 if (ex.error == TARGET_CLOSE_ERROR)
10193 {
10194 /* If we got an (EOF) error that caused the target
10195 to go away, then we're done, that's what we wanted.
10196 "k" is susceptible to cause a premature EOF, given
10197 that the remote server isn't actually required to
10198 reply to "k", and it can happen that it doesn't
10199 even get to reply ACK to the "k". */
10200 return;
10201 }
10202
10203 /* Otherwise, something went wrong. We didn't actually kill
10204 the target. Just propagate the exception, and let the
10205 user or higher layers decide what to do. */
10206 throw;
10207 }
10208 }
10209
10210 void
10211 remote_target::mourn_inferior ()
10212 {
10213 struct remote_state *rs = get_remote_state ();
10214
10215 /* We're no longer interested in notification events of an inferior
10216 that exited or was killed/detached. */
10217 discard_pending_stop_replies (current_inferior ());
10218
10219 /* In 'target remote' mode with one inferior, we close the connection. */
10220 if (!rs->extended && number_of_live_inferiors (this) <= 1)
10221 {
10222 remote_unpush_target (this);
10223 return;
10224 }
10225
10226 /* In case we got here due to an error, but we're going to stay
10227 connected. */
10228 rs->waiting_for_stop_reply = 0;
10229
10230 /* If the current general thread belonged to the process we just
10231 detached from or has exited, the remote side current general
10232 thread becomes undefined. Considering a case like this:
10233
10234 - We just got here due to a detach.
10235 - The process that we're detaching from happens to immediately
10236 report a global breakpoint being hit in non-stop mode, in the
10237 same thread we had selected before.
10238 - GDB attaches to this process again.
10239 - This event happens to be the next event we handle.
10240
10241 GDB would consider that the current general thread didn't need to
10242 be set on the stub side (with Hg), since for all it knew,
10243 GENERAL_THREAD hadn't changed.
10244
10245 Notice that although in all-stop mode, the remote server always
10246 sets the current thread to the thread reporting the stop event,
10247 that doesn't happen in non-stop mode; in non-stop, the stub *must
10248 not* change the current thread when reporting a breakpoint hit,
10249 due to the decoupling of event reporting and event handling.
10250
10251 To keep things simple, we always invalidate our notion of the
10252 current thread. */
10253 record_currthread (rs, minus_one_ptid);
10254
10255 /* Call common code to mark the inferior as not running. */
10256 generic_mourn_inferior ();
10257 }
10258
10259 bool
10260 extended_remote_target::supports_disable_randomization ()
10261 {
10262 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
10263 }
10264
10265 void
10266 remote_target::extended_remote_disable_randomization (int val)
10267 {
10268 struct remote_state *rs = get_remote_state ();
10269 char *reply;
10270
10271 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10272 "QDisableRandomization:%x", val);
10273 putpkt (rs->buf);
10274 reply = remote_get_noisy_reply ();
10275 if (*reply == '\0')
10276 error (_("Target does not support QDisableRandomization."));
10277 if (strcmp (reply, "OK") != 0)
10278 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
10279 }
10280
10281 int
10282 remote_target::extended_remote_run (const std::string &args)
10283 {
10284 struct remote_state *rs = get_remote_state ();
10285 int len;
10286 const char *remote_exec_file = get_remote_exec_file ();
10287
10288 /* If the user has disabled vRun support, or we have detected that
10289 support is not available, do not try it. */
10290 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
10291 return -1;
10292
10293 strcpy (rs->buf.data (), "vRun;");
10294 len = strlen (rs->buf.data ());
10295
10296 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
10297 error (_("Remote file name too long for run packet"));
10298 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
10299 strlen (remote_exec_file));
10300
10301 if (!args.empty ())
10302 {
10303 int i;
10304
10305 gdb_argv argv (args.c_str ());
10306 for (i = 0; argv[i] != NULL; i++)
10307 {
10308 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
10309 error (_("Argument list too long for run packet"));
10310 rs->buf[len++] = ';';
10311 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
10312 strlen (argv[i]));
10313 }
10314 }
10315
10316 rs->buf[len++] = '\0';
10317
10318 putpkt (rs->buf);
10319 getpkt (&rs->buf, 0);
10320
10321 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
10322 {
10323 case PACKET_OK:
10324 /* We have a wait response. All is well. */
10325 return 0;
10326 case PACKET_UNKNOWN:
10327 return -1;
10328 case PACKET_ERROR:
10329 if (remote_exec_file[0] == '\0')
10330 error (_("Running the default executable on the remote target failed; "
10331 "try \"set remote exec-file\"?"));
10332 else
10333 error (_("Running \"%s\" on the remote target failed"),
10334 remote_exec_file);
10335 default:
10336 gdb_assert_not_reached ("bad switch");
10337 }
10338 }
10339
10340 /* Helper function to send set/unset environment packets. ACTION is
10341 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
10342 or "QEnvironmentUnsetVariable". VALUE is the variable to be
10343 sent. */
10344
10345 void
10346 remote_target::send_environment_packet (const char *action,
10347 const char *packet,
10348 const char *value)
10349 {
10350 remote_state *rs = get_remote_state ();
10351
10352 /* Convert the environment variable to an hex string, which
10353 is the best format to be transmitted over the wire. */
10354 std::string encoded_value = bin2hex ((const gdb_byte *) value,
10355 strlen (value));
10356
10357 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10358 "%s:%s", packet, encoded_value.c_str ());
10359
10360 putpkt (rs->buf);
10361 getpkt (&rs->buf, 0);
10362 if (strcmp (rs->buf.data (), "OK") != 0)
10363 warning (_("Unable to %s environment variable '%s' on remote."),
10364 action, value);
10365 }
10366
10367 /* Helper function to handle the QEnvironment* packets. */
10368
10369 void
10370 remote_target::extended_remote_environment_support ()
10371 {
10372 remote_state *rs = get_remote_state ();
10373
10374 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10375 {
10376 putpkt ("QEnvironmentReset");
10377 getpkt (&rs->buf, 0);
10378 if (strcmp (rs->buf.data (), "OK") != 0)
10379 warning (_("Unable to reset environment on remote."));
10380 }
10381
10382 gdb_environ *e = &current_inferior ()->environment;
10383
10384 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10385 for (const std::string &el : e->user_set_env ())
10386 send_environment_packet ("set", "QEnvironmentHexEncoded",
10387 el.c_str ());
10388
10389 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10390 for (const std::string &el : e->user_unset_env ())
10391 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
10392 }
10393
10394 /* Helper function to set the current working directory for the
10395 inferior in the remote target. */
10396
10397 void
10398 remote_target::extended_remote_set_inferior_cwd ()
10399 {
10400 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10401 {
10402 const std::string &inferior_cwd = current_inferior ()->cwd ();
10403 remote_state *rs = get_remote_state ();
10404
10405 if (!inferior_cwd.empty ())
10406 {
10407 std::string hexpath
10408 = bin2hex ((const gdb_byte *) inferior_cwd.data (),
10409 inferior_cwd.size ());
10410
10411 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10412 "QSetWorkingDir:%s", hexpath.c_str ());
10413 }
10414 else
10415 {
10416 /* An empty inferior_cwd means that the user wants us to
10417 reset the remote server's inferior's cwd. */
10418 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10419 "QSetWorkingDir:");
10420 }
10421
10422 putpkt (rs->buf);
10423 getpkt (&rs->buf, 0);
10424 if (packet_ok (rs->buf,
10425 &remote_protocol_packets[PACKET_QSetWorkingDir])
10426 != PACKET_OK)
10427 error (_("\
10428 Remote replied unexpectedly while setting the inferior's working\n\
10429 directory: %s"),
10430 rs->buf.data ());
10431
10432 }
10433 }
10434
10435 /* In the extended protocol we want to be able to do things like
10436 "run" and have them basically work as expected. So we need
10437 a special create_inferior function. We support changing the
10438 executable file and the command line arguments, but not the
10439 environment. */
10440
10441 void
10442 extended_remote_target::create_inferior (const char *exec_file,
10443 const std::string &args,
10444 char **env, int from_tty)
10445 {
10446 int run_worked;
10447 char *stop_reply;
10448 struct remote_state *rs = get_remote_state ();
10449 const char *remote_exec_file = get_remote_exec_file ();
10450
10451 /* If running asynchronously, register the target file descriptor
10452 with the event loop. */
10453 if (target_can_async_p ())
10454 target_async (true);
10455
10456 /* Disable address space randomization if requested (and supported). */
10457 if (supports_disable_randomization ())
10458 extended_remote_disable_randomization (disable_randomization);
10459
10460 /* If startup-with-shell is on, we inform gdbserver to start the
10461 remote inferior using a shell. */
10462 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10463 {
10464 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10465 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10466 putpkt (rs->buf);
10467 getpkt (&rs->buf, 0);
10468 if (strcmp (rs->buf.data (), "OK") != 0)
10469 error (_("\
10470 Remote replied unexpectedly while setting startup-with-shell: %s"),
10471 rs->buf.data ());
10472 }
10473
10474 extended_remote_environment_support ();
10475
10476 extended_remote_set_inferior_cwd ();
10477
10478 /* Now restart the remote server. */
10479 run_worked = extended_remote_run (args) != -1;
10480 if (!run_worked)
10481 {
10482 /* vRun was not supported. Fail if we need it to do what the
10483 user requested. */
10484 if (remote_exec_file[0])
10485 error (_("Remote target does not support \"set remote exec-file\""));
10486 if (!args.empty ())
10487 error (_("Remote target does not support \"set args\" or run ARGS"));
10488
10489 /* Fall back to "R". */
10490 extended_remote_restart ();
10491 }
10492
10493 /* vRun's success return is a stop reply. */
10494 stop_reply = run_worked ? rs->buf.data () : NULL;
10495 add_current_inferior_and_thread (stop_reply);
10496
10497 /* Get updated offsets, if the stub uses qOffsets. */
10498 get_offsets ();
10499 }
10500 \f
10501
10502 /* Given a location's target info BP_TGT and the packet buffer BUF, output
10503 the list of conditions (in agent expression bytecode format), if any, the
10504 target needs to evaluate. The output is placed into the packet buffer
10505 started from BUF and ended at BUF_END. */
10506
10507 static int
10508 remote_add_target_side_condition (struct gdbarch *gdbarch,
10509 struct bp_target_info *bp_tgt, char *buf,
10510 char *buf_end)
10511 {
10512 if (bp_tgt->conditions.empty ())
10513 return 0;
10514
10515 buf += strlen (buf);
10516 xsnprintf (buf, buf_end - buf, "%s", ";");
10517 buf++;
10518
10519 /* Send conditions to the target. */
10520 for (agent_expr *aexpr : bp_tgt->conditions)
10521 {
10522 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
10523 buf += strlen (buf);
10524 for (int i = 0; i < aexpr->len; ++i)
10525 buf = pack_hex_byte (buf, aexpr->buf[i]);
10526 *buf = '\0';
10527 }
10528 return 0;
10529 }
10530
10531 static void
10532 remote_add_target_side_commands (struct gdbarch *gdbarch,
10533 struct bp_target_info *bp_tgt, char *buf)
10534 {
10535 if (bp_tgt->tcommands.empty ())
10536 return;
10537
10538 buf += strlen (buf);
10539
10540 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10541 buf += strlen (buf);
10542
10543 /* Concatenate all the agent expressions that are commands into the
10544 cmds parameter. */
10545 for (agent_expr *aexpr : bp_tgt->tcommands)
10546 {
10547 sprintf (buf, "X%x,", aexpr->len);
10548 buf += strlen (buf);
10549 for (int i = 0; i < aexpr->len; ++i)
10550 buf = pack_hex_byte (buf, aexpr->buf[i]);
10551 *buf = '\0';
10552 }
10553 }
10554
10555 /* Insert a breakpoint. On targets that have software breakpoint
10556 support, we ask the remote target to do the work; on targets
10557 which don't, we insert a traditional memory breakpoint. */
10558
10559 int
10560 remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10561 struct bp_target_info *bp_tgt)
10562 {
10563 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10564 If it succeeds, then set the support to PACKET_ENABLE. If it
10565 fails, and the user has explicitly requested the Z support then
10566 report an error, otherwise, mark it disabled and go on. */
10567
10568 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10569 {
10570 CORE_ADDR addr = bp_tgt->reqstd_address;
10571 struct remote_state *rs;
10572 char *p, *endbuf;
10573
10574 /* Make sure the remote is pointing at the right process, if
10575 necessary. */
10576 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10577 set_general_process ();
10578
10579 rs = get_remote_state ();
10580 p = rs->buf.data ();
10581 endbuf = p + get_remote_packet_size ();
10582
10583 *(p++) = 'Z';
10584 *(p++) = '0';
10585 *(p++) = ',';
10586 addr = (ULONGEST) remote_address_masked (addr);
10587 p += hexnumstr (p, addr);
10588 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10589
10590 if (supports_evaluation_of_breakpoint_conditions ())
10591 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10592
10593 if (can_run_breakpoint_commands ())
10594 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10595
10596 putpkt (rs->buf);
10597 getpkt (&rs->buf, 0);
10598
10599 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
10600 {
10601 case PACKET_ERROR:
10602 return -1;
10603 case PACKET_OK:
10604 return 0;
10605 case PACKET_UNKNOWN:
10606 break;
10607 }
10608 }
10609
10610 /* If this breakpoint has target-side commands but this stub doesn't
10611 support Z0 packets, throw error. */
10612 if (!bp_tgt->tcommands.empty ())
10613 throw_error (NOT_SUPPORTED_ERROR, _("\
10614 Target doesn't support breakpoints that have target side commands."));
10615
10616 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
10617 }
10618
10619 int
10620 remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10621 struct bp_target_info *bp_tgt,
10622 enum remove_bp_reason reason)
10623 {
10624 CORE_ADDR addr = bp_tgt->placed_address;
10625 struct remote_state *rs = get_remote_state ();
10626
10627 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10628 {
10629 char *p = rs->buf.data ();
10630 char *endbuf = p + get_remote_packet_size ();
10631
10632 /* Make sure the remote is pointing at the right process, if
10633 necessary. */
10634 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10635 set_general_process ();
10636
10637 *(p++) = 'z';
10638 *(p++) = '0';
10639 *(p++) = ',';
10640
10641 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10642 p += hexnumstr (p, addr);
10643 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10644
10645 putpkt (rs->buf);
10646 getpkt (&rs->buf, 0);
10647
10648 return (rs->buf[0] == 'E');
10649 }
10650
10651 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
10652 }
10653
10654 static enum Z_packet_type
10655 watchpoint_to_Z_packet (int type)
10656 {
10657 switch (type)
10658 {
10659 case hw_write:
10660 return Z_PACKET_WRITE_WP;
10661 break;
10662 case hw_read:
10663 return Z_PACKET_READ_WP;
10664 break;
10665 case hw_access:
10666 return Z_PACKET_ACCESS_WP;
10667 break;
10668 default:
10669 internal_error (__FILE__, __LINE__,
10670 _("hw_bp_to_z: bad watchpoint type %d"), type);
10671 }
10672 }
10673
10674 int
10675 remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10676 enum target_hw_bp_type type, struct expression *cond)
10677 {
10678 struct remote_state *rs = get_remote_state ();
10679 char *endbuf = rs->buf.data () + get_remote_packet_size ();
10680 char *p;
10681 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10682
10683 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10684 return 1;
10685
10686 /* Make sure the remote is pointing at the right process, if
10687 necessary. */
10688 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10689 set_general_process ();
10690
10691 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10692 p = strchr (rs->buf.data (), '\0');
10693 addr = remote_address_masked (addr);
10694 p += hexnumstr (p, (ULONGEST) addr);
10695 xsnprintf (p, endbuf - p, ",%x", len);
10696
10697 putpkt (rs->buf);
10698 getpkt (&rs->buf, 0);
10699
10700 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10701 {
10702 case PACKET_ERROR:
10703 return -1;
10704 case PACKET_UNKNOWN:
10705 return 1;
10706 case PACKET_OK:
10707 return 0;
10708 }
10709 internal_error (__FILE__, __LINE__,
10710 _("remote_insert_watchpoint: reached end of function"));
10711 }
10712
10713 bool
10714 remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10715 CORE_ADDR start, int length)
10716 {
10717 CORE_ADDR diff = remote_address_masked (addr - start);
10718
10719 return diff < length;
10720 }
10721
10722
10723 int
10724 remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10725 enum target_hw_bp_type type, struct expression *cond)
10726 {
10727 struct remote_state *rs = get_remote_state ();
10728 char *endbuf = rs->buf.data () + get_remote_packet_size ();
10729 char *p;
10730 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10731
10732 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10733 return -1;
10734
10735 /* Make sure the remote is pointing at the right process, if
10736 necessary. */
10737 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10738 set_general_process ();
10739
10740 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10741 p = strchr (rs->buf.data (), '\0');
10742 addr = remote_address_masked (addr);
10743 p += hexnumstr (p, (ULONGEST) addr);
10744 xsnprintf (p, endbuf - p, ",%x", len);
10745 putpkt (rs->buf);
10746 getpkt (&rs->buf, 0);
10747
10748 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10749 {
10750 case PACKET_ERROR:
10751 case PACKET_UNKNOWN:
10752 return -1;
10753 case PACKET_OK:
10754 return 0;
10755 }
10756 internal_error (__FILE__, __LINE__,
10757 _("remote_remove_watchpoint: reached end of function"));
10758 }
10759
10760
10761 static int remote_hw_watchpoint_limit = -1;
10762 static int remote_hw_watchpoint_length_limit = -1;
10763 static int remote_hw_breakpoint_limit = -1;
10764
10765 int
10766 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
10767 {
10768 if (remote_hw_watchpoint_length_limit == 0)
10769 return 0;
10770 else if (remote_hw_watchpoint_length_limit < 0)
10771 return 1;
10772 else if (len <= remote_hw_watchpoint_length_limit)
10773 return 1;
10774 else
10775 return 0;
10776 }
10777
10778 int
10779 remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
10780 {
10781 if (type == bp_hardware_breakpoint)
10782 {
10783 if (remote_hw_breakpoint_limit == 0)
10784 return 0;
10785 else if (remote_hw_breakpoint_limit < 0)
10786 return 1;
10787 else if (cnt <= remote_hw_breakpoint_limit)
10788 return 1;
10789 }
10790 else
10791 {
10792 if (remote_hw_watchpoint_limit == 0)
10793 return 0;
10794 else if (remote_hw_watchpoint_limit < 0)
10795 return 1;
10796 else if (ot)
10797 return -1;
10798 else if (cnt <= remote_hw_watchpoint_limit)
10799 return 1;
10800 }
10801 return -1;
10802 }
10803
10804 /* The to_stopped_by_sw_breakpoint method of target remote. */
10805
10806 bool
10807 remote_target::stopped_by_sw_breakpoint ()
10808 {
10809 struct thread_info *thread = inferior_thread ();
10810
10811 return (thread->priv != NULL
10812 && (get_remote_thread_info (thread)->stop_reason
10813 == TARGET_STOPPED_BY_SW_BREAKPOINT));
10814 }
10815
10816 /* The to_supports_stopped_by_sw_breakpoint method of target
10817 remote. */
10818
10819 bool
10820 remote_target::supports_stopped_by_sw_breakpoint ()
10821 {
10822 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10823 }
10824
10825 /* The to_stopped_by_hw_breakpoint method of target remote. */
10826
10827 bool
10828 remote_target::stopped_by_hw_breakpoint ()
10829 {
10830 struct thread_info *thread = inferior_thread ();
10831
10832 return (thread->priv != NULL
10833 && (get_remote_thread_info (thread)->stop_reason
10834 == TARGET_STOPPED_BY_HW_BREAKPOINT));
10835 }
10836
10837 /* The to_supports_stopped_by_hw_breakpoint method of target
10838 remote. */
10839
10840 bool
10841 remote_target::supports_stopped_by_hw_breakpoint ()
10842 {
10843 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10844 }
10845
10846 bool
10847 remote_target::stopped_by_watchpoint ()
10848 {
10849 struct thread_info *thread = inferior_thread ();
10850
10851 return (thread->priv != NULL
10852 && (get_remote_thread_info (thread)->stop_reason
10853 == TARGET_STOPPED_BY_WATCHPOINT));
10854 }
10855
10856 bool
10857 remote_target::stopped_data_address (CORE_ADDR *addr_p)
10858 {
10859 struct thread_info *thread = inferior_thread ();
10860
10861 if (thread->priv != NULL
10862 && (get_remote_thread_info (thread)->stop_reason
10863 == TARGET_STOPPED_BY_WATCHPOINT))
10864 {
10865 *addr_p = get_remote_thread_info (thread)->watch_data_address;
10866 return true;
10867 }
10868
10869 return false;
10870 }
10871
10872
10873 int
10874 remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10875 struct bp_target_info *bp_tgt)
10876 {
10877 CORE_ADDR addr = bp_tgt->reqstd_address;
10878 struct remote_state *rs;
10879 char *p, *endbuf;
10880 char *message;
10881
10882 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10883 return -1;
10884
10885 /* Make sure the remote is pointing at the right process, if
10886 necessary. */
10887 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10888 set_general_process ();
10889
10890 rs = get_remote_state ();
10891 p = rs->buf.data ();
10892 endbuf = p + get_remote_packet_size ();
10893
10894 *(p++) = 'Z';
10895 *(p++) = '1';
10896 *(p++) = ',';
10897
10898 addr = remote_address_masked (addr);
10899 p += hexnumstr (p, (ULONGEST) addr);
10900 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10901
10902 if (supports_evaluation_of_breakpoint_conditions ())
10903 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10904
10905 if (can_run_breakpoint_commands ())
10906 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10907
10908 putpkt (rs->buf);
10909 getpkt (&rs->buf, 0);
10910
10911 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10912 {
10913 case PACKET_ERROR:
10914 if (rs->buf[1] == '.')
10915 {
10916 message = strchr (&rs->buf[2], '.');
10917 if (message)
10918 error (_("Remote failure reply: %s"), message + 1);
10919 }
10920 return -1;
10921 case PACKET_UNKNOWN:
10922 return -1;
10923 case PACKET_OK:
10924 return 0;
10925 }
10926 internal_error (__FILE__, __LINE__,
10927 _("remote_insert_hw_breakpoint: reached end of function"));
10928 }
10929
10930
10931 int
10932 remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10933 struct bp_target_info *bp_tgt)
10934 {
10935 CORE_ADDR addr;
10936 struct remote_state *rs = get_remote_state ();
10937 char *p = rs->buf.data ();
10938 char *endbuf = p + get_remote_packet_size ();
10939
10940 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10941 return -1;
10942
10943 /* Make sure the remote is pointing at the right process, if
10944 necessary. */
10945 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10946 set_general_process ();
10947
10948 *(p++) = 'z';
10949 *(p++) = '1';
10950 *(p++) = ',';
10951
10952 addr = remote_address_masked (bp_tgt->placed_address);
10953 p += hexnumstr (p, (ULONGEST) addr);
10954 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10955
10956 putpkt (rs->buf);
10957 getpkt (&rs->buf, 0);
10958
10959 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10960 {
10961 case PACKET_ERROR:
10962 case PACKET_UNKNOWN:
10963 return -1;
10964 case PACKET_OK:
10965 return 0;
10966 }
10967 internal_error (__FILE__, __LINE__,
10968 _("remote_remove_hw_breakpoint: reached end of function"));
10969 }
10970
10971 /* Verify memory using the "qCRC:" request. */
10972
10973 int
10974 remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10975 {
10976 struct remote_state *rs = get_remote_state ();
10977 unsigned long host_crc, target_crc;
10978 char *tmp;
10979
10980 /* It doesn't make sense to use qCRC if the remote target is
10981 connected but not running. */
10982 if (target_has_execution ()
10983 && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10984 {
10985 enum packet_result result;
10986
10987 /* Make sure the remote is pointing at the right process. */
10988 set_general_process ();
10989
10990 /* FIXME: assumes lma can fit into long. */
10991 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
10992 (long) lma, (long) size);
10993 putpkt (rs->buf);
10994
10995 /* Be clever; compute the host_crc before waiting for target
10996 reply. */
10997 host_crc = xcrc32 (data, size, 0xffffffff);
10998
10999 getpkt (&rs->buf, 0);
11000
11001 result = packet_ok (rs->buf,
11002 &remote_protocol_packets[PACKET_qCRC]);
11003 if (result == PACKET_ERROR)
11004 return -1;
11005 else if (result == PACKET_OK)
11006 {
11007 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
11008 target_crc = target_crc * 16 + fromhex (*tmp);
11009
11010 return (host_crc == target_crc);
11011 }
11012 }
11013
11014 return simple_verify_memory (this, data, lma, size);
11015 }
11016
11017 /* compare-sections command
11018
11019 With no arguments, compares each loadable section in the exec bfd
11020 with the same memory range on the target, and reports mismatches.
11021 Useful for verifying the image on the target against the exec file. */
11022
11023 static void
11024 compare_sections_command (const char *args, int from_tty)
11025 {
11026 asection *s;
11027 const char *sectname;
11028 bfd_size_type size;
11029 bfd_vma lma;
11030 int matched = 0;
11031 int mismatched = 0;
11032 int res;
11033 int read_only = 0;
11034
11035 if (!current_program_space->exec_bfd ())
11036 error (_("command cannot be used without an exec file"));
11037
11038 if (args != NULL && strcmp (args, "-r") == 0)
11039 {
11040 read_only = 1;
11041 args = NULL;
11042 }
11043
11044 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
11045 {
11046 if (!(s->flags & SEC_LOAD))
11047 continue; /* Skip non-loadable section. */
11048
11049 if (read_only && (s->flags & SEC_READONLY) == 0)
11050 continue; /* Skip writeable sections */
11051
11052 size = bfd_section_size (s);
11053 if (size == 0)
11054 continue; /* Skip zero-length section. */
11055
11056 sectname = bfd_section_name (s);
11057 if (args && strcmp (args, sectname) != 0)
11058 continue; /* Not the section selected by user. */
11059
11060 matched = 1; /* Do this section. */
11061 lma = s->lma;
11062
11063 gdb::byte_vector sectdata (size);
11064 bfd_get_section_contents (current_program_space->exec_bfd (), s,
11065 sectdata.data (), 0, size);
11066
11067 res = target_verify_memory (sectdata.data (), lma, size);
11068
11069 if (res == -1)
11070 error (_("target memory fault, section %s, range %s -- %s"), sectname,
11071 paddress (target_gdbarch (), lma),
11072 paddress (target_gdbarch (), lma + size));
11073
11074 gdb_printf ("Section %s, range %s -- %s: ", sectname,
11075 paddress (target_gdbarch (), lma),
11076 paddress (target_gdbarch (), lma + size));
11077 if (res)
11078 gdb_printf ("matched.\n");
11079 else
11080 {
11081 gdb_printf ("MIS-MATCHED!\n");
11082 mismatched++;
11083 }
11084 }
11085 if (mismatched > 0)
11086 warning (_("One or more sections of the target image does not match\n\
11087 the loaded file\n"));
11088 if (args && !matched)
11089 gdb_printf (_("No loaded section named '%s'.\n"), args);
11090 }
11091
11092 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
11093 into remote target. The number of bytes written to the remote
11094 target is returned, or -1 for error. */
11095
11096 target_xfer_status
11097 remote_target::remote_write_qxfer (const char *object_name,
11098 const char *annex, const gdb_byte *writebuf,
11099 ULONGEST offset, LONGEST len,
11100 ULONGEST *xfered_len,
11101 struct packet_config *packet)
11102 {
11103 int i, buf_len;
11104 ULONGEST n;
11105 struct remote_state *rs = get_remote_state ();
11106 int max_size = get_memory_write_packet_size ();
11107
11108 if (packet_config_support (packet) == PACKET_DISABLE)
11109 return TARGET_XFER_E_IO;
11110
11111 /* Insert header. */
11112 i = snprintf (rs->buf.data (), max_size,
11113 "qXfer:%s:write:%s:%s:",
11114 object_name, annex ? annex : "",
11115 phex_nz (offset, sizeof offset));
11116 max_size -= (i + 1);
11117
11118 /* Escape as much data as fits into rs->buf. */
11119 buf_len = remote_escape_output
11120 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
11121
11122 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
11123 || getpkt_sane (&rs->buf, 0) < 0
11124 || packet_ok (rs->buf, packet) != PACKET_OK)
11125 return TARGET_XFER_E_IO;
11126
11127 unpack_varlen_hex (rs->buf.data (), &n);
11128
11129 *xfered_len = n;
11130 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11131 }
11132
11133 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
11134 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
11135 number of bytes read is returned, or 0 for EOF, or -1 for error.
11136 The number of bytes read may be less than LEN without indicating an
11137 EOF. PACKET is checked and updated to indicate whether the remote
11138 target supports this object. */
11139
11140 target_xfer_status
11141 remote_target::remote_read_qxfer (const char *object_name,
11142 const char *annex,
11143 gdb_byte *readbuf, ULONGEST offset,
11144 LONGEST len,
11145 ULONGEST *xfered_len,
11146 struct packet_config *packet)
11147 {
11148 struct remote_state *rs = get_remote_state ();
11149 LONGEST i, n, packet_len;
11150
11151 if (packet_config_support (packet) == PACKET_DISABLE)
11152 return TARGET_XFER_E_IO;
11153
11154 /* Check whether we've cached an end-of-object packet that matches
11155 this request. */
11156 if (rs->finished_object)
11157 {
11158 if (strcmp (object_name, rs->finished_object) == 0
11159 && strcmp (annex ? annex : "", rs->finished_annex) == 0
11160 && offset == rs->finished_offset)
11161 return TARGET_XFER_EOF;
11162
11163
11164 /* Otherwise, we're now reading something different. Discard
11165 the cache. */
11166 xfree (rs->finished_object);
11167 xfree (rs->finished_annex);
11168 rs->finished_object = NULL;
11169 rs->finished_annex = NULL;
11170 }
11171
11172 /* Request only enough to fit in a single packet. The actual data
11173 may not, since we don't know how much of it will need to be escaped;
11174 the target is free to respond with slightly less data. We subtract
11175 five to account for the response type and the protocol frame. */
11176 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
11177 snprintf (rs->buf.data (), get_remote_packet_size () - 4,
11178 "qXfer:%s:read:%s:%s,%s",
11179 object_name, annex ? annex : "",
11180 phex_nz (offset, sizeof offset),
11181 phex_nz (n, sizeof n));
11182 i = putpkt (rs->buf);
11183 if (i < 0)
11184 return TARGET_XFER_E_IO;
11185
11186 rs->buf[0] = '\0';
11187 packet_len = getpkt_sane (&rs->buf, 0);
11188 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
11189 return TARGET_XFER_E_IO;
11190
11191 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
11192 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
11193
11194 /* 'm' means there is (or at least might be) more data after this
11195 batch. That does not make sense unless there's at least one byte
11196 of data in this reply. */
11197 if (rs->buf[0] == 'm' && packet_len == 1)
11198 error (_("Remote qXfer reply contained no data."));
11199
11200 /* Got some data. */
11201 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
11202 packet_len - 1, readbuf, n);
11203
11204 /* 'l' is an EOF marker, possibly including a final block of data,
11205 or possibly empty. If we have the final block of a non-empty
11206 object, record this fact to bypass a subsequent partial read. */
11207 if (rs->buf[0] == 'l' && offset + i > 0)
11208 {
11209 rs->finished_object = xstrdup (object_name);
11210 rs->finished_annex = xstrdup (annex ? annex : "");
11211 rs->finished_offset = offset + i;
11212 }
11213
11214 if (i == 0)
11215 return TARGET_XFER_EOF;
11216 else
11217 {
11218 *xfered_len = i;
11219 return TARGET_XFER_OK;
11220 }
11221 }
11222
11223 enum target_xfer_status
11224 remote_target::xfer_partial (enum target_object object,
11225 const char *annex, gdb_byte *readbuf,
11226 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
11227 ULONGEST *xfered_len)
11228 {
11229 struct remote_state *rs;
11230 int i;
11231 char *p2;
11232 char query_type;
11233 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
11234
11235 set_remote_traceframe ();
11236 set_general_thread (inferior_ptid);
11237
11238 rs = get_remote_state ();
11239
11240 /* Handle memory using the standard memory routines. */
11241 if (object == TARGET_OBJECT_MEMORY)
11242 {
11243 /* If the remote target is connected but not running, we should
11244 pass this request down to a lower stratum (e.g. the executable
11245 file). */
11246 if (!target_has_execution ())
11247 return TARGET_XFER_EOF;
11248
11249 if (writebuf != NULL)
11250 return remote_write_bytes (offset, writebuf, len, unit_size,
11251 xfered_len);
11252 else
11253 return remote_read_bytes (offset, readbuf, len, unit_size,
11254 xfered_len);
11255 }
11256
11257 /* Handle extra signal info using qxfer packets. */
11258 if (object == TARGET_OBJECT_SIGNAL_INFO)
11259 {
11260 if (readbuf)
11261 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
11262 xfered_len, &remote_protocol_packets
11263 [PACKET_qXfer_siginfo_read]);
11264 else
11265 return remote_write_qxfer ("siginfo", annex,
11266 writebuf, offset, len, xfered_len,
11267 &remote_protocol_packets
11268 [PACKET_qXfer_siginfo_write]);
11269 }
11270
11271 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
11272 {
11273 if (readbuf)
11274 return remote_read_qxfer ("statictrace", annex,
11275 readbuf, offset, len, xfered_len,
11276 &remote_protocol_packets
11277 [PACKET_qXfer_statictrace_read]);
11278 else
11279 return TARGET_XFER_E_IO;
11280 }
11281
11282 /* Only handle flash writes. */
11283 if (writebuf != NULL)
11284 {
11285 switch (object)
11286 {
11287 case TARGET_OBJECT_FLASH:
11288 return remote_flash_write (offset, len, xfered_len,
11289 writebuf);
11290
11291 default:
11292 return TARGET_XFER_E_IO;
11293 }
11294 }
11295
11296 /* Map pre-existing objects onto letters. DO NOT do this for new
11297 objects!!! Instead specify new query packets. */
11298 switch (object)
11299 {
11300 case TARGET_OBJECT_AVR:
11301 query_type = 'R';
11302 break;
11303
11304 case TARGET_OBJECT_AUXV:
11305 gdb_assert (annex == NULL);
11306 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
11307 xfered_len,
11308 &remote_protocol_packets[PACKET_qXfer_auxv]);
11309
11310 case TARGET_OBJECT_AVAILABLE_FEATURES:
11311 return remote_read_qxfer
11312 ("features", annex, readbuf, offset, len, xfered_len,
11313 &remote_protocol_packets[PACKET_qXfer_features]);
11314
11315 case TARGET_OBJECT_LIBRARIES:
11316 return remote_read_qxfer
11317 ("libraries", annex, readbuf, offset, len, xfered_len,
11318 &remote_protocol_packets[PACKET_qXfer_libraries]);
11319
11320 case TARGET_OBJECT_LIBRARIES_SVR4:
11321 return remote_read_qxfer
11322 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
11323 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
11324
11325 case TARGET_OBJECT_MEMORY_MAP:
11326 gdb_assert (annex == NULL);
11327 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
11328 xfered_len,
11329 &remote_protocol_packets[PACKET_qXfer_memory_map]);
11330
11331 case TARGET_OBJECT_OSDATA:
11332 /* Should only get here if we're connected. */
11333 gdb_assert (rs->remote_desc);
11334 return remote_read_qxfer
11335 ("osdata", annex, readbuf, offset, len, xfered_len,
11336 &remote_protocol_packets[PACKET_qXfer_osdata]);
11337
11338 case TARGET_OBJECT_THREADS:
11339 gdb_assert (annex == NULL);
11340 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
11341 xfered_len,
11342 &remote_protocol_packets[PACKET_qXfer_threads]);
11343
11344 case TARGET_OBJECT_TRACEFRAME_INFO:
11345 gdb_assert (annex == NULL);
11346 return remote_read_qxfer
11347 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
11348 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
11349
11350 case TARGET_OBJECT_FDPIC:
11351 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
11352 xfered_len,
11353 &remote_protocol_packets[PACKET_qXfer_fdpic]);
11354
11355 case TARGET_OBJECT_OPENVMS_UIB:
11356 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
11357 xfered_len,
11358 &remote_protocol_packets[PACKET_qXfer_uib]);
11359
11360 case TARGET_OBJECT_BTRACE:
11361 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
11362 xfered_len,
11363 &remote_protocol_packets[PACKET_qXfer_btrace]);
11364
11365 case TARGET_OBJECT_BTRACE_CONF:
11366 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
11367 len, xfered_len,
11368 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11369
11370 case TARGET_OBJECT_EXEC_FILE:
11371 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
11372 len, xfered_len,
11373 &remote_protocol_packets[PACKET_qXfer_exec_file]);
11374
11375 default:
11376 return TARGET_XFER_E_IO;
11377 }
11378
11379 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
11380 large enough let the caller deal with it. */
11381 if (len < get_remote_packet_size ())
11382 return TARGET_XFER_E_IO;
11383 len = get_remote_packet_size ();
11384
11385 /* Except for querying the minimum buffer size, target must be open. */
11386 if (!rs->remote_desc)
11387 error (_("remote query is only available after target open"));
11388
11389 gdb_assert (annex != NULL);
11390 gdb_assert (readbuf != NULL);
11391
11392 p2 = rs->buf.data ();
11393 *p2++ = 'q';
11394 *p2++ = query_type;
11395
11396 /* We used one buffer char for the remote protocol q command and
11397 another for the query type. As the remote protocol encapsulation
11398 uses 4 chars plus one extra in case we are debugging
11399 (remote_debug), we have PBUFZIZ - 7 left to pack the query
11400 string. */
11401 i = 0;
11402 while (annex[i] && (i < (get_remote_packet_size () - 8)))
11403 {
11404 /* Bad caller may have sent forbidden characters. */
11405 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11406 *p2++ = annex[i];
11407 i++;
11408 }
11409 *p2 = '\0';
11410 gdb_assert (annex[i] == '\0');
11411
11412 i = putpkt (rs->buf);
11413 if (i < 0)
11414 return TARGET_XFER_E_IO;
11415
11416 getpkt (&rs->buf, 0);
11417 strcpy ((char *) readbuf, rs->buf.data ());
11418
11419 *xfered_len = strlen ((char *) readbuf);
11420 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11421 }
11422
11423 /* Implementation of to_get_memory_xfer_limit. */
11424
11425 ULONGEST
11426 remote_target::get_memory_xfer_limit ()
11427 {
11428 return get_memory_write_packet_size ();
11429 }
11430
11431 int
11432 remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11433 const gdb_byte *pattern, ULONGEST pattern_len,
11434 CORE_ADDR *found_addrp)
11435 {
11436 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
11437 struct remote_state *rs = get_remote_state ();
11438 int max_size = get_memory_write_packet_size ();
11439 struct packet_config *packet =
11440 &remote_protocol_packets[PACKET_qSearch_memory];
11441 /* Number of packet bytes used to encode the pattern;
11442 this could be more than PATTERN_LEN due to escape characters. */
11443 int escaped_pattern_len;
11444 /* Amount of pattern that was encodable in the packet. */
11445 int used_pattern_len;
11446 int i;
11447 int found;
11448 ULONGEST found_addr;
11449
11450 auto read_memory = [=] (CORE_ADDR addr, gdb_byte *result, size_t len)
11451 {
11452 return (target_read (this, TARGET_OBJECT_MEMORY, NULL, result, addr, len)
11453 == len);
11454 };
11455
11456 /* Don't go to the target if we don't have to. This is done before
11457 checking packet_config_support to avoid the possibility that a
11458 success for this edge case means the facility works in
11459 general. */
11460 if (pattern_len > search_space_len)
11461 return 0;
11462 if (pattern_len == 0)
11463 {
11464 *found_addrp = start_addr;
11465 return 1;
11466 }
11467
11468 /* If we already know the packet isn't supported, fall back to the simple
11469 way of searching memory. */
11470
11471 if (packet_config_support (packet) == PACKET_DISABLE)
11472 {
11473 /* Target doesn't provided special support, fall back and use the
11474 standard support (copy memory and do the search here). */
11475 return simple_search_memory (read_memory, start_addr, search_space_len,
11476 pattern, pattern_len, found_addrp);
11477 }
11478
11479 /* Make sure the remote is pointing at the right process. */
11480 set_general_process ();
11481
11482 /* Insert header. */
11483 i = snprintf (rs->buf.data (), max_size,
11484 "qSearch:memory:%s;%s;",
11485 phex_nz (start_addr, addr_size),
11486 phex_nz (search_space_len, sizeof (search_space_len)));
11487 max_size -= (i + 1);
11488
11489 /* Escape as much data as fits into rs->buf. */
11490 escaped_pattern_len =
11491 remote_escape_output (pattern, pattern_len, 1,
11492 (gdb_byte *) rs->buf.data () + i,
11493 &used_pattern_len, max_size);
11494
11495 /* Bail if the pattern is too large. */
11496 if (used_pattern_len != pattern_len)
11497 error (_("Pattern is too large to transmit to remote target."));
11498
11499 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11500 || getpkt_sane (&rs->buf, 0) < 0
11501 || packet_ok (rs->buf, packet) != PACKET_OK)
11502 {
11503 /* The request may not have worked because the command is not
11504 supported. If so, fall back to the simple way. */
11505 if (packet_config_support (packet) == PACKET_DISABLE)
11506 {
11507 return simple_search_memory (read_memory, start_addr, search_space_len,
11508 pattern, pattern_len, found_addrp);
11509 }
11510 return -1;
11511 }
11512
11513 if (rs->buf[0] == '0')
11514 found = 0;
11515 else if (rs->buf[0] == '1')
11516 {
11517 found = 1;
11518 if (rs->buf[1] != ',')
11519 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11520 unpack_varlen_hex (&rs->buf[2], &found_addr);
11521 *found_addrp = found_addr;
11522 }
11523 else
11524 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11525
11526 return found;
11527 }
11528
11529 void
11530 remote_target::rcmd (const char *command, struct ui_file *outbuf)
11531 {
11532 struct remote_state *rs = get_remote_state ();
11533 char *p = rs->buf.data ();
11534
11535 if (!rs->remote_desc)
11536 error (_("remote rcmd is only available after target open"));
11537
11538 /* Send a NULL command across as an empty command. */
11539 if (command == NULL)
11540 command = "";
11541
11542 /* The query prefix. */
11543 strcpy (rs->buf.data (), "qRcmd,");
11544 p = strchr (rs->buf.data (), '\0');
11545
11546 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
11547 > get_remote_packet_size ())
11548 error (_("\"monitor\" command ``%s'' is too long."), command);
11549
11550 /* Encode the actual command. */
11551 bin2hex ((const gdb_byte *) command, p, strlen (command));
11552
11553 if (putpkt (rs->buf) < 0)
11554 error (_("Communication problem with target."));
11555
11556 /* get/display the response */
11557 while (1)
11558 {
11559 char *buf;
11560
11561 /* XXX - see also remote_get_noisy_reply(). */
11562 QUIT; /* Allow user to bail out with ^C. */
11563 rs->buf[0] = '\0';
11564 if (getpkt_sane (&rs->buf, 0) == -1)
11565 {
11566 /* Timeout. Continue to (try to) read responses.
11567 This is better than stopping with an error, assuming the stub
11568 is still executing the (long) monitor command.
11569 If needed, the user can interrupt gdb using C-c, obtaining
11570 an effect similar to stop on timeout. */
11571 continue;
11572 }
11573 buf = rs->buf.data ();
11574 if (buf[0] == '\0')
11575 error (_("Target does not support this command."));
11576 if (buf[0] == 'O' && buf[1] != 'K')
11577 {
11578 remote_console_output (buf + 1); /* 'O' message from stub. */
11579 continue;
11580 }
11581 if (strcmp (buf, "OK") == 0)
11582 break;
11583 if (strlen (buf) == 3 && buf[0] == 'E'
11584 && isxdigit (buf[1]) && isxdigit (buf[2]))
11585 {
11586 error (_("Protocol error with Rcmd"));
11587 }
11588 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11589 {
11590 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
11591
11592 gdb_putc (c, outbuf);
11593 }
11594 break;
11595 }
11596 }
11597
11598 std::vector<mem_region>
11599 remote_target::memory_map ()
11600 {
11601 std::vector<mem_region> result;
11602 gdb::optional<gdb::char_vector> text
11603 = target_read_stralloc (current_inferior ()->top_target (),
11604 TARGET_OBJECT_MEMORY_MAP, NULL);
11605
11606 if (text)
11607 result = parse_memory_map (text->data ());
11608
11609 return result;
11610 }
11611
11612 /* Set of callbacks used to implement the 'maint packet' command. */
11613
11614 struct cli_packet_command_callbacks : public send_remote_packet_callbacks
11615 {
11616 /* Called before the packet is sent. BUF is the packet content before
11617 the protocol specific prefix, suffix, and escaping is added. */
11618
11619 void sending (gdb::array_view<const char> &buf) override
11620 {
11621 gdb_puts ("sending: ");
11622 print_packet (buf);
11623 gdb_puts ("\n");
11624 }
11625
11626 /* Called with BUF, the reply from the remote target. */
11627
11628 void received (gdb::array_view<const char> &buf) override
11629 {
11630 gdb_puts ("received: \"");
11631 print_packet (buf);
11632 gdb_puts ("\"\n");
11633 }
11634
11635 private:
11636
11637 /* Print BUF o gdb_stdout. Any non-printable bytes in BUF are printed as
11638 '\x??' with '??' replaced by the hexadecimal value of the byte. */
11639
11640 static void
11641 print_packet (gdb::array_view<const char> &buf)
11642 {
11643 string_file stb;
11644
11645 for (int i = 0; i < buf.size (); ++i)
11646 {
11647 gdb_byte c = buf[i];
11648 if (isprint (c))
11649 gdb_putc (c, &stb);
11650 else
11651 gdb_printf (&stb, "\\x%02x", (unsigned char) c);
11652 }
11653
11654 gdb_puts (stb.string ().c_str ());
11655 }
11656 };
11657
11658 /* See remote.h. */
11659
11660 void
11661 send_remote_packet (gdb::array_view<const char> &buf,
11662 send_remote_packet_callbacks *callbacks)
11663 {
11664 if (buf.size () == 0 || buf.data ()[0] == '\0')
11665 error (_("a remote packet must not be empty"));
11666
11667 remote_target *remote = get_current_remote_target ();
11668 if (remote == nullptr)
11669 error (_("packets can only be sent to a remote target"));
11670
11671 callbacks->sending (buf);
11672
11673 remote->putpkt_binary (buf.data (), buf.size ());
11674 remote_state *rs = remote->get_remote_state ();
11675 int bytes = remote->getpkt_sane (&rs->buf, 0);
11676
11677 if (bytes < 0)
11678 error (_("error while fetching packet from remote target"));
11679
11680 gdb::array_view<const char> view (&rs->buf[0], bytes);
11681 callbacks->received (view);
11682 }
11683
11684 /* Entry point for the 'maint packet' command. */
11685
11686 static void
11687 cli_packet_command (const char *args, int from_tty)
11688 {
11689 cli_packet_command_callbacks cb;
11690 gdb::array_view<const char> view
11691 = gdb::make_array_view (args, args == nullptr ? 0 : strlen (args));
11692 send_remote_packet (view, &cb);
11693 }
11694
11695 #if 0
11696 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
11697
11698 static void display_thread_info (struct gdb_ext_thread_info *info);
11699
11700 static void threadset_test_cmd (char *cmd, int tty);
11701
11702 static void threadalive_test (char *cmd, int tty);
11703
11704 static void threadlist_test_cmd (char *cmd, int tty);
11705
11706 int get_and_display_threadinfo (threadref *ref);
11707
11708 static void threadinfo_test_cmd (char *cmd, int tty);
11709
11710 static int thread_display_step (threadref *ref, void *context);
11711
11712 static void threadlist_update_test_cmd (char *cmd, int tty);
11713
11714 static void init_remote_threadtests (void);
11715
11716 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
11717
11718 static void
11719 threadset_test_cmd (const char *cmd, int tty)
11720 {
11721 int sample_thread = SAMPLE_THREAD;
11722
11723 gdb_printf (_("Remote threadset test\n"));
11724 set_general_thread (sample_thread);
11725 }
11726
11727
11728 static void
11729 threadalive_test (const char *cmd, int tty)
11730 {
11731 int sample_thread = SAMPLE_THREAD;
11732 int pid = inferior_ptid.pid ();
11733 ptid_t ptid = ptid_t (pid, sample_thread, 0);
11734
11735 if (remote_thread_alive (ptid))
11736 gdb_printf ("PASS: Thread alive test\n");
11737 else
11738 gdb_printf ("FAIL: Thread alive test\n");
11739 }
11740
11741 void output_threadid (char *title, threadref *ref);
11742
11743 void
11744 output_threadid (char *title, threadref *ref)
11745 {
11746 char hexid[20];
11747
11748 pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */
11749 hexid[16] = 0;
11750 gdb_printf ("%s %s\n", title, (&hexid[0]));
11751 }
11752
11753 static void
11754 threadlist_test_cmd (const char *cmd, int tty)
11755 {
11756 int startflag = 1;
11757 threadref nextthread;
11758 int done, result_count;
11759 threadref threadlist[3];
11760
11761 gdb_printf ("Remote Threadlist test\n");
11762 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11763 &result_count, &threadlist[0]))
11764 gdb_printf ("FAIL: threadlist test\n");
11765 else
11766 {
11767 threadref *scan = threadlist;
11768 threadref *limit = scan + result_count;
11769
11770 while (scan < limit)
11771 output_threadid (" thread ", scan++);
11772 }
11773 }
11774
11775 void
11776 display_thread_info (struct gdb_ext_thread_info *info)
11777 {
11778 output_threadid ("Threadid: ", &info->threadid);
11779 gdb_printf ("Name: %s\n ", info->shortname);
11780 gdb_printf ("State: %s\n", info->display);
11781 gdb_printf ("other: %s\n\n", info->more_display);
11782 }
11783
11784 int
11785 get_and_display_threadinfo (threadref *ref)
11786 {
11787 int result;
11788 int set;
11789 struct gdb_ext_thread_info threadinfo;
11790
11791 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11792 | TAG_MOREDISPLAY | TAG_DISPLAY;
11793 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11794 display_thread_info (&threadinfo);
11795 return result;
11796 }
11797
11798 static void
11799 threadinfo_test_cmd (const char *cmd, int tty)
11800 {
11801 int athread = SAMPLE_THREAD;
11802 threadref thread;
11803 int set;
11804
11805 int_to_threadref (&thread, athread);
11806 gdb_printf ("Remote Threadinfo test\n");
11807 if (!get_and_display_threadinfo (&thread))
11808 gdb_printf ("FAIL cannot get thread info\n");
11809 }
11810
11811 static int
11812 thread_display_step (threadref *ref, void *context)
11813 {
11814 /* output_threadid(" threadstep ",ref); *//* simple test */
11815 return get_and_display_threadinfo (ref);
11816 }
11817
11818 static void
11819 threadlist_update_test_cmd (const char *cmd, int tty)
11820 {
11821 gdb_printf ("Remote Threadlist update test\n");
11822 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11823 }
11824
11825 static void
11826 init_remote_threadtests (void)
11827 {
11828 add_com ("tlist", class_obscure, threadlist_test_cmd,
11829 _("Fetch and print the remote list of "
11830 "thread identifiers, one pkt only."));
11831 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11832 _("Fetch and display info about one thread."));
11833 add_com ("tset", class_obscure, threadset_test_cmd,
11834 _("Test setting to a different thread."));
11835 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11836 _("Iterate through updating all remote thread info."));
11837 add_com ("talive", class_obscure, threadalive_test,
11838 _("Remote thread alive test."));
11839 }
11840
11841 #endif /* 0 */
11842
11843 /* Convert a thread ID to a string. */
11844
11845 std::string
11846 remote_target::pid_to_str (ptid_t ptid)
11847 {
11848 struct remote_state *rs = get_remote_state ();
11849
11850 if (ptid == null_ptid)
11851 return normal_pid_to_str (ptid);
11852 else if (ptid.is_pid ())
11853 {
11854 /* Printing an inferior target id. */
11855
11856 /* When multi-process extensions are off, there's no way in the
11857 remote protocol to know the remote process id, if there's any
11858 at all. There's one exception --- when we're connected with
11859 target extended-remote, and we manually attached to a process
11860 with "attach PID". We don't record anywhere a flag that
11861 allows us to distinguish that case from the case of
11862 connecting with extended-remote and the stub already being
11863 attached to a process, and reporting yes to qAttached, hence
11864 no smart special casing here. */
11865 if (!remote_multi_process_p (rs))
11866 return "Remote target";
11867
11868 return normal_pid_to_str (ptid);
11869 }
11870 else
11871 {
11872 if (magic_null_ptid == ptid)
11873 return "Thread <main>";
11874 else if (remote_multi_process_p (rs))
11875 if (ptid.lwp () == 0)
11876 return normal_pid_to_str (ptid);
11877 else
11878 return string_printf ("Thread %d.%ld",
11879 ptid.pid (), ptid.lwp ());
11880 else
11881 return string_printf ("Thread %ld", ptid.lwp ());
11882 }
11883 }
11884
11885 /* Get the address of the thread local variable in OBJFILE which is
11886 stored at OFFSET within the thread local storage for thread PTID. */
11887
11888 CORE_ADDR
11889 remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11890 CORE_ADDR offset)
11891 {
11892 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11893 {
11894 struct remote_state *rs = get_remote_state ();
11895 char *p = rs->buf.data ();
11896 char *endp = p + get_remote_packet_size ();
11897 enum packet_result result;
11898
11899 strcpy (p, "qGetTLSAddr:");
11900 p += strlen (p);
11901 p = write_ptid (p, endp, ptid);
11902 *p++ = ',';
11903 p += hexnumstr (p, offset);
11904 *p++ = ',';
11905 p += hexnumstr (p, lm);
11906 *p++ = '\0';
11907
11908 putpkt (rs->buf);
11909 getpkt (&rs->buf, 0);
11910 result = packet_ok (rs->buf,
11911 &remote_protocol_packets[PACKET_qGetTLSAddr]);
11912 if (result == PACKET_OK)
11913 {
11914 ULONGEST addr;
11915
11916 unpack_varlen_hex (rs->buf.data (), &addr);
11917 return addr;
11918 }
11919 else if (result == PACKET_UNKNOWN)
11920 throw_error (TLS_GENERIC_ERROR,
11921 _("Remote target doesn't support qGetTLSAddr packet"));
11922 else
11923 throw_error (TLS_GENERIC_ERROR,
11924 _("Remote target failed to process qGetTLSAddr request"));
11925 }
11926 else
11927 throw_error (TLS_GENERIC_ERROR,
11928 _("TLS not supported or disabled on this target"));
11929 /* Not reached. */
11930 return 0;
11931 }
11932
11933 /* Provide thread local base, i.e. Thread Information Block address.
11934 Returns 1 if ptid is found and thread_local_base is non zero. */
11935
11936 bool
11937 remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
11938 {
11939 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11940 {
11941 struct remote_state *rs = get_remote_state ();
11942 char *p = rs->buf.data ();
11943 char *endp = p + get_remote_packet_size ();
11944 enum packet_result result;
11945
11946 strcpy (p, "qGetTIBAddr:");
11947 p += strlen (p);
11948 p = write_ptid (p, endp, ptid);
11949 *p++ = '\0';
11950
11951 putpkt (rs->buf);
11952 getpkt (&rs->buf, 0);
11953 result = packet_ok (rs->buf,
11954 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11955 if (result == PACKET_OK)
11956 {
11957 ULONGEST val;
11958 unpack_varlen_hex (rs->buf.data (), &val);
11959 if (addr)
11960 *addr = (CORE_ADDR) val;
11961 return true;
11962 }
11963 else if (result == PACKET_UNKNOWN)
11964 error (_("Remote target doesn't support qGetTIBAddr packet"));
11965 else
11966 error (_("Remote target failed to process qGetTIBAddr request"));
11967 }
11968 else
11969 error (_("qGetTIBAddr not supported or disabled on this target"));
11970 /* Not reached. */
11971 return false;
11972 }
11973
11974 /* Support for inferring a target description based on the current
11975 architecture and the size of a 'g' packet. While the 'g' packet
11976 can have any size (since optional registers can be left off the
11977 end), some sizes are easily recognizable given knowledge of the
11978 approximate architecture. */
11979
11980 struct remote_g_packet_guess
11981 {
11982 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11983 : bytes (bytes_),
11984 tdesc (tdesc_)
11985 {
11986 }
11987
11988 int bytes;
11989 const struct target_desc *tdesc;
11990 };
11991
11992 struct remote_g_packet_data : public allocate_on_obstack
11993 {
11994 std::vector<remote_g_packet_guess> guesses;
11995 };
11996
11997 static struct gdbarch_data *remote_g_packet_data_handle;
11998
11999 static void *
12000 remote_g_packet_data_init (struct obstack *obstack)
12001 {
12002 return new (obstack) remote_g_packet_data;
12003 }
12004
12005 void
12006 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
12007 const struct target_desc *tdesc)
12008 {
12009 struct remote_g_packet_data *data
12010 = ((struct remote_g_packet_data *)
12011 gdbarch_data (gdbarch, remote_g_packet_data_handle));
12012
12013 gdb_assert (tdesc != NULL);
12014
12015 for (const remote_g_packet_guess &guess : data->guesses)
12016 if (guess.bytes == bytes)
12017 internal_error (__FILE__, __LINE__,
12018 _("Duplicate g packet description added for size %d"),
12019 bytes);
12020
12021 data->guesses.emplace_back (bytes, tdesc);
12022 }
12023
12024 /* Return true if remote_read_description would do anything on this target
12025 and architecture, false otherwise. */
12026
12027 static bool
12028 remote_read_description_p (struct target_ops *target)
12029 {
12030 struct remote_g_packet_data *data
12031 = ((struct remote_g_packet_data *)
12032 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
12033
12034 return !data->guesses.empty ();
12035 }
12036
12037 const struct target_desc *
12038 remote_target::read_description ()
12039 {
12040 struct remote_g_packet_data *data
12041 = ((struct remote_g_packet_data *)
12042 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
12043
12044 /* Do not try this during initial connection, when we do not know
12045 whether there is a running but stopped thread. */
12046 if (!target_has_execution () || inferior_ptid == null_ptid)
12047 return beneath ()->read_description ();
12048
12049 if (!data->guesses.empty ())
12050 {
12051 int bytes = send_g_packet ();
12052
12053 for (const remote_g_packet_guess &guess : data->guesses)
12054 if (guess.bytes == bytes)
12055 return guess.tdesc;
12056
12057 /* We discard the g packet. A minor optimization would be to
12058 hold on to it, and fill the register cache once we have selected
12059 an architecture, but it's too tricky to do safely. */
12060 }
12061
12062 return beneath ()->read_description ();
12063 }
12064
12065 /* Remote file transfer support. This is host-initiated I/O, not
12066 target-initiated; for target-initiated, see remote-fileio.c. */
12067
12068 /* If *LEFT is at least the length of STRING, copy STRING to
12069 *BUFFER, update *BUFFER to point to the new end of the buffer, and
12070 decrease *LEFT. Otherwise raise an error. */
12071
12072 static void
12073 remote_buffer_add_string (char **buffer, int *left, const char *string)
12074 {
12075 int len = strlen (string);
12076
12077 if (len > *left)
12078 error (_("Packet too long for target."));
12079
12080 memcpy (*buffer, string, len);
12081 *buffer += len;
12082 *left -= len;
12083
12084 /* NUL-terminate the buffer as a convenience, if there is
12085 room. */
12086 if (*left)
12087 **buffer = '\0';
12088 }
12089
12090 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
12091 *BUFFER, update *BUFFER to point to the new end of the buffer, and
12092 decrease *LEFT. Otherwise raise an error. */
12093
12094 static void
12095 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
12096 int len)
12097 {
12098 if (2 * len > *left)
12099 error (_("Packet too long for target."));
12100
12101 bin2hex (bytes, *buffer, len);
12102 *buffer += 2 * len;
12103 *left -= 2 * len;
12104
12105 /* NUL-terminate the buffer as a convenience, if there is
12106 room. */
12107 if (*left)
12108 **buffer = '\0';
12109 }
12110
12111 /* If *LEFT is large enough, convert VALUE to hex and add it to
12112 *BUFFER, update *BUFFER to point to the new end of the buffer, and
12113 decrease *LEFT. Otherwise raise an error. */
12114
12115 static void
12116 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
12117 {
12118 int len = hexnumlen (value);
12119
12120 if (len > *left)
12121 error (_("Packet too long for target."));
12122
12123 hexnumstr (*buffer, value);
12124 *buffer += len;
12125 *left -= len;
12126
12127 /* NUL-terminate the buffer as a convenience, if there is
12128 room. */
12129 if (*left)
12130 **buffer = '\0';
12131 }
12132
12133 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
12134 value, *REMOTE_ERRNO to the remote error number or zero if none
12135 was included, and *ATTACHMENT to point to the start of the annex
12136 if any. The length of the packet isn't needed here; there may
12137 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
12138
12139 Return 0 if the packet could be parsed, -1 if it could not. If
12140 -1 is returned, the other variables may not be initialized. */
12141
12142 static int
12143 remote_hostio_parse_result (const char *buffer, int *retcode,
12144 int *remote_errno, const char **attachment)
12145 {
12146 char *p, *p2;
12147
12148 *remote_errno = 0;
12149 *attachment = NULL;
12150
12151 if (buffer[0] != 'F')
12152 return -1;
12153
12154 errno = 0;
12155 *retcode = strtol (&buffer[1], &p, 16);
12156 if (errno != 0 || p == &buffer[1])
12157 return -1;
12158
12159 /* Check for ",errno". */
12160 if (*p == ',')
12161 {
12162 errno = 0;
12163 *remote_errno = strtol (p + 1, &p2, 16);
12164 if (errno != 0 || p + 1 == p2)
12165 return -1;
12166 p = p2;
12167 }
12168
12169 /* Check for ";attachment". If there is no attachment, the
12170 packet should end here. */
12171 if (*p == ';')
12172 {
12173 *attachment = p + 1;
12174 return 0;
12175 }
12176 else if (*p == '\0')
12177 return 0;
12178 else
12179 return -1;
12180 }
12181
12182 /* Send a prepared I/O packet to the target and read its response.
12183 The prepared packet is in the global RS->BUF before this function
12184 is called, and the answer is there when we return.
12185
12186 COMMAND_BYTES is the length of the request to send, which may include
12187 binary data. WHICH_PACKET is the packet configuration to check
12188 before attempting a packet. If an error occurs, *REMOTE_ERRNO
12189 is set to the error number and -1 is returned. Otherwise the value
12190 returned by the function is returned.
12191
12192 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
12193 attachment is expected; an error will be reported if there's a
12194 mismatch. If one is found, *ATTACHMENT will be set to point into
12195 the packet buffer and *ATTACHMENT_LEN will be set to the
12196 attachment's length. */
12197
12198 int
12199 remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
12200 int *remote_errno, const char **attachment,
12201 int *attachment_len)
12202 {
12203 struct remote_state *rs = get_remote_state ();
12204 int ret, bytes_read;
12205 const char *attachment_tmp;
12206
12207 if (packet_support (which_packet) == PACKET_DISABLE)
12208 {
12209 *remote_errno = FILEIO_ENOSYS;
12210 return -1;
12211 }
12212
12213 putpkt_binary (rs->buf.data (), command_bytes);
12214 bytes_read = getpkt_sane (&rs->buf, 0);
12215
12216 /* If it timed out, something is wrong. Don't try to parse the
12217 buffer. */
12218 if (bytes_read < 0)
12219 {
12220 *remote_errno = FILEIO_EINVAL;
12221 return -1;
12222 }
12223
12224 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
12225 {
12226 case PACKET_ERROR:
12227 *remote_errno = FILEIO_EINVAL;
12228 return -1;
12229 case PACKET_UNKNOWN:
12230 *remote_errno = FILEIO_ENOSYS;
12231 return -1;
12232 case PACKET_OK:
12233 break;
12234 }
12235
12236 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
12237 &attachment_tmp))
12238 {
12239 *remote_errno = FILEIO_EINVAL;
12240 return -1;
12241 }
12242
12243 /* Make sure we saw an attachment if and only if we expected one. */
12244 if ((attachment_tmp == NULL && attachment != NULL)
12245 || (attachment_tmp != NULL && attachment == NULL))
12246 {
12247 *remote_errno = FILEIO_EINVAL;
12248 return -1;
12249 }
12250
12251 /* If an attachment was found, it must point into the packet buffer;
12252 work out how many bytes there were. */
12253 if (attachment_tmp != NULL)
12254 {
12255 *attachment = attachment_tmp;
12256 *attachment_len = bytes_read - (*attachment - rs->buf.data ());
12257 }
12258
12259 return ret;
12260 }
12261
12262 /* See declaration.h. */
12263
12264 void
12265 readahead_cache::invalidate ()
12266 {
12267 this->fd = -1;
12268 }
12269
12270 /* See declaration.h. */
12271
12272 void
12273 readahead_cache::invalidate_fd (int fd)
12274 {
12275 if (this->fd == fd)
12276 this->fd = -1;
12277 }
12278
12279 /* Set the filesystem remote_hostio functions that take FILENAME
12280 arguments will use. Return 0 on success, or -1 if an error
12281 occurs (and set *REMOTE_ERRNO). */
12282
12283 int
12284 remote_target::remote_hostio_set_filesystem (struct inferior *inf,
12285 int *remote_errno)
12286 {
12287 struct remote_state *rs = get_remote_state ();
12288 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
12289 char *p = rs->buf.data ();
12290 int left = get_remote_packet_size () - 1;
12291 char arg[9];
12292 int ret;
12293
12294 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12295 return 0;
12296
12297 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
12298 return 0;
12299
12300 remote_buffer_add_string (&p, &left, "vFile:setfs:");
12301
12302 xsnprintf (arg, sizeof (arg), "%x", required_pid);
12303 remote_buffer_add_string (&p, &left, arg);
12304
12305 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
12306 remote_errno, NULL, NULL);
12307
12308 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12309 return 0;
12310
12311 if (ret == 0)
12312 rs->fs_pid = required_pid;
12313
12314 return ret;
12315 }
12316
12317 /* Implementation of to_fileio_open. */
12318
12319 int
12320 remote_target::remote_hostio_open (inferior *inf, const char *filename,
12321 int flags, int mode, int warn_if_slow,
12322 int *remote_errno)
12323 {
12324 struct remote_state *rs = get_remote_state ();
12325 char *p = rs->buf.data ();
12326 int left = get_remote_packet_size () - 1;
12327
12328 if (warn_if_slow)
12329 {
12330 static int warning_issued = 0;
12331
12332 gdb_printf (_("Reading %s from remote target...\n"),
12333 filename);
12334
12335 if (!warning_issued)
12336 {
12337 warning (_("File transfers from remote targets can be slow."
12338 " Use \"set sysroot\" to access files locally"
12339 " instead."));
12340 warning_issued = 1;
12341 }
12342 }
12343
12344 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12345 return -1;
12346
12347 remote_buffer_add_string (&p, &left, "vFile:open:");
12348
12349 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12350 strlen (filename));
12351 remote_buffer_add_string (&p, &left, ",");
12352
12353 remote_buffer_add_int (&p, &left, flags);
12354 remote_buffer_add_string (&p, &left, ",");
12355
12356 remote_buffer_add_int (&p, &left, mode);
12357
12358 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
12359 remote_errno, NULL, NULL);
12360 }
12361
12362 int
12363 remote_target::fileio_open (struct inferior *inf, const char *filename,
12364 int flags, int mode, int warn_if_slow,
12365 int *remote_errno)
12366 {
12367 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
12368 remote_errno);
12369 }
12370
12371 /* Implementation of to_fileio_pwrite. */
12372
12373 int
12374 remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
12375 ULONGEST offset, int *remote_errno)
12376 {
12377 struct remote_state *rs = get_remote_state ();
12378 char *p = rs->buf.data ();
12379 int left = get_remote_packet_size ();
12380 int out_len;
12381
12382 rs->readahead_cache.invalidate_fd (fd);
12383
12384 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
12385
12386 remote_buffer_add_int (&p, &left, fd);
12387 remote_buffer_add_string (&p, &left, ",");
12388
12389 remote_buffer_add_int (&p, &left, offset);
12390 remote_buffer_add_string (&p, &left, ",");
12391
12392 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
12393 (get_remote_packet_size ()
12394 - (p - rs->buf.data ())));
12395
12396 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
12397 remote_errno, NULL, NULL);
12398 }
12399
12400 int
12401 remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12402 ULONGEST offset, int *remote_errno)
12403 {
12404 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
12405 }
12406
12407 /* Helper for the implementation of to_fileio_pread. Read the file
12408 from the remote side with vFile:pread. */
12409
12410 int
12411 remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12412 ULONGEST offset, int *remote_errno)
12413 {
12414 struct remote_state *rs = get_remote_state ();
12415 char *p = rs->buf.data ();
12416 const char *attachment;
12417 int left = get_remote_packet_size ();
12418 int ret, attachment_len;
12419 int read_len;
12420
12421 remote_buffer_add_string (&p, &left, "vFile:pread:");
12422
12423 remote_buffer_add_int (&p, &left, fd);
12424 remote_buffer_add_string (&p, &left, ",");
12425
12426 remote_buffer_add_int (&p, &left, len);
12427 remote_buffer_add_string (&p, &left, ",");
12428
12429 remote_buffer_add_int (&p, &left, offset);
12430
12431 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
12432 remote_errno, &attachment,
12433 &attachment_len);
12434
12435 if (ret < 0)
12436 return ret;
12437
12438 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12439 read_buf, len);
12440 if (read_len != ret)
12441 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12442
12443 return ret;
12444 }
12445
12446 /* See declaration.h. */
12447
12448 int
12449 readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12450 ULONGEST offset)
12451 {
12452 if (this->fd == fd
12453 && this->offset <= offset
12454 && offset < this->offset + this->bufsize)
12455 {
12456 ULONGEST max = this->offset + this->bufsize;
12457
12458 if (offset + len > max)
12459 len = max - offset;
12460
12461 memcpy (read_buf, this->buf + offset - this->offset, len);
12462 return len;
12463 }
12464
12465 return 0;
12466 }
12467
12468 /* Implementation of to_fileio_pread. */
12469
12470 int
12471 remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12472 ULONGEST offset, int *remote_errno)
12473 {
12474 int ret;
12475 struct remote_state *rs = get_remote_state ();
12476 readahead_cache *cache = &rs->readahead_cache;
12477
12478 ret = cache->pread (fd, read_buf, len, offset);
12479 if (ret > 0)
12480 {
12481 cache->hit_count++;
12482
12483 remote_debug_printf ("readahead cache hit %s",
12484 pulongest (cache->hit_count));
12485 return ret;
12486 }
12487
12488 cache->miss_count++;
12489
12490 remote_debug_printf ("readahead cache miss %s",
12491 pulongest (cache->miss_count));
12492
12493 cache->fd = fd;
12494 cache->offset = offset;
12495 cache->bufsize = get_remote_packet_size ();
12496 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
12497
12498 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
12499 cache->offset, remote_errno);
12500 if (ret <= 0)
12501 {
12502 cache->invalidate_fd (fd);
12503 return ret;
12504 }
12505
12506 cache->bufsize = ret;
12507 return cache->pread (fd, read_buf, len, offset);
12508 }
12509
12510 int
12511 remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12512 ULONGEST offset, int *remote_errno)
12513 {
12514 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
12515 }
12516
12517 /* Implementation of to_fileio_close. */
12518
12519 int
12520 remote_target::remote_hostio_close (int fd, int *remote_errno)
12521 {
12522 struct remote_state *rs = get_remote_state ();
12523 char *p = rs->buf.data ();
12524 int left = get_remote_packet_size () - 1;
12525
12526 rs->readahead_cache.invalidate_fd (fd);
12527
12528 remote_buffer_add_string (&p, &left, "vFile:close:");
12529
12530 remote_buffer_add_int (&p, &left, fd);
12531
12532 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
12533 remote_errno, NULL, NULL);
12534 }
12535
12536 int
12537 remote_target::fileio_close (int fd, int *remote_errno)
12538 {
12539 return remote_hostio_close (fd, remote_errno);
12540 }
12541
12542 /* Implementation of to_fileio_unlink. */
12543
12544 int
12545 remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12546 int *remote_errno)
12547 {
12548 struct remote_state *rs = get_remote_state ();
12549 char *p = rs->buf.data ();
12550 int left = get_remote_packet_size () - 1;
12551
12552 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12553 return -1;
12554
12555 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12556
12557 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12558 strlen (filename));
12559
12560 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
12561 remote_errno, NULL, NULL);
12562 }
12563
12564 int
12565 remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12566 int *remote_errno)
12567 {
12568 return remote_hostio_unlink (inf, filename, remote_errno);
12569 }
12570
12571 /* Implementation of to_fileio_readlink. */
12572
12573 gdb::optional<std::string>
12574 remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12575 int *remote_errno)
12576 {
12577 struct remote_state *rs = get_remote_state ();
12578 char *p = rs->buf.data ();
12579 const char *attachment;
12580 int left = get_remote_packet_size ();
12581 int len, attachment_len;
12582 int read_len;
12583
12584 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12585 return {};
12586
12587 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12588
12589 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12590 strlen (filename));
12591
12592 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
12593 remote_errno, &attachment,
12594 &attachment_len);
12595
12596 if (len < 0)
12597 return {};
12598
12599 std::string ret (len, '\0');
12600
12601 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12602 (gdb_byte *) &ret[0], len);
12603 if (read_len != len)
12604 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12605
12606 return ret;
12607 }
12608
12609 /* Implementation of to_fileio_fstat. */
12610
12611 int
12612 remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
12613 {
12614 struct remote_state *rs = get_remote_state ();
12615 char *p = rs->buf.data ();
12616 int left = get_remote_packet_size ();
12617 int attachment_len, ret;
12618 const char *attachment;
12619 struct fio_stat fst;
12620 int read_len;
12621
12622 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12623
12624 remote_buffer_add_int (&p, &left, fd);
12625
12626 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
12627 remote_errno, &attachment,
12628 &attachment_len);
12629 if (ret < 0)
12630 {
12631 if (*remote_errno != FILEIO_ENOSYS)
12632 return ret;
12633
12634 /* Strictly we should return -1, ENOSYS here, but when
12635 "set sysroot remote:" was implemented in August 2008
12636 BFD's need for a stat function was sidestepped with
12637 this hack. This was not remedied until March 2015
12638 so we retain the previous behavior to avoid breaking
12639 compatibility.
12640
12641 Note that the memset is a March 2015 addition; older
12642 GDBs set st_size *and nothing else* so the structure
12643 would have garbage in all other fields. This might
12644 break something but retaining the previous behavior
12645 here would be just too wrong. */
12646
12647 memset (st, 0, sizeof (struct stat));
12648 st->st_size = INT_MAX;
12649 return 0;
12650 }
12651
12652 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12653 (gdb_byte *) &fst, sizeof (fst));
12654
12655 if (read_len != ret)
12656 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12657
12658 if (read_len != sizeof (fst))
12659 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12660 read_len, (int) sizeof (fst));
12661
12662 remote_fileio_to_host_stat (&fst, st);
12663
12664 return 0;
12665 }
12666
12667 /* Implementation of to_filesystem_is_local. */
12668
12669 bool
12670 remote_target::filesystem_is_local ()
12671 {
12672 /* Valgrind GDB presents itself as a remote target but works
12673 on the local filesystem: it does not implement remote get
12674 and users are not expected to set a sysroot. To handle
12675 this case we treat the remote filesystem as local if the
12676 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12677 does not support vFile:open. */
12678 if (gdb_sysroot == TARGET_SYSROOT_PREFIX)
12679 {
12680 enum packet_support ps = packet_support (PACKET_vFile_open);
12681
12682 if (ps == PACKET_SUPPORT_UNKNOWN)
12683 {
12684 int fd, remote_errno;
12685
12686 /* Try opening a file to probe support. The supplied
12687 filename is irrelevant, we only care about whether
12688 the stub recognizes the packet or not. */
12689 fd = remote_hostio_open (NULL, "just probing",
12690 FILEIO_O_RDONLY, 0700, 0,
12691 &remote_errno);
12692
12693 if (fd >= 0)
12694 remote_hostio_close (fd, &remote_errno);
12695
12696 ps = packet_support (PACKET_vFile_open);
12697 }
12698
12699 if (ps == PACKET_DISABLE)
12700 {
12701 static int warning_issued = 0;
12702
12703 if (!warning_issued)
12704 {
12705 warning (_("remote target does not support file"
12706 " transfer, attempting to access files"
12707 " from local filesystem."));
12708 warning_issued = 1;
12709 }
12710
12711 return true;
12712 }
12713 }
12714
12715 return false;
12716 }
12717
12718 static int
12719 remote_fileio_errno_to_host (int errnum)
12720 {
12721 switch (errnum)
12722 {
12723 case FILEIO_EPERM:
12724 return EPERM;
12725 case FILEIO_ENOENT:
12726 return ENOENT;
12727 case FILEIO_EINTR:
12728 return EINTR;
12729 case FILEIO_EIO:
12730 return EIO;
12731 case FILEIO_EBADF:
12732 return EBADF;
12733 case FILEIO_EACCES:
12734 return EACCES;
12735 case FILEIO_EFAULT:
12736 return EFAULT;
12737 case FILEIO_EBUSY:
12738 return EBUSY;
12739 case FILEIO_EEXIST:
12740 return EEXIST;
12741 case FILEIO_ENODEV:
12742 return ENODEV;
12743 case FILEIO_ENOTDIR:
12744 return ENOTDIR;
12745 case FILEIO_EISDIR:
12746 return EISDIR;
12747 case FILEIO_EINVAL:
12748 return EINVAL;
12749 case FILEIO_ENFILE:
12750 return ENFILE;
12751 case FILEIO_EMFILE:
12752 return EMFILE;
12753 case FILEIO_EFBIG:
12754 return EFBIG;
12755 case FILEIO_ENOSPC:
12756 return ENOSPC;
12757 case FILEIO_ESPIPE:
12758 return ESPIPE;
12759 case FILEIO_EROFS:
12760 return EROFS;
12761 case FILEIO_ENOSYS:
12762 return ENOSYS;
12763 case FILEIO_ENAMETOOLONG:
12764 return ENAMETOOLONG;
12765 }
12766 return -1;
12767 }
12768
12769 static char *
12770 remote_hostio_error (int errnum)
12771 {
12772 int host_error = remote_fileio_errno_to_host (errnum);
12773
12774 if (host_error == -1)
12775 error (_("Unknown remote I/O error %d"), errnum);
12776 else
12777 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12778 }
12779
12780 /* A RAII wrapper around a remote file descriptor. */
12781
12782 class scoped_remote_fd
12783 {
12784 public:
12785 scoped_remote_fd (remote_target *remote, int fd)
12786 : m_remote (remote), m_fd (fd)
12787 {
12788 }
12789
12790 ~scoped_remote_fd ()
12791 {
12792 if (m_fd != -1)
12793 {
12794 try
12795 {
12796 int remote_errno;
12797 m_remote->remote_hostio_close (m_fd, &remote_errno);
12798 }
12799 catch (...)
12800 {
12801 /* Swallow exception before it escapes the dtor. If
12802 something goes wrong, likely the connection is gone,
12803 and there's nothing else that can be done. */
12804 }
12805 }
12806 }
12807
12808 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12809
12810 /* Release ownership of the file descriptor, and return it. */
12811 ATTRIBUTE_UNUSED_RESULT int release () noexcept
12812 {
12813 int fd = m_fd;
12814 m_fd = -1;
12815 return fd;
12816 }
12817
12818 /* Return the owned file descriptor. */
12819 int get () const noexcept
12820 {
12821 return m_fd;
12822 }
12823
12824 private:
12825 /* The remote target. */
12826 remote_target *m_remote;
12827
12828 /* The owned remote I/O file descriptor. */
12829 int m_fd;
12830 };
12831
12832 void
12833 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12834 {
12835 remote_target *remote = get_current_remote_target ();
12836
12837 if (remote == nullptr)
12838 error (_("command can only be used with remote target"));
12839
12840 remote->remote_file_put (local_file, remote_file, from_tty);
12841 }
12842
12843 void
12844 remote_target::remote_file_put (const char *local_file, const char *remote_file,
12845 int from_tty)
12846 {
12847 int retcode, remote_errno, bytes, io_size;
12848 int bytes_in_buffer;
12849 int saw_eof;
12850 ULONGEST offset;
12851
12852 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12853 if (file == NULL)
12854 perror_with_name (local_file);
12855
12856 scoped_remote_fd fd
12857 (this, remote_hostio_open (NULL,
12858 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12859 | FILEIO_O_TRUNC),
12860 0700, 0, &remote_errno));
12861 if (fd.get () == -1)
12862 remote_hostio_error (remote_errno);
12863
12864 /* Send up to this many bytes at once. They won't all fit in the
12865 remote packet limit, so we'll transfer slightly fewer. */
12866 io_size = get_remote_packet_size ();
12867 gdb::byte_vector buffer (io_size);
12868
12869 bytes_in_buffer = 0;
12870 saw_eof = 0;
12871 offset = 0;
12872 while (bytes_in_buffer || !saw_eof)
12873 {
12874 if (!saw_eof)
12875 {
12876 bytes = fread (buffer.data () + bytes_in_buffer, 1,
12877 io_size - bytes_in_buffer,
12878 file.get ());
12879 if (bytes == 0)
12880 {
12881 if (ferror (file.get ()))
12882 error (_("Error reading %s."), local_file);
12883 else
12884 {
12885 /* EOF. Unless there is something still in the
12886 buffer from the last iteration, we are done. */
12887 saw_eof = 1;
12888 if (bytes_in_buffer == 0)
12889 break;
12890 }
12891 }
12892 }
12893 else
12894 bytes = 0;
12895
12896 bytes += bytes_in_buffer;
12897 bytes_in_buffer = 0;
12898
12899 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
12900 offset, &remote_errno);
12901
12902 if (retcode < 0)
12903 remote_hostio_error (remote_errno);
12904 else if (retcode == 0)
12905 error (_("Remote write of %d bytes returned 0!"), bytes);
12906 else if (retcode < bytes)
12907 {
12908 /* Short write. Save the rest of the read data for the next
12909 write. */
12910 bytes_in_buffer = bytes - retcode;
12911 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
12912 }
12913
12914 offset += retcode;
12915 }
12916
12917 if (remote_hostio_close (fd.release (), &remote_errno))
12918 remote_hostio_error (remote_errno);
12919
12920 if (from_tty)
12921 gdb_printf (_("Successfully sent file \"%s\".\n"), local_file);
12922 }
12923
12924 void
12925 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12926 {
12927 remote_target *remote = get_current_remote_target ();
12928
12929 if (remote == nullptr)
12930 error (_("command can only be used with remote target"));
12931
12932 remote->remote_file_get (remote_file, local_file, from_tty);
12933 }
12934
12935 void
12936 remote_target::remote_file_get (const char *remote_file, const char *local_file,
12937 int from_tty)
12938 {
12939 int remote_errno, bytes, io_size;
12940 ULONGEST offset;
12941
12942 scoped_remote_fd fd
12943 (this, remote_hostio_open (NULL,
12944 remote_file, FILEIO_O_RDONLY, 0, 0,
12945 &remote_errno));
12946 if (fd.get () == -1)
12947 remote_hostio_error (remote_errno);
12948
12949 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12950 if (file == NULL)
12951 perror_with_name (local_file);
12952
12953 /* Send up to this many bytes at once. They won't all fit in the
12954 remote packet limit, so we'll transfer slightly fewer. */
12955 io_size = get_remote_packet_size ();
12956 gdb::byte_vector buffer (io_size);
12957
12958 offset = 0;
12959 while (1)
12960 {
12961 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
12962 &remote_errno);
12963 if (bytes == 0)
12964 /* Success, but no bytes, means end-of-file. */
12965 break;
12966 if (bytes == -1)
12967 remote_hostio_error (remote_errno);
12968
12969 offset += bytes;
12970
12971 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
12972 if (bytes == 0)
12973 perror_with_name (local_file);
12974 }
12975
12976 if (remote_hostio_close (fd.release (), &remote_errno))
12977 remote_hostio_error (remote_errno);
12978
12979 if (from_tty)
12980 gdb_printf (_("Successfully fetched file \"%s\".\n"), remote_file);
12981 }
12982
12983 void
12984 remote_file_delete (const char *remote_file, int from_tty)
12985 {
12986 remote_target *remote = get_current_remote_target ();
12987
12988 if (remote == nullptr)
12989 error (_("command can only be used with remote target"));
12990
12991 remote->remote_file_delete (remote_file, from_tty);
12992 }
12993
12994 void
12995 remote_target::remote_file_delete (const char *remote_file, int from_tty)
12996 {
12997 int retcode, remote_errno;
12998
12999 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
13000 if (retcode == -1)
13001 remote_hostio_error (remote_errno);
13002
13003 if (from_tty)
13004 gdb_printf (_("Successfully deleted file \"%s\".\n"), remote_file);
13005 }
13006
13007 static void
13008 remote_put_command (const char *args, int from_tty)
13009 {
13010 if (args == NULL)
13011 error_no_arg (_("file to put"));
13012
13013 gdb_argv argv (args);
13014 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
13015 error (_("Invalid parameters to remote put"));
13016
13017 remote_file_put (argv[0], argv[1], from_tty);
13018 }
13019
13020 static void
13021 remote_get_command (const char *args, int from_tty)
13022 {
13023 if (args == NULL)
13024 error_no_arg (_("file to get"));
13025
13026 gdb_argv argv (args);
13027 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
13028 error (_("Invalid parameters to remote get"));
13029
13030 remote_file_get (argv[0], argv[1], from_tty);
13031 }
13032
13033 static void
13034 remote_delete_command (const char *args, int from_tty)
13035 {
13036 if (args == NULL)
13037 error_no_arg (_("file to delete"));
13038
13039 gdb_argv argv (args);
13040 if (argv[0] == NULL || argv[1] != NULL)
13041 error (_("Invalid parameters to remote delete"));
13042
13043 remote_file_delete (argv[0], from_tty);
13044 }
13045
13046 bool
13047 remote_target::can_execute_reverse ()
13048 {
13049 if (packet_support (PACKET_bs) == PACKET_ENABLE
13050 || packet_support (PACKET_bc) == PACKET_ENABLE)
13051 return true;
13052 else
13053 return false;
13054 }
13055
13056 bool
13057 remote_target::supports_non_stop ()
13058 {
13059 return true;
13060 }
13061
13062 bool
13063 remote_target::supports_disable_randomization ()
13064 {
13065 /* Only supported in extended mode. */
13066 return false;
13067 }
13068
13069 bool
13070 remote_target::supports_multi_process ()
13071 {
13072 struct remote_state *rs = get_remote_state ();
13073
13074 return remote_multi_process_p (rs);
13075 }
13076
13077 static int
13078 remote_supports_cond_tracepoints ()
13079 {
13080 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
13081 }
13082
13083 bool
13084 remote_target::supports_evaluation_of_breakpoint_conditions ()
13085 {
13086 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
13087 }
13088
13089 static int
13090 remote_supports_fast_tracepoints ()
13091 {
13092 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
13093 }
13094
13095 static int
13096 remote_supports_static_tracepoints ()
13097 {
13098 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
13099 }
13100
13101 static int
13102 remote_supports_install_in_trace ()
13103 {
13104 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
13105 }
13106
13107 bool
13108 remote_target::supports_enable_disable_tracepoint ()
13109 {
13110 return (packet_support (PACKET_EnableDisableTracepoints_feature)
13111 == PACKET_ENABLE);
13112 }
13113
13114 bool
13115 remote_target::supports_string_tracing ()
13116 {
13117 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
13118 }
13119
13120 bool
13121 remote_target::can_run_breakpoint_commands ()
13122 {
13123 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
13124 }
13125
13126 void
13127 remote_target::trace_init ()
13128 {
13129 struct remote_state *rs = get_remote_state ();
13130
13131 putpkt ("QTinit");
13132 remote_get_noisy_reply ();
13133 if (strcmp (rs->buf.data (), "OK") != 0)
13134 error (_("Target does not support this command."));
13135 }
13136
13137 /* Recursive routine to walk through command list including loops, and
13138 download packets for each command. */
13139
13140 void
13141 remote_target::remote_download_command_source (int num, ULONGEST addr,
13142 struct command_line *cmds)
13143 {
13144 struct remote_state *rs = get_remote_state ();
13145 struct command_line *cmd;
13146
13147 for (cmd = cmds; cmd; cmd = cmd->next)
13148 {
13149 QUIT; /* Allow user to bail out with ^C. */
13150 strcpy (rs->buf.data (), "QTDPsrc:");
13151 encode_source_string (num, addr, "cmd", cmd->line,
13152 rs->buf.data () + strlen (rs->buf.data ()),
13153 rs->buf.size () - strlen (rs->buf.data ()));
13154 putpkt (rs->buf);
13155 remote_get_noisy_reply ();
13156 if (strcmp (rs->buf.data (), "OK"))
13157 warning (_("Target does not support source download."));
13158
13159 if (cmd->control_type == while_control
13160 || cmd->control_type == while_stepping_control)
13161 {
13162 remote_download_command_source (num, addr, cmd->body_list_0.get ());
13163
13164 QUIT; /* Allow user to bail out with ^C. */
13165 strcpy (rs->buf.data (), "QTDPsrc:");
13166 encode_source_string (num, addr, "cmd", "end",
13167 rs->buf.data () + strlen (rs->buf.data ()),
13168 rs->buf.size () - strlen (rs->buf.data ()));
13169 putpkt (rs->buf);
13170 remote_get_noisy_reply ();
13171 if (strcmp (rs->buf.data (), "OK"))
13172 warning (_("Target does not support source download."));
13173 }
13174 }
13175 }
13176
13177 void
13178 remote_target::download_tracepoint (struct bp_location *loc)
13179 {
13180 CORE_ADDR tpaddr;
13181 char addrbuf[40];
13182 std::vector<std::string> tdp_actions;
13183 std::vector<std::string> stepping_actions;
13184 char *pkt;
13185 struct breakpoint *b = loc->owner;
13186 struct tracepoint *t = (struct tracepoint *) b;
13187 struct remote_state *rs = get_remote_state ();
13188 int ret;
13189 const char *err_msg = _("Tracepoint packet too large for target.");
13190 size_t size_left;
13191
13192 /* We use a buffer other than rs->buf because we'll build strings
13193 across multiple statements, and other statements in between could
13194 modify rs->buf. */
13195 gdb::char_vector buf (get_remote_packet_size ());
13196
13197 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
13198
13199 tpaddr = loc->address;
13200 strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR)));
13201 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
13202 b->number, addrbuf, /* address */
13203 (b->enable_state == bp_enabled ? 'E' : 'D'),
13204 t->step_count, t->pass_count);
13205
13206 if (ret < 0 || ret >= buf.size ())
13207 error ("%s", err_msg);
13208
13209 /* Fast tracepoints are mostly handled by the target, but we can
13210 tell the target how big of an instruction block should be moved
13211 around. */
13212 if (b->type == bp_fast_tracepoint)
13213 {
13214 /* Only test for support at download time; we may not know
13215 target capabilities at definition time. */
13216 if (remote_supports_fast_tracepoints ())
13217 {
13218 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
13219 NULL))
13220 {
13221 size_left = buf.size () - strlen (buf.data ());
13222 ret = snprintf (buf.data () + strlen (buf.data ()),
13223 size_left, ":F%x",
13224 gdb_insn_length (loc->gdbarch, tpaddr));
13225
13226 if (ret < 0 || ret >= size_left)
13227 error ("%s", err_msg);
13228 }
13229 else
13230 /* If it passed validation at definition but fails now,
13231 something is very wrong. */
13232 internal_error (__FILE__, __LINE__,
13233 _("Fast tracepoint not "
13234 "valid during download"));
13235 }
13236 else
13237 /* Fast tracepoints are functionally identical to regular
13238 tracepoints, so don't take lack of support as a reason to
13239 give up on the trace run. */
13240 warning (_("Target does not support fast tracepoints, "
13241 "downloading %d as regular tracepoint"), b->number);
13242 }
13243 else if (b->type == bp_static_tracepoint
13244 || b->type == bp_static_marker_tracepoint)
13245 {
13246 /* Only test for support at download time; we may not know
13247 target capabilities at definition time. */
13248 if (remote_supports_static_tracepoints ())
13249 {
13250 struct static_tracepoint_marker marker;
13251
13252 if (target_static_tracepoint_marker_at (tpaddr, &marker))
13253 {
13254 size_left = buf.size () - strlen (buf.data ());
13255 ret = snprintf (buf.data () + strlen (buf.data ()),
13256 size_left, ":S");
13257
13258 if (ret < 0 || ret >= size_left)
13259 error ("%s", err_msg);
13260 }
13261 else
13262 error (_("Static tracepoint not valid during download"));
13263 }
13264 else
13265 /* Fast tracepoints are functionally identical to regular
13266 tracepoints, so don't take lack of support as a reason
13267 to give up on the trace run. */
13268 error (_("Target does not support static tracepoints"));
13269 }
13270 /* If the tracepoint has a conditional, make it into an agent
13271 expression and append to the definition. */
13272 if (loc->cond)
13273 {
13274 /* Only test support at download time, we may not know target
13275 capabilities at definition time. */
13276 if (remote_supports_cond_tracepoints ())
13277 {
13278 agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
13279 loc->cond.get ());
13280
13281 size_left = buf.size () - strlen (buf.data ());
13282
13283 ret = snprintf (buf.data () + strlen (buf.data ()),
13284 size_left, ":X%x,", aexpr->len);
13285
13286 if (ret < 0 || ret >= size_left)
13287 error ("%s", err_msg);
13288
13289 size_left = buf.size () - strlen (buf.data ());
13290
13291 /* Two bytes to encode each aexpr byte, plus the terminating
13292 null byte. */
13293 if (aexpr->len * 2 + 1 > size_left)
13294 error ("%s", err_msg);
13295
13296 pkt = buf.data () + strlen (buf.data ());
13297
13298 for (int ndx = 0; ndx < aexpr->len; ++ndx)
13299 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
13300 *pkt = '\0';
13301 }
13302 else
13303 warning (_("Target does not support conditional tracepoints, "
13304 "ignoring tp %d cond"), b->number);
13305 }
13306
13307 if (b->commands || !default_collect.empty ())
13308 {
13309 size_left = buf.size () - strlen (buf.data ());
13310
13311 ret = snprintf (buf.data () + strlen (buf.data ()),
13312 size_left, "-");
13313
13314 if (ret < 0 || ret >= size_left)
13315 error ("%s", err_msg);
13316 }
13317
13318 putpkt (buf.data ());
13319 remote_get_noisy_reply ();
13320 if (strcmp (rs->buf.data (), "OK"))
13321 error (_("Target does not support tracepoints."));
13322
13323 /* do_single_steps (t); */
13324 for (auto action_it = tdp_actions.begin ();
13325 action_it != tdp_actions.end (); action_it++)
13326 {
13327 QUIT; /* Allow user to bail out with ^C. */
13328
13329 bool has_more = ((action_it + 1) != tdp_actions.end ()
13330 || !stepping_actions.empty ());
13331
13332 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
13333 b->number, addrbuf, /* address */
13334 action_it->c_str (),
13335 has_more ? '-' : 0);
13336
13337 if (ret < 0 || ret >= buf.size ())
13338 error ("%s", err_msg);
13339
13340 putpkt (buf.data ());
13341 remote_get_noisy_reply ();
13342 if (strcmp (rs->buf.data (), "OK"))
13343 error (_("Error on target while setting tracepoints."));
13344 }
13345
13346 for (auto action_it = stepping_actions.begin ();
13347 action_it != stepping_actions.end (); action_it++)
13348 {
13349 QUIT; /* Allow user to bail out with ^C. */
13350
13351 bool is_first = action_it == stepping_actions.begin ();
13352 bool has_more = (action_it + 1) != stepping_actions.end ();
13353
13354 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
13355 b->number, addrbuf, /* address */
13356 is_first ? "S" : "",
13357 action_it->c_str (),
13358 has_more ? "-" : "");
13359
13360 if (ret < 0 || ret >= buf.size ())
13361 error ("%s", err_msg);
13362
13363 putpkt (buf.data ());
13364 remote_get_noisy_reply ();
13365 if (strcmp (rs->buf.data (), "OK"))
13366 error (_("Error on target while setting tracepoints."));
13367 }
13368
13369 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
13370 {
13371 if (b->locspec != nullptr)
13372 {
13373 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13374
13375 if (ret < 0 || ret >= buf.size ())
13376 error ("%s", err_msg);
13377
13378 const char *str = b->locspec->to_string ();
13379 encode_source_string (b->number, loc->address, "at", str,
13380 buf.data () + strlen (buf.data ()),
13381 buf.size () - strlen (buf.data ()));
13382 putpkt (buf.data ());
13383 remote_get_noisy_reply ();
13384 if (strcmp (rs->buf.data (), "OK"))
13385 warning (_("Target does not support source download."));
13386 }
13387 if (b->cond_string)
13388 {
13389 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13390
13391 if (ret < 0 || ret >= buf.size ())
13392 error ("%s", err_msg);
13393
13394 encode_source_string (b->number, loc->address,
13395 "cond", b->cond_string.get (),
13396 buf.data () + strlen (buf.data ()),
13397 buf.size () - strlen (buf.data ()));
13398 putpkt (buf.data ());
13399 remote_get_noisy_reply ();
13400 if (strcmp (rs->buf.data (), "OK"))
13401 warning (_("Target does not support source download."));
13402 }
13403 remote_download_command_source (b->number, loc->address,
13404 breakpoint_commands (b));
13405 }
13406 }
13407
13408 bool
13409 remote_target::can_download_tracepoint ()
13410 {
13411 struct remote_state *rs = get_remote_state ();
13412 struct trace_status *ts;
13413 int status;
13414
13415 /* Don't try to install tracepoints until we've relocated our
13416 symbols, and fetched and merged the target's tracepoint list with
13417 ours. */
13418 if (rs->starting_up)
13419 return false;
13420
13421 ts = current_trace_status ();
13422 status = get_trace_status (ts);
13423
13424 if (status == -1 || !ts->running_known || !ts->running)
13425 return false;
13426
13427 /* If we are in a tracing experiment, but remote stub doesn't support
13428 installing tracepoint in trace, we have to return. */
13429 if (!remote_supports_install_in_trace ())
13430 return false;
13431
13432 return true;
13433 }
13434
13435
13436 void
13437 remote_target::download_trace_state_variable (const trace_state_variable &tsv)
13438 {
13439 struct remote_state *rs = get_remote_state ();
13440 char *p;
13441
13442 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
13443 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
13444 tsv.builtin);
13445 p = rs->buf.data () + strlen (rs->buf.data ());
13446 if ((p - rs->buf.data ()) + tsv.name.length () * 2
13447 >= get_remote_packet_size ())
13448 error (_("Trace state variable name too long for tsv definition packet"));
13449 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
13450 *p++ = '\0';
13451 putpkt (rs->buf);
13452 remote_get_noisy_reply ();
13453 if (rs->buf[0] == '\0')
13454 error (_("Target does not support this command."));
13455 if (strcmp (rs->buf.data (), "OK") != 0)
13456 error (_("Error on target while downloading trace state variable."));
13457 }
13458
13459 void
13460 remote_target::enable_tracepoint (struct bp_location *location)
13461 {
13462 struct remote_state *rs = get_remote_state ();
13463
13464 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
13465 location->owner->number,
13466 phex (location->address, sizeof (CORE_ADDR)));
13467 putpkt (rs->buf);
13468 remote_get_noisy_reply ();
13469 if (rs->buf[0] == '\0')
13470 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13471 if (strcmp (rs->buf.data (), "OK") != 0)
13472 error (_("Error on target while enabling tracepoint."));
13473 }
13474
13475 void
13476 remote_target::disable_tracepoint (struct bp_location *location)
13477 {
13478 struct remote_state *rs = get_remote_state ();
13479
13480 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
13481 location->owner->number,
13482 phex (location->address, sizeof (CORE_ADDR)));
13483 putpkt (rs->buf);
13484 remote_get_noisy_reply ();
13485 if (rs->buf[0] == '\0')
13486 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13487 if (strcmp (rs->buf.data (), "OK") != 0)
13488 error (_("Error on target while disabling tracepoint."));
13489 }
13490
13491 void
13492 remote_target::trace_set_readonly_regions ()
13493 {
13494 asection *s;
13495 bfd_size_type size;
13496 bfd_vma vma;
13497 int anysecs = 0;
13498 int offset = 0;
13499
13500 if (!current_program_space->exec_bfd ())
13501 return; /* No information to give. */
13502
13503 struct remote_state *rs = get_remote_state ();
13504
13505 strcpy (rs->buf.data (), "QTro");
13506 offset = strlen (rs->buf.data ());
13507 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
13508 {
13509 char tmp1[40], tmp2[40];
13510 int sec_length;
13511
13512 if ((s->flags & SEC_LOAD) == 0 ||
13513 /* (s->flags & SEC_CODE) == 0 || */
13514 (s->flags & SEC_READONLY) == 0)
13515 continue;
13516
13517 anysecs = 1;
13518 vma = bfd_section_vma (s);
13519 size = bfd_section_size (s);
13520 sprintf_vma (tmp1, vma);
13521 sprintf_vma (tmp2, vma + size);
13522 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
13523 if (offset + sec_length + 1 > rs->buf.size ())
13524 {
13525 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
13526 warning (_("\
13527 Too many sections for read-only sections definition packet."));
13528 break;
13529 }
13530 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
13531 tmp1, tmp2);
13532 offset += sec_length;
13533 }
13534 if (anysecs)
13535 {
13536 putpkt (rs->buf);
13537 getpkt (&rs->buf, 0);
13538 }
13539 }
13540
13541 void
13542 remote_target::trace_start ()
13543 {
13544 struct remote_state *rs = get_remote_state ();
13545
13546 putpkt ("QTStart");
13547 remote_get_noisy_reply ();
13548 if (rs->buf[0] == '\0')
13549 error (_("Target does not support this command."));
13550 if (strcmp (rs->buf.data (), "OK") != 0)
13551 error (_("Bogus reply from target: %s"), rs->buf.data ());
13552 }
13553
13554 int
13555 remote_target::get_trace_status (struct trace_status *ts)
13556 {
13557 /* Initialize it just to avoid a GCC false warning. */
13558 char *p = NULL;
13559 enum packet_result result;
13560 struct remote_state *rs = get_remote_state ();
13561
13562 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
13563 return -1;
13564
13565 /* FIXME we need to get register block size some other way. */
13566 trace_regblock_size
13567 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
13568
13569 putpkt ("qTStatus");
13570
13571 try
13572 {
13573 p = remote_get_noisy_reply ();
13574 }
13575 catch (const gdb_exception_error &ex)
13576 {
13577 if (ex.error != TARGET_CLOSE_ERROR)
13578 {
13579 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13580 return -1;
13581 }
13582 throw;
13583 }
13584
13585 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13586
13587 /* If the remote target doesn't do tracing, flag it. */
13588 if (result == PACKET_UNKNOWN)
13589 return -1;
13590
13591 /* We're working with a live target. */
13592 ts->filename = NULL;
13593
13594 if (*p++ != 'T')
13595 error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
13596
13597 /* Function 'parse_trace_status' sets default value of each field of
13598 'ts' at first, so we don't have to do it here. */
13599 parse_trace_status (p, ts);
13600
13601 return ts->running;
13602 }
13603
13604 void
13605 remote_target::get_tracepoint_status (struct breakpoint *bp,
13606 struct uploaded_tp *utp)
13607 {
13608 struct remote_state *rs = get_remote_state ();
13609 char *reply;
13610 struct tracepoint *tp = (struct tracepoint *) bp;
13611 size_t size = get_remote_packet_size ();
13612
13613 if (tp)
13614 {
13615 tp->hit_count = 0;
13616 tp->traceframe_usage = 0;
13617 for (bp_location *loc : tp->locations ())
13618 {
13619 /* If the tracepoint was never downloaded, don't go asking for
13620 any status. */
13621 if (tp->number_on_target == 0)
13622 continue;
13623 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
13624 phex_nz (loc->address, 0));
13625 putpkt (rs->buf);
13626 reply = remote_get_noisy_reply ();
13627 if (reply && *reply)
13628 {
13629 if (*reply == 'V')
13630 parse_tracepoint_status (reply + 1, bp, utp);
13631 }
13632 }
13633 }
13634 else if (utp)
13635 {
13636 utp->hit_count = 0;
13637 utp->traceframe_usage = 0;
13638 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
13639 phex_nz (utp->addr, 0));
13640 putpkt (rs->buf);
13641 reply = remote_get_noisy_reply ();
13642 if (reply && *reply)
13643 {
13644 if (*reply == 'V')
13645 parse_tracepoint_status (reply + 1, bp, utp);
13646 }
13647 }
13648 }
13649
13650 void
13651 remote_target::trace_stop ()
13652 {
13653 struct remote_state *rs = get_remote_state ();
13654
13655 putpkt ("QTStop");
13656 remote_get_noisy_reply ();
13657 if (rs->buf[0] == '\0')
13658 error (_("Target does not support this command."));
13659 if (strcmp (rs->buf.data (), "OK") != 0)
13660 error (_("Bogus reply from target: %s"), rs->buf.data ());
13661 }
13662
13663 int
13664 remote_target::trace_find (enum trace_find_type type, int num,
13665 CORE_ADDR addr1, CORE_ADDR addr2,
13666 int *tpp)
13667 {
13668 struct remote_state *rs = get_remote_state ();
13669 char *endbuf = rs->buf.data () + get_remote_packet_size ();
13670 char *p, *reply;
13671 int target_frameno = -1, target_tracept = -1;
13672
13673 /* Lookups other than by absolute frame number depend on the current
13674 trace selected, so make sure it is correct on the remote end
13675 first. */
13676 if (type != tfind_number)
13677 set_remote_traceframe ();
13678
13679 p = rs->buf.data ();
13680 strcpy (p, "QTFrame:");
13681 p = strchr (p, '\0');
13682 switch (type)
13683 {
13684 case tfind_number:
13685 xsnprintf (p, endbuf - p, "%x", num);
13686 break;
13687 case tfind_pc:
13688 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
13689 break;
13690 case tfind_tp:
13691 xsnprintf (p, endbuf - p, "tdp:%x", num);
13692 break;
13693 case tfind_range:
13694 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13695 phex_nz (addr2, 0));
13696 break;
13697 case tfind_outside:
13698 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13699 phex_nz (addr2, 0));
13700 break;
13701 default:
13702 error (_("Unknown trace find type %d"), type);
13703 }
13704
13705 putpkt (rs->buf);
13706 reply = remote_get_noisy_reply ();
13707 if (*reply == '\0')
13708 error (_("Target does not support this command."));
13709
13710 while (reply && *reply)
13711 switch (*reply)
13712 {
13713 case 'F':
13714 p = ++reply;
13715 target_frameno = (int) strtol (p, &reply, 16);
13716 if (reply == p)
13717 error (_("Unable to parse trace frame number"));
13718 /* Don't update our remote traceframe number cache on failure
13719 to select a remote traceframe. */
13720 if (target_frameno == -1)
13721 return -1;
13722 break;
13723 case 'T':
13724 p = ++reply;
13725 target_tracept = (int) strtol (p, &reply, 16);
13726 if (reply == p)
13727 error (_("Unable to parse tracepoint number"));
13728 break;
13729 case 'O': /* "OK"? */
13730 if (reply[1] == 'K' && reply[2] == '\0')
13731 reply += 2;
13732 else
13733 error (_("Bogus reply from target: %s"), reply);
13734 break;
13735 default:
13736 error (_("Bogus reply from target: %s"), reply);
13737 }
13738 if (tpp)
13739 *tpp = target_tracept;
13740
13741 rs->remote_traceframe_number = target_frameno;
13742 return target_frameno;
13743 }
13744
13745 bool
13746 remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
13747 {
13748 struct remote_state *rs = get_remote_state ();
13749 char *reply;
13750 ULONGEST uval;
13751
13752 set_remote_traceframe ();
13753
13754 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
13755 putpkt (rs->buf);
13756 reply = remote_get_noisy_reply ();
13757 if (reply && *reply)
13758 {
13759 if (*reply == 'V')
13760 {
13761 unpack_varlen_hex (reply + 1, &uval);
13762 *val = (LONGEST) uval;
13763 return true;
13764 }
13765 }
13766 return false;
13767 }
13768
13769 int
13770 remote_target::save_trace_data (const char *filename)
13771 {
13772 struct remote_state *rs = get_remote_state ();
13773 char *p, *reply;
13774
13775 p = rs->buf.data ();
13776 strcpy (p, "QTSave:");
13777 p += strlen (p);
13778 if ((p - rs->buf.data ()) + strlen (filename) * 2
13779 >= get_remote_packet_size ())
13780 error (_("Remote file name too long for trace save packet"));
13781 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
13782 *p++ = '\0';
13783 putpkt (rs->buf);
13784 reply = remote_get_noisy_reply ();
13785 if (*reply == '\0')
13786 error (_("Target does not support this command."));
13787 if (strcmp (reply, "OK") != 0)
13788 error (_("Bogus reply from target: %s"), reply);
13789 return 0;
13790 }
13791
13792 /* This is basically a memory transfer, but needs to be its own packet
13793 because we don't know how the target actually organizes its trace
13794 memory, plus we want to be able to ask for as much as possible, but
13795 not be unhappy if we don't get as much as we ask for. */
13796
13797 LONGEST
13798 remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
13799 {
13800 struct remote_state *rs = get_remote_state ();
13801 char *reply;
13802 char *p;
13803 int rslt;
13804
13805 p = rs->buf.data ();
13806 strcpy (p, "qTBuffer:");
13807 p += strlen (p);
13808 p += hexnumstr (p, offset);
13809 *p++ = ',';
13810 p += hexnumstr (p, len);
13811 *p++ = '\0';
13812
13813 putpkt (rs->buf);
13814 reply = remote_get_noisy_reply ();
13815 if (reply && *reply)
13816 {
13817 /* 'l' by itself means we're at the end of the buffer and
13818 there is nothing more to get. */
13819 if (*reply == 'l')
13820 return 0;
13821
13822 /* Convert the reply into binary. Limit the number of bytes to
13823 convert according to our passed-in buffer size, rather than
13824 what was returned in the packet; if the target is
13825 unexpectedly generous and gives us a bigger reply than we
13826 asked for, we don't want to crash. */
13827 rslt = hex2bin (reply, buf, len);
13828 return rslt;
13829 }
13830
13831 /* Something went wrong, flag as an error. */
13832 return -1;
13833 }
13834
13835 void
13836 remote_target::set_disconnected_tracing (int val)
13837 {
13838 struct remote_state *rs = get_remote_state ();
13839
13840 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
13841 {
13842 char *reply;
13843
13844 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13845 "QTDisconnected:%x", val);
13846 putpkt (rs->buf);
13847 reply = remote_get_noisy_reply ();
13848 if (*reply == '\0')
13849 error (_("Target does not support this command."));
13850 if (strcmp (reply, "OK") != 0)
13851 error (_("Bogus reply from target: %s"), reply);
13852 }
13853 else if (val)
13854 warning (_("Target does not support disconnected tracing."));
13855 }
13856
13857 int
13858 remote_target::core_of_thread (ptid_t ptid)
13859 {
13860 thread_info *info = find_thread_ptid (this, ptid);
13861
13862 if (info != NULL && info->priv != NULL)
13863 return get_remote_thread_info (info)->core;
13864
13865 return -1;
13866 }
13867
13868 void
13869 remote_target::set_circular_trace_buffer (int val)
13870 {
13871 struct remote_state *rs = get_remote_state ();
13872 char *reply;
13873
13874 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13875 "QTBuffer:circular:%x", val);
13876 putpkt (rs->buf);
13877 reply = remote_get_noisy_reply ();
13878 if (*reply == '\0')
13879 error (_("Target does not support this command."));
13880 if (strcmp (reply, "OK") != 0)
13881 error (_("Bogus reply from target: %s"), reply);
13882 }
13883
13884 traceframe_info_up
13885 remote_target::traceframe_info ()
13886 {
13887 gdb::optional<gdb::char_vector> text
13888 = target_read_stralloc (current_inferior ()->top_target (),
13889 TARGET_OBJECT_TRACEFRAME_INFO,
13890 NULL);
13891 if (text)
13892 return parse_traceframe_info (text->data ());
13893
13894 return NULL;
13895 }
13896
13897 /* Handle the qTMinFTPILen packet. Returns the minimum length of
13898 instruction on which a fast tracepoint may be placed. Returns -1
13899 if the packet is not supported, and 0 if the minimum instruction
13900 length is unknown. */
13901
13902 int
13903 remote_target::get_min_fast_tracepoint_insn_len ()
13904 {
13905 struct remote_state *rs = get_remote_state ();
13906 char *reply;
13907
13908 /* If we're not debugging a process yet, the IPA can't be
13909 loaded. */
13910 if (!target_has_execution ())
13911 return 0;
13912
13913 /* Make sure the remote is pointing at the right process. */
13914 set_general_process ();
13915
13916 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
13917 putpkt (rs->buf);
13918 reply = remote_get_noisy_reply ();
13919 if (*reply == '\0')
13920 return -1;
13921 else
13922 {
13923 ULONGEST min_insn_len;
13924
13925 unpack_varlen_hex (reply, &min_insn_len);
13926
13927 return (int) min_insn_len;
13928 }
13929 }
13930
13931 void
13932 remote_target::set_trace_buffer_size (LONGEST val)
13933 {
13934 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13935 {
13936 struct remote_state *rs = get_remote_state ();
13937 char *buf = rs->buf.data ();
13938 char *endbuf = buf + get_remote_packet_size ();
13939 enum packet_result result;
13940
13941 gdb_assert (val >= 0 || val == -1);
13942 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13943 /* Send -1 as literal "-1" to avoid host size dependency. */
13944 if (val < 0)
13945 {
13946 *buf++ = '-';
13947 buf += hexnumstr (buf, (ULONGEST) -val);
13948 }
13949 else
13950 buf += hexnumstr (buf, (ULONGEST) val);
13951
13952 putpkt (rs->buf);
13953 remote_get_noisy_reply ();
13954 result = packet_ok (rs->buf,
13955 &remote_protocol_packets[PACKET_QTBuffer_size]);
13956
13957 if (result != PACKET_OK)
13958 warning (_("Bogus reply from target: %s"), rs->buf.data ());
13959 }
13960 }
13961
13962 bool
13963 remote_target::set_trace_notes (const char *user, const char *notes,
13964 const char *stop_notes)
13965 {
13966 struct remote_state *rs = get_remote_state ();
13967 char *reply;
13968 char *buf = rs->buf.data ();
13969 char *endbuf = buf + get_remote_packet_size ();
13970 int nbytes;
13971
13972 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13973 if (user)
13974 {
13975 buf += xsnprintf (buf, endbuf - buf, "user:");
13976 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13977 buf += 2 * nbytes;
13978 *buf++ = ';';
13979 }
13980 if (notes)
13981 {
13982 buf += xsnprintf (buf, endbuf - buf, "notes:");
13983 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13984 buf += 2 * nbytes;
13985 *buf++ = ';';
13986 }
13987 if (stop_notes)
13988 {
13989 buf += xsnprintf (buf, endbuf - buf, "tstop:");
13990 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13991 buf += 2 * nbytes;
13992 *buf++ = ';';
13993 }
13994 /* Ensure the buffer is terminated. */
13995 *buf = '\0';
13996
13997 putpkt (rs->buf);
13998 reply = remote_get_noisy_reply ();
13999 if (*reply == '\0')
14000 return false;
14001
14002 if (strcmp (reply, "OK") != 0)
14003 error (_("Bogus reply from target: %s"), reply);
14004
14005 return true;
14006 }
14007
14008 bool
14009 remote_target::use_agent (bool use)
14010 {
14011 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
14012 {
14013 struct remote_state *rs = get_remote_state ();
14014
14015 /* If the stub supports QAgent. */
14016 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
14017 putpkt (rs->buf);
14018 getpkt (&rs->buf, 0);
14019
14020 if (strcmp (rs->buf.data (), "OK") == 0)
14021 {
14022 ::use_agent = use;
14023 return true;
14024 }
14025 }
14026
14027 return false;
14028 }
14029
14030 bool
14031 remote_target::can_use_agent ()
14032 {
14033 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
14034 }
14035
14036 struct btrace_target_info
14037 {
14038 /* The ptid of the traced thread. */
14039 ptid_t ptid;
14040
14041 /* The obtained branch trace configuration. */
14042 struct btrace_config conf;
14043 };
14044
14045 /* Reset our idea of our target's btrace configuration. */
14046
14047 static void
14048 remote_btrace_reset (remote_state *rs)
14049 {
14050 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
14051 }
14052
14053 /* Synchronize the configuration with the target. */
14054
14055 void
14056 remote_target::btrace_sync_conf (const btrace_config *conf)
14057 {
14058 struct packet_config *packet;
14059 struct remote_state *rs;
14060 char *buf, *pos, *endbuf;
14061
14062 rs = get_remote_state ();
14063 buf = rs->buf.data ();
14064 endbuf = buf + get_remote_packet_size ();
14065
14066 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
14067 if (packet_config_support (packet) == PACKET_ENABLE
14068 && conf->bts.size != rs->btrace_config.bts.size)
14069 {
14070 pos = buf;
14071 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
14072 conf->bts.size);
14073
14074 putpkt (buf);
14075 getpkt (&rs->buf, 0);
14076
14077 if (packet_ok (buf, packet) == PACKET_ERROR)
14078 {
14079 if (buf[0] == 'E' && buf[1] == '.')
14080 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
14081 else
14082 error (_("Failed to configure the BTS buffer size."));
14083 }
14084
14085 rs->btrace_config.bts.size = conf->bts.size;
14086 }
14087
14088 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
14089 if (packet_config_support (packet) == PACKET_ENABLE
14090 && conf->pt.size != rs->btrace_config.pt.size)
14091 {
14092 pos = buf;
14093 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
14094 conf->pt.size);
14095
14096 putpkt (buf);
14097 getpkt (&rs->buf, 0);
14098
14099 if (packet_ok (buf, packet) == PACKET_ERROR)
14100 {
14101 if (buf[0] == 'E' && buf[1] == '.')
14102 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
14103 else
14104 error (_("Failed to configure the trace buffer size."));
14105 }
14106
14107 rs->btrace_config.pt.size = conf->pt.size;
14108 }
14109 }
14110
14111 /* Read TP's btrace configuration from the target and store it into CONF. */
14112
14113 static void
14114 btrace_read_config (thread_info *tp, struct btrace_config *conf)
14115 {
14116 /* target_read_stralloc relies on INFERIOR_PTID. */
14117 scoped_restore_current_thread restore_thread;
14118 switch_to_thread (tp);
14119
14120 gdb::optional<gdb::char_vector> xml
14121 = target_read_stralloc (current_inferior ()->top_target (),
14122 TARGET_OBJECT_BTRACE_CONF, "");
14123 if (xml)
14124 parse_xml_btrace_conf (conf, xml->data ());
14125 }
14126
14127 /* Maybe reopen target btrace. */
14128
14129 void
14130 remote_target::remote_btrace_maybe_reopen ()
14131 {
14132 struct remote_state *rs = get_remote_state ();
14133 int btrace_target_pushed = 0;
14134 #if !defined (HAVE_LIBIPT)
14135 int warned = 0;
14136 #endif
14137
14138 /* Don't bother walking the entirety of the remote thread list when
14139 we know the feature isn't supported by the remote. */
14140 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
14141 return;
14142
14143 for (thread_info *tp : all_non_exited_threads (this))
14144 {
14145 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
14146 btrace_read_config (tp, &rs->btrace_config);
14147
14148 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
14149 continue;
14150
14151 #if !defined (HAVE_LIBIPT)
14152 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
14153 {
14154 if (!warned)
14155 {
14156 warned = 1;
14157 warning (_("Target is recording using Intel Processor Trace "
14158 "but support was disabled at compile time."));
14159 }
14160
14161 continue;
14162 }
14163 #endif /* !defined (HAVE_LIBIPT) */
14164
14165 /* Push target, once, but before anything else happens. This way our
14166 changes to the threads will be cleaned up by unpushing the target
14167 in case btrace_read_config () throws. */
14168 if (!btrace_target_pushed)
14169 {
14170 btrace_target_pushed = 1;
14171 record_btrace_push_target ();
14172 gdb_printf (_("Target is recording using %s.\n"),
14173 btrace_format_string (rs->btrace_config.format));
14174 }
14175
14176 tp->btrace.target = XCNEW (struct btrace_target_info);
14177 tp->btrace.target->ptid = tp->ptid;
14178 tp->btrace.target->conf = rs->btrace_config;
14179 }
14180 }
14181
14182 /* Enable branch tracing. */
14183
14184 struct btrace_target_info *
14185 remote_target::enable_btrace (thread_info *tp,
14186 const struct btrace_config *conf)
14187 {
14188 struct btrace_target_info *tinfo = NULL;
14189 struct packet_config *packet = NULL;
14190 struct remote_state *rs = get_remote_state ();
14191 char *buf = rs->buf.data ();
14192 char *endbuf = buf + get_remote_packet_size ();
14193
14194 switch (conf->format)
14195 {
14196 case BTRACE_FORMAT_BTS:
14197 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
14198 break;
14199
14200 case BTRACE_FORMAT_PT:
14201 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
14202 break;
14203 }
14204
14205 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
14206 error (_("Target does not support branch tracing."));
14207
14208 btrace_sync_conf (conf);
14209
14210 ptid_t ptid = tp->ptid;
14211 set_general_thread (ptid);
14212
14213 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14214 putpkt (rs->buf);
14215 getpkt (&rs->buf, 0);
14216
14217 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14218 {
14219 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14220 error (_("Could not enable branch tracing for %s: %s"),
14221 target_pid_to_str (ptid).c_str (), &rs->buf[2]);
14222 else
14223 error (_("Could not enable branch tracing for %s."),
14224 target_pid_to_str (ptid).c_str ());
14225 }
14226
14227 tinfo = XCNEW (struct btrace_target_info);
14228 tinfo->ptid = ptid;
14229
14230 /* If we fail to read the configuration, we lose some information, but the
14231 tracing itself is not impacted. */
14232 try
14233 {
14234 btrace_read_config (tp, &tinfo->conf);
14235 }
14236 catch (const gdb_exception_error &err)
14237 {
14238 if (err.message != NULL)
14239 warning ("%s", err.what ());
14240 }
14241
14242 return tinfo;
14243 }
14244
14245 /* Disable branch tracing. */
14246
14247 void
14248 remote_target::disable_btrace (struct btrace_target_info *tinfo)
14249 {
14250 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
14251 struct remote_state *rs = get_remote_state ();
14252 char *buf = rs->buf.data ();
14253 char *endbuf = buf + get_remote_packet_size ();
14254
14255 if (packet_config_support (packet) != PACKET_ENABLE)
14256 error (_("Target does not support branch tracing."));
14257
14258 set_general_thread (tinfo->ptid);
14259
14260 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14261 putpkt (rs->buf);
14262 getpkt (&rs->buf, 0);
14263
14264 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14265 {
14266 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14267 error (_("Could not disable branch tracing for %s: %s"),
14268 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
14269 else
14270 error (_("Could not disable branch tracing for %s."),
14271 target_pid_to_str (tinfo->ptid).c_str ());
14272 }
14273
14274 xfree (tinfo);
14275 }
14276
14277 /* Teardown branch tracing. */
14278
14279 void
14280 remote_target::teardown_btrace (struct btrace_target_info *tinfo)
14281 {
14282 /* We must not talk to the target during teardown. */
14283 xfree (tinfo);
14284 }
14285
14286 /* Read the branch trace. */
14287
14288 enum btrace_error
14289 remote_target::read_btrace (struct btrace_data *btrace,
14290 struct btrace_target_info *tinfo,
14291 enum btrace_read_type type)
14292 {
14293 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
14294 const char *annex;
14295
14296 if (packet_config_support (packet) != PACKET_ENABLE)
14297 error (_("Target does not support branch tracing."));
14298
14299 #if !defined(HAVE_LIBEXPAT)
14300 error (_("Cannot process branch tracing result. XML parsing not supported."));
14301 #endif
14302
14303 switch (type)
14304 {
14305 case BTRACE_READ_ALL:
14306 annex = "all";
14307 break;
14308 case BTRACE_READ_NEW:
14309 annex = "new";
14310 break;
14311 case BTRACE_READ_DELTA:
14312 annex = "delta";
14313 break;
14314 default:
14315 internal_error (__FILE__, __LINE__,
14316 _("Bad branch tracing read type: %u."),
14317 (unsigned int) type);
14318 }
14319
14320 gdb::optional<gdb::char_vector> xml
14321 = target_read_stralloc (current_inferior ()->top_target (),
14322 TARGET_OBJECT_BTRACE, annex);
14323 if (!xml)
14324 return BTRACE_ERR_UNKNOWN;
14325
14326 parse_xml_btrace (btrace, xml->data ());
14327
14328 return BTRACE_ERR_NONE;
14329 }
14330
14331 const struct btrace_config *
14332 remote_target::btrace_conf (const struct btrace_target_info *tinfo)
14333 {
14334 return &tinfo->conf;
14335 }
14336
14337 bool
14338 remote_target::augmented_libraries_svr4_read ()
14339 {
14340 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
14341 == PACKET_ENABLE);
14342 }
14343
14344 /* Implementation of to_load. */
14345
14346 void
14347 remote_target::load (const char *name, int from_tty)
14348 {
14349 generic_load (name, from_tty);
14350 }
14351
14352 /* Accepts an integer PID; returns a string representing a file that
14353 can be opened on the remote side to get the symbols for the child
14354 process. Returns NULL if the operation is not supported. */
14355
14356 const char *
14357 remote_target::pid_to_exec_file (int pid)
14358 {
14359 static gdb::optional<gdb::char_vector> filename;
14360 char *annex = NULL;
14361
14362 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
14363 return NULL;
14364
14365 inferior *inf = find_inferior_pid (this, pid);
14366 if (inf == NULL)
14367 internal_error (__FILE__, __LINE__,
14368 _("not currently attached to process %d"), pid);
14369
14370 if (!inf->fake_pid_p)
14371 {
14372 const int annex_size = 9;
14373
14374 annex = (char *) alloca (annex_size);
14375 xsnprintf (annex, annex_size, "%x", pid);
14376 }
14377
14378 filename = target_read_stralloc (current_inferior ()->top_target (),
14379 TARGET_OBJECT_EXEC_FILE, annex);
14380
14381 return filename ? filename->data () : nullptr;
14382 }
14383
14384 /* Implement the to_can_do_single_step target_ops method. */
14385
14386 int
14387 remote_target::can_do_single_step ()
14388 {
14389 /* We can only tell whether target supports single step or not by
14390 supported s and S vCont actions if the stub supports vContSupported
14391 feature. If the stub doesn't support vContSupported feature,
14392 we have conservatively to think target doesn't supports single
14393 step. */
14394 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
14395 {
14396 struct remote_state *rs = get_remote_state ();
14397
14398 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14399 remote_vcont_probe ();
14400
14401 return rs->supports_vCont.s && rs->supports_vCont.S;
14402 }
14403 else
14404 return 0;
14405 }
14406
14407 /* Implementation of the to_execution_direction method for the remote
14408 target. */
14409
14410 enum exec_direction_kind
14411 remote_target::execution_direction ()
14412 {
14413 struct remote_state *rs = get_remote_state ();
14414
14415 return rs->last_resume_exec_dir;
14416 }
14417
14418 /* Return pointer to the thread_info struct which corresponds to
14419 THREAD_HANDLE (having length HANDLE_LEN). */
14420
14421 thread_info *
14422 remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
14423 int handle_len,
14424 inferior *inf)
14425 {
14426 for (thread_info *tp : all_non_exited_threads (this))
14427 {
14428 remote_thread_info *priv = get_remote_thread_info (tp);
14429
14430 if (tp->inf == inf && priv != NULL)
14431 {
14432 if (handle_len != priv->thread_handle.size ())
14433 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
14434 handle_len, priv->thread_handle.size ());
14435 if (memcmp (thread_handle, priv->thread_handle.data (),
14436 handle_len) == 0)
14437 return tp;
14438 }
14439 }
14440
14441 return NULL;
14442 }
14443
14444 gdb::byte_vector
14445 remote_target::thread_info_to_thread_handle (struct thread_info *tp)
14446 {
14447 remote_thread_info *priv = get_remote_thread_info (tp);
14448 return priv->thread_handle;
14449 }
14450
14451 bool
14452 remote_target::can_async_p ()
14453 {
14454 /* This flag should be checked in the common target.c code. */
14455 gdb_assert (target_async_permitted);
14456
14457 /* We're async whenever the serial device can. */
14458 struct remote_state *rs = get_remote_state ();
14459 return serial_can_async_p (rs->remote_desc);
14460 }
14461
14462 bool
14463 remote_target::is_async_p ()
14464 {
14465 /* We're async whenever the serial device is. */
14466 struct remote_state *rs = get_remote_state ();
14467 return serial_is_async_p (rs->remote_desc);
14468 }
14469
14470 /* Pass the SERIAL event on and up to the client. One day this code
14471 will be able to delay notifying the client of an event until the
14472 point where an entire packet has been received. */
14473
14474 static serial_event_ftype remote_async_serial_handler;
14475
14476 static void
14477 remote_async_serial_handler (struct serial *scb, void *context)
14478 {
14479 /* Don't propogate error information up to the client. Instead let
14480 the client find out about the error by querying the target. */
14481 inferior_event_handler (INF_REG_EVENT);
14482 }
14483
14484 static void
14485 remote_async_inferior_event_handler (gdb_client_data data)
14486 {
14487 inferior_event_handler (INF_REG_EVENT);
14488 }
14489
14490 int
14491 remote_target::async_wait_fd ()
14492 {
14493 struct remote_state *rs = get_remote_state ();
14494 return rs->remote_desc->fd;
14495 }
14496
14497 void
14498 remote_target::async (bool enable)
14499 {
14500 struct remote_state *rs = get_remote_state ();
14501
14502 if (enable)
14503 {
14504 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
14505
14506 /* If there are pending events in the stop reply queue tell the
14507 event loop to process them. */
14508 if (!rs->stop_reply_queue.empty ())
14509 mark_async_event_handler (rs->remote_async_inferior_event_token);
14510 /* For simplicity, below we clear the pending events token
14511 without remembering whether it is marked, so here we always
14512 mark it. If there's actually no pending notification to
14513 process, this ends up being a no-op (other than a spurious
14514 event-loop wakeup). */
14515 if (target_is_non_stop_p ())
14516 mark_async_event_handler (rs->notif_state->get_pending_events_token);
14517 }
14518 else
14519 {
14520 serial_async (rs->remote_desc, NULL, NULL);
14521 /* If the core is disabling async, it doesn't want to be
14522 disturbed with target events. Clear all async event sources
14523 too. */
14524 clear_async_event_handler (rs->remote_async_inferior_event_token);
14525 if (target_is_non_stop_p ())
14526 clear_async_event_handler (rs->notif_state->get_pending_events_token);
14527 }
14528 }
14529
14530 /* Implementation of the to_thread_events method. */
14531
14532 void
14533 remote_target::thread_events (int enable)
14534 {
14535 struct remote_state *rs = get_remote_state ();
14536 size_t size = get_remote_packet_size ();
14537
14538 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14539 return;
14540
14541 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
14542 putpkt (rs->buf);
14543 getpkt (&rs->buf, 0);
14544
14545 switch (packet_ok (rs->buf,
14546 &remote_protocol_packets[PACKET_QThreadEvents]))
14547 {
14548 case PACKET_OK:
14549 if (strcmp (rs->buf.data (), "OK") != 0)
14550 error (_("Remote refused setting thread events: %s"), rs->buf.data ());
14551 break;
14552 case PACKET_ERROR:
14553 warning (_("Remote failure reply: %s"), rs->buf.data ());
14554 break;
14555 case PACKET_UNKNOWN:
14556 break;
14557 }
14558 }
14559
14560 static void
14561 show_remote_cmd (const char *args, int from_tty)
14562 {
14563 /* We can't just use cmd_show_list here, because we want to skip
14564 the redundant "show remote Z-packet" and the legacy aliases. */
14565 struct cmd_list_element *list = remote_show_cmdlist;
14566 struct ui_out *uiout = current_uiout;
14567
14568 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
14569 for (; list != NULL; list = list->next)
14570 if (strcmp (list->name, "Z-packet") == 0)
14571 continue;
14572 else if (list->type == not_set_cmd)
14573 /* Alias commands are exactly like the original, except they
14574 don't have the normal type. */
14575 continue;
14576 else
14577 {
14578 ui_out_emit_tuple option_emitter (uiout, "option");
14579
14580 uiout->field_string ("name", list->name);
14581 uiout->text (": ");
14582 if (list->type == show_cmd)
14583 do_show_command (NULL, from_tty, list);
14584 else
14585 cmd_func (list, NULL, from_tty);
14586 }
14587 }
14588
14589
14590 /* Function to be called whenever a new objfile (shlib) is detected. */
14591 static void
14592 remote_new_objfile (struct objfile *objfile)
14593 {
14594 /* The objfile change happened in that program space. */
14595 program_space *pspace = current_program_space;
14596
14597 /* The affected program space is possibly shared by multiple inferiors.
14598 Consider sending a qSymbol packet for each of the inferiors using that
14599 program space. */
14600 for (inferior *inf : all_inferiors ())
14601 {
14602 if (inf->pspace != pspace)
14603 continue;
14604
14605 /* Check whether the inferior's process target is a remote target. */
14606 remote_target *remote = as_remote_target (inf->process_target ());
14607 if (remote == nullptr)
14608 continue;
14609
14610 /* When we are attaching or handling a fork child and the shared library
14611 subsystem reads the list of loaded libraries, we receive new objfile
14612 events in between each found library. The libraries are read in an
14613 undefined order, so if we gave the remote side a chance to look up
14614 symbols between each objfile, we might give it an inconsistent picture
14615 of the inferior. It could appear that a library A appears loaded but
14616 a library B does not, even though library A requires library B. That
14617 would present a state that couldn't normally exist in the inferior.
14618
14619 So, skip these events, we'll give the remote a chance to look up
14620 symbols once all the loaded libraries and their symbols are known to
14621 GDB. */
14622 if (inf->in_initial_library_scan)
14623 continue;
14624
14625 if (!remote->has_execution (inf))
14626 continue;
14627
14628 /* Need to switch to a specific thread, because remote_check_symbols will
14629 set the general thread using INFERIOR_PTID.
14630
14631 It's possible to have inferiors with no thread here, because we are
14632 called very early in the connection process, while the inferior is
14633 being set up, before threads are added. Just skip it, start_remote_1
14634 also calls remote_check_symbols when it's done setting things up. */
14635 thread_info *thread = any_thread_of_inferior (inf);
14636 if (thread != nullptr)
14637 {
14638 scoped_restore_current_thread restore_thread;
14639 switch_to_thread (thread);
14640 remote->remote_check_symbols ();
14641 }
14642 }
14643 }
14644
14645 /* Pull all the tracepoints defined on the target and create local
14646 data structures representing them. We don't want to create real
14647 tracepoints yet, we don't want to mess up the user's existing
14648 collection. */
14649
14650 int
14651 remote_target::upload_tracepoints (struct uploaded_tp **utpp)
14652 {
14653 struct remote_state *rs = get_remote_state ();
14654 char *p;
14655
14656 /* Ask for a first packet of tracepoint definition. */
14657 putpkt ("qTfP");
14658 getpkt (&rs->buf, 0);
14659 p = rs->buf.data ();
14660 while (*p && *p != 'l')
14661 {
14662 parse_tracepoint_definition (p, utpp);
14663 /* Ask for another packet of tracepoint definition. */
14664 putpkt ("qTsP");
14665 getpkt (&rs->buf, 0);
14666 p = rs->buf.data ();
14667 }
14668 return 0;
14669 }
14670
14671 int
14672 remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
14673 {
14674 struct remote_state *rs = get_remote_state ();
14675 char *p;
14676
14677 /* Ask for a first packet of variable definition. */
14678 putpkt ("qTfV");
14679 getpkt (&rs->buf, 0);
14680 p = rs->buf.data ();
14681 while (*p && *p != 'l')
14682 {
14683 parse_tsv_definition (p, utsvp);
14684 /* Ask for another packet of variable definition. */
14685 putpkt ("qTsV");
14686 getpkt (&rs->buf, 0);
14687 p = rs->buf.data ();
14688 }
14689 return 0;
14690 }
14691
14692 /* The "set/show range-stepping" show hook. */
14693
14694 static void
14695 show_range_stepping (struct ui_file *file, int from_tty,
14696 struct cmd_list_element *c,
14697 const char *value)
14698 {
14699 gdb_printf (file,
14700 _("Debugger's willingness to use range stepping "
14701 "is %s.\n"), value);
14702 }
14703
14704 /* Return true if the vCont;r action is supported by the remote
14705 stub. */
14706
14707 bool
14708 remote_target::vcont_r_supported ()
14709 {
14710 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14711 remote_vcont_probe ();
14712
14713 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14714 && get_remote_state ()->supports_vCont.r);
14715 }
14716
14717 /* The "set/show range-stepping" set hook. */
14718
14719 static void
14720 set_range_stepping (const char *ignore_args, int from_tty,
14721 struct cmd_list_element *c)
14722 {
14723 /* When enabling, check whether range stepping is actually supported
14724 by the target, and warn if not. */
14725 if (use_range_stepping)
14726 {
14727 remote_target *remote = get_current_remote_target ();
14728 if (remote == NULL
14729 || !remote->vcont_r_supported ())
14730 warning (_("Range stepping is not supported by the current target"));
14731 }
14732 }
14733
14734 static void
14735 show_remote_debug (struct ui_file *file, int from_tty,
14736 struct cmd_list_element *c, const char *value)
14737 {
14738 gdb_printf (file, _("Debugging of remote protocol is %s.\n"),
14739 value);
14740 }
14741
14742 static void
14743 show_remote_timeout (struct ui_file *file, int from_tty,
14744 struct cmd_list_element *c, const char *value)
14745 {
14746 gdb_printf (file,
14747 _("Timeout limit to wait for target to respond is %s.\n"),
14748 value);
14749 }
14750
14751 /* Implement the "supports_memory_tagging" target_ops method. */
14752
14753 bool
14754 remote_target::supports_memory_tagging ()
14755 {
14756 return remote_memory_tagging_p ();
14757 }
14758
14759 /* Create the qMemTags packet given ADDRESS, LEN and TYPE. */
14760
14761 static void
14762 create_fetch_memtags_request (gdb::char_vector &packet, CORE_ADDR address,
14763 size_t len, int type)
14764 {
14765 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
14766
14767 std::string request = string_printf ("qMemTags:%s,%s:%s",
14768 phex_nz (address, addr_size),
14769 phex_nz (len, sizeof (len)),
14770 phex_nz (type, sizeof (type)));
14771
14772 strcpy (packet.data (), request.c_str ());
14773 }
14774
14775 /* Parse the qMemTags packet reply into TAGS.
14776
14777 Return true if successful, false otherwise. */
14778
14779 static bool
14780 parse_fetch_memtags_reply (const gdb::char_vector &reply,
14781 gdb::byte_vector &tags)
14782 {
14783 if (reply.empty () || reply[0] == 'E' || reply[0] != 'm')
14784 return false;
14785
14786 /* Copy the tag data. */
14787 tags = hex2bin (reply.data () + 1);
14788
14789 return true;
14790 }
14791
14792 /* Create the QMemTags packet given ADDRESS, LEN, TYPE and TAGS. */
14793
14794 static void
14795 create_store_memtags_request (gdb::char_vector &packet, CORE_ADDR address,
14796 size_t len, int type,
14797 const gdb::byte_vector &tags)
14798 {
14799 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
14800
14801 /* Put together the main packet, address and length. */
14802 std::string request = string_printf ("QMemTags:%s,%s:%s:",
14803 phex_nz (address, addr_size),
14804 phex_nz (len, sizeof (len)),
14805 phex_nz (type, sizeof (type)));
14806 request += bin2hex (tags.data (), tags.size ());
14807
14808 /* Check if we have exceeded the maximum packet size. */
14809 if (packet.size () < request.length ())
14810 error (_("Contents too big for packet QMemTags."));
14811
14812 strcpy (packet.data (), request.c_str ());
14813 }
14814
14815 /* Implement the "fetch_memtags" target_ops method. */
14816
14817 bool
14818 remote_target::fetch_memtags (CORE_ADDR address, size_t len,
14819 gdb::byte_vector &tags, int type)
14820 {
14821 /* Make sure the qMemTags packet is supported. */
14822 if (!remote_memory_tagging_p ())
14823 gdb_assert_not_reached ("remote fetch_memtags called with packet disabled");
14824
14825 struct remote_state *rs = get_remote_state ();
14826
14827 create_fetch_memtags_request (rs->buf, address, len, type);
14828
14829 putpkt (rs->buf);
14830 getpkt (&rs->buf, 0);
14831
14832 return parse_fetch_memtags_reply (rs->buf, tags);
14833 }
14834
14835 /* Implement the "store_memtags" target_ops method. */
14836
14837 bool
14838 remote_target::store_memtags (CORE_ADDR address, size_t len,
14839 const gdb::byte_vector &tags, int type)
14840 {
14841 /* Make sure the QMemTags packet is supported. */
14842 if (!remote_memory_tagging_p ())
14843 gdb_assert_not_reached ("remote store_memtags called with packet disabled");
14844
14845 struct remote_state *rs = get_remote_state ();
14846
14847 create_store_memtags_request (rs->buf, address, len, type, tags);
14848
14849 putpkt (rs->buf);
14850 getpkt (&rs->buf, 0);
14851
14852 /* Verify if the request was successful. */
14853 return packet_check_result (rs->buf.data ()) == PACKET_OK;
14854 }
14855
14856 /* Return true if remote target T is non-stop. */
14857
14858 bool
14859 remote_target_is_non_stop_p (remote_target *t)
14860 {
14861 scoped_restore_current_thread restore_thread;
14862 switch_to_target_no_thread (t);
14863
14864 return target_is_non_stop_p ();
14865 }
14866
14867 #if GDB_SELF_TEST
14868
14869 namespace selftests {
14870
14871 static void
14872 test_memory_tagging_functions ()
14873 {
14874 remote_target remote;
14875
14876 struct packet_config *config
14877 = &remote_protocol_packets[PACKET_memory_tagging_feature];
14878
14879 scoped_restore restore_memtag_support_
14880 = make_scoped_restore (&config->support);
14881
14882 /* Test memory tagging packet support. */
14883 config->support = PACKET_SUPPORT_UNKNOWN;
14884 SELF_CHECK (remote.supports_memory_tagging () == false);
14885 config->support = PACKET_DISABLE;
14886 SELF_CHECK (remote.supports_memory_tagging () == false);
14887 config->support = PACKET_ENABLE;
14888 SELF_CHECK (remote.supports_memory_tagging () == true);
14889
14890 /* Setup testing. */
14891 gdb::char_vector packet;
14892 gdb::byte_vector tags, bv;
14893 std::string expected, reply;
14894 packet.resize (32000);
14895
14896 /* Test creating a qMemTags request. */
14897
14898 expected = "qMemTags:0,0:0";
14899 create_fetch_memtags_request (packet, 0x0, 0x0, 0);
14900 SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
14901
14902 expected = "qMemTags:deadbeef,10:1";
14903 create_fetch_memtags_request (packet, 0xdeadbeef, 16, 1);
14904 SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
14905
14906 /* Test parsing a qMemTags reply. */
14907
14908 /* Error reply, tags vector unmodified. */
14909 reply = "E00";
14910 strcpy (packet.data (), reply.c_str ());
14911 tags.resize (0);
14912 SELF_CHECK (parse_fetch_memtags_reply (packet, tags) == false);
14913 SELF_CHECK (tags.size () == 0);
14914
14915 /* Valid reply, tags vector updated. */
14916 tags.resize (0);
14917 bv.resize (0);
14918
14919 for (int i = 0; i < 5; i++)
14920 bv.push_back (i);
14921
14922 reply = "m" + bin2hex (bv.data (), bv.size ());
14923 strcpy (packet.data (), reply.c_str ());
14924
14925 SELF_CHECK (parse_fetch_memtags_reply (packet, tags) == true);
14926 SELF_CHECK (tags.size () == 5);
14927
14928 for (int i = 0; i < 5; i++)
14929 SELF_CHECK (tags[i] == i);
14930
14931 /* Test creating a QMemTags request. */
14932
14933 /* Empty tag data. */
14934 tags.resize (0);
14935 expected = "QMemTags:0,0:0:";
14936 create_store_memtags_request (packet, 0x0, 0x0, 0, tags);
14937 SELF_CHECK (memcmp (packet.data (), expected.c_str (),
14938 expected.length ()) == 0);
14939
14940 /* Non-empty tag data. */
14941 tags.resize (0);
14942 for (int i = 0; i < 5; i++)
14943 tags.push_back (i);
14944 expected = "QMemTags:deadbeef,ff:1:0001020304";
14945 create_store_memtags_request (packet, 0xdeadbeef, 255, 1, tags);
14946 SELF_CHECK (memcmp (packet.data (), expected.c_str (),
14947 expected.length ()) == 0);
14948 }
14949
14950 } // namespace selftests
14951 #endif /* GDB_SELF_TEST */
14952
14953 void _initialize_remote ();
14954 void
14955 _initialize_remote ()
14956 {
14957 /* architecture specific data */
14958 remote_g_packet_data_handle =
14959 gdbarch_data_register_pre_init (remote_g_packet_data_init);
14960
14961 add_target (remote_target_info, remote_target::open);
14962 add_target (extended_remote_target_info, extended_remote_target::open);
14963
14964 /* Hook into new objfile notification. */
14965 gdb::observers::new_objfile.attach (remote_new_objfile, "remote");
14966
14967 #if 0
14968 init_remote_threadtests ();
14969 #endif
14970
14971 /* set/show remote ... */
14972
14973 add_basic_prefix_cmd ("remote", class_maintenance, _("\
14974 Remote protocol specific variables.\n\
14975 Configure various remote-protocol specific variables such as\n\
14976 the packets being used."),
14977 &remote_set_cmdlist,
14978 0 /* allow-unknown */, &setlist);
14979 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14980 Remote protocol specific variables.\n\
14981 Configure various remote-protocol specific variables such as\n\
14982 the packets being used."),
14983 &remote_show_cmdlist,
14984 0 /* allow-unknown */, &showlist);
14985
14986 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14987 Compare section data on target to the exec file.\n\
14988 Argument is a single section name (default: all loaded sections).\n\
14989 To compare only read-only loaded sections, specify the -r option."),
14990 &cmdlist);
14991
14992 add_cmd ("packet", class_maintenance, cli_packet_command, _("\
14993 Send an arbitrary packet to a remote target.\n\
14994 maintenance packet TEXT\n\
14995 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14996 this command sends the string TEXT to the inferior, and displays the\n\
14997 response packet. GDB supplies the initial `$' character, and the\n\
14998 terminating `#' character and checksum."),
14999 &maintenancelist);
15000
15001 set_show_commands remotebreak_cmds
15002 = add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
15003 Set whether to send break if interrupted."), _("\
15004 Show whether to send break if interrupted."), _("\
15005 If set, a break, instead of a cntrl-c, is sent to the remote target."),
15006 set_remotebreak, show_remotebreak,
15007 &setlist, &showlist);
15008 deprecate_cmd (remotebreak_cmds.set, "set remote interrupt-sequence");
15009 deprecate_cmd (remotebreak_cmds.show, "show remote interrupt-sequence");
15010
15011 add_setshow_enum_cmd ("interrupt-sequence", class_support,
15012 interrupt_sequence_modes, &interrupt_sequence_mode,
15013 _("\
15014 Set interrupt sequence to remote target."), _("\
15015 Show interrupt sequence to remote target."), _("\
15016 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
15017 NULL, show_interrupt_sequence,
15018 &remote_set_cmdlist,
15019 &remote_show_cmdlist);
15020
15021 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
15022 &interrupt_on_connect, _("\
15023 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
15024 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
15025 If set, interrupt sequence is sent to remote target."),
15026 NULL, NULL,
15027 &remote_set_cmdlist, &remote_show_cmdlist);
15028
15029 /* Install commands for configuring memory read/write packets. */
15030
15031 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
15032 Set the maximum number of bytes per memory write packet (deprecated)."),
15033 &setlist);
15034 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
15035 Show the maximum number of bytes per memory write packet (deprecated)."),
15036 &showlist);
15037 add_cmd ("memory-write-packet-size", no_class,
15038 set_memory_write_packet_size, _("\
15039 Set the maximum number of bytes per memory-write packet.\n\
15040 Specify the number of bytes in a packet or 0 (zero) for the\n\
15041 default packet size. The actual limit is further reduced\n\
15042 dependent on the target. Specify ``fixed'' to disable the\n\
15043 further restriction and ``limit'' to enable that restriction."),
15044 &remote_set_cmdlist);
15045 add_cmd ("memory-read-packet-size", no_class,
15046 set_memory_read_packet_size, _("\
15047 Set the maximum number of bytes per memory-read packet.\n\
15048 Specify the number of bytes in a packet or 0 (zero) for the\n\
15049 default packet size. The actual limit is further reduced\n\
15050 dependent on the target. Specify ``fixed'' to disable the\n\
15051 further restriction and ``limit'' to enable that restriction."),
15052 &remote_set_cmdlist);
15053 add_cmd ("memory-write-packet-size", no_class,
15054 show_memory_write_packet_size,
15055 _("Show the maximum number of bytes per memory-write packet."),
15056 &remote_show_cmdlist);
15057 add_cmd ("memory-read-packet-size", no_class,
15058 show_memory_read_packet_size,
15059 _("Show the maximum number of bytes per memory-read packet."),
15060 &remote_show_cmdlist);
15061
15062 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
15063 &remote_hw_watchpoint_limit, _("\
15064 Set the maximum number of target hardware watchpoints."), _("\
15065 Show the maximum number of target hardware watchpoints."), _("\
15066 Specify \"unlimited\" for unlimited hardware watchpoints."),
15067 NULL, show_hardware_watchpoint_limit,
15068 &remote_set_cmdlist,
15069 &remote_show_cmdlist);
15070 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
15071 no_class,
15072 &remote_hw_watchpoint_length_limit, _("\
15073 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
15074 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
15075 Specify \"unlimited\" to allow watchpoints of unlimited size."),
15076 NULL, show_hardware_watchpoint_length_limit,
15077 &remote_set_cmdlist, &remote_show_cmdlist);
15078 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
15079 &remote_hw_breakpoint_limit, _("\
15080 Set the maximum number of target hardware breakpoints."), _("\
15081 Show the maximum number of target hardware breakpoints."), _("\
15082 Specify \"unlimited\" for unlimited hardware breakpoints."),
15083 NULL, show_hardware_breakpoint_limit,
15084 &remote_set_cmdlist, &remote_show_cmdlist);
15085
15086 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
15087 &remote_address_size, _("\
15088 Set the maximum size of the address (in bits) in a memory packet."), _("\
15089 Show the maximum size of the address (in bits) in a memory packet."), NULL,
15090 NULL,
15091 NULL, /* FIXME: i18n: */
15092 &setlist, &showlist);
15093
15094 init_all_packet_configs ();
15095
15096 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
15097 "X", "binary-download", 1);
15098
15099 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
15100 "vCont", "verbose-resume", 0);
15101
15102 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
15103 "QPassSignals", "pass-signals", 0);
15104
15105 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
15106 "QCatchSyscalls", "catch-syscalls", 0);
15107
15108 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
15109 "QProgramSignals", "program-signals", 0);
15110
15111 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
15112 "QSetWorkingDir", "set-working-dir", 0);
15113
15114 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
15115 "QStartupWithShell", "startup-with-shell", 0);
15116
15117 add_packet_config_cmd (&remote_protocol_packets
15118 [PACKET_QEnvironmentHexEncoded],
15119 "QEnvironmentHexEncoded", "environment-hex-encoded",
15120 0);
15121
15122 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
15123 "QEnvironmentReset", "environment-reset",
15124 0);
15125
15126 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
15127 "QEnvironmentUnset", "environment-unset",
15128 0);
15129
15130 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
15131 "qSymbol", "symbol-lookup", 0);
15132
15133 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
15134 "P", "set-register", 1);
15135
15136 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
15137 "p", "fetch-register", 1);
15138
15139 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
15140 "Z0", "software-breakpoint", 0);
15141
15142 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
15143 "Z1", "hardware-breakpoint", 0);
15144
15145 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
15146 "Z2", "write-watchpoint", 0);
15147
15148 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
15149 "Z3", "read-watchpoint", 0);
15150
15151 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
15152 "Z4", "access-watchpoint", 0);
15153
15154 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
15155 "qXfer:auxv:read", "read-aux-vector", 0);
15156
15157 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
15158 "qXfer:exec-file:read", "pid-to-exec-file", 0);
15159
15160 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
15161 "qXfer:features:read", "target-features", 0);
15162
15163 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
15164 "qXfer:libraries:read", "library-info", 0);
15165
15166 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
15167 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
15168
15169 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
15170 "qXfer:memory-map:read", "memory-map", 0);
15171
15172 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
15173 "qXfer:osdata:read", "osdata", 0);
15174
15175 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
15176 "qXfer:threads:read", "threads", 0);
15177
15178 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
15179 "qXfer:siginfo:read", "read-siginfo-object", 0);
15180
15181 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
15182 "qXfer:siginfo:write", "write-siginfo-object", 0);
15183
15184 add_packet_config_cmd
15185 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
15186 "qXfer:traceframe-info:read", "traceframe-info", 0);
15187
15188 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
15189 "qXfer:uib:read", "unwind-info-block", 0);
15190
15191 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
15192 "qGetTLSAddr", "get-thread-local-storage-address",
15193 0);
15194
15195 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
15196 "qGetTIBAddr", "get-thread-information-block-address",
15197 0);
15198
15199 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
15200 "bc", "reverse-continue", 0);
15201
15202 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
15203 "bs", "reverse-step", 0);
15204
15205 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
15206 "qSupported", "supported-packets", 0);
15207
15208 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
15209 "qSearch:memory", "search-memory", 0);
15210
15211 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
15212 "qTStatus", "trace-status", 0);
15213
15214 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
15215 "vFile:setfs", "hostio-setfs", 0);
15216
15217 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
15218 "vFile:open", "hostio-open", 0);
15219
15220 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
15221 "vFile:pread", "hostio-pread", 0);
15222
15223 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
15224 "vFile:pwrite", "hostio-pwrite", 0);
15225
15226 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
15227 "vFile:close", "hostio-close", 0);
15228
15229 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
15230 "vFile:unlink", "hostio-unlink", 0);
15231
15232 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
15233 "vFile:readlink", "hostio-readlink", 0);
15234
15235 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
15236 "vFile:fstat", "hostio-fstat", 0);
15237
15238 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
15239 "vAttach", "attach", 0);
15240
15241 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
15242 "vRun", "run", 0);
15243
15244 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
15245 "QStartNoAckMode", "noack", 0);
15246
15247 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
15248 "vKill", "kill", 0);
15249
15250 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
15251 "qAttached", "query-attached", 0);
15252
15253 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
15254 "ConditionalTracepoints",
15255 "conditional-tracepoints", 0);
15256
15257 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
15258 "ConditionalBreakpoints",
15259 "conditional-breakpoints", 0);
15260
15261 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
15262 "BreakpointCommands",
15263 "breakpoint-commands", 0);
15264
15265 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
15266 "FastTracepoints", "fast-tracepoints", 0);
15267
15268 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
15269 "TracepointSource", "TracepointSource", 0);
15270
15271 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
15272 "QAllow", "allow", 0);
15273
15274 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
15275 "StaticTracepoints", "static-tracepoints", 0);
15276
15277 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
15278 "InstallInTrace", "install-in-trace", 0);
15279
15280 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
15281 "qXfer:statictrace:read", "read-sdata-object", 0);
15282
15283 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
15284 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
15285
15286 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
15287 "QDisableRandomization", "disable-randomization", 0);
15288
15289 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
15290 "QAgent", "agent", 0);
15291
15292 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
15293 "QTBuffer:size", "trace-buffer-size", 0);
15294
15295 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
15296 "Qbtrace:off", "disable-btrace", 0);
15297
15298 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
15299 "Qbtrace:bts", "enable-btrace-bts", 0);
15300
15301 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
15302 "Qbtrace:pt", "enable-btrace-pt", 0);
15303
15304 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
15305 "qXfer:btrace", "read-btrace", 0);
15306
15307 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
15308 "qXfer:btrace-conf", "read-btrace-conf", 0);
15309
15310 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
15311 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
15312
15313 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
15314 "multiprocess-feature", "multiprocess-feature", 0);
15315
15316 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
15317 "swbreak-feature", "swbreak-feature", 0);
15318
15319 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
15320 "hwbreak-feature", "hwbreak-feature", 0);
15321
15322 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
15323 "fork-event-feature", "fork-event-feature", 0);
15324
15325 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
15326 "vfork-event-feature", "vfork-event-feature", 0);
15327
15328 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
15329 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
15330
15331 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
15332 "vContSupported", "verbose-resume-supported", 0);
15333
15334 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
15335 "exec-event-feature", "exec-event-feature", 0);
15336
15337 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
15338 "vCtrlC", "ctrl-c", 0);
15339
15340 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
15341 "QThreadEvents", "thread-events", 0);
15342
15343 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
15344 "N stop reply", "no-resumed-stop-reply", 0);
15345
15346 add_packet_config_cmd (&remote_protocol_packets[PACKET_memory_tagging_feature],
15347 "memory-tagging-feature", "memory-tagging-feature", 0);
15348
15349 /* Assert that we've registered "set remote foo-packet" commands
15350 for all packet configs. */
15351 {
15352 int i;
15353
15354 for (i = 0; i < PACKET_MAX; i++)
15355 {
15356 /* Ideally all configs would have a command associated. Some
15357 still don't though. */
15358 int excepted;
15359
15360 switch (i)
15361 {
15362 case PACKET_QNonStop:
15363 case PACKET_EnableDisableTracepoints_feature:
15364 case PACKET_tracenz_feature:
15365 case PACKET_DisconnectedTracing_feature:
15366 case PACKET_augmented_libraries_svr4_read_feature:
15367 case PACKET_qCRC:
15368 /* Additions to this list need to be well justified:
15369 pre-existing packets are OK; new packets are not. */
15370 excepted = 1;
15371 break;
15372 default:
15373 excepted = 0;
15374 break;
15375 }
15376
15377 /* This catches both forgetting to add a config command, and
15378 forgetting to remove a packet from the exception list. */
15379 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
15380 }
15381 }
15382
15383 /* Keep the old ``set remote Z-packet ...'' working. Each individual
15384 Z sub-packet has its own set and show commands, but users may
15385 have sets to this variable in their .gdbinit files (or in their
15386 documentation). */
15387 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
15388 &remote_Z_packet_detect, _("\
15389 Set use of remote protocol `Z' packets."), _("\
15390 Show use of remote protocol `Z' packets."), _("\
15391 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
15392 packets."),
15393 set_remote_protocol_Z_packet_cmd,
15394 show_remote_protocol_Z_packet_cmd,
15395 /* FIXME: i18n: Use of remote protocol
15396 `Z' packets is %s. */
15397 &remote_set_cmdlist, &remote_show_cmdlist);
15398
15399 add_basic_prefix_cmd ("remote", class_files, _("\
15400 Manipulate files on the remote system.\n\
15401 Transfer files to and from the remote target system."),
15402 &remote_cmdlist,
15403 0 /* allow-unknown */, &cmdlist);
15404
15405 add_cmd ("put", class_files, remote_put_command,
15406 _("Copy a local file to the remote system."),
15407 &remote_cmdlist);
15408
15409 add_cmd ("get", class_files, remote_get_command,
15410 _("Copy a remote file to the local system."),
15411 &remote_cmdlist);
15412
15413 add_cmd ("delete", class_files, remote_delete_command,
15414 _("Delete a remote file."),
15415 &remote_cmdlist);
15416
15417 add_setshow_string_noescape_cmd ("exec-file", class_files,
15418 &remote_exec_file_var, _("\
15419 Set the remote pathname for \"run\"."), _("\
15420 Show the remote pathname for \"run\"."), NULL,
15421 set_remote_exec_file,
15422 show_remote_exec_file,
15423 &remote_set_cmdlist,
15424 &remote_show_cmdlist);
15425
15426 add_setshow_boolean_cmd ("range-stepping", class_run,
15427 &use_range_stepping, _("\
15428 Enable or disable range stepping."), _("\
15429 Show whether target-assisted range stepping is enabled."), _("\
15430 If on, and the target supports it, when stepping a source line, GDB\n\
15431 tells the target to step the corresponding range of addresses itself instead\n\
15432 of issuing multiple single-steps. This speeds up source level\n\
15433 stepping. If off, GDB always issues single-steps, even if range\n\
15434 stepping is supported by the target. The default is on."),
15435 set_range_stepping,
15436 show_range_stepping,
15437 &setlist,
15438 &showlist);
15439
15440 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
15441 Set watchdog timer."), _("\
15442 Show watchdog timer."), _("\
15443 When non-zero, this timeout is used instead of waiting forever for a target\n\
15444 to finish a low-level step or continue operation. If the specified amount\n\
15445 of time passes without a response from the target, an error occurs."),
15446 NULL,
15447 show_watchdog,
15448 &setlist, &showlist);
15449
15450 add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class,
15451 &remote_packet_max_chars, _("\
15452 Set the maximum number of characters to display for each remote packet."), _("\
15453 Show the maximum number of characters to display for each remote packet."), _("\
15454 Specify \"unlimited\" to display all the characters."),
15455 NULL, show_remote_packet_max_chars,
15456 &setdebuglist, &showdebuglist);
15457
15458 add_setshow_boolean_cmd ("remote", no_class, &remote_debug,
15459 _("Set debugging of remote protocol."),
15460 _("Show debugging of remote protocol."),
15461 _("\
15462 When enabled, each packet sent or received with the remote target\n\
15463 is displayed."),
15464 NULL,
15465 show_remote_debug,
15466 &setdebuglist, &showdebuglist);
15467
15468 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
15469 &remote_timeout, _("\
15470 Set timeout limit to wait for target to respond."), _("\
15471 Show timeout limit to wait for target to respond."), _("\
15472 This value is used to set the time limit for gdb to wait for a response\n\
15473 from the target."),
15474 NULL,
15475 show_remote_timeout,
15476 &setlist, &showlist);
15477
15478 /* Eventually initialize fileio. See fileio.c */
15479 initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist);
15480
15481 #if GDB_SELF_TEST
15482 selftests::register_test ("remote_memory_tagging",
15483 selftests::test_memory_tagging_functions);
15484 #endif
15485 }