gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3 Copyright (C) 1988-2020 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" /* for exec_bfd */
60
61 #include "remote-fileio.h"
62 #include "gdb/fileio.h"
63 #include <sys/stat.h>
64 #include "xml-support.h"
65
66 #include "memory-map.h"
67
68 #include "tracepoint.h"
69 #include "ax.h"
70 #include "ax-gdb.h"
71 #include "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 <algorithm>
79 #include <unordered_map>
80 #include "async-event.h"
81
82 /* The remote target. */
83
84 static const char remote_doc[] = N_("\
85 Use a remote computer via a serial line, using a gdb-specific protocol.\n\
86 Specify the serial device it is connected to\n\
87 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
88
89 #define OPAQUETHREADBYTES 8
90
91 /* a 64 bit opaque identifier */
92 typedef unsigned char threadref[OPAQUETHREADBYTES];
93
94 struct gdb_ext_thread_info;
95 struct threads_listing_context;
96 typedef int (*rmt_thread_action) (threadref *ref, void *context);
97 struct protocol_feature;
98 struct packet_reg;
99
100 struct stop_reply;
101 typedef std::unique_ptr<stop_reply> stop_reply_up;
102
103 /* Generic configuration support for packets the stub optionally
104 supports. Allows the user to specify the use of the packet as well
105 as allowing GDB to auto-detect support in the remote stub. */
106
107 enum packet_support
108 {
109 PACKET_SUPPORT_UNKNOWN = 0,
110 PACKET_ENABLE,
111 PACKET_DISABLE
112 };
113
114 /* Analyze a packet's return value and update the packet config
115 accordingly. */
116
117 enum packet_result
118 {
119 PACKET_ERROR,
120 PACKET_OK,
121 PACKET_UNKNOWN
122 };
123
124 struct threads_listing_context;
125
126 /* Stub vCont actions support.
127
128 Each field is a boolean flag indicating whether the stub reports
129 support for the corresponding action. */
130
131 struct vCont_action_support
132 {
133 /* vCont;t */
134 bool t = false;
135
136 /* vCont;r */
137 bool r = false;
138
139 /* vCont;s */
140 bool s = false;
141
142 /* vCont;S */
143 bool S = false;
144 };
145
146 /* About this many threadids fit in a packet. */
147
148 #define MAXTHREADLISTRESULTS 32
149
150 /* Data for the vFile:pread readahead cache. */
151
152 struct readahead_cache
153 {
154 /* Invalidate the readahead cache. */
155 void invalidate ();
156
157 /* Invalidate the readahead cache if it is holding data for FD. */
158 void invalidate_fd (int fd);
159
160 /* Serve pread from the readahead cache. Returns number of bytes
161 read, or 0 if the request can't be served from the cache. */
162 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
163
164 /* The file descriptor for the file that is being cached. -1 if the
165 cache is invalid. */
166 int fd = -1;
167
168 /* The offset into the file that the cache buffer corresponds
169 to. */
170 ULONGEST offset = 0;
171
172 /* The buffer holding the cache contents. */
173 gdb_byte *buf = nullptr;
174 /* The buffer's size. We try to read as much as fits into a packet
175 at a time. */
176 size_t bufsize = 0;
177
178 /* Cache hit and miss counters. */
179 ULONGEST hit_count = 0;
180 ULONGEST miss_count = 0;
181 };
182
183 /* Description of the remote protocol for a given architecture. */
184
185 struct packet_reg
186 {
187 long offset; /* Offset into G packet. */
188 long regnum; /* GDB's internal register number. */
189 LONGEST pnum; /* Remote protocol register number. */
190 int in_g_packet; /* Always part of G packet. */
191 /* long size in bytes; == register_size (target_gdbarch (), regnum);
192 at present. */
193 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
194 at present. */
195 };
196
197 struct remote_arch_state
198 {
199 explicit remote_arch_state (struct gdbarch *gdbarch);
200
201 /* Description of the remote protocol registers. */
202 long sizeof_g_packet;
203
204 /* Description of the remote protocol registers indexed by REGNUM
205 (making an array gdbarch_num_regs in size). */
206 std::unique_ptr<packet_reg[]> regs;
207
208 /* This is the size (in chars) of the first response to the ``g''
209 packet. It is used as a heuristic when determining the maximum
210 size of memory-read and memory-write packets. A target will
211 typically only reserve a buffer large enough to hold the ``g''
212 packet. The size does not include packet overhead (headers and
213 trailers). */
214 long actual_register_packet_size;
215
216 /* This is the maximum size (in chars) of a non read/write packet.
217 It is also used as a cap on the size of read/write packets. */
218 long remote_packet_size;
219 };
220
221 /* Description of the remote protocol state for the currently
222 connected target. This is per-target state, and independent of the
223 selected architecture. */
224
225 class remote_state
226 {
227 public:
228
229 remote_state ();
230 ~remote_state ();
231
232 /* Get the remote arch state for GDBARCH. */
233 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
234
235 public: /* data */
236
237 /* A buffer to use for incoming packets, and its current size. The
238 buffer is grown dynamically for larger incoming packets.
239 Outgoing packets may also be constructed in this buffer.
240 The size of the buffer is always at least REMOTE_PACKET_SIZE;
241 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
242 packets. */
243 gdb::char_vector buf;
244
245 /* True if we're going through initial connection setup (finding out
246 about the remote side's threads, relocating symbols, etc.). */
247 bool starting_up = false;
248
249 /* If we negotiated packet size explicitly (and thus can bypass
250 heuristics for the largest packet size that will not overflow
251 a buffer in the stub), this will be set to that packet size.
252 Otherwise zero, meaning to use the guessed size. */
253 long explicit_packet_size = 0;
254
255 /* remote_wait is normally called when the target is running and
256 waits for a stop reply packet. But sometimes we need to call it
257 when the target is already stopped. We can send a "?" packet
258 and have remote_wait read the response. Or, if we already have
259 the response, we can stash it in BUF and tell remote_wait to
260 skip calling getpkt. This flag is set when BUF contains a
261 stop reply packet and the target is not waiting. */
262 int cached_wait_status = 0;
263
264 /* True, if in no ack mode. That is, neither GDB nor the stub will
265 expect acks from each other. The connection is assumed to be
266 reliable. */
267 bool noack_mode = false;
268
269 /* True if we're connected in extended remote mode. */
270 bool extended = false;
271
272 /* True if we resumed the target and we're waiting for the target to
273 stop. In the mean time, we can't start another command/query.
274 The remote server wouldn't be ready to process it, so we'd
275 timeout waiting for a reply that would never come and eventually
276 we'd close the connection. This can happen in asynchronous mode
277 because we allow GDB commands while the target is running. */
278 bool waiting_for_stop_reply = false;
279
280 /* The status of the stub support for the various vCont actions. */
281 vCont_action_support supports_vCont;
282 /* Whether vCont support was probed already. This is a workaround
283 until packet_support is per-connection. */
284 bool supports_vCont_probed;
285
286 /* True if the user has pressed Ctrl-C, but the target hasn't
287 responded to that. */
288 bool ctrlc_pending_p = false;
289
290 /* True if we saw a Ctrl-C while reading or writing from/to the
291 remote descriptor. At that point it is not safe to send a remote
292 interrupt packet, so we instead remember we saw the Ctrl-C and
293 process it once we're done with sending/receiving the current
294 packet, which should be shortly. If however that takes too long,
295 and the user presses Ctrl-C again, we offer to disconnect. */
296 bool got_ctrlc_during_io = false;
297
298 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
299 remote_open knows that we don't have a file open when the program
300 starts. */
301 struct serial *remote_desc = nullptr;
302
303 /* These are the threads which we last sent to the remote system. The
304 TID member will be -1 for all or -2 for not sent yet. */
305 ptid_t general_thread = null_ptid;
306 ptid_t continue_thread = null_ptid;
307
308 /* This is the traceframe which we last selected on the remote system.
309 It will be -1 if no traceframe is selected. */
310 int remote_traceframe_number = -1;
311
312 char *last_pass_packet = nullptr;
313
314 /* The last QProgramSignals packet sent to the target. We bypass
315 sending a new program signals list down to the target if the new
316 packet is exactly the same as the last we sent. IOW, we only let
317 the target know about program signals list changes. */
318 char *last_program_signals_packet = nullptr;
319
320 gdb_signal last_sent_signal = GDB_SIGNAL_0;
321
322 bool last_sent_step = false;
323
324 /* The execution direction of the last resume we got. */
325 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
326
327 char *finished_object = nullptr;
328 char *finished_annex = nullptr;
329 ULONGEST finished_offset = 0;
330
331 /* Should we try the 'ThreadInfo' query packet?
332
333 This variable (NOT available to the user: auto-detect only!)
334 determines whether GDB will use the new, simpler "ThreadInfo"
335 query or the older, more complex syntax for thread queries.
336 This is an auto-detect variable (set to true at each connect,
337 and set to false when the target fails to recognize it). */
338 bool use_threadinfo_query = false;
339 bool use_threadextra_query = false;
340
341 threadref echo_nextthread {};
342 threadref nextthread {};
343 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
344
345 /* The state of remote notification. */
346 struct remote_notif_state *notif_state = nullptr;
347
348 /* The branch trace configuration. */
349 struct btrace_config btrace_config {};
350
351 /* The argument to the last "vFile:setfs:" packet we sent, used
352 to avoid sending repeated unnecessary "vFile:setfs:" packets.
353 Initialized to -1 to indicate that no "vFile:setfs:" packet
354 has yet been sent. */
355 int fs_pid = -1;
356
357 /* A readahead cache for vFile:pread. Often, reading a binary
358 involves a sequence of small reads. E.g., when parsing an ELF
359 file. A readahead cache helps mostly the case of remote
360 debugging on a connection with higher latency, due to the
361 request/reply nature of the RSP. We only cache data for a single
362 file descriptor at a time. */
363 struct readahead_cache readahead_cache;
364
365 /* The list of already fetched and acknowledged stop events. This
366 queue is used for notification Stop, and other notifications
367 don't need queue for their events, because the notification
368 events of Stop can't be consumed immediately, so that events
369 should be queued first, and be consumed by remote_wait_{ns,as}
370 one per time. Other notifications can consume their events
371 immediately, so queue is not needed for them. */
372 std::vector<stop_reply_up> stop_reply_queue;
373
374 /* Asynchronous signal handle registered as event loop source for
375 when we have pending events ready to be passed to the core. */
376 struct async_event_handler *remote_async_inferior_event_token = nullptr;
377
378 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
379 ``forever'' still use the normal timeout mechanism. This is
380 currently used by the ASYNC code to guarentee that target reads
381 during the initial connect always time-out. Once getpkt has been
382 modified to return a timeout indication and, in turn
383 remote_wait()/wait_for_inferior() have gained a timeout parameter
384 this can go away. */
385 int wait_forever_enabled_p = 1;
386
387 private:
388 /* Mapping of remote protocol data for each gdbarch. Usually there
389 is only one entry here, though we may see more with stubs that
390 support multi-process. */
391 std::unordered_map<struct gdbarch *, remote_arch_state>
392 m_arch_states;
393 };
394
395 static const target_info remote_target_info = {
396 "remote",
397 N_("Remote serial target in gdb-specific protocol"),
398 remote_doc
399 };
400
401 class remote_target : public process_stratum_target
402 {
403 public:
404 remote_target () = default;
405 ~remote_target () override;
406
407 const target_info &info () const override
408 { return remote_target_info; }
409
410 const char *connection_string () override;
411
412 thread_control_capabilities get_thread_control_capabilities () override
413 { return tc_schedlock; }
414
415 /* Open a remote connection. */
416 static void open (const char *, int);
417
418 void close () override;
419
420 void detach (inferior *, int) override;
421 void disconnect (const char *, int) override;
422
423 void commit_resume () override;
424 void resume (ptid_t, int, enum gdb_signal) override;
425 ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
426
427 void fetch_registers (struct regcache *, int) override;
428 void store_registers (struct regcache *, int) override;
429 void prepare_to_store (struct regcache *) override;
430
431 void files_info () override;
432
433 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
434
435 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
436 enum remove_bp_reason) override;
437
438
439 bool stopped_by_sw_breakpoint () override;
440 bool supports_stopped_by_sw_breakpoint () override;
441
442 bool stopped_by_hw_breakpoint () override;
443
444 bool supports_stopped_by_hw_breakpoint () override;
445
446 bool stopped_by_watchpoint () override;
447
448 bool stopped_data_address (CORE_ADDR *) override;
449
450 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
451
452 int can_use_hw_breakpoint (enum bptype, int, int) override;
453
454 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
455
456 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
457
458 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
459
460 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
461 struct expression *) override;
462
463 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
464 struct expression *) override;
465
466 void kill () override;
467
468 void load (const char *, int) override;
469
470 void mourn_inferior () override;
471
472 void pass_signals (gdb::array_view<const unsigned char>) override;
473
474 int set_syscall_catchpoint (int, bool, int,
475 gdb::array_view<const int>) override;
476
477 void program_signals (gdb::array_view<const unsigned char>) override;
478
479 bool thread_alive (ptid_t ptid) override;
480
481 const char *thread_name (struct thread_info *) override;
482
483 void update_thread_list () override;
484
485 std::string pid_to_str (ptid_t) override;
486
487 const char *extra_thread_info (struct thread_info *) override;
488
489 ptid_t get_ada_task_ptid (long lwp, long thread) override;
490
491 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
492 int handle_len,
493 inferior *inf) override;
494
495 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
496 override;
497
498 void stop (ptid_t) override;
499
500 void interrupt () override;
501
502 void pass_ctrlc () override;
503
504 enum target_xfer_status xfer_partial (enum target_object object,
505 const char *annex,
506 gdb_byte *readbuf,
507 const gdb_byte *writebuf,
508 ULONGEST offset, ULONGEST len,
509 ULONGEST *xfered_len) override;
510
511 ULONGEST get_memory_xfer_limit () override;
512
513 void rcmd (const char *command, struct ui_file *output) override;
514
515 char *pid_to_exec_file (int pid) override;
516
517 void log_command (const char *cmd) override
518 {
519 serial_log_command (this, cmd);
520 }
521
522 CORE_ADDR get_thread_local_address (ptid_t ptid,
523 CORE_ADDR load_module_addr,
524 CORE_ADDR offset) override;
525
526 bool can_execute_reverse () override;
527
528 std::vector<mem_region> memory_map () override;
529
530 void flash_erase (ULONGEST address, LONGEST length) override;
531
532 void flash_done () override;
533
534 const struct target_desc *read_description () override;
535
536 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
537 const gdb_byte *pattern, ULONGEST pattern_len,
538 CORE_ADDR *found_addrp) override;
539
540 bool can_async_p () override;
541
542 bool is_async_p () override;
543
544 void async (int) override;
545
546 int async_wait_fd () override;
547
548 void thread_events (int) override;
549
550 int can_do_single_step () override;
551
552 void terminal_inferior () override;
553
554 void terminal_ours () override;
555
556 bool supports_non_stop () override;
557
558 bool supports_multi_process () override;
559
560 bool supports_disable_randomization () override;
561
562 bool filesystem_is_local () override;
563
564
565 int fileio_open (struct inferior *inf, const char *filename,
566 int flags, int mode, int warn_if_slow,
567 int *target_errno) override;
568
569 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
570 ULONGEST offset, int *target_errno) override;
571
572 int fileio_pread (int fd, gdb_byte *read_buf, int len,
573 ULONGEST offset, int *target_errno) override;
574
575 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
576
577 int fileio_close (int fd, int *target_errno) override;
578
579 int fileio_unlink (struct inferior *inf,
580 const char *filename,
581 int *target_errno) override;
582
583 gdb::optional<std::string>
584 fileio_readlink (struct inferior *inf,
585 const char *filename,
586 int *target_errno) override;
587
588 bool supports_enable_disable_tracepoint () override;
589
590 bool supports_string_tracing () override;
591
592 bool supports_evaluation_of_breakpoint_conditions () override;
593
594 bool can_run_breakpoint_commands () override;
595
596 void trace_init () override;
597
598 void download_tracepoint (struct bp_location *location) override;
599
600 bool can_download_tracepoint () override;
601
602 void download_trace_state_variable (const trace_state_variable &tsv) override;
603
604 void enable_tracepoint (struct bp_location *location) override;
605
606 void disable_tracepoint (struct bp_location *location) override;
607
608 void trace_set_readonly_regions () override;
609
610 void trace_start () override;
611
612 int get_trace_status (struct trace_status *ts) override;
613
614 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
615 override;
616
617 void trace_stop () override;
618
619 int trace_find (enum trace_find_type type, int num,
620 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
621
622 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
623
624 int save_trace_data (const char *filename) override;
625
626 int upload_tracepoints (struct uploaded_tp **utpp) override;
627
628 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
629
630 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
631
632 int get_min_fast_tracepoint_insn_len () override;
633
634 void set_disconnected_tracing (int val) override;
635
636 void set_circular_trace_buffer (int val) override;
637
638 void set_trace_buffer_size (LONGEST val) override;
639
640 bool set_trace_notes (const char *user, const char *notes,
641 const char *stopnotes) override;
642
643 int core_of_thread (ptid_t ptid) override;
644
645 int verify_memory (const gdb_byte *data,
646 CORE_ADDR memaddr, ULONGEST size) override;
647
648
649 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
650
651 void set_permissions () override;
652
653 bool static_tracepoint_marker_at (CORE_ADDR,
654 struct static_tracepoint_marker *marker)
655 override;
656
657 std::vector<static_tracepoint_marker>
658 static_tracepoint_markers_by_strid (const char *id) override;
659
660 traceframe_info_up traceframe_info () override;
661
662 bool use_agent (bool use) override;
663 bool can_use_agent () override;
664
665 struct btrace_target_info *enable_btrace (ptid_t ptid,
666 const struct btrace_config *conf) override;
667
668 void disable_btrace (struct btrace_target_info *tinfo) override;
669
670 void teardown_btrace (struct btrace_target_info *tinfo) override;
671
672 enum btrace_error read_btrace (struct btrace_data *data,
673 struct btrace_target_info *btinfo,
674 enum btrace_read_type type) override;
675
676 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
677 bool augmented_libraries_svr4_read () override;
678 bool follow_fork (bool, bool) override;
679 void follow_exec (struct inferior *, const char *) override;
680 int insert_fork_catchpoint (int) override;
681 int remove_fork_catchpoint (int) override;
682 int insert_vfork_catchpoint (int) override;
683 int remove_vfork_catchpoint (int) override;
684 int insert_exec_catchpoint (int) override;
685 int remove_exec_catchpoint (int) override;
686 enum exec_direction_kind execution_direction () override;
687
688 public: /* Remote specific methods. */
689
690 void remote_download_command_source (int num, ULONGEST addr,
691 struct command_line *cmds);
692
693 void remote_file_put (const char *local_file, const char *remote_file,
694 int from_tty);
695 void remote_file_get (const char *remote_file, const char *local_file,
696 int from_tty);
697 void remote_file_delete (const char *remote_file, int from_tty);
698
699 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
700 ULONGEST offset, int *remote_errno);
701 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
702 ULONGEST offset, int *remote_errno);
703 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
704 ULONGEST offset, int *remote_errno);
705
706 int remote_hostio_send_command (int command_bytes, int which_packet,
707 int *remote_errno, char **attachment,
708 int *attachment_len);
709 int remote_hostio_set_filesystem (struct inferior *inf,
710 int *remote_errno);
711 /* We should get rid of this and use fileio_open directly. */
712 int remote_hostio_open (struct inferior *inf, const char *filename,
713 int flags, int mode, int warn_if_slow,
714 int *remote_errno);
715 int remote_hostio_close (int fd, int *remote_errno);
716
717 int remote_hostio_unlink (inferior *inf, const char *filename,
718 int *remote_errno);
719
720 struct remote_state *get_remote_state ();
721
722 long get_remote_packet_size (void);
723 long get_memory_packet_size (struct memory_packet_config *config);
724
725 long get_memory_write_packet_size ();
726 long get_memory_read_packet_size ();
727
728 char *append_pending_thread_resumptions (char *p, char *endp,
729 ptid_t ptid);
730 static void open_1 (const char *name, int from_tty, int extended_p);
731 void start_remote (int from_tty, int extended_p);
732 void remote_detach_1 (struct inferior *inf, int from_tty);
733
734 char *append_resumption (char *p, char *endp,
735 ptid_t ptid, int step, gdb_signal siggnal);
736 int remote_resume_with_vcont (ptid_t ptid, int step,
737 gdb_signal siggnal);
738
739 void add_current_inferior_and_thread (char *wait_status);
740
741 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
742 int options);
743 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
744 int options);
745
746 ptid_t process_stop_reply (struct stop_reply *stop_reply,
747 target_waitstatus *status);
748
749 void remote_notice_new_inferior (ptid_t currthread, int executing);
750
751 void process_initial_stop_replies (int from_tty);
752
753 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
754
755 void btrace_sync_conf (const btrace_config *conf);
756
757 void remote_btrace_maybe_reopen ();
758
759 void remove_new_fork_children (threads_listing_context *context);
760 void kill_new_fork_children (int pid);
761 void discard_pending_stop_replies (struct inferior *inf);
762 int stop_reply_queue_length ();
763
764 void check_pending_events_prevent_wildcard_vcont
765 (int *may_global_wildcard_vcont);
766
767 void discard_pending_stop_replies_in_queue ();
768 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
769 struct stop_reply *queued_stop_reply (ptid_t ptid);
770 int peek_stop_reply (ptid_t ptid);
771 void remote_parse_stop_reply (const char *buf, stop_reply *event);
772
773 void remote_stop_ns (ptid_t ptid);
774 void remote_interrupt_as ();
775 void remote_interrupt_ns ();
776
777 char *remote_get_noisy_reply ();
778 int remote_query_attached (int pid);
779 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
780 int try_open_exec);
781
782 ptid_t remote_current_thread (ptid_t oldpid);
783 ptid_t get_current_thread (char *wait_status);
784
785 void set_thread (ptid_t ptid, int gen);
786 void set_general_thread (ptid_t ptid);
787 void set_continue_thread (ptid_t ptid);
788 void set_general_process ();
789
790 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
791
792 int remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
793 gdb_ext_thread_info *info);
794 int remote_get_threadinfo (threadref *threadid, int fieldset,
795 gdb_ext_thread_info *info);
796
797 int parse_threadlist_response (char *pkt, int result_limit,
798 threadref *original_echo,
799 threadref *resultlist,
800 int *doneflag);
801 int remote_get_threadlist (int startflag, threadref *nextthread,
802 int result_limit, int *done, int *result_count,
803 threadref *threadlist);
804
805 int remote_threadlist_iterator (rmt_thread_action stepfunction,
806 void *context, int looplimit);
807
808 int remote_get_threads_with_ql (threads_listing_context *context);
809 int remote_get_threads_with_qxfer (threads_listing_context *context);
810 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
811
812 void extended_remote_restart ();
813
814 void get_offsets ();
815
816 void remote_check_symbols ();
817
818 void remote_supported_packet (const struct protocol_feature *feature,
819 enum packet_support support,
820 const char *argument);
821
822 void remote_query_supported ();
823
824 void remote_packet_size (const protocol_feature *feature,
825 packet_support support, const char *value);
826
827 void remote_serial_quit_handler ();
828
829 void remote_detach_pid (int pid);
830
831 void remote_vcont_probe ();
832
833 void remote_resume_with_hc (ptid_t ptid, int step,
834 gdb_signal siggnal);
835
836 void send_interrupt_sequence ();
837 void interrupt_query ();
838
839 void remote_notif_get_pending_events (notif_client *nc);
840
841 int fetch_register_using_p (struct regcache *regcache,
842 packet_reg *reg);
843 int send_g_packet ();
844 void process_g_packet (struct regcache *regcache);
845 void fetch_registers_using_g (struct regcache *regcache);
846 int store_register_using_P (const struct regcache *regcache,
847 packet_reg *reg);
848 void store_registers_using_G (const struct regcache *regcache);
849
850 void set_remote_traceframe ();
851
852 void check_binary_download (CORE_ADDR addr);
853
854 target_xfer_status remote_write_bytes_aux (const char *header,
855 CORE_ADDR memaddr,
856 const gdb_byte *myaddr,
857 ULONGEST len_units,
858 int unit_size,
859 ULONGEST *xfered_len_units,
860 char packet_format,
861 int use_length);
862
863 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
864 const gdb_byte *myaddr, ULONGEST len,
865 int unit_size, ULONGEST *xfered_len);
866
867 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
868 ULONGEST len_units,
869 int unit_size, ULONGEST *xfered_len_units);
870
871 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
872 ULONGEST memaddr,
873 ULONGEST len,
874 int unit_size,
875 ULONGEST *xfered_len);
876
877 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
878 gdb_byte *myaddr, ULONGEST len,
879 int unit_size,
880 ULONGEST *xfered_len);
881
882 packet_result remote_send_printf (const char *format, ...)
883 ATTRIBUTE_PRINTF (2, 3);
884
885 target_xfer_status remote_flash_write (ULONGEST address,
886 ULONGEST length, ULONGEST *xfered_len,
887 const gdb_byte *data);
888
889 int readchar (int timeout);
890
891 void remote_serial_write (const char *str, int len);
892
893 int putpkt (const char *buf);
894 int putpkt_binary (const char *buf, int cnt);
895
896 int putpkt (const gdb::char_vector &buf)
897 {
898 return putpkt (buf.data ());
899 }
900
901 void skip_frame ();
902 long read_frame (gdb::char_vector *buf_p);
903 void getpkt (gdb::char_vector *buf, int forever);
904 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
905 int expecting_notif, int *is_notif);
906 int getpkt_sane (gdb::char_vector *buf, int forever);
907 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
908 int *is_notif);
909 int remote_vkill (int pid);
910 void remote_kill_k ();
911
912 void extended_remote_disable_randomization (int val);
913 int extended_remote_run (const std::string &args);
914
915 void send_environment_packet (const char *action,
916 const char *packet,
917 const char *value);
918
919 void extended_remote_environment_support ();
920 void extended_remote_set_inferior_cwd ();
921
922 target_xfer_status remote_write_qxfer (const char *object_name,
923 const char *annex,
924 const gdb_byte *writebuf,
925 ULONGEST offset, LONGEST len,
926 ULONGEST *xfered_len,
927 struct packet_config *packet);
928
929 target_xfer_status remote_read_qxfer (const char *object_name,
930 const char *annex,
931 gdb_byte *readbuf, ULONGEST offset,
932 LONGEST len,
933 ULONGEST *xfered_len,
934 struct packet_config *packet);
935
936 void push_stop_reply (struct stop_reply *new_event);
937
938 bool vcont_r_supported ();
939
940 void packet_command (const char *args, int from_tty);
941
942 private: /* data fields */
943
944 /* The remote state. Don't reference this directly. Use the
945 get_remote_state method instead. */
946 remote_state m_remote_state;
947 };
948
949 static const target_info extended_remote_target_info = {
950 "extended-remote",
951 N_("Extended remote serial target in gdb-specific protocol"),
952 remote_doc
953 };
954
955 /* Set up the extended remote target by extending the standard remote
956 target and adding to it. */
957
958 class extended_remote_target final : public remote_target
959 {
960 public:
961 const target_info &info () const override
962 { return extended_remote_target_info; }
963
964 /* Open an extended-remote connection. */
965 static void open (const char *, int);
966
967 bool can_create_inferior () override { return true; }
968 void create_inferior (const char *, const std::string &,
969 char **, int) override;
970
971 void detach (inferior *, int) override;
972
973 bool can_attach () override { return true; }
974 void attach (const char *, int) override;
975
976 void post_attach (int) override;
977 bool supports_disable_randomization () override;
978 };
979
980 /* Per-program-space data key. */
981 static const struct program_space_key<char, gdb::xfree_deleter<char>>
982 remote_pspace_data;
983
984 /* The variable registered as the control variable used by the
985 remote exec-file commands. While the remote exec-file setting is
986 per-program-space, the set/show machinery uses this as the
987 location of the remote exec-file value. */
988 static char *remote_exec_file_var;
989
990 /* The size to align memory write packets, when practical. The protocol
991 does not guarantee any alignment, and gdb will generate short
992 writes and unaligned writes, but even as a best-effort attempt this
993 can improve bulk transfers. For instance, if a write is misaligned
994 relative to the target's data bus, the stub may need to make an extra
995 round trip fetching data from the target. This doesn't make a
996 huge difference, but it's easy to do, so we try to be helpful.
997
998 The alignment chosen is arbitrary; usually data bus width is
999 important here, not the possibly larger cache line size. */
1000 enum { REMOTE_ALIGN_WRITES = 16 };
1001
1002 /* Prototypes for local functions. */
1003
1004 static int hexnumlen (ULONGEST num);
1005
1006 static int stubhex (int ch);
1007
1008 static int hexnumstr (char *, ULONGEST);
1009
1010 static int hexnumnstr (char *, ULONGEST, int);
1011
1012 static CORE_ADDR remote_address_masked (CORE_ADDR);
1013
1014 static void print_packet (const char *);
1015
1016 static int stub_unpack_int (char *buff, int fieldlength);
1017
1018 struct packet_config;
1019
1020 static void show_packet_config_cmd (struct packet_config *config);
1021
1022 static void show_remote_protocol_packet_cmd (struct ui_file *file,
1023 int from_tty,
1024 struct cmd_list_element *c,
1025 const char *value);
1026
1027 static ptid_t read_ptid (const char *buf, const char **obuf);
1028
1029 static void remote_async_inferior_event_handler (gdb_client_data);
1030
1031 static bool remote_read_description_p (struct target_ops *target);
1032
1033 static void remote_console_output (const char *msg);
1034
1035 static void remote_btrace_reset (remote_state *rs);
1036
1037 static void remote_unpush_and_throw (remote_target *target);
1038
1039 /* For "remote". */
1040
1041 static struct cmd_list_element *remote_cmdlist;
1042
1043 /* For "set remote" and "show remote". */
1044
1045 static struct cmd_list_element *remote_set_cmdlist;
1046 static struct cmd_list_element *remote_show_cmdlist;
1047
1048 /* Controls whether GDB is willing to use range stepping. */
1049
1050 static bool use_range_stepping = true;
1051
1052 /* Private data that we'll store in (struct thread_info)->priv. */
1053 struct remote_thread_info : public private_thread_info
1054 {
1055 std::string extra;
1056 std::string name;
1057 int core = -1;
1058
1059 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1060 sequence of bytes. */
1061 gdb::byte_vector thread_handle;
1062
1063 /* Whether the target stopped for a breakpoint/watchpoint. */
1064 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
1065
1066 /* This is set to the data address of the access causing the target
1067 to stop for a watchpoint. */
1068 CORE_ADDR watch_data_address = 0;
1069
1070 /* Fields used by the vCont action coalescing implemented in
1071 remote_resume / remote_commit_resume. remote_resume stores each
1072 thread's last resume request in these fields, so that a later
1073 remote_commit_resume knows which is the proper action for this
1074 thread to include in the vCont packet. */
1075
1076 /* True if the last target_resume call for this thread was a step
1077 request, false if a continue request. */
1078 int last_resume_step = 0;
1079
1080 /* The signal specified in the last target_resume call for this
1081 thread. */
1082 gdb_signal last_resume_sig = GDB_SIGNAL_0;
1083
1084 /* Whether this thread was already vCont-resumed on the remote
1085 side. */
1086 int vcont_resumed = 0;
1087 };
1088
1089 remote_state::remote_state ()
1090 : buf (400)
1091 {
1092 }
1093
1094 remote_state::~remote_state ()
1095 {
1096 xfree (this->last_pass_packet);
1097 xfree (this->last_program_signals_packet);
1098 xfree (this->finished_object);
1099 xfree (this->finished_annex);
1100 }
1101
1102 /* Utility: generate error from an incoming stub packet. */
1103 static void
1104 trace_error (char *buf)
1105 {
1106 if (*buf++ != 'E')
1107 return; /* not an error msg */
1108 switch (*buf)
1109 {
1110 case '1': /* malformed packet error */
1111 if (*++buf == '0') /* general case: */
1112 error (_("remote.c: error in outgoing packet."));
1113 else
1114 error (_("remote.c: error in outgoing packet at field #%ld."),
1115 strtol (buf, NULL, 16));
1116 default:
1117 error (_("Target returns error code '%s'."), buf);
1118 }
1119 }
1120
1121 /* Utility: wait for reply from stub, while accepting "O" packets. */
1122
1123 char *
1124 remote_target::remote_get_noisy_reply ()
1125 {
1126 struct remote_state *rs = get_remote_state ();
1127
1128 do /* Loop on reply from remote stub. */
1129 {
1130 char *buf;
1131
1132 QUIT; /* Allow user to bail out with ^C. */
1133 getpkt (&rs->buf, 0);
1134 buf = rs->buf.data ();
1135 if (buf[0] == 'E')
1136 trace_error (buf);
1137 else if (startswith (buf, "qRelocInsn:"))
1138 {
1139 ULONGEST ul;
1140 CORE_ADDR from, to, org_to;
1141 const char *p, *pp;
1142 int adjusted_size = 0;
1143 int relocated = 0;
1144
1145 p = buf + strlen ("qRelocInsn:");
1146 pp = unpack_varlen_hex (p, &ul);
1147 if (*pp != ';')
1148 error (_("invalid qRelocInsn packet: %s"), buf);
1149 from = ul;
1150
1151 p = pp + 1;
1152 unpack_varlen_hex (p, &ul);
1153 to = ul;
1154
1155 org_to = to;
1156
1157 try
1158 {
1159 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
1160 relocated = 1;
1161 }
1162 catch (const gdb_exception &ex)
1163 {
1164 if (ex.error == MEMORY_ERROR)
1165 {
1166 /* Propagate memory errors silently back to the
1167 target. The stub may have limited the range of
1168 addresses we can write to, for example. */
1169 }
1170 else
1171 {
1172 /* Something unexpectedly bad happened. Be verbose
1173 so we can tell what, and propagate the error back
1174 to the stub, so it doesn't get stuck waiting for
1175 a response. */
1176 exception_fprintf (gdb_stderr, ex,
1177 _("warning: relocating instruction: "));
1178 }
1179 putpkt ("E01");
1180 }
1181
1182 if (relocated)
1183 {
1184 adjusted_size = to - org_to;
1185
1186 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
1187 putpkt (buf);
1188 }
1189 }
1190 else if (buf[0] == 'O' && buf[1] != 'K')
1191 remote_console_output (buf + 1); /* 'O' message from stub */
1192 else
1193 return buf; /* Here's the actual reply. */
1194 }
1195 while (1);
1196 }
1197
1198 struct remote_arch_state *
1199 remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
1200 {
1201 remote_arch_state *rsa;
1202
1203 auto it = this->m_arch_states.find (gdbarch);
1204 if (it == this->m_arch_states.end ())
1205 {
1206 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1207 std::forward_as_tuple (gdbarch),
1208 std::forward_as_tuple (gdbarch));
1209 rsa = &p.first->second;
1210
1211 /* Make sure that the packet buffer is plenty big enough for
1212 this architecture. */
1213 if (this->buf.size () < rsa->remote_packet_size)
1214 this->buf.resize (2 * rsa->remote_packet_size);
1215 }
1216 else
1217 rsa = &it->second;
1218
1219 return rsa;
1220 }
1221
1222 /* Fetch the global remote target state. */
1223
1224 remote_state *
1225 remote_target::get_remote_state ()
1226 {
1227 /* Make sure that the remote architecture state has been
1228 initialized, because doing so might reallocate rs->buf. Any
1229 function which calls getpkt also needs to be mindful of changes
1230 to rs->buf, but this call limits the number of places which run
1231 into trouble. */
1232 m_remote_state.get_remote_arch_state (target_gdbarch ());
1233
1234 return &m_remote_state;
1235 }
1236
1237 /* Fetch the remote exec-file from the current program space. */
1238
1239 static const char *
1240 get_remote_exec_file (void)
1241 {
1242 char *remote_exec_file;
1243
1244 remote_exec_file = remote_pspace_data.get (current_program_space);
1245 if (remote_exec_file == NULL)
1246 return "";
1247
1248 return remote_exec_file;
1249 }
1250
1251 /* Set the remote exec file for PSPACE. */
1252
1253 static void
1254 set_pspace_remote_exec_file (struct program_space *pspace,
1255 const char *remote_exec_file)
1256 {
1257 char *old_file = remote_pspace_data.get (pspace);
1258
1259 xfree (old_file);
1260 remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
1261 }
1262
1263 /* The "set/show remote exec-file" set command hook. */
1264
1265 static void
1266 set_remote_exec_file (const char *ignored, int from_tty,
1267 struct cmd_list_element *c)
1268 {
1269 gdb_assert (remote_exec_file_var != NULL);
1270 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1271 }
1272
1273 /* The "set/show remote exec-file" show command hook. */
1274
1275 static void
1276 show_remote_exec_file (struct ui_file *file, int from_tty,
1277 struct cmd_list_element *cmd, const char *value)
1278 {
1279 fprintf_filtered (file, "%s\n", get_remote_exec_file ());
1280 }
1281
1282 static int
1283 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
1284 {
1285 int regnum, num_remote_regs, offset;
1286 struct packet_reg **remote_regs;
1287
1288 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1289 {
1290 struct packet_reg *r = &regs[regnum];
1291
1292 if (register_size (gdbarch, regnum) == 0)
1293 /* Do not try to fetch zero-sized (placeholder) registers. */
1294 r->pnum = -1;
1295 else
1296 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1297
1298 r->regnum = regnum;
1299 }
1300
1301 /* Define the g/G packet format as the contents of each register
1302 with a remote protocol number, in order of ascending protocol
1303 number. */
1304
1305 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
1306 for (num_remote_regs = 0, regnum = 0;
1307 regnum < gdbarch_num_regs (gdbarch);
1308 regnum++)
1309 if (regs[regnum].pnum != -1)
1310 remote_regs[num_remote_regs++] = &regs[regnum];
1311
1312 std::sort (remote_regs, remote_regs + num_remote_regs,
1313 [] (const packet_reg *a, const packet_reg *b)
1314 { return a->pnum < b->pnum; });
1315
1316 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1317 {
1318 remote_regs[regnum]->in_g_packet = 1;
1319 remote_regs[regnum]->offset = offset;
1320 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
1321 }
1322
1323 return offset;
1324 }
1325
1326 /* Given the architecture described by GDBARCH, return the remote
1327 protocol register's number and the register's offset in the g/G
1328 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1329 If the target does not have a mapping for REGNUM, return false,
1330 otherwise, return true. */
1331
1332 int
1333 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1334 int *pnum, int *poffset)
1335 {
1336 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1337
1338 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
1339
1340 map_regcache_remote_table (gdbarch, regs.data ());
1341
1342 *pnum = regs[regnum].pnum;
1343 *poffset = regs[regnum].offset;
1344
1345 return *pnum != -1;
1346 }
1347
1348 remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
1349 {
1350 /* Use the architecture to build a regnum<->pnum table, which will be
1351 1:1 unless a feature set specifies otherwise. */
1352 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
1353
1354 /* Record the maximum possible size of the g packet - it may turn out
1355 to be smaller. */
1356 this->sizeof_g_packet
1357 = map_regcache_remote_table (gdbarch, this->regs.get ());
1358
1359 /* Default maximum number of characters in a packet body. Many
1360 remote stubs have a hardwired buffer size of 400 bytes
1361 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1362 as the maximum packet-size to ensure that the packet and an extra
1363 NUL character can always fit in the buffer. This stops GDB
1364 trashing stubs that try to squeeze an extra NUL into what is
1365 already a full buffer (As of 1999-12-04 that was most stubs). */
1366 this->remote_packet_size = 400 - 1;
1367
1368 /* This one is filled in when a ``g'' packet is received. */
1369 this->actual_register_packet_size = 0;
1370
1371 /* Should rsa->sizeof_g_packet needs more space than the
1372 default, adjust the size accordingly. Remember that each byte is
1373 encoded as two characters. 32 is the overhead for the packet
1374 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
1375 (``$NN:G...#NN'') is a better guess, the below has been padded a
1376 little. */
1377 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1378 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
1379 }
1380
1381 /* Get a pointer to the current remote target. If not connected to a
1382 remote target, return NULL. */
1383
1384 static remote_target *
1385 get_current_remote_target ()
1386 {
1387 target_ops *proc_target = current_inferior ()->process_target ();
1388 return dynamic_cast<remote_target *> (proc_target);
1389 }
1390
1391 /* Return the current allowed size of a remote packet. This is
1392 inferred from the current architecture, and should be used to
1393 limit the length of outgoing packets. */
1394 long
1395 remote_target::get_remote_packet_size ()
1396 {
1397 struct remote_state *rs = get_remote_state ();
1398 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1399
1400 if (rs->explicit_packet_size)
1401 return rs->explicit_packet_size;
1402
1403 return rsa->remote_packet_size;
1404 }
1405
1406 static struct packet_reg *
1407 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1408 long regnum)
1409 {
1410 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
1411 return NULL;
1412 else
1413 {
1414 struct packet_reg *r = &rsa->regs[regnum];
1415
1416 gdb_assert (r->regnum == regnum);
1417 return r;
1418 }
1419 }
1420
1421 static struct packet_reg *
1422 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1423 LONGEST pnum)
1424 {
1425 int i;
1426
1427 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
1428 {
1429 struct packet_reg *r = &rsa->regs[i];
1430
1431 if (r->pnum == pnum)
1432 return r;
1433 }
1434 return NULL;
1435 }
1436
1437 /* Allow the user to specify what sequence to send to the remote
1438 when he requests a program interruption: Although ^C is usually
1439 what remote systems expect (this is the default, here), it is
1440 sometimes preferable to send a break. On other systems such
1441 as the Linux kernel, a break followed by g, which is Magic SysRq g
1442 is required in order to interrupt the execution. */
1443 const char interrupt_sequence_control_c[] = "Ctrl-C";
1444 const char interrupt_sequence_break[] = "BREAK";
1445 const char interrupt_sequence_break_g[] = "BREAK-g";
1446 static const char *const interrupt_sequence_modes[] =
1447 {
1448 interrupt_sequence_control_c,
1449 interrupt_sequence_break,
1450 interrupt_sequence_break_g,
1451 NULL
1452 };
1453 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1454
1455 static void
1456 show_interrupt_sequence (struct ui_file *file, int from_tty,
1457 struct cmd_list_element *c,
1458 const char *value)
1459 {
1460 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1461 fprintf_filtered (file,
1462 _("Send the ASCII ETX character (Ctrl-c) "
1463 "to the remote target to interrupt the "
1464 "execution of the program.\n"));
1465 else if (interrupt_sequence_mode == interrupt_sequence_break)
1466 fprintf_filtered (file,
1467 _("send a break signal to the remote target "
1468 "to interrupt the execution of the program.\n"));
1469 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1470 fprintf_filtered (file,
1471 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1472 "the remote target to interrupt the execution "
1473 "of Linux kernel.\n"));
1474 else
1475 internal_error (__FILE__, __LINE__,
1476 _("Invalid value for interrupt_sequence_mode: %s."),
1477 interrupt_sequence_mode);
1478 }
1479
1480 /* This boolean variable specifies whether interrupt_sequence is sent
1481 to the remote target when gdb connects to it.
1482 This is mostly needed when you debug the Linux kernel: The Linux kernel
1483 expects BREAK g which is Magic SysRq g for connecting gdb. */
1484 static bool interrupt_on_connect = false;
1485
1486 /* This variable is used to implement the "set/show remotebreak" commands.
1487 Since these commands are now deprecated in favor of "set/show remote
1488 interrupt-sequence", it no longer has any effect on the code. */
1489 static bool remote_break;
1490
1491 static void
1492 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
1493 {
1494 if (remote_break)
1495 interrupt_sequence_mode = interrupt_sequence_break;
1496 else
1497 interrupt_sequence_mode = interrupt_sequence_control_c;
1498 }
1499
1500 static void
1501 show_remotebreak (struct ui_file *file, int from_tty,
1502 struct cmd_list_element *c,
1503 const char *value)
1504 {
1505 }
1506
1507 /* This variable sets the number of bits in an address that are to be
1508 sent in a memory ("M" or "m") packet. Normally, after stripping
1509 leading zeros, the entire address would be sent. This variable
1510 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1511 initial implementation of remote.c restricted the address sent in
1512 memory packets to ``host::sizeof long'' bytes - (typically 32
1513 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1514 address was never sent. Since fixing this bug may cause a break in
1515 some remote targets this variable is principally provided to
1516 facilitate backward compatibility. */
1517
1518 static unsigned int remote_address_size;
1519
1520 \f
1521 /* User configurable variables for the number of characters in a
1522 memory read/write packet. MIN (rsa->remote_packet_size,
1523 rsa->sizeof_g_packet) is the default. Some targets need smaller
1524 values (fifo overruns, et.al.) and some users need larger values
1525 (speed up transfers). The variables ``preferred_*'' (the user
1526 request), ``current_*'' (what was actually set) and ``forced_*''
1527 (Positive - a soft limit, negative - a hard limit). */
1528
1529 struct memory_packet_config
1530 {
1531 const char *name;
1532 long size;
1533 int fixed_p;
1534 };
1535
1536 /* The default max memory-write-packet-size, when the setting is
1537 "fixed". The 16k is historical. (It came from older GDB's using
1538 alloca for buffers and the knowledge (folklore?) that some hosts
1539 don't cope very well with large alloca calls.) */
1540 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
1541
1542 /* The minimum remote packet size for memory transfers. Ensures we
1543 can write at least one byte. */
1544 #define MIN_MEMORY_PACKET_SIZE 20
1545
1546 /* Get the memory packet size, assuming it is fixed. */
1547
1548 static long
1549 get_fixed_memory_packet_size (struct memory_packet_config *config)
1550 {
1551 gdb_assert (config->fixed_p);
1552
1553 if (config->size <= 0)
1554 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1555 else
1556 return config->size;
1557 }
1558
1559 /* Compute the current size of a read/write packet. Since this makes
1560 use of ``actual_register_packet_size'' the computation is dynamic. */
1561
1562 long
1563 remote_target::get_memory_packet_size (struct memory_packet_config *config)
1564 {
1565 struct remote_state *rs = get_remote_state ();
1566 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1567
1568 long what_they_get;
1569 if (config->fixed_p)
1570 what_they_get = get_fixed_memory_packet_size (config);
1571 else
1572 {
1573 what_they_get = get_remote_packet_size ();
1574 /* Limit the packet to the size specified by the user. */
1575 if (config->size > 0
1576 && what_they_get > config->size)
1577 what_they_get = config->size;
1578
1579 /* Limit it to the size of the targets ``g'' response unless we have
1580 permission from the stub to use a larger packet size. */
1581 if (rs->explicit_packet_size == 0
1582 && rsa->actual_register_packet_size > 0
1583 && what_they_get > rsa->actual_register_packet_size)
1584 what_they_get = rsa->actual_register_packet_size;
1585 }
1586 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1587 what_they_get = MIN_MEMORY_PACKET_SIZE;
1588
1589 /* Make sure there is room in the global buffer for this packet
1590 (including its trailing NUL byte). */
1591 if (rs->buf.size () < what_they_get + 1)
1592 rs->buf.resize (2 * what_they_get);
1593
1594 return what_they_get;
1595 }
1596
1597 /* Update the size of a read/write packet. If they user wants
1598 something really big then do a sanity check. */
1599
1600 static void
1601 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1602 {
1603 int fixed_p = config->fixed_p;
1604 long size = config->size;
1605
1606 if (args == NULL)
1607 error (_("Argument required (integer, `fixed' or `limited')."));
1608 else if (strcmp (args, "hard") == 0
1609 || strcmp (args, "fixed") == 0)
1610 fixed_p = 1;
1611 else if (strcmp (args, "soft") == 0
1612 || strcmp (args, "limit") == 0)
1613 fixed_p = 0;
1614 else
1615 {
1616 char *end;
1617
1618 size = strtoul (args, &end, 0);
1619 if (args == end)
1620 error (_("Invalid %s (bad syntax)."), config->name);
1621
1622 /* Instead of explicitly capping the size of a packet to or
1623 disallowing it, the user is allowed to set the size to
1624 something arbitrarily large. */
1625 }
1626
1627 /* Extra checks? */
1628 if (fixed_p && !config->fixed_p)
1629 {
1630 /* So that the query shows the correct value. */
1631 long query_size = (size <= 0
1632 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1633 : size);
1634
1635 if (! query (_("The target may not be able to correctly handle a %s\n"
1636 "of %ld bytes. Change the packet size? "),
1637 config->name, query_size))
1638 error (_("Packet size not changed."));
1639 }
1640 /* Update the config. */
1641 config->fixed_p = fixed_p;
1642 config->size = size;
1643 }
1644
1645 static void
1646 show_memory_packet_size (struct memory_packet_config *config)
1647 {
1648 if (config->size == 0)
1649 printf_filtered (_("The %s is 0 (default). "), config->name);
1650 else
1651 printf_filtered (_("The %s is %ld. "), config->name, config->size);
1652 if (config->fixed_p)
1653 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1654 get_fixed_memory_packet_size (config));
1655 else
1656 {
1657 remote_target *remote = get_current_remote_target ();
1658
1659 if (remote != NULL)
1660 printf_filtered (_("Packets are limited to %ld bytes.\n"),
1661 remote->get_memory_packet_size (config));
1662 else
1663 puts_filtered ("The actual limit will be further reduced "
1664 "dependent on the target.\n");
1665 }
1666 }
1667
1668 /* FIXME: needs to be per-remote-target. */
1669 static struct memory_packet_config memory_write_packet_config =
1670 {
1671 "memory-write-packet-size",
1672 };
1673
1674 static void
1675 set_memory_write_packet_size (const char *args, int from_tty)
1676 {
1677 set_memory_packet_size (args, &memory_write_packet_config);
1678 }
1679
1680 static void
1681 show_memory_write_packet_size (const char *args, int from_tty)
1682 {
1683 show_memory_packet_size (&memory_write_packet_config);
1684 }
1685
1686 /* Show the number of hardware watchpoints that can be used. */
1687
1688 static void
1689 show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1690 struct cmd_list_element *c,
1691 const char *value)
1692 {
1693 fprintf_filtered (file, _("The maximum number of target hardware "
1694 "watchpoints is %s.\n"), value);
1695 }
1696
1697 /* Show the length limit (in bytes) for hardware watchpoints. */
1698
1699 static void
1700 show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1701 struct cmd_list_element *c,
1702 const char *value)
1703 {
1704 fprintf_filtered (file, _("The maximum length (in bytes) of a target "
1705 "hardware watchpoint is %s.\n"), value);
1706 }
1707
1708 /* Show the number of hardware breakpoints that can be used. */
1709
1710 static void
1711 show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1712 struct cmd_list_element *c,
1713 const char *value)
1714 {
1715 fprintf_filtered (file, _("The maximum number of target hardware "
1716 "breakpoints is %s.\n"), value);
1717 }
1718
1719 /* Controls the maximum number of characters to display in the debug output
1720 for each remote packet. The remaining characters are omitted. */
1721
1722 static int remote_packet_max_chars = 512;
1723
1724 /* Show the maximum number of characters to display for each remote packet
1725 when remote debugging is enabled. */
1726
1727 static void
1728 show_remote_packet_max_chars (struct ui_file *file, int from_tty,
1729 struct cmd_list_element *c,
1730 const char *value)
1731 {
1732 fprintf_filtered (file, _("Number of remote packet characters to "
1733 "display is %s.\n"), value);
1734 }
1735
1736 long
1737 remote_target::get_memory_write_packet_size ()
1738 {
1739 return get_memory_packet_size (&memory_write_packet_config);
1740 }
1741
1742 /* FIXME: needs to be per-remote-target. */
1743 static struct memory_packet_config memory_read_packet_config =
1744 {
1745 "memory-read-packet-size",
1746 };
1747
1748 static void
1749 set_memory_read_packet_size (const char *args, int from_tty)
1750 {
1751 set_memory_packet_size (args, &memory_read_packet_config);
1752 }
1753
1754 static void
1755 show_memory_read_packet_size (const char *args, int from_tty)
1756 {
1757 show_memory_packet_size (&memory_read_packet_config);
1758 }
1759
1760 long
1761 remote_target::get_memory_read_packet_size ()
1762 {
1763 long size = get_memory_packet_size (&memory_read_packet_config);
1764
1765 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1766 extra buffer size argument before the memory read size can be
1767 increased beyond this. */
1768 if (size > get_remote_packet_size ())
1769 size = get_remote_packet_size ();
1770 return size;
1771 }
1772
1773 \f
1774
1775 struct packet_config
1776 {
1777 const char *name;
1778 const char *title;
1779
1780 /* If auto, GDB auto-detects support for this packet or feature,
1781 either through qSupported, or by trying the packet and looking
1782 at the response. If true, GDB assumes the target supports this
1783 packet. If false, the packet is disabled. Configs that don't
1784 have an associated command always have this set to auto. */
1785 enum auto_boolean detect;
1786
1787 /* Does the target support this packet? */
1788 enum packet_support support;
1789 };
1790
1791 static enum packet_support packet_config_support (struct packet_config *config);
1792 static enum packet_support packet_support (int packet);
1793
1794 static void
1795 show_packet_config_cmd (struct packet_config *config)
1796 {
1797 const char *support = "internal-error";
1798
1799 switch (packet_config_support (config))
1800 {
1801 case PACKET_ENABLE:
1802 support = "enabled";
1803 break;
1804 case PACKET_DISABLE:
1805 support = "disabled";
1806 break;
1807 case PACKET_SUPPORT_UNKNOWN:
1808 support = "unknown";
1809 break;
1810 }
1811 switch (config->detect)
1812 {
1813 case AUTO_BOOLEAN_AUTO:
1814 printf_filtered (_("Support for the `%s' packet "
1815 "is auto-detected, currently %s.\n"),
1816 config->name, support);
1817 break;
1818 case AUTO_BOOLEAN_TRUE:
1819 case AUTO_BOOLEAN_FALSE:
1820 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1821 config->name, support);
1822 break;
1823 }
1824 }
1825
1826 static void
1827 add_packet_config_cmd (struct packet_config *config, const char *name,
1828 const char *title, int legacy)
1829 {
1830 char *set_doc;
1831 char *show_doc;
1832 char *cmd_name;
1833
1834 config->name = name;
1835 config->title = title;
1836 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
1837 name, title);
1838 show_doc = xstrprintf ("Show current use of remote "
1839 "protocol `%s' (%s) packet.",
1840 name, title);
1841 /* set/show TITLE-packet {auto,on,off} */
1842 cmd_name = xstrprintf ("%s-packet", title);
1843 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1844 &config->detect, set_doc,
1845 show_doc, NULL, /* help_doc */
1846 NULL,
1847 show_remote_protocol_packet_cmd,
1848 &remote_set_cmdlist, &remote_show_cmdlist);
1849 /* The command code copies the documentation strings. */
1850 xfree (set_doc);
1851 xfree (show_doc);
1852 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
1853 if (legacy)
1854 {
1855 char *legacy_name;
1856
1857 legacy_name = xstrprintf ("%s-packet", name);
1858 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1859 &remote_set_cmdlist);
1860 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1861 &remote_show_cmdlist);
1862 }
1863 }
1864
1865 static enum packet_result
1866 packet_check_result (const char *buf)
1867 {
1868 if (buf[0] != '\0')
1869 {
1870 /* The stub recognized the packet request. Check that the
1871 operation succeeded. */
1872 if (buf[0] == 'E'
1873 && isxdigit (buf[1]) && isxdigit (buf[2])
1874 && buf[3] == '\0')
1875 /* "Enn" - definitely an error. */
1876 return PACKET_ERROR;
1877
1878 /* Always treat "E." as an error. This will be used for
1879 more verbose error messages, such as E.memtypes. */
1880 if (buf[0] == 'E' && buf[1] == '.')
1881 return PACKET_ERROR;
1882
1883 /* The packet may or may not be OK. Just assume it is. */
1884 return PACKET_OK;
1885 }
1886 else
1887 /* The stub does not support the packet. */
1888 return PACKET_UNKNOWN;
1889 }
1890
1891 static enum packet_result
1892 packet_check_result (const gdb::char_vector &buf)
1893 {
1894 return packet_check_result (buf.data ());
1895 }
1896
1897 static enum packet_result
1898 packet_ok (const char *buf, struct packet_config *config)
1899 {
1900 enum packet_result result;
1901
1902 if (config->detect != AUTO_BOOLEAN_TRUE
1903 && config->support == PACKET_DISABLE)
1904 internal_error (__FILE__, __LINE__,
1905 _("packet_ok: attempt to use a disabled packet"));
1906
1907 result = packet_check_result (buf);
1908 switch (result)
1909 {
1910 case PACKET_OK:
1911 case PACKET_ERROR:
1912 /* The stub recognized the packet request. */
1913 if (config->support == PACKET_SUPPORT_UNKNOWN)
1914 {
1915 if (remote_debug)
1916 fprintf_unfiltered (gdb_stdlog,
1917 "Packet %s (%s) is supported\n",
1918 config->name, config->title);
1919 config->support = PACKET_ENABLE;
1920 }
1921 break;
1922 case PACKET_UNKNOWN:
1923 /* The stub does not support the packet. */
1924 if (config->detect == AUTO_BOOLEAN_AUTO
1925 && config->support == PACKET_ENABLE)
1926 {
1927 /* If the stub previously indicated that the packet was
1928 supported then there is a protocol error. */
1929 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1930 config->name, config->title);
1931 }
1932 else if (config->detect == AUTO_BOOLEAN_TRUE)
1933 {
1934 /* The user set it wrong. */
1935 error (_("Enabled packet %s (%s) not recognized by stub"),
1936 config->name, config->title);
1937 }
1938
1939 if (remote_debug)
1940 fprintf_unfiltered (gdb_stdlog,
1941 "Packet %s (%s) is NOT supported\n",
1942 config->name, config->title);
1943 config->support = PACKET_DISABLE;
1944 break;
1945 }
1946
1947 return result;
1948 }
1949
1950 static enum packet_result
1951 packet_ok (const gdb::char_vector &buf, struct packet_config *config)
1952 {
1953 return packet_ok (buf.data (), config);
1954 }
1955
1956 enum {
1957 PACKET_vCont = 0,
1958 PACKET_X,
1959 PACKET_qSymbol,
1960 PACKET_P,
1961 PACKET_p,
1962 PACKET_Z0,
1963 PACKET_Z1,
1964 PACKET_Z2,
1965 PACKET_Z3,
1966 PACKET_Z4,
1967 PACKET_vFile_setfs,
1968 PACKET_vFile_open,
1969 PACKET_vFile_pread,
1970 PACKET_vFile_pwrite,
1971 PACKET_vFile_close,
1972 PACKET_vFile_unlink,
1973 PACKET_vFile_readlink,
1974 PACKET_vFile_fstat,
1975 PACKET_qXfer_auxv,
1976 PACKET_qXfer_features,
1977 PACKET_qXfer_exec_file,
1978 PACKET_qXfer_libraries,
1979 PACKET_qXfer_libraries_svr4,
1980 PACKET_qXfer_memory_map,
1981 PACKET_qXfer_osdata,
1982 PACKET_qXfer_threads,
1983 PACKET_qXfer_statictrace_read,
1984 PACKET_qXfer_traceframe_info,
1985 PACKET_qXfer_uib,
1986 PACKET_qGetTIBAddr,
1987 PACKET_qGetTLSAddr,
1988 PACKET_qSupported,
1989 PACKET_qTStatus,
1990 PACKET_QPassSignals,
1991 PACKET_QCatchSyscalls,
1992 PACKET_QProgramSignals,
1993 PACKET_QSetWorkingDir,
1994 PACKET_QStartupWithShell,
1995 PACKET_QEnvironmentHexEncoded,
1996 PACKET_QEnvironmentReset,
1997 PACKET_QEnvironmentUnset,
1998 PACKET_qCRC,
1999 PACKET_qSearch_memory,
2000 PACKET_vAttach,
2001 PACKET_vRun,
2002 PACKET_QStartNoAckMode,
2003 PACKET_vKill,
2004 PACKET_qXfer_siginfo_read,
2005 PACKET_qXfer_siginfo_write,
2006 PACKET_qAttached,
2007
2008 /* Support for conditional tracepoints. */
2009 PACKET_ConditionalTracepoints,
2010
2011 /* Support for target-side breakpoint conditions. */
2012 PACKET_ConditionalBreakpoints,
2013
2014 /* Support for target-side breakpoint commands. */
2015 PACKET_BreakpointCommands,
2016
2017 /* Support for fast tracepoints. */
2018 PACKET_FastTracepoints,
2019
2020 /* Support for static tracepoints. */
2021 PACKET_StaticTracepoints,
2022
2023 /* Support for installing tracepoints while a trace experiment is
2024 running. */
2025 PACKET_InstallInTrace,
2026
2027 PACKET_bc,
2028 PACKET_bs,
2029 PACKET_TracepointSource,
2030 PACKET_QAllow,
2031 PACKET_qXfer_fdpic,
2032 PACKET_QDisableRandomization,
2033 PACKET_QAgent,
2034 PACKET_QTBuffer_size,
2035 PACKET_Qbtrace_off,
2036 PACKET_Qbtrace_bts,
2037 PACKET_Qbtrace_pt,
2038 PACKET_qXfer_btrace,
2039
2040 /* Support for the QNonStop packet. */
2041 PACKET_QNonStop,
2042
2043 /* Support for the QThreadEvents packet. */
2044 PACKET_QThreadEvents,
2045
2046 /* Support for multi-process extensions. */
2047 PACKET_multiprocess_feature,
2048
2049 /* Support for enabling and disabling tracepoints while a trace
2050 experiment is running. */
2051 PACKET_EnableDisableTracepoints_feature,
2052
2053 /* Support for collecting strings using the tracenz bytecode. */
2054 PACKET_tracenz_feature,
2055
2056 /* Support for continuing to run a trace experiment while GDB is
2057 disconnected. */
2058 PACKET_DisconnectedTracing_feature,
2059
2060 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
2061 PACKET_augmented_libraries_svr4_read_feature,
2062
2063 /* Support for the qXfer:btrace-conf:read packet. */
2064 PACKET_qXfer_btrace_conf,
2065
2066 /* Support for the Qbtrace-conf:bts:size packet. */
2067 PACKET_Qbtrace_conf_bts_size,
2068
2069 /* Support for swbreak+ feature. */
2070 PACKET_swbreak_feature,
2071
2072 /* Support for hwbreak+ feature. */
2073 PACKET_hwbreak_feature,
2074
2075 /* Support for fork events. */
2076 PACKET_fork_event_feature,
2077
2078 /* Support for vfork events. */
2079 PACKET_vfork_event_feature,
2080
2081 /* Support for the Qbtrace-conf:pt:size packet. */
2082 PACKET_Qbtrace_conf_pt_size,
2083
2084 /* Support for exec events. */
2085 PACKET_exec_event_feature,
2086
2087 /* Support for query supported vCont actions. */
2088 PACKET_vContSupported,
2089
2090 /* Support remote CTRL-C. */
2091 PACKET_vCtrlC,
2092
2093 /* Support TARGET_WAITKIND_NO_RESUMED. */
2094 PACKET_no_resumed,
2095
2096 PACKET_MAX
2097 };
2098
2099 /* FIXME: needs to be per-remote-target. Ignoring this for now,
2100 assuming all remote targets are the same server (thus all support
2101 the same packets). */
2102 static struct packet_config remote_protocol_packets[PACKET_MAX];
2103
2104 /* Returns the packet's corresponding "set remote foo-packet" command
2105 state. See struct packet_config for more details. */
2106
2107 static enum auto_boolean
2108 packet_set_cmd_state (int packet)
2109 {
2110 return remote_protocol_packets[packet].detect;
2111 }
2112
2113 /* Returns whether a given packet or feature is supported. This takes
2114 into account the state of the corresponding "set remote foo-packet"
2115 command, which may be used to bypass auto-detection. */
2116
2117 static enum packet_support
2118 packet_config_support (struct packet_config *config)
2119 {
2120 switch (config->detect)
2121 {
2122 case AUTO_BOOLEAN_TRUE:
2123 return PACKET_ENABLE;
2124 case AUTO_BOOLEAN_FALSE:
2125 return PACKET_DISABLE;
2126 case AUTO_BOOLEAN_AUTO:
2127 return config->support;
2128 default:
2129 gdb_assert_not_reached (_("bad switch"));
2130 }
2131 }
2132
2133 /* Same as packet_config_support, but takes the packet's enum value as
2134 argument. */
2135
2136 static enum packet_support
2137 packet_support (int packet)
2138 {
2139 struct packet_config *config = &remote_protocol_packets[packet];
2140
2141 return packet_config_support (config);
2142 }
2143
2144 static void
2145 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2146 struct cmd_list_element *c,
2147 const char *value)
2148 {
2149 struct packet_config *packet;
2150
2151 for (packet = remote_protocol_packets;
2152 packet < &remote_protocol_packets[PACKET_MAX];
2153 packet++)
2154 {
2155 if (&packet->detect == c->var)
2156 {
2157 show_packet_config_cmd (packet);
2158 return;
2159 }
2160 }
2161 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
2162 c->name);
2163 }
2164
2165 /* Should we try one of the 'Z' requests? */
2166
2167 enum Z_packet_type
2168 {
2169 Z_PACKET_SOFTWARE_BP,
2170 Z_PACKET_HARDWARE_BP,
2171 Z_PACKET_WRITE_WP,
2172 Z_PACKET_READ_WP,
2173 Z_PACKET_ACCESS_WP,
2174 NR_Z_PACKET_TYPES
2175 };
2176
2177 /* For compatibility with older distributions. Provide a ``set remote
2178 Z-packet ...'' command that updates all the Z packet types. */
2179
2180 static enum auto_boolean remote_Z_packet_detect;
2181
2182 static void
2183 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
2184 struct cmd_list_element *c)
2185 {
2186 int i;
2187
2188 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2189 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
2190 }
2191
2192 static void
2193 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2194 struct cmd_list_element *c,
2195 const char *value)
2196 {
2197 int i;
2198
2199 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2200 {
2201 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
2202 }
2203 }
2204
2205 /* Returns true if the multi-process extensions are in effect. */
2206
2207 static int
2208 remote_multi_process_p (struct remote_state *rs)
2209 {
2210 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2211 }
2212
2213 /* Returns true if fork events are supported. */
2214
2215 static int
2216 remote_fork_event_p (struct remote_state *rs)
2217 {
2218 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2219 }
2220
2221 /* Returns true if vfork events are supported. */
2222
2223 static int
2224 remote_vfork_event_p (struct remote_state *rs)
2225 {
2226 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2227 }
2228
2229 /* Returns true if exec events are supported. */
2230
2231 static int
2232 remote_exec_event_p (struct remote_state *rs)
2233 {
2234 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2235 }
2236
2237 /* Insert fork catchpoint target routine. If fork events are enabled
2238 then return success, nothing more to do. */
2239
2240 int
2241 remote_target::insert_fork_catchpoint (int pid)
2242 {
2243 struct remote_state *rs = get_remote_state ();
2244
2245 return !remote_fork_event_p (rs);
2246 }
2247
2248 /* Remove fork catchpoint target routine. Nothing to do, just
2249 return success. */
2250
2251 int
2252 remote_target::remove_fork_catchpoint (int pid)
2253 {
2254 return 0;
2255 }
2256
2257 /* Insert vfork catchpoint target routine. If vfork events are enabled
2258 then return success, nothing more to do. */
2259
2260 int
2261 remote_target::insert_vfork_catchpoint (int pid)
2262 {
2263 struct remote_state *rs = get_remote_state ();
2264
2265 return !remote_vfork_event_p (rs);
2266 }
2267
2268 /* Remove vfork catchpoint target routine. Nothing to do, just
2269 return success. */
2270
2271 int
2272 remote_target::remove_vfork_catchpoint (int pid)
2273 {
2274 return 0;
2275 }
2276
2277 /* Insert exec catchpoint target routine. If exec events are
2278 enabled, just return success. */
2279
2280 int
2281 remote_target::insert_exec_catchpoint (int pid)
2282 {
2283 struct remote_state *rs = get_remote_state ();
2284
2285 return !remote_exec_event_p (rs);
2286 }
2287
2288 /* Remove exec catchpoint target routine. Nothing to do, just
2289 return success. */
2290
2291 int
2292 remote_target::remove_exec_catchpoint (int pid)
2293 {
2294 return 0;
2295 }
2296
2297 \f
2298
2299 /* Take advantage of the fact that the TID field is not used, to tag
2300 special ptids with it set to != 0. */
2301 static const ptid_t magic_null_ptid (42000, -1, 1);
2302 static const ptid_t not_sent_ptid (42000, -2, 1);
2303 static const ptid_t any_thread_ptid (42000, 0, 1);
2304
2305 /* Find out if the stub attached to PID (and hence GDB should offer to
2306 detach instead of killing it when bailing out). */
2307
2308 int
2309 remote_target::remote_query_attached (int pid)
2310 {
2311 struct remote_state *rs = get_remote_state ();
2312 size_t size = get_remote_packet_size ();
2313
2314 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
2315 return 0;
2316
2317 if (remote_multi_process_p (rs))
2318 xsnprintf (rs->buf.data (), size, "qAttached:%x", pid);
2319 else
2320 xsnprintf (rs->buf.data (), size, "qAttached");
2321
2322 putpkt (rs->buf);
2323 getpkt (&rs->buf, 0);
2324
2325 switch (packet_ok (rs->buf,
2326 &remote_protocol_packets[PACKET_qAttached]))
2327 {
2328 case PACKET_OK:
2329 if (strcmp (rs->buf.data (), "1") == 0)
2330 return 1;
2331 break;
2332 case PACKET_ERROR:
2333 warning (_("Remote failure reply: %s"), rs->buf.data ());
2334 break;
2335 case PACKET_UNKNOWN:
2336 break;
2337 }
2338
2339 return 0;
2340 }
2341
2342 /* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2343 has been invented by GDB, instead of reported by the target. Since
2344 we can be connected to a remote system before before knowing about
2345 any inferior, mark the target with execution when we find the first
2346 inferior. If ATTACHED is 1, then we had just attached to this
2347 inferior. If it is 0, then we just created this inferior. If it
2348 is -1, then try querying the remote stub to find out if it had
2349 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2350 attempt to open this inferior's executable as the main executable
2351 if no main executable is open already. */
2352
2353 inferior *
2354 remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached,
2355 int try_open_exec)
2356 {
2357 struct inferior *inf;
2358
2359 /* Check whether this process we're learning about is to be
2360 considered attached, or if is to be considered to have been
2361 spawned by the stub. */
2362 if (attached == -1)
2363 attached = remote_query_attached (pid);
2364
2365 if (gdbarch_has_global_solist (target_gdbarch ()))
2366 {
2367 /* If the target shares code across all inferiors, then every
2368 attach adds a new inferior. */
2369 inf = add_inferior (pid);
2370
2371 /* ... and every inferior is bound to the same program space.
2372 However, each inferior may still have its own address
2373 space. */
2374 inf->aspace = maybe_new_address_space ();
2375 inf->pspace = current_program_space;
2376 }
2377 else
2378 {
2379 /* In the traditional debugging scenario, there's a 1-1 match
2380 between program/address spaces. We simply bind the inferior
2381 to the program space's address space. */
2382 inf = current_inferior ();
2383
2384 /* However, if the current inferior is already bound to a
2385 process, find some other empty inferior. */
2386 if (inf->pid != 0)
2387 {
2388 inf = nullptr;
2389 for (inferior *it : all_inferiors ())
2390 if (it->pid == 0)
2391 {
2392 inf = it;
2393 break;
2394 }
2395 }
2396 if (inf == nullptr)
2397 {
2398 /* Since all inferiors were already bound to a process, add
2399 a new inferior. */
2400 inf = add_inferior_with_spaces ();
2401 }
2402 switch_to_inferior_no_thread (inf);
2403 push_target (this);
2404 inferior_appeared (inf, pid);
2405 }
2406
2407 inf->attach_flag = attached;
2408 inf->fake_pid_p = fake_pid_p;
2409
2410 /* If no main executable is currently open then attempt to
2411 open the file that was executed to create this inferior. */
2412 if (try_open_exec && get_exec_file (0) == NULL)
2413 exec_file_locate_attach (pid, 0, 1);
2414
2415 /* Check for exec file mismatch, and let the user solve it. */
2416 validate_exec_file (1);
2417
2418 return inf;
2419 }
2420
2421 static remote_thread_info *get_remote_thread_info (thread_info *thread);
2422 static remote_thread_info *get_remote_thread_info (remote_target *target,
2423 ptid_t ptid);
2424
2425 /* Add thread PTID to GDB's thread list. Tag it as executing/running
2426 according to RUNNING. */
2427
2428 thread_info *
2429 remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
2430 {
2431 struct remote_state *rs = get_remote_state ();
2432 struct thread_info *thread;
2433
2434 /* GDB historically didn't pull threads in the initial connection
2435 setup. If the remote target doesn't even have a concept of
2436 threads (e.g., a bare-metal target), even if internally we
2437 consider that a single-threaded target, mentioning a new thread
2438 might be confusing to the user. Be silent then, preserving the
2439 age old behavior. */
2440 if (rs->starting_up)
2441 thread = add_thread_silent (this, ptid);
2442 else
2443 thread = add_thread (this, ptid);
2444
2445 get_remote_thread_info (thread)->vcont_resumed = executing;
2446 set_executing (this, ptid, executing);
2447 set_running (this, ptid, running);
2448
2449 return thread;
2450 }
2451
2452 /* Come here when we learn about a thread id from the remote target.
2453 It may be the first time we hear about such thread, so take the
2454 opportunity to add it to GDB's thread list. In case this is the
2455 first time we're noticing its corresponding inferior, add it to
2456 GDB's inferior list as well. EXECUTING indicates whether the
2457 thread is (internally) executing or stopped. */
2458
2459 void
2460 remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
2461 {
2462 /* In non-stop mode, we assume new found threads are (externally)
2463 running until proven otherwise with a stop reply. In all-stop,
2464 we can only get here if all threads are stopped. */
2465 int running = target_is_non_stop_p () ? 1 : 0;
2466
2467 /* If this is a new thread, add it to GDB's thread list.
2468 If we leave it up to WFI to do this, bad things will happen. */
2469
2470 thread_info *tp = find_thread_ptid (this, currthread);
2471 if (tp != NULL && tp->state == THREAD_EXITED)
2472 {
2473 /* We're seeing an event on a thread id we knew had exited.
2474 This has to be a new thread reusing the old id. Add it. */
2475 remote_add_thread (currthread, running, executing);
2476 return;
2477 }
2478
2479 if (!in_thread_list (this, currthread))
2480 {
2481 struct inferior *inf = NULL;
2482 int pid = currthread.pid ();
2483
2484 if (inferior_ptid.is_pid ()
2485 && pid == inferior_ptid.pid ())
2486 {
2487 /* inferior_ptid has no thread member yet. This can happen
2488 with the vAttach -> remote_wait,"TAAthread:" path if the
2489 stub doesn't support qC. This is the first stop reported
2490 after an attach, so this is the main thread. Update the
2491 ptid in the thread list. */
2492 if (in_thread_list (this, ptid_t (pid)))
2493 thread_change_ptid (this, inferior_ptid, currthread);
2494 else
2495 {
2496 remote_add_thread (currthread, running, executing);
2497 inferior_ptid = currthread;
2498 }
2499 return;
2500 }
2501
2502 if (magic_null_ptid == inferior_ptid)
2503 {
2504 /* inferior_ptid is not set yet. This can happen with the
2505 vRun -> remote_wait,"TAAthread:" path if the stub
2506 doesn't support qC. This is the first stop reported
2507 after an attach, so this is the main thread. Update the
2508 ptid in the thread list. */
2509 thread_change_ptid (this, inferior_ptid, currthread);
2510 return;
2511 }
2512
2513 /* When connecting to a target remote, or to a target
2514 extended-remote which already was debugging an inferior, we
2515 may not know about it yet. Add it before adding its child
2516 thread, so notifications are emitted in a sensible order. */
2517 if (find_inferior_pid (this, currthread.pid ()) == NULL)
2518 {
2519 struct remote_state *rs = get_remote_state ();
2520 bool fake_pid_p = !remote_multi_process_p (rs);
2521
2522 inf = remote_add_inferior (fake_pid_p,
2523 currthread.pid (), -1, 1);
2524 }
2525
2526 /* This is really a new thread. Add it. */
2527 thread_info *new_thr
2528 = remote_add_thread (currthread, running, executing);
2529
2530 /* If we found a new inferior, let the common code do whatever
2531 it needs to with it (e.g., read shared libraries, insert
2532 breakpoints), unless we're just setting up an all-stop
2533 connection. */
2534 if (inf != NULL)
2535 {
2536 struct remote_state *rs = get_remote_state ();
2537
2538 if (!rs->starting_up)
2539 notice_new_inferior (new_thr, executing, 0);
2540 }
2541 }
2542 }
2543
2544 /* Return THREAD's private thread data, creating it if necessary. */
2545
2546 static remote_thread_info *
2547 get_remote_thread_info (thread_info *thread)
2548 {
2549 gdb_assert (thread != NULL);
2550
2551 if (thread->priv == NULL)
2552 thread->priv.reset (new remote_thread_info);
2553
2554 return static_cast<remote_thread_info *> (thread->priv.get ());
2555 }
2556
2557 /* Return PTID's private thread data, creating it if necessary. */
2558
2559 static remote_thread_info *
2560 get_remote_thread_info (remote_target *target, ptid_t ptid)
2561 {
2562 thread_info *thr = find_thread_ptid (target, ptid);
2563 return get_remote_thread_info (thr);
2564 }
2565
2566 /* Call this function as a result of
2567 1) A halt indication (T packet) containing a thread id
2568 2) A direct query of currthread
2569 3) Successful execution of set thread */
2570
2571 static void
2572 record_currthread (struct remote_state *rs, ptid_t currthread)
2573 {
2574 rs->general_thread = currthread;
2575 }
2576
2577 /* If 'QPassSignals' is supported, tell the remote stub what signals
2578 it can simply pass through to the inferior without reporting. */
2579
2580 void
2581 remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
2582 {
2583 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2584 {
2585 char *pass_packet, *p;
2586 int count = 0;
2587 struct remote_state *rs = get_remote_state ();
2588
2589 gdb_assert (pass_signals.size () < 256);
2590 for (size_t i = 0; i < pass_signals.size (); i++)
2591 {
2592 if (pass_signals[i])
2593 count++;
2594 }
2595 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2596 strcpy (pass_packet, "QPassSignals:");
2597 p = pass_packet + strlen (pass_packet);
2598 for (size_t i = 0; i < pass_signals.size (); i++)
2599 {
2600 if (pass_signals[i])
2601 {
2602 if (i >= 16)
2603 *p++ = tohex (i >> 4);
2604 *p++ = tohex (i & 15);
2605 if (count)
2606 *p++ = ';';
2607 else
2608 break;
2609 count--;
2610 }
2611 }
2612 *p = 0;
2613 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2614 {
2615 putpkt (pass_packet);
2616 getpkt (&rs->buf, 0);
2617 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2618 xfree (rs->last_pass_packet);
2619 rs->last_pass_packet = pass_packet;
2620 }
2621 else
2622 xfree (pass_packet);
2623 }
2624 }
2625
2626 /* If 'QCatchSyscalls' is supported, tell the remote stub
2627 to report syscalls to GDB. */
2628
2629 int
2630 remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2631 gdb::array_view<const int> syscall_counts)
2632 {
2633 const char *catch_packet;
2634 enum packet_result result;
2635 int n_sysno = 0;
2636
2637 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2638 {
2639 /* Not supported. */
2640 return 1;
2641 }
2642
2643 if (needed && any_count == 0)
2644 {
2645 /* Count how many syscalls are to be caught. */
2646 for (size_t i = 0; i < syscall_counts.size (); i++)
2647 {
2648 if (syscall_counts[i] != 0)
2649 n_sysno++;
2650 }
2651 }
2652
2653 if (remote_debug)
2654 {
2655 fprintf_unfiltered (gdb_stdlog,
2656 "remote_set_syscall_catchpoint "
2657 "pid %d needed %d any_count %d n_sysno %d\n",
2658 pid, needed, any_count, n_sysno);
2659 }
2660
2661 std::string built_packet;
2662 if (needed)
2663 {
2664 /* Prepare a packet with the sysno list, assuming max 8+1
2665 characters for a sysno. If the resulting packet size is too
2666 big, fallback on the non-selective packet. */
2667 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2668 built_packet.reserve (maxpktsz);
2669 built_packet = "QCatchSyscalls:1";
2670 if (any_count == 0)
2671 {
2672 /* Add in each syscall to be caught. */
2673 for (size_t i = 0; i < syscall_counts.size (); i++)
2674 {
2675 if (syscall_counts[i] != 0)
2676 string_appendf (built_packet, ";%zx", i);
2677 }
2678 }
2679 if (built_packet.size () > get_remote_packet_size ())
2680 {
2681 /* catch_packet too big. Fallback to less efficient
2682 non selective mode, with GDB doing the filtering. */
2683 catch_packet = "QCatchSyscalls:1";
2684 }
2685 else
2686 catch_packet = built_packet.c_str ();
2687 }
2688 else
2689 catch_packet = "QCatchSyscalls:0";
2690
2691 struct remote_state *rs = get_remote_state ();
2692
2693 putpkt (catch_packet);
2694 getpkt (&rs->buf, 0);
2695 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2696 if (result == PACKET_OK)
2697 return 0;
2698 else
2699 return -1;
2700 }
2701
2702 /* If 'QProgramSignals' is supported, tell the remote stub what
2703 signals it should pass through to the inferior when detaching. */
2704
2705 void
2706 remote_target::program_signals (gdb::array_view<const unsigned char> signals)
2707 {
2708 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2709 {
2710 char *packet, *p;
2711 int count = 0;
2712 struct remote_state *rs = get_remote_state ();
2713
2714 gdb_assert (signals.size () < 256);
2715 for (size_t i = 0; i < signals.size (); i++)
2716 {
2717 if (signals[i])
2718 count++;
2719 }
2720 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2721 strcpy (packet, "QProgramSignals:");
2722 p = packet + strlen (packet);
2723 for (size_t i = 0; i < signals.size (); i++)
2724 {
2725 if (signal_pass_state (i))
2726 {
2727 if (i >= 16)
2728 *p++ = tohex (i >> 4);
2729 *p++ = tohex (i & 15);
2730 if (count)
2731 *p++ = ';';
2732 else
2733 break;
2734 count--;
2735 }
2736 }
2737 *p = 0;
2738 if (!rs->last_program_signals_packet
2739 || strcmp (rs->last_program_signals_packet, packet) != 0)
2740 {
2741 putpkt (packet);
2742 getpkt (&rs->buf, 0);
2743 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2744 xfree (rs->last_program_signals_packet);
2745 rs->last_program_signals_packet = packet;
2746 }
2747 else
2748 xfree (packet);
2749 }
2750 }
2751
2752 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2753 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2754 thread. If GEN is set, set the general thread, if not, then set
2755 the step/continue thread. */
2756 void
2757 remote_target::set_thread (ptid_t ptid, int gen)
2758 {
2759 struct remote_state *rs = get_remote_state ();
2760 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2761 char *buf = rs->buf.data ();
2762 char *endbuf = buf + get_remote_packet_size ();
2763
2764 if (state == ptid)
2765 return;
2766
2767 *buf++ = 'H';
2768 *buf++ = gen ? 'g' : 'c';
2769 if (ptid == magic_null_ptid)
2770 xsnprintf (buf, endbuf - buf, "0");
2771 else if (ptid == any_thread_ptid)
2772 xsnprintf (buf, endbuf - buf, "0");
2773 else if (ptid == minus_one_ptid)
2774 xsnprintf (buf, endbuf - buf, "-1");
2775 else
2776 write_ptid (buf, endbuf, ptid);
2777 putpkt (rs->buf);
2778 getpkt (&rs->buf, 0);
2779 if (gen)
2780 rs->general_thread = ptid;
2781 else
2782 rs->continue_thread = ptid;
2783 }
2784
2785 void
2786 remote_target::set_general_thread (ptid_t ptid)
2787 {
2788 set_thread (ptid, 1);
2789 }
2790
2791 void
2792 remote_target::set_continue_thread (ptid_t ptid)
2793 {
2794 set_thread (ptid, 0);
2795 }
2796
2797 /* Change the remote current process. Which thread within the process
2798 ends up selected isn't important, as long as it is the same process
2799 as what INFERIOR_PTID points to.
2800
2801 This comes from that fact that there is no explicit notion of
2802 "selected process" in the protocol. The selected process for
2803 general operations is the process the selected general thread
2804 belongs to. */
2805
2806 void
2807 remote_target::set_general_process ()
2808 {
2809 struct remote_state *rs = get_remote_state ();
2810
2811 /* If the remote can't handle multiple processes, don't bother. */
2812 if (!remote_multi_process_p (rs))
2813 return;
2814
2815 /* We only need to change the remote current thread if it's pointing
2816 at some other process. */
2817 if (rs->general_thread.pid () != inferior_ptid.pid ())
2818 set_general_thread (inferior_ptid);
2819 }
2820
2821 \f
2822 /* Return nonzero if this is the main thread that we made up ourselves
2823 to model non-threaded targets as single-threaded. */
2824
2825 static int
2826 remote_thread_always_alive (ptid_t ptid)
2827 {
2828 if (ptid == magic_null_ptid)
2829 /* The main thread is always alive. */
2830 return 1;
2831
2832 if (ptid.pid () != 0 && ptid.lwp () == 0)
2833 /* The main thread is always alive. This can happen after a
2834 vAttach, if the remote side doesn't support
2835 multi-threading. */
2836 return 1;
2837
2838 return 0;
2839 }
2840
2841 /* Return nonzero if the thread PTID is still alive on the remote
2842 system. */
2843
2844 bool
2845 remote_target::thread_alive (ptid_t ptid)
2846 {
2847 struct remote_state *rs = get_remote_state ();
2848 char *p, *endp;
2849
2850 /* Check if this is a thread that we made up ourselves to model
2851 non-threaded targets as single-threaded. */
2852 if (remote_thread_always_alive (ptid))
2853 return 1;
2854
2855 p = rs->buf.data ();
2856 endp = p + get_remote_packet_size ();
2857
2858 *p++ = 'T';
2859 write_ptid (p, endp, ptid);
2860
2861 putpkt (rs->buf);
2862 getpkt (&rs->buf, 0);
2863 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2864 }
2865
2866 /* Return a pointer to a thread name if we know it and NULL otherwise.
2867 The thread_info object owns the memory for the name. */
2868
2869 const char *
2870 remote_target::thread_name (struct thread_info *info)
2871 {
2872 if (info->priv != NULL)
2873 {
2874 const std::string &name = get_remote_thread_info (info)->name;
2875 return !name.empty () ? name.c_str () : NULL;
2876 }
2877
2878 return NULL;
2879 }
2880
2881 /* About these extended threadlist and threadinfo packets. They are
2882 variable length packets but, the fields within them are often fixed
2883 length. They are redundant enough to send over UDP as is the
2884 remote protocol in general. There is a matching unit test module
2885 in libstub. */
2886
2887 /* WARNING: This threadref data structure comes from the remote O.S.,
2888 libstub protocol encoding, and remote.c. It is not particularly
2889 changable. */
2890
2891 /* Right now, the internal structure is int. We want it to be bigger.
2892 Plan to fix this. */
2893
2894 typedef int gdb_threadref; /* Internal GDB thread reference. */
2895
2896 /* gdb_ext_thread_info is an internal GDB data structure which is
2897 equivalent to the reply of the remote threadinfo packet. */
2898
2899 struct gdb_ext_thread_info
2900 {
2901 threadref threadid; /* External form of thread reference. */
2902 int active; /* Has state interesting to GDB?
2903 regs, stack. */
2904 char display[256]; /* Brief state display, name,
2905 blocked/suspended. */
2906 char shortname[32]; /* To be used to name threads. */
2907 char more_display[256]; /* Long info, statistics, queue depth,
2908 whatever. */
2909 };
2910
2911 /* The volume of remote transfers can be limited by submitting
2912 a mask containing bits specifying the desired information.
2913 Use a union of these values as the 'selection' parameter to
2914 get_thread_info. FIXME: Make these TAG names more thread specific. */
2915
2916 #define TAG_THREADID 1
2917 #define TAG_EXISTS 2
2918 #define TAG_DISPLAY 4
2919 #define TAG_THREADNAME 8
2920 #define TAG_MOREDISPLAY 16
2921
2922 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2923
2924 static char *unpack_nibble (char *buf, int *val);
2925
2926 static char *unpack_byte (char *buf, int *value);
2927
2928 static char *pack_int (char *buf, int value);
2929
2930 static char *unpack_int (char *buf, int *value);
2931
2932 static char *unpack_string (char *src, char *dest, int length);
2933
2934 static char *pack_threadid (char *pkt, threadref *id);
2935
2936 static char *unpack_threadid (char *inbuf, threadref *id);
2937
2938 void int_to_threadref (threadref *id, int value);
2939
2940 static int threadref_to_int (threadref *ref);
2941
2942 static void copy_threadref (threadref *dest, threadref *src);
2943
2944 static int threadmatch (threadref *dest, threadref *src);
2945
2946 static char *pack_threadinfo_request (char *pkt, int mode,
2947 threadref *id);
2948
2949 static char *pack_threadlist_request (char *pkt, int startflag,
2950 int threadcount,
2951 threadref *nextthread);
2952
2953 static int remote_newthread_step (threadref *ref, void *context);
2954
2955
2956 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2957 buffer we're allowed to write to. Returns
2958 BUF+CHARACTERS_WRITTEN. */
2959
2960 char *
2961 remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2962 {
2963 int pid, tid;
2964 struct remote_state *rs = get_remote_state ();
2965
2966 if (remote_multi_process_p (rs))
2967 {
2968 pid = ptid.pid ();
2969 if (pid < 0)
2970 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2971 else
2972 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2973 }
2974 tid = ptid.lwp ();
2975 if (tid < 0)
2976 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2977 else
2978 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2979
2980 return buf;
2981 }
2982
2983 /* Extract a PTID from BUF. If non-null, OBUF is set to one past the
2984 last parsed char. Returns null_ptid if no thread id is found, and
2985 throws an error if the thread id has an invalid format. */
2986
2987 static ptid_t
2988 read_ptid (const char *buf, const char **obuf)
2989 {
2990 const char *p = buf;
2991 const char *pp;
2992 ULONGEST pid = 0, tid = 0;
2993
2994 if (*p == 'p')
2995 {
2996 /* Multi-process ptid. */
2997 pp = unpack_varlen_hex (p + 1, &pid);
2998 if (*pp != '.')
2999 error (_("invalid remote ptid: %s"), p);
3000
3001 p = pp;
3002 pp = unpack_varlen_hex (p + 1, &tid);
3003 if (obuf)
3004 *obuf = pp;
3005 return ptid_t (pid, tid, 0);
3006 }
3007
3008 /* No multi-process. Just a tid. */
3009 pp = unpack_varlen_hex (p, &tid);
3010
3011 /* Return null_ptid when no thread id is found. */
3012 if (p == pp)
3013 {
3014 if (obuf)
3015 *obuf = pp;
3016 return null_ptid;
3017 }
3018
3019 /* Since the stub is not sending a process id, then default to
3020 what's in inferior_ptid, unless it's null at this point. If so,
3021 then since there's no way to know the pid of the reported
3022 threads, use the magic number. */
3023 if (inferior_ptid == null_ptid)
3024 pid = magic_null_ptid.pid ();
3025 else
3026 pid = inferior_ptid.pid ();
3027
3028 if (obuf)
3029 *obuf = pp;
3030 return ptid_t (pid, tid, 0);
3031 }
3032
3033 static int
3034 stubhex (int ch)
3035 {
3036 if (ch >= 'a' && ch <= 'f')
3037 return ch - 'a' + 10;
3038 if (ch >= '0' && ch <= '9')
3039 return ch - '0';
3040 if (ch >= 'A' && ch <= 'F')
3041 return ch - 'A' + 10;
3042 return -1;
3043 }
3044
3045 static int
3046 stub_unpack_int (char *buff, int fieldlength)
3047 {
3048 int nibble;
3049 int retval = 0;
3050
3051 while (fieldlength)
3052 {
3053 nibble = stubhex (*buff++);
3054 retval |= nibble;
3055 fieldlength--;
3056 if (fieldlength)
3057 retval = retval << 4;
3058 }
3059 return retval;
3060 }
3061
3062 static char *
3063 unpack_nibble (char *buf, int *val)
3064 {
3065 *val = fromhex (*buf++);
3066 return buf;
3067 }
3068
3069 static char *
3070 unpack_byte (char *buf, int *value)
3071 {
3072 *value = stub_unpack_int (buf, 2);
3073 return buf + 2;
3074 }
3075
3076 static char *
3077 pack_int (char *buf, int value)
3078 {
3079 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3080 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3081 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3082 buf = pack_hex_byte (buf, (value & 0xff));
3083 return buf;
3084 }
3085
3086 static char *
3087 unpack_int (char *buf, int *value)
3088 {
3089 *value = stub_unpack_int (buf, 8);
3090 return buf + 8;
3091 }
3092
3093 #if 0 /* Currently unused, uncomment when needed. */
3094 static char *pack_string (char *pkt, char *string);
3095
3096 static char *
3097 pack_string (char *pkt, char *string)
3098 {
3099 char ch;
3100 int len;
3101
3102 len = strlen (string);
3103 if (len > 200)
3104 len = 200; /* Bigger than most GDB packets, junk??? */
3105 pkt = pack_hex_byte (pkt, len);
3106 while (len-- > 0)
3107 {
3108 ch = *string++;
3109 if ((ch == '\0') || (ch == '#'))
3110 ch = '*'; /* Protect encapsulation. */
3111 *pkt++ = ch;
3112 }
3113 return pkt;
3114 }
3115 #endif /* 0 (unused) */
3116
3117 static char *
3118 unpack_string (char *src, char *dest, int length)
3119 {
3120 while (length--)
3121 *dest++ = *src++;
3122 *dest = '\0';
3123 return src;
3124 }
3125
3126 static char *
3127 pack_threadid (char *pkt, threadref *id)
3128 {
3129 char *limit;
3130 unsigned char *altid;
3131
3132 altid = (unsigned char *) id;
3133 limit = pkt + BUF_THREAD_ID_SIZE;
3134 while (pkt < limit)
3135 pkt = pack_hex_byte (pkt, *altid++);
3136 return pkt;
3137 }
3138
3139
3140 static char *
3141 unpack_threadid (char *inbuf, threadref *id)
3142 {
3143 char *altref;
3144 char *limit = inbuf + BUF_THREAD_ID_SIZE;
3145 int x, y;
3146
3147 altref = (char *) id;
3148
3149 while (inbuf < limit)
3150 {
3151 x = stubhex (*inbuf++);
3152 y = stubhex (*inbuf++);
3153 *altref++ = (x << 4) | y;
3154 }
3155 return inbuf;
3156 }
3157
3158 /* Externally, threadrefs are 64 bits but internally, they are still
3159 ints. This is due to a mismatch of specifications. We would like
3160 to use 64bit thread references internally. This is an adapter
3161 function. */
3162
3163 void
3164 int_to_threadref (threadref *id, int value)
3165 {
3166 unsigned char *scan;
3167
3168 scan = (unsigned char *) id;
3169 {
3170 int i = 4;
3171 while (i--)
3172 *scan++ = 0;
3173 }
3174 *scan++ = (value >> 24) & 0xff;
3175 *scan++ = (value >> 16) & 0xff;
3176 *scan++ = (value >> 8) & 0xff;
3177 *scan++ = (value & 0xff);
3178 }
3179
3180 static int
3181 threadref_to_int (threadref *ref)
3182 {
3183 int i, value = 0;
3184 unsigned char *scan;
3185
3186 scan = *ref;
3187 scan += 4;
3188 i = 4;
3189 while (i-- > 0)
3190 value = (value << 8) | ((*scan++) & 0xff);
3191 return value;
3192 }
3193
3194 static void
3195 copy_threadref (threadref *dest, threadref *src)
3196 {
3197 int i;
3198 unsigned char *csrc, *cdest;
3199
3200 csrc = (unsigned char *) src;
3201 cdest = (unsigned char *) dest;
3202 i = 8;
3203 while (i--)
3204 *cdest++ = *csrc++;
3205 }
3206
3207 static int
3208 threadmatch (threadref *dest, threadref *src)
3209 {
3210 /* Things are broken right now, so just assume we got a match. */
3211 #if 0
3212 unsigned char *srcp, *destp;
3213 int i, result;
3214 srcp = (char *) src;
3215 destp = (char *) dest;
3216
3217 result = 1;
3218 while (i-- > 0)
3219 result &= (*srcp++ == *destp++) ? 1 : 0;
3220 return result;
3221 #endif
3222 return 1;
3223 }
3224
3225 /*
3226 threadid:1, # always request threadid
3227 context_exists:2,
3228 display:4,
3229 unique_name:8,
3230 more_display:16
3231 */
3232
3233 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3234
3235 static char *
3236 pack_threadinfo_request (char *pkt, int mode, threadref *id)
3237 {
3238 *pkt++ = 'q'; /* Info Query */
3239 *pkt++ = 'P'; /* process or thread info */
3240 pkt = pack_int (pkt, mode); /* mode */
3241 pkt = pack_threadid (pkt, id); /* threadid */
3242 *pkt = '\0'; /* terminate */
3243 return pkt;
3244 }
3245
3246 /* These values tag the fields in a thread info response packet. */
3247 /* Tagging the fields allows us to request specific fields and to
3248 add more fields as time goes by. */
3249
3250 #define TAG_THREADID 1 /* Echo the thread identifier. */
3251 #define TAG_EXISTS 2 /* Is this process defined enough to
3252 fetch registers and its stack? */
3253 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
3254 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
3255 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
3256 the process. */
3257
3258 int
3259 remote_target::remote_unpack_thread_info_response (char *pkt,
3260 threadref *expectedref,
3261 gdb_ext_thread_info *info)
3262 {
3263 struct remote_state *rs = get_remote_state ();
3264 int mask, length;
3265 int tag;
3266 threadref ref;
3267 char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */
3268 int retval = 1;
3269
3270 /* info->threadid = 0; FIXME: implement zero_threadref. */
3271 info->active = 0;
3272 info->display[0] = '\0';
3273 info->shortname[0] = '\0';
3274 info->more_display[0] = '\0';
3275
3276 /* Assume the characters indicating the packet type have been
3277 stripped. */
3278 pkt = unpack_int (pkt, &mask); /* arg mask */
3279 pkt = unpack_threadid (pkt, &ref);
3280
3281 if (mask == 0)
3282 warning (_("Incomplete response to threadinfo request."));
3283 if (!threadmatch (&ref, expectedref))
3284 { /* This is an answer to a different request. */
3285 warning (_("ERROR RMT Thread info mismatch."));
3286 return 0;
3287 }
3288 copy_threadref (&info->threadid, &ref);
3289
3290 /* Loop on tagged fields , try to bail if something goes wrong. */
3291
3292 /* Packets are terminated with nulls. */
3293 while ((pkt < limit) && mask && *pkt)
3294 {
3295 pkt = unpack_int (pkt, &tag); /* tag */
3296 pkt = unpack_byte (pkt, &length); /* length */
3297 if (!(tag & mask)) /* Tags out of synch with mask. */
3298 {
3299 warning (_("ERROR RMT: threadinfo tag mismatch."));
3300 retval = 0;
3301 break;
3302 }
3303 if (tag == TAG_THREADID)
3304 {
3305 if (length != 16)
3306 {
3307 warning (_("ERROR RMT: length of threadid is not 16."));
3308 retval = 0;
3309 break;
3310 }
3311 pkt = unpack_threadid (pkt, &ref);
3312 mask = mask & ~TAG_THREADID;
3313 continue;
3314 }
3315 if (tag == TAG_EXISTS)
3316 {
3317 info->active = stub_unpack_int (pkt, length);
3318 pkt += length;
3319 mask = mask & ~(TAG_EXISTS);
3320 if (length > 8)
3321 {
3322 warning (_("ERROR RMT: 'exists' length too long."));
3323 retval = 0;
3324 break;
3325 }
3326 continue;
3327 }
3328 if (tag == TAG_THREADNAME)
3329 {
3330 pkt = unpack_string (pkt, &info->shortname[0], length);
3331 mask = mask & ~TAG_THREADNAME;
3332 continue;
3333 }
3334 if (tag == TAG_DISPLAY)
3335 {
3336 pkt = unpack_string (pkt, &info->display[0], length);
3337 mask = mask & ~TAG_DISPLAY;
3338 continue;
3339 }
3340 if (tag == TAG_MOREDISPLAY)
3341 {
3342 pkt = unpack_string (pkt, &info->more_display[0], length);
3343 mask = mask & ~TAG_MOREDISPLAY;
3344 continue;
3345 }
3346 warning (_("ERROR RMT: unknown thread info tag."));
3347 break; /* Not a tag we know about. */
3348 }
3349 return retval;
3350 }
3351
3352 int
3353 remote_target::remote_get_threadinfo (threadref *threadid,
3354 int fieldset,
3355 gdb_ext_thread_info *info)
3356 {
3357 struct remote_state *rs = get_remote_state ();
3358 int result;
3359
3360 pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
3361 putpkt (rs->buf);
3362 getpkt (&rs->buf, 0);
3363
3364 if (rs->buf[0] == '\0')
3365 return 0;
3366
3367 result = remote_unpack_thread_info_response (&rs->buf[2],
3368 threadid, info);
3369 return result;
3370 }
3371
3372 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3373
3374 static char *
3375 pack_threadlist_request (char *pkt, int startflag, int threadcount,
3376 threadref *nextthread)
3377 {
3378 *pkt++ = 'q'; /* info query packet */
3379 *pkt++ = 'L'; /* Process LIST or threadLIST request */
3380 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
3381 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3382 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3383 *pkt = '\0';
3384 return pkt;
3385 }
3386
3387 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3388
3389 int
3390 remote_target::parse_threadlist_response (char *pkt, int result_limit,
3391 threadref *original_echo,
3392 threadref *resultlist,
3393 int *doneflag)
3394 {
3395 struct remote_state *rs = get_remote_state ();
3396 char *limit;
3397 int count, resultcount, done;
3398
3399 resultcount = 0;
3400 /* Assume the 'q' and 'M chars have been stripped. */
3401 limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
3402 /* done parse past here */
3403 pkt = unpack_byte (pkt, &count); /* count field */
3404 pkt = unpack_nibble (pkt, &done);
3405 /* The first threadid is the argument threadid. */
3406 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3407 while ((count-- > 0) && (pkt < limit))
3408 {
3409 pkt = unpack_threadid (pkt, resultlist++);
3410 if (resultcount++ >= result_limit)
3411 break;
3412 }
3413 if (doneflag)
3414 *doneflag = done;
3415 return resultcount;
3416 }
3417
3418 /* Fetch the next batch of threads from the remote. Returns -1 if the
3419 qL packet is not supported, 0 on error and 1 on success. */
3420
3421 int
3422 remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3423 int result_limit, int *done, int *result_count,
3424 threadref *threadlist)
3425 {
3426 struct remote_state *rs = get_remote_state ();
3427 int result = 1;
3428
3429 /* Truncate result limit to be smaller than the packet size. */
3430 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3431 >= get_remote_packet_size ())
3432 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
3433
3434 pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3435 nextthread);
3436 putpkt (rs->buf);
3437 getpkt (&rs->buf, 0);
3438 if (rs->buf[0] == '\0')
3439 {
3440 /* Packet not supported. */
3441 return -1;
3442 }
3443
3444 *result_count =
3445 parse_threadlist_response (&rs->buf[2], result_limit,
3446 &rs->echo_nextthread, threadlist, done);
3447
3448 if (!threadmatch (&rs->echo_nextthread, nextthread))
3449 {
3450 /* FIXME: This is a good reason to drop the packet. */
3451 /* Possibly, there is a duplicate response. */
3452 /* Possibilities :
3453 retransmit immediatly - race conditions
3454 retransmit after timeout - yes
3455 exit
3456 wait for packet, then exit
3457 */
3458 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
3459 return 0; /* I choose simply exiting. */
3460 }
3461 if (*result_count <= 0)
3462 {
3463 if (*done != 1)
3464 {
3465 warning (_("RMT ERROR : failed to get remote thread list."));
3466 result = 0;
3467 }
3468 return result; /* break; */
3469 }
3470 if (*result_count > result_limit)
3471 {
3472 *result_count = 0;
3473 warning (_("RMT ERROR: threadlist response longer than requested."));
3474 return 0;
3475 }
3476 return result;
3477 }
3478
3479 /* Fetch the list of remote threads, with the qL packet, and call
3480 STEPFUNCTION for each thread found. Stops iterating and returns 1
3481 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3482 STEPFUNCTION returns false. If the packet is not supported,
3483 returns -1. */
3484
3485 int
3486 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3487 void *context, int looplimit)
3488 {
3489 struct remote_state *rs = get_remote_state ();
3490 int done, i, result_count;
3491 int startflag = 1;
3492 int result = 1;
3493 int loopcount = 0;
3494
3495 done = 0;
3496 while (!done)
3497 {
3498 if (loopcount++ > looplimit)
3499 {
3500 result = 0;
3501 warning (_("Remote fetch threadlist -infinite loop-."));
3502 break;
3503 }
3504 result = remote_get_threadlist (startflag, &rs->nextthread,
3505 MAXTHREADLISTRESULTS,
3506 &done, &result_count,
3507 rs->resultthreadlist);
3508 if (result <= 0)
3509 break;
3510 /* Clear for later iterations. */
3511 startflag = 0;
3512 /* Setup to resume next batch of thread references, set nextthread. */
3513 if (result_count >= 1)
3514 copy_threadref (&rs->nextthread,
3515 &rs->resultthreadlist[result_count - 1]);
3516 i = 0;
3517 while (result_count--)
3518 {
3519 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3520 {
3521 result = 0;
3522 break;
3523 }
3524 }
3525 }
3526 return result;
3527 }
3528
3529 /* A thread found on the remote target. */
3530
3531 struct thread_item
3532 {
3533 explicit thread_item (ptid_t ptid_)
3534 : ptid (ptid_)
3535 {}
3536
3537 thread_item (thread_item &&other) = default;
3538 thread_item &operator= (thread_item &&other) = default;
3539
3540 DISABLE_COPY_AND_ASSIGN (thread_item);
3541
3542 /* The thread's PTID. */
3543 ptid_t ptid;
3544
3545 /* The thread's extra info. */
3546 std::string extra;
3547
3548 /* The thread's name. */
3549 std::string name;
3550
3551 /* The core the thread was running on. -1 if not known. */
3552 int core = -1;
3553
3554 /* The thread handle associated with the thread. */
3555 gdb::byte_vector thread_handle;
3556 };
3557
3558 /* Context passed around to the various methods listing remote
3559 threads. As new threads are found, they're added to the ITEMS
3560 vector. */
3561
3562 struct threads_listing_context
3563 {
3564 /* Return true if this object contains an entry for a thread with ptid
3565 PTID. */
3566
3567 bool contains_thread (ptid_t ptid) const
3568 {
3569 auto match_ptid = [&] (const thread_item &item)
3570 {
3571 return item.ptid == ptid;
3572 };
3573
3574 auto it = std::find_if (this->items.begin (),
3575 this->items.end (),
3576 match_ptid);
3577
3578 return it != this->items.end ();
3579 }
3580
3581 /* Remove the thread with ptid PTID. */
3582
3583 void remove_thread (ptid_t ptid)
3584 {
3585 auto match_ptid = [&] (const thread_item &item)
3586 {
3587 return item.ptid == ptid;
3588 };
3589
3590 auto it = std::remove_if (this->items.begin (),
3591 this->items.end (),
3592 match_ptid);
3593
3594 if (it != this->items.end ())
3595 this->items.erase (it);
3596 }
3597
3598 /* The threads found on the remote target. */
3599 std::vector<thread_item> items;
3600 };
3601
3602 static int
3603 remote_newthread_step (threadref *ref, void *data)
3604 {
3605 struct threads_listing_context *context
3606 = (struct threads_listing_context *) data;
3607 int pid = inferior_ptid.pid ();
3608 int lwp = threadref_to_int (ref);
3609 ptid_t ptid (pid, lwp);
3610
3611 context->items.emplace_back (ptid);
3612
3613 return 1; /* continue iterator */
3614 }
3615
3616 #define CRAZY_MAX_THREADS 1000
3617
3618 ptid_t
3619 remote_target::remote_current_thread (ptid_t oldpid)
3620 {
3621 struct remote_state *rs = get_remote_state ();
3622
3623 putpkt ("qC");
3624 getpkt (&rs->buf, 0);
3625 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3626 {
3627 const char *obuf;
3628 ptid_t result;
3629
3630 result = read_ptid (&rs->buf[2], &obuf);
3631 if (*obuf != '\0' && remote_debug)
3632 fprintf_unfiltered (gdb_stdlog,
3633 "warning: garbage in qC reply\n");
3634
3635 return result;
3636 }
3637 else
3638 return oldpid;
3639 }
3640
3641 /* List remote threads using the deprecated qL packet. */
3642
3643 int
3644 remote_target::remote_get_threads_with_ql (threads_listing_context *context)
3645 {
3646 if (remote_threadlist_iterator (remote_newthread_step, context,
3647 CRAZY_MAX_THREADS) >= 0)
3648 return 1;
3649
3650 return 0;
3651 }
3652
3653 #if defined(HAVE_LIBEXPAT)
3654
3655 static void
3656 start_thread (struct gdb_xml_parser *parser,
3657 const struct gdb_xml_element *element,
3658 void *user_data,
3659 std::vector<gdb_xml_value> &attributes)
3660 {
3661 struct threads_listing_context *data
3662 = (struct threads_listing_context *) user_data;
3663 struct gdb_xml_value *attr;
3664
3665 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
3666 ptid_t ptid = read_ptid (id, NULL);
3667
3668 data->items.emplace_back (ptid);
3669 thread_item &item = data->items.back ();
3670
3671 attr = xml_find_attribute (attributes, "core");
3672 if (attr != NULL)
3673 item.core = *(ULONGEST *) attr->value.get ();
3674
3675 attr = xml_find_attribute (attributes, "name");
3676 if (attr != NULL)
3677 item.name = (const char *) attr->value.get ();
3678
3679 attr = xml_find_attribute (attributes, "handle");
3680 if (attr != NULL)
3681 item.thread_handle = hex2bin ((const char *) attr->value.get ());
3682 }
3683
3684 static void
3685 end_thread (struct gdb_xml_parser *parser,
3686 const struct gdb_xml_element *element,
3687 void *user_data, const char *body_text)
3688 {
3689 struct threads_listing_context *data
3690 = (struct threads_listing_context *) user_data;
3691
3692 if (body_text != NULL && *body_text != '\0')
3693 data->items.back ().extra = body_text;
3694 }
3695
3696 const struct gdb_xml_attribute thread_attributes[] = {
3697 { "id", GDB_XML_AF_NONE, NULL, NULL },
3698 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3699 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3700 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3701 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3702 };
3703
3704 const struct gdb_xml_element thread_children[] = {
3705 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3706 };
3707
3708 const struct gdb_xml_element threads_children[] = {
3709 { "thread", thread_attributes, thread_children,
3710 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3711 start_thread, end_thread },
3712 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3713 };
3714
3715 const struct gdb_xml_element threads_elements[] = {
3716 { "threads", NULL, threads_children,
3717 GDB_XML_EF_NONE, NULL, NULL },
3718 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3719 };
3720
3721 #endif
3722
3723 /* List remote threads using qXfer:threads:read. */
3724
3725 int
3726 remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
3727 {
3728 #if defined(HAVE_LIBEXPAT)
3729 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3730 {
3731 gdb::optional<gdb::char_vector> xml
3732 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
3733
3734 if (xml && (*xml)[0] != '\0')
3735 {
3736 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3737 threads_elements, xml->data (), context);
3738 }
3739
3740 return 1;
3741 }
3742 #endif
3743
3744 return 0;
3745 }
3746
3747 /* List remote threads using qfThreadInfo/qsThreadInfo. */
3748
3749 int
3750 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
3751 {
3752 struct remote_state *rs = get_remote_state ();
3753
3754 if (rs->use_threadinfo_query)
3755 {
3756 const char *bufp;
3757
3758 putpkt ("qfThreadInfo");
3759 getpkt (&rs->buf, 0);
3760 bufp = rs->buf.data ();
3761 if (bufp[0] != '\0') /* q packet recognized */
3762 {
3763 while (*bufp++ == 'm') /* reply contains one or more TID */
3764 {
3765 do
3766 {
3767 ptid_t ptid = read_ptid (bufp, &bufp);
3768 context->items.emplace_back (ptid);
3769 }
3770 while (*bufp++ == ','); /* comma-separated list */
3771 putpkt ("qsThreadInfo");
3772 getpkt (&rs->buf, 0);
3773 bufp = rs->buf.data ();
3774 }
3775 return 1;
3776 }
3777 else
3778 {
3779 /* Packet not recognized. */
3780 rs->use_threadinfo_query = 0;
3781 }
3782 }
3783
3784 return 0;
3785 }
3786
3787 /* Return true if INF only has one non-exited thread. */
3788
3789 static bool
3790 has_single_non_exited_thread (inferior *inf)
3791 {
3792 int count = 0;
3793 for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
3794 if (++count > 1)
3795 break;
3796 return count == 1;
3797 }
3798
3799 /* Implement the to_update_thread_list function for the remote
3800 targets. */
3801
3802 void
3803 remote_target::update_thread_list ()
3804 {
3805 struct threads_listing_context context;
3806 int got_list = 0;
3807
3808 /* We have a few different mechanisms to fetch the thread list. Try
3809 them all, starting with the most preferred one first, falling
3810 back to older methods. */
3811 if (remote_get_threads_with_qxfer (&context)
3812 || remote_get_threads_with_qthreadinfo (&context)
3813 || remote_get_threads_with_ql (&context))
3814 {
3815 got_list = 1;
3816
3817 if (context.items.empty ()
3818 && remote_thread_always_alive (inferior_ptid))
3819 {
3820 /* Some targets don't really support threads, but still
3821 reply an (empty) thread list in response to the thread
3822 listing packets, instead of replying "packet not
3823 supported". Exit early so we don't delete the main
3824 thread. */
3825 return;
3826 }
3827
3828 /* CONTEXT now holds the current thread list on the remote
3829 target end. Delete GDB-side threads no longer found on the
3830 target. */
3831 for (thread_info *tp : all_threads_safe ())
3832 {
3833 if (tp->inf->process_target () != this)
3834 continue;
3835
3836 if (!context.contains_thread (tp->ptid))
3837 {
3838 /* Do not remove the thread if it is the last thread in
3839 the inferior. This situation happens when we have a
3840 pending exit process status to process. Otherwise we
3841 may end up with a seemingly live inferior (i.e. pid
3842 != 0) that has no threads. */
3843 if (has_single_non_exited_thread (tp->inf))
3844 continue;
3845
3846 /* Not found. */
3847 delete_thread (tp);
3848 }
3849 }
3850
3851 /* Remove any unreported fork child threads from CONTEXT so
3852 that we don't interfere with follow fork, which is where
3853 creation of such threads is handled. */
3854 remove_new_fork_children (&context);
3855
3856 /* And now add threads we don't know about yet to our list. */
3857 for (thread_item &item : context.items)
3858 {
3859 if (item.ptid != null_ptid)
3860 {
3861 /* In non-stop mode, we assume new found threads are
3862 executing until proven otherwise with a stop reply.
3863 In all-stop, we can only get here if all threads are
3864 stopped. */
3865 int executing = target_is_non_stop_p () ? 1 : 0;
3866
3867 remote_notice_new_inferior (item.ptid, executing);
3868
3869 thread_info *tp = find_thread_ptid (this, item.ptid);
3870 remote_thread_info *info = get_remote_thread_info (tp);
3871 info->core = item.core;
3872 info->extra = std::move (item.extra);
3873 info->name = std::move (item.name);
3874 info->thread_handle = std::move (item.thread_handle);
3875 }
3876 }
3877 }
3878
3879 if (!got_list)
3880 {
3881 /* If no thread listing method is supported, then query whether
3882 each known thread is alive, one by one, with the T packet.
3883 If the target doesn't support threads at all, then this is a
3884 no-op. See remote_thread_alive. */
3885 prune_threads ();
3886 }
3887 }
3888
3889 /*
3890 * Collect a descriptive string about the given thread.
3891 * The target may say anything it wants to about the thread
3892 * (typically info about its blocked / runnable state, name, etc.).
3893 * This string will appear in the info threads display.
3894 *
3895 * Optional: targets are not required to implement this function.
3896 */
3897
3898 const char *
3899 remote_target::extra_thread_info (thread_info *tp)
3900 {
3901 struct remote_state *rs = get_remote_state ();
3902 int set;
3903 threadref id;
3904 struct gdb_ext_thread_info threadinfo;
3905
3906 if (rs->remote_desc == 0) /* paranoia */
3907 internal_error (__FILE__, __LINE__,
3908 _("remote_threads_extra_info"));
3909
3910 if (tp->ptid == magic_null_ptid
3911 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
3912 /* This is the main thread which was added by GDB. The remote
3913 server doesn't know about it. */
3914 return NULL;
3915
3916 std::string &extra = get_remote_thread_info (tp)->extra;
3917
3918 /* If already have cached info, use it. */
3919 if (!extra.empty ())
3920 return extra.c_str ();
3921
3922 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3923 {
3924 /* If we're using qXfer:threads:read, then the extra info is
3925 included in the XML. So if we didn't have anything cached,
3926 it's because there's really no extra info. */
3927 return NULL;
3928 }
3929
3930 if (rs->use_threadextra_query)
3931 {
3932 char *b = rs->buf.data ();
3933 char *endb = b + get_remote_packet_size ();
3934
3935 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3936 b += strlen (b);
3937 write_ptid (b, endb, tp->ptid);
3938
3939 putpkt (rs->buf);
3940 getpkt (&rs->buf, 0);
3941 if (rs->buf[0] != 0)
3942 {
3943 extra.resize (strlen (rs->buf.data ()) / 2);
3944 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
3945 return extra.c_str ();
3946 }
3947 }
3948
3949 /* If the above query fails, fall back to the old method. */
3950 rs->use_threadextra_query = 0;
3951 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3952 | TAG_MOREDISPLAY | TAG_DISPLAY;
3953 int_to_threadref (&id, tp->ptid.lwp ());
3954 if (remote_get_threadinfo (&id, set, &threadinfo))
3955 if (threadinfo.active)
3956 {
3957 if (*threadinfo.shortname)
3958 string_appendf (extra, " Name: %s", threadinfo.shortname);
3959 if (*threadinfo.display)
3960 {
3961 if (!extra.empty ())
3962 extra += ',';
3963 string_appendf (extra, " State: %s", threadinfo.display);
3964 }
3965 if (*threadinfo.more_display)
3966 {
3967 if (!extra.empty ())
3968 extra += ',';
3969 string_appendf (extra, " Priority: %s", threadinfo.more_display);
3970 }
3971 return extra.c_str ();
3972 }
3973 return NULL;
3974 }
3975 \f
3976
3977 bool
3978 remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
3979 struct static_tracepoint_marker *marker)
3980 {
3981 struct remote_state *rs = get_remote_state ();
3982 char *p = rs->buf.data ();
3983
3984 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3985 p += strlen (p);
3986 p += hexnumstr (p, addr);
3987 putpkt (rs->buf);
3988 getpkt (&rs->buf, 0);
3989 p = rs->buf.data ();
3990
3991 if (*p == 'E')
3992 error (_("Remote failure reply: %s"), p);
3993
3994 if (*p++ == 'm')
3995 {
3996 parse_static_tracepoint_marker_definition (p, NULL, marker);
3997 return true;
3998 }
3999
4000 return false;
4001 }
4002
4003 std::vector<static_tracepoint_marker>
4004 remote_target::static_tracepoint_markers_by_strid (const char *strid)
4005 {
4006 struct remote_state *rs = get_remote_state ();
4007 std::vector<static_tracepoint_marker> markers;
4008 const char *p;
4009 static_tracepoint_marker marker;
4010
4011 /* Ask for a first packet of static tracepoint marker
4012 definition. */
4013 putpkt ("qTfSTM");
4014 getpkt (&rs->buf, 0);
4015 p = rs->buf.data ();
4016 if (*p == 'E')
4017 error (_("Remote failure reply: %s"), p);
4018
4019 while (*p++ == 'm')
4020 {
4021 do
4022 {
4023 parse_static_tracepoint_marker_definition (p, &p, &marker);
4024
4025 if (strid == NULL || marker.str_id == strid)
4026 markers.push_back (std::move (marker));
4027 }
4028 while (*p++ == ','); /* comma-separated list */
4029 /* Ask for another packet of static tracepoint definition. */
4030 putpkt ("qTsSTM");
4031 getpkt (&rs->buf, 0);
4032 p = rs->buf.data ();
4033 }
4034
4035 return markers;
4036 }
4037
4038 \f
4039 /* Implement the to_get_ada_task_ptid function for the remote targets. */
4040
4041 ptid_t
4042 remote_target::get_ada_task_ptid (long lwp, long thread)
4043 {
4044 return ptid_t (inferior_ptid.pid (), lwp, 0);
4045 }
4046 \f
4047
4048 /* Restart the remote side; this is an extended protocol operation. */
4049
4050 void
4051 remote_target::extended_remote_restart ()
4052 {
4053 struct remote_state *rs = get_remote_state ();
4054
4055 /* Send the restart command; for reasons I don't understand the
4056 remote side really expects a number after the "R". */
4057 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
4058 putpkt (rs->buf);
4059
4060 remote_fileio_reset ();
4061 }
4062 \f
4063 /* Clean up connection to a remote debugger. */
4064
4065 void
4066 remote_target::close ()
4067 {
4068 /* Make sure we leave stdin registered in the event loop. */
4069 terminal_ours ();
4070
4071 trace_reset_local_state ();
4072
4073 delete this;
4074 }
4075
4076 remote_target::~remote_target ()
4077 {
4078 struct remote_state *rs = get_remote_state ();
4079
4080 /* Check for NULL because we may get here with a partially
4081 constructed target/connection. */
4082 if (rs->remote_desc == nullptr)
4083 return;
4084
4085 serial_close (rs->remote_desc);
4086
4087 /* We are destroying the remote target, so we should discard
4088 everything of this target. */
4089 discard_pending_stop_replies_in_queue ();
4090
4091 if (rs->remote_async_inferior_event_token)
4092 delete_async_event_handler (&rs->remote_async_inferior_event_token);
4093
4094 delete rs->notif_state;
4095 }
4096
4097 /* Query the remote side for the text, data and bss offsets. */
4098
4099 void
4100 remote_target::get_offsets ()
4101 {
4102 struct remote_state *rs = get_remote_state ();
4103 char *buf;
4104 char *ptr;
4105 int lose, num_segments = 0, do_sections, do_segments;
4106 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
4107
4108 if (symfile_objfile == NULL)
4109 return;
4110
4111 putpkt ("qOffsets");
4112 getpkt (&rs->buf, 0);
4113 buf = rs->buf.data ();
4114
4115 if (buf[0] == '\000')
4116 return; /* Return silently. Stub doesn't support
4117 this command. */
4118 if (buf[0] == 'E')
4119 {
4120 warning (_("Remote failure reply: %s"), buf);
4121 return;
4122 }
4123
4124 /* Pick up each field in turn. This used to be done with scanf, but
4125 scanf will make trouble if CORE_ADDR size doesn't match
4126 conversion directives correctly. The following code will work
4127 with any size of CORE_ADDR. */
4128 text_addr = data_addr = bss_addr = 0;
4129 ptr = buf;
4130 lose = 0;
4131
4132 if (startswith (ptr, "Text="))
4133 {
4134 ptr += 5;
4135 /* Don't use strtol, could lose on big values. */
4136 while (*ptr && *ptr != ';')
4137 text_addr = (text_addr << 4) + fromhex (*ptr++);
4138
4139 if (startswith (ptr, ";Data="))
4140 {
4141 ptr += 6;
4142 while (*ptr && *ptr != ';')
4143 data_addr = (data_addr << 4) + fromhex (*ptr++);
4144 }
4145 else
4146 lose = 1;
4147
4148 if (!lose && startswith (ptr, ";Bss="))
4149 {
4150 ptr += 5;
4151 while (*ptr && *ptr != ';')
4152 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
4153
4154 if (bss_addr != data_addr)
4155 warning (_("Target reported unsupported offsets: %s"), buf);
4156 }
4157 else
4158 lose = 1;
4159 }
4160 else if (startswith (ptr, "TextSeg="))
4161 {
4162 ptr += 8;
4163 /* Don't use strtol, could lose on big values. */
4164 while (*ptr && *ptr != ';')
4165 text_addr = (text_addr << 4) + fromhex (*ptr++);
4166 num_segments = 1;
4167
4168 if (startswith (ptr, ";DataSeg="))
4169 {
4170 ptr += 9;
4171 while (*ptr && *ptr != ';')
4172 data_addr = (data_addr << 4) + fromhex (*ptr++);
4173 num_segments++;
4174 }
4175 }
4176 else
4177 lose = 1;
4178
4179 if (lose)
4180 error (_("Malformed response to offset query, %s"), buf);
4181 else if (*ptr != '\0')
4182 warning (_("Target reported unsupported offsets: %s"), buf);
4183
4184 section_offsets offs = symfile_objfile->section_offsets;
4185
4186 symfile_segment_data_up data
4187 = get_symfile_segment_data (symfile_objfile->obfd);
4188 do_segments = (data != NULL);
4189 do_sections = num_segments == 0;
4190
4191 if (num_segments > 0)
4192 {
4193 segments[0] = text_addr;
4194 segments[1] = data_addr;
4195 }
4196 /* If we have two segments, we can still try to relocate everything
4197 by assuming that the .text and .data offsets apply to the whole
4198 text and data segments. Convert the offsets given in the packet
4199 to base addresses for symfile_map_offsets_to_segments. */
4200 else if (data != nullptr && data->segments.size () == 2)
4201 {
4202 segments[0] = data->segments[0].base + text_addr;
4203 segments[1] = data->segments[1].base + data_addr;
4204 num_segments = 2;
4205 }
4206 /* If the object file has only one segment, assume that it is text
4207 rather than data; main programs with no writable data are rare,
4208 but programs with no code are useless. Of course the code might
4209 have ended up in the data segment... to detect that we would need
4210 the permissions here. */
4211 else if (data && data->segments.size () == 1)
4212 {
4213 segments[0] = data->segments[0].base + text_addr;
4214 num_segments = 1;
4215 }
4216 /* There's no way to relocate by segment. */
4217 else
4218 do_segments = 0;
4219
4220 if (do_segments)
4221 {
4222 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd,
4223 data.get (), offs,
4224 num_segments, segments);
4225
4226 if (ret == 0 && !do_sections)
4227 error (_("Can not handle qOffsets TextSeg "
4228 "response with this symbol file"));
4229
4230 if (ret > 0)
4231 do_sections = 0;
4232 }
4233
4234 if (do_sections)
4235 {
4236 offs[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
4237
4238 /* This is a temporary kludge to force data and bss to use the
4239 same offsets because that's what nlmconv does now. The real
4240 solution requires changes to the stub and remote.c that I
4241 don't have time to do right now. */
4242
4243 offs[SECT_OFF_DATA (symfile_objfile)] = data_addr;
4244 offs[SECT_OFF_BSS (symfile_objfile)] = data_addr;
4245 }
4246
4247 objfile_relocate (symfile_objfile, offs);
4248 }
4249
4250 /* Send interrupt_sequence to remote target. */
4251
4252 void
4253 remote_target::send_interrupt_sequence ()
4254 {
4255 struct remote_state *rs = get_remote_state ();
4256
4257 if (interrupt_sequence_mode == interrupt_sequence_control_c)
4258 remote_serial_write ("\x03", 1);
4259 else if (interrupt_sequence_mode == interrupt_sequence_break)
4260 serial_send_break (rs->remote_desc);
4261 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4262 {
4263 serial_send_break (rs->remote_desc);
4264 remote_serial_write ("g", 1);
4265 }
4266 else
4267 internal_error (__FILE__, __LINE__,
4268 _("Invalid value for interrupt_sequence_mode: %s."),
4269 interrupt_sequence_mode);
4270 }
4271
4272
4273 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
4274 and extract the PTID. Returns NULL_PTID if not found. */
4275
4276 static ptid_t
4277 stop_reply_extract_thread (char *stop_reply)
4278 {
4279 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4280 {
4281 const char *p;
4282
4283 /* Txx r:val ; r:val (...) */
4284 p = &stop_reply[3];
4285
4286 /* Look for "register" named "thread". */
4287 while (*p != '\0')
4288 {
4289 const char *p1;
4290
4291 p1 = strchr (p, ':');
4292 if (p1 == NULL)
4293 return null_ptid;
4294
4295 if (strncmp (p, "thread", p1 - p) == 0)
4296 return read_ptid (++p1, &p);
4297
4298 p1 = strchr (p, ';');
4299 if (p1 == NULL)
4300 return null_ptid;
4301 p1++;
4302
4303 p = p1;
4304 }
4305 }
4306
4307 return null_ptid;
4308 }
4309
4310 /* Determine the remote side's current thread. If we have a stop
4311 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4312 "thread" register we can extract the current thread from. If not,
4313 ask the remote which is the current thread with qC. The former
4314 method avoids a roundtrip. */
4315
4316 ptid_t
4317 remote_target::get_current_thread (char *wait_status)
4318 {
4319 ptid_t ptid = null_ptid;
4320
4321 /* Note we don't use remote_parse_stop_reply as that makes use of
4322 the target architecture, which we haven't yet fully determined at
4323 this point. */
4324 if (wait_status != NULL)
4325 ptid = stop_reply_extract_thread (wait_status);
4326 if (ptid == null_ptid)
4327 ptid = remote_current_thread (inferior_ptid);
4328
4329 return ptid;
4330 }
4331
4332 /* Query the remote target for which is the current thread/process,
4333 add it to our tables, and update INFERIOR_PTID. The caller is
4334 responsible for setting the state such that the remote end is ready
4335 to return the current thread.
4336
4337 This function is called after handling the '?' or 'vRun' packets,
4338 whose response is a stop reply from which we can also try
4339 extracting the thread. If the target doesn't support the explicit
4340 qC query, we infer the current thread from that stop reply, passed
4341 in in WAIT_STATUS, which may be NULL. */
4342
4343 void
4344 remote_target::add_current_inferior_and_thread (char *wait_status)
4345 {
4346 struct remote_state *rs = get_remote_state ();
4347 bool fake_pid_p = false;
4348
4349 inferior_ptid = null_ptid;
4350
4351 /* Now, if we have thread information, update inferior_ptid. */
4352 ptid_t curr_ptid = get_current_thread (wait_status);
4353
4354 if (curr_ptid != null_ptid)
4355 {
4356 if (!remote_multi_process_p (rs))
4357 fake_pid_p = true;
4358 }
4359 else
4360 {
4361 /* Without this, some commands which require an active target
4362 (such as kill) won't work. This variable serves (at least)
4363 double duty as both the pid of the target process (if it has
4364 such), and as a flag indicating that a target is active. */
4365 curr_ptid = magic_null_ptid;
4366 fake_pid_p = true;
4367 }
4368
4369 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
4370
4371 /* Add the main thread and switch to it. Don't try reading
4372 registers yet, since we haven't fetched the target description
4373 yet. */
4374 thread_info *tp = add_thread_silent (this, curr_ptid);
4375 switch_to_thread_no_regs (tp);
4376 }
4377
4378 /* Print info about a thread that was found already stopped on
4379 connection. */
4380
4381 static void
4382 print_one_stopped_thread (struct thread_info *thread)
4383 {
4384 struct target_waitstatus *ws = &thread->suspend.waitstatus;
4385
4386 switch_to_thread (thread);
4387 thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
4388 set_current_sal_from_frame (get_current_frame ());
4389
4390 thread->suspend.waitstatus_pending_p = 0;
4391
4392 if (ws->kind == TARGET_WAITKIND_STOPPED)
4393 {
4394 enum gdb_signal sig = ws->value.sig;
4395
4396 if (signal_print_state (sig))
4397 gdb::observers::signal_received.notify (sig);
4398 }
4399 gdb::observers::normal_stop.notify (NULL, 1);
4400 }
4401
4402 /* Process all initial stop replies the remote side sent in response
4403 to the ? packet. These indicate threads that were already stopped
4404 on initial connection. We mark these threads as stopped and print
4405 their current frame before giving the user the prompt. */
4406
4407 void
4408 remote_target::process_initial_stop_replies (int from_tty)
4409 {
4410 int pending_stop_replies = stop_reply_queue_length ();
4411 struct thread_info *selected = NULL;
4412 struct thread_info *lowest_stopped = NULL;
4413 struct thread_info *first = NULL;
4414
4415 /* Consume the initial pending events. */
4416 while (pending_stop_replies-- > 0)
4417 {
4418 ptid_t waiton_ptid = minus_one_ptid;
4419 ptid_t event_ptid;
4420 struct target_waitstatus ws;
4421 int ignore_event = 0;
4422
4423 memset (&ws, 0, sizeof (ws));
4424 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4425 if (remote_debug)
4426 print_target_wait_results (waiton_ptid, event_ptid, &ws);
4427
4428 switch (ws.kind)
4429 {
4430 case TARGET_WAITKIND_IGNORE:
4431 case TARGET_WAITKIND_NO_RESUMED:
4432 case TARGET_WAITKIND_SIGNALLED:
4433 case TARGET_WAITKIND_EXITED:
4434 /* We shouldn't see these, but if we do, just ignore. */
4435 if (remote_debug)
4436 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
4437 ignore_event = 1;
4438 break;
4439
4440 case TARGET_WAITKIND_EXECD:
4441 xfree (ws.value.execd_pathname);
4442 break;
4443 default:
4444 break;
4445 }
4446
4447 if (ignore_event)
4448 continue;
4449
4450 thread_info *evthread = find_thread_ptid (this, event_ptid);
4451
4452 if (ws.kind == TARGET_WAITKIND_STOPPED)
4453 {
4454 enum gdb_signal sig = ws.value.sig;
4455
4456 /* Stubs traditionally report SIGTRAP as initial signal,
4457 instead of signal 0. Suppress it. */
4458 if (sig == GDB_SIGNAL_TRAP)
4459 sig = GDB_SIGNAL_0;
4460 evthread->suspend.stop_signal = sig;
4461 ws.value.sig = sig;
4462 }
4463
4464 evthread->suspend.waitstatus = ws;
4465
4466 if (ws.kind != TARGET_WAITKIND_STOPPED
4467 || ws.value.sig != GDB_SIGNAL_0)
4468 evthread->suspend.waitstatus_pending_p = 1;
4469
4470 set_executing (this, event_ptid, false);
4471 set_running (this, event_ptid, false);
4472 get_remote_thread_info (evthread)->vcont_resumed = 0;
4473 }
4474
4475 /* "Notice" the new inferiors before anything related to
4476 registers/memory. */
4477 for (inferior *inf : all_non_exited_inferiors (this))
4478 {
4479 inf->needs_setup = 1;
4480
4481 if (non_stop)
4482 {
4483 thread_info *thread = any_live_thread_of_inferior (inf);
4484 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
4485 from_tty);
4486 }
4487 }
4488
4489 /* If all-stop on top of non-stop, pause all threads. Note this
4490 records the threads' stop pc, so must be done after "noticing"
4491 the inferiors. */
4492 if (!non_stop)
4493 {
4494 stop_all_threads ();
4495
4496 /* If all threads of an inferior were already stopped, we
4497 haven't setup the inferior yet. */
4498 for (inferior *inf : all_non_exited_inferiors (this))
4499 {
4500 if (inf->needs_setup)
4501 {
4502 thread_info *thread = any_live_thread_of_inferior (inf);
4503 switch_to_thread_no_regs (thread);
4504 setup_inferior (0);
4505 }
4506 }
4507 }
4508
4509 /* Now go over all threads that are stopped, and print their current
4510 frame. If all-stop, then if there's a signalled thread, pick
4511 that as current. */
4512 for (thread_info *thread : all_non_exited_threads (this))
4513 {
4514 if (first == NULL)
4515 first = thread;
4516
4517 if (!non_stop)
4518 thread->set_running (false);
4519 else if (thread->state != THREAD_STOPPED)
4520 continue;
4521
4522 if (selected == NULL
4523 && thread->suspend.waitstatus_pending_p)
4524 selected = thread;
4525
4526 if (lowest_stopped == NULL
4527 || thread->inf->num < lowest_stopped->inf->num
4528 || thread->per_inf_num < lowest_stopped->per_inf_num)
4529 lowest_stopped = thread;
4530
4531 if (non_stop)
4532 print_one_stopped_thread (thread);
4533 }
4534
4535 /* In all-stop, we only print the status of one thread, and leave
4536 others with their status pending. */
4537 if (!non_stop)
4538 {
4539 thread_info *thread = selected;
4540 if (thread == NULL)
4541 thread = lowest_stopped;
4542 if (thread == NULL)
4543 thread = first;
4544
4545 print_one_stopped_thread (thread);
4546 }
4547
4548 /* For "info program". */
4549 thread_info *thread = inferior_thread ();
4550 if (thread->state == THREAD_STOPPED)
4551 set_last_target_status (this, inferior_ptid, thread->suspend.waitstatus);
4552 }
4553
4554 /* Start the remote connection and sync state. */
4555
4556 void
4557 remote_target::start_remote (int from_tty, int extended_p)
4558 {
4559 struct remote_state *rs = get_remote_state ();
4560 struct packet_config *noack_config;
4561 char *wait_status = NULL;
4562
4563 /* Signal other parts that we're going through the initial setup,
4564 and so things may not be stable yet. E.g., we don't try to
4565 install tracepoints until we've relocated symbols. Also, a
4566 Ctrl-C before we're connected and synced up can't interrupt the
4567 target. Instead, it offers to drop the (potentially wedged)
4568 connection. */
4569 rs->starting_up = 1;
4570
4571 QUIT;
4572
4573 if (interrupt_on_connect)
4574 send_interrupt_sequence ();
4575
4576 /* Ack any packet which the remote side has already sent. */
4577 remote_serial_write ("+", 1);
4578
4579 /* The first packet we send to the target is the optional "supported
4580 packets" request. If the target can answer this, it will tell us
4581 which later probes to skip. */
4582 remote_query_supported ();
4583
4584 /* If the stub wants to get a QAllow, compose one and send it. */
4585 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4586 set_permissions ();
4587
4588 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4589 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4590 as a reply to known packet. For packet "vFile:setfs:" it is an
4591 invalid reply and GDB would return error in
4592 remote_hostio_set_filesystem, making remote files access impossible.
4593 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4594 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4595 {
4596 const char v_mustreplyempty[] = "vMustReplyEmpty";
4597
4598 putpkt (v_mustreplyempty);
4599 getpkt (&rs->buf, 0);
4600 if (strcmp (rs->buf.data (), "OK") == 0)
4601 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4602 else if (strcmp (rs->buf.data (), "") != 0)
4603 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4604 rs->buf.data ());
4605 }
4606
4607 /* Next, we possibly activate noack mode.
4608
4609 If the QStartNoAckMode packet configuration is set to AUTO,
4610 enable noack mode if the stub reported a wish for it with
4611 qSupported.
4612
4613 If set to TRUE, then enable noack mode even if the stub didn't
4614 report it in qSupported. If the stub doesn't reply OK, the
4615 session ends with an error.
4616
4617 If FALSE, then don't activate noack mode, regardless of what the
4618 stub claimed should be the default with qSupported. */
4619
4620 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4621 if (packet_config_support (noack_config) != PACKET_DISABLE)
4622 {
4623 putpkt ("QStartNoAckMode");
4624 getpkt (&rs->buf, 0);
4625 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4626 rs->noack_mode = 1;
4627 }
4628
4629 if (extended_p)
4630 {
4631 /* Tell the remote that we are using the extended protocol. */
4632 putpkt ("!");
4633 getpkt (&rs->buf, 0);
4634 }
4635
4636 /* Let the target know which signals it is allowed to pass down to
4637 the program. */
4638 update_signals_program_target ();
4639
4640 /* Next, if the target can specify a description, read it. We do
4641 this before anything involving memory or registers. */
4642 target_find_description ();
4643
4644 /* Next, now that we know something about the target, update the
4645 address spaces in the program spaces. */
4646 update_address_spaces ();
4647
4648 /* On OSs where the list of libraries is global to all
4649 processes, we fetch them early. */
4650 if (gdbarch_has_global_solist (target_gdbarch ()))
4651 solib_add (NULL, from_tty, auto_solib_add);
4652
4653 if (target_is_non_stop_p ())
4654 {
4655 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4656 error (_("Non-stop mode requested, but remote "
4657 "does not support non-stop"));
4658
4659 putpkt ("QNonStop:1");
4660 getpkt (&rs->buf, 0);
4661
4662 if (strcmp (rs->buf.data (), "OK") != 0)
4663 error (_("Remote refused setting non-stop mode with: %s"),
4664 rs->buf.data ());
4665
4666 /* Find about threads and processes the stub is already
4667 controlling. We default to adding them in the running state.
4668 The '?' query below will then tell us about which threads are
4669 stopped. */
4670 this->update_thread_list ();
4671 }
4672 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4673 {
4674 /* Don't assume that the stub can operate in all-stop mode.
4675 Request it explicitly. */
4676 putpkt ("QNonStop:0");
4677 getpkt (&rs->buf, 0);
4678
4679 if (strcmp (rs->buf.data (), "OK") != 0)
4680 error (_("Remote refused setting all-stop mode with: %s"),
4681 rs->buf.data ());
4682 }
4683
4684 /* Upload TSVs regardless of whether the target is running or not. The
4685 remote stub, such as GDBserver, may have some predefined or builtin
4686 TSVs, even if the target is not running. */
4687 if (get_trace_status (current_trace_status ()) != -1)
4688 {
4689 struct uploaded_tsv *uploaded_tsvs = NULL;
4690
4691 upload_trace_state_variables (&uploaded_tsvs);
4692 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4693 }
4694
4695 /* Check whether the target is running now. */
4696 putpkt ("?");
4697 getpkt (&rs->buf, 0);
4698
4699 if (!target_is_non_stop_p ())
4700 {
4701 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4702 {
4703 if (!extended_p)
4704 error (_("The target is not running (try extended-remote?)"));
4705
4706 /* We're connected, but not running. Drop out before we
4707 call start_remote. */
4708 rs->starting_up = 0;
4709 return;
4710 }
4711 else
4712 {
4713 /* Save the reply for later. */
4714 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4715 strcpy (wait_status, rs->buf.data ());
4716 }
4717
4718 /* Fetch thread list. */
4719 target_update_thread_list ();
4720
4721 /* Let the stub know that we want it to return the thread. */
4722 set_continue_thread (minus_one_ptid);
4723
4724 if (thread_count (this) == 0)
4725 {
4726 /* Target has no concept of threads at all. GDB treats
4727 non-threaded target as single-threaded; add a main
4728 thread. */
4729 add_current_inferior_and_thread (wait_status);
4730 }
4731 else
4732 {
4733 /* We have thread information; select the thread the target
4734 says should be current. If we're reconnecting to a
4735 multi-threaded program, this will ideally be the thread
4736 that last reported an event before GDB disconnected. */
4737 ptid_t curr_thread = get_current_thread (wait_status);
4738 if (curr_thread == null_ptid)
4739 {
4740 /* Odd... The target was able to list threads, but not
4741 tell us which thread was current (no "thread"
4742 register in T stop reply?). Just pick the first
4743 thread in the thread list then. */
4744
4745 if (remote_debug)
4746 fprintf_unfiltered (gdb_stdlog,
4747 "warning: couldn't determine remote "
4748 "current thread; picking first in list.\n");
4749
4750 for (thread_info *tp : all_non_exited_threads (this,
4751 minus_one_ptid))
4752 {
4753 switch_to_thread (tp);
4754 break;
4755 }
4756 }
4757 else
4758 switch_to_thread (find_thread_ptid (this, curr_thread));
4759 }
4760
4761 /* init_wait_for_inferior should be called before get_offsets in order
4762 to manage `inserted' flag in bp loc in a correct state.
4763 breakpoint_init_inferior, called from init_wait_for_inferior, set
4764 `inserted' flag to 0, while before breakpoint_re_set, called from
4765 start_remote, set `inserted' flag to 1. In the initialization of
4766 inferior, breakpoint_init_inferior should be called first, and then
4767 breakpoint_re_set can be called. If this order is broken, state of
4768 `inserted' flag is wrong, and cause some problems on breakpoint
4769 manipulation. */
4770 init_wait_for_inferior ();
4771
4772 get_offsets (); /* Get text, data & bss offsets. */
4773
4774 /* If we could not find a description using qXfer, and we know
4775 how to do it some other way, try again. This is not
4776 supported for non-stop; it could be, but it is tricky if
4777 there are no stopped threads when we connect. */
4778 if (remote_read_description_p (this)
4779 && gdbarch_target_desc (target_gdbarch ()) == NULL)
4780 {
4781 target_clear_description ();
4782 target_find_description ();
4783 }
4784
4785 /* Use the previously fetched status. */
4786 gdb_assert (wait_status != NULL);
4787 strcpy (rs->buf.data (), wait_status);
4788 rs->cached_wait_status = 1;
4789
4790 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
4791 }
4792 else
4793 {
4794 /* Clear WFI global state. Do this before finding about new
4795 threads and inferiors, and setting the current inferior.
4796 Otherwise we would clear the proceed status of the current
4797 inferior when we want its stop_soon state to be preserved
4798 (see notice_new_inferior). */
4799 init_wait_for_inferior ();
4800
4801 /* In non-stop, we will either get an "OK", meaning that there
4802 are no stopped threads at this time; or, a regular stop
4803 reply. In the latter case, there may be more than one thread
4804 stopped --- we pull them all out using the vStopped
4805 mechanism. */
4806 if (strcmp (rs->buf.data (), "OK") != 0)
4807 {
4808 struct notif_client *notif = &notif_client_stop;
4809
4810 /* remote_notif_get_pending_replies acks this one, and gets
4811 the rest out. */
4812 rs->notif_state->pending_event[notif_client_stop.id]
4813 = remote_notif_parse (this, notif, rs->buf.data ());
4814 remote_notif_get_pending_events (notif);
4815 }
4816
4817 if (thread_count (this) == 0)
4818 {
4819 if (!extended_p)
4820 error (_("The target is not running (try extended-remote?)"));
4821
4822 /* We're connected, but not running. Drop out before we
4823 call start_remote. */
4824 rs->starting_up = 0;
4825 return;
4826 }
4827
4828 /* In non-stop mode, any cached wait status will be stored in
4829 the stop reply queue. */
4830 gdb_assert (wait_status == NULL);
4831
4832 /* Report all signals during attach/startup. */
4833 pass_signals ({});
4834
4835 /* If there are already stopped threads, mark them stopped and
4836 report their stops before giving the prompt to the user. */
4837 process_initial_stop_replies (from_tty);
4838
4839 if (target_can_async_p ())
4840 target_async (1);
4841 }
4842
4843 /* If we connected to a live target, do some additional setup. */
4844 if (target_has_execution)
4845 {
4846 if (symfile_objfile) /* No use without a symbol-file. */
4847 remote_check_symbols ();
4848 }
4849
4850 /* Possibly the target has been engaged in a trace run started
4851 previously; find out where things are at. */
4852 if (get_trace_status (current_trace_status ()) != -1)
4853 {
4854 struct uploaded_tp *uploaded_tps = NULL;
4855
4856 if (current_trace_status ()->running)
4857 printf_filtered (_("Trace is already running on the target.\n"));
4858
4859 upload_tracepoints (&uploaded_tps);
4860
4861 merge_uploaded_tracepoints (&uploaded_tps);
4862 }
4863
4864 /* Possibly the target has been engaged in a btrace record started
4865 previously; find out where things are at. */
4866 remote_btrace_maybe_reopen ();
4867
4868 /* The thread and inferior lists are now synchronized with the
4869 target, our symbols have been relocated, and we're merged the
4870 target's tracepoints with ours. We're done with basic start
4871 up. */
4872 rs->starting_up = 0;
4873
4874 /* Maybe breakpoints are global and need to be inserted now. */
4875 if (breakpoints_should_be_inserted_now ())
4876 insert_breakpoints ();
4877 }
4878
4879 const char *
4880 remote_target::connection_string ()
4881 {
4882 remote_state *rs = get_remote_state ();
4883
4884 if (rs->remote_desc->name != NULL)
4885 return rs->remote_desc->name;
4886 else
4887 return NULL;
4888 }
4889
4890 /* Open a connection to a remote debugger.
4891 NAME is the filename used for communication. */
4892
4893 void
4894 remote_target::open (const char *name, int from_tty)
4895 {
4896 open_1 (name, from_tty, 0);
4897 }
4898
4899 /* Open a connection to a remote debugger using the extended
4900 remote gdb protocol. NAME is the filename used for communication. */
4901
4902 void
4903 extended_remote_target::open (const char *name, int from_tty)
4904 {
4905 open_1 (name, from_tty, 1 /*extended_p */);
4906 }
4907
4908 /* Reset all packets back to "unknown support". Called when opening a
4909 new connection to a remote target. */
4910
4911 static void
4912 reset_all_packet_configs_support (void)
4913 {
4914 int i;
4915
4916 for (i = 0; i < PACKET_MAX; i++)
4917 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4918 }
4919
4920 /* Initialize all packet configs. */
4921
4922 static void
4923 init_all_packet_configs (void)
4924 {
4925 int i;
4926
4927 for (i = 0; i < PACKET_MAX; i++)
4928 {
4929 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4930 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4931 }
4932 }
4933
4934 /* Symbol look-up. */
4935
4936 void
4937 remote_target::remote_check_symbols ()
4938 {
4939 char *tmp;
4940 int end;
4941
4942 /* The remote side has no concept of inferiors that aren't running
4943 yet, it only knows about running processes. If we're connected
4944 but our current inferior is not running, we should not invite the
4945 remote target to request symbol lookups related to its
4946 (unrelated) current process. */
4947 if (!target_has_execution)
4948 return;
4949
4950 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4951 return;
4952
4953 /* Make sure the remote is pointing at the right process. Note
4954 there's no way to select "no process". */
4955 set_general_process ();
4956
4957 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4958 because we need both at the same time. */
4959 gdb::char_vector msg (get_remote_packet_size ());
4960 gdb::char_vector reply (get_remote_packet_size ());
4961
4962 /* Invite target to request symbol lookups. */
4963
4964 putpkt ("qSymbol::");
4965 getpkt (&reply, 0);
4966 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4967
4968 while (startswith (reply.data (), "qSymbol:"))
4969 {
4970 struct bound_minimal_symbol sym;
4971
4972 tmp = &reply[8];
4973 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
4974 strlen (tmp) / 2);
4975 msg[end] = '\0';
4976 sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
4977 if (sym.minsym == NULL)
4978 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
4979 &reply[8]);
4980 else
4981 {
4982 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4983 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4984
4985 /* If this is a function address, return the start of code
4986 instead of any data function descriptor. */
4987 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4988 sym_addr,
4989 current_top_target ());
4990
4991 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
4992 phex_nz (sym_addr, addr_size), &reply[8]);
4993 }
4994
4995 putpkt (msg.data ());
4996 getpkt (&reply, 0);
4997 }
4998 }
4999
5000 static struct serial *
5001 remote_serial_open (const char *name)
5002 {
5003 static int udp_warning = 0;
5004
5005 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
5006 of in ser-tcp.c, because it is the remote protocol assuming that the
5007 serial connection is reliable and not the serial connection promising
5008 to be. */
5009 if (!udp_warning && startswith (name, "udp:"))
5010 {
5011 warning (_("The remote protocol may be unreliable over UDP.\n"
5012 "Some events may be lost, rendering further debugging "
5013 "impossible."));
5014 udp_warning = 1;
5015 }
5016
5017 return serial_open (name);
5018 }
5019
5020 /* Inform the target of our permission settings. The permission flags
5021 work without this, but if the target knows the settings, it can do
5022 a couple things. First, it can add its own check, to catch cases
5023 that somehow manage to get by the permissions checks in target
5024 methods. Second, if the target is wired to disallow particular
5025 settings (for instance, a system in the field that is not set up to
5026 be able to stop at a breakpoint), it can object to any unavailable
5027 permissions. */
5028
5029 void
5030 remote_target::set_permissions ()
5031 {
5032 struct remote_state *rs = get_remote_state ();
5033
5034 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
5035 "WriteReg:%x;WriteMem:%x;"
5036 "InsertBreak:%x;InsertTrace:%x;"
5037 "InsertFastTrace:%x;Stop:%x",
5038 may_write_registers, may_write_memory,
5039 may_insert_breakpoints, may_insert_tracepoints,
5040 may_insert_fast_tracepoints, may_stop);
5041 putpkt (rs->buf);
5042 getpkt (&rs->buf, 0);
5043
5044 /* If the target didn't like the packet, warn the user. Do not try
5045 to undo the user's settings, that would just be maddening. */
5046 if (strcmp (rs->buf.data (), "OK") != 0)
5047 warning (_("Remote refused setting permissions with: %s"),
5048 rs->buf.data ());
5049 }
5050
5051 /* This type describes each known response to the qSupported
5052 packet. */
5053 struct protocol_feature
5054 {
5055 /* The name of this protocol feature. */
5056 const char *name;
5057
5058 /* The default for this protocol feature. */
5059 enum packet_support default_support;
5060
5061 /* The function to call when this feature is reported, or after
5062 qSupported processing if the feature is not supported.
5063 The first argument points to this structure. The second
5064 argument indicates whether the packet requested support be
5065 enabled, disabled, or probed (or the default, if this function
5066 is being called at the end of processing and this feature was
5067 not reported). The third argument may be NULL; if not NULL, it
5068 is a NUL-terminated string taken from the packet following
5069 this feature's name and an equals sign. */
5070 void (*func) (remote_target *remote, const struct protocol_feature *,
5071 enum packet_support, const char *);
5072
5073 /* The corresponding packet for this feature. Only used if
5074 FUNC is remote_supported_packet. */
5075 int packet;
5076 };
5077
5078 static void
5079 remote_supported_packet (remote_target *remote,
5080 const struct protocol_feature *feature,
5081 enum packet_support support,
5082 const char *argument)
5083 {
5084 if (argument)
5085 {
5086 warning (_("Remote qSupported response supplied an unexpected value for"
5087 " \"%s\"."), feature->name);
5088 return;
5089 }
5090
5091 remote_protocol_packets[feature->packet].support = support;
5092 }
5093
5094 void
5095 remote_target::remote_packet_size (const protocol_feature *feature,
5096 enum packet_support support, const char *value)
5097 {
5098 struct remote_state *rs = get_remote_state ();
5099
5100 int packet_size;
5101 char *value_end;
5102
5103 if (support != PACKET_ENABLE)
5104 return;
5105
5106 if (value == NULL || *value == '\0')
5107 {
5108 warning (_("Remote target reported \"%s\" without a size."),
5109 feature->name);
5110 return;
5111 }
5112
5113 errno = 0;
5114 packet_size = strtol (value, &value_end, 16);
5115 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5116 {
5117 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5118 feature->name, value);
5119 return;
5120 }
5121
5122 /* Record the new maximum packet size. */
5123 rs->explicit_packet_size = packet_size;
5124 }
5125
5126 static void
5127 remote_packet_size (remote_target *remote, const protocol_feature *feature,
5128 enum packet_support support, const char *value)
5129 {
5130 remote->remote_packet_size (feature, support, value);
5131 }
5132
5133 static const struct protocol_feature remote_protocol_features[] = {
5134 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
5135 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
5136 PACKET_qXfer_auxv },
5137 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5138 PACKET_qXfer_exec_file },
5139 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5140 PACKET_qXfer_features },
5141 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5142 PACKET_qXfer_libraries },
5143 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5144 PACKET_qXfer_libraries_svr4 },
5145 { "augmented-libraries-svr4-read", PACKET_DISABLE,
5146 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
5147 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
5148 PACKET_qXfer_memory_map },
5149 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5150 PACKET_qXfer_osdata },
5151 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5152 PACKET_qXfer_threads },
5153 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5154 PACKET_qXfer_traceframe_info },
5155 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5156 PACKET_QPassSignals },
5157 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5158 PACKET_QCatchSyscalls },
5159 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5160 PACKET_QProgramSignals },
5161 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5162 PACKET_QSetWorkingDir },
5163 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5164 PACKET_QStartupWithShell },
5165 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5166 PACKET_QEnvironmentHexEncoded },
5167 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5168 PACKET_QEnvironmentReset },
5169 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5170 PACKET_QEnvironmentUnset },
5171 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5172 PACKET_QStartNoAckMode },
5173 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5174 PACKET_multiprocess_feature },
5175 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
5176 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5177 PACKET_qXfer_siginfo_read },
5178 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5179 PACKET_qXfer_siginfo_write },
5180 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
5181 PACKET_ConditionalTracepoints },
5182 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
5183 PACKET_ConditionalBreakpoints },
5184 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
5185 PACKET_BreakpointCommands },
5186 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
5187 PACKET_FastTracepoints },
5188 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
5189 PACKET_StaticTracepoints },
5190 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
5191 PACKET_InstallInTrace},
5192 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5193 PACKET_DisconnectedTracing_feature },
5194 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5195 PACKET_bc },
5196 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5197 PACKET_bs },
5198 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5199 PACKET_TracepointSource },
5200 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5201 PACKET_QAllow },
5202 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5203 PACKET_EnableDisableTracepoints_feature },
5204 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5205 PACKET_qXfer_fdpic },
5206 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5207 PACKET_qXfer_uib },
5208 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5209 PACKET_QDisableRandomization },
5210 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
5211 { "QTBuffer:size", PACKET_DISABLE,
5212 remote_supported_packet, PACKET_QTBuffer_size},
5213 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
5214 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5215 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
5216 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
5217 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
5218 PACKET_qXfer_btrace },
5219 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
5220 PACKET_qXfer_btrace_conf },
5221 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
5222 PACKET_Qbtrace_conf_bts_size },
5223 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
5224 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
5225 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5226 PACKET_fork_event_feature },
5227 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5228 PACKET_vfork_event_feature },
5229 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5230 PACKET_exec_event_feature },
5231 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
5232 PACKET_Qbtrace_conf_pt_size },
5233 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5234 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
5235 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
5236 };
5237
5238 static char *remote_support_xml;
5239
5240 /* Register string appended to "xmlRegisters=" in qSupported query. */
5241
5242 void
5243 register_remote_support_xml (const char *xml)
5244 {
5245 #if defined(HAVE_LIBEXPAT)
5246 if (remote_support_xml == NULL)
5247 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
5248 else
5249 {
5250 char *copy = xstrdup (remote_support_xml + 13);
5251 char *saveptr;
5252 char *p = strtok_r (copy, ",", &saveptr);
5253
5254 do
5255 {
5256 if (strcmp (p, xml) == 0)
5257 {
5258 /* already there */
5259 xfree (copy);
5260 return;
5261 }
5262 }
5263 while ((p = strtok_r (NULL, ",", &saveptr)) != NULL);
5264 xfree (copy);
5265
5266 remote_support_xml = reconcat (remote_support_xml,
5267 remote_support_xml, ",", xml,
5268 (char *) NULL);
5269 }
5270 #endif
5271 }
5272
5273 static void
5274 remote_query_supported_append (std::string *msg, const char *append)
5275 {
5276 if (!msg->empty ())
5277 msg->append (";");
5278 msg->append (append);
5279 }
5280
5281 void
5282 remote_target::remote_query_supported ()
5283 {
5284 struct remote_state *rs = get_remote_state ();
5285 char *next;
5286 int i;
5287 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5288
5289 /* The packet support flags are handled differently for this packet
5290 than for most others. We treat an error, a disabled packet, and
5291 an empty response identically: any features which must be reported
5292 to be used will be automatically disabled. An empty buffer
5293 accomplishes this, since that is also the representation for a list
5294 containing no features. */
5295
5296 rs->buf[0] = 0;
5297 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
5298 {
5299 std::string q;
5300
5301 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
5302 remote_query_supported_append (&q, "multiprocess+");
5303
5304 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
5305 remote_query_supported_append (&q, "swbreak+");
5306 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
5307 remote_query_supported_append (&q, "hwbreak+");
5308
5309 remote_query_supported_append (&q, "qRelocInsn+");
5310
5311 if (packet_set_cmd_state (PACKET_fork_event_feature)
5312 != AUTO_BOOLEAN_FALSE)
5313 remote_query_supported_append (&q, "fork-events+");
5314 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5315 != AUTO_BOOLEAN_FALSE)
5316 remote_query_supported_append (&q, "vfork-events+");
5317 if (packet_set_cmd_state (PACKET_exec_event_feature)
5318 != AUTO_BOOLEAN_FALSE)
5319 remote_query_supported_append (&q, "exec-events+");
5320
5321 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
5322 remote_query_supported_append (&q, "vContSupported+");
5323
5324 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
5325 remote_query_supported_append (&q, "QThreadEvents+");
5326
5327 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
5328 remote_query_supported_append (&q, "no-resumed+");
5329
5330 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5331 the qSupported:xmlRegisters=i386 handling. */
5332 if (remote_support_xml != NULL
5333 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
5334 remote_query_supported_append (&q, remote_support_xml);
5335
5336 q = "qSupported:" + q;
5337 putpkt (q.c_str ());
5338
5339 getpkt (&rs->buf, 0);
5340
5341 /* If an error occured, warn, but do not return - just reset the
5342 buffer to empty and go on to disable features. */
5343 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5344 == PACKET_ERROR)
5345 {
5346 warning (_("Remote failure reply: %s"), rs->buf.data ());
5347 rs->buf[0] = 0;
5348 }
5349 }
5350
5351 memset (seen, 0, sizeof (seen));
5352
5353 next = rs->buf.data ();
5354 while (*next)
5355 {
5356 enum packet_support is_supported;
5357 char *p, *end, *name_end, *value;
5358
5359 /* First separate out this item from the rest of the packet. If
5360 there's another item after this, we overwrite the separator
5361 (terminated strings are much easier to work with). */
5362 p = next;
5363 end = strchr (p, ';');
5364 if (end == NULL)
5365 {
5366 end = p + strlen (p);
5367 next = end;
5368 }
5369 else
5370 {
5371 *end = '\0';
5372 next = end + 1;
5373
5374 if (end == p)
5375 {
5376 warning (_("empty item in \"qSupported\" response"));
5377 continue;
5378 }
5379 }
5380
5381 name_end = strchr (p, '=');
5382 if (name_end)
5383 {
5384 /* This is a name=value entry. */
5385 is_supported = PACKET_ENABLE;
5386 value = name_end + 1;
5387 *name_end = '\0';
5388 }
5389 else
5390 {
5391 value = NULL;
5392 switch (end[-1])
5393 {
5394 case '+':
5395 is_supported = PACKET_ENABLE;
5396 break;
5397
5398 case '-':
5399 is_supported = PACKET_DISABLE;
5400 break;
5401
5402 case '?':
5403 is_supported = PACKET_SUPPORT_UNKNOWN;
5404 break;
5405
5406 default:
5407 warning (_("unrecognized item \"%s\" "
5408 "in \"qSupported\" response"), p);
5409 continue;
5410 }
5411 end[-1] = '\0';
5412 }
5413
5414 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5415 if (strcmp (remote_protocol_features[i].name, p) == 0)
5416 {
5417 const struct protocol_feature *feature;
5418
5419 seen[i] = 1;
5420 feature = &remote_protocol_features[i];
5421 feature->func (this, feature, is_supported, value);
5422 break;
5423 }
5424 }
5425
5426 /* If we increased the packet size, make sure to increase the global
5427 buffer size also. We delay this until after parsing the entire
5428 qSupported packet, because this is the same buffer we were
5429 parsing. */
5430 if (rs->buf.size () < rs->explicit_packet_size)
5431 rs->buf.resize (rs->explicit_packet_size);
5432
5433 /* Handle the defaults for unmentioned features. */
5434 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5435 if (!seen[i])
5436 {
5437 const struct protocol_feature *feature;
5438
5439 feature = &remote_protocol_features[i];
5440 feature->func (this, feature, feature->default_support, NULL);
5441 }
5442 }
5443
5444 /* Serial QUIT handler for the remote serial descriptor.
5445
5446 Defers handling a Ctrl-C until we're done with the current
5447 command/response packet sequence, unless:
5448
5449 - We're setting up the connection. Don't send a remote interrupt
5450 request, as we're not fully synced yet. Quit immediately
5451 instead.
5452
5453 - The target has been resumed in the foreground
5454 (target_terminal::is_ours is false) with a synchronous resume
5455 packet, and we're blocked waiting for the stop reply, thus a
5456 Ctrl-C should be immediately sent to the target.
5457
5458 - We get a second Ctrl-C while still within the same serial read or
5459 write. In that case the serial is seemingly wedged --- offer to
5460 quit/disconnect.
5461
5462 - We see a second Ctrl-C without target response, after having
5463 previously interrupted the target. In that case the target/stub
5464 is probably wedged --- offer to quit/disconnect.
5465 */
5466
5467 void
5468 remote_target::remote_serial_quit_handler ()
5469 {
5470 struct remote_state *rs = get_remote_state ();
5471
5472 if (check_quit_flag ())
5473 {
5474 /* If we're starting up, we're not fully synced yet. Quit
5475 immediately. */
5476 if (rs->starting_up)
5477 quit ();
5478 else if (rs->got_ctrlc_during_io)
5479 {
5480 if (query (_("The target is not responding to GDB commands.\n"
5481 "Stop debugging it? ")))
5482 remote_unpush_and_throw (this);
5483 }
5484 /* If ^C has already been sent once, offer to disconnect. */
5485 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
5486 interrupt_query ();
5487 /* All-stop protocol, and blocked waiting for stop reply. Send
5488 an interrupt request. */
5489 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
5490 target_interrupt ();
5491 else
5492 rs->got_ctrlc_during_io = 1;
5493 }
5494 }
5495
5496 /* The remote_target that is current while the quit handler is
5497 overridden with remote_serial_quit_handler. */
5498 static remote_target *curr_quit_handler_target;
5499
5500 static void
5501 remote_serial_quit_handler ()
5502 {
5503 curr_quit_handler_target->remote_serial_quit_handler ();
5504 }
5505
5506 /* Remove the remote target from the target stack of each inferior
5507 that is using it. Upper targets depend on it so remove them
5508 first. */
5509
5510 static void
5511 remote_unpush_target (remote_target *target)
5512 {
5513 /* We have to unpush the target from all inferiors, even those that
5514 aren't running. */
5515 scoped_restore_current_inferior restore_current_inferior;
5516
5517 for (inferior *inf : all_inferiors (target))
5518 {
5519 switch_to_inferior_no_thread (inf);
5520 pop_all_targets_at_and_above (process_stratum);
5521 generic_mourn_inferior ();
5522 }
5523 }
5524
5525 static void
5526 remote_unpush_and_throw (remote_target *target)
5527 {
5528 remote_unpush_target (target);
5529 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5530 }
5531
5532 void
5533 remote_target::open_1 (const char *name, int from_tty, int extended_p)
5534 {
5535 remote_target *curr_remote = get_current_remote_target ();
5536
5537 if (name == 0)
5538 error (_("To open a remote debug connection, you need to specify what\n"
5539 "serial device is attached to the remote system\n"
5540 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5541
5542 /* If we're connected to a running target, target_preopen will kill it.
5543 Ask this question first, before target_preopen has a chance to kill
5544 anything. */
5545 if (curr_remote != NULL && !target_has_execution)
5546 {
5547 if (from_tty
5548 && !query (_("Already connected to a remote target. Disconnect? ")))
5549 error (_("Still connected."));
5550 }
5551
5552 /* Here the possibly existing remote target gets unpushed. */
5553 target_preopen (from_tty);
5554
5555 remote_fileio_reset ();
5556 reopen_exec_file ();
5557 reread_symbols ();
5558
5559 remote_target *remote
5560 = (extended_p ? new extended_remote_target () : new remote_target ());
5561 target_ops_up target_holder (remote);
5562
5563 remote_state *rs = remote->get_remote_state ();
5564
5565 /* See FIXME above. */
5566 if (!target_async_permitted)
5567 rs->wait_forever_enabled_p = 1;
5568
5569 rs->remote_desc = remote_serial_open (name);
5570 if (!rs->remote_desc)
5571 perror_with_name (name);
5572
5573 if (baud_rate != -1)
5574 {
5575 if (serial_setbaudrate (rs->remote_desc, baud_rate))
5576 {
5577 /* The requested speed could not be set. Error out to
5578 top level after closing remote_desc. Take care to
5579 set remote_desc to NULL to avoid closing remote_desc
5580 more than once. */
5581 serial_close (rs->remote_desc);
5582 rs->remote_desc = NULL;
5583 perror_with_name (name);
5584 }
5585 }
5586
5587 serial_setparity (rs->remote_desc, serial_parity);
5588 serial_raw (rs->remote_desc);
5589
5590 /* If there is something sitting in the buffer we might take it as a
5591 response to a command, which would be bad. */
5592 serial_flush_input (rs->remote_desc);
5593
5594 if (from_tty)
5595 {
5596 puts_filtered ("Remote debugging using ");
5597 puts_filtered (name);
5598 puts_filtered ("\n");
5599 }
5600
5601 /* Switch to using the remote target now. */
5602 push_target (std::move (target_holder));
5603
5604 /* Register extra event sources in the event loop. */
5605 rs->remote_async_inferior_event_token
5606 = create_async_event_handler (remote_async_inferior_event_handler,
5607 remote);
5608 rs->notif_state = remote_notif_state_allocate (remote);
5609
5610 /* Reset the target state; these things will be queried either by
5611 remote_query_supported or as they are needed. */
5612 reset_all_packet_configs_support ();
5613 rs->cached_wait_status = 0;
5614 rs->explicit_packet_size = 0;
5615 rs->noack_mode = 0;
5616 rs->extended = extended_p;
5617 rs->waiting_for_stop_reply = 0;
5618 rs->ctrlc_pending_p = 0;
5619 rs->got_ctrlc_during_io = 0;
5620
5621 rs->general_thread = not_sent_ptid;
5622 rs->continue_thread = not_sent_ptid;
5623 rs->remote_traceframe_number = -1;
5624
5625 rs->last_resume_exec_dir = EXEC_FORWARD;
5626
5627 /* Probe for ability to use "ThreadInfo" query, as required. */
5628 rs->use_threadinfo_query = 1;
5629 rs->use_threadextra_query = 1;
5630
5631 rs->readahead_cache.invalidate ();
5632
5633 if (target_async_permitted)
5634 {
5635 /* FIXME: cagney/1999-09-23: During the initial connection it is
5636 assumed that the target is already ready and able to respond to
5637 requests. Unfortunately remote_start_remote() eventually calls
5638 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
5639 around this. Eventually a mechanism that allows
5640 wait_for_inferior() to expect/get timeouts will be
5641 implemented. */
5642 rs->wait_forever_enabled_p = 0;
5643 }
5644
5645 /* First delete any symbols previously loaded from shared libraries. */
5646 no_shared_libraries (NULL, 0);
5647
5648 /* Start the remote connection. If error() or QUIT, discard this
5649 target (we'd otherwise be in an inconsistent state) and then
5650 propogate the error on up the exception chain. This ensures that
5651 the caller doesn't stumble along blindly assuming that the
5652 function succeeded. The CLI doesn't have this problem but other
5653 UI's, such as MI do.
5654
5655 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5656 this function should return an error indication letting the
5657 caller restore the previous state. Unfortunately the command
5658 ``target remote'' is directly wired to this function making that
5659 impossible. On a positive note, the CLI side of this problem has
5660 been fixed - the function set_cmd_context() makes it possible for
5661 all the ``target ....'' commands to share a common callback
5662 function. See cli-dump.c. */
5663 {
5664
5665 try
5666 {
5667 remote->start_remote (from_tty, extended_p);
5668 }
5669 catch (const gdb_exception &ex)
5670 {
5671 /* Pop the partially set up target - unless something else did
5672 already before throwing the exception. */
5673 if (ex.error != TARGET_CLOSE_ERROR)
5674 remote_unpush_target (remote);
5675 throw;
5676 }
5677 }
5678
5679 remote_btrace_reset (rs);
5680
5681 if (target_async_permitted)
5682 rs->wait_forever_enabled_p = 1;
5683 }
5684
5685 /* Detach the specified process. */
5686
5687 void
5688 remote_target::remote_detach_pid (int pid)
5689 {
5690 struct remote_state *rs = get_remote_state ();
5691
5692 /* This should not be necessary, but the handling for D;PID in
5693 GDBserver versions prior to 8.2 incorrectly assumes that the
5694 selected process points to the same process we're detaching,
5695 leading to misbehavior (and possibly GDBserver crashing) when it
5696 does not. Since it's easy and cheap, work around it by forcing
5697 GDBserver to select GDB's current process. */
5698 set_general_process ();
5699
5700 if (remote_multi_process_p (rs))
5701 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
5702 else
5703 strcpy (rs->buf.data (), "D");
5704
5705 putpkt (rs->buf);
5706 getpkt (&rs->buf, 0);
5707
5708 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5709 ;
5710 else if (rs->buf[0] == '\0')
5711 error (_("Remote doesn't know how to detach"));
5712 else
5713 error (_("Can't detach process."));
5714 }
5715
5716 /* This detaches a program to which we previously attached, using
5717 inferior_ptid to identify the process. After this is done, GDB
5718 can be used to debug some other program. We better not have left
5719 any breakpoints in the target program or it'll die when it hits
5720 one. */
5721
5722 void
5723 remote_target::remote_detach_1 (inferior *inf, int from_tty)
5724 {
5725 int pid = inferior_ptid.pid ();
5726 struct remote_state *rs = get_remote_state ();
5727 int is_fork_parent;
5728
5729 if (!target_has_execution)
5730 error (_("No process to detach from."));
5731
5732 target_announce_detach (from_tty);
5733
5734 /* Tell the remote target to detach. */
5735 remote_detach_pid (pid);
5736
5737 /* Exit only if this is the only active inferior. */
5738 if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1)
5739 puts_filtered (_("Ending remote debugging.\n"));
5740
5741 thread_info *tp = find_thread_ptid (this, inferior_ptid);
5742
5743 /* Check to see if we are detaching a fork parent. Note that if we
5744 are detaching a fork child, tp == NULL. */
5745 is_fork_parent = (tp != NULL
5746 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5747
5748 /* If doing detach-on-fork, we don't mourn, because that will delete
5749 breakpoints that should be available for the followed inferior. */
5750 if (!is_fork_parent)
5751 {
5752 /* Save the pid as a string before mourning, since that will
5753 unpush the remote target, and we need the string after. */
5754 std::string infpid = target_pid_to_str (ptid_t (pid));
5755
5756 target_mourn_inferior (inferior_ptid);
5757 if (print_inferior_events)
5758 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5759 inf->num, infpid.c_str ());
5760 }
5761 else
5762 {
5763 inferior_ptid = null_ptid;
5764 detach_inferior (current_inferior ());
5765 }
5766 }
5767
5768 void
5769 remote_target::detach (inferior *inf, int from_tty)
5770 {
5771 remote_detach_1 (inf, from_tty);
5772 }
5773
5774 void
5775 extended_remote_target::detach (inferior *inf, int from_tty)
5776 {
5777 remote_detach_1 (inf, from_tty);
5778 }
5779
5780 /* Target follow-fork function for remote targets. On entry, and
5781 at return, the current inferior is the fork parent.
5782
5783 Note that although this is currently only used for extended-remote,
5784 it is named remote_follow_fork in anticipation of using it for the
5785 remote target as well. */
5786
5787 bool
5788 remote_target::follow_fork (bool follow_child, bool detach_fork)
5789 {
5790 struct remote_state *rs = get_remote_state ();
5791 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5792
5793 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5794 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5795 {
5796 /* When following the parent and detaching the child, we detach
5797 the child here. For the case of following the child and
5798 detaching the parent, the detach is done in the target-
5799 independent follow fork code in infrun.c. We can't use
5800 target_detach when detaching an unfollowed child because
5801 the client side doesn't know anything about the child. */
5802 if (detach_fork && !follow_child)
5803 {
5804 /* Detach the fork child. */
5805 ptid_t child_ptid;
5806 pid_t child_pid;
5807
5808 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5809 child_pid = child_ptid.pid ();
5810
5811 remote_detach_pid (child_pid);
5812 }
5813 }
5814
5815 return false;
5816 }
5817
5818 /* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5819 in the program space of the new inferior. On entry and at return the
5820 current inferior is the exec'ing inferior. INF is the new exec'd
5821 inferior, which may be the same as the exec'ing inferior unless
5822 follow-exec-mode is "new". */
5823
5824 void
5825 remote_target::follow_exec (struct inferior *inf, const char *execd_pathname)
5826 {
5827 /* We know that this is a target file name, so if it has the "target:"
5828 prefix we strip it off before saving it in the program space. */
5829 if (is_target_filename (execd_pathname))
5830 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5831
5832 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5833 }
5834
5835 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5836
5837 void
5838 remote_target::disconnect (const char *args, int from_tty)
5839 {
5840 if (args)
5841 error (_("Argument given to \"disconnect\" when remotely debugging."));
5842
5843 /* Make sure we unpush even the extended remote targets. Calling
5844 target_mourn_inferior won't unpush, and
5845 remote_target::mourn_inferior won't unpush if there is more than
5846 one inferior left. */
5847 remote_unpush_target (this);
5848
5849 if (from_tty)
5850 puts_filtered ("Ending remote debugging.\n");
5851 }
5852
5853 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5854 be chatty about it. */
5855
5856 void
5857 extended_remote_target::attach (const char *args, int from_tty)
5858 {
5859 struct remote_state *rs = get_remote_state ();
5860 int pid;
5861 char *wait_status = NULL;
5862
5863 pid = parse_pid_to_attach (args);
5864
5865 /* Remote PID can be freely equal to getpid, do not check it here the same
5866 way as in other targets. */
5867
5868 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5869 error (_("This target does not support attaching to a process"));
5870
5871 if (from_tty)
5872 {
5873 const char *exec_file = get_exec_file (0);
5874
5875 if (exec_file)
5876 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5877 target_pid_to_str (ptid_t (pid)).c_str ());
5878 else
5879 printf_unfiltered (_("Attaching to %s\n"),
5880 target_pid_to_str (ptid_t (pid)).c_str ());
5881 }
5882
5883 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
5884 putpkt (rs->buf);
5885 getpkt (&rs->buf, 0);
5886
5887 switch (packet_ok (rs->buf,
5888 &remote_protocol_packets[PACKET_vAttach]))
5889 {
5890 case PACKET_OK:
5891 if (!target_is_non_stop_p ())
5892 {
5893 /* Save the reply for later. */
5894 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
5895 strcpy (wait_status, rs->buf.data ());
5896 }
5897 else if (strcmp (rs->buf.data (), "OK") != 0)
5898 error (_("Attaching to %s failed with: %s"),
5899 target_pid_to_str (ptid_t (pid)).c_str (),
5900 rs->buf.data ());
5901 break;
5902 case PACKET_UNKNOWN:
5903 error (_("This target does not support attaching to a process"));
5904 default:
5905 error (_("Attaching to %s failed"),
5906 target_pid_to_str (ptid_t (pid)).c_str ());
5907 }
5908
5909 set_current_inferior (remote_add_inferior (false, pid, 1, 0));
5910
5911 inferior_ptid = ptid_t (pid);
5912
5913 if (target_is_non_stop_p ())
5914 {
5915 struct thread_info *thread;
5916
5917 /* Get list of threads. */
5918 update_thread_list ();
5919
5920 thread = first_thread_of_inferior (current_inferior ());
5921 if (thread)
5922 inferior_ptid = thread->ptid;
5923 else
5924 inferior_ptid = ptid_t (pid);
5925
5926 /* Invalidate our notion of the remote current thread. */
5927 record_currthread (rs, minus_one_ptid);
5928 }
5929 else
5930 {
5931 /* Now, if we have thread information, update inferior_ptid. */
5932 inferior_ptid = remote_current_thread (inferior_ptid);
5933
5934 /* Add the main thread to the thread list. */
5935 thread_info *thr = add_thread_silent (this, inferior_ptid);
5936 /* Don't consider the thread stopped until we've processed the
5937 saved stop reply. */
5938 set_executing (this, thr->ptid, true);
5939 }
5940
5941 /* Next, if the target can specify a description, read it. We do
5942 this before anything involving memory or registers. */
5943 target_find_description ();
5944
5945 if (!target_is_non_stop_p ())
5946 {
5947 /* Use the previously fetched status. */
5948 gdb_assert (wait_status != NULL);
5949
5950 if (target_can_async_p ())
5951 {
5952 struct notif_event *reply
5953 = remote_notif_parse (this, &notif_client_stop, wait_status);
5954
5955 push_stop_reply ((struct stop_reply *) reply);
5956
5957 target_async (1);
5958 }
5959 else
5960 {
5961 gdb_assert (wait_status != NULL);
5962 strcpy (rs->buf.data (), wait_status);
5963 rs->cached_wait_status = 1;
5964 }
5965 }
5966 else
5967 gdb_assert (wait_status == NULL);
5968 }
5969
5970 /* Implementation of the to_post_attach method. */
5971
5972 void
5973 extended_remote_target::post_attach (int pid)
5974 {
5975 /* Get text, data & bss offsets. */
5976 get_offsets ();
5977
5978 /* In certain cases GDB might not have had the chance to start
5979 symbol lookup up until now. This could happen if the debugged
5980 binary is not using shared libraries, the vsyscall page is not
5981 present (on Linux) and the binary itself hadn't changed since the
5982 debugging process was started. */
5983 if (symfile_objfile != NULL)
5984 remote_check_symbols();
5985 }
5986
5987 \f
5988 /* Check for the availability of vCont. This function should also check
5989 the response. */
5990
5991 void
5992 remote_target::remote_vcont_probe ()
5993 {
5994 remote_state *rs = get_remote_state ();
5995 char *buf;
5996
5997 strcpy (rs->buf.data (), "vCont?");
5998 putpkt (rs->buf);
5999 getpkt (&rs->buf, 0);
6000 buf = rs->buf.data ();
6001
6002 /* Make sure that the features we assume are supported. */
6003 if (startswith (buf, "vCont"))
6004 {
6005 char *p = &buf[5];
6006 int support_c, support_C;
6007
6008 rs->supports_vCont.s = 0;
6009 rs->supports_vCont.S = 0;
6010 support_c = 0;
6011 support_C = 0;
6012 rs->supports_vCont.t = 0;
6013 rs->supports_vCont.r = 0;
6014 while (p && *p == ';')
6015 {
6016 p++;
6017 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
6018 rs->supports_vCont.s = 1;
6019 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
6020 rs->supports_vCont.S = 1;
6021 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
6022 support_c = 1;
6023 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
6024 support_C = 1;
6025 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
6026 rs->supports_vCont.t = 1;
6027 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
6028 rs->supports_vCont.r = 1;
6029
6030 p = strchr (p, ';');
6031 }
6032
6033 /* If c, and C are not all supported, we can't use vCont. Clearing
6034 BUF will make packet_ok disable the packet. */
6035 if (!support_c || !support_C)
6036 buf[0] = 0;
6037 }
6038
6039 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
6040 rs->supports_vCont_probed = true;
6041 }
6042
6043 /* Helper function for building "vCont" resumptions. Write a
6044 resumption to P. ENDP points to one-passed-the-end of the buffer
6045 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
6046 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
6047 resumed thread should be single-stepped and/or signalled. If PTID
6048 equals minus_one_ptid, then all threads are resumed; if PTID
6049 represents a process, then all threads of the process are resumed;
6050 the thread to be stepped and/or signalled is given in the global
6051 INFERIOR_PTID. */
6052
6053 char *
6054 remote_target::append_resumption (char *p, char *endp,
6055 ptid_t ptid, int step, gdb_signal siggnal)
6056 {
6057 struct remote_state *rs = get_remote_state ();
6058
6059 if (step && siggnal != GDB_SIGNAL_0)
6060 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
6061 else if (step
6062 /* GDB is willing to range step. */
6063 && use_range_stepping
6064 /* Target supports range stepping. */
6065 && rs->supports_vCont.r
6066 /* We don't currently support range stepping multiple
6067 threads with a wildcard (though the protocol allows it,
6068 so stubs shouldn't make an active effort to forbid
6069 it). */
6070 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
6071 {
6072 struct thread_info *tp;
6073
6074 if (ptid == minus_one_ptid)
6075 {
6076 /* If we don't know about the target thread's tid, then
6077 we're resuming magic_null_ptid (see caller). */
6078 tp = find_thread_ptid (this, magic_null_ptid);
6079 }
6080 else
6081 tp = find_thread_ptid (this, ptid);
6082 gdb_assert (tp != NULL);
6083
6084 if (tp->control.may_range_step)
6085 {
6086 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6087
6088 p += xsnprintf (p, endp - p, ";r%s,%s",
6089 phex_nz (tp->control.step_range_start,
6090 addr_size),
6091 phex_nz (tp->control.step_range_end,
6092 addr_size));
6093 }
6094 else
6095 p += xsnprintf (p, endp - p, ";s");
6096 }
6097 else if (step)
6098 p += xsnprintf (p, endp - p, ";s");
6099 else if (siggnal != GDB_SIGNAL_0)
6100 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6101 else
6102 p += xsnprintf (p, endp - p, ";c");
6103
6104 if (remote_multi_process_p (rs) && ptid.is_pid ())
6105 {
6106 ptid_t nptid;
6107
6108 /* All (-1) threads of process. */
6109 nptid = ptid_t (ptid.pid (), -1, 0);
6110
6111 p += xsnprintf (p, endp - p, ":");
6112 p = write_ptid (p, endp, nptid);
6113 }
6114 else if (ptid != minus_one_ptid)
6115 {
6116 p += xsnprintf (p, endp - p, ":");
6117 p = write_ptid (p, endp, ptid);
6118 }
6119
6120 return p;
6121 }
6122
6123 /* Clear the thread's private info on resume. */
6124
6125 static void
6126 resume_clear_thread_private_info (struct thread_info *thread)
6127 {
6128 if (thread->priv != NULL)
6129 {
6130 remote_thread_info *priv = get_remote_thread_info (thread);
6131
6132 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6133 priv->watch_data_address = 0;
6134 }
6135 }
6136
6137 /* Append a vCont continue-with-signal action for threads that have a
6138 non-zero stop signal. */
6139
6140 char *
6141 remote_target::append_pending_thread_resumptions (char *p, char *endp,
6142 ptid_t ptid)
6143 {
6144 for (thread_info *thread : all_non_exited_threads (this, ptid))
6145 if (inferior_ptid != thread->ptid
6146 && thread->suspend.stop_signal != GDB_SIGNAL_0)
6147 {
6148 p = append_resumption (p, endp, thread->ptid,
6149 0, thread->suspend.stop_signal);
6150 thread->suspend.stop_signal = GDB_SIGNAL_0;
6151 resume_clear_thread_private_info (thread);
6152 }
6153
6154 return p;
6155 }
6156
6157 /* Set the target running, using the packets that use Hc
6158 (c/s/C/S). */
6159
6160 void
6161 remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6162 gdb_signal siggnal)
6163 {
6164 struct remote_state *rs = get_remote_state ();
6165 char *buf;
6166
6167 rs->last_sent_signal = siggnal;
6168 rs->last_sent_step = step;
6169
6170 /* The c/s/C/S resume packets use Hc, so set the continue
6171 thread. */
6172 if (ptid == minus_one_ptid)
6173 set_continue_thread (any_thread_ptid);
6174 else
6175 set_continue_thread (ptid);
6176
6177 for (thread_info *thread : all_non_exited_threads (this))
6178 resume_clear_thread_private_info (thread);
6179
6180 buf = rs->buf.data ();
6181 if (::execution_direction == EXEC_REVERSE)
6182 {
6183 /* We don't pass signals to the target in reverse exec mode. */
6184 if (info_verbose && siggnal != GDB_SIGNAL_0)
6185 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6186 siggnal);
6187
6188 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6189 error (_("Remote reverse-step not supported."));
6190 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6191 error (_("Remote reverse-continue not supported."));
6192
6193 strcpy (buf, step ? "bs" : "bc");
6194 }
6195 else if (siggnal != GDB_SIGNAL_0)
6196 {
6197 buf[0] = step ? 'S' : 'C';
6198 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6199 buf[2] = tohex (((int) siggnal) & 0xf);
6200 buf[3] = '\0';
6201 }
6202 else
6203 strcpy (buf, step ? "s" : "c");
6204
6205 putpkt (buf);
6206 }
6207
6208 /* Resume the remote inferior by using a "vCont" packet. The thread
6209 to be resumed is PTID; STEP and SIGGNAL indicate whether the
6210 resumed thread should be single-stepped and/or signalled. If PTID
6211 equals minus_one_ptid, then all threads are resumed; the thread to
6212 be stepped and/or signalled is given in the global INFERIOR_PTID.
6213 This function returns non-zero iff it resumes the inferior.
6214
6215 This function issues a strict subset of all possible vCont commands
6216 at the moment. */
6217
6218 int
6219 remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6220 enum gdb_signal siggnal)
6221 {
6222 struct remote_state *rs = get_remote_state ();
6223 char *p;
6224 char *endp;
6225
6226 /* No reverse execution actions defined for vCont. */
6227 if (::execution_direction == EXEC_REVERSE)
6228 return 0;
6229
6230 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6231 remote_vcont_probe ();
6232
6233 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6234 return 0;
6235
6236 p = rs->buf.data ();
6237 endp = p + get_remote_packet_size ();
6238
6239 /* If we could generate a wider range of packets, we'd have to worry
6240 about overflowing BUF. Should there be a generic
6241 "multi-part-packet" packet? */
6242
6243 p += xsnprintf (p, endp - p, "vCont");
6244
6245 if (ptid == magic_null_ptid)
6246 {
6247 /* MAGIC_NULL_PTID means that we don't have any active threads,
6248 so we don't have any TID numbers the inferior will
6249 understand. Make sure to only send forms that do not specify
6250 a TID. */
6251 append_resumption (p, endp, minus_one_ptid, step, siggnal);
6252 }
6253 else if (ptid == minus_one_ptid || ptid.is_pid ())
6254 {
6255 /* Resume all threads (of all processes, or of a single
6256 process), with preference for INFERIOR_PTID. This assumes
6257 inferior_ptid belongs to the set of all threads we are about
6258 to resume. */
6259 if (step || siggnal != GDB_SIGNAL_0)
6260 {
6261 /* Step inferior_ptid, with or without signal. */
6262 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
6263 }
6264
6265 /* Also pass down any pending signaled resumption for other
6266 threads not the current. */
6267 p = append_pending_thread_resumptions (p, endp, ptid);
6268
6269 /* And continue others without a signal. */
6270 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
6271 }
6272 else
6273 {
6274 /* Scheduler locking; resume only PTID. */
6275 append_resumption (p, endp, ptid, step, siggnal);
6276 }
6277
6278 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
6279 putpkt (rs->buf);
6280
6281 if (target_is_non_stop_p ())
6282 {
6283 /* In non-stop, the stub replies to vCont with "OK". The stop
6284 reply will be reported asynchronously by means of a `%Stop'
6285 notification. */
6286 getpkt (&rs->buf, 0);
6287 if (strcmp (rs->buf.data (), "OK") != 0)
6288 error (_("Unexpected vCont reply in non-stop mode: %s"),
6289 rs->buf.data ());
6290 }
6291
6292 return 1;
6293 }
6294
6295 /* Tell the remote machine to resume. */
6296
6297 void
6298 remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
6299 {
6300 struct remote_state *rs = get_remote_state ();
6301
6302 /* When connected in non-stop mode, the core resumes threads
6303 individually. Resuming remote threads directly in target_resume
6304 would thus result in sending one packet per thread. Instead, to
6305 minimize roundtrip latency, here we just store the resume
6306 request; the actual remote resumption will be done in
6307 target_commit_resume / remote_commit_resume, where we'll be able
6308 to do vCont action coalescing. */
6309 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
6310 {
6311 remote_thread_info *remote_thr;
6312
6313 if (minus_one_ptid == ptid || ptid.is_pid ())
6314 remote_thr = get_remote_thread_info (this, inferior_ptid);
6315 else
6316 remote_thr = get_remote_thread_info (this, ptid);
6317
6318 remote_thr->last_resume_step = step;
6319 remote_thr->last_resume_sig = siggnal;
6320 return;
6321 }
6322
6323 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6324 (explained in remote-notif.c:handle_notification) so
6325 remote_notif_process is not called. We need find a place where
6326 it is safe to start a 'vNotif' sequence. It is good to do it
6327 before resuming inferior, because inferior was stopped and no RSP
6328 traffic at that moment. */
6329 if (!target_is_non_stop_p ())
6330 remote_notif_process (rs->notif_state, &notif_client_stop);
6331
6332 rs->last_resume_exec_dir = ::execution_direction;
6333
6334 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6335 if (!remote_resume_with_vcont (ptid, step, siggnal))
6336 remote_resume_with_hc (ptid, step, siggnal);
6337
6338 /* We are about to start executing the inferior, let's register it
6339 with the event loop. NOTE: this is the one place where all the
6340 execution commands end up. We could alternatively do this in each
6341 of the execution commands in infcmd.c. */
6342 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6343 into infcmd.c in order to allow inferior function calls to work
6344 NOT asynchronously. */
6345 if (target_can_async_p ())
6346 target_async (1);
6347
6348 /* We've just told the target to resume. The remote server will
6349 wait for the inferior to stop, and then send a stop reply. In
6350 the mean time, we can't start another command/query ourselves
6351 because the stub wouldn't be ready to process it. This applies
6352 only to the base all-stop protocol, however. In non-stop (which
6353 only supports vCont), the stub replies with an "OK", and is
6354 immediate able to process further serial input. */
6355 if (!target_is_non_stop_p ())
6356 rs->waiting_for_stop_reply = 1;
6357 }
6358
6359 static int is_pending_fork_parent_thread (struct thread_info *thread);
6360
6361 /* Private per-inferior info for target remote processes. */
6362
6363 struct remote_inferior : public private_inferior
6364 {
6365 /* Whether we can send a wildcard vCont for this process. */
6366 bool may_wildcard_vcont = true;
6367 };
6368
6369 /* Get the remote private inferior data associated to INF. */
6370
6371 static remote_inferior *
6372 get_remote_inferior (inferior *inf)
6373 {
6374 if (inf->priv == NULL)
6375 inf->priv.reset (new remote_inferior);
6376
6377 return static_cast<remote_inferior *> (inf->priv.get ());
6378 }
6379
6380 /* Class used to track the construction of a vCont packet in the
6381 outgoing packet buffer. This is used to send multiple vCont
6382 packets if we have more actions than would fit a single packet. */
6383
6384 class vcont_builder
6385 {
6386 public:
6387 explicit vcont_builder (remote_target *remote)
6388 : m_remote (remote)
6389 {
6390 restart ();
6391 }
6392
6393 void flush ();
6394 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6395
6396 private:
6397 void restart ();
6398
6399 /* The remote target. */
6400 remote_target *m_remote;
6401
6402 /* Pointer to the first action. P points here if no action has been
6403 appended yet. */
6404 char *m_first_action;
6405
6406 /* Where the next action will be appended. */
6407 char *m_p;
6408
6409 /* The end of the buffer. Must never write past this. */
6410 char *m_endp;
6411 };
6412
6413 /* Prepare the outgoing buffer for a new vCont packet. */
6414
6415 void
6416 vcont_builder::restart ()
6417 {
6418 struct remote_state *rs = m_remote->get_remote_state ();
6419
6420 m_p = rs->buf.data ();
6421 m_endp = m_p + m_remote->get_remote_packet_size ();
6422 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6423 m_first_action = m_p;
6424 }
6425
6426 /* If the vCont packet being built has any action, send it to the
6427 remote end. */
6428
6429 void
6430 vcont_builder::flush ()
6431 {
6432 struct remote_state *rs;
6433
6434 if (m_p == m_first_action)
6435 return;
6436
6437 rs = m_remote->get_remote_state ();
6438 m_remote->putpkt (rs->buf);
6439 m_remote->getpkt (&rs->buf, 0);
6440 if (strcmp (rs->buf.data (), "OK") != 0)
6441 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
6442 }
6443
6444 /* The largest action is range-stepping, with its two addresses. This
6445 is more than sufficient. If a new, bigger action is created, it'll
6446 quickly trigger a failed assertion in append_resumption (and we'll
6447 just bump this). */
6448 #define MAX_ACTION_SIZE 200
6449
6450 /* Append a new vCont action in the outgoing packet being built. If
6451 the action doesn't fit the packet along with previous actions, push
6452 what we've got so far to the remote end and start over a new vCont
6453 packet (with the new action). */
6454
6455 void
6456 vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
6457 {
6458 char buf[MAX_ACTION_SIZE + 1];
6459
6460 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6461 ptid, step, siggnal);
6462
6463 /* Check whether this new action would fit in the vCont packet along
6464 with previous actions. If not, send what we've got so far and
6465 start a new vCont packet. */
6466 size_t rsize = endp - buf;
6467 if (rsize > m_endp - m_p)
6468 {
6469 flush ();
6470 restart ();
6471
6472 /* Should now fit. */
6473 gdb_assert (rsize <= m_endp - m_p);
6474 }
6475
6476 memcpy (m_p, buf, rsize);
6477 m_p += rsize;
6478 *m_p = '\0';
6479 }
6480
6481 /* to_commit_resume implementation. */
6482
6483 void
6484 remote_target::commit_resume ()
6485 {
6486 int any_process_wildcard;
6487 int may_global_wildcard_vcont;
6488
6489 /* If connected in all-stop mode, we'd send the remote resume
6490 request directly from remote_resume. Likewise if
6491 reverse-debugging, as there are no defined vCont actions for
6492 reverse execution. */
6493 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
6494 return;
6495
6496 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6497 instead of resuming all threads of each process individually.
6498 However, if any thread of a process must remain halted, we can't
6499 send wildcard resumes and must send one action per thread.
6500
6501 Care must be taken to not resume threads/processes the server
6502 side already told us are stopped, but the core doesn't know about
6503 yet, because the events are still in the vStopped notification
6504 queue. For example:
6505
6506 #1 => vCont s:p1.1;c
6507 #2 <= OK
6508 #3 <= %Stopped T05 p1.1
6509 #4 => vStopped
6510 #5 <= T05 p1.2
6511 #6 => vStopped
6512 #7 <= OK
6513 #8 (infrun handles the stop for p1.1 and continues stepping)
6514 #9 => vCont s:p1.1;c
6515
6516 The last vCont above would resume thread p1.2 by mistake, because
6517 the server has no idea that the event for p1.2 had not been
6518 handled yet.
6519
6520 The server side must similarly ignore resume actions for the
6521 thread that has a pending %Stopped notification (and any other
6522 threads with events pending), until GDB acks the notification
6523 with vStopped. Otherwise, e.g., the following case is
6524 mishandled:
6525
6526 #1 => g (or any other packet)
6527 #2 <= [registers]
6528 #3 <= %Stopped T05 p1.2
6529 #4 => vCont s:p1.1;c
6530 #5 <= OK
6531
6532 Above, the server must not resume thread p1.2. GDB can't know
6533 that p1.2 stopped until it acks the %Stopped notification, and
6534 since from GDB's perspective all threads should be running, it
6535 sends a "c" action.
6536
6537 Finally, special care must also be given to handling fork/vfork
6538 events. A (v)fork event actually tells us that two processes
6539 stopped -- the parent and the child. Until we follow the fork,
6540 we must not resume the child. Therefore, if we have a pending
6541 fork follow, we must not send a global wildcard resume action
6542 (vCont;c). We can still send process-wide wildcards though. */
6543
6544 /* Start by assuming a global wildcard (vCont;c) is possible. */
6545 may_global_wildcard_vcont = 1;
6546
6547 /* And assume every process is individually wildcard-able too. */
6548 for (inferior *inf : all_non_exited_inferiors (this))
6549 {
6550 remote_inferior *priv = get_remote_inferior (inf);
6551
6552 priv->may_wildcard_vcont = true;
6553 }
6554
6555 /* Check for any pending events (not reported or processed yet) and
6556 disable process and global wildcard resumes appropriately. */
6557 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6558
6559 for (thread_info *tp : all_non_exited_threads (this))
6560 {
6561 /* If a thread of a process is not meant to be resumed, then we
6562 can't wildcard that process. */
6563 if (!tp->executing)
6564 {
6565 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
6566
6567 /* And if we can't wildcard a process, we can't wildcard
6568 everything either. */
6569 may_global_wildcard_vcont = 0;
6570 continue;
6571 }
6572
6573 /* If a thread is the parent of an unfollowed fork, then we
6574 can't do a global wildcard, as that would resume the fork
6575 child. */
6576 if (is_pending_fork_parent_thread (tp))
6577 may_global_wildcard_vcont = 0;
6578 }
6579
6580 /* Now let's build the vCont packet(s). Actions must be appended
6581 from narrower to wider scopes (thread -> process -> global). If
6582 we end up with too many actions for a single packet vcont_builder
6583 flushes the current vCont packet to the remote side and starts a
6584 new one. */
6585 struct vcont_builder vcont_builder (this);
6586
6587 /* Threads first. */
6588 for (thread_info *tp : all_non_exited_threads (this))
6589 {
6590 remote_thread_info *remote_thr = get_remote_thread_info (tp);
6591
6592 if (!tp->executing || remote_thr->vcont_resumed)
6593 continue;
6594
6595 gdb_assert (!thread_is_in_step_over_chain (tp));
6596
6597 if (!remote_thr->last_resume_step
6598 && remote_thr->last_resume_sig == GDB_SIGNAL_0
6599 && get_remote_inferior (tp->inf)->may_wildcard_vcont)
6600 {
6601 /* We'll send a wildcard resume instead. */
6602 remote_thr->vcont_resumed = 1;
6603 continue;
6604 }
6605
6606 vcont_builder.push_action (tp->ptid,
6607 remote_thr->last_resume_step,
6608 remote_thr->last_resume_sig);
6609 remote_thr->vcont_resumed = 1;
6610 }
6611
6612 /* Now check whether we can send any process-wide wildcard. This is
6613 to avoid sending a global wildcard in the case nothing is
6614 supposed to be resumed. */
6615 any_process_wildcard = 0;
6616
6617 for (inferior *inf : all_non_exited_inferiors (this))
6618 {
6619 if (get_remote_inferior (inf)->may_wildcard_vcont)
6620 {
6621 any_process_wildcard = 1;
6622 break;
6623 }
6624 }
6625
6626 if (any_process_wildcard)
6627 {
6628 /* If all processes are wildcard-able, then send a single "c"
6629 action, otherwise, send an "all (-1) threads of process"
6630 continue action for each running process, if any. */
6631 if (may_global_wildcard_vcont)
6632 {
6633 vcont_builder.push_action (minus_one_ptid,
6634 false, GDB_SIGNAL_0);
6635 }
6636 else
6637 {
6638 for (inferior *inf : all_non_exited_inferiors (this))
6639 {
6640 if (get_remote_inferior (inf)->may_wildcard_vcont)
6641 {
6642 vcont_builder.push_action (ptid_t (inf->pid),
6643 false, GDB_SIGNAL_0);
6644 }
6645 }
6646 }
6647 }
6648
6649 vcont_builder.flush ();
6650 }
6651
6652 \f
6653
6654 /* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6655 thread, all threads of a remote process, or all threads of all
6656 processes. */
6657
6658 void
6659 remote_target::remote_stop_ns (ptid_t ptid)
6660 {
6661 struct remote_state *rs = get_remote_state ();
6662 char *p = rs->buf.data ();
6663 char *endp = p + get_remote_packet_size ();
6664
6665 /* FIXME: This supports_vCont_probed check is a workaround until
6666 packet_support is per-connection. */
6667 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN
6668 || !rs->supports_vCont_probed)
6669 remote_vcont_probe ();
6670
6671 if (!rs->supports_vCont.t)
6672 error (_("Remote server does not support stopping threads"));
6673
6674 if (ptid == minus_one_ptid
6675 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
6676 p += xsnprintf (p, endp - p, "vCont;t");
6677 else
6678 {
6679 ptid_t nptid;
6680
6681 p += xsnprintf (p, endp - p, "vCont;t:");
6682
6683 if (ptid.is_pid ())
6684 /* All (-1) threads of process. */
6685 nptid = ptid_t (ptid.pid (), -1, 0);
6686 else
6687 {
6688 /* Small optimization: if we already have a stop reply for
6689 this thread, no use in telling the stub we want this
6690 stopped. */
6691 if (peek_stop_reply (ptid))
6692 return;
6693
6694 nptid = ptid;
6695 }
6696
6697 write_ptid (p, endp, nptid);
6698 }
6699
6700 /* In non-stop, we get an immediate OK reply. The stop reply will
6701 come in asynchronously by notification. */
6702 putpkt (rs->buf);
6703 getpkt (&rs->buf, 0);
6704 if (strcmp (rs->buf.data (), "OK") != 0)
6705 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
6706 rs->buf.data ());
6707 }
6708
6709 /* All-stop version of target_interrupt. Sends a break or a ^C to
6710 interrupt the remote target. It is undefined which thread of which
6711 process reports the interrupt. */
6712
6713 void
6714 remote_target::remote_interrupt_as ()
6715 {
6716 struct remote_state *rs = get_remote_state ();
6717
6718 rs->ctrlc_pending_p = 1;
6719
6720 /* If the inferior is stopped already, but the core didn't know
6721 about it yet, just ignore the request. The cached wait status
6722 will be collected in remote_wait. */
6723 if (rs->cached_wait_status)
6724 return;
6725
6726 /* Send interrupt_sequence to remote target. */
6727 send_interrupt_sequence ();
6728 }
6729
6730 /* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6731 the remote target. It is undefined which thread of which process
6732 reports the interrupt. Throws an error if the packet is not
6733 supported by the server. */
6734
6735 void
6736 remote_target::remote_interrupt_ns ()
6737 {
6738 struct remote_state *rs = get_remote_state ();
6739 char *p = rs->buf.data ();
6740 char *endp = p + get_remote_packet_size ();
6741
6742 xsnprintf (p, endp - p, "vCtrlC");
6743
6744 /* In non-stop, we get an immediate OK reply. The stop reply will
6745 come in asynchronously by notification. */
6746 putpkt (rs->buf);
6747 getpkt (&rs->buf, 0);
6748
6749 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6750 {
6751 case PACKET_OK:
6752 break;
6753 case PACKET_UNKNOWN:
6754 error (_("No support for interrupting the remote target."));
6755 case PACKET_ERROR:
6756 error (_("Interrupting target failed: %s"), rs->buf.data ());
6757 }
6758 }
6759
6760 /* Implement the to_stop function for the remote targets. */
6761
6762 void
6763 remote_target::stop (ptid_t ptid)
6764 {
6765 if (remote_debug)
6766 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6767
6768 if (target_is_non_stop_p ())
6769 remote_stop_ns (ptid);
6770 else
6771 {
6772 /* We don't currently have a way to transparently pause the
6773 remote target in all-stop mode. Interrupt it instead. */
6774 remote_interrupt_as ();
6775 }
6776 }
6777
6778 /* Implement the to_interrupt function for the remote targets. */
6779
6780 void
6781 remote_target::interrupt ()
6782 {
6783 if (remote_debug)
6784 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6785
6786 if (target_is_non_stop_p ())
6787 remote_interrupt_ns ();
6788 else
6789 remote_interrupt_as ();
6790 }
6791
6792 /* Implement the to_pass_ctrlc function for the remote targets. */
6793
6794 void
6795 remote_target::pass_ctrlc ()
6796 {
6797 struct remote_state *rs = get_remote_state ();
6798
6799 if (remote_debug)
6800 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6801
6802 /* If we're starting up, we're not fully synced yet. Quit
6803 immediately. */
6804 if (rs->starting_up)
6805 quit ();
6806 /* If ^C has already been sent once, offer to disconnect. */
6807 else if (rs->ctrlc_pending_p)
6808 interrupt_query ();
6809 else
6810 target_interrupt ();
6811 }
6812
6813 /* Ask the user what to do when an interrupt is received. */
6814
6815 void
6816 remote_target::interrupt_query ()
6817 {
6818 struct remote_state *rs = get_remote_state ();
6819
6820 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6821 {
6822 if (query (_("The target is not responding to interrupt requests.\n"
6823 "Stop debugging it? ")))
6824 {
6825 remote_unpush_target (this);
6826 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6827 }
6828 }
6829 else
6830 {
6831 if (query (_("Interrupted while waiting for the program.\n"
6832 "Give up waiting? ")))
6833 quit ();
6834 }
6835 }
6836
6837 /* Enable/disable target terminal ownership. Most targets can use
6838 terminal groups to control terminal ownership. Remote targets are
6839 different in that explicit transfer of ownership to/from GDB/target
6840 is required. */
6841
6842 void
6843 remote_target::terminal_inferior ()
6844 {
6845 /* NOTE: At this point we could also register our selves as the
6846 recipient of all input. Any characters typed could then be
6847 passed on down to the target. */
6848 }
6849
6850 void
6851 remote_target::terminal_ours ()
6852 {
6853 }
6854
6855 static void
6856 remote_console_output (const char *msg)
6857 {
6858 const char *p;
6859
6860 for (p = msg; p[0] && p[1]; p += 2)
6861 {
6862 char tb[2];
6863 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6864
6865 tb[0] = c;
6866 tb[1] = 0;
6867 gdb_stdtarg->puts (tb);
6868 }
6869 gdb_stdtarg->flush ();
6870 }
6871
6872 struct stop_reply : public notif_event
6873 {
6874 ~stop_reply ();
6875
6876 /* The identifier of the thread about this event */
6877 ptid_t ptid;
6878
6879 /* The remote state this event is associated with. When the remote
6880 connection, represented by a remote_state object, is closed,
6881 all the associated stop_reply events should be released. */
6882 struct remote_state *rs;
6883
6884 struct target_waitstatus ws;
6885
6886 /* The architecture associated with the expedited registers. */
6887 gdbarch *arch;
6888
6889 /* Expedited registers. This makes remote debugging a bit more
6890 efficient for those targets that provide critical registers as
6891 part of their normal status mechanism (as another roundtrip to
6892 fetch them is avoided). */
6893 std::vector<cached_reg_t> regcache;
6894
6895 enum target_stop_reason stop_reason;
6896
6897 CORE_ADDR watch_data_address;
6898
6899 int core;
6900 };
6901
6902 /* Return the length of the stop reply queue. */
6903
6904 int
6905 remote_target::stop_reply_queue_length ()
6906 {
6907 remote_state *rs = get_remote_state ();
6908 return rs->stop_reply_queue.size ();
6909 }
6910
6911 static void
6912 remote_notif_stop_parse (remote_target *remote,
6913 struct notif_client *self, const char *buf,
6914 struct notif_event *event)
6915 {
6916 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
6917 }
6918
6919 static void
6920 remote_notif_stop_ack (remote_target *remote,
6921 struct notif_client *self, const char *buf,
6922 struct notif_event *event)
6923 {
6924 struct stop_reply *stop_reply = (struct stop_reply *) event;
6925
6926 /* acknowledge */
6927 putpkt (remote, self->ack_command);
6928
6929 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6930 {
6931 /* We got an unknown stop reply. */
6932 error (_("Unknown stop reply"));
6933 }
6934
6935 remote->push_stop_reply (stop_reply);
6936 }
6937
6938 static int
6939 remote_notif_stop_can_get_pending_events (remote_target *remote,
6940 struct notif_client *self)
6941 {
6942 /* We can't get pending events in remote_notif_process for
6943 notification stop, and we have to do this in remote_wait_ns
6944 instead. If we fetch all queued events from stub, remote stub
6945 may exit and we have no chance to process them back in
6946 remote_wait_ns. */
6947 remote_state *rs = remote->get_remote_state ();
6948 mark_async_event_handler (rs->remote_async_inferior_event_token);
6949 return 0;
6950 }
6951
6952 stop_reply::~stop_reply ()
6953 {
6954 for (cached_reg_t &reg : regcache)
6955 xfree (reg.data);
6956 }
6957
6958 static notif_event_up
6959 remote_notif_stop_alloc_reply ()
6960 {
6961 return notif_event_up (new struct stop_reply ());
6962 }
6963
6964 /* A client of notification Stop. */
6965
6966 struct notif_client notif_client_stop =
6967 {
6968 "Stop",
6969 "vStopped",
6970 remote_notif_stop_parse,
6971 remote_notif_stop_ack,
6972 remote_notif_stop_can_get_pending_events,
6973 remote_notif_stop_alloc_reply,
6974 REMOTE_NOTIF_STOP,
6975 };
6976
6977 /* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
6978 the pid of the process that owns the threads we want to check, or
6979 -1 if we want to check all threads. */
6980
6981 static int
6982 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6983 ptid_t thread_ptid)
6984 {
6985 if (ws->kind == TARGET_WAITKIND_FORKED
6986 || ws->kind == TARGET_WAITKIND_VFORKED)
6987 {
6988 if (event_pid == -1 || event_pid == thread_ptid.pid ())
6989 return 1;
6990 }
6991
6992 return 0;
6993 }
6994
6995 /* Return the thread's pending status used to determine whether the
6996 thread is a fork parent stopped at a fork event. */
6997
6998 static struct target_waitstatus *
6999 thread_pending_fork_status (struct thread_info *thread)
7000 {
7001 if (thread->suspend.waitstatus_pending_p)
7002 return &thread->suspend.waitstatus;
7003 else
7004 return &thread->pending_follow;
7005 }
7006
7007 /* Determine if THREAD is a pending fork parent thread. */
7008
7009 static int
7010 is_pending_fork_parent_thread (struct thread_info *thread)
7011 {
7012 struct target_waitstatus *ws = thread_pending_fork_status (thread);
7013 int pid = -1;
7014
7015 return is_pending_fork_parent (ws, pid, thread->ptid);
7016 }
7017
7018 /* If CONTEXT contains any fork child threads that have not been
7019 reported yet, remove them from the CONTEXT list. If such a
7020 thread exists it is because we are stopped at a fork catchpoint
7021 and have not yet called follow_fork, which will set up the
7022 host-side data structures for the new process. */
7023
7024 void
7025 remote_target::remove_new_fork_children (threads_listing_context *context)
7026 {
7027 int pid = -1;
7028 struct notif_client *notif = &notif_client_stop;
7029
7030 /* For any threads stopped at a fork event, remove the corresponding
7031 fork child threads from the CONTEXT list. */
7032 for (thread_info *thread : all_non_exited_threads (this))
7033 {
7034 struct target_waitstatus *ws = thread_pending_fork_status (thread);
7035
7036 if (is_pending_fork_parent (ws, pid, thread->ptid))
7037 context->remove_thread (ws->value.related_pid);
7038 }
7039
7040 /* Check for any pending fork events (not reported or processed yet)
7041 in process PID and remove those fork child threads from the
7042 CONTEXT list as well. */
7043 remote_notif_get_pending_events (notif);
7044 for (auto &event : get_remote_state ()->stop_reply_queue)
7045 if (event->ws.kind == TARGET_WAITKIND_FORKED
7046 || event->ws.kind == TARGET_WAITKIND_VFORKED
7047 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
7048 context->remove_thread (event->ws.value.related_pid);
7049 }
7050
7051 /* Check whether any event pending in the vStopped queue would prevent
7052 a global or process wildcard vCont action. Clear
7053 *may_global_wildcard if we can't do a global wildcard (vCont;c),
7054 and clear the event inferior's may_wildcard_vcont flag if we can't
7055 do a process-wide wildcard resume (vCont;c:pPID.-1). */
7056
7057 void
7058 remote_target::check_pending_events_prevent_wildcard_vcont
7059 (int *may_global_wildcard)
7060 {
7061 struct notif_client *notif = &notif_client_stop;
7062
7063 remote_notif_get_pending_events (notif);
7064 for (auto &event : get_remote_state ()->stop_reply_queue)
7065 {
7066 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
7067 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
7068 continue;
7069
7070 if (event->ws.kind == TARGET_WAITKIND_FORKED
7071 || event->ws.kind == TARGET_WAITKIND_VFORKED)
7072 *may_global_wildcard = 0;
7073
7074 struct inferior *inf = find_inferior_ptid (this, event->ptid);
7075
7076 /* This may be the first time we heard about this process.
7077 Regardless, we must not do a global wildcard resume, otherwise
7078 we'd resume this process too. */
7079 *may_global_wildcard = 0;
7080 if (inf != NULL)
7081 get_remote_inferior (inf)->may_wildcard_vcont = false;
7082 }
7083 }
7084
7085 /* Discard all pending stop replies of inferior INF. */
7086
7087 void
7088 remote_target::discard_pending_stop_replies (struct inferior *inf)
7089 {
7090 struct stop_reply *reply;
7091 struct remote_state *rs = get_remote_state ();
7092 struct remote_notif_state *rns = rs->notif_state;
7093
7094 /* This function can be notified when an inferior exists. When the
7095 target is not remote, the notification state is NULL. */
7096 if (rs->remote_desc == NULL)
7097 return;
7098
7099 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
7100
7101 /* Discard the in-flight notification. */
7102 if (reply != NULL && reply->ptid.pid () == inf->pid)
7103 {
7104 delete reply;
7105 rns->pending_event[notif_client_stop.id] = NULL;
7106 }
7107
7108 /* Discard the stop replies we have already pulled with
7109 vStopped. */
7110 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7111 rs->stop_reply_queue.end (),
7112 [=] (const stop_reply_up &event)
7113 {
7114 return event->ptid.pid () == inf->pid;
7115 });
7116 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7117 }
7118
7119 /* Discard the stop replies for RS in stop_reply_queue. */
7120
7121 void
7122 remote_target::discard_pending_stop_replies_in_queue ()
7123 {
7124 remote_state *rs = get_remote_state ();
7125
7126 /* Discard the stop replies we have already pulled with
7127 vStopped. */
7128 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7129 rs->stop_reply_queue.end (),
7130 [=] (const stop_reply_up &event)
7131 {
7132 return event->rs == rs;
7133 });
7134 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7135 }
7136
7137 /* Remove the first reply in 'stop_reply_queue' which matches
7138 PTID. */
7139
7140 struct stop_reply *
7141 remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
7142 {
7143 remote_state *rs = get_remote_state ();
7144
7145 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7146 rs->stop_reply_queue.end (),
7147 [=] (const stop_reply_up &event)
7148 {
7149 return event->ptid.matches (ptid);
7150 });
7151 struct stop_reply *result;
7152 if (iter == rs->stop_reply_queue.end ())
7153 result = nullptr;
7154 else
7155 {
7156 result = iter->release ();
7157 rs->stop_reply_queue.erase (iter);
7158 }
7159
7160 if (notif_debug)
7161 fprintf_unfiltered (gdb_stdlog,
7162 "notif: discard queued event: 'Stop' in %s\n",
7163 target_pid_to_str (ptid).c_str ());
7164
7165 return result;
7166 }
7167
7168 /* Look for a queued stop reply belonging to PTID. If one is found,
7169 remove it from the queue, and return it. Returns NULL if none is
7170 found. If there are still queued events left to process, tell the
7171 event loop to get back to target_wait soon. */
7172
7173 struct stop_reply *
7174 remote_target::queued_stop_reply (ptid_t ptid)
7175 {
7176 remote_state *rs = get_remote_state ();
7177 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
7178
7179 if (!rs->stop_reply_queue.empty ())
7180 {
7181 /* There's still at least an event left. */
7182 mark_async_event_handler (rs->remote_async_inferior_event_token);
7183 }
7184
7185 return r;
7186 }
7187
7188 /* Push a fully parsed stop reply in the stop reply queue. Since we
7189 know that we now have at least one queued event left to pass to the
7190 core side, tell the event loop to get back to target_wait soon. */
7191
7192 void
7193 remote_target::push_stop_reply (struct stop_reply *new_event)
7194 {
7195 remote_state *rs = get_remote_state ();
7196 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
7197
7198 if (notif_debug)
7199 fprintf_unfiltered (gdb_stdlog,
7200 "notif: push 'Stop' %s to queue %d\n",
7201 target_pid_to_str (new_event->ptid).c_str (),
7202 int (rs->stop_reply_queue.size ()));
7203
7204 mark_async_event_handler (rs->remote_async_inferior_event_token);
7205 }
7206
7207 /* Returns true if we have a stop reply for PTID. */
7208
7209 int
7210 remote_target::peek_stop_reply (ptid_t ptid)
7211 {
7212 remote_state *rs = get_remote_state ();
7213 for (auto &event : rs->stop_reply_queue)
7214 if (ptid == event->ptid
7215 && event->ws.kind == TARGET_WAITKIND_STOPPED)
7216 return 1;
7217 return 0;
7218 }
7219
7220 /* Helper for remote_parse_stop_reply. Return nonzero if the substring
7221 starting with P and ending with PEND matches PREFIX. */
7222
7223 static int
7224 strprefix (const char *p, const char *pend, const char *prefix)
7225 {
7226 for ( ; p < pend; p++, prefix++)
7227 if (*p != *prefix)
7228 return 0;
7229 return *prefix == '\0';
7230 }
7231
7232 /* Parse the stop reply in BUF. Either the function succeeds, and the
7233 result is stored in EVENT, or throws an error. */
7234
7235 void
7236 remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
7237 {
7238 remote_arch_state *rsa = NULL;
7239 ULONGEST addr;
7240 const char *p;
7241 int skipregs = 0;
7242
7243 event->ptid = null_ptid;
7244 event->rs = get_remote_state ();
7245 event->ws.kind = TARGET_WAITKIND_IGNORE;
7246 event->ws.value.integer = 0;
7247 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
7248 event->regcache.clear ();
7249 event->core = -1;
7250
7251 switch (buf[0])
7252 {
7253 case 'T': /* Status with PC, SP, FP, ... */
7254 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7255 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7256 ss = signal number
7257 n... = register number
7258 r... = register contents
7259 */
7260
7261 p = &buf[3]; /* after Txx */
7262 while (*p)
7263 {
7264 const char *p1;
7265 int fieldsize;
7266
7267 p1 = strchr (p, ':');
7268 if (p1 == NULL)
7269 error (_("Malformed packet(a) (missing colon): %s\n\
7270 Packet: '%s'\n"),
7271 p, buf);
7272 if (p == p1)
7273 error (_("Malformed packet(a) (missing register number): %s\n\
7274 Packet: '%s'\n"),
7275 p, buf);
7276
7277 /* Some "registers" are actually extended stop information.
7278 Note if you're adding a new entry here: GDB 7.9 and
7279 earlier assume that all register "numbers" that start
7280 with an hex digit are real register numbers. Make sure
7281 the server only sends such a packet if it knows the
7282 client understands it. */
7283
7284 if (strprefix (p, p1, "thread"))
7285 event->ptid = read_ptid (++p1, &p);
7286 else if (strprefix (p, p1, "syscall_entry"))
7287 {
7288 ULONGEST sysno;
7289
7290 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7291 p = unpack_varlen_hex (++p1, &sysno);
7292 event->ws.value.syscall_number = (int) sysno;
7293 }
7294 else if (strprefix (p, p1, "syscall_return"))
7295 {
7296 ULONGEST sysno;
7297
7298 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7299 p = unpack_varlen_hex (++p1, &sysno);
7300 event->ws.value.syscall_number = (int) sysno;
7301 }
7302 else if (strprefix (p, p1, "watch")
7303 || strprefix (p, p1, "rwatch")
7304 || strprefix (p, p1, "awatch"))
7305 {
7306 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
7307 p = unpack_varlen_hex (++p1, &addr);
7308 event->watch_data_address = (CORE_ADDR) addr;
7309 }
7310 else if (strprefix (p, p1, "swbreak"))
7311 {
7312 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7313
7314 /* Make sure the stub doesn't forget to indicate support
7315 with qSupported. */
7316 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7317 error (_("Unexpected swbreak stop reason"));
7318
7319 /* The value part is documented as "must be empty",
7320 though we ignore it, in case we ever decide to make
7321 use of it in a backward compatible way. */
7322 p = strchrnul (p1 + 1, ';');
7323 }
7324 else if (strprefix (p, p1, "hwbreak"))
7325 {
7326 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7327
7328 /* Make sure the stub doesn't forget to indicate support
7329 with qSupported. */
7330 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7331 error (_("Unexpected hwbreak stop reason"));
7332
7333 /* See above. */
7334 p = strchrnul (p1 + 1, ';');
7335 }
7336 else if (strprefix (p, p1, "library"))
7337 {
7338 event->ws.kind = TARGET_WAITKIND_LOADED;
7339 p = strchrnul (p1 + 1, ';');
7340 }
7341 else if (strprefix (p, p1, "replaylog"))
7342 {
7343 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7344 /* p1 will indicate "begin" or "end", but it makes
7345 no difference for now, so ignore it. */
7346 p = strchrnul (p1 + 1, ';');
7347 }
7348 else if (strprefix (p, p1, "core"))
7349 {
7350 ULONGEST c;
7351
7352 p = unpack_varlen_hex (++p1, &c);
7353 event->core = c;
7354 }
7355 else if (strprefix (p, p1, "fork"))
7356 {
7357 event->ws.value.related_pid = read_ptid (++p1, &p);
7358 event->ws.kind = TARGET_WAITKIND_FORKED;
7359 }
7360 else if (strprefix (p, p1, "vfork"))
7361 {
7362 event->ws.value.related_pid = read_ptid (++p1, &p);
7363 event->ws.kind = TARGET_WAITKIND_VFORKED;
7364 }
7365 else if (strprefix (p, p1, "vforkdone"))
7366 {
7367 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
7368 p = strchrnul (p1 + 1, ';');
7369 }
7370 else if (strprefix (p, p1, "exec"))
7371 {
7372 ULONGEST ignored;
7373 int pathlen;
7374
7375 /* Determine the length of the execd pathname. */
7376 p = unpack_varlen_hex (++p1, &ignored);
7377 pathlen = (p - p1) / 2;
7378
7379 /* Save the pathname for event reporting and for
7380 the next run command. */
7381 gdb::unique_xmalloc_ptr<char[]> pathname
7382 ((char *) xmalloc (pathlen + 1));
7383 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
7384 pathname[pathlen] = '\0';
7385
7386 /* This is freed during event handling. */
7387 event->ws.value.execd_pathname = pathname.release ();
7388 event->ws.kind = TARGET_WAITKIND_EXECD;
7389
7390 /* Skip the registers included in this packet, since
7391 they may be for an architecture different from the
7392 one used by the original program. */
7393 skipregs = 1;
7394 }
7395 else if (strprefix (p, p1, "create"))
7396 {
7397 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
7398 p = strchrnul (p1 + 1, ';');
7399 }
7400 else
7401 {
7402 ULONGEST pnum;
7403 const char *p_temp;
7404
7405 if (skipregs)
7406 {
7407 p = strchrnul (p1 + 1, ';');
7408 p++;
7409 continue;
7410 }
7411
7412 /* Maybe a real ``P'' register number. */
7413 p_temp = unpack_varlen_hex (p, &pnum);
7414 /* If the first invalid character is the colon, we got a
7415 register number. Otherwise, it's an unknown stop
7416 reason. */
7417 if (p_temp == p1)
7418 {
7419 /* If we haven't parsed the event's thread yet, find
7420 it now, in order to find the architecture of the
7421 reported expedited registers. */
7422 if (event->ptid == null_ptid)
7423 {
7424 /* If there is no thread-id information then leave
7425 the event->ptid as null_ptid. Later in
7426 process_stop_reply we will pick a suitable
7427 thread. */
7428 const char *thr = strstr (p1 + 1, ";thread:");
7429 if (thr != NULL)
7430 event->ptid = read_ptid (thr + strlen (";thread:"),
7431 NULL);
7432 }
7433
7434 if (rsa == NULL)
7435 {
7436 inferior *inf
7437 = (event->ptid == null_ptid
7438 ? NULL
7439 : find_inferior_ptid (this, event->ptid));
7440 /* If this is the first time we learn anything
7441 about this process, skip the registers
7442 included in this packet, since we don't yet
7443 know which architecture to use to parse them.
7444 We'll determine the architecture later when
7445 we process the stop reply and retrieve the
7446 target description, via
7447 remote_notice_new_inferior ->
7448 post_create_inferior. */
7449 if (inf == NULL)
7450 {
7451 p = strchrnul (p1 + 1, ';');
7452 p++;
7453 continue;
7454 }
7455
7456 event->arch = inf->gdbarch;
7457 rsa = event->rs->get_remote_arch_state (event->arch);
7458 }
7459
7460 packet_reg *reg
7461 = packet_reg_from_pnum (event->arch, rsa, pnum);
7462 cached_reg_t cached_reg;
7463
7464 if (reg == NULL)
7465 error (_("Remote sent bad register number %s: %s\n\
7466 Packet: '%s'\n"),
7467 hex_string (pnum), p, buf);
7468
7469 cached_reg.num = reg->regnum;
7470 cached_reg.data = (gdb_byte *)
7471 xmalloc (register_size (event->arch, reg->regnum));
7472
7473 p = p1 + 1;
7474 fieldsize = hex2bin (p, cached_reg.data,
7475 register_size (event->arch, reg->regnum));
7476 p += 2 * fieldsize;
7477 if (fieldsize < register_size (event->arch, reg->regnum))
7478 warning (_("Remote reply is too short: %s"), buf);
7479
7480 event->regcache.push_back (cached_reg);
7481 }
7482 else
7483 {
7484 /* Not a number. Silently skip unknown optional
7485 info. */
7486 p = strchrnul (p1 + 1, ';');
7487 }
7488 }
7489
7490 if (*p != ';')
7491 error (_("Remote register badly formatted: %s\nhere: %s"),
7492 buf, p);
7493 ++p;
7494 }
7495
7496 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7497 break;
7498
7499 /* fall through */
7500 case 'S': /* Old style status, just signal only. */
7501 {
7502 int sig;
7503
7504 event->ws.kind = TARGET_WAITKIND_STOPPED;
7505 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7506 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7507 event->ws.value.sig = (enum gdb_signal) sig;
7508 else
7509 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7510 }
7511 break;
7512 case 'w': /* Thread exited. */
7513 {
7514 ULONGEST value;
7515
7516 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7517 p = unpack_varlen_hex (&buf[1], &value);
7518 event->ws.value.integer = value;
7519 if (*p != ';')
7520 error (_("stop reply packet badly formatted: %s"), buf);
7521 event->ptid = read_ptid (++p, NULL);
7522 break;
7523 }
7524 case 'W': /* Target exited. */
7525 case 'X':
7526 {
7527 ULONGEST value;
7528
7529 /* GDB used to accept only 2 hex chars here. Stubs should
7530 only send more if they detect GDB supports multi-process
7531 support. */
7532 p = unpack_varlen_hex (&buf[1], &value);
7533
7534 if (buf[0] == 'W')
7535 {
7536 /* The remote process exited. */
7537 event->ws.kind = TARGET_WAITKIND_EXITED;
7538 event->ws.value.integer = value;
7539 }
7540 else
7541 {
7542 /* The remote process exited with a signal. */
7543 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7544 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7545 event->ws.value.sig = (enum gdb_signal) value;
7546 else
7547 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7548 }
7549
7550 /* If no process is specified, return null_ptid, and let the
7551 caller figure out the right process to use. */
7552 int pid = 0;
7553 if (*p == '\0')
7554 ;
7555 else if (*p == ';')
7556 {
7557 p++;
7558
7559 if (*p == '\0')
7560 ;
7561 else if (startswith (p, "process:"))
7562 {
7563 ULONGEST upid;
7564
7565 p += sizeof ("process:") - 1;
7566 unpack_varlen_hex (p, &upid);
7567 pid = upid;
7568 }
7569 else
7570 error (_("unknown stop reply packet: %s"), buf);
7571 }
7572 else
7573 error (_("unknown stop reply packet: %s"), buf);
7574 event->ptid = ptid_t (pid);
7575 }
7576 break;
7577 case 'N':
7578 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7579 event->ptid = minus_one_ptid;
7580 break;
7581 }
7582 }
7583
7584 /* When the stub wants to tell GDB about a new notification reply, it
7585 sends a notification (%Stop, for example). Those can come it at
7586 any time, hence, we have to make sure that any pending
7587 putpkt/getpkt sequence we're making is finished, before querying
7588 the stub for more events with the corresponding ack command
7589 (vStopped, for example). E.g., if we started a vStopped sequence
7590 immediately upon receiving the notification, something like this
7591 could happen:
7592
7593 1.1) --> Hg 1
7594 1.2) <-- OK
7595 1.3) --> g
7596 1.4) <-- %Stop
7597 1.5) --> vStopped
7598 1.6) <-- (registers reply to step #1.3)
7599
7600 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7601 query.
7602
7603 To solve this, whenever we parse a %Stop notification successfully,
7604 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7605 doing whatever we were doing:
7606
7607 2.1) --> Hg 1
7608 2.2) <-- OK
7609 2.3) --> g
7610 2.4) <-- %Stop
7611 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7612 2.5) <-- (registers reply to step #2.3)
7613
7614 Eventually after step #2.5, we return to the event loop, which
7615 notices there's an event on the
7616 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7617 associated callback --- the function below. At this point, we're
7618 always safe to start a vStopped sequence. :
7619
7620 2.6) --> vStopped
7621 2.7) <-- T05 thread:2
7622 2.8) --> vStopped
7623 2.9) --> OK
7624 */
7625
7626 void
7627 remote_target::remote_notif_get_pending_events (notif_client *nc)
7628 {
7629 struct remote_state *rs = get_remote_state ();
7630
7631 if (rs->notif_state->pending_event[nc->id] != NULL)
7632 {
7633 if (notif_debug)
7634 fprintf_unfiltered (gdb_stdlog,
7635 "notif: process: '%s' ack pending event\n",
7636 nc->name);
7637
7638 /* acknowledge */
7639 nc->ack (this, nc, rs->buf.data (),
7640 rs->notif_state->pending_event[nc->id]);
7641 rs->notif_state->pending_event[nc->id] = NULL;
7642
7643 while (1)
7644 {
7645 getpkt (&rs->buf, 0);
7646 if (strcmp (rs->buf.data (), "OK") == 0)
7647 break;
7648 else
7649 remote_notif_ack (this, nc, rs->buf.data ());
7650 }
7651 }
7652 else
7653 {
7654 if (notif_debug)
7655 fprintf_unfiltered (gdb_stdlog,
7656 "notif: process: '%s' no pending reply\n",
7657 nc->name);
7658 }
7659 }
7660
7661 /* Wrapper around remote_target::remote_notif_get_pending_events to
7662 avoid having to export the whole remote_target class. */
7663
7664 void
7665 remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7666 {
7667 remote->remote_notif_get_pending_events (nc);
7668 }
7669
7670 /* Called when it is decided that STOP_REPLY holds the info of the
7671 event that is to be returned to the core. This function always
7672 destroys STOP_REPLY. */
7673
7674 ptid_t
7675 remote_target::process_stop_reply (struct stop_reply *stop_reply,
7676 struct target_waitstatus *status)
7677 {
7678 ptid_t ptid;
7679
7680 *status = stop_reply->ws;
7681 ptid = stop_reply->ptid;
7682
7683 /* If no thread/process was reported by the stub then use the first
7684 non-exited thread in the current target. */
7685 if (ptid == null_ptid)
7686 {
7687 /* Some stop events apply to all threads in an inferior, while others
7688 only apply to a single thread. */
7689 bool is_stop_for_all_threads
7690 = (status->kind == TARGET_WAITKIND_EXITED
7691 || status->kind == TARGET_WAITKIND_SIGNALLED);
7692
7693 for (thread_info *thr : all_non_exited_threads (this))
7694 {
7695 if (ptid != null_ptid
7696 && (!is_stop_for_all_threads
7697 || ptid.pid () != thr->ptid.pid ()))
7698 {
7699 static bool warned = false;
7700
7701 if (!warned)
7702 {
7703 /* If you are seeing this warning then the remote target
7704 has stopped without specifying a thread-id, but the
7705 target does have multiple threads (or inferiors), and
7706 so GDB is having to guess which thread stopped.
7707
7708 Examples of what might cause this are the target
7709 sending and 'S' stop packet, or a 'T' stop packet and
7710 not including a thread-id.
7711
7712 Additionally, the target might send a 'W' or 'X
7713 packet without including a process-id, when the target
7714 has multiple running inferiors. */
7715 if (is_stop_for_all_threads)
7716 warning (_("multi-inferior target stopped without "
7717 "sending a process-id, using first "
7718 "non-exited inferior"));
7719 else
7720 warning (_("multi-threaded target stopped without "
7721 "sending a thread-id, using first "
7722 "non-exited thread"));
7723 warned = true;
7724 }
7725 break;
7726 }
7727
7728 /* If this is a stop for all threads then don't use a particular
7729 threads ptid, instead create a new ptid where only the pid
7730 field is set. */
7731 if (is_stop_for_all_threads)
7732 ptid = ptid_t (thr->ptid.pid ());
7733 else
7734 ptid = thr->ptid;
7735 }
7736 gdb_assert (ptid != null_ptid);
7737 }
7738
7739 if (status->kind != TARGET_WAITKIND_EXITED
7740 && status->kind != TARGET_WAITKIND_SIGNALLED
7741 && status->kind != TARGET_WAITKIND_NO_RESUMED)
7742 {
7743 /* Expedited registers. */
7744 if (!stop_reply->regcache.empty ())
7745 {
7746 struct regcache *regcache
7747 = get_thread_arch_regcache (this, ptid, stop_reply->arch);
7748
7749 for (cached_reg_t &reg : stop_reply->regcache)
7750 {
7751 regcache->raw_supply (reg.num, reg.data);
7752 xfree (reg.data);
7753 }
7754
7755 stop_reply->regcache.clear ();
7756 }
7757
7758 remote_notice_new_inferior (ptid, 0);
7759 remote_thread_info *remote_thr = get_remote_thread_info (this, ptid);
7760 remote_thr->core = stop_reply->core;
7761 remote_thr->stop_reason = stop_reply->stop_reason;
7762 remote_thr->watch_data_address = stop_reply->watch_data_address;
7763 remote_thr->vcont_resumed = 0;
7764 }
7765
7766 delete stop_reply;
7767 return ptid;
7768 }
7769
7770 /* The non-stop mode version of target_wait. */
7771
7772 ptid_t
7773 remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7774 {
7775 struct remote_state *rs = get_remote_state ();
7776 struct stop_reply *stop_reply;
7777 int ret;
7778 int is_notif = 0;
7779
7780 /* If in non-stop mode, get out of getpkt even if a
7781 notification is received. */
7782
7783 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
7784 while (1)
7785 {
7786 if (ret != -1 && !is_notif)
7787 switch (rs->buf[0])
7788 {
7789 case 'E': /* Error of some sort. */
7790 /* We're out of sync with the target now. Did it continue
7791 or not? We can't tell which thread it was in non-stop,
7792 so just ignore this. */
7793 warning (_("Remote failure reply: %s"), rs->buf.data ());
7794 break;
7795 case 'O': /* Console output. */
7796 remote_console_output (&rs->buf[1]);
7797 break;
7798 default:
7799 warning (_("Invalid remote reply: %s"), rs->buf.data ());
7800 break;
7801 }
7802
7803 /* Acknowledge a pending stop reply that may have arrived in the
7804 mean time. */
7805 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7806 remote_notif_get_pending_events (&notif_client_stop);
7807
7808 /* If indeed we noticed a stop reply, we're done. */
7809 stop_reply = queued_stop_reply (ptid);
7810 if (stop_reply != NULL)
7811 return process_stop_reply (stop_reply, status);
7812
7813 /* Still no event. If we're just polling for an event, then
7814 return to the event loop. */
7815 if (options & TARGET_WNOHANG)
7816 {
7817 status->kind = TARGET_WAITKIND_IGNORE;
7818 return minus_one_ptid;
7819 }
7820
7821 /* Otherwise do a blocking wait. */
7822 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
7823 }
7824 }
7825
7826 /* Return the first resumed thread. */
7827
7828 static ptid_t
7829 first_remote_resumed_thread (remote_target *target)
7830 {
7831 for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid))
7832 if (tp->resumed)
7833 return tp->ptid;
7834 return null_ptid;
7835 }
7836
7837 /* Wait until the remote machine stops, then return, storing status in
7838 STATUS just as `wait' would. */
7839
7840 ptid_t
7841 remote_target::wait_as (ptid_t ptid, target_waitstatus *status, int options)
7842 {
7843 struct remote_state *rs = get_remote_state ();
7844 ptid_t event_ptid = null_ptid;
7845 char *buf;
7846 struct stop_reply *stop_reply;
7847
7848 again:
7849
7850 status->kind = TARGET_WAITKIND_IGNORE;
7851 status->value.integer = 0;
7852
7853 stop_reply = queued_stop_reply (ptid);
7854 if (stop_reply != NULL)
7855 return process_stop_reply (stop_reply, status);
7856
7857 if (rs->cached_wait_status)
7858 /* Use the cached wait status, but only once. */
7859 rs->cached_wait_status = 0;
7860 else
7861 {
7862 int ret;
7863 int is_notif;
7864 int forever = ((options & TARGET_WNOHANG) == 0
7865 && rs->wait_forever_enabled_p);
7866
7867 if (!rs->waiting_for_stop_reply)
7868 {
7869 status->kind = TARGET_WAITKIND_NO_RESUMED;
7870 return minus_one_ptid;
7871 }
7872
7873 /* FIXME: cagney/1999-09-27: If we're in async mode we should
7874 _never_ wait for ever -> test on target_is_async_p().
7875 However, before we do that we need to ensure that the caller
7876 knows how to take the target into/out of async mode. */
7877 ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
7878
7879 /* GDB gets a notification. Return to core as this event is
7880 not interesting. */
7881 if (ret != -1 && is_notif)
7882 return minus_one_ptid;
7883
7884 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7885 return minus_one_ptid;
7886 }
7887
7888 buf = rs->buf.data ();
7889
7890 /* Assume that the target has acknowledged Ctrl-C unless we receive
7891 an 'F' or 'O' packet. */
7892 if (buf[0] != 'F' && buf[0] != 'O')
7893 rs->ctrlc_pending_p = 0;
7894
7895 switch (buf[0])
7896 {
7897 case 'E': /* Error of some sort. */
7898 /* We're out of sync with the target now. Did it continue or
7899 not? Not is more likely, so report a stop. */
7900 rs->waiting_for_stop_reply = 0;
7901
7902 warning (_("Remote failure reply: %s"), buf);
7903 status->kind = TARGET_WAITKIND_STOPPED;
7904 status->value.sig = GDB_SIGNAL_0;
7905 break;
7906 case 'F': /* File-I/O request. */
7907 /* GDB may access the inferior memory while handling the File-I/O
7908 request, but we don't want GDB accessing memory while waiting
7909 for a stop reply. See the comments in putpkt_binary. Set
7910 waiting_for_stop_reply to 0 temporarily. */
7911 rs->waiting_for_stop_reply = 0;
7912 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
7913 rs->ctrlc_pending_p = 0;
7914 /* GDB handled the File-I/O request, and the target is running
7915 again. Keep waiting for events. */
7916 rs->waiting_for_stop_reply = 1;
7917 break;
7918 case 'N': case 'T': case 'S': case 'X': case 'W':
7919 {
7920 /* There is a stop reply to handle. */
7921 rs->waiting_for_stop_reply = 0;
7922
7923 stop_reply
7924 = (struct stop_reply *) remote_notif_parse (this,
7925 &notif_client_stop,
7926 rs->buf.data ());
7927
7928 event_ptid = process_stop_reply (stop_reply, status);
7929 break;
7930 }
7931 case 'O': /* Console output. */
7932 remote_console_output (buf + 1);
7933 break;
7934 case '\0':
7935 if (rs->last_sent_signal != GDB_SIGNAL_0)
7936 {
7937 /* Zero length reply means that we tried 'S' or 'C' and the
7938 remote system doesn't support it. */
7939 target_terminal::ours_for_output ();
7940 printf_filtered
7941 ("Can't send signals to this remote system. %s not sent.\n",
7942 gdb_signal_to_name (rs->last_sent_signal));
7943 rs->last_sent_signal = GDB_SIGNAL_0;
7944 target_terminal::inferior ();
7945
7946 strcpy (buf, rs->last_sent_step ? "s" : "c");
7947 putpkt (buf);
7948 break;
7949 }
7950 /* fallthrough */
7951 default:
7952 warning (_("Invalid remote reply: %s"), buf);
7953 break;
7954 }
7955
7956 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7957 return minus_one_ptid;
7958 else if (status->kind == TARGET_WAITKIND_IGNORE)
7959 {
7960 /* Nothing interesting happened. If we're doing a non-blocking
7961 poll, we're done. Otherwise, go back to waiting. */
7962 if (options & TARGET_WNOHANG)
7963 return minus_one_ptid;
7964 else
7965 goto again;
7966 }
7967 else if (status->kind != TARGET_WAITKIND_EXITED
7968 && status->kind != TARGET_WAITKIND_SIGNALLED)
7969 {
7970 if (event_ptid != null_ptid)
7971 record_currthread (rs, event_ptid);
7972 else
7973 event_ptid = first_remote_resumed_thread (this);
7974 }
7975 else
7976 {
7977 /* A process exit. Invalidate our notion of current thread. */
7978 record_currthread (rs, minus_one_ptid);
7979 /* It's possible that the packet did not include a pid. */
7980 if (event_ptid == null_ptid)
7981 event_ptid = first_remote_resumed_thread (this);
7982 /* EVENT_PTID could still be NULL_PTID. Double-check. */
7983 if (event_ptid == null_ptid)
7984 event_ptid = magic_null_ptid;
7985 }
7986
7987 return event_ptid;
7988 }
7989
7990 /* Wait until the remote machine stops, then return, storing status in
7991 STATUS just as `wait' would. */
7992
7993 ptid_t
7994 remote_target::wait (ptid_t ptid, struct target_waitstatus *status, int options)
7995 {
7996 ptid_t event_ptid;
7997
7998 if (target_is_non_stop_p ())
7999 event_ptid = wait_ns (ptid, status, options);
8000 else
8001 event_ptid = wait_as (ptid, status, options);
8002
8003 if (target_is_async_p ())
8004 {
8005 remote_state *rs = get_remote_state ();
8006
8007 /* If there are are events left in the queue tell the event loop
8008 to return here. */
8009 if (!rs->stop_reply_queue.empty ())
8010 mark_async_event_handler (rs->remote_async_inferior_event_token);
8011 }
8012
8013 return event_ptid;
8014 }
8015
8016 /* Fetch a single register using a 'p' packet. */
8017
8018 int
8019 remote_target::fetch_register_using_p (struct regcache *regcache,
8020 packet_reg *reg)
8021 {
8022 struct gdbarch *gdbarch = regcache->arch ();
8023 struct remote_state *rs = get_remote_state ();
8024 char *buf, *p;
8025 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8026 int i;
8027
8028 if (packet_support (PACKET_p) == PACKET_DISABLE)
8029 return 0;
8030
8031 if (reg->pnum == -1)
8032 return 0;
8033
8034 p = rs->buf.data ();
8035 *p++ = 'p';
8036 p += hexnumstr (p, reg->pnum);
8037 *p++ = '\0';
8038 putpkt (rs->buf);
8039 getpkt (&rs->buf, 0);
8040
8041 buf = rs->buf.data ();
8042
8043 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
8044 {
8045 case PACKET_OK:
8046 break;
8047 case PACKET_UNKNOWN:
8048 return 0;
8049 case PACKET_ERROR:
8050 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
8051 gdbarch_register_name (regcache->arch (),
8052 reg->regnum),
8053 buf);
8054 }
8055
8056 /* If this register is unfetchable, tell the regcache. */
8057 if (buf[0] == 'x')
8058 {
8059 regcache->raw_supply (reg->regnum, NULL);
8060 return 1;
8061 }
8062
8063 /* Otherwise, parse and supply the value. */
8064 p = buf;
8065 i = 0;
8066 while (p[0] != 0)
8067 {
8068 if (p[1] == 0)
8069 error (_("fetch_register_using_p: early buf termination"));
8070
8071 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
8072 p += 2;
8073 }
8074 regcache->raw_supply (reg->regnum, regp);
8075 return 1;
8076 }
8077
8078 /* Fetch the registers included in the target's 'g' packet. */
8079
8080 int
8081 remote_target::send_g_packet ()
8082 {
8083 struct remote_state *rs = get_remote_state ();
8084 int buf_len;
8085
8086 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
8087 putpkt (rs->buf);
8088 getpkt (&rs->buf, 0);
8089 if (packet_check_result (rs->buf) == PACKET_ERROR)
8090 error (_("Could not read registers; remote failure reply '%s'"),
8091 rs->buf.data ());
8092
8093 /* We can get out of synch in various cases. If the first character
8094 in the buffer is not a hex character, assume that has happened
8095 and try to fetch another packet to read. */
8096 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
8097 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
8098 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
8099 && rs->buf[0] != 'x') /* New: unavailable register value. */
8100 {
8101 if (remote_debug)
8102 fprintf_unfiltered (gdb_stdlog,
8103 "Bad register packet; fetching a new packet\n");
8104 getpkt (&rs->buf, 0);
8105 }
8106
8107 buf_len = strlen (rs->buf.data ());
8108
8109 /* Sanity check the received packet. */
8110 if (buf_len % 2 != 0)
8111 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
8112
8113 return buf_len / 2;
8114 }
8115
8116 void
8117 remote_target::process_g_packet (struct regcache *regcache)
8118 {
8119 struct gdbarch *gdbarch = regcache->arch ();
8120 struct remote_state *rs = get_remote_state ();
8121 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8122 int i, buf_len;
8123 char *p;
8124 char *regs;
8125
8126 buf_len = strlen (rs->buf.data ());
8127
8128 /* Further sanity checks, with knowledge of the architecture. */
8129 if (buf_len > 2 * rsa->sizeof_g_packet)
8130 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8131 "bytes): %s"),
8132 rsa->sizeof_g_packet, buf_len / 2,
8133 rs->buf.data ());
8134
8135 /* Save the size of the packet sent to us by the target. It is used
8136 as a heuristic when determining the max size of packets that the
8137 target can safely receive. */
8138 if (rsa->actual_register_packet_size == 0)
8139 rsa->actual_register_packet_size = buf_len;
8140
8141 /* If this is smaller than we guessed the 'g' packet would be,
8142 update our records. A 'g' reply that doesn't include a register's
8143 value implies either that the register is not available, or that
8144 the 'p' packet must be used. */
8145 if (buf_len < 2 * rsa->sizeof_g_packet)
8146 {
8147 long sizeof_g_packet = buf_len / 2;
8148
8149 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8150 {
8151 long offset = rsa->regs[i].offset;
8152 long reg_size = register_size (gdbarch, i);
8153
8154 if (rsa->regs[i].pnum == -1)
8155 continue;
8156
8157 if (offset >= sizeof_g_packet)
8158 rsa->regs[i].in_g_packet = 0;
8159 else if (offset + reg_size > sizeof_g_packet)
8160 error (_("Truncated register %d in remote 'g' packet"), i);
8161 else
8162 rsa->regs[i].in_g_packet = 1;
8163 }
8164
8165 /* Looks valid enough, we can assume this is the correct length
8166 for a 'g' packet. It's important not to adjust
8167 rsa->sizeof_g_packet if we have truncated registers otherwise
8168 this "if" won't be run the next time the method is called
8169 with a packet of the same size and one of the internal errors
8170 below will trigger instead. */
8171 rsa->sizeof_g_packet = sizeof_g_packet;
8172 }
8173
8174 regs = (char *) alloca (rsa->sizeof_g_packet);
8175
8176 /* Unimplemented registers read as all bits zero. */
8177 memset (regs, 0, rsa->sizeof_g_packet);
8178
8179 /* Reply describes registers byte by byte, each byte encoded as two
8180 hex characters. Suck them all up, then supply them to the
8181 register cacheing/storage mechanism. */
8182
8183 p = rs->buf.data ();
8184 for (i = 0; i < rsa->sizeof_g_packet; i++)
8185 {
8186 if (p[0] == 0 || p[1] == 0)
8187 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8188 internal_error (__FILE__, __LINE__,
8189 _("unexpected end of 'g' packet reply"));
8190
8191 if (p[0] == 'x' && p[1] == 'x')
8192 regs[i] = 0; /* 'x' */
8193 else
8194 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8195 p += 2;
8196 }
8197
8198 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8199 {
8200 struct packet_reg *r = &rsa->regs[i];
8201 long reg_size = register_size (gdbarch, i);
8202
8203 if (r->in_g_packet)
8204 {
8205 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
8206 /* This shouldn't happen - we adjusted in_g_packet above. */
8207 internal_error (__FILE__, __LINE__,
8208 _("unexpected end of 'g' packet reply"));
8209 else if (rs->buf[r->offset * 2] == 'x')
8210 {
8211 gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
8212 /* The register isn't available, mark it as such (at
8213 the same time setting the value to zero). */
8214 regcache->raw_supply (r->regnum, NULL);
8215 }
8216 else
8217 regcache->raw_supply (r->regnum, regs + r->offset);
8218 }
8219 }
8220 }
8221
8222 void
8223 remote_target::fetch_registers_using_g (struct regcache *regcache)
8224 {
8225 send_g_packet ();
8226 process_g_packet (regcache);
8227 }
8228
8229 /* Make the remote selected traceframe match GDB's selected
8230 traceframe. */
8231
8232 void
8233 remote_target::set_remote_traceframe ()
8234 {
8235 int newnum;
8236 struct remote_state *rs = get_remote_state ();
8237
8238 if (rs->remote_traceframe_number == get_traceframe_number ())
8239 return;
8240
8241 /* Avoid recursion, remote_trace_find calls us again. */
8242 rs->remote_traceframe_number = get_traceframe_number ();
8243
8244 newnum = target_trace_find (tfind_number,
8245 get_traceframe_number (), 0, 0, NULL);
8246
8247 /* Should not happen. If it does, all bets are off. */
8248 if (newnum != get_traceframe_number ())
8249 warning (_("could not set remote traceframe"));
8250 }
8251
8252 void
8253 remote_target::fetch_registers (struct regcache *regcache, int regnum)
8254 {
8255 struct gdbarch *gdbarch = regcache->arch ();
8256 struct remote_state *rs = get_remote_state ();
8257 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8258 int i;
8259
8260 set_remote_traceframe ();
8261 set_general_thread (regcache->ptid ());
8262
8263 if (regnum >= 0)
8264 {
8265 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8266
8267 gdb_assert (reg != NULL);
8268
8269 /* If this register might be in the 'g' packet, try that first -
8270 we are likely to read more than one register. If this is the
8271 first 'g' packet, we might be overly optimistic about its
8272 contents, so fall back to 'p'. */
8273 if (reg->in_g_packet)
8274 {
8275 fetch_registers_using_g (regcache);
8276 if (reg->in_g_packet)
8277 return;
8278 }
8279
8280 if (fetch_register_using_p (regcache, reg))
8281 return;
8282
8283 /* This register is not available. */
8284 regcache->raw_supply (reg->regnum, NULL);
8285
8286 return;
8287 }
8288
8289 fetch_registers_using_g (regcache);
8290
8291 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8292 if (!rsa->regs[i].in_g_packet)
8293 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
8294 {
8295 /* This register is not available. */
8296 regcache->raw_supply (i, NULL);
8297 }
8298 }
8299
8300 /* Prepare to store registers. Since we may send them all (using a
8301 'G' request), we have to read out the ones we don't want to change
8302 first. */
8303
8304 void
8305 remote_target::prepare_to_store (struct regcache *regcache)
8306 {
8307 struct remote_state *rs = get_remote_state ();
8308 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8309 int i;
8310
8311 /* Make sure the entire registers array is valid. */
8312 switch (packet_support (PACKET_P))
8313 {
8314 case PACKET_DISABLE:
8315 case PACKET_SUPPORT_UNKNOWN:
8316 /* Make sure all the necessary registers are cached. */
8317 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8318 if (rsa->regs[i].in_g_packet)
8319 regcache->raw_update (rsa->regs[i].regnum);
8320 break;
8321 case PACKET_ENABLE:
8322 break;
8323 }
8324 }
8325
8326 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
8327 packet was not recognized. */
8328
8329 int
8330 remote_target::store_register_using_P (const struct regcache *regcache,
8331 packet_reg *reg)
8332 {
8333 struct gdbarch *gdbarch = regcache->arch ();
8334 struct remote_state *rs = get_remote_state ();
8335 /* Try storing a single register. */
8336 char *buf = rs->buf.data ();
8337 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8338 char *p;
8339
8340 if (packet_support (PACKET_P) == PACKET_DISABLE)
8341 return 0;
8342
8343 if (reg->pnum == -1)
8344 return 0;
8345
8346 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
8347 p = buf + strlen (buf);
8348 regcache->raw_collect (reg->regnum, regp);
8349 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
8350 putpkt (rs->buf);
8351 getpkt (&rs->buf, 0);
8352
8353 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8354 {
8355 case PACKET_OK:
8356 return 1;
8357 case PACKET_ERROR:
8358 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8359 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
8360 case PACKET_UNKNOWN:
8361 return 0;
8362 default:
8363 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8364 }
8365 }
8366
8367 /* Store register REGNUM, or all registers if REGNUM == -1, from the
8368 contents of the register cache buffer. FIXME: ignores errors. */
8369
8370 void
8371 remote_target::store_registers_using_G (const struct regcache *regcache)
8372 {
8373 struct remote_state *rs = get_remote_state ();
8374 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8375 gdb_byte *regs;
8376 char *p;
8377
8378 /* Extract all the registers in the regcache copying them into a
8379 local buffer. */
8380 {
8381 int i;
8382
8383 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
8384 memset (regs, 0, rsa->sizeof_g_packet);
8385 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8386 {
8387 struct packet_reg *r = &rsa->regs[i];
8388
8389 if (r->in_g_packet)
8390 regcache->raw_collect (r->regnum, regs + r->offset);
8391 }
8392 }
8393
8394 /* Command describes registers byte by byte,
8395 each byte encoded as two hex characters. */
8396 p = rs->buf.data ();
8397 *p++ = 'G';
8398 bin2hex (regs, p, rsa->sizeof_g_packet);
8399 putpkt (rs->buf);
8400 getpkt (&rs->buf, 0);
8401 if (packet_check_result (rs->buf) == PACKET_ERROR)
8402 error (_("Could not write registers; remote failure reply '%s'"),
8403 rs->buf.data ());
8404 }
8405
8406 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8407 of the register cache buffer. FIXME: ignores errors. */
8408
8409 void
8410 remote_target::store_registers (struct regcache *regcache, int regnum)
8411 {
8412 struct gdbarch *gdbarch = regcache->arch ();
8413 struct remote_state *rs = get_remote_state ();
8414 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8415 int i;
8416
8417 set_remote_traceframe ();
8418 set_general_thread (regcache->ptid ());
8419
8420 if (regnum >= 0)
8421 {
8422 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8423
8424 gdb_assert (reg != NULL);
8425
8426 /* Always prefer to store registers using the 'P' packet if
8427 possible; we often change only a small number of registers.
8428 Sometimes we change a larger number; we'd need help from a
8429 higher layer to know to use 'G'. */
8430 if (store_register_using_P (regcache, reg))
8431 return;
8432
8433 /* For now, don't complain if we have no way to write the
8434 register. GDB loses track of unavailable registers too
8435 easily. Some day, this may be an error. We don't have
8436 any way to read the register, either... */
8437 if (!reg->in_g_packet)
8438 return;
8439
8440 store_registers_using_G (regcache);
8441 return;
8442 }
8443
8444 store_registers_using_G (regcache);
8445
8446 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8447 if (!rsa->regs[i].in_g_packet)
8448 if (!store_register_using_P (regcache, &rsa->regs[i]))
8449 /* See above for why we do not issue an error here. */
8450 continue;
8451 }
8452 \f
8453
8454 /* Return the number of hex digits in num. */
8455
8456 static int
8457 hexnumlen (ULONGEST num)
8458 {
8459 int i;
8460
8461 for (i = 0; num != 0; i++)
8462 num >>= 4;
8463
8464 return std::max (i, 1);
8465 }
8466
8467 /* Set BUF to the minimum number of hex digits representing NUM. */
8468
8469 static int
8470 hexnumstr (char *buf, ULONGEST num)
8471 {
8472 int len = hexnumlen (num);
8473
8474 return hexnumnstr (buf, num, len);
8475 }
8476
8477
8478 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
8479
8480 static int
8481 hexnumnstr (char *buf, ULONGEST num, int width)
8482 {
8483 int i;
8484
8485 buf[width] = '\0';
8486
8487 for (i = width - 1; i >= 0; i--)
8488 {
8489 buf[i] = "0123456789abcdef"[(num & 0xf)];
8490 num >>= 4;
8491 }
8492
8493 return width;
8494 }
8495
8496 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
8497
8498 static CORE_ADDR
8499 remote_address_masked (CORE_ADDR addr)
8500 {
8501 unsigned int address_size = remote_address_size;
8502
8503 /* If "remoteaddresssize" was not set, default to target address size. */
8504 if (!address_size)
8505 address_size = gdbarch_addr_bit (target_gdbarch ());
8506
8507 if (address_size > 0
8508 && address_size < (sizeof (ULONGEST) * 8))
8509 {
8510 /* Only create a mask when that mask can safely be constructed
8511 in a ULONGEST variable. */
8512 ULONGEST mask = 1;
8513
8514 mask = (mask << address_size) - 1;
8515 addr &= mask;
8516 }
8517 return addr;
8518 }
8519
8520 /* Determine whether the remote target supports binary downloading.
8521 This is accomplished by sending a no-op memory write of zero length
8522 to the target at the specified address. It does not suffice to send
8523 the whole packet, since many stubs strip the eighth bit and
8524 subsequently compute a wrong checksum, which causes real havoc with
8525 remote_write_bytes.
8526
8527 NOTE: This can still lose if the serial line is not eight-bit
8528 clean. In cases like this, the user should clear "remote
8529 X-packet". */
8530
8531 void
8532 remote_target::check_binary_download (CORE_ADDR addr)
8533 {
8534 struct remote_state *rs = get_remote_state ();
8535
8536 switch (packet_support (PACKET_X))
8537 {
8538 case PACKET_DISABLE:
8539 break;
8540 case PACKET_ENABLE:
8541 break;
8542 case PACKET_SUPPORT_UNKNOWN:
8543 {
8544 char *p;
8545
8546 p = rs->buf.data ();
8547 *p++ = 'X';
8548 p += hexnumstr (p, (ULONGEST) addr);
8549 *p++ = ',';
8550 p += hexnumstr (p, (ULONGEST) 0);
8551 *p++ = ':';
8552 *p = '\0';
8553
8554 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8555 getpkt (&rs->buf, 0);
8556
8557 if (rs->buf[0] == '\0')
8558 {
8559 if (remote_debug)
8560 fprintf_unfiltered (gdb_stdlog,
8561 "binary downloading NOT "
8562 "supported by target\n");
8563 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8564 }
8565 else
8566 {
8567 if (remote_debug)
8568 fprintf_unfiltered (gdb_stdlog,
8569 "binary downloading supported by target\n");
8570 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8571 }
8572 break;
8573 }
8574 }
8575 }
8576
8577 /* Helper function to resize the payload in order to try to get a good
8578 alignment. We try to write an amount of data such that the next write will
8579 start on an address aligned on REMOTE_ALIGN_WRITES. */
8580
8581 static int
8582 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8583 {
8584 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8585 }
8586
8587 /* Write memory data directly to the remote machine.
8588 This does not inform the data cache; the data cache uses this.
8589 HEADER is the starting part of the packet.
8590 MEMADDR is the address in the remote memory space.
8591 MYADDR is the address of the buffer in our space.
8592 LEN_UNITS is the number of addressable units to write.
8593 UNIT_SIZE is the length in bytes of an addressable unit.
8594 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8595 should send data as binary ('X'), or hex-encoded ('M').
8596
8597 The function creates packet of the form
8598 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8599
8600 where encoding of <DATA> is terminated by PACKET_FORMAT.
8601
8602 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8603 are omitted.
8604
8605 Return the transferred status, error or OK (an
8606 'enum target_xfer_status' value). Save the number of addressable units
8607 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8608
8609 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8610 exchange between gdb and the stub could look like (?? in place of the
8611 checksum):
8612
8613 -> $m1000,4#??
8614 <- aaaabbbbccccdddd
8615
8616 -> $M1000,3:eeeeffffeeee#??
8617 <- OK
8618
8619 -> $m1000,4#??
8620 <- eeeeffffeeeedddd */
8621
8622 target_xfer_status
8623 remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8624 const gdb_byte *myaddr,
8625 ULONGEST len_units,
8626 int unit_size,
8627 ULONGEST *xfered_len_units,
8628 char packet_format, int use_length)
8629 {
8630 struct remote_state *rs = get_remote_state ();
8631 char *p;
8632 char *plen = NULL;
8633 int plenlen = 0;
8634 int todo_units;
8635 int units_written;
8636 int payload_capacity_bytes;
8637 int payload_length_bytes;
8638
8639 if (packet_format != 'X' && packet_format != 'M')
8640 internal_error (__FILE__, __LINE__,
8641 _("remote_write_bytes_aux: bad packet format"));
8642
8643 if (len_units == 0)
8644 return TARGET_XFER_EOF;
8645
8646 payload_capacity_bytes = get_memory_write_packet_size ();
8647
8648 /* The packet buffer will be large enough for the payload;
8649 get_memory_packet_size ensures this. */
8650 rs->buf[0] = '\0';
8651
8652 /* Compute the size of the actual payload by subtracting out the
8653 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8654
8655 payload_capacity_bytes -= strlen ("$,:#NN");
8656 if (!use_length)
8657 /* The comma won't be used. */
8658 payload_capacity_bytes += 1;
8659 payload_capacity_bytes -= strlen (header);
8660 payload_capacity_bytes -= hexnumlen (memaddr);
8661
8662 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
8663
8664 strcat (rs->buf.data (), header);
8665 p = rs->buf.data () + strlen (header);
8666
8667 /* Compute a best guess of the number of bytes actually transfered. */
8668 if (packet_format == 'X')
8669 {
8670 /* Best guess at number of bytes that will fit. */
8671 todo_units = std::min (len_units,
8672 (ULONGEST) payload_capacity_bytes / unit_size);
8673 if (use_length)
8674 payload_capacity_bytes -= hexnumlen (todo_units);
8675 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8676 }
8677 else
8678 {
8679 /* Number of bytes that will fit. */
8680 todo_units
8681 = std::min (len_units,
8682 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8683 if (use_length)
8684 payload_capacity_bytes -= hexnumlen (todo_units);
8685 todo_units = std::min (todo_units,
8686 (payload_capacity_bytes / unit_size) / 2);
8687 }
8688
8689 if (todo_units <= 0)
8690 internal_error (__FILE__, __LINE__,
8691 _("minimum packet size too small to write data"));
8692
8693 /* If we already need another packet, then try to align the end
8694 of this packet to a useful boundary. */
8695 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8696 todo_units = align_for_efficient_write (todo_units, memaddr);
8697
8698 /* Append "<memaddr>". */
8699 memaddr = remote_address_masked (memaddr);
8700 p += hexnumstr (p, (ULONGEST) memaddr);
8701
8702 if (use_length)
8703 {
8704 /* Append ",". */
8705 *p++ = ',';
8706
8707 /* Append the length and retain its location and size. It may need to be
8708 adjusted once the packet body has been created. */
8709 plen = p;
8710 plenlen = hexnumstr (p, (ULONGEST) todo_units);
8711 p += plenlen;
8712 }
8713
8714 /* Append ":". */
8715 *p++ = ':';
8716 *p = '\0';
8717
8718 /* Append the packet body. */
8719 if (packet_format == 'X')
8720 {
8721 /* Binary mode. Send target system values byte by byte, in
8722 increasing byte addresses. Only escape certain critical
8723 characters. */
8724 payload_length_bytes =
8725 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8726 &units_written, payload_capacity_bytes);
8727
8728 /* If not all TODO units fit, then we'll need another packet. Make
8729 a second try to keep the end of the packet aligned. Don't do
8730 this if the packet is tiny. */
8731 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8732 {
8733 int new_todo_units;
8734
8735 new_todo_units = align_for_efficient_write (units_written, memaddr);
8736
8737 if (new_todo_units != units_written)
8738 payload_length_bytes =
8739 remote_escape_output (myaddr, new_todo_units, unit_size,
8740 (gdb_byte *) p, &units_written,
8741 payload_capacity_bytes);
8742 }
8743
8744 p += payload_length_bytes;
8745 if (use_length && units_written < todo_units)
8746 {
8747 /* Escape chars have filled up the buffer prematurely,
8748 and we have actually sent fewer units than planned.
8749 Fix-up the length field of the packet. Use the same
8750 number of characters as before. */
8751 plen += hexnumnstr (plen, (ULONGEST) units_written,
8752 plenlen);
8753 *plen = ':'; /* overwrite \0 from hexnumnstr() */
8754 }
8755 }
8756 else
8757 {
8758 /* Normal mode: Send target system values byte by byte, in
8759 increasing byte addresses. Each byte is encoded as a two hex
8760 value. */
8761 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8762 units_written = todo_units;
8763 }
8764
8765 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8766 getpkt (&rs->buf, 0);
8767
8768 if (rs->buf[0] == 'E')
8769 return TARGET_XFER_E_IO;
8770
8771 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8772 send fewer units than we'd planned. */
8773 *xfered_len_units = (ULONGEST) units_written;
8774 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8775 }
8776
8777 /* Write memory data directly to the remote machine.
8778 This does not inform the data cache; the data cache uses this.
8779 MEMADDR is the address in the remote memory space.
8780 MYADDR is the address of the buffer in our space.
8781 LEN is the number of bytes.
8782
8783 Return the transferred status, error or OK (an
8784 'enum target_xfer_status' value). Save the number of bytes
8785 transferred in *XFERED_LEN. Only transfer a single packet. */
8786
8787 target_xfer_status
8788 remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8789 ULONGEST len, int unit_size,
8790 ULONGEST *xfered_len)
8791 {
8792 const char *packet_format = NULL;
8793
8794 /* Check whether the target supports binary download. */
8795 check_binary_download (memaddr);
8796
8797 switch (packet_support (PACKET_X))
8798 {
8799 case PACKET_ENABLE:
8800 packet_format = "X";
8801 break;
8802 case PACKET_DISABLE:
8803 packet_format = "M";
8804 break;
8805 case PACKET_SUPPORT_UNKNOWN:
8806 internal_error (__FILE__, __LINE__,
8807 _("remote_write_bytes: bad internal state"));
8808 default:
8809 internal_error (__FILE__, __LINE__, _("bad switch"));
8810 }
8811
8812 return remote_write_bytes_aux (packet_format,
8813 memaddr, myaddr, len, unit_size, xfered_len,
8814 packet_format[0], 1);
8815 }
8816
8817 /* Read memory data directly from the remote machine.
8818 This does not use the data cache; the data cache uses this.
8819 MEMADDR is the address in the remote memory space.
8820 MYADDR is the address of the buffer in our space.
8821 LEN_UNITS is the number of addressable memory units to read..
8822 UNIT_SIZE is the length in bytes of an addressable unit.
8823
8824 Return the transferred status, error or OK (an
8825 'enum target_xfer_status' value). Save the number of bytes
8826 transferred in *XFERED_LEN_UNITS.
8827
8828 See the comment of remote_write_bytes_aux for an example of
8829 memory read/write exchange between gdb and the stub. */
8830
8831 target_xfer_status
8832 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8833 ULONGEST len_units,
8834 int unit_size, ULONGEST *xfered_len_units)
8835 {
8836 struct remote_state *rs = get_remote_state ();
8837 int buf_size_bytes; /* Max size of packet output buffer. */
8838 char *p;
8839 int todo_units;
8840 int decoded_bytes;
8841
8842 buf_size_bytes = get_memory_read_packet_size ();
8843 /* The packet buffer will be large enough for the payload;
8844 get_memory_packet_size ensures this. */
8845
8846 /* Number of units that will fit. */
8847 todo_units = std::min (len_units,
8848 (ULONGEST) (buf_size_bytes / unit_size) / 2);
8849
8850 /* Construct "m"<memaddr>","<len>". */
8851 memaddr = remote_address_masked (memaddr);
8852 p = rs->buf.data ();
8853 *p++ = 'm';
8854 p += hexnumstr (p, (ULONGEST) memaddr);
8855 *p++ = ',';
8856 p += hexnumstr (p, (ULONGEST) todo_units);
8857 *p = '\0';
8858 putpkt (rs->buf);
8859 getpkt (&rs->buf, 0);
8860 if (rs->buf[0] == 'E'
8861 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8862 && rs->buf[3] == '\0')
8863 return TARGET_XFER_E_IO;
8864 /* Reply describes memory byte by byte, each byte encoded as two hex
8865 characters. */
8866 p = rs->buf.data ();
8867 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8868 /* Return what we have. Let higher layers handle partial reads. */
8869 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8870 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8871 }
8872
8873 /* Using the set of read-only target sections of remote, read live
8874 read-only memory.
8875
8876 For interface/parameters/return description see target.h,
8877 to_xfer_partial. */
8878
8879 target_xfer_status
8880 remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
8881 ULONGEST memaddr,
8882 ULONGEST len,
8883 int unit_size,
8884 ULONGEST *xfered_len)
8885 {
8886 struct target_section *secp;
8887 struct target_section_table *table;
8888
8889 secp = target_section_by_addr (this, memaddr);
8890 if (secp != NULL
8891 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
8892 {
8893 struct target_section *p;
8894 ULONGEST memend = memaddr + len;
8895
8896 table = target_get_section_table (this);
8897
8898 for (p = table->sections; p < table->sections_end; p++)
8899 {
8900 if (memaddr >= p->addr)
8901 {
8902 if (memend <= p->endaddr)
8903 {
8904 /* Entire transfer is within this section. */
8905 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8906 xfered_len);
8907 }
8908 else if (memaddr >= p->endaddr)
8909 {
8910 /* This section ends before the transfer starts. */
8911 continue;
8912 }
8913 else
8914 {
8915 /* This section overlaps the transfer. Just do half. */
8916 len = p->endaddr - memaddr;
8917 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8918 xfered_len);
8919 }
8920 }
8921 }
8922 }
8923
8924 return TARGET_XFER_EOF;
8925 }
8926
8927 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8928 first if the requested memory is unavailable in traceframe.
8929 Otherwise, fall back to remote_read_bytes_1. */
8930
8931 target_xfer_status
8932 remote_target::remote_read_bytes (CORE_ADDR memaddr,
8933 gdb_byte *myaddr, ULONGEST len, int unit_size,
8934 ULONGEST *xfered_len)
8935 {
8936 if (len == 0)
8937 return TARGET_XFER_EOF;
8938
8939 if (get_traceframe_number () != -1)
8940 {
8941 std::vector<mem_range> available;
8942
8943 /* If we fail to get the set of available memory, then the
8944 target does not support querying traceframe info, and so we
8945 attempt reading from the traceframe anyway (assuming the
8946 target implements the old QTro packet then). */
8947 if (traceframe_available_memory (&available, memaddr, len))
8948 {
8949 if (available.empty () || available[0].start != memaddr)
8950 {
8951 enum target_xfer_status res;
8952
8953 /* Don't read into the traceframe's available
8954 memory. */
8955 if (!available.empty ())
8956 {
8957 LONGEST oldlen = len;
8958
8959 len = available[0].start - memaddr;
8960 gdb_assert (len <= oldlen);
8961 }
8962
8963 /* This goes through the topmost target again. */
8964 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
8965 len, unit_size, xfered_len);
8966 if (res == TARGET_XFER_OK)
8967 return TARGET_XFER_OK;
8968 else
8969 {
8970 /* No use trying further, we know some memory starting
8971 at MEMADDR isn't available. */
8972 *xfered_len = len;
8973 return (*xfered_len != 0) ?
8974 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8975 }
8976 }
8977
8978 /* Don't try to read more than how much is available, in
8979 case the target implements the deprecated QTro packet to
8980 cater for older GDBs (the target's knowledge of read-only
8981 sections may be outdated by now). */
8982 len = available[0].length;
8983 }
8984 }
8985
8986 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8987 }
8988
8989 \f
8990
8991 /* Sends a packet with content determined by the printf format string
8992 FORMAT and the remaining arguments, then gets the reply. Returns
8993 whether the packet was a success, a failure, or unknown. */
8994
8995 packet_result
8996 remote_target::remote_send_printf (const char *format, ...)
8997 {
8998 struct remote_state *rs = get_remote_state ();
8999 int max_size = get_remote_packet_size ();
9000 va_list ap;
9001
9002 va_start (ap, format);
9003
9004 rs->buf[0] = '\0';
9005 int size = vsnprintf (rs->buf.data (), max_size, format, ap);
9006
9007 va_end (ap);
9008
9009 if (size >= max_size)
9010 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
9011
9012 if (putpkt (rs->buf) < 0)
9013 error (_("Communication problem with target."));
9014
9015 rs->buf[0] = '\0';
9016 getpkt (&rs->buf, 0);
9017
9018 return packet_check_result (rs->buf);
9019 }
9020
9021 /* Flash writing can take quite some time. We'll set
9022 effectively infinite timeout for flash operations.
9023 In future, we'll need to decide on a better approach. */
9024 static const int remote_flash_timeout = 1000;
9025
9026 void
9027 remote_target::flash_erase (ULONGEST address, LONGEST length)
9028 {
9029 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
9030 enum packet_result ret;
9031 scoped_restore restore_timeout
9032 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9033
9034 ret = remote_send_printf ("vFlashErase:%s,%s",
9035 phex (address, addr_size),
9036 phex (length, 4));
9037 switch (ret)
9038 {
9039 case PACKET_UNKNOWN:
9040 error (_("Remote target does not support flash erase"));
9041 case PACKET_ERROR:
9042 error (_("Error erasing flash with vFlashErase packet"));
9043 default:
9044 break;
9045 }
9046 }
9047
9048 target_xfer_status
9049 remote_target::remote_flash_write (ULONGEST address,
9050 ULONGEST length, ULONGEST *xfered_len,
9051 const gdb_byte *data)
9052 {
9053 scoped_restore restore_timeout
9054 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9055 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9056 xfered_len,'X', 0);
9057 }
9058
9059 void
9060 remote_target::flash_done ()
9061 {
9062 int ret;
9063
9064 scoped_restore restore_timeout
9065 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9066
9067 ret = remote_send_printf ("vFlashDone");
9068
9069 switch (ret)
9070 {
9071 case PACKET_UNKNOWN:
9072 error (_("Remote target does not support vFlashDone"));
9073 case PACKET_ERROR:
9074 error (_("Error finishing flash operation"));
9075 default:
9076 break;
9077 }
9078 }
9079
9080 void
9081 remote_target::files_info ()
9082 {
9083 puts_filtered ("Debugging a target over a serial line.\n");
9084 }
9085 \f
9086 /* Stuff for dealing with the packets which are part of this protocol.
9087 See comment at top of file for details. */
9088
9089 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
9090 error to higher layers. Called when a serial error is detected.
9091 The exception message is STRING, followed by a colon and a blank,
9092 the system error message for errno at function entry and final dot
9093 for output compatibility with throw_perror_with_name. */
9094
9095 static void
9096 unpush_and_perror (remote_target *target, const char *string)
9097 {
9098 int saved_errno = errno;
9099
9100 remote_unpush_target (target);
9101 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
9102 safe_strerror (saved_errno));
9103 }
9104
9105 /* Read a single character from the remote end. The current quit
9106 handler is overridden to avoid quitting in the middle of packet
9107 sequence, as that would break communication with the remote server.
9108 See remote_serial_quit_handler for more detail. */
9109
9110 int
9111 remote_target::readchar (int timeout)
9112 {
9113 int ch;
9114 struct remote_state *rs = get_remote_state ();
9115
9116 {
9117 scoped_restore restore_quit_target
9118 = make_scoped_restore (&curr_quit_handler_target, this);
9119 scoped_restore restore_quit
9120 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9121
9122 rs->got_ctrlc_during_io = 0;
9123
9124 ch = serial_readchar (rs->remote_desc, timeout);
9125
9126 if (rs->got_ctrlc_during_io)
9127 set_quit_flag ();
9128 }
9129
9130 if (ch >= 0)
9131 return ch;
9132
9133 switch ((enum serial_rc) ch)
9134 {
9135 case SERIAL_EOF:
9136 remote_unpush_target (this);
9137 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
9138 /* no return */
9139 case SERIAL_ERROR:
9140 unpush_and_perror (this, _("Remote communication error. "
9141 "Target disconnected."));
9142 /* no return */
9143 case SERIAL_TIMEOUT:
9144 break;
9145 }
9146 return ch;
9147 }
9148
9149 /* Wrapper for serial_write that closes the target and throws if
9150 writing fails. The current quit handler is overridden to avoid
9151 quitting in the middle of packet sequence, as that would break
9152 communication with the remote server. See
9153 remote_serial_quit_handler for more detail. */
9154
9155 void
9156 remote_target::remote_serial_write (const char *str, int len)
9157 {
9158 struct remote_state *rs = get_remote_state ();
9159
9160 scoped_restore restore_quit_target
9161 = make_scoped_restore (&curr_quit_handler_target, this);
9162 scoped_restore restore_quit
9163 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9164
9165 rs->got_ctrlc_during_io = 0;
9166
9167 if (serial_write (rs->remote_desc, str, len))
9168 {
9169 unpush_and_perror (this, _("Remote communication error. "
9170 "Target disconnected."));
9171 }
9172
9173 if (rs->got_ctrlc_during_io)
9174 set_quit_flag ();
9175 }
9176
9177 /* Return a string representing an escaped version of BUF, of len N.
9178 E.g. \n is converted to \\n, \t to \\t, etc. */
9179
9180 static std::string
9181 escape_buffer (const char *buf, int n)
9182 {
9183 string_file stb;
9184
9185 stb.putstrn (buf, n, '\\');
9186 return std::move (stb.string ());
9187 }
9188
9189 /* Display a null-terminated packet on stdout, for debugging, using C
9190 string notation. */
9191
9192 static void
9193 print_packet (const char *buf)
9194 {
9195 puts_filtered ("\"");
9196 fputstr_filtered (buf, '"', gdb_stdout);
9197 puts_filtered ("\"");
9198 }
9199
9200 int
9201 remote_target::putpkt (const char *buf)
9202 {
9203 return putpkt_binary (buf, strlen (buf));
9204 }
9205
9206 /* Wrapper around remote_target::putpkt to avoid exporting
9207 remote_target. */
9208
9209 int
9210 putpkt (remote_target *remote, const char *buf)
9211 {
9212 return remote->putpkt (buf);
9213 }
9214
9215 /* Send a packet to the remote machine, with error checking. The data
9216 of the packet is in BUF. The string in BUF can be at most
9217 get_remote_packet_size () - 5 to account for the $, # and checksum,
9218 and for a possible /0 if we are debugging (remote_debug) and want
9219 to print the sent packet as a string. */
9220
9221 int
9222 remote_target::putpkt_binary (const char *buf, int cnt)
9223 {
9224 struct remote_state *rs = get_remote_state ();
9225 int i;
9226 unsigned char csum = 0;
9227 gdb::def_vector<char> data (cnt + 6);
9228 char *buf2 = data.data ();
9229
9230 int ch;
9231 int tcount = 0;
9232 char *p;
9233
9234 /* Catch cases like trying to read memory or listing threads while
9235 we're waiting for a stop reply. The remote server wouldn't be
9236 ready to handle this request, so we'd hang and timeout. We don't
9237 have to worry about this in synchronous mode, because in that
9238 case it's not possible to issue a command while the target is
9239 running. This is not a problem in non-stop mode, because in that
9240 case, the stub is always ready to process serial input. */
9241 if (!target_is_non_stop_p ()
9242 && target_is_async_p ()
9243 && rs->waiting_for_stop_reply)
9244 {
9245 error (_("Cannot execute this command while the target is running.\n"
9246 "Use the \"interrupt\" command to stop the target\n"
9247 "and then try again."));
9248 }
9249
9250 /* We're sending out a new packet. Make sure we don't look at a
9251 stale cached response. */
9252 rs->cached_wait_status = 0;
9253
9254 /* Copy the packet into buffer BUF2, encapsulating it
9255 and giving it a checksum. */
9256
9257 p = buf2;
9258 *p++ = '$';
9259
9260 for (i = 0; i < cnt; i++)
9261 {
9262 csum += buf[i];
9263 *p++ = buf[i];
9264 }
9265 *p++ = '#';
9266 *p++ = tohex ((csum >> 4) & 0xf);
9267 *p++ = tohex (csum & 0xf);
9268
9269 /* Send it over and over until we get a positive ack. */
9270
9271 while (1)
9272 {
9273 int started_error_output = 0;
9274
9275 if (remote_debug)
9276 {
9277 *p = '\0';
9278
9279 int len = (int) (p - buf2);
9280 int max_chars;
9281
9282 if (remote_packet_max_chars < 0)
9283 max_chars = len;
9284 else
9285 max_chars = remote_packet_max_chars;
9286
9287 std::string str
9288 = escape_buffer (buf2, std::min (len, max_chars));
9289
9290 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
9291
9292 if (len > max_chars)
9293 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9294 len - max_chars);
9295
9296 fprintf_unfiltered (gdb_stdlog, "...");
9297
9298 gdb_flush (gdb_stdlog);
9299 }
9300 remote_serial_write (buf2, p - buf2);
9301
9302 /* If this is a no acks version of the remote protocol, send the
9303 packet and move on. */
9304 if (rs->noack_mode)
9305 break;
9306
9307 /* Read until either a timeout occurs (-2) or '+' is read.
9308 Handle any notification that arrives in the mean time. */
9309 while (1)
9310 {
9311 ch = readchar (remote_timeout);
9312
9313 if (remote_debug)
9314 {
9315 switch (ch)
9316 {
9317 case '+':
9318 case '-':
9319 case SERIAL_TIMEOUT:
9320 case '$':
9321 case '%':
9322 if (started_error_output)
9323 {
9324 putchar_unfiltered ('\n');
9325 started_error_output = 0;
9326 }
9327 }
9328 }
9329
9330 switch (ch)
9331 {
9332 case '+':
9333 if (remote_debug)
9334 fprintf_unfiltered (gdb_stdlog, "Ack\n");
9335 return 1;
9336 case '-':
9337 if (remote_debug)
9338 fprintf_unfiltered (gdb_stdlog, "Nak\n");
9339 /* FALLTHROUGH */
9340 case SERIAL_TIMEOUT:
9341 tcount++;
9342 if (tcount > 3)
9343 return 0;
9344 break; /* Retransmit buffer. */
9345 case '$':
9346 {
9347 if (remote_debug)
9348 fprintf_unfiltered (gdb_stdlog,
9349 "Packet instead of Ack, ignoring it\n");
9350 /* It's probably an old response sent because an ACK
9351 was lost. Gobble up the packet and ack it so it
9352 doesn't get retransmitted when we resend this
9353 packet. */
9354 skip_frame ();
9355 remote_serial_write ("+", 1);
9356 continue; /* Now, go look for +. */
9357 }
9358
9359 case '%':
9360 {
9361 int val;
9362
9363 /* If we got a notification, handle it, and go back to looking
9364 for an ack. */
9365 /* We've found the start of a notification. Now
9366 collect the data. */
9367 val = read_frame (&rs->buf);
9368 if (val >= 0)
9369 {
9370 if (remote_debug)
9371 {
9372 std::string str = escape_buffer (rs->buf.data (), val);
9373
9374 fprintf_unfiltered (gdb_stdlog,
9375 " Notification received: %s\n",
9376 str.c_str ());
9377 }
9378 handle_notification (rs->notif_state, rs->buf.data ());
9379 /* We're in sync now, rewait for the ack. */
9380 tcount = 0;
9381 }
9382 else
9383 {
9384 if (remote_debug)
9385 {
9386 if (!started_error_output)
9387 {
9388 started_error_output = 1;
9389 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9390 }
9391 fputc_unfiltered (ch & 0177, gdb_stdlog);
9392 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf.data ());
9393 }
9394 }
9395 continue;
9396 }
9397 /* fall-through */
9398 default:
9399 if (remote_debug)
9400 {
9401 if (!started_error_output)
9402 {
9403 started_error_output = 1;
9404 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9405 }
9406 fputc_unfiltered (ch & 0177, gdb_stdlog);
9407 }
9408 continue;
9409 }
9410 break; /* Here to retransmit. */
9411 }
9412
9413 #if 0
9414 /* This is wrong. If doing a long backtrace, the user should be
9415 able to get out next time we call QUIT, without anything as
9416 violent as interrupt_query. If we want to provide a way out of
9417 here without getting to the next QUIT, it should be based on
9418 hitting ^C twice as in remote_wait. */
9419 if (quit_flag)
9420 {
9421 quit_flag = 0;
9422 interrupt_query ();
9423 }
9424 #endif
9425 }
9426
9427 return 0;
9428 }
9429
9430 /* Come here after finding the start of a frame when we expected an
9431 ack. Do our best to discard the rest of this packet. */
9432
9433 void
9434 remote_target::skip_frame ()
9435 {
9436 int c;
9437
9438 while (1)
9439 {
9440 c = readchar (remote_timeout);
9441 switch (c)
9442 {
9443 case SERIAL_TIMEOUT:
9444 /* Nothing we can do. */
9445 return;
9446 case '#':
9447 /* Discard the two bytes of checksum and stop. */
9448 c = readchar (remote_timeout);
9449 if (c >= 0)
9450 c = readchar (remote_timeout);
9451
9452 return;
9453 case '*': /* Run length encoding. */
9454 /* Discard the repeat count. */
9455 c = readchar (remote_timeout);
9456 if (c < 0)
9457 return;
9458 break;
9459 default:
9460 /* A regular character. */
9461 break;
9462 }
9463 }
9464 }
9465
9466 /* Come here after finding the start of the frame. Collect the rest
9467 into *BUF, verifying the checksum, length, and handling run-length
9468 compression. NUL terminate the buffer. If there is not enough room,
9469 expand *BUF.
9470
9471 Returns -1 on error, number of characters in buffer (ignoring the
9472 trailing NULL) on success. (could be extended to return one of the
9473 SERIAL status indications). */
9474
9475 long
9476 remote_target::read_frame (gdb::char_vector *buf_p)
9477 {
9478 unsigned char csum;
9479 long bc;
9480 int c;
9481 char *buf = buf_p->data ();
9482 struct remote_state *rs = get_remote_state ();
9483
9484 csum = 0;
9485 bc = 0;
9486
9487 while (1)
9488 {
9489 c = readchar (remote_timeout);
9490 switch (c)
9491 {
9492 case SERIAL_TIMEOUT:
9493 if (remote_debug)
9494 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
9495 return -1;
9496 case '$':
9497 if (remote_debug)
9498 fputs_filtered ("Saw new packet start in middle of old one\n",
9499 gdb_stdlog);
9500 return -1; /* Start a new packet, count retries. */
9501 case '#':
9502 {
9503 unsigned char pktcsum;
9504 int check_0 = 0;
9505 int check_1 = 0;
9506
9507 buf[bc] = '\0';
9508
9509 check_0 = readchar (remote_timeout);
9510 if (check_0 >= 0)
9511 check_1 = readchar (remote_timeout);
9512
9513 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9514 {
9515 if (remote_debug)
9516 fputs_filtered ("Timeout in checksum, retrying\n",
9517 gdb_stdlog);
9518 return -1;
9519 }
9520 else if (check_0 < 0 || check_1 < 0)
9521 {
9522 if (remote_debug)
9523 fputs_filtered ("Communication error in checksum\n",
9524 gdb_stdlog);
9525 return -1;
9526 }
9527
9528 /* Don't recompute the checksum; with no ack packets we
9529 don't have any way to indicate a packet retransmission
9530 is necessary. */
9531 if (rs->noack_mode)
9532 return bc;
9533
9534 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9535 if (csum == pktcsum)
9536 return bc;
9537
9538 if (remote_debug)
9539 {
9540 std::string str = escape_buffer (buf, bc);
9541
9542 fprintf_unfiltered (gdb_stdlog,
9543 "Bad checksum, sentsum=0x%x, "
9544 "csum=0x%x, buf=%s\n",
9545 pktcsum, csum, str.c_str ());
9546 }
9547 /* Number of characters in buffer ignoring trailing
9548 NULL. */
9549 return -1;
9550 }
9551 case '*': /* Run length encoding. */
9552 {
9553 int repeat;
9554
9555 csum += c;
9556 c = readchar (remote_timeout);
9557 csum += c;
9558 repeat = c - ' ' + 3; /* Compute repeat count. */
9559
9560 /* The character before ``*'' is repeated. */
9561
9562 if (repeat > 0 && repeat <= 255 && bc > 0)
9563 {
9564 if (bc + repeat - 1 >= buf_p->size () - 1)
9565 {
9566 /* Make some more room in the buffer. */
9567 buf_p->resize (buf_p->size () + repeat);
9568 buf = buf_p->data ();
9569 }
9570
9571 memset (&buf[bc], buf[bc - 1], repeat);
9572 bc += repeat;
9573 continue;
9574 }
9575
9576 buf[bc] = '\0';
9577 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9578 return -1;
9579 }
9580 default:
9581 if (bc >= buf_p->size () - 1)
9582 {
9583 /* Make some more room in the buffer. */
9584 buf_p->resize (buf_p->size () * 2);
9585 buf = buf_p->data ();
9586 }
9587
9588 buf[bc++] = c;
9589 csum += c;
9590 continue;
9591 }
9592 }
9593 }
9594
9595 /* Set this to the maximum number of seconds to wait instead of waiting forever
9596 in target_wait(). If this timer times out, then it generates an error and
9597 the command is aborted. This replaces most of the need for timeouts in the
9598 GDB test suite, and makes it possible to distinguish between a hung target
9599 and one with slow communications. */
9600
9601 static int watchdog = 0;
9602 static void
9603 show_watchdog (struct ui_file *file, int from_tty,
9604 struct cmd_list_element *c, const char *value)
9605 {
9606 fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
9607 }
9608
9609 /* Read a packet from the remote machine, with error checking, and
9610 store it in *BUF. Resize *BUF if necessary to hold the result. If
9611 FOREVER, wait forever rather than timing out; this is used (in
9612 synchronous mode) to wait for a target that is is executing user
9613 code to stop. */
9614 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9615 don't have to change all the calls to getpkt to deal with the
9616 return value, because at the moment I don't know what the right
9617 thing to do it for those. */
9618
9619 void
9620 remote_target::getpkt (gdb::char_vector *buf, int forever)
9621 {
9622 getpkt_sane (buf, forever);
9623 }
9624
9625
9626 /* Read a packet from the remote machine, with error checking, and
9627 store it in *BUF. Resize *BUF if necessary to hold the result. If
9628 FOREVER, wait forever rather than timing out; this is used (in
9629 synchronous mode) to wait for a target that is is executing user
9630 code to stop. If FOREVER == 0, this function is allowed to time
9631 out gracefully and return an indication of this to the caller.
9632 Otherwise return the number of bytes read. If EXPECTING_NOTIF,
9633 consider receiving a notification enough reason to return to the
9634 caller. *IS_NOTIF is an output boolean that indicates whether *BUF
9635 holds a notification or not (a regular packet). */
9636
9637 int
9638 remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
9639 int forever, int expecting_notif,
9640 int *is_notif)
9641 {
9642 struct remote_state *rs = get_remote_state ();
9643 int c;
9644 int tries;
9645 int timeout;
9646 int val = -1;
9647
9648 /* We're reading a new response. Make sure we don't look at a
9649 previously cached response. */
9650 rs->cached_wait_status = 0;
9651
9652 strcpy (buf->data (), "timeout");
9653
9654 if (forever)
9655 timeout = watchdog > 0 ? watchdog : -1;
9656 else if (expecting_notif)
9657 timeout = 0; /* There should already be a char in the buffer. If
9658 not, bail out. */
9659 else
9660 timeout = remote_timeout;
9661
9662 #define MAX_TRIES 3
9663
9664 /* Process any number of notifications, and then return when
9665 we get a packet. */
9666 for (;;)
9667 {
9668 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9669 times. */
9670 for (tries = 1; tries <= MAX_TRIES; tries++)
9671 {
9672 /* This can loop forever if the remote side sends us
9673 characters continuously, but if it pauses, we'll get
9674 SERIAL_TIMEOUT from readchar because of timeout. Then
9675 we'll count that as a retry.
9676
9677 Note that even when forever is set, we will only wait
9678 forever prior to the start of a packet. After that, we
9679 expect characters to arrive at a brisk pace. They should
9680 show up within remote_timeout intervals. */
9681 do
9682 c = readchar (timeout);
9683 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9684
9685 if (c == SERIAL_TIMEOUT)
9686 {
9687 if (expecting_notif)
9688 return -1; /* Don't complain, it's normal to not get
9689 anything in this case. */
9690
9691 if (forever) /* Watchdog went off? Kill the target. */
9692 {
9693 remote_unpush_target (this);
9694 throw_error (TARGET_CLOSE_ERROR,
9695 _("Watchdog timeout has expired. "
9696 "Target detached."));
9697 }
9698 if (remote_debug)
9699 fputs_filtered ("Timed out.\n", gdb_stdlog);
9700 }
9701 else
9702 {
9703 /* We've found the start of a packet or notification.
9704 Now collect the data. */
9705 val = read_frame (buf);
9706 if (val >= 0)
9707 break;
9708 }
9709
9710 remote_serial_write ("-", 1);
9711 }
9712
9713 if (tries > MAX_TRIES)
9714 {
9715 /* We have tried hard enough, and just can't receive the
9716 packet/notification. Give up. */
9717 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9718
9719 /* Skip the ack char if we're in no-ack mode. */
9720 if (!rs->noack_mode)
9721 remote_serial_write ("+", 1);
9722 return -1;
9723 }
9724
9725 /* If we got an ordinary packet, return that to our caller. */
9726 if (c == '$')
9727 {
9728 if (remote_debug)
9729 {
9730 int max_chars;
9731
9732 if (remote_packet_max_chars < 0)
9733 max_chars = val;
9734 else
9735 max_chars = remote_packet_max_chars;
9736
9737 std::string str
9738 = escape_buffer (buf->data (),
9739 std::min (val, max_chars));
9740
9741 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9742 str.c_str ());
9743
9744 if (val > max_chars)
9745 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9746 val - max_chars);
9747
9748 fprintf_unfiltered (gdb_stdlog, "\n");
9749 }
9750
9751 /* Skip the ack char if we're in no-ack mode. */
9752 if (!rs->noack_mode)
9753 remote_serial_write ("+", 1);
9754 if (is_notif != NULL)
9755 *is_notif = 0;
9756 return val;
9757 }
9758
9759 /* If we got a notification, handle it, and go back to looking
9760 for a packet. */
9761 else
9762 {
9763 gdb_assert (c == '%');
9764
9765 if (remote_debug)
9766 {
9767 std::string str = escape_buffer (buf->data (), val);
9768
9769 fprintf_unfiltered (gdb_stdlog,
9770 " Notification received: %s\n",
9771 str.c_str ());
9772 }
9773 if (is_notif != NULL)
9774 *is_notif = 1;
9775
9776 handle_notification (rs->notif_state, buf->data ());
9777
9778 /* Notifications require no acknowledgement. */
9779
9780 if (expecting_notif)
9781 return val;
9782 }
9783 }
9784 }
9785
9786 int
9787 remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
9788 {
9789 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
9790 }
9791
9792 int
9793 remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
9794 int *is_notif)
9795 {
9796 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
9797 }
9798
9799 /* Kill any new fork children of process PID that haven't been
9800 processed by follow_fork. */
9801
9802 void
9803 remote_target::kill_new_fork_children (int pid)
9804 {
9805 remote_state *rs = get_remote_state ();
9806 struct notif_client *notif = &notif_client_stop;
9807
9808 /* Kill the fork child threads of any threads in process PID
9809 that are stopped at a fork event. */
9810 for (thread_info *thread : all_non_exited_threads (this))
9811 {
9812 struct target_waitstatus *ws = &thread->pending_follow;
9813
9814 if (is_pending_fork_parent (ws, pid, thread->ptid))
9815 {
9816 int child_pid = ws->value.related_pid.pid ();
9817 int res;
9818
9819 res = remote_vkill (child_pid);
9820 if (res != 0)
9821 error (_("Can't kill fork child process %d"), child_pid);
9822 }
9823 }
9824
9825 /* Check for any pending fork events (not reported or processed yet)
9826 in process PID and kill those fork child threads as well. */
9827 remote_notif_get_pending_events (notif);
9828 for (auto &event : rs->stop_reply_queue)
9829 if (is_pending_fork_parent (&event->ws, pid, event->ptid))
9830 {
9831 int child_pid = event->ws.value.related_pid.pid ();
9832 int res;
9833
9834 res = remote_vkill (child_pid);
9835 if (res != 0)
9836 error (_("Can't kill fork child process %d"), child_pid);
9837 }
9838 }
9839
9840 \f
9841 /* Target hook to kill the current inferior. */
9842
9843 void
9844 remote_target::kill ()
9845 {
9846 int res = -1;
9847 int pid = inferior_ptid.pid ();
9848 struct remote_state *rs = get_remote_state ();
9849
9850 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9851 {
9852 /* If we're stopped while forking and we haven't followed yet,
9853 kill the child task. We need to do this before killing the
9854 parent task because if this is a vfork then the parent will
9855 be sleeping. */
9856 kill_new_fork_children (pid);
9857
9858 res = remote_vkill (pid);
9859 if (res == 0)
9860 {
9861 target_mourn_inferior (inferior_ptid);
9862 return;
9863 }
9864 }
9865
9866 /* If we are in 'target remote' mode and we are killing the only
9867 inferior, then we will tell gdbserver to exit and unpush the
9868 target. */
9869 if (res == -1 && !remote_multi_process_p (rs)
9870 && number_of_live_inferiors (this) == 1)
9871 {
9872 remote_kill_k ();
9873
9874 /* We've killed the remote end, we get to mourn it. If we are
9875 not in extended mode, mourning the inferior also unpushes
9876 remote_ops from the target stack, which closes the remote
9877 connection. */
9878 target_mourn_inferior (inferior_ptid);
9879
9880 return;
9881 }
9882
9883 error (_("Can't kill process"));
9884 }
9885
9886 /* Send a kill request to the target using the 'vKill' packet. */
9887
9888 int
9889 remote_target::remote_vkill (int pid)
9890 {
9891 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9892 return -1;
9893
9894 remote_state *rs = get_remote_state ();
9895
9896 /* Tell the remote target to detach. */
9897 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
9898 putpkt (rs->buf);
9899 getpkt (&rs->buf, 0);
9900
9901 switch (packet_ok (rs->buf,
9902 &remote_protocol_packets[PACKET_vKill]))
9903 {
9904 case PACKET_OK:
9905 return 0;
9906 case PACKET_ERROR:
9907 return 1;
9908 case PACKET_UNKNOWN:
9909 return -1;
9910 default:
9911 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9912 }
9913 }
9914
9915 /* Send a kill request to the target using the 'k' packet. */
9916
9917 void
9918 remote_target::remote_kill_k ()
9919 {
9920 /* Catch errors so the user can quit from gdb even when we
9921 aren't on speaking terms with the remote system. */
9922 try
9923 {
9924 putpkt ("k");
9925 }
9926 catch (const gdb_exception_error &ex)
9927 {
9928 if (ex.error == TARGET_CLOSE_ERROR)
9929 {
9930 /* If we got an (EOF) error that caused the target
9931 to go away, then we're done, that's what we wanted.
9932 "k" is susceptible to cause a premature EOF, given
9933 that the remote server isn't actually required to
9934 reply to "k", and it can happen that it doesn't
9935 even get to reply ACK to the "k". */
9936 return;
9937 }
9938
9939 /* Otherwise, something went wrong. We didn't actually kill
9940 the target. Just propagate the exception, and let the
9941 user or higher layers decide what to do. */
9942 throw;
9943 }
9944 }
9945
9946 void
9947 remote_target::mourn_inferior ()
9948 {
9949 struct remote_state *rs = get_remote_state ();
9950
9951 /* We're no longer interested in notification events of an inferior
9952 that exited or was killed/detached. */
9953 discard_pending_stop_replies (current_inferior ());
9954
9955 /* In 'target remote' mode with one inferior, we close the connection. */
9956 if (!rs->extended && number_of_live_inferiors (this) <= 1)
9957 {
9958 remote_unpush_target (this);
9959 return;
9960 }
9961
9962 /* In case we got here due to an error, but we're going to stay
9963 connected. */
9964 rs->waiting_for_stop_reply = 0;
9965
9966 /* If the current general thread belonged to the process we just
9967 detached from or has exited, the remote side current general
9968 thread becomes undefined. Considering a case like this:
9969
9970 - We just got here due to a detach.
9971 - The process that we're detaching from happens to immediately
9972 report a global breakpoint being hit in non-stop mode, in the
9973 same thread we had selected before.
9974 - GDB attaches to this process again.
9975 - This event happens to be the next event we handle.
9976
9977 GDB would consider that the current general thread didn't need to
9978 be set on the stub side (with Hg), since for all it knew,
9979 GENERAL_THREAD hadn't changed.
9980
9981 Notice that although in all-stop mode, the remote server always
9982 sets the current thread to the thread reporting the stop event,
9983 that doesn't happen in non-stop mode; in non-stop, the stub *must
9984 not* change the current thread when reporting a breakpoint hit,
9985 due to the decoupling of event reporting and event handling.
9986
9987 To keep things simple, we always invalidate our notion of the
9988 current thread. */
9989 record_currthread (rs, minus_one_ptid);
9990
9991 /* Call common code to mark the inferior as not running. */
9992 generic_mourn_inferior ();
9993 }
9994
9995 bool
9996 extended_remote_target::supports_disable_randomization ()
9997 {
9998 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9999 }
10000
10001 void
10002 remote_target::extended_remote_disable_randomization (int val)
10003 {
10004 struct remote_state *rs = get_remote_state ();
10005 char *reply;
10006
10007 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10008 "QDisableRandomization:%x", val);
10009 putpkt (rs->buf);
10010 reply = remote_get_noisy_reply ();
10011 if (*reply == '\0')
10012 error (_("Target does not support QDisableRandomization."));
10013 if (strcmp (reply, "OK") != 0)
10014 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
10015 }
10016
10017 int
10018 remote_target::extended_remote_run (const std::string &args)
10019 {
10020 struct remote_state *rs = get_remote_state ();
10021 int len;
10022 const char *remote_exec_file = get_remote_exec_file ();
10023
10024 /* If the user has disabled vRun support, or we have detected that
10025 support is not available, do not try it. */
10026 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
10027 return -1;
10028
10029 strcpy (rs->buf.data (), "vRun;");
10030 len = strlen (rs->buf.data ());
10031
10032 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
10033 error (_("Remote file name too long for run packet"));
10034 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
10035 strlen (remote_exec_file));
10036
10037 if (!args.empty ())
10038 {
10039 int i;
10040
10041 gdb_argv argv (args.c_str ());
10042 for (i = 0; argv[i] != NULL; i++)
10043 {
10044 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
10045 error (_("Argument list too long for run packet"));
10046 rs->buf[len++] = ';';
10047 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
10048 strlen (argv[i]));
10049 }
10050 }
10051
10052 rs->buf[len++] = '\0';
10053
10054 putpkt (rs->buf);
10055 getpkt (&rs->buf, 0);
10056
10057 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
10058 {
10059 case PACKET_OK:
10060 /* We have a wait response. All is well. */
10061 return 0;
10062 case PACKET_UNKNOWN:
10063 return -1;
10064 case PACKET_ERROR:
10065 if (remote_exec_file[0] == '\0')
10066 error (_("Running the default executable on the remote target failed; "
10067 "try \"set remote exec-file\"?"));
10068 else
10069 error (_("Running \"%s\" on the remote target failed"),
10070 remote_exec_file);
10071 default:
10072 gdb_assert_not_reached (_("bad switch"));
10073 }
10074 }
10075
10076 /* Helper function to send set/unset environment packets. ACTION is
10077 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
10078 or "QEnvironmentUnsetVariable". VALUE is the variable to be
10079 sent. */
10080
10081 void
10082 remote_target::send_environment_packet (const char *action,
10083 const char *packet,
10084 const char *value)
10085 {
10086 remote_state *rs = get_remote_state ();
10087
10088 /* Convert the environment variable to an hex string, which
10089 is the best format to be transmitted over the wire. */
10090 std::string encoded_value = bin2hex ((const gdb_byte *) value,
10091 strlen (value));
10092
10093 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10094 "%s:%s", packet, encoded_value.c_str ());
10095
10096 putpkt (rs->buf);
10097 getpkt (&rs->buf, 0);
10098 if (strcmp (rs->buf.data (), "OK") != 0)
10099 warning (_("Unable to %s environment variable '%s' on remote."),
10100 action, value);
10101 }
10102
10103 /* Helper function to handle the QEnvironment* packets. */
10104
10105 void
10106 remote_target::extended_remote_environment_support ()
10107 {
10108 remote_state *rs = get_remote_state ();
10109
10110 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10111 {
10112 putpkt ("QEnvironmentReset");
10113 getpkt (&rs->buf, 0);
10114 if (strcmp (rs->buf.data (), "OK") != 0)
10115 warning (_("Unable to reset environment on remote."));
10116 }
10117
10118 gdb_environ *e = &current_inferior ()->environment;
10119
10120 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10121 for (const std::string &el : e->user_set_env ())
10122 send_environment_packet ("set", "QEnvironmentHexEncoded",
10123 el.c_str ());
10124
10125 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10126 for (const std::string &el : e->user_unset_env ())
10127 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
10128 }
10129
10130 /* Helper function to set the current working directory for the
10131 inferior in the remote target. */
10132
10133 void
10134 remote_target::extended_remote_set_inferior_cwd ()
10135 {
10136 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10137 {
10138 const char *inferior_cwd = get_inferior_cwd ();
10139 remote_state *rs = get_remote_state ();
10140
10141 if (inferior_cwd != NULL)
10142 {
10143 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10144 strlen (inferior_cwd));
10145
10146 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10147 "QSetWorkingDir:%s", hexpath.c_str ());
10148 }
10149 else
10150 {
10151 /* An empty inferior_cwd means that the user wants us to
10152 reset the remote server's inferior's cwd. */
10153 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10154 "QSetWorkingDir:");
10155 }
10156
10157 putpkt (rs->buf);
10158 getpkt (&rs->buf, 0);
10159 if (packet_ok (rs->buf,
10160 &remote_protocol_packets[PACKET_QSetWorkingDir])
10161 != PACKET_OK)
10162 error (_("\
10163 Remote replied unexpectedly while setting the inferior's working\n\
10164 directory: %s"),
10165 rs->buf.data ());
10166
10167 }
10168 }
10169
10170 /* In the extended protocol we want to be able to do things like
10171 "run" and have them basically work as expected. So we need
10172 a special create_inferior function. We support changing the
10173 executable file and the command line arguments, but not the
10174 environment. */
10175
10176 void
10177 extended_remote_target::create_inferior (const char *exec_file,
10178 const std::string &args,
10179 char **env, int from_tty)
10180 {
10181 int run_worked;
10182 char *stop_reply;
10183 struct remote_state *rs = get_remote_state ();
10184 const char *remote_exec_file = get_remote_exec_file ();
10185
10186 /* If running asynchronously, register the target file descriptor
10187 with the event loop. */
10188 if (target_can_async_p ())
10189 target_async (1);
10190
10191 /* Disable address space randomization if requested (and supported). */
10192 if (supports_disable_randomization ())
10193 extended_remote_disable_randomization (disable_randomization);
10194
10195 /* If startup-with-shell is on, we inform gdbserver to start the
10196 remote inferior using a shell. */
10197 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10198 {
10199 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10200 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10201 putpkt (rs->buf);
10202 getpkt (&rs->buf, 0);
10203 if (strcmp (rs->buf.data (), "OK") != 0)
10204 error (_("\
10205 Remote replied unexpectedly while setting startup-with-shell: %s"),
10206 rs->buf.data ());
10207 }
10208
10209 extended_remote_environment_support ();
10210
10211 extended_remote_set_inferior_cwd ();
10212
10213 /* Now restart the remote server. */
10214 run_worked = extended_remote_run (args) != -1;
10215 if (!run_worked)
10216 {
10217 /* vRun was not supported. Fail if we need it to do what the
10218 user requested. */
10219 if (remote_exec_file[0])
10220 error (_("Remote target does not support \"set remote exec-file\""));
10221 if (!args.empty ())
10222 error (_("Remote target does not support \"set args\" or run ARGS"));
10223
10224 /* Fall back to "R". */
10225 extended_remote_restart ();
10226 }
10227
10228 /* vRun's success return is a stop reply. */
10229 stop_reply = run_worked ? rs->buf.data () : NULL;
10230 add_current_inferior_and_thread (stop_reply);
10231
10232 /* Get updated offsets, if the stub uses qOffsets. */
10233 get_offsets ();
10234 }
10235 \f
10236
10237 /* Given a location's target info BP_TGT and the packet buffer BUF, output
10238 the list of conditions (in agent expression bytecode format), if any, the
10239 target needs to evaluate. The output is placed into the packet buffer
10240 started from BUF and ended at BUF_END. */
10241
10242 static int
10243 remote_add_target_side_condition (struct gdbarch *gdbarch,
10244 struct bp_target_info *bp_tgt, char *buf,
10245 char *buf_end)
10246 {
10247 if (bp_tgt->conditions.empty ())
10248 return 0;
10249
10250 buf += strlen (buf);
10251 xsnprintf (buf, buf_end - buf, "%s", ";");
10252 buf++;
10253
10254 /* Send conditions to the target. */
10255 for (agent_expr *aexpr : bp_tgt->conditions)
10256 {
10257 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
10258 buf += strlen (buf);
10259 for (int i = 0; i < aexpr->len; ++i)
10260 buf = pack_hex_byte (buf, aexpr->buf[i]);
10261 *buf = '\0';
10262 }
10263 return 0;
10264 }
10265
10266 static void
10267 remote_add_target_side_commands (struct gdbarch *gdbarch,
10268 struct bp_target_info *bp_tgt, char *buf)
10269 {
10270 if (bp_tgt->tcommands.empty ())
10271 return;
10272
10273 buf += strlen (buf);
10274
10275 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10276 buf += strlen (buf);
10277
10278 /* Concatenate all the agent expressions that are commands into the
10279 cmds parameter. */
10280 for (agent_expr *aexpr : bp_tgt->tcommands)
10281 {
10282 sprintf (buf, "X%x,", aexpr->len);
10283 buf += strlen (buf);
10284 for (int i = 0; i < aexpr->len; ++i)
10285 buf = pack_hex_byte (buf, aexpr->buf[i]);
10286 *buf = '\0';
10287 }
10288 }
10289
10290 /* Insert a breakpoint. On targets that have software breakpoint
10291 support, we ask the remote target to do the work; on targets
10292 which don't, we insert a traditional memory breakpoint. */
10293
10294 int
10295 remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10296 struct bp_target_info *bp_tgt)
10297 {
10298 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10299 If it succeeds, then set the support to PACKET_ENABLE. If it
10300 fails, and the user has explicitly requested the Z support then
10301 report an error, otherwise, mark it disabled and go on. */
10302
10303 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10304 {
10305 CORE_ADDR addr = bp_tgt->reqstd_address;
10306 struct remote_state *rs;
10307 char *p, *endbuf;
10308
10309 /* Make sure the remote is pointing at the right process, if
10310 necessary. */
10311 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10312 set_general_process ();
10313
10314 rs = get_remote_state ();
10315 p = rs->buf.data ();
10316 endbuf = p + get_remote_packet_size ();
10317
10318 *(p++) = 'Z';
10319 *(p++) = '0';
10320 *(p++) = ',';
10321 addr = (ULONGEST) remote_address_masked (addr);
10322 p += hexnumstr (p, addr);
10323 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10324
10325 if (supports_evaluation_of_breakpoint_conditions ())
10326 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10327
10328 if (can_run_breakpoint_commands ())
10329 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10330
10331 putpkt (rs->buf);
10332 getpkt (&rs->buf, 0);
10333
10334 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
10335 {
10336 case PACKET_ERROR:
10337 return -1;
10338 case PACKET_OK:
10339 return 0;
10340 case PACKET_UNKNOWN:
10341 break;
10342 }
10343 }
10344
10345 /* If this breakpoint has target-side commands but this stub doesn't
10346 support Z0 packets, throw error. */
10347 if (!bp_tgt->tcommands.empty ())
10348 throw_error (NOT_SUPPORTED_ERROR, _("\
10349 Target doesn't support breakpoints that have target side commands."));
10350
10351 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
10352 }
10353
10354 int
10355 remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10356 struct bp_target_info *bp_tgt,
10357 enum remove_bp_reason reason)
10358 {
10359 CORE_ADDR addr = bp_tgt->placed_address;
10360 struct remote_state *rs = get_remote_state ();
10361
10362 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10363 {
10364 char *p = rs->buf.data ();
10365 char *endbuf = p + get_remote_packet_size ();
10366
10367 /* Make sure the remote is pointing at the right process, if
10368 necessary. */
10369 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10370 set_general_process ();
10371
10372 *(p++) = 'z';
10373 *(p++) = '0';
10374 *(p++) = ',';
10375
10376 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10377 p += hexnumstr (p, addr);
10378 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10379
10380 putpkt (rs->buf);
10381 getpkt (&rs->buf, 0);
10382
10383 return (rs->buf[0] == 'E');
10384 }
10385
10386 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
10387 }
10388
10389 static enum Z_packet_type
10390 watchpoint_to_Z_packet (int type)
10391 {
10392 switch (type)
10393 {
10394 case hw_write:
10395 return Z_PACKET_WRITE_WP;
10396 break;
10397 case hw_read:
10398 return Z_PACKET_READ_WP;
10399 break;
10400 case hw_access:
10401 return Z_PACKET_ACCESS_WP;
10402 break;
10403 default:
10404 internal_error (__FILE__, __LINE__,
10405 _("hw_bp_to_z: bad watchpoint type %d"), type);
10406 }
10407 }
10408
10409 int
10410 remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10411 enum target_hw_bp_type type, struct expression *cond)
10412 {
10413 struct remote_state *rs = get_remote_state ();
10414 char *endbuf = rs->buf.data () + get_remote_packet_size ();
10415 char *p;
10416 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10417
10418 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10419 return 1;
10420
10421 /* Make sure the remote is pointing at the right process, if
10422 necessary. */
10423 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10424 set_general_process ();
10425
10426 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10427 p = strchr (rs->buf.data (), '\0');
10428 addr = remote_address_masked (addr);
10429 p += hexnumstr (p, (ULONGEST) addr);
10430 xsnprintf (p, endbuf - p, ",%x", len);
10431
10432 putpkt (rs->buf);
10433 getpkt (&rs->buf, 0);
10434
10435 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10436 {
10437 case PACKET_ERROR:
10438 return -1;
10439 case PACKET_UNKNOWN:
10440 return 1;
10441 case PACKET_OK:
10442 return 0;
10443 }
10444 internal_error (__FILE__, __LINE__,
10445 _("remote_insert_watchpoint: reached end of function"));
10446 }
10447
10448 bool
10449 remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10450 CORE_ADDR start, int length)
10451 {
10452 CORE_ADDR diff = remote_address_masked (addr - start);
10453
10454 return diff < length;
10455 }
10456
10457
10458 int
10459 remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10460 enum target_hw_bp_type type, struct expression *cond)
10461 {
10462 struct remote_state *rs = get_remote_state ();
10463 char *endbuf = rs->buf.data () + get_remote_packet_size ();
10464 char *p;
10465 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10466
10467 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10468 return -1;
10469
10470 /* Make sure the remote is pointing at the right process, if
10471 necessary. */
10472 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10473 set_general_process ();
10474
10475 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10476 p = strchr (rs->buf.data (), '\0');
10477 addr = remote_address_masked (addr);
10478 p += hexnumstr (p, (ULONGEST) addr);
10479 xsnprintf (p, endbuf - p, ",%x", len);
10480 putpkt (rs->buf);
10481 getpkt (&rs->buf, 0);
10482
10483 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10484 {
10485 case PACKET_ERROR:
10486 case PACKET_UNKNOWN:
10487 return -1;
10488 case PACKET_OK:
10489 return 0;
10490 }
10491 internal_error (__FILE__, __LINE__,
10492 _("remote_remove_watchpoint: reached end of function"));
10493 }
10494
10495
10496 static int remote_hw_watchpoint_limit = -1;
10497 static int remote_hw_watchpoint_length_limit = -1;
10498 static int remote_hw_breakpoint_limit = -1;
10499
10500 int
10501 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
10502 {
10503 if (remote_hw_watchpoint_length_limit == 0)
10504 return 0;
10505 else if (remote_hw_watchpoint_length_limit < 0)
10506 return 1;
10507 else if (len <= remote_hw_watchpoint_length_limit)
10508 return 1;
10509 else
10510 return 0;
10511 }
10512
10513 int
10514 remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
10515 {
10516 if (type == bp_hardware_breakpoint)
10517 {
10518 if (remote_hw_breakpoint_limit == 0)
10519 return 0;
10520 else if (remote_hw_breakpoint_limit < 0)
10521 return 1;
10522 else if (cnt <= remote_hw_breakpoint_limit)
10523 return 1;
10524 }
10525 else
10526 {
10527 if (remote_hw_watchpoint_limit == 0)
10528 return 0;
10529 else if (remote_hw_watchpoint_limit < 0)
10530 return 1;
10531 else if (ot)
10532 return -1;
10533 else if (cnt <= remote_hw_watchpoint_limit)
10534 return 1;
10535 }
10536 return -1;
10537 }
10538
10539 /* The to_stopped_by_sw_breakpoint method of target remote. */
10540
10541 bool
10542 remote_target::stopped_by_sw_breakpoint ()
10543 {
10544 struct thread_info *thread = inferior_thread ();
10545
10546 return (thread->priv != NULL
10547 && (get_remote_thread_info (thread)->stop_reason
10548 == TARGET_STOPPED_BY_SW_BREAKPOINT));
10549 }
10550
10551 /* The to_supports_stopped_by_sw_breakpoint method of target
10552 remote. */
10553
10554 bool
10555 remote_target::supports_stopped_by_sw_breakpoint ()
10556 {
10557 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10558 }
10559
10560 /* The to_stopped_by_hw_breakpoint method of target remote. */
10561
10562 bool
10563 remote_target::stopped_by_hw_breakpoint ()
10564 {
10565 struct thread_info *thread = inferior_thread ();
10566
10567 return (thread->priv != NULL
10568 && (get_remote_thread_info (thread)->stop_reason
10569 == TARGET_STOPPED_BY_HW_BREAKPOINT));
10570 }
10571
10572 /* The to_supports_stopped_by_hw_breakpoint method of target
10573 remote. */
10574
10575 bool
10576 remote_target::supports_stopped_by_hw_breakpoint ()
10577 {
10578 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10579 }
10580
10581 bool
10582 remote_target::stopped_by_watchpoint ()
10583 {
10584 struct thread_info *thread = inferior_thread ();
10585
10586 return (thread->priv != NULL
10587 && (get_remote_thread_info (thread)->stop_reason
10588 == TARGET_STOPPED_BY_WATCHPOINT));
10589 }
10590
10591 bool
10592 remote_target::stopped_data_address (CORE_ADDR *addr_p)
10593 {
10594 struct thread_info *thread = inferior_thread ();
10595
10596 if (thread->priv != NULL
10597 && (get_remote_thread_info (thread)->stop_reason
10598 == TARGET_STOPPED_BY_WATCHPOINT))
10599 {
10600 *addr_p = get_remote_thread_info (thread)->watch_data_address;
10601 return true;
10602 }
10603
10604 return false;
10605 }
10606
10607
10608 int
10609 remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10610 struct bp_target_info *bp_tgt)
10611 {
10612 CORE_ADDR addr = bp_tgt->reqstd_address;
10613 struct remote_state *rs;
10614 char *p, *endbuf;
10615 char *message;
10616
10617 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10618 return -1;
10619
10620 /* Make sure the remote is pointing at the right process, if
10621 necessary. */
10622 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10623 set_general_process ();
10624
10625 rs = get_remote_state ();
10626 p = rs->buf.data ();
10627 endbuf = p + get_remote_packet_size ();
10628
10629 *(p++) = 'Z';
10630 *(p++) = '1';
10631 *(p++) = ',';
10632
10633 addr = remote_address_masked (addr);
10634 p += hexnumstr (p, (ULONGEST) addr);
10635 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10636
10637 if (supports_evaluation_of_breakpoint_conditions ())
10638 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10639
10640 if (can_run_breakpoint_commands ())
10641 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10642
10643 putpkt (rs->buf);
10644 getpkt (&rs->buf, 0);
10645
10646 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10647 {
10648 case PACKET_ERROR:
10649 if (rs->buf[1] == '.')
10650 {
10651 message = strchr (&rs->buf[2], '.');
10652 if (message)
10653 error (_("Remote failure reply: %s"), message + 1);
10654 }
10655 return -1;
10656 case PACKET_UNKNOWN:
10657 return -1;
10658 case PACKET_OK:
10659 return 0;
10660 }
10661 internal_error (__FILE__, __LINE__,
10662 _("remote_insert_hw_breakpoint: reached end of function"));
10663 }
10664
10665
10666 int
10667 remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10668 struct bp_target_info *bp_tgt)
10669 {
10670 CORE_ADDR addr;
10671 struct remote_state *rs = get_remote_state ();
10672 char *p = rs->buf.data ();
10673 char *endbuf = p + get_remote_packet_size ();
10674
10675 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10676 return -1;
10677
10678 /* Make sure the remote is pointing at the right process, if
10679 necessary. */
10680 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10681 set_general_process ();
10682
10683 *(p++) = 'z';
10684 *(p++) = '1';
10685 *(p++) = ',';
10686
10687 addr = remote_address_masked (bp_tgt->placed_address);
10688 p += hexnumstr (p, (ULONGEST) addr);
10689 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10690
10691 putpkt (rs->buf);
10692 getpkt (&rs->buf, 0);
10693
10694 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10695 {
10696 case PACKET_ERROR:
10697 case PACKET_UNKNOWN:
10698 return -1;
10699 case PACKET_OK:
10700 return 0;
10701 }
10702 internal_error (__FILE__, __LINE__,
10703 _("remote_remove_hw_breakpoint: reached end of function"));
10704 }
10705
10706 /* Verify memory using the "qCRC:" request. */
10707
10708 int
10709 remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10710 {
10711 struct remote_state *rs = get_remote_state ();
10712 unsigned long host_crc, target_crc;
10713 char *tmp;
10714
10715 /* It doesn't make sense to use qCRC if the remote target is
10716 connected but not running. */
10717 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10718 {
10719 enum packet_result result;
10720
10721 /* Make sure the remote is pointing at the right process. */
10722 set_general_process ();
10723
10724 /* FIXME: assumes lma can fit into long. */
10725 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
10726 (long) lma, (long) size);
10727 putpkt (rs->buf);
10728
10729 /* Be clever; compute the host_crc before waiting for target
10730 reply. */
10731 host_crc = xcrc32 (data, size, 0xffffffff);
10732
10733 getpkt (&rs->buf, 0);
10734
10735 result = packet_ok (rs->buf,
10736 &remote_protocol_packets[PACKET_qCRC]);
10737 if (result == PACKET_ERROR)
10738 return -1;
10739 else if (result == PACKET_OK)
10740 {
10741 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10742 target_crc = target_crc * 16 + fromhex (*tmp);
10743
10744 return (host_crc == target_crc);
10745 }
10746 }
10747
10748 return simple_verify_memory (this, data, lma, size);
10749 }
10750
10751 /* compare-sections command
10752
10753 With no arguments, compares each loadable section in the exec bfd
10754 with the same memory range on the target, and reports mismatches.
10755 Useful for verifying the image on the target against the exec file. */
10756
10757 static void
10758 compare_sections_command (const char *args, int from_tty)
10759 {
10760 asection *s;
10761 const char *sectname;
10762 bfd_size_type size;
10763 bfd_vma lma;
10764 int matched = 0;
10765 int mismatched = 0;
10766 int res;
10767 int read_only = 0;
10768
10769 if (!exec_bfd)
10770 error (_("command cannot be used without an exec file"));
10771
10772 if (args != NULL && strcmp (args, "-r") == 0)
10773 {
10774 read_only = 1;
10775 args = NULL;
10776 }
10777
10778 for (s = exec_bfd->sections; s; s = s->next)
10779 {
10780 if (!(s->flags & SEC_LOAD))
10781 continue; /* Skip non-loadable section. */
10782
10783 if (read_only && (s->flags & SEC_READONLY) == 0)
10784 continue; /* Skip writeable sections */
10785
10786 size = bfd_section_size (s);
10787 if (size == 0)
10788 continue; /* Skip zero-length section. */
10789
10790 sectname = bfd_section_name (s);
10791 if (args && strcmp (args, sectname) != 0)
10792 continue; /* Not the section selected by user. */
10793
10794 matched = 1; /* Do this section. */
10795 lma = s->lma;
10796
10797 gdb::byte_vector sectdata (size);
10798 bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10799
10800 res = target_verify_memory (sectdata.data (), lma, size);
10801
10802 if (res == -1)
10803 error (_("target memory fault, section %s, range %s -- %s"), sectname,
10804 paddress (target_gdbarch (), lma),
10805 paddress (target_gdbarch (), lma + size));
10806
10807 printf_filtered ("Section %s, range %s -- %s: ", sectname,
10808 paddress (target_gdbarch (), lma),
10809 paddress (target_gdbarch (), lma + size));
10810 if (res)
10811 printf_filtered ("matched.\n");
10812 else
10813 {
10814 printf_filtered ("MIS-MATCHED!\n");
10815 mismatched++;
10816 }
10817 }
10818 if (mismatched > 0)
10819 warning (_("One or more sections of the target image does not match\n\
10820 the loaded file\n"));
10821 if (args && !matched)
10822 printf_filtered (_("No loaded section named '%s'.\n"), args);
10823 }
10824
10825 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10826 into remote target. The number of bytes written to the remote
10827 target is returned, or -1 for error. */
10828
10829 target_xfer_status
10830 remote_target::remote_write_qxfer (const char *object_name,
10831 const char *annex, const gdb_byte *writebuf,
10832 ULONGEST offset, LONGEST len,
10833 ULONGEST *xfered_len,
10834 struct packet_config *packet)
10835 {
10836 int i, buf_len;
10837 ULONGEST n;
10838 struct remote_state *rs = get_remote_state ();
10839 int max_size = get_memory_write_packet_size ();
10840
10841 if (packet_config_support (packet) == PACKET_DISABLE)
10842 return TARGET_XFER_E_IO;
10843
10844 /* Insert header. */
10845 i = snprintf (rs->buf.data (), max_size,
10846 "qXfer:%s:write:%s:%s:",
10847 object_name, annex ? annex : "",
10848 phex_nz (offset, sizeof offset));
10849 max_size -= (i + 1);
10850
10851 /* Escape as much data as fits into rs->buf. */
10852 buf_len = remote_escape_output
10853 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
10854
10855 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
10856 || getpkt_sane (&rs->buf, 0) < 0
10857 || packet_ok (rs->buf, packet) != PACKET_OK)
10858 return TARGET_XFER_E_IO;
10859
10860 unpack_varlen_hex (rs->buf.data (), &n);
10861
10862 *xfered_len = n;
10863 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10864 }
10865
10866 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10867 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10868 number of bytes read is returned, or 0 for EOF, or -1 for error.
10869 The number of bytes read may be less than LEN without indicating an
10870 EOF. PACKET is checked and updated to indicate whether the remote
10871 target supports this object. */
10872
10873 target_xfer_status
10874 remote_target::remote_read_qxfer (const char *object_name,
10875 const char *annex,
10876 gdb_byte *readbuf, ULONGEST offset,
10877 LONGEST len,
10878 ULONGEST *xfered_len,
10879 struct packet_config *packet)
10880 {
10881 struct remote_state *rs = get_remote_state ();
10882 LONGEST i, n, packet_len;
10883
10884 if (packet_config_support (packet) == PACKET_DISABLE)
10885 return TARGET_XFER_E_IO;
10886
10887 /* Check whether we've cached an end-of-object packet that matches
10888 this request. */
10889 if (rs->finished_object)
10890 {
10891 if (strcmp (object_name, rs->finished_object) == 0
10892 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10893 && offset == rs->finished_offset)
10894 return TARGET_XFER_EOF;
10895
10896
10897 /* Otherwise, we're now reading something different. Discard
10898 the cache. */
10899 xfree (rs->finished_object);
10900 xfree (rs->finished_annex);
10901 rs->finished_object = NULL;
10902 rs->finished_annex = NULL;
10903 }
10904
10905 /* Request only enough to fit in a single packet. The actual data
10906 may not, since we don't know how much of it will need to be escaped;
10907 the target is free to respond with slightly less data. We subtract
10908 five to account for the response type and the protocol frame. */
10909 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10910 snprintf (rs->buf.data (), get_remote_packet_size () - 4,
10911 "qXfer:%s:read:%s:%s,%s",
10912 object_name, annex ? annex : "",
10913 phex_nz (offset, sizeof offset),
10914 phex_nz (n, sizeof n));
10915 i = putpkt (rs->buf);
10916 if (i < 0)
10917 return TARGET_XFER_E_IO;
10918
10919 rs->buf[0] = '\0';
10920 packet_len = getpkt_sane (&rs->buf, 0);
10921 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10922 return TARGET_XFER_E_IO;
10923
10924 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10925 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
10926
10927 /* 'm' means there is (or at least might be) more data after this
10928 batch. That does not make sense unless there's at least one byte
10929 of data in this reply. */
10930 if (rs->buf[0] == 'm' && packet_len == 1)
10931 error (_("Remote qXfer reply contained no data."));
10932
10933 /* Got some data. */
10934 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
10935 packet_len - 1, readbuf, n);
10936
10937 /* 'l' is an EOF marker, possibly including a final block of data,
10938 or possibly empty. If we have the final block of a non-empty
10939 object, record this fact to bypass a subsequent partial read. */
10940 if (rs->buf[0] == 'l' && offset + i > 0)
10941 {
10942 rs->finished_object = xstrdup (object_name);
10943 rs->finished_annex = xstrdup (annex ? annex : "");
10944 rs->finished_offset = offset + i;
10945 }
10946
10947 if (i == 0)
10948 return TARGET_XFER_EOF;
10949 else
10950 {
10951 *xfered_len = i;
10952 return TARGET_XFER_OK;
10953 }
10954 }
10955
10956 enum target_xfer_status
10957 remote_target::xfer_partial (enum target_object object,
10958 const char *annex, gdb_byte *readbuf,
10959 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10960 ULONGEST *xfered_len)
10961 {
10962 struct remote_state *rs;
10963 int i;
10964 char *p2;
10965 char query_type;
10966 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10967
10968 set_remote_traceframe ();
10969 set_general_thread (inferior_ptid);
10970
10971 rs = get_remote_state ();
10972
10973 /* Handle memory using the standard memory routines. */
10974 if (object == TARGET_OBJECT_MEMORY)
10975 {
10976 /* If the remote target is connected but not running, we should
10977 pass this request down to a lower stratum (e.g. the executable
10978 file). */
10979 if (!target_has_execution)
10980 return TARGET_XFER_EOF;
10981
10982 if (writebuf != NULL)
10983 return remote_write_bytes (offset, writebuf, len, unit_size,
10984 xfered_len);
10985 else
10986 return remote_read_bytes (offset, readbuf, len, unit_size,
10987 xfered_len);
10988 }
10989
10990 /* Handle extra signal info using qxfer packets. */
10991 if (object == TARGET_OBJECT_SIGNAL_INFO)
10992 {
10993 if (readbuf)
10994 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
10995 xfered_len, &remote_protocol_packets
10996 [PACKET_qXfer_siginfo_read]);
10997 else
10998 return remote_write_qxfer ("siginfo", annex,
10999 writebuf, offset, len, xfered_len,
11000 &remote_protocol_packets
11001 [PACKET_qXfer_siginfo_write]);
11002 }
11003
11004 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
11005 {
11006 if (readbuf)
11007 return remote_read_qxfer ("statictrace", annex,
11008 readbuf, offset, len, xfered_len,
11009 &remote_protocol_packets
11010 [PACKET_qXfer_statictrace_read]);
11011 else
11012 return TARGET_XFER_E_IO;
11013 }
11014
11015 /* Only handle flash writes. */
11016 if (writebuf != NULL)
11017 {
11018 switch (object)
11019 {
11020 case TARGET_OBJECT_FLASH:
11021 return remote_flash_write (offset, len, xfered_len,
11022 writebuf);
11023
11024 default:
11025 return TARGET_XFER_E_IO;
11026 }
11027 }
11028
11029 /* Map pre-existing objects onto letters. DO NOT do this for new
11030 objects!!! Instead specify new query packets. */
11031 switch (object)
11032 {
11033 case TARGET_OBJECT_AVR:
11034 query_type = 'R';
11035 break;
11036
11037 case TARGET_OBJECT_AUXV:
11038 gdb_assert (annex == NULL);
11039 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
11040 xfered_len,
11041 &remote_protocol_packets[PACKET_qXfer_auxv]);
11042
11043 case TARGET_OBJECT_AVAILABLE_FEATURES:
11044 return remote_read_qxfer
11045 ("features", annex, readbuf, offset, len, xfered_len,
11046 &remote_protocol_packets[PACKET_qXfer_features]);
11047
11048 case TARGET_OBJECT_LIBRARIES:
11049 return remote_read_qxfer
11050 ("libraries", annex, readbuf, offset, len, xfered_len,
11051 &remote_protocol_packets[PACKET_qXfer_libraries]);
11052
11053 case TARGET_OBJECT_LIBRARIES_SVR4:
11054 return remote_read_qxfer
11055 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
11056 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
11057
11058 case TARGET_OBJECT_MEMORY_MAP:
11059 gdb_assert (annex == NULL);
11060 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
11061 xfered_len,
11062 &remote_protocol_packets[PACKET_qXfer_memory_map]);
11063
11064 case TARGET_OBJECT_OSDATA:
11065 /* Should only get here if we're connected. */
11066 gdb_assert (rs->remote_desc);
11067 return remote_read_qxfer
11068 ("osdata", annex, readbuf, offset, len, xfered_len,
11069 &remote_protocol_packets[PACKET_qXfer_osdata]);
11070
11071 case TARGET_OBJECT_THREADS:
11072 gdb_assert (annex == NULL);
11073 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
11074 xfered_len,
11075 &remote_protocol_packets[PACKET_qXfer_threads]);
11076
11077 case TARGET_OBJECT_TRACEFRAME_INFO:
11078 gdb_assert (annex == NULL);
11079 return remote_read_qxfer
11080 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
11081 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
11082
11083 case TARGET_OBJECT_FDPIC:
11084 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
11085 xfered_len,
11086 &remote_protocol_packets[PACKET_qXfer_fdpic]);
11087
11088 case TARGET_OBJECT_OPENVMS_UIB:
11089 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
11090 xfered_len,
11091 &remote_protocol_packets[PACKET_qXfer_uib]);
11092
11093 case TARGET_OBJECT_BTRACE:
11094 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
11095 xfered_len,
11096 &remote_protocol_packets[PACKET_qXfer_btrace]);
11097
11098 case TARGET_OBJECT_BTRACE_CONF:
11099 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
11100 len, xfered_len,
11101 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11102
11103 case TARGET_OBJECT_EXEC_FILE:
11104 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
11105 len, xfered_len,
11106 &remote_protocol_packets[PACKET_qXfer_exec_file]);
11107
11108 default:
11109 return TARGET_XFER_E_IO;
11110 }
11111
11112 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
11113 large enough let the caller deal with it. */
11114 if (len < get_remote_packet_size ())
11115 return TARGET_XFER_E_IO;
11116 len = get_remote_packet_size ();
11117
11118 /* Except for querying the minimum buffer size, target must be open. */
11119 if (!rs->remote_desc)
11120 error (_("remote query is only available after target open"));
11121
11122 gdb_assert (annex != NULL);
11123 gdb_assert (readbuf != NULL);
11124
11125 p2 = rs->buf.data ();
11126 *p2++ = 'q';
11127 *p2++ = query_type;
11128
11129 /* We used one buffer char for the remote protocol q command and
11130 another for the query type. As the remote protocol encapsulation
11131 uses 4 chars plus one extra in case we are debugging
11132 (remote_debug), we have PBUFZIZ - 7 left to pack the query
11133 string. */
11134 i = 0;
11135 while (annex[i] && (i < (get_remote_packet_size () - 8)))
11136 {
11137 /* Bad caller may have sent forbidden characters. */
11138 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11139 *p2++ = annex[i];
11140 i++;
11141 }
11142 *p2 = '\0';
11143 gdb_assert (annex[i] == '\0');
11144
11145 i = putpkt (rs->buf);
11146 if (i < 0)
11147 return TARGET_XFER_E_IO;
11148
11149 getpkt (&rs->buf, 0);
11150 strcpy ((char *) readbuf, rs->buf.data ());
11151
11152 *xfered_len = strlen ((char *) readbuf);
11153 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11154 }
11155
11156 /* Implementation of to_get_memory_xfer_limit. */
11157
11158 ULONGEST
11159 remote_target::get_memory_xfer_limit ()
11160 {
11161 return get_memory_write_packet_size ();
11162 }
11163
11164 int
11165 remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11166 const gdb_byte *pattern, ULONGEST pattern_len,
11167 CORE_ADDR *found_addrp)
11168 {
11169 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
11170 struct remote_state *rs = get_remote_state ();
11171 int max_size = get_memory_write_packet_size ();
11172 struct packet_config *packet =
11173 &remote_protocol_packets[PACKET_qSearch_memory];
11174 /* Number of packet bytes used to encode the pattern;
11175 this could be more than PATTERN_LEN due to escape characters. */
11176 int escaped_pattern_len;
11177 /* Amount of pattern that was encodable in the packet. */
11178 int used_pattern_len;
11179 int i;
11180 int found;
11181 ULONGEST found_addr;
11182
11183 /* Don't go to the target if we don't have to. This is done before
11184 checking packet_config_support to avoid the possibility that a
11185 success for this edge case means the facility works in
11186 general. */
11187 if (pattern_len > search_space_len)
11188 return 0;
11189 if (pattern_len == 0)
11190 {
11191 *found_addrp = start_addr;
11192 return 1;
11193 }
11194
11195 /* If we already know the packet isn't supported, fall back to the simple
11196 way of searching memory. */
11197
11198 if (packet_config_support (packet) == PACKET_DISABLE)
11199 {
11200 /* Target doesn't provided special support, fall back and use the
11201 standard support (copy memory and do the search here). */
11202 return simple_search_memory (this, start_addr, search_space_len,
11203 pattern, pattern_len, found_addrp);
11204 }
11205
11206 /* Make sure the remote is pointing at the right process. */
11207 set_general_process ();
11208
11209 /* Insert header. */
11210 i = snprintf (rs->buf.data (), max_size,
11211 "qSearch:memory:%s;%s;",
11212 phex_nz (start_addr, addr_size),
11213 phex_nz (search_space_len, sizeof (search_space_len)));
11214 max_size -= (i + 1);
11215
11216 /* Escape as much data as fits into rs->buf. */
11217 escaped_pattern_len =
11218 remote_escape_output (pattern, pattern_len, 1,
11219 (gdb_byte *) rs->buf.data () + i,
11220 &used_pattern_len, max_size);
11221
11222 /* Bail if the pattern is too large. */
11223 if (used_pattern_len != pattern_len)
11224 error (_("Pattern is too large to transmit to remote target."));
11225
11226 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11227 || getpkt_sane (&rs->buf, 0) < 0
11228 || packet_ok (rs->buf, packet) != PACKET_OK)
11229 {
11230 /* The request may not have worked because the command is not
11231 supported. If so, fall back to the simple way. */
11232 if (packet_config_support (packet) == PACKET_DISABLE)
11233 {
11234 return simple_search_memory (this, start_addr, search_space_len,
11235 pattern, pattern_len, found_addrp);
11236 }
11237 return -1;
11238 }
11239
11240 if (rs->buf[0] == '0')
11241 found = 0;
11242 else if (rs->buf[0] == '1')
11243 {
11244 found = 1;
11245 if (rs->buf[1] != ',')
11246 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11247 unpack_varlen_hex (&rs->buf[2], &found_addr);
11248 *found_addrp = found_addr;
11249 }
11250 else
11251 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11252
11253 return found;
11254 }
11255
11256 void
11257 remote_target::rcmd (const char *command, struct ui_file *outbuf)
11258 {
11259 struct remote_state *rs = get_remote_state ();
11260 char *p = rs->buf.data ();
11261
11262 if (!rs->remote_desc)
11263 error (_("remote rcmd is only available after target open"));
11264
11265 /* Send a NULL command across as an empty command. */
11266 if (command == NULL)
11267 command = "";
11268
11269 /* The query prefix. */
11270 strcpy (rs->buf.data (), "qRcmd,");
11271 p = strchr (rs->buf.data (), '\0');
11272
11273 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
11274 > get_remote_packet_size ())
11275 error (_("\"monitor\" command ``%s'' is too long."), command);
11276
11277 /* Encode the actual command. */
11278 bin2hex ((const gdb_byte *) command, p, strlen (command));
11279
11280 if (putpkt (rs->buf) < 0)
11281 error (_("Communication problem with target."));
11282
11283 /* get/display the response */
11284 while (1)
11285 {
11286 char *buf;
11287
11288 /* XXX - see also remote_get_noisy_reply(). */
11289 QUIT; /* Allow user to bail out with ^C. */
11290 rs->buf[0] = '\0';
11291 if (getpkt_sane (&rs->buf, 0) == -1)
11292 {
11293 /* Timeout. Continue to (try to) read responses.
11294 This is better than stopping with an error, assuming the stub
11295 is still executing the (long) monitor command.
11296 If needed, the user can interrupt gdb using C-c, obtaining
11297 an effect similar to stop on timeout. */
11298 continue;
11299 }
11300 buf = rs->buf.data ();
11301 if (buf[0] == '\0')
11302 error (_("Target does not support this command."));
11303 if (buf[0] == 'O' && buf[1] != 'K')
11304 {
11305 remote_console_output (buf + 1); /* 'O' message from stub. */
11306 continue;
11307 }
11308 if (strcmp (buf, "OK") == 0)
11309 break;
11310 if (strlen (buf) == 3 && buf[0] == 'E'
11311 && isdigit (buf[1]) && isdigit (buf[2]))
11312 {
11313 error (_("Protocol error with Rcmd"));
11314 }
11315 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11316 {
11317 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
11318
11319 fputc_unfiltered (c, outbuf);
11320 }
11321 break;
11322 }
11323 }
11324
11325 std::vector<mem_region>
11326 remote_target::memory_map ()
11327 {
11328 std::vector<mem_region> result;
11329 gdb::optional<gdb::char_vector> text
11330 = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
11331
11332 if (text)
11333 result = parse_memory_map (text->data ());
11334
11335 return result;
11336 }
11337
11338 static void
11339 packet_command (const char *args, int from_tty)
11340 {
11341 remote_target *remote = get_current_remote_target ();
11342
11343 if (remote == nullptr)
11344 error (_("command can only be used with remote target"));
11345
11346 remote->packet_command (args, from_tty);
11347 }
11348
11349 void
11350 remote_target::packet_command (const char *args, int from_tty)
11351 {
11352 if (!args)
11353 error (_("remote-packet command requires packet text as argument"));
11354
11355 puts_filtered ("sending: ");
11356 print_packet (args);
11357 puts_filtered ("\n");
11358 putpkt (args);
11359
11360 remote_state *rs = get_remote_state ();
11361
11362 getpkt (&rs->buf, 0);
11363 puts_filtered ("received: ");
11364 print_packet (rs->buf.data ());
11365 puts_filtered ("\n");
11366 }
11367
11368 #if 0
11369 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
11370
11371 static void display_thread_info (struct gdb_ext_thread_info *info);
11372
11373 static void threadset_test_cmd (char *cmd, int tty);
11374
11375 static void threadalive_test (char *cmd, int tty);
11376
11377 static void threadlist_test_cmd (char *cmd, int tty);
11378
11379 int get_and_display_threadinfo (threadref *ref);
11380
11381 static void threadinfo_test_cmd (char *cmd, int tty);
11382
11383 static int thread_display_step (threadref *ref, void *context);
11384
11385 static void threadlist_update_test_cmd (char *cmd, int tty);
11386
11387 static void init_remote_threadtests (void);
11388
11389 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
11390
11391 static void
11392 threadset_test_cmd (const char *cmd, int tty)
11393 {
11394 int sample_thread = SAMPLE_THREAD;
11395
11396 printf_filtered (_("Remote threadset test\n"));
11397 set_general_thread (sample_thread);
11398 }
11399
11400
11401 static void
11402 threadalive_test (const char *cmd, int tty)
11403 {
11404 int sample_thread = SAMPLE_THREAD;
11405 int pid = inferior_ptid.pid ();
11406 ptid_t ptid = ptid_t (pid, sample_thread, 0);
11407
11408 if (remote_thread_alive (ptid))
11409 printf_filtered ("PASS: Thread alive test\n");
11410 else
11411 printf_filtered ("FAIL: Thread alive test\n");
11412 }
11413
11414 void output_threadid (char *title, threadref *ref);
11415
11416 void
11417 output_threadid (char *title, threadref *ref)
11418 {
11419 char hexid[20];
11420
11421 pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */
11422 hexid[16] = 0;
11423 printf_filtered ("%s %s\n", title, (&hexid[0]));
11424 }
11425
11426 static void
11427 threadlist_test_cmd (const char *cmd, int tty)
11428 {
11429 int startflag = 1;
11430 threadref nextthread;
11431 int done, result_count;
11432 threadref threadlist[3];
11433
11434 printf_filtered ("Remote Threadlist test\n");
11435 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11436 &result_count, &threadlist[0]))
11437 printf_filtered ("FAIL: threadlist test\n");
11438 else
11439 {
11440 threadref *scan = threadlist;
11441 threadref *limit = scan + result_count;
11442
11443 while (scan < limit)
11444 output_threadid (" thread ", scan++);
11445 }
11446 }
11447
11448 void
11449 display_thread_info (struct gdb_ext_thread_info *info)
11450 {
11451 output_threadid ("Threadid: ", &info->threadid);
11452 printf_filtered ("Name: %s\n ", info->shortname);
11453 printf_filtered ("State: %s\n", info->display);
11454 printf_filtered ("other: %s\n\n", info->more_display);
11455 }
11456
11457 int
11458 get_and_display_threadinfo (threadref *ref)
11459 {
11460 int result;
11461 int set;
11462 struct gdb_ext_thread_info threadinfo;
11463
11464 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11465 | TAG_MOREDISPLAY | TAG_DISPLAY;
11466 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11467 display_thread_info (&threadinfo);
11468 return result;
11469 }
11470
11471 static void
11472 threadinfo_test_cmd (const char *cmd, int tty)
11473 {
11474 int athread = SAMPLE_THREAD;
11475 threadref thread;
11476 int set;
11477
11478 int_to_threadref (&thread, athread);
11479 printf_filtered ("Remote Threadinfo test\n");
11480 if (!get_and_display_threadinfo (&thread))
11481 printf_filtered ("FAIL cannot get thread info\n");
11482 }
11483
11484 static int
11485 thread_display_step (threadref *ref, void *context)
11486 {
11487 /* output_threadid(" threadstep ",ref); *//* simple test */
11488 return get_and_display_threadinfo (ref);
11489 }
11490
11491 static void
11492 threadlist_update_test_cmd (const char *cmd, int tty)
11493 {
11494 printf_filtered ("Remote Threadlist update test\n");
11495 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11496 }
11497
11498 static void
11499 init_remote_threadtests (void)
11500 {
11501 add_com ("tlist", class_obscure, threadlist_test_cmd,
11502 _("Fetch and print the remote list of "
11503 "thread identifiers, one pkt only."));
11504 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11505 _("Fetch and display info about one thread."));
11506 add_com ("tset", class_obscure, threadset_test_cmd,
11507 _("Test setting to a different thread."));
11508 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11509 _("Iterate through updating all remote thread info."));
11510 add_com ("talive", class_obscure, threadalive_test,
11511 _("Remote thread alive test."));
11512 }
11513
11514 #endif /* 0 */
11515
11516 /* Convert a thread ID to a string. */
11517
11518 std::string
11519 remote_target::pid_to_str (ptid_t ptid)
11520 {
11521 struct remote_state *rs = get_remote_state ();
11522
11523 if (ptid == null_ptid)
11524 return normal_pid_to_str (ptid);
11525 else if (ptid.is_pid ())
11526 {
11527 /* Printing an inferior target id. */
11528
11529 /* When multi-process extensions are off, there's no way in the
11530 remote protocol to know the remote process id, if there's any
11531 at all. There's one exception --- when we're connected with
11532 target extended-remote, and we manually attached to a process
11533 with "attach PID". We don't record anywhere a flag that
11534 allows us to distinguish that case from the case of
11535 connecting with extended-remote and the stub already being
11536 attached to a process, and reporting yes to qAttached, hence
11537 no smart special casing here. */
11538 if (!remote_multi_process_p (rs))
11539 return "Remote target";
11540
11541 return normal_pid_to_str (ptid);
11542 }
11543 else
11544 {
11545 if (magic_null_ptid == ptid)
11546 return "Thread <main>";
11547 else if (remote_multi_process_p (rs))
11548 if (ptid.lwp () == 0)
11549 return normal_pid_to_str (ptid);
11550 else
11551 return string_printf ("Thread %d.%ld",
11552 ptid.pid (), ptid.lwp ());
11553 else
11554 return string_printf ("Thread %ld", ptid.lwp ());
11555 }
11556 }
11557
11558 /* Get the address of the thread local variable in OBJFILE which is
11559 stored at OFFSET within the thread local storage for thread PTID. */
11560
11561 CORE_ADDR
11562 remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11563 CORE_ADDR offset)
11564 {
11565 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11566 {
11567 struct remote_state *rs = get_remote_state ();
11568 char *p = rs->buf.data ();
11569 char *endp = p + get_remote_packet_size ();
11570 enum packet_result result;
11571
11572 strcpy (p, "qGetTLSAddr:");
11573 p += strlen (p);
11574 p = write_ptid (p, endp, ptid);
11575 *p++ = ',';
11576 p += hexnumstr (p, offset);
11577 *p++ = ',';
11578 p += hexnumstr (p, lm);
11579 *p++ = '\0';
11580
11581 putpkt (rs->buf);
11582 getpkt (&rs->buf, 0);
11583 result = packet_ok (rs->buf,
11584 &remote_protocol_packets[PACKET_qGetTLSAddr]);
11585 if (result == PACKET_OK)
11586 {
11587 ULONGEST addr;
11588
11589 unpack_varlen_hex (rs->buf.data (), &addr);
11590 return addr;
11591 }
11592 else if (result == PACKET_UNKNOWN)
11593 throw_error (TLS_GENERIC_ERROR,
11594 _("Remote target doesn't support qGetTLSAddr packet"));
11595 else
11596 throw_error (TLS_GENERIC_ERROR,
11597 _("Remote target failed to process qGetTLSAddr request"));
11598 }
11599 else
11600 throw_error (TLS_GENERIC_ERROR,
11601 _("TLS not supported or disabled on this target"));
11602 /* Not reached. */
11603 return 0;
11604 }
11605
11606 /* Provide thread local base, i.e. Thread Information Block address.
11607 Returns 1 if ptid is found and thread_local_base is non zero. */
11608
11609 bool
11610 remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
11611 {
11612 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11613 {
11614 struct remote_state *rs = get_remote_state ();
11615 char *p = rs->buf.data ();
11616 char *endp = p + get_remote_packet_size ();
11617 enum packet_result result;
11618
11619 strcpy (p, "qGetTIBAddr:");
11620 p += strlen (p);
11621 p = write_ptid (p, endp, ptid);
11622 *p++ = '\0';
11623
11624 putpkt (rs->buf);
11625 getpkt (&rs->buf, 0);
11626 result = packet_ok (rs->buf,
11627 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11628 if (result == PACKET_OK)
11629 {
11630 ULONGEST val;
11631 unpack_varlen_hex (rs->buf.data (), &val);
11632 if (addr)
11633 *addr = (CORE_ADDR) val;
11634 return true;
11635 }
11636 else if (result == PACKET_UNKNOWN)
11637 error (_("Remote target doesn't support qGetTIBAddr packet"));
11638 else
11639 error (_("Remote target failed to process qGetTIBAddr request"));
11640 }
11641 else
11642 error (_("qGetTIBAddr not supported or disabled on this target"));
11643 /* Not reached. */
11644 return false;
11645 }
11646
11647 /* Support for inferring a target description based on the current
11648 architecture and the size of a 'g' packet. While the 'g' packet
11649 can have any size (since optional registers can be left off the
11650 end), some sizes are easily recognizable given knowledge of the
11651 approximate architecture. */
11652
11653 struct remote_g_packet_guess
11654 {
11655 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11656 : bytes (bytes_),
11657 tdesc (tdesc_)
11658 {
11659 }
11660
11661 int bytes;
11662 const struct target_desc *tdesc;
11663 };
11664
11665 struct remote_g_packet_data : public allocate_on_obstack
11666 {
11667 std::vector<remote_g_packet_guess> guesses;
11668 };
11669
11670 static struct gdbarch_data *remote_g_packet_data_handle;
11671
11672 static void *
11673 remote_g_packet_data_init (struct obstack *obstack)
11674 {
11675 return new (obstack) remote_g_packet_data;
11676 }
11677
11678 void
11679 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11680 const struct target_desc *tdesc)
11681 {
11682 struct remote_g_packet_data *data
11683 = ((struct remote_g_packet_data *)
11684 gdbarch_data (gdbarch, remote_g_packet_data_handle));
11685
11686 gdb_assert (tdesc != NULL);
11687
11688 for (const remote_g_packet_guess &guess : data->guesses)
11689 if (guess.bytes == bytes)
11690 internal_error (__FILE__, __LINE__,
11691 _("Duplicate g packet description added for size %d"),
11692 bytes);
11693
11694 data->guesses.emplace_back (bytes, tdesc);
11695 }
11696
11697 /* Return true if remote_read_description would do anything on this target
11698 and architecture, false otherwise. */
11699
11700 static bool
11701 remote_read_description_p (struct target_ops *target)
11702 {
11703 struct remote_g_packet_data *data
11704 = ((struct remote_g_packet_data *)
11705 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11706
11707 return !data->guesses.empty ();
11708 }
11709
11710 const struct target_desc *
11711 remote_target::read_description ()
11712 {
11713 struct remote_g_packet_data *data
11714 = ((struct remote_g_packet_data *)
11715 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11716
11717 /* Do not try this during initial connection, when we do not know
11718 whether there is a running but stopped thread. */
11719 if (!target_has_execution || inferior_ptid == null_ptid)
11720 return beneath ()->read_description ();
11721
11722 if (!data->guesses.empty ())
11723 {
11724 int bytes = send_g_packet ();
11725
11726 for (const remote_g_packet_guess &guess : data->guesses)
11727 if (guess.bytes == bytes)
11728 return guess.tdesc;
11729
11730 /* We discard the g packet. A minor optimization would be to
11731 hold on to it, and fill the register cache once we have selected
11732 an architecture, but it's too tricky to do safely. */
11733 }
11734
11735 return beneath ()->read_description ();
11736 }
11737
11738 /* Remote file transfer support. This is host-initiated I/O, not
11739 target-initiated; for target-initiated, see remote-fileio.c. */
11740
11741 /* If *LEFT is at least the length of STRING, copy STRING to
11742 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11743 decrease *LEFT. Otherwise raise an error. */
11744
11745 static void
11746 remote_buffer_add_string (char **buffer, int *left, const char *string)
11747 {
11748 int len = strlen (string);
11749
11750 if (len > *left)
11751 error (_("Packet too long for target."));
11752
11753 memcpy (*buffer, string, len);
11754 *buffer += len;
11755 *left -= len;
11756
11757 /* NUL-terminate the buffer as a convenience, if there is
11758 room. */
11759 if (*left)
11760 **buffer = '\0';
11761 }
11762
11763 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11764 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11765 decrease *LEFT. Otherwise raise an error. */
11766
11767 static void
11768 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11769 int len)
11770 {
11771 if (2 * len > *left)
11772 error (_("Packet too long for target."));
11773
11774 bin2hex (bytes, *buffer, len);
11775 *buffer += 2 * len;
11776 *left -= 2 * len;
11777
11778 /* NUL-terminate the buffer as a convenience, if there is
11779 room. */
11780 if (*left)
11781 **buffer = '\0';
11782 }
11783
11784 /* If *LEFT is large enough, convert VALUE to hex and add it to
11785 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11786 decrease *LEFT. Otherwise raise an error. */
11787
11788 static void
11789 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11790 {
11791 int len = hexnumlen (value);
11792
11793 if (len > *left)
11794 error (_("Packet too long for target."));
11795
11796 hexnumstr (*buffer, value);
11797 *buffer += len;
11798 *left -= len;
11799
11800 /* NUL-terminate the buffer as a convenience, if there is
11801 room. */
11802 if (*left)
11803 **buffer = '\0';
11804 }
11805
11806 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11807 value, *REMOTE_ERRNO to the remote error number or zero if none
11808 was included, and *ATTACHMENT to point to the start of the annex
11809 if any. The length of the packet isn't needed here; there may
11810 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11811
11812 Return 0 if the packet could be parsed, -1 if it could not. If
11813 -1 is returned, the other variables may not be initialized. */
11814
11815 static int
11816 remote_hostio_parse_result (char *buffer, int *retcode,
11817 int *remote_errno, char **attachment)
11818 {
11819 char *p, *p2;
11820
11821 *remote_errno = 0;
11822 *attachment = NULL;
11823
11824 if (buffer[0] != 'F')
11825 return -1;
11826
11827 errno = 0;
11828 *retcode = strtol (&buffer[1], &p, 16);
11829 if (errno != 0 || p == &buffer[1])
11830 return -1;
11831
11832 /* Check for ",errno". */
11833 if (*p == ',')
11834 {
11835 errno = 0;
11836 *remote_errno = strtol (p + 1, &p2, 16);
11837 if (errno != 0 || p + 1 == p2)
11838 return -1;
11839 p = p2;
11840 }
11841
11842 /* Check for ";attachment". If there is no attachment, the
11843 packet should end here. */
11844 if (*p == ';')
11845 {
11846 *attachment = p + 1;
11847 return 0;
11848 }
11849 else if (*p == '\0')
11850 return 0;
11851 else
11852 return -1;
11853 }
11854
11855 /* Send a prepared I/O packet to the target and read its response.
11856 The prepared packet is in the global RS->BUF before this function
11857 is called, and the answer is there when we return.
11858
11859 COMMAND_BYTES is the length of the request to send, which may include
11860 binary data. WHICH_PACKET is the packet configuration to check
11861 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11862 is set to the error number and -1 is returned. Otherwise the value
11863 returned by the function is returned.
11864
11865 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11866 attachment is expected; an error will be reported if there's a
11867 mismatch. If one is found, *ATTACHMENT will be set to point into
11868 the packet buffer and *ATTACHMENT_LEN will be set to the
11869 attachment's length. */
11870
11871 int
11872 remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
11873 int *remote_errno, char **attachment,
11874 int *attachment_len)
11875 {
11876 struct remote_state *rs = get_remote_state ();
11877 int ret, bytes_read;
11878 char *attachment_tmp;
11879
11880 if (packet_support (which_packet) == PACKET_DISABLE)
11881 {
11882 *remote_errno = FILEIO_ENOSYS;
11883 return -1;
11884 }
11885
11886 putpkt_binary (rs->buf.data (), command_bytes);
11887 bytes_read = getpkt_sane (&rs->buf, 0);
11888
11889 /* If it timed out, something is wrong. Don't try to parse the
11890 buffer. */
11891 if (bytes_read < 0)
11892 {
11893 *remote_errno = FILEIO_EINVAL;
11894 return -1;
11895 }
11896
11897 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11898 {
11899 case PACKET_ERROR:
11900 *remote_errno = FILEIO_EINVAL;
11901 return -1;
11902 case PACKET_UNKNOWN:
11903 *remote_errno = FILEIO_ENOSYS;
11904 return -1;
11905 case PACKET_OK:
11906 break;
11907 }
11908
11909 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
11910 &attachment_tmp))
11911 {
11912 *remote_errno = FILEIO_EINVAL;
11913 return -1;
11914 }
11915
11916 /* Make sure we saw an attachment if and only if we expected one. */
11917 if ((attachment_tmp == NULL && attachment != NULL)
11918 || (attachment_tmp != NULL && attachment == NULL))
11919 {
11920 *remote_errno = FILEIO_EINVAL;
11921 return -1;
11922 }
11923
11924 /* If an attachment was found, it must point into the packet buffer;
11925 work out how many bytes there were. */
11926 if (attachment_tmp != NULL)
11927 {
11928 *attachment = attachment_tmp;
11929 *attachment_len = bytes_read - (*attachment - rs->buf.data ());
11930 }
11931
11932 return ret;
11933 }
11934
11935 /* See declaration.h. */
11936
11937 void
11938 readahead_cache::invalidate ()
11939 {
11940 this->fd = -1;
11941 }
11942
11943 /* See declaration.h. */
11944
11945 void
11946 readahead_cache::invalidate_fd (int fd)
11947 {
11948 if (this->fd == fd)
11949 this->fd = -1;
11950 }
11951
11952 /* Set the filesystem remote_hostio functions that take FILENAME
11953 arguments will use. Return 0 on success, or -1 if an error
11954 occurs (and set *REMOTE_ERRNO). */
11955
11956 int
11957 remote_target::remote_hostio_set_filesystem (struct inferior *inf,
11958 int *remote_errno)
11959 {
11960 struct remote_state *rs = get_remote_state ();
11961 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11962 char *p = rs->buf.data ();
11963 int left = get_remote_packet_size () - 1;
11964 char arg[9];
11965 int ret;
11966
11967 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11968 return 0;
11969
11970 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11971 return 0;
11972
11973 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11974
11975 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11976 remote_buffer_add_string (&p, &left, arg);
11977
11978 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
11979 remote_errno, NULL, NULL);
11980
11981 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11982 return 0;
11983
11984 if (ret == 0)
11985 rs->fs_pid = required_pid;
11986
11987 return ret;
11988 }
11989
11990 /* Implementation of to_fileio_open. */
11991
11992 int
11993 remote_target::remote_hostio_open (inferior *inf, const char *filename,
11994 int flags, int mode, int warn_if_slow,
11995 int *remote_errno)
11996 {
11997 struct remote_state *rs = get_remote_state ();
11998 char *p = rs->buf.data ();
11999 int left = get_remote_packet_size () - 1;
12000
12001 if (warn_if_slow)
12002 {
12003 static int warning_issued = 0;
12004
12005 printf_unfiltered (_("Reading %s from remote target...\n"),
12006 filename);
12007
12008 if (!warning_issued)
12009 {
12010 warning (_("File transfers from remote targets can be slow."
12011 " Use \"set sysroot\" to access files locally"
12012 " instead."));
12013 warning_issued = 1;
12014 }
12015 }
12016
12017 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12018 return -1;
12019
12020 remote_buffer_add_string (&p, &left, "vFile:open:");
12021
12022 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12023 strlen (filename));
12024 remote_buffer_add_string (&p, &left, ",");
12025
12026 remote_buffer_add_int (&p, &left, flags);
12027 remote_buffer_add_string (&p, &left, ",");
12028
12029 remote_buffer_add_int (&p, &left, mode);
12030
12031 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
12032 remote_errno, NULL, NULL);
12033 }
12034
12035 int
12036 remote_target::fileio_open (struct inferior *inf, const char *filename,
12037 int flags, int mode, int warn_if_slow,
12038 int *remote_errno)
12039 {
12040 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
12041 remote_errno);
12042 }
12043
12044 /* Implementation of to_fileio_pwrite. */
12045
12046 int
12047 remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
12048 ULONGEST offset, int *remote_errno)
12049 {
12050 struct remote_state *rs = get_remote_state ();
12051 char *p = rs->buf.data ();
12052 int left = get_remote_packet_size ();
12053 int out_len;
12054
12055 rs->readahead_cache.invalidate_fd (fd);
12056
12057 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
12058
12059 remote_buffer_add_int (&p, &left, fd);
12060 remote_buffer_add_string (&p, &left, ",");
12061
12062 remote_buffer_add_int (&p, &left, offset);
12063 remote_buffer_add_string (&p, &left, ",");
12064
12065 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
12066 (get_remote_packet_size ()
12067 - (p - rs->buf.data ())));
12068
12069 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
12070 remote_errno, NULL, NULL);
12071 }
12072
12073 int
12074 remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12075 ULONGEST offset, int *remote_errno)
12076 {
12077 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
12078 }
12079
12080 /* Helper for the implementation of to_fileio_pread. Read the file
12081 from the remote side with vFile:pread. */
12082
12083 int
12084 remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12085 ULONGEST offset, int *remote_errno)
12086 {
12087 struct remote_state *rs = get_remote_state ();
12088 char *p = rs->buf.data ();
12089 char *attachment;
12090 int left = get_remote_packet_size ();
12091 int ret, attachment_len;
12092 int read_len;
12093
12094 remote_buffer_add_string (&p, &left, "vFile:pread:");
12095
12096 remote_buffer_add_int (&p, &left, fd);
12097 remote_buffer_add_string (&p, &left, ",");
12098
12099 remote_buffer_add_int (&p, &left, len);
12100 remote_buffer_add_string (&p, &left, ",");
12101
12102 remote_buffer_add_int (&p, &left, offset);
12103
12104 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
12105 remote_errno, &attachment,
12106 &attachment_len);
12107
12108 if (ret < 0)
12109 return ret;
12110
12111 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12112 read_buf, len);
12113 if (read_len != ret)
12114 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12115
12116 return ret;
12117 }
12118
12119 /* See declaration.h. */
12120
12121 int
12122 readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12123 ULONGEST offset)
12124 {
12125 if (this->fd == fd
12126 && this->offset <= offset
12127 && offset < this->offset + this->bufsize)
12128 {
12129 ULONGEST max = this->offset + this->bufsize;
12130
12131 if (offset + len > max)
12132 len = max - offset;
12133
12134 memcpy (read_buf, this->buf + offset - this->offset, len);
12135 return len;
12136 }
12137
12138 return 0;
12139 }
12140
12141 /* Implementation of to_fileio_pread. */
12142
12143 int
12144 remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12145 ULONGEST offset, int *remote_errno)
12146 {
12147 int ret;
12148 struct remote_state *rs = get_remote_state ();
12149 readahead_cache *cache = &rs->readahead_cache;
12150
12151 ret = cache->pread (fd, read_buf, len, offset);
12152 if (ret > 0)
12153 {
12154 cache->hit_count++;
12155
12156 if (remote_debug)
12157 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
12158 pulongest (cache->hit_count));
12159 return ret;
12160 }
12161
12162 cache->miss_count++;
12163 if (remote_debug)
12164 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
12165 pulongest (cache->miss_count));
12166
12167 cache->fd = fd;
12168 cache->offset = offset;
12169 cache->bufsize = get_remote_packet_size ();
12170 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
12171
12172 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
12173 cache->offset, remote_errno);
12174 if (ret <= 0)
12175 {
12176 cache->invalidate_fd (fd);
12177 return ret;
12178 }
12179
12180 cache->bufsize = ret;
12181 return cache->pread (fd, read_buf, len, offset);
12182 }
12183
12184 int
12185 remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12186 ULONGEST offset, int *remote_errno)
12187 {
12188 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
12189 }
12190
12191 /* Implementation of to_fileio_close. */
12192
12193 int
12194 remote_target::remote_hostio_close (int fd, int *remote_errno)
12195 {
12196 struct remote_state *rs = get_remote_state ();
12197 char *p = rs->buf.data ();
12198 int left = get_remote_packet_size () - 1;
12199
12200 rs->readahead_cache.invalidate_fd (fd);
12201
12202 remote_buffer_add_string (&p, &left, "vFile:close:");
12203
12204 remote_buffer_add_int (&p, &left, fd);
12205
12206 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
12207 remote_errno, NULL, NULL);
12208 }
12209
12210 int
12211 remote_target::fileio_close (int fd, int *remote_errno)
12212 {
12213 return remote_hostio_close (fd, remote_errno);
12214 }
12215
12216 /* Implementation of to_fileio_unlink. */
12217
12218 int
12219 remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12220 int *remote_errno)
12221 {
12222 struct remote_state *rs = get_remote_state ();
12223 char *p = rs->buf.data ();
12224 int left = get_remote_packet_size () - 1;
12225
12226 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12227 return -1;
12228
12229 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12230
12231 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12232 strlen (filename));
12233
12234 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
12235 remote_errno, NULL, NULL);
12236 }
12237
12238 int
12239 remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12240 int *remote_errno)
12241 {
12242 return remote_hostio_unlink (inf, filename, remote_errno);
12243 }
12244
12245 /* Implementation of to_fileio_readlink. */
12246
12247 gdb::optional<std::string>
12248 remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12249 int *remote_errno)
12250 {
12251 struct remote_state *rs = get_remote_state ();
12252 char *p = rs->buf.data ();
12253 char *attachment;
12254 int left = get_remote_packet_size ();
12255 int len, attachment_len;
12256 int read_len;
12257
12258 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12259 return {};
12260
12261 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12262
12263 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12264 strlen (filename));
12265
12266 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
12267 remote_errno, &attachment,
12268 &attachment_len);
12269
12270 if (len < 0)
12271 return {};
12272
12273 std::string ret (len, '\0');
12274
12275 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12276 (gdb_byte *) &ret[0], len);
12277 if (read_len != len)
12278 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12279
12280 return ret;
12281 }
12282
12283 /* Implementation of to_fileio_fstat. */
12284
12285 int
12286 remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
12287 {
12288 struct remote_state *rs = get_remote_state ();
12289 char *p = rs->buf.data ();
12290 int left = get_remote_packet_size ();
12291 int attachment_len, ret;
12292 char *attachment;
12293 struct fio_stat fst;
12294 int read_len;
12295
12296 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12297
12298 remote_buffer_add_int (&p, &left, fd);
12299
12300 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
12301 remote_errno, &attachment,
12302 &attachment_len);
12303 if (ret < 0)
12304 {
12305 if (*remote_errno != FILEIO_ENOSYS)
12306 return ret;
12307
12308 /* Strictly we should return -1, ENOSYS here, but when
12309 "set sysroot remote:" was implemented in August 2008
12310 BFD's need for a stat function was sidestepped with
12311 this hack. This was not remedied until March 2015
12312 so we retain the previous behavior to avoid breaking
12313 compatibility.
12314
12315 Note that the memset is a March 2015 addition; older
12316 GDBs set st_size *and nothing else* so the structure
12317 would have garbage in all other fields. This might
12318 break something but retaining the previous behavior
12319 here would be just too wrong. */
12320
12321 memset (st, 0, sizeof (struct stat));
12322 st->st_size = INT_MAX;
12323 return 0;
12324 }
12325
12326 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12327 (gdb_byte *) &fst, sizeof (fst));
12328
12329 if (read_len != ret)
12330 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12331
12332 if (read_len != sizeof (fst))
12333 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12334 read_len, (int) sizeof (fst));
12335
12336 remote_fileio_to_host_stat (&fst, st);
12337
12338 return 0;
12339 }
12340
12341 /* Implementation of to_filesystem_is_local. */
12342
12343 bool
12344 remote_target::filesystem_is_local ()
12345 {
12346 /* Valgrind GDB presents itself as a remote target but works
12347 on the local filesystem: it does not implement remote get
12348 and users are not expected to set a sysroot. To handle
12349 this case we treat the remote filesystem as local if the
12350 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12351 does not support vFile:open. */
12352 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
12353 {
12354 enum packet_support ps = packet_support (PACKET_vFile_open);
12355
12356 if (ps == PACKET_SUPPORT_UNKNOWN)
12357 {
12358 int fd, remote_errno;
12359
12360 /* Try opening a file to probe support. The supplied
12361 filename is irrelevant, we only care about whether
12362 the stub recognizes the packet or not. */
12363 fd = remote_hostio_open (NULL, "just probing",
12364 FILEIO_O_RDONLY, 0700, 0,
12365 &remote_errno);
12366
12367 if (fd >= 0)
12368 remote_hostio_close (fd, &remote_errno);
12369
12370 ps = packet_support (PACKET_vFile_open);
12371 }
12372
12373 if (ps == PACKET_DISABLE)
12374 {
12375 static int warning_issued = 0;
12376
12377 if (!warning_issued)
12378 {
12379 warning (_("remote target does not support file"
12380 " transfer, attempting to access files"
12381 " from local filesystem."));
12382 warning_issued = 1;
12383 }
12384
12385 return true;
12386 }
12387 }
12388
12389 return false;
12390 }
12391
12392 static int
12393 remote_fileio_errno_to_host (int errnum)
12394 {
12395 switch (errnum)
12396 {
12397 case FILEIO_EPERM:
12398 return EPERM;
12399 case FILEIO_ENOENT:
12400 return ENOENT;
12401 case FILEIO_EINTR:
12402 return EINTR;
12403 case FILEIO_EIO:
12404 return EIO;
12405 case FILEIO_EBADF:
12406 return EBADF;
12407 case FILEIO_EACCES:
12408 return EACCES;
12409 case FILEIO_EFAULT:
12410 return EFAULT;
12411 case FILEIO_EBUSY:
12412 return EBUSY;
12413 case FILEIO_EEXIST:
12414 return EEXIST;
12415 case FILEIO_ENODEV:
12416 return ENODEV;
12417 case FILEIO_ENOTDIR:
12418 return ENOTDIR;
12419 case FILEIO_EISDIR:
12420 return EISDIR;
12421 case FILEIO_EINVAL:
12422 return EINVAL;
12423 case FILEIO_ENFILE:
12424 return ENFILE;
12425 case FILEIO_EMFILE:
12426 return EMFILE;
12427 case FILEIO_EFBIG:
12428 return EFBIG;
12429 case FILEIO_ENOSPC:
12430 return ENOSPC;
12431 case FILEIO_ESPIPE:
12432 return ESPIPE;
12433 case FILEIO_EROFS:
12434 return EROFS;
12435 case FILEIO_ENOSYS:
12436 return ENOSYS;
12437 case FILEIO_ENAMETOOLONG:
12438 return ENAMETOOLONG;
12439 }
12440 return -1;
12441 }
12442
12443 static char *
12444 remote_hostio_error (int errnum)
12445 {
12446 int host_error = remote_fileio_errno_to_host (errnum);
12447
12448 if (host_error == -1)
12449 error (_("Unknown remote I/O error %d"), errnum);
12450 else
12451 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12452 }
12453
12454 /* A RAII wrapper around a remote file descriptor. */
12455
12456 class scoped_remote_fd
12457 {
12458 public:
12459 scoped_remote_fd (remote_target *remote, int fd)
12460 : m_remote (remote), m_fd (fd)
12461 {
12462 }
12463
12464 ~scoped_remote_fd ()
12465 {
12466 if (m_fd != -1)
12467 {
12468 try
12469 {
12470 int remote_errno;
12471 m_remote->remote_hostio_close (m_fd, &remote_errno);
12472 }
12473 catch (...)
12474 {
12475 /* Swallow exception before it escapes the dtor. If
12476 something goes wrong, likely the connection is gone,
12477 and there's nothing else that can be done. */
12478 }
12479 }
12480 }
12481
12482 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12483
12484 /* Release ownership of the file descriptor, and return it. */
12485 ATTRIBUTE_UNUSED_RESULT int release () noexcept
12486 {
12487 int fd = m_fd;
12488 m_fd = -1;
12489 return fd;
12490 }
12491
12492 /* Return the owned file descriptor. */
12493 int get () const noexcept
12494 {
12495 return m_fd;
12496 }
12497
12498 private:
12499 /* The remote target. */
12500 remote_target *m_remote;
12501
12502 /* The owned remote I/O file descriptor. */
12503 int m_fd;
12504 };
12505
12506 void
12507 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12508 {
12509 remote_target *remote = get_current_remote_target ();
12510
12511 if (remote == nullptr)
12512 error (_("command can only be used with remote target"));
12513
12514 remote->remote_file_put (local_file, remote_file, from_tty);
12515 }
12516
12517 void
12518 remote_target::remote_file_put (const char *local_file, const char *remote_file,
12519 int from_tty)
12520 {
12521 int retcode, remote_errno, bytes, io_size;
12522 int bytes_in_buffer;
12523 int saw_eof;
12524 ULONGEST offset;
12525
12526 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12527 if (file == NULL)
12528 perror_with_name (local_file);
12529
12530 scoped_remote_fd fd
12531 (this, remote_hostio_open (NULL,
12532 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12533 | FILEIO_O_TRUNC),
12534 0700, 0, &remote_errno));
12535 if (fd.get () == -1)
12536 remote_hostio_error (remote_errno);
12537
12538 /* Send up to this many bytes at once. They won't all fit in the
12539 remote packet limit, so we'll transfer slightly fewer. */
12540 io_size = get_remote_packet_size ();
12541 gdb::byte_vector buffer (io_size);
12542
12543 bytes_in_buffer = 0;
12544 saw_eof = 0;
12545 offset = 0;
12546 while (bytes_in_buffer || !saw_eof)
12547 {
12548 if (!saw_eof)
12549 {
12550 bytes = fread (buffer.data () + bytes_in_buffer, 1,
12551 io_size - bytes_in_buffer,
12552 file.get ());
12553 if (bytes == 0)
12554 {
12555 if (ferror (file.get ()))
12556 error (_("Error reading %s."), local_file);
12557 else
12558 {
12559 /* EOF. Unless there is something still in the
12560 buffer from the last iteration, we are done. */
12561 saw_eof = 1;
12562 if (bytes_in_buffer == 0)
12563 break;
12564 }
12565 }
12566 }
12567 else
12568 bytes = 0;
12569
12570 bytes += bytes_in_buffer;
12571 bytes_in_buffer = 0;
12572
12573 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
12574 offset, &remote_errno);
12575
12576 if (retcode < 0)
12577 remote_hostio_error (remote_errno);
12578 else if (retcode == 0)
12579 error (_("Remote write of %d bytes returned 0!"), bytes);
12580 else if (retcode < bytes)
12581 {
12582 /* Short write. Save the rest of the read data for the next
12583 write. */
12584 bytes_in_buffer = bytes - retcode;
12585 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
12586 }
12587
12588 offset += retcode;
12589 }
12590
12591 if (remote_hostio_close (fd.release (), &remote_errno))
12592 remote_hostio_error (remote_errno);
12593
12594 if (from_tty)
12595 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12596 }
12597
12598 void
12599 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12600 {
12601 remote_target *remote = get_current_remote_target ();
12602
12603 if (remote == nullptr)
12604 error (_("command can only be used with remote target"));
12605
12606 remote->remote_file_get (remote_file, local_file, from_tty);
12607 }
12608
12609 void
12610 remote_target::remote_file_get (const char *remote_file, const char *local_file,
12611 int from_tty)
12612 {
12613 int remote_errno, bytes, io_size;
12614 ULONGEST offset;
12615
12616 scoped_remote_fd fd
12617 (this, remote_hostio_open (NULL,
12618 remote_file, FILEIO_O_RDONLY, 0, 0,
12619 &remote_errno));
12620 if (fd.get () == -1)
12621 remote_hostio_error (remote_errno);
12622
12623 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12624 if (file == NULL)
12625 perror_with_name (local_file);
12626
12627 /* Send up to this many bytes at once. They won't all fit in the
12628 remote packet limit, so we'll transfer slightly fewer. */
12629 io_size = get_remote_packet_size ();
12630 gdb::byte_vector buffer (io_size);
12631
12632 offset = 0;
12633 while (1)
12634 {
12635 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
12636 &remote_errno);
12637 if (bytes == 0)
12638 /* Success, but no bytes, means end-of-file. */
12639 break;
12640 if (bytes == -1)
12641 remote_hostio_error (remote_errno);
12642
12643 offset += bytes;
12644
12645 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
12646 if (bytes == 0)
12647 perror_with_name (local_file);
12648 }
12649
12650 if (remote_hostio_close (fd.release (), &remote_errno))
12651 remote_hostio_error (remote_errno);
12652
12653 if (from_tty)
12654 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12655 }
12656
12657 void
12658 remote_file_delete (const char *remote_file, int from_tty)
12659 {
12660 remote_target *remote = get_current_remote_target ();
12661
12662 if (remote == nullptr)
12663 error (_("command can only be used with remote target"));
12664
12665 remote->remote_file_delete (remote_file, from_tty);
12666 }
12667
12668 void
12669 remote_target::remote_file_delete (const char *remote_file, int from_tty)
12670 {
12671 int retcode, remote_errno;
12672
12673 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
12674 if (retcode == -1)
12675 remote_hostio_error (remote_errno);
12676
12677 if (from_tty)
12678 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12679 }
12680
12681 static void
12682 remote_put_command (const char *args, int from_tty)
12683 {
12684 if (args == NULL)
12685 error_no_arg (_("file to put"));
12686
12687 gdb_argv argv (args);
12688 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12689 error (_("Invalid parameters to remote put"));
12690
12691 remote_file_put (argv[0], argv[1], from_tty);
12692 }
12693
12694 static void
12695 remote_get_command (const char *args, int from_tty)
12696 {
12697 if (args == NULL)
12698 error_no_arg (_("file to get"));
12699
12700 gdb_argv argv (args);
12701 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12702 error (_("Invalid parameters to remote get"));
12703
12704 remote_file_get (argv[0], argv[1], from_tty);
12705 }
12706
12707 static void
12708 remote_delete_command (const char *args, int from_tty)
12709 {
12710 if (args == NULL)
12711 error_no_arg (_("file to delete"));
12712
12713 gdb_argv argv (args);
12714 if (argv[0] == NULL || argv[1] != NULL)
12715 error (_("Invalid parameters to remote delete"));
12716
12717 remote_file_delete (argv[0], from_tty);
12718 }
12719
12720 bool
12721 remote_target::can_execute_reverse ()
12722 {
12723 if (packet_support (PACKET_bs) == PACKET_ENABLE
12724 || packet_support (PACKET_bc) == PACKET_ENABLE)
12725 return true;
12726 else
12727 return false;
12728 }
12729
12730 bool
12731 remote_target::supports_non_stop ()
12732 {
12733 return true;
12734 }
12735
12736 bool
12737 remote_target::supports_disable_randomization ()
12738 {
12739 /* Only supported in extended mode. */
12740 return false;
12741 }
12742
12743 bool
12744 remote_target::supports_multi_process ()
12745 {
12746 struct remote_state *rs = get_remote_state ();
12747
12748 return remote_multi_process_p (rs);
12749 }
12750
12751 static int
12752 remote_supports_cond_tracepoints ()
12753 {
12754 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12755 }
12756
12757 bool
12758 remote_target::supports_evaluation_of_breakpoint_conditions ()
12759 {
12760 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12761 }
12762
12763 static int
12764 remote_supports_fast_tracepoints ()
12765 {
12766 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12767 }
12768
12769 static int
12770 remote_supports_static_tracepoints ()
12771 {
12772 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12773 }
12774
12775 static int
12776 remote_supports_install_in_trace ()
12777 {
12778 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12779 }
12780
12781 bool
12782 remote_target::supports_enable_disable_tracepoint ()
12783 {
12784 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12785 == PACKET_ENABLE);
12786 }
12787
12788 bool
12789 remote_target::supports_string_tracing ()
12790 {
12791 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12792 }
12793
12794 bool
12795 remote_target::can_run_breakpoint_commands ()
12796 {
12797 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12798 }
12799
12800 void
12801 remote_target::trace_init ()
12802 {
12803 struct remote_state *rs = get_remote_state ();
12804
12805 putpkt ("QTinit");
12806 remote_get_noisy_reply ();
12807 if (strcmp (rs->buf.data (), "OK") != 0)
12808 error (_("Target does not support this command."));
12809 }
12810
12811 /* Recursive routine to walk through command list including loops, and
12812 download packets for each command. */
12813
12814 void
12815 remote_target::remote_download_command_source (int num, ULONGEST addr,
12816 struct command_line *cmds)
12817 {
12818 struct remote_state *rs = get_remote_state ();
12819 struct command_line *cmd;
12820
12821 for (cmd = cmds; cmd; cmd = cmd->next)
12822 {
12823 QUIT; /* Allow user to bail out with ^C. */
12824 strcpy (rs->buf.data (), "QTDPsrc:");
12825 encode_source_string (num, addr, "cmd", cmd->line,
12826 rs->buf.data () + strlen (rs->buf.data ()),
12827 rs->buf.size () - strlen (rs->buf.data ()));
12828 putpkt (rs->buf);
12829 remote_get_noisy_reply ();
12830 if (strcmp (rs->buf.data (), "OK"))
12831 warning (_("Target does not support source download."));
12832
12833 if (cmd->control_type == while_control
12834 || cmd->control_type == while_stepping_control)
12835 {
12836 remote_download_command_source (num, addr, cmd->body_list_0.get ());
12837
12838 QUIT; /* Allow user to bail out with ^C. */
12839 strcpy (rs->buf.data (), "QTDPsrc:");
12840 encode_source_string (num, addr, "cmd", "end",
12841 rs->buf.data () + strlen (rs->buf.data ()),
12842 rs->buf.size () - strlen (rs->buf.data ()));
12843 putpkt (rs->buf);
12844 remote_get_noisy_reply ();
12845 if (strcmp (rs->buf.data (), "OK"))
12846 warning (_("Target does not support source download."));
12847 }
12848 }
12849 }
12850
12851 void
12852 remote_target::download_tracepoint (struct bp_location *loc)
12853 {
12854 CORE_ADDR tpaddr;
12855 char addrbuf[40];
12856 std::vector<std::string> tdp_actions;
12857 std::vector<std::string> stepping_actions;
12858 char *pkt;
12859 struct breakpoint *b = loc->owner;
12860 struct tracepoint *t = (struct tracepoint *) b;
12861 struct remote_state *rs = get_remote_state ();
12862 int ret;
12863 const char *err_msg = _("Tracepoint packet too large for target.");
12864 size_t size_left;
12865
12866 /* We use a buffer other than rs->buf because we'll build strings
12867 across multiple statements, and other statements in between could
12868 modify rs->buf. */
12869 gdb::char_vector buf (get_remote_packet_size ());
12870
12871 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12872
12873 tpaddr = loc->address;
12874 strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR)));
12875 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
12876 b->number, addrbuf, /* address */
12877 (b->enable_state == bp_enabled ? 'E' : 'D'),
12878 t->step_count, t->pass_count);
12879
12880 if (ret < 0 || ret >= buf.size ())
12881 error ("%s", err_msg);
12882
12883 /* Fast tracepoints are mostly handled by the target, but we can
12884 tell the target how big of an instruction block should be moved
12885 around. */
12886 if (b->type == bp_fast_tracepoint)
12887 {
12888 /* Only test for support at download time; we may not know
12889 target capabilities at definition time. */
12890 if (remote_supports_fast_tracepoints ())
12891 {
12892 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12893 NULL))
12894 {
12895 size_left = buf.size () - strlen (buf.data ());
12896 ret = snprintf (buf.data () + strlen (buf.data ()),
12897 size_left, ":F%x",
12898 gdb_insn_length (loc->gdbarch, tpaddr));
12899
12900 if (ret < 0 || ret >= size_left)
12901 error ("%s", err_msg);
12902 }
12903 else
12904 /* If it passed validation at definition but fails now,
12905 something is very wrong. */
12906 internal_error (__FILE__, __LINE__,
12907 _("Fast tracepoint not "
12908 "valid during download"));
12909 }
12910 else
12911 /* Fast tracepoints are functionally identical to regular
12912 tracepoints, so don't take lack of support as a reason to
12913 give up on the trace run. */
12914 warning (_("Target does not support fast tracepoints, "
12915 "downloading %d as regular tracepoint"), b->number);
12916 }
12917 else if (b->type == bp_static_tracepoint)
12918 {
12919 /* Only test for support at download time; we may not know
12920 target capabilities at definition time. */
12921 if (remote_supports_static_tracepoints ())
12922 {
12923 struct static_tracepoint_marker marker;
12924
12925 if (target_static_tracepoint_marker_at (tpaddr, &marker))
12926 {
12927 size_left = buf.size () - strlen (buf.data ());
12928 ret = snprintf (buf.data () + strlen (buf.data ()),
12929 size_left, ":S");
12930
12931 if (ret < 0 || ret >= size_left)
12932 error ("%s", err_msg);
12933 }
12934 else
12935 error (_("Static tracepoint not valid during download"));
12936 }
12937 else
12938 /* Fast tracepoints are functionally identical to regular
12939 tracepoints, so don't take lack of support as a reason
12940 to give up on the trace run. */
12941 error (_("Target does not support static tracepoints"));
12942 }
12943 /* If the tracepoint has a conditional, make it into an agent
12944 expression and append to the definition. */
12945 if (loc->cond)
12946 {
12947 /* Only test support at download time, we may not know target
12948 capabilities at definition time. */
12949 if (remote_supports_cond_tracepoints ())
12950 {
12951 agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
12952 loc->cond.get ());
12953
12954 size_left = buf.size () - strlen (buf.data ());
12955
12956 ret = snprintf (buf.data () + strlen (buf.data ()),
12957 size_left, ":X%x,", aexpr->len);
12958
12959 if (ret < 0 || ret >= size_left)
12960 error ("%s", err_msg);
12961
12962 size_left = buf.size () - strlen (buf.data ());
12963
12964 /* Two bytes to encode each aexpr byte, plus the terminating
12965 null byte. */
12966 if (aexpr->len * 2 + 1 > size_left)
12967 error ("%s", err_msg);
12968
12969 pkt = buf.data () + strlen (buf.data ());
12970
12971 for (int ndx = 0; ndx < aexpr->len; ++ndx)
12972 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12973 *pkt = '\0';
12974 }
12975 else
12976 warning (_("Target does not support conditional tracepoints, "
12977 "ignoring tp %d cond"), b->number);
12978 }
12979
12980 if (b->commands || *default_collect)
12981 {
12982 size_left = buf.size () - strlen (buf.data ());
12983
12984 ret = snprintf (buf.data () + strlen (buf.data ()),
12985 size_left, "-");
12986
12987 if (ret < 0 || ret >= size_left)
12988 error ("%s", err_msg);
12989 }
12990
12991 putpkt (buf.data ());
12992 remote_get_noisy_reply ();
12993 if (strcmp (rs->buf.data (), "OK"))
12994 error (_("Target does not support tracepoints."));
12995
12996 /* do_single_steps (t); */
12997 for (auto action_it = tdp_actions.begin ();
12998 action_it != tdp_actions.end (); action_it++)
12999 {
13000 QUIT; /* Allow user to bail out with ^C. */
13001
13002 bool has_more = ((action_it + 1) != tdp_actions.end ()
13003 || !stepping_actions.empty ());
13004
13005 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
13006 b->number, addrbuf, /* address */
13007 action_it->c_str (),
13008 has_more ? '-' : 0);
13009
13010 if (ret < 0 || ret >= buf.size ())
13011 error ("%s", err_msg);
13012
13013 putpkt (buf.data ());
13014 remote_get_noisy_reply ();
13015 if (strcmp (rs->buf.data (), "OK"))
13016 error (_("Error on target while setting tracepoints."));
13017 }
13018
13019 for (auto action_it = stepping_actions.begin ();
13020 action_it != stepping_actions.end (); action_it++)
13021 {
13022 QUIT; /* Allow user to bail out with ^C. */
13023
13024 bool is_first = action_it == stepping_actions.begin ();
13025 bool has_more = (action_it + 1) != stepping_actions.end ();
13026
13027 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
13028 b->number, addrbuf, /* address */
13029 is_first ? "S" : "",
13030 action_it->c_str (),
13031 has_more ? "-" : "");
13032
13033 if (ret < 0 || ret >= buf.size ())
13034 error ("%s", err_msg);
13035
13036 putpkt (buf.data ());
13037 remote_get_noisy_reply ();
13038 if (strcmp (rs->buf.data (), "OK"))
13039 error (_("Error on target while setting tracepoints."));
13040 }
13041
13042 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
13043 {
13044 if (b->location != NULL)
13045 {
13046 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13047
13048 if (ret < 0 || ret >= buf.size ())
13049 error ("%s", err_msg);
13050
13051 encode_source_string (b->number, loc->address, "at",
13052 event_location_to_string (b->location.get ()),
13053 buf.data () + strlen (buf.data ()),
13054 buf.size () - strlen (buf.data ()));
13055 putpkt (buf.data ());
13056 remote_get_noisy_reply ();
13057 if (strcmp (rs->buf.data (), "OK"))
13058 warning (_("Target does not support source download."));
13059 }
13060 if (b->cond_string)
13061 {
13062 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13063
13064 if (ret < 0 || ret >= buf.size ())
13065 error ("%s", err_msg);
13066
13067 encode_source_string (b->number, loc->address,
13068 "cond", b->cond_string,
13069 buf.data () + strlen (buf.data ()),
13070 buf.size () - strlen (buf.data ()));
13071 putpkt (buf.data ());
13072 remote_get_noisy_reply ();
13073 if (strcmp (rs->buf.data (), "OK"))
13074 warning (_("Target does not support source download."));
13075 }
13076 remote_download_command_source (b->number, loc->address,
13077 breakpoint_commands (b));
13078 }
13079 }
13080
13081 bool
13082 remote_target::can_download_tracepoint ()
13083 {
13084 struct remote_state *rs = get_remote_state ();
13085 struct trace_status *ts;
13086 int status;
13087
13088 /* Don't try to install tracepoints until we've relocated our
13089 symbols, and fetched and merged the target's tracepoint list with
13090 ours. */
13091 if (rs->starting_up)
13092 return false;
13093
13094 ts = current_trace_status ();
13095 status = get_trace_status (ts);
13096
13097 if (status == -1 || !ts->running_known || !ts->running)
13098 return false;
13099
13100 /* If we are in a tracing experiment, but remote stub doesn't support
13101 installing tracepoint in trace, we have to return. */
13102 if (!remote_supports_install_in_trace ())
13103 return false;
13104
13105 return true;
13106 }
13107
13108
13109 void
13110 remote_target::download_trace_state_variable (const trace_state_variable &tsv)
13111 {
13112 struct remote_state *rs = get_remote_state ();
13113 char *p;
13114
13115 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
13116 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
13117 tsv.builtin);
13118 p = rs->buf.data () + strlen (rs->buf.data ());
13119 if ((p - rs->buf.data ()) + tsv.name.length () * 2
13120 >= get_remote_packet_size ())
13121 error (_("Trace state variable name too long for tsv definition packet"));
13122 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
13123 *p++ = '\0';
13124 putpkt (rs->buf);
13125 remote_get_noisy_reply ();
13126 if (rs->buf[0] == '\0')
13127 error (_("Target does not support this command."));
13128 if (strcmp (rs->buf.data (), "OK") != 0)
13129 error (_("Error on target while downloading trace state variable."));
13130 }
13131
13132 void
13133 remote_target::enable_tracepoint (struct bp_location *location)
13134 {
13135 struct remote_state *rs = get_remote_state ();
13136
13137 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
13138 location->owner->number,
13139 phex (location->address, sizeof (CORE_ADDR)));
13140 putpkt (rs->buf);
13141 remote_get_noisy_reply ();
13142 if (rs->buf[0] == '\0')
13143 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13144 if (strcmp (rs->buf.data (), "OK") != 0)
13145 error (_("Error on target while enabling tracepoint."));
13146 }
13147
13148 void
13149 remote_target::disable_tracepoint (struct bp_location *location)
13150 {
13151 struct remote_state *rs = get_remote_state ();
13152
13153 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
13154 location->owner->number,
13155 phex (location->address, sizeof (CORE_ADDR)));
13156 putpkt (rs->buf);
13157 remote_get_noisy_reply ();
13158 if (rs->buf[0] == '\0')
13159 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13160 if (strcmp (rs->buf.data (), "OK") != 0)
13161 error (_("Error on target while disabling tracepoint."));
13162 }
13163
13164 void
13165 remote_target::trace_set_readonly_regions ()
13166 {
13167 asection *s;
13168 bfd_size_type size;
13169 bfd_vma vma;
13170 int anysecs = 0;
13171 int offset = 0;
13172
13173 if (!exec_bfd)
13174 return; /* No information to give. */
13175
13176 struct remote_state *rs = get_remote_state ();
13177
13178 strcpy (rs->buf.data (), "QTro");
13179 offset = strlen (rs->buf.data ());
13180 for (s = exec_bfd->sections; s; s = s->next)
13181 {
13182 char tmp1[40], tmp2[40];
13183 int sec_length;
13184
13185 if ((s->flags & SEC_LOAD) == 0 ||
13186 /* (s->flags & SEC_CODE) == 0 || */
13187 (s->flags & SEC_READONLY) == 0)
13188 continue;
13189
13190 anysecs = 1;
13191 vma = bfd_section_vma (s);
13192 size = bfd_section_size (s);
13193 sprintf_vma (tmp1, vma);
13194 sprintf_vma (tmp2, vma + size);
13195 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
13196 if (offset + sec_length + 1 > rs->buf.size ())
13197 {
13198 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
13199 warning (_("\
13200 Too many sections for read-only sections definition packet."));
13201 break;
13202 }
13203 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
13204 tmp1, tmp2);
13205 offset += sec_length;
13206 }
13207 if (anysecs)
13208 {
13209 putpkt (rs->buf);
13210 getpkt (&rs->buf, 0);
13211 }
13212 }
13213
13214 void
13215 remote_target::trace_start ()
13216 {
13217 struct remote_state *rs = get_remote_state ();
13218
13219 putpkt ("QTStart");
13220 remote_get_noisy_reply ();
13221 if (rs->buf[0] == '\0')
13222 error (_("Target does not support this command."));
13223 if (strcmp (rs->buf.data (), "OK") != 0)
13224 error (_("Bogus reply from target: %s"), rs->buf.data ());
13225 }
13226
13227 int
13228 remote_target::get_trace_status (struct trace_status *ts)
13229 {
13230 /* Initialize it just to avoid a GCC false warning. */
13231 char *p = NULL;
13232 enum packet_result result;
13233 struct remote_state *rs = get_remote_state ();
13234
13235 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
13236 return -1;
13237
13238 /* FIXME we need to get register block size some other way. */
13239 trace_regblock_size
13240 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
13241
13242 putpkt ("qTStatus");
13243
13244 try
13245 {
13246 p = remote_get_noisy_reply ();
13247 }
13248 catch (const gdb_exception_error &ex)
13249 {
13250 if (ex.error != TARGET_CLOSE_ERROR)
13251 {
13252 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13253 return -1;
13254 }
13255 throw;
13256 }
13257
13258 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13259
13260 /* If the remote target doesn't do tracing, flag it. */
13261 if (result == PACKET_UNKNOWN)
13262 return -1;
13263
13264 /* We're working with a live target. */
13265 ts->filename = NULL;
13266
13267 if (*p++ != 'T')
13268 error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
13269
13270 /* Function 'parse_trace_status' sets default value of each field of
13271 'ts' at first, so we don't have to do it here. */
13272 parse_trace_status (p, ts);
13273
13274 return ts->running;
13275 }
13276
13277 void
13278 remote_target::get_tracepoint_status (struct breakpoint *bp,
13279 struct uploaded_tp *utp)
13280 {
13281 struct remote_state *rs = get_remote_state ();
13282 char *reply;
13283 struct bp_location *loc;
13284 struct tracepoint *tp = (struct tracepoint *) bp;
13285 size_t size = get_remote_packet_size ();
13286
13287 if (tp)
13288 {
13289 tp->hit_count = 0;
13290 tp->traceframe_usage = 0;
13291 for (loc = tp->loc; loc; loc = loc->next)
13292 {
13293 /* If the tracepoint was never downloaded, don't go asking for
13294 any status. */
13295 if (tp->number_on_target == 0)
13296 continue;
13297 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
13298 phex_nz (loc->address, 0));
13299 putpkt (rs->buf);
13300 reply = remote_get_noisy_reply ();
13301 if (reply && *reply)
13302 {
13303 if (*reply == 'V')
13304 parse_tracepoint_status (reply + 1, bp, utp);
13305 }
13306 }
13307 }
13308 else if (utp)
13309 {
13310 utp->hit_count = 0;
13311 utp->traceframe_usage = 0;
13312 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
13313 phex_nz (utp->addr, 0));
13314 putpkt (rs->buf);
13315 reply = remote_get_noisy_reply ();
13316 if (reply && *reply)
13317 {
13318 if (*reply == 'V')
13319 parse_tracepoint_status (reply + 1, bp, utp);
13320 }
13321 }
13322 }
13323
13324 void
13325 remote_target::trace_stop ()
13326 {
13327 struct remote_state *rs = get_remote_state ();
13328
13329 putpkt ("QTStop");
13330 remote_get_noisy_reply ();
13331 if (rs->buf[0] == '\0')
13332 error (_("Target does not support this command."));
13333 if (strcmp (rs->buf.data (), "OK") != 0)
13334 error (_("Bogus reply from target: %s"), rs->buf.data ());
13335 }
13336
13337 int
13338 remote_target::trace_find (enum trace_find_type type, int num,
13339 CORE_ADDR addr1, CORE_ADDR addr2,
13340 int *tpp)
13341 {
13342 struct remote_state *rs = get_remote_state ();
13343 char *endbuf = rs->buf.data () + get_remote_packet_size ();
13344 char *p, *reply;
13345 int target_frameno = -1, target_tracept = -1;
13346
13347 /* Lookups other than by absolute frame number depend on the current
13348 trace selected, so make sure it is correct on the remote end
13349 first. */
13350 if (type != tfind_number)
13351 set_remote_traceframe ();
13352
13353 p = rs->buf.data ();
13354 strcpy (p, "QTFrame:");
13355 p = strchr (p, '\0');
13356 switch (type)
13357 {
13358 case tfind_number:
13359 xsnprintf (p, endbuf - p, "%x", num);
13360 break;
13361 case tfind_pc:
13362 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
13363 break;
13364 case tfind_tp:
13365 xsnprintf (p, endbuf - p, "tdp:%x", num);
13366 break;
13367 case tfind_range:
13368 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13369 phex_nz (addr2, 0));
13370 break;
13371 case tfind_outside:
13372 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13373 phex_nz (addr2, 0));
13374 break;
13375 default:
13376 error (_("Unknown trace find type %d"), type);
13377 }
13378
13379 putpkt (rs->buf);
13380 reply = remote_get_noisy_reply ();
13381 if (*reply == '\0')
13382 error (_("Target does not support this command."));
13383
13384 while (reply && *reply)
13385 switch (*reply)
13386 {
13387 case 'F':
13388 p = ++reply;
13389 target_frameno = (int) strtol (p, &reply, 16);
13390 if (reply == p)
13391 error (_("Unable to parse trace frame number"));
13392 /* Don't update our remote traceframe number cache on failure
13393 to select a remote traceframe. */
13394 if (target_frameno == -1)
13395 return -1;
13396 break;
13397 case 'T':
13398 p = ++reply;
13399 target_tracept = (int) strtol (p, &reply, 16);
13400 if (reply == p)
13401 error (_("Unable to parse tracepoint number"));
13402 break;
13403 case 'O': /* "OK"? */
13404 if (reply[1] == 'K' && reply[2] == '\0')
13405 reply += 2;
13406 else
13407 error (_("Bogus reply from target: %s"), reply);
13408 break;
13409 default:
13410 error (_("Bogus reply from target: %s"), reply);
13411 }
13412 if (tpp)
13413 *tpp = target_tracept;
13414
13415 rs->remote_traceframe_number = target_frameno;
13416 return target_frameno;
13417 }
13418
13419 bool
13420 remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
13421 {
13422 struct remote_state *rs = get_remote_state ();
13423 char *reply;
13424 ULONGEST uval;
13425
13426 set_remote_traceframe ();
13427
13428 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
13429 putpkt (rs->buf);
13430 reply = remote_get_noisy_reply ();
13431 if (reply && *reply)
13432 {
13433 if (*reply == 'V')
13434 {
13435 unpack_varlen_hex (reply + 1, &uval);
13436 *val = (LONGEST) uval;
13437 return true;
13438 }
13439 }
13440 return false;
13441 }
13442
13443 int
13444 remote_target::save_trace_data (const char *filename)
13445 {
13446 struct remote_state *rs = get_remote_state ();
13447 char *p, *reply;
13448
13449 p = rs->buf.data ();
13450 strcpy (p, "QTSave:");
13451 p += strlen (p);
13452 if ((p - rs->buf.data ()) + strlen (filename) * 2
13453 >= get_remote_packet_size ())
13454 error (_("Remote file name too long for trace save packet"));
13455 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
13456 *p++ = '\0';
13457 putpkt (rs->buf);
13458 reply = remote_get_noisy_reply ();
13459 if (*reply == '\0')
13460 error (_("Target does not support this command."));
13461 if (strcmp (reply, "OK") != 0)
13462 error (_("Bogus reply from target: %s"), reply);
13463 return 0;
13464 }
13465
13466 /* This is basically a memory transfer, but needs to be its own packet
13467 because we don't know how the target actually organizes its trace
13468 memory, plus we want to be able to ask for as much as possible, but
13469 not be unhappy if we don't get as much as we ask for. */
13470
13471 LONGEST
13472 remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
13473 {
13474 struct remote_state *rs = get_remote_state ();
13475 char *reply;
13476 char *p;
13477 int rslt;
13478
13479 p = rs->buf.data ();
13480 strcpy (p, "qTBuffer:");
13481 p += strlen (p);
13482 p += hexnumstr (p, offset);
13483 *p++ = ',';
13484 p += hexnumstr (p, len);
13485 *p++ = '\0';
13486
13487 putpkt (rs->buf);
13488 reply = remote_get_noisy_reply ();
13489 if (reply && *reply)
13490 {
13491 /* 'l' by itself means we're at the end of the buffer and
13492 there is nothing more to get. */
13493 if (*reply == 'l')
13494 return 0;
13495
13496 /* Convert the reply into binary. Limit the number of bytes to
13497 convert according to our passed-in buffer size, rather than
13498 what was returned in the packet; if the target is
13499 unexpectedly generous and gives us a bigger reply than we
13500 asked for, we don't want to crash. */
13501 rslt = hex2bin (reply, buf, len);
13502 return rslt;
13503 }
13504
13505 /* Something went wrong, flag as an error. */
13506 return -1;
13507 }
13508
13509 void
13510 remote_target::set_disconnected_tracing (int val)
13511 {
13512 struct remote_state *rs = get_remote_state ();
13513
13514 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
13515 {
13516 char *reply;
13517
13518 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13519 "QTDisconnected:%x", val);
13520 putpkt (rs->buf);
13521 reply = remote_get_noisy_reply ();
13522 if (*reply == '\0')
13523 error (_("Target does not support this command."));
13524 if (strcmp (reply, "OK") != 0)
13525 error (_("Bogus reply from target: %s"), reply);
13526 }
13527 else if (val)
13528 warning (_("Target does not support disconnected tracing."));
13529 }
13530
13531 int
13532 remote_target::core_of_thread (ptid_t ptid)
13533 {
13534 thread_info *info = find_thread_ptid (this, ptid);
13535
13536 if (info != NULL && info->priv != NULL)
13537 return get_remote_thread_info (info)->core;
13538
13539 return -1;
13540 }
13541
13542 void
13543 remote_target::set_circular_trace_buffer (int val)
13544 {
13545 struct remote_state *rs = get_remote_state ();
13546 char *reply;
13547
13548 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13549 "QTBuffer:circular:%x", val);
13550 putpkt (rs->buf);
13551 reply = remote_get_noisy_reply ();
13552 if (*reply == '\0')
13553 error (_("Target does not support this command."));
13554 if (strcmp (reply, "OK") != 0)
13555 error (_("Bogus reply from target: %s"), reply);
13556 }
13557
13558 traceframe_info_up
13559 remote_target::traceframe_info ()
13560 {
13561 gdb::optional<gdb::char_vector> text
13562 = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
13563 NULL);
13564 if (text)
13565 return parse_traceframe_info (text->data ());
13566
13567 return NULL;
13568 }
13569
13570 /* Handle the qTMinFTPILen packet. Returns the minimum length of
13571 instruction on which a fast tracepoint may be placed. Returns -1
13572 if the packet is not supported, and 0 if the minimum instruction
13573 length is unknown. */
13574
13575 int
13576 remote_target::get_min_fast_tracepoint_insn_len ()
13577 {
13578 struct remote_state *rs = get_remote_state ();
13579 char *reply;
13580
13581 /* If we're not debugging a process yet, the IPA can't be
13582 loaded. */
13583 if (!target_has_execution)
13584 return 0;
13585
13586 /* Make sure the remote is pointing at the right process. */
13587 set_general_process ();
13588
13589 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
13590 putpkt (rs->buf);
13591 reply = remote_get_noisy_reply ();
13592 if (*reply == '\0')
13593 return -1;
13594 else
13595 {
13596 ULONGEST min_insn_len;
13597
13598 unpack_varlen_hex (reply, &min_insn_len);
13599
13600 return (int) min_insn_len;
13601 }
13602 }
13603
13604 void
13605 remote_target::set_trace_buffer_size (LONGEST val)
13606 {
13607 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13608 {
13609 struct remote_state *rs = get_remote_state ();
13610 char *buf = rs->buf.data ();
13611 char *endbuf = buf + get_remote_packet_size ();
13612 enum packet_result result;
13613
13614 gdb_assert (val >= 0 || val == -1);
13615 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13616 /* Send -1 as literal "-1" to avoid host size dependency. */
13617 if (val < 0)
13618 {
13619 *buf++ = '-';
13620 buf += hexnumstr (buf, (ULONGEST) -val);
13621 }
13622 else
13623 buf += hexnumstr (buf, (ULONGEST) val);
13624
13625 putpkt (rs->buf);
13626 remote_get_noisy_reply ();
13627 result = packet_ok (rs->buf,
13628 &remote_protocol_packets[PACKET_QTBuffer_size]);
13629
13630 if (result != PACKET_OK)
13631 warning (_("Bogus reply from target: %s"), rs->buf.data ());
13632 }
13633 }
13634
13635 bool
13636 remote_target::set_trace_notes (const char *user, const char *notes,
13637 const char *stop_notes)
13638 {
13639 struct remote_state *rs = get_remote_state ();
13640 char *reply;
13641 char *buf = rs->buf.data ();
13642 char *endbuf = buf + get_remote_packet_size ();
13643 int nbytes;
13644
13645 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13646 if (user)
13647 {
13648 buf += xsnprintf (buf, endbuf - buf, "user:");
13649 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13650 buf += 2 * nbytes;
13651 *buf++ = ';';
13652 }
13653 if (notes)
13654 {
13655 buf += xsnprintf (buf, endbuf - buf, "notes:");
13656 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13657 buf += 2 * nbytes;
13658 *buf++ = ';';
13659 }
13660 if (stop_notes)
13661 {
13662 buf += xsnprintf (buf, endbuf - buf, "tstop:");
13663 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13664 buf += 2 * nbytes;
13665 *buf++ = ';';
13666 }
13667 /* Ensure the buffer is terminated. */
13668 *buf = '\0';
13669
13670 putpkt (rs->buf);
13671 reply = remote_get_noisy_reply ();
13672 if (*reply == '\0')
13673 return false;
13674
13675 if (strcmp (reply, "OK") != 0)
13676 error (_("Bogus reply from target: %s"), reply);
13677
13678 return true;
13679 }
13680
13681 bool
13682 remote_target::use_agent (bool use)
13683 {
13684 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13685 {
13686 struct remote_state *rs = get_remote_state ();
13687
13688 /* If the stub supports QAgent. */
13689 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
13690 putpkt (rs->buf);
13691 getpkt (&rs->buf, 0);
13692
13693 if (strcmp (rs->buf.data (), "OK") == 0)
13694 {
13695 ::use_agent = use;
13696 return true;
13697 }
13698 }
13699
13700 return false;
13701 }
13702
13703 bool
13704 remote_target::can_use_agent ()
13705 {
13706 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13707 }
13708
13709 struct btrace_target_info
13710 {
13711 /* The ptid of the traced thread. */
13712 ptid_t ptid;
13713
13714 /* The obtained branch trace configuration. */
13715 struct btrace_config conf;
13716 };
13717
13718 /* Reset our idea of our target's btrace configuration. */
13719
13720 static void
13721 remote_btrace_reset (remote_state *rs)
13722 {
13723 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13724 }
13725
13726 /* Synchronize the configuration with the target. */
13727
13728 void
13729 remote_target::btrace_sync_conf (const btrace_config *conf)
13730 {
13731 struct packet_config *packet;
13732 struct remote_state *rs;
13733 char *buf, *pos, *endbuf;
13734
13735 rs = get_remote_state ();
13736 buf = rs->buf.data ();
13737 endbuf = buf + get_remote_packet_size ();
13738
13739 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13740 if (packet_config_support (packet) == PACKET_ENABLE
13741 && conf->bts.size != rs->btrace_config.bts.size)
13742 {
13743 pos = buf;
13744 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13745 conf->bts.size);
13746
13747 putpkt (buf);
13748 getpkt (&rs->buf, 0);
13749
13750 if (packet_ok (buf, packet) == PACKET_ERROR)
13751 {
13752 if (buf[0] == 'E' && buf[1] == '.')
13753 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13754 else
13755 error (_("Failed to configure the BTS buffer size."));
13756 }
13757
13758 rs->btrace_config.bts.size = conf->bts.size;
13759 }
13760
13761 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13762 if (packet_config_support (packet) == PACKET_ENABLE
13763 && conf->pt.size != rs->btrace_config.pt.size)
13764 {
13765 pos = buf;
13766 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13767 conf->pt.size);
13768
13769 putpkt (buf);
13770 getpkt (&rs->buf, 0);
13771
13772 if (packet_ok (buf, packet) == PACKET_ERROR)
13773 {
13774 if (buf[0] == 'E' && buf[1] == '.')
13775 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13776 else
13777 error (_("Failed to configure the trace buffer size."));
13778 }
13779
13780 rs->btrace_config.pt.size = conf->pt.size;
13781 }
13782 }
13783
13784 /* Read the current thread's btrace configuration from the target and
13785 store it into CONF. */
13786
13787 static void
13788 btrace_read_config (struct btrace_config *conf)
13789 {
13790 gdb::optional<gdb::char_vector> xml
13791 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
13792 if (xml)
13793 parse_xml_btrace_conf (conf, xml->data ());
13794 }
13795
13796 /* Maybe reopen target btrace. */
13797
13798 void
13799 remote_target::remote_btrace_maybe_reopen ()
13800 {
13801 struct remote_state *rs = get_remote_state ();
13802 int btrace_target_pushed = 0;
13803 #if !defined (HAVE_LIBIPT)
13804 int warned = 0;
13805 #endif
13806
13807 /* Don't bother walking the entirety of the remote thread list when
13808 we know the feature isn't supported by the remote. */
13809 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
13810 return;
13811
13812 scoped_restore_current_thread restore_thread;
13813
13814 for (thread_info *tp : all_non_exited_threads (this))
13815 {
13816 set_general_thread (tp->ptid);
13817
13818 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13819 btrace_read_config (&rs->btrace_config);
13820
13821 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13822 continue;
13823
13824 #if !defined (HAVE_LIBIPT)
13825 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13826 {
13827 if (!warned)
13828 {
13829 warned = 1;
13830 warning (_("Target is recording using Intel Processor Trace "
13831 "but support was disabled at compile time."));
13832 }
13833
13834 continue;
13835 }
13836 #endif /* !defined (HAVE_LIBIPT) */
13837
13838 /* Push target, once, but before anything else happens. This way our
13839 changes to the threads will be cleaned up by unpushing the target
13840 in case btrace_read_config () throws. */
13841 if (!btrace_target_pushed)
13842 {
13843 btrace_target_pushed = 1;
13844 record_btrace_push_target ();
13845 printf_filtered (_("Target is recording using %s.\n"),
13846 btrace_format_string (rs->btrace_config.format));
13847 }
13848
13849 tp->btrace.target = XCNEW (struct btrace_target_info);
13850 tp->btrace.target->ptid = tp->ptid;
13851 tp->btrace.target->conf = rs->btrace_config;
13852 }
13853 }
13854
13855 /* Enable branch tracing. */
13856
13857 struct btrace_target_info *
13858 remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
13859 {
13860 struct btrace_target_info *tinfo = NULL;
13861 struct packet_config *packet = NULL;
13862 struct remote_state *rs = get_remote_state ();
13863 char *buf = rs->buf.data ();
13864 char *endbuf = buf + get_remote_packet_size ();
13865
13866 switch (conf->format)
13867 {
13868 case BTRACE_FORMAT_BTS:
13869 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13870 break;
13871
13872 case BTRACE_FORMAT_PT:
13873 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13874 break;
13875 }
13876
13877 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13878 error (_("Target does not support branch tracing."));
13879
13880 btrace_sync_conf (conf);
13881
13882 set_general_thread (ptid);
13883
13884 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13885 putpkt (rs->buf);
13886 getpkt (&rs->buf, 0);
13887
13888 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13889 {
13890 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13891 error (_("Could not enable branch tracing for %s: %s"),
13892 target_pid_to_str (ptid).c_str (), &rs->buf[2]);
13893 else
13894 error (_("Could not enable branch tracing for %s."),
13895 target_pid_to_str (ptid).c_str ());
13896 }
13897
13898 tinfo = XCNEW (struct btrace_target_info);
13899 tinfo->ptid = ptid;
13900
13901 /* If we fail to read the configuration, we lose some information, but the
13902 tracing itself is not impacted. */
13903 try
13904 {
13905 btrace_read_config (&tinfo->conf);
13906 }
13907 catch (const gdb_exception_error &err)
13908 {
13909 if (err.message != NULL)
13910 warning ("%s", err.what ());
13911 }
13912
13913 return tinfo;
13914 }
13915
13916 /* Disable branch tracing. */
13917
13918 void
13919 remote_target::disable_btrace (struct btrace_target_info *tinfo)
13920 {
13921 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13922 struct remote_state *rs = get_remote_state ();
13923 char *buf = rs->buf.data ();
13924 char *endbuf = buf + get_remote_packet_size ();
13925
13926 if (packet_config_support (packet) != PACKET_ENABLE)
13927 error (_("Target does not support branch tracing."));
13928
13929 set_general_thread (tinfo->ptid);
13930
13931 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13932 putpkt (rs->buf);
13933 getpkt (&rs->buf, 0);
13934
13935 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13936 {
13937 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13938 error (_("Could not disable branch tracing for %s: %s"),
13939 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
13940 else
13941 error (_("Could not disable branch tracing for %s."),
13942 target_pid_to_str (tinfo->ptid).c_str ());
13943 }
13944
13945 xfree (tinfo);
13946 }
13947
13948 /* Teardown branch tracing. */
13949
13950 void
13951 remote_target::teardown_btrace (struct btrace_target_info *tinfo)
13952 {
13953 /* We must not talk to the target during teardown. */
13954 xfree (tinfo);
13955 }
13956
13957 /* Read the branch trace. */
13958
13959 enum btrace_error
13960 remote_target::read_btrace (struct btrace_data *btrace,
13961 struct btrace_target_info *tinfo,
13962 enum btrace_read_type type)
13963 {
13964 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13965 const char *annex;
13966
13967 if (packet_config_support (packet) != PACKET_ENABLE)
13968 error (_("Target does not support branch tracing."));
13969
13970 #if !defined(HAVE_LIBEXPAT)
13971 error (_("Cannot process branch tracing result. XML parsing not supported."));
13972 #endif
13973
13974 switch (type)
13975 {
13976 case BTRACE_READ_ALL:
13977 annex = "all";
13978 break;
13979 case BTRACE_READ_NEW:
13980 annex = "new";
13981 break;
13982 case BTRACE_READ_DELTA:
13983 annex = "delta";
13984 break;
13985 default:
13986 internal_error (__FILE__, __LINE__,
13987 _("Bad branch tracing read type: %u."),
13988 (unsigned int) type);
13989 }
13990
13991 gdb::optional<gdb::char_vector> xml
13992 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
13993 if (!xml)
13994 return BTRACE_ERR_UNKNOWN;
13995
13996 parse_xml_btrace (btrace, xml->data ());
13997
13998 return BTRACE_ERR_NONE;
13999 }
14000
14001 const struct btrace_config *
14002 remote_target::btrace_conf (const struct btrace_target_info *tinfo)
14003 {
14004 return &tinfo->conf;
14005 }
14006
14007 bool
14008 remote_target::augmented_libraries_svr4_read ()
14009 {
14010 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
14011 == PACKET_ENABLE);
14012 }
14013
14014 /* Implementation of to_load. */
14015
14016 void
14017 remote_target::load (const char *name, int from_tty)
14018 {
14019 generic_load (name, from_tty);
14020 }
14021
14022 /* Accepts an integer PID; returns a string representing a file that
14023 can be opened on the remote side to get the symbols for the child
14024 process. Returns NULL if the operation is not supported. */
14025
14026 char *
14027 remote_target::pid_to_exec_file (int pid)
14028 {
14029 static gdb::optional<gdb::char_vector> filename;
14030 char *annex = NULL;
14031
14032 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
14033 return NULL;
14034
14035 inferior *inf = find_inferior_pid (this, pid);
14036 if (inf == NULL)
14037 internal_error (__FILE__, __LINE__,
14038 _("not currently attached to process %d"), pid);
14039
14040 if (!inf->fake_pid_p)
14041 {
14042 const int annex_size = 9;
14043
14044 annex = (char *) alloca (annex_size);
14045 xsnprintf (annex, annex_size, "%x", pid);
14046 }
14047
14048 filename = target_read_stralloc (current_top_target (),
14049 TARGET_OBJECT_EXEC_FILE, annex);
14050
14051 return filename ? filename->data () : nullptr;
14052 }
14053
14054 /* Implement the to_can_do_single_step target_ops method. */
14055
14056 int
14057 remote_target::can_do_single_step ()
14058 {
14059 /* We can only tell whether target supports single step or not by
14060 supported s and S vCont actions if the stub supports vContSupported
14061 feature. If the stub doesn't support vContSupported feature,
14062 we have conservatively to think target doesn't supports single
14063 step. */
14064 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
14065 {
14066 struct remote_state *rs = get_remote_state ();
14067
14068 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14069 remote_vcont_probe ();
14070
14071 return rs->supports_vCont.s && rs->supports_vCont.S;
14072 }
14073 else
14074 return 0;
14075 }
14076
14077 /* Implementation of the to_execution_direction method for the remote
14078 target. */
14079
14080 enum exec_direction_kind
14081 remote_target::execution_direction ()
14082 {
14083 struct remote_state *rs = get_remote_state ();
14084
14085 return rs->last_resume_exec_dir;
14086 }
14087
14088 /* Return pointer to the thread_info struct which corresponds to
14089 THREAD_HANDLE (having length HANDLE_LEN). */
14090
14091 thread_info *
14092 remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
14093 int handle_len,
14094 inferior *inf)
14095 {
14096 for (thread_info *tp : all_non_exited_threads (this))
14097 {
14098 remote_thread_info *priv = get_remote_thread_info (tp);
14099
14100 if (tp->inf == inf && priv != NULL)
14101 {
14102 if (handle_len != priv->thread_handle.size ())
14103 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
14104 handle_len, priv->thread_handle.size ());
14105 if (memcmp (thread_handle, priv->thread_handle.data (),
14106 handle_len) == 0)
14107 return tp;
14108 }
14109 }
14110
14111 return NULL;
14112 }
14113
14114 gdb::byte_vector
14115 remote_target::thread_info_to_thread_handle (struct thread_info *tp)
14116 {
14117 remote_thread_info *priv = get_remote_thread_info (tp);
14118 return priv->thread_handle;
14119 }
14120
14121 bool
14122 remote_target::can_async_p ()
14123 {
14124 struct remote_state *rs = get_remote_state ();
14125
14126 /* We don't go async if the user has explicitly prevented it with the
14127 "maint set target-async" command. */
14128 if (!target_async_permitted)
14129 return false;
14130
14131 /* We're async whenever the serial device is. */
14132 return serial_can_async_p (rs->remote_desc);
14133 }
14134
14135 bool
14136 remote_target::is_async_p ()
14137 {
14138 struct remote_state *rs = get_remote_state ();
14139
14140 if (!target_async_permitted)
14141 /* We only enable async when the user specifically asks for it. */
14142 return false;
14143
14144 /* We're async whenever the serial device is. */
14145 return serial_is_async_p (rs->remote_desc);
14146 }
14147
14148 /* Pass the SERIAL event on and up to the client. One day this code
14149 will be able to delay notifying the client of an event until the
14150 point where an entire packet has been received. */
14151
14152 static serial_event_ftype remote_async_serial_handler;
14153
14154 static void
14155 remote_async_serial_handler (struct serial *scb, void *context)
14156 {
14157 /* Don't propogate error information up to the client. Instead let
14158 the client find out about the error by querying the target. */
14159 inferior_event_handler (INF_REG_EVENT, NULL);
14160 }
14161
14162 static void
14163 remote_async_inferior_event_handler (gdb_client_data data)
14164 {
14165 inferior_event_handler (INF_REG_EVENT, data);
14166 }
14167
14168 int
14169 remote_target::async_wait_fd ()
14170 {
14171 struct remote_state *rs = get_remote_state ();
14172 return rs->remote_desc->fd;
14173 }
14174
14175 void
14176 remote_target::async (int enable)
14177 {
14178 struct remote_state *rs = get_remote_state ();
14179
14180 if (enable)
14181 {
14182 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
14183
14184 /* If there are pending events in the stop reply queue tell the
14185 event loop to process them. */
14186 if (!rs->stop_reply_queue.empty ())
14187 mark_async_event_handler (rs->remote_async_inferior_event_token);
14188 /* For simplicity, below we clear the pending events token
14189 without remembering whether it is marked, so here we always
14190 mark it. If there's actually no pending notification to
14191 process, this ends up being a no-op (other than a spurious
14192 event-loop wakeup). */
14193 if (target_is_non_stop_p ())
14194 mark_async_event_handler (rs->notif_state->get_pending_events_token);
14195 }
14196 else
14197 {
14198 serial_async (rs->remote_desc, NULL, NULL);
14199 /* If the core is disabling async, it doesn't want to be
14200 disturbed with target events. Clear all async event sources
14201 too. */
14202 clear_async_event_handler (rs->remote_async_inferior_event_token);
14203 if (target_is_non_stop_p ())
14204 clear_async_event_handler (rs->notif_state->get_pending_events_token);
14205 }
14206 }
14207
14208 /* Implementation of the to_thread_events method. */
14209
14210 void
14211 remote_target::thread_events (int enable)
14212 {
14213 struct remote_state *rs = get_remote_state ();
14214 size_t size = get_remote_packet_size ();
14215
14216 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14217 return;
14218
14219 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
14220 putpkt (rs->buf);
14221 getpkt (&rs->buf, 0);
14222
14223 switch (packet_ok (rs->buf,
14224 &remote_protocol_packets[PACKET_QThreadEvents]))
14225 {
14226 case PACKET_OK:
14227 if (strcmp (rs->buf.data (), "OK") != 0)
14228 error (_("Remote refused setting thread events: %s"), rs->buf.data ());
14229 break;
14230 case PACKET_ERROR:
14231 warning (_("Remote failure reply: %s"), rs->buf.data ());
14232 break;
14233 case PACKET_UNKNOWN:
14234 break;
14235 }
14236 }
14237
14238 static void
14239 show_remote_cmd (const char *args, int from_tty)
14240 {
14241 /* We can't just use cmd_show_list here, because we want to skip
14242 the redundant "show remote Z-packet" and the legacy aliases. */
14243 struct cmd_list_element *list = remote_show_cmdlist;
14244 struct ui_out *uiout = current_uiout;
14245
14246 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
14247 for (; list != NULL; list = list->next)
14248 if (strcmp (list->name, "Z-packet") == 0)
14249 continue;
14250 else if (list->type == not_set_cmd)
14251 /* Alias commands are exactly like the original, except they
14252 don't have the normal type. */
14253 continue;
14254 else
14255 {
14256 ui_out_emit_tuple option_emitter (uiout, "option");
14257
14258 uiout->field_string ("name", list->name);
14259 uiout->text (": ");
14260 if (list->type == show_cmd)
14261 do_show_command (NULL, from_tty, list);
14262 else
14263 cmd_func (list, NULL, from_tty);
14264 }
14265 }
14266
14267
14268 /* Function to be called whenever a new objfile (shlib) is detected. */
14269 static void
14270 remote_new_objfile (struct objfile *objfile)
14271 {
14272 remote_target *remote = get_current_remote_target ();
14273
14274 if (remote != NULL) /* Have a remote connection. */
14275 remote->remote_check_symbols ();
14276 }
14277
14278 /* Pull all the tracepoints defined on the target and create local
14279 data structures representing them. We don't want to create real
14280 tracepoints yet, we don't want to mess up the user's existing
14281 collection. */
14282
14283 int
14284 remote_target::upload_tracepoints (struct uploaded_tp **utpp)
14285 {
14286 struct remote_state *rs = get_remote_state ();
14287 char *p;
14288
14289 /* Ask for a first packet of tracepoint definition. */
14290 putpkt ("qTfP");
14291 getpkt (&rs->buf, 0);
14292 p = rs->buf.data ();
14293 while (*p && *p != 'l')
14294 {
14295 parse_tracepoint_definition (p, utpp);
14296 /* Ask for another packet of tracepoint definition. */
14297 putpkt ("qTsP");
14298 getpkt (&rs->buf, 0);
14299 p = rs->buf.data ();
14300 }
14301 return 0;
14302 }
14303
14304 int
14305 remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
14306 {
14307 struct remote_state *rs = get_remote_state ();
14308 char *p;
14309
14310 /* Ask for a first packet of variable definition. */
14311 putpkt ("qTfV");
14312 getpkt (&rs->buf, 0);
14313 p = rs->buf.data ();
14314 while (*p && *p != 'l')
14315 {
14316 parse_tsv_definition (p, utsvp);
14317 /* Ask for another packet of variable definition. */
14318 putpkt ("qTsV");
14319 getpkt (&rs->buf, 0);
14320 p = rs->buf.data ();
14321 }
14322 return 0;
14323 }
14324
14325 /* The "set/show range-stepping" show hook. */
14326
14327 static void
14328 show_range_stepping (struct ui_file *file, int from_tty,
14329 struct cmd_list_element *c,
14330 const char *value)
14331 {
14332 fprintf_filtered (file,
14333 _("Debugger's willingness to use range stepping "
14334 "is %s.\n"), value);
14335 }
14336
14337 /* Return true if the vCont;r action is supported by the remote
14338 stub. */
14339
14340 bool
14341 remote_target::vcont_r_supported ()
14342 {
14343 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14344 remote_vcont_probe ();
14345
14346 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14347 && get_remote_state ()->supports_vCont.r);
14348 }
14349
14350 /* The "set/show range-stepping" set hook. */
14351
14352 static void
14353 set_range_stepping (const char *ignore_args, int from_tty,
14354 struct cmd_list_element *c)
14355 {
14356 /* When enabling, check whether range stepping is actually supported
14357 by the target, and warn if not. */
14358 if (use_range_stepping)
14359 {
14360 remote_target *remote = get_current_remote_target ();
14361 if (remote == NULL
14362 || !remote->vcont_r_supported ())
14363 warning (_("Range stepping is not supported by the current target"));
14364 }
14365 }
14366
14367 void _initialize_remote ();
14368 void
14369 _initialize_remote ()
14370 {
14371 struct cmd_list_element *cmd;
14372 const char *cmd_name;
14373
14374 /* architecture specific data */
14375 remote_g_packet_data_handle =
14376 gdbarch_data_register_pre_init (remote_g_packet_data_init);
14377
14378 add_target (remote_target_info, remote_target::open);
14379 add_target (extended_remote_target_info, extended_remote_target::open);
14380
14381 /* Hook into new objfile notification. */
14382 gdb::observers::new_objfile.attach (remote_new_objfile);
14383
14384 #if 0
14385 init_remote_threadtests ();
14386 #endif
14387
14388 /* set/show remote ... */
14389
14390 add_basic_prefix_cmd ("remote", class_maintenance, _("\
14391 Remote protocol specific variables.\n\
14392 Configure various remote-protocol specific variables such as\n\
14393 the packets being used."),
14394 &remote_set_cmdlist, "set remote ",
14395 0 /* allow-unknown */, &setlist);
14396 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14397 Remote protocol specific variables.\n\
14398 Configure various remote-protocol specific variables such as\n\
14399 the packets being used."),
14400 &remote_show_cmdlist, "show remote ",
14401 0 /* allow-unknown */, &showlist);
14402
14403 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14404 Compare section data on target to the exec file.\n\
14405 Argument is a single section name (default: all loaded sections).\n\
14406 To compare only read-only loaded sections, specify the -r option."),
14407 &cmdlist);
14408
14409 add_cmd ("packet", class_maintenance, packet_command, _("\
14410 Send an arbitrary packet to a remote target.\n\
14411 maintenance packet TEXT\n\
14412 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14413 this command sends the string TEXT to the inferior, and displays the\n\
14414 response packet. GDB supplies the initial `$' character, and the\n\
14415 terminating `#' character and checksum."),
14416 &maintenancelist);
14417
14418 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14419 Set whether to send break if interrupted."), _("\
14420 Show whether to send break if interrupted."), _("\
14421 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14422 set_remotebreak, show_remotebreak,
14423 &setlist, &showlist);
14424 cmd_name = "remotebreak";
14425 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14426 deprecate_cmd (cmd, "set remote interrupt-sequence");
14427 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14428 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14429 deprecate_cmd (cmd, "show remote interrupt-sequence");
14430
14431 add_setshow_enum_cmd ("interrupt-sequence", class_support,
14432 interrupt_sequence_modes, &interrupt_sequence_mode,
14433 _("\
14434 Set interrupt sequence to remote target."), _("\
14435 Show interrupt sequence to remote target."), _("\
14436 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14437 NULL, show_interrupt_sequence,
14438 &remote_set_cmdlist,
14439 &remote_show_cmdlist);
14440
14441 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14442 &interrupt_on_connect, _("\
14443 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14444 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14445 If set, interrupt sequence is sent to remote target."),
14446 NULL, NULL,
14447 &remote_set_cmdlist, &remote_show_cmdlist);
14448
14449 /* Install commands for configuring memory read/write packets. */
14450
14451 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14452 Set the maximum number of bytes per memory write packet (deprecated)."),
14453 &setlist);
14454 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14455 Show the maximum number of bytes per memory write packet (deprecated)."),
14456 &showlist);
14457 add_cmd ("memory-write-packet-size", no_class,
14458 set_memory_write_packet_size, _("\
14459 Set the maximum number of bytes per memory-write packet.\n\
14460 Specify the number of bytes in a packet or 0 (zero) for the\n\
14461 default packet size. The actual limit is further reduced\n\
14462 dependent on the target. Specify ``fixed'' to disable the\n\
14463 further restriction and ``limit'' to enable that restriction."),
14464 &remote_set_cmdlist);
14465 add_cmd ("memory-read-packet-size", no_class,
14466 set_memory_read_packet_size, _("\
14467 Set the maximum number of bytes per memory-read packet.\n\
14468 Specify the number of bytes in a packet or 0 (zero) for the\n\
14469 default packet size. The actual limit is further reduced\n\
14470 dependent on the target. Specify ``fixed'' to disable the\n\
14471 further restriction and ``limit'' to enable that restriction."),
14472 &remote_set_cmdlist);
14473 add_cmd ("memory-write-packet-size", no_class,
14474 show_memory_write_packet_size,
14475 _("Show the maximum number of bytes per memory-write packet."),
14476 &remote_show_cmdlist);
14477 add_cmd ("memory-read-packet-size", no_class,
14478 show_memory_read_packet_size,
14479 _("Show the maximum number of bytes per memory-read packet."),
14480 &remote_show_cmdlist);
14481
14482 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
14483 &remote_hw_watchpoint_limit, _("\
14484 Set the maximum number of target hardware watchpoints."), _("\
14485 Show the maximum number of target hardware watchpoints."), _("\
14486 Specify \"unlimited\" for unlimited hardware watchpoints."),
14487 NULL, show_hardware_watchpoint_limit,
14488 &remote_set_cmdlist,
14489 &remote_show_cmdlist);
14490 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
14491 no_class,
14492 &remote_hw_watchpoint_length_limit, _("\
14493 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14494 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14495 Specify \"unlimited\" to allow watchpoints of unlimited size."),
14496 NULL, show_hardware_watchpoint_length_limit,
14497 &remote_set_cmdlist, &remote_show_cmdlist);
14498 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
14499 &remote_hw_breakpoint_limit, _("\
14500 Set the maximum number of target hardware breakpoints."), _("\
14501 Show the maximum number of target hardware breakpoints."), _("\
14502 Specify \"unlimited\" for unlimited hardware breakpoints."),
14503 NULL, show_hardware_breakpoint_limit,
14504 &remote_set_cmdlist, &remote_show_cmdlist);
14505
14506 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14507 &remote_address_size, _("\
14508 Set the maximum size of the address (in bits) in a memory packet."), _("\
14509 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14510 NULL,
14511 NULL, /* FIXME: i18n: */
14512 &setlist, &showlist);
14513
14514 init_all_packet_configs ();
14515
14516 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14517 "X", "binary-download", 1);
14518
14519 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14520 "vCont", "verbose-resume", 0);
14521
14522 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14523 "QPassSignals", "pass-signals", 0);
14524
14525 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14526 "QCatchSyscalls", "catch-syscalls", 0);
14527
14528 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14529 "QProgramSignals", "program-signals", 0);
14530
14531 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14532 "QSetWorkingDir", "set-working-dir", 0);
14533
14534 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14535 "QStartupWithShell", "startup-with-shell", 0);
14536
14537 add_packet_config_cmd (&remote_protocol_packets
14538 [PACKET_QEnvironmentHexEncoded],
14539 "QEnvironmentHexEncoded", "environment-hex-encoded",
14540 0);
14541
14542 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14543 "QEnvironmentReset", "environment-reset",
14544 0);
14545
14546 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14547 "QEnvironmentUnset", "environment-unset",
14548 0);
14549
14550 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14551 "qSymbol", "symbol-lookup", 0);
14552
14553 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14554 "P", "set-register", 1);
14555
14556 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14557 "p", "fetch-register", 1);
14558
14559 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14560 "Z0", "software-breakpoint", 0);
14561
14562 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14563 "Z1", "hardware-breakpoint", 0);
14564
14565 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14566 "Z2", "write-watchpoint", 0);
14567
14568 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14569 "Z3", "read-watchpoint", 0);
14570
14571 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14572 "Z4", "access-watchpoint", 0);
14573
14574 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14575 "qXfer:auxv:read", "read-aux-vector", 0);
14576
14577 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14578 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14579
14580 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14581 "qXfer:features:read", "target-features", 0);
14582
14583 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14584 "qXfer:libraries:read", "library-info", 0);
14585
14586 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14587 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14588
14589 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14590 "qXfer:memory-map:read", "memory-map", 0);
14591
14592 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14593 "qXfer:osdata:read", "osdata", 0);
14594
14595 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14596 "qXfer:threads:read", "threads", 0);
14597
14598 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14599 "qXfer:siginfo:read", "read-siginfo-object", 0);
14600
14601 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14602 "qXfer:siginfo:write", "write-siginfo-object", 0);
14603
14604 add_packet_config_cmd
14605 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14606 "qXfer:traceframe-info:read", "traceframe-info", 0);
14607
14608 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14609 "qXfer:uib:read", "unwind-info-block", 0);
14610
14611 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14612 "qGetTLSAddr", "get-thread-local-storage-address",
14613 0);
14614
14615 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14616 "qGetTIBAddr", "get-thread-information-block-address",
14617 0);
14618
14619 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14620 "bc", "reverse-continue", 0);
14621
14622 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14623 "bs", "reverse-step", 0);
14624
14625 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14626 "qSupported", "supported-packets", 0);
14627
14628 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14629 "qSearch:memory", "search-memory", 0);
14630
14631 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14632 "qTStatus", "trace-status", 0);
14633
14634 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14635 "vFile:setfs", "hostio-setfs", 0);
14636
14637 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14638 "vFile:open", "hostio-open", 0);
14639
14640 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14641 "vFile:pread", "hostio-pread", 0);
14642
14643 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14644 "vFile:pwrite", "hostio-pwrite", 0);
14645
14646 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14647 "vFile:close", "hostio-close", 0);
14648
14649 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14650 "vFile:unlink", "hostio-unlink", 0);
14651
14652 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14653 "vFile:readlink", "hostio-readlink", 0);
14654
14655 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14656 "vFile:fstat", "hostio-fstat", 0);
14657
14658 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14659 "vAttach", "attach", 0);
14660
14661 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14662 "vRun", "run", 0);
14663
14664 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14665 "QStartNoAckMode", "noack", 0);
14666
14667 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14668 "vKill", "kill", 0);
14669
14670 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14671 "qAttached", "query-attached", 0);
14672
14673 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14674 "ConditionalTracepoints",
14675 "conditional-tracepoints", 0);
14676
14677 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14678 "ConditionalBreakpoints",
14679 "conditional-breakpoints", 0);
14680
14681 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14682 "BreakpointCommands",
14683 "breakpoint-commands", 0);
14684
14685 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14686 "FastTracepoints", "fast-tracepoints", 0);
14687
14688 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14689 "TracepointSource", "TracepointSource", 0);
14690
14691 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14692 "QAllow", "allow", 0);
14693
14694 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14695 "StaticTracepoints", "static-tracepoints", 0);
14696
14697 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14698 "InstallInTrace", "install-in-trace", 0);
14699
14700 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14701 "qXfer:statictrace:read", "read-sdata-object", 0);
14702
14703 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14704 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14705
14706 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14707 "QDisableRandomization", "disable-randomization", 0);
14708
14709 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14710 "QAgent", "agent", 0);
14711
14712 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14713 "QTBuffer:size", "trace-buffer-size", 0);
14714
14715 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14716 "Qbtrace:off", "disable-btrace", 0);
14717
14718 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14719 "Qbtrace:bts", "enable-btrace-bts", 0);
14720
14721 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14722 "Qbtrace:pt", "enable-btrace-pt", 0);
14723
14724 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14725 "qXfer:btrace", "read-btrace", 0);
14726
14727 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14728 "qXfer:btrace-conf", "read-btrace-conf", 0);
14729
14730 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14731 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14732
14733 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14734 "multiprocess-feature", "multiprocess-feature", 0);
14735
14736 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14737 "swbreak-feature", "swbreak-feature", 0);
14738
14739 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14740 "hwbreak-feature", "hwbreak-feature", 0);
14741
14742 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14743 "fork-event-feature", "fork-event-feature", 0);
14744
14745 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14746 "vfork-event-feature", "vfork-event-feature", 0);
14747
14748 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14749 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14750
14751 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14752 "vContSupported", "verbose-resume-supported", 0);
14753
14754 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14755 "exec-event-feature", "exec-event-feature", 0);
14756
14757 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14758 "vCtrlC", "ctrl-c", 0);
14759
14760 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14761 "QThreadEvents", "thread-events", 0);
14762
14763 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14764 "N stop reply", "no-resumed-stop-reply", 0);
14765
14766 /* Assert that we've registered "set remote foo-packet" commands
14767 for all packet configs. */
14768 {
14769 int i;
14770
14771 for (i = 0; i < PACKET_MAX; i++)
14772 {
14773 /* Ideally all configs would have a command associated. Some
14774 still don't though. */
14775 int excepted;
14776
14777 switch (i)
14778 {
14779 case PACKET_QNonStop:
14780 case PACKET_EnableDisableTracepoints_feature:
14781 case PACKET_tracenz_feature:
14782 case PACKET_DisconnectedTracing_feature:
14783 case PACKET_augmented_libraries_svr4_read_feature:
14784 case PACKET_qCRC:
14785 /* Additions to this list need to be well justified:
14786 pre-existing packets are OK; new packets are not. */
14787 excepted = 1;
14788 break;
14789 default:
14790 excepted = 0;
14791 break;
14792 }
14793
14794 /* This catches both forgetting to add a config command, and
14795 forgetting to remove a packet from the exception list. */
14796 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14797 }
14798 }
14799
14800 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14801 Z sub-packet has its own set and show commands, but users may
14802 have sets to this variable in their .gdbinit files (or in their
14803 documentation). */
14804 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14805 &remote_Z_packet_detect, _("\
14806 Set use of remote protocol `Z' packets."), _("\
14807 Show use of remote protocol `Z' packets."), _("\
14808 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14809 packets."),
14810 set_remote_protocol_Z_packet_cmd,
14811 show_remote_protocol_Z_packet_cmd,
14812 /* FIXME: i18n: Use of remote protocol
14813 `Z' packets is %s. */
14814 &remote_set_cmdlist, &remote_show_cmdlist);
14815
14816 add_basic_prefix_cmd ("remote", class_files, _("\
14817 Manipulate files on the remote system.\n\
14818 Transfer files to and from the remote target system."),
14819 &remote_cmdlist, "remote ",
14820 0 /* allow-unknown */, &cmdlist);
14821
14822 add_cmd ("put", class_files, remote_put_command,
14823 _("Copy a local file to the remote system."),
14824 &remote_cmdlist);
14825
14826 add_cmd ("get", class_files, remote_get_command,
14827 _("Copy a remote file to the local system."),
14828 &remote_cmdlist);
14829
14830 add_cmd ("delete", class_files, remote_delete_command,
14831 _("Delete a remote file."),
14832 &remote_cmdlist);
14833
14834 add_setshow_string_noescape_cmd ("exec-file", class_files,
14835 &remote_exec_file_var, _("\
14836 Set the remote pathname for \"run\"."), _("\
14837 Show the remote pathname for \"run\"."), NULL,
14838 set_remote_exec_file,
14839 show_remote_exec_file,
14840 &remote_set_cmdlist,
14841 &remote_show_cmdlist);
14842
14843 add_setshow_boolean_cmd ("range-stepping", class_run,
14844 &use_range_stepping, _("\
14845 Enable or disable range stepping."), _("\
14846 Show whether target-assisted range stepping is enabled."), _("\
14847 If on, and the target supports it, when stepping a source line, GDB\n\
14848 tells the target to step the corresponding range of addresses itself instead\n\
14849 of issuing multiple single-steps. This speeds up source level\n\
14850 stepping. If off, GDB always issues single-steps, even if range\n\
14851 stepping is supported by the target. The default is on."),
14852 set_range_stepping,
14853 show_range_stepping,
14854 &setlist,
14855 &showlist);
14856
14857 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
14858 Set watchdog timer."), _("\
14859 Show watchdog timer."), _("\
14860 When non-zero, this timeout is used instead of waiting forever for a target\n\
14861 to finish a low-level step or continue operation. If the specified amount\n\
14862 of time passes without a response from the target, an error occurs."),
14863 NULL,
14864 show_watchdog,
14865 &setlist, &showlist);
14866
14867 add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class,
14868 &remote_packet_max_chars, _("\
14869 Set the maximum number of characters to display for each remote packet."), _("\
14870 Show the maximum number of characters to display for each remote packet."), _("\
14871 Specify \"unlimited\" to display all the characters."),
14872 NULL, show_remote_packet_max_chars,
14873 &setdebuglist, &showdebuglist);
14874
14875 /* Eventually initialize fileio. See fileio.c */
14876 initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist);
14877 }
This page took 0.342133 seconds and 4 git commands to generate.