]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote.c
21160e13acc4b57743c69f164810da74032daa62
[thirdparty/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3 Copyright (C) 1988-2019 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 "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 <unordered_map>
79
80 /* The remote target. */
81
82 static const char remote_doc[] = N_("\
83 Use a remote computer via a serial line, using a gdb-specific protocol.\n\
84 Specify the serial device it is connected to\n\
85 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
86
87 #define OPAQUETHREADBYTES 8
88
89 /* a 64 bit opaque identifier */
90 typedef unsigned char threadref[OPAQUETHREADBYTES];
91
92 struct gdb_ext_thread_info;
93 struct threads_listing_context;
94 typedef int (*rmt_thread_action) (threadref *ref, void *context);
95 struct protocol_feature;
96 struct packet_reg;
97
98 struct stop_reply;
99 typedef std::unique_ptr<stop_reply> stop_reply_up;
100
101 /* Generic configuration support for packets the stub optionally
102 supports. Allows the user to specify the use of the packet as well
103 as allowing GDB to auto-detect support in the remote stub. */
104
105 enum packet_support
106 {
107 PACKET_SUPPORT_UNKNOWN = 0,
108 PACKET_ENABLE,
109 PACKET_DISABLE
110 };
111
112 /* Analyze a packet's return value and update the packet config
113 accordingly. */
114
115 enum packet_result
116 {
117 PACKET_ERROR,
118 PACKET_OK,
119 PACKET_UNKNOWN
120 };
121
122 struct threads_listing_context;
123
124 /* Stub vCont actions support.
125
126 Each field is a boolean flag indicating whether the stub reports
127 support for the corresponding action. */
128
129 struct vCont_action_support
130 {
131 /* vCont;t */
132 bool t = false;
133
134 /* vCont;r */
135 bool r = false;
136
137 /* vCont;s */
138 bool s = false;
139
140 /* vCont;S */
141 bool S = false;
142 };
143
144 /* About this many threadisds fit in a packet. */
145
146 #define MAXTHREADLISTRESULTS 32
147
148 /* Data for the vFile:pread readahead cache. */
149
150 struct readahead_cache
151 {
152 /* Invalidate the readahead cache. */
153 void invalidate ();
154
155 /* Invalidate the readahead cache if it is holding data for FD. */
156 void invalidate_fd (int fd);
157
158 /* Serve pread from the readahead cache. Returns number of bytes
159 read, or 0 if the request can't be served from the cache. */
160 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
161
162 /* The file descriptor for the file that is being cached. -1 if the
163 cache is invalid. */
164 int fd = -1;
165
166 /* The offset into the file that the cache buffer corresponds
167 to. */
168 ULONGEST offset = 0;
169
170 /* The buffer holding the cache contents. */
171 gdb_byte *buf = nullptr;
172 /* The buffer's size. We try to read as much as fits into a packet
173 at a time. */
174 size_t bufsize = 0;
175
176 /* Cache hit and miss counters. */
177 ULONGEST hit_count = 0;
178 ULONGEST miss_count = 0;
179 };
180
181 /* Description of the remote protocol for a given architecture. */
182
183 struct packet_reg
184 {
185 long offset; /* Offset into G packet. */
186 long regnum; /* GDB's internal register number. */
187 LONGEST pnum; /* Remote protocol register number. */
188 int in_g_packet; /* Always part of G packet. */
189 /* long size in bytes; == register_size (target_gdbarch (), regnum);
190 at present. */
191 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
192 at present. */
193 };
194
195 struct remote_arch_state
196 {
197 explicit remote_arch_state (struct gdbarch *gdbarch);
198
199 /* Description of the remote protocol registers. */
200 long sizeof_g_packet;
201
202 /* Description of the remote protocol registers indexed by REGNUM
203 (making an array gdbarch_num_regs in size). */
204 std::unique_ptr<packet_reg[]> regs;
205
206 /* This is the size (in chars) of the first response to the ``g''
207 packet. It is used as a heuristic when determining the maximum
208 size of memory-read and memory-write packets. A target will
209 typically only reserve a buffer large enough to hold the ``g''
210 packet. The size does not include packet overhead (headers and
211 trailers). */
212 long actual_register_packet_size;
213
214 /* This is the maximum size (in chars) of a non read/write packet.
215 It is also used as a cap on the size of read/write packets. */
216 long remote_packet_size;
217 };
218
219 /* Description of the remote protocol state for the currently
220 connected target. This is per-target state, and independent of the
221 selected architecture. */
222
223 class remote_state
224 {
225 public:
226
227 remote_state ();
228 ~remote_state ();
229
230 /* Get the remote arch state for GDBARCH. */
231 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
232
233 public: /* data */
234
235 /* A buffer to use for incoming packets, and its current size. The
236 buffer is grown dynamically for larger incoming packets.
237 Outgoing packets may also be constructed in this buffer.
238 The size of the buffer is always at least REMOTE_PACKET_SIZE;
239 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
240 packets. */
241 gdb::char_vector buf;
242
243 /* True if we're going through initial connection setup (finding out
244 about the remote side's threads, relocating symbols, etc.). */
245 bool starting_up = false;
246
247 /* If we negotiated packet size explicitly (and thus can bypass
248 heuristics for the largest packet size that will not overflow
249 a buffer in the stub), this will be set to that packet size.
250 Otherwise zero, meaning to use the guessed size. */
251 long explicit_packet_size = 0;
252
253 /* remote_wait is normally called when the target is running and
254 waits for a stop reply packet. But sometimes we need to call it
255 when the target is already stopped. We can send a "?" packet
256 and have remote_wait read the response. Or, if we already have
257 the response, we can stash it in BUF and tell remote_wait to
258 skip calling getpkt. This flag is set when BUF contains a
259 stop reply packet and the target is not waiting. */
260 int cached_wait_status = 0;
261
262 /* True, if in no ack mode. That is, neither GDB nor the stub will
263 expect acks from each other. The connection is assumed to be
264 reliable. */
265 bool noack_mode = false;
266
267 /* True if we're connected in extended remote mode. */
268 bool extended = false;
269
270 /* True if we resumed the target and we're waiting for the target to
271 stop. In the mean time, we can't start another command/query.
272 The remote server wouldn't be ready to process it, so we'd
273 timeout waiting for a reply that would never come and eventually
274 we'd close the connection. This can happen in asynchronous mode
275 because we allow GDB commands while the target is running. */
276 bool waiting_for_stop_reply = false;
277
278 /* The status of the stub support for the various vCont actions. */
279 vCont_action_support supports_vCont;
280
281 /* True if the user has pressed Ctrl-C, but the target hasn't
282 responded to that. */
283 bool ctrlc_pending_p = false;
284
285 /* True if we saw a Ctrl-C while reading or writing from/to the
286 remote descriptor. At that point it is not safe to send a remote
287 interrupt packet, so we instead remember we saw the Ctrl-C and
288 process it once we're done with sending/receiving the current
289 packet, which should be shortly. If however that takes too long,
290 and the user presses Ctrl-C again, we offer to disconnect. */
291 bool got_ctrlc_during_io = false;
292
293 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
294 remote_open knows that we don't have a file open when the program
295 starts. */
296 struct serial *remote_desc = nullptr;
297
298 /* These are the threads which we last sent to the remote system. The
299 TID member will be -1 for all or -2 for not sent yet. */
300 ptid_t general_thread = null_ptid;
301 ptid_t continue_thread = null_ptid;
302
303 /* This is the traceframe which we last selected on the remote system.
304 It will be -1 if no traceframe is selected. */
305 int remote_traceframe_number = -1;
306
307 char *last_pass_packet = nullptr;
308
309 /* The last QProgramSignals packet sent to the target. We bypass
310 sending a new program signals list down to the target if the new
311 packet is exactly the same as the last we sent. IOW, we only let
312 the target know about program signals list changes. */
313 char *last_program_signals_packet = nullptr;
314
315 gdb_signal last_sent_signal = GDB_SIGNAL_0;
316
317 bool last_sent_step = false;
318
319 /* The execution direction of the last resume we got. */
320 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
321
322 char *finished_object = nullptr;
323 char *finished_annex = nullptr;
324 ULONGEST finished_offset = 0;
325
326 /* Should we try the 'ThreadInfo' query packet?
327
328 This variable (NOT available to the user: auto-detect only!)
329 determines whether GDB will use the new, simpler "ThreadInfo"
330 query or the older, more complex syntax for thread queries.
331 This is an auto-detect variable (set to true at each connect,
332 and set to false when the target fails to recognize it). */
333 bool use_threadinfo_query = false;
334 bool use_threadextra_query = false;
335
336 threadref echo_nextthread {};
337 threadref nextthread {};
338 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
339
340 /* The state of remote notification. */
341 struct remote_notif_state *notif_state = nullptr;
342
343 /* The branch trace configuration. */
344 struct btrace_config btrace_config {};
345
346 /* The argument to the last "vFile:setfs:" packet we sent, used
347 to avoid sending repeated unnecessary "vFile:setfs:" packets.
348 Initialized to -1 to indicate that no "vFile:setfs:" packet
349 has yet been sent. */
350 int fs_pid = -1;
351
352 /* A readahead cache for vFile:pread. Often, reading a binary
353 involves a sequence of small reads. E.g., when parsing an ELF
354 file. A readahead cache helps mostly the case of remote
355 debugging on a connection with higher latency, due to the
356 request/reply nature of the RSP. We only cache data for a single
357 file descriptor at a time. */
358 struct readahead_cache readahead_cache;
359
360 /* The list of already fetched and acknowledged stop events. This
361 queue is used for notification Stop, and other notifications
362 don't need queue for their events, because the notification
363 events of Stop can't be consumed immediately, so that events
364 should be queued first, and be consumed by remote_wait_{ns,as}
365 one per time. Other notifications can consume their events
366 immediately, so queue is not needed for them. */
367 std::vector<stop_reply_up> stop_reply_queue;
368
369 /* Asynchronous signal handle registered as event loop source for
370 when we have pending events ready to be passed to the core. */
371 struct async_event_handler *remote_async_inferior_event_token = nullptr;
372
373 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
374 ``forever'' still use the normal timeout mechanism. This is
375 currently used by the ASYNC code to guarentee that target reads
376 during the initial connect always time-out. Once getpkt has been
377 modified to return a timeout indication and, in turn
378 remote_wait()/wait_for_inferior() have gained a timeout parameter
379 this can go away. */
380 int wait_forever_enabled_p = 1;
381
382 private:
383 /* Mapping of remote protocol data for each gdbarch. Usually there
384 is only one entry here, though we may see more with stubs that
385 support multi-process. */
386 std::unordered_map<struct gdbarch *, remote_arch_state>
387 m_arch_states;
388 };
389
390 static const target_info remote_target_info = {
391 "remote",
392 N_("Remote serial target in gdb-specific protocol"),
393 remote_doc
394 };
395
396 class remote_target : public process_stratum_target
397 {
398 public:
399 remote_target () = default;
400 ~remote_target () override;
401
402 const target_info &info () const override
403 { return remote_target_info; }
404
405 thread_control_capabilities get_thread_control_capabilities () override
406 { return tc_schedlock; }
407
408 /* Open a remote connection. */
409 static void open (const char *, int);
410
411 void close () override;
412
413 void detach (inferior *, int) override;
414 void disconnect (const char *, int) override;
415
416 void commit_resume () override;
417 void resume (ptid_t, int, enum gdb_signal) override;
418 ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
419
420 void fetch_registers (struct regcache *, int) override;
421 void store_registers (struct regcache *, int) override;
422 void prepare_to_store (struct regcache *) override;
423
424 void files_info () override;
425
426 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
427
428 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
429 enum remove_bp_reason) override;
430
431
432 bool stopped_by_sw_breakpoint () override;
433 bool supports_stopped_by_sw_breakpoint () override;
434
435 bool stopped_by_hw_breakpoint () override;
436
437 bool supports_stopped_by_hw_breakpoint () override;
438
439 bool stopped_by_watchpoint () override;
440
441 bool stopped_data_address (CORE_ADDR *) override;
442
443 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
444
445 int can_use_hw_breakpoint (enum bptype, int, int) override;
446
447 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
448
449 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
450
451 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
452
453 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
454 struct expression *) override;
455
456 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
457 struct expression *) override;
458
459 void kill () override;
460
461 void load (const char *, int) override;
462
463 void mourn_inferior () override;
464
465 void pass_signals (gdb::array_view<const unsigned char>) override;
466
467 int set_syscall_catchpoint (int, bool, int,
468 gdb::array_view<const int>) override;
469
470 void program_signals (gdb::array_view<const unsigned char>) override;
471
472 bool thread_alive (ptid_t ptid) override;
473
474 const char *thread_name (struct thread_info *) override;
475
476 void update_thread_list () override;
477
478 std::string pid_to_str (ptid_t) override;
479
480 const char *extra_thread_info (struct thread_info *) override;
481
482 ptid_t get_ada_task_ptid (long lwp, long thread) override;
483
484 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
485 int handle_len,
486 inferior *inf) override;
487
488 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
489 override;
490
491 void stop (ptid_t) override;
492
493 void interrupt () override;
494
495 void pass_ctrlc () override;
496
497 enum target_xfer_status xfer_partial (enum target_object object,
498 const char *annex,
499 gdb_byte *readbuf,
500 const gdb_byte *writebuf,
501 ULONGEST offset, ULONGEST len,
502 ULONGEST *xfered_len) override;
503
504 ULONGEST get_memory_xfer_limit () override;
505
506 void rcmd (const char *command, struct ui_file *output) override;
507
508 char *pid_to_exec_file (int pid) override;
509
510 void log_command (const char *cmd) override
511 {
512 serial_log_command (this, cmd);
513 }
514
515 CORE_ADDR get_thread_local_address (ptid_t ptid,
516 CORE_ADDR load_module_addr,
517 CORE_ADDR offset) override;
518
519 bool can_execute_reverse () override;
520
521 std::vector<mem_region> memory_map () override;
522
523 void flash_erase (ULONGEST address, LONGEST length) override;
524
525 void flash_done () override;
526
527 const struct target_desc *read_description () override;
528
529 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
530 const gdb_byte *pattern, ULONGEST pattern_len,
531 CORE_ADDR *found_addrp) override;
532
533 bool can_async_p () override;
534
535 bool is_async_p () override;
536
537 void async (int) override;
538
539 void thread_events (int) override;
540
541 int can_do_single_step () override;
542
543 void terminal_inferior () override;
544
545 void terminal_ours () override;
546
547 bool supports_non_stop () override;
548
549 bool supports_multi_process () override;
550
551 bool supports_disable_randomization () override;
552
553 bool filesystem_is_local () override;
554
555
556 int fileio_open (struct inferior *inf, const char *filename,
557 int flags, int mode, int warn_if_slow,
558 int *target_errno) override;
559
560 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
561 ULONGEST offset, int *target_errno) override;
562
563 int fileio_pread (int fd, gdb_byte *read_buf, int len,
564 ULONGEST offset, int *target_errno) override;
565
566 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
567
568 int fileio_close (int fd, int *target_errno) override;
569
570 int fileio_unlink (struct inferior *inf,
571 const char *filename,
572 int *target_errno) override;
573
574 gdb::optional<std::string>
575 fileio_readlink (struct inferior *inf,
576 const char *filename,
577 int *target_errno) override;
578
579 bool supports_enable_disable_tracepoint () override;
580
581 bool supports_string_tracing () override;
582
583 bool supports_evaluation_of_breakpoint_conditions () override;
584
585 bool can_run_breakpoint_commands () override;
586
587 void trace_init () override;
588
589 void download_tracepoint (struct bp_location *location) override;
590
591 bool can_download_tracepoint () override;
592
593 void download_trace_state_variable (const trace_state_variable &tsv) override;
594
595 void enable_tracepoint (struct bp_location *location) override;
596
597 void disable_tracepoint (struct bp_location *location) override;
598
599 void trace_set_readonly_regions () override;
600
601 void trace_start () override;
602
603 int get_trace_status (struct trace_status *ts) override;
604
605 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
606 override;
607
608 void trace_stop () override;
609
610 int trace_find (enum trace_find_type type, int num,
611 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
612
613 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
614
615 int save_trace_data (const char *filename) override;
616
617 int upload_tracepoints (struct uploaded_tp **utpp) override;
618
619 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
620
621 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
622
623 int get_min_fast_tracepoint_insn_len () override;
624
625 void set_disconnected_tracing (int val) override;
626
627 void set_circular_trace_buffer (int val) override;
628
629 void set_trace_buffer_size (LONGEST val) override;
630
631 bool set_trace_notes (const char *user, const char *notes,
632 const char *stopnotes) override;
633
634 int core_of_thread (ptid_t ptid) override;
635
636 int verify_memory (const gdb_byte *data,
637 CORE_ADDR memaddr, ULONGEST size) override;
638
639
640 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
641
642 void set_permissions () override;
643
644 bool static_tracepoint_marker_at (CORE_ADDR,
645 struct static_tracepoint_marker *marker)
646 override;
647
648 std::vector<static_tracepoint_marker>
649 static_tracepoint_markers_by_strid (const char *id) override;
650
651 traceframe_info_up traceframe_info () override;
652
653 bool use_agent (bool use) override;
654 bool can_use_agent () override;
655
656 struct btrace_target_info *enable_btrace (ptid_t ptid,
657 const struct btrace_config *conf) override;
658
659 void disable_btrace (struct btrace_target_info *tinfo) override;
660
661 void teardown_btrace (struct btrace_target_info *tinfo) override;
662
663 enum btrace_error read_btrace (struct btrace_data *data,
664 struct btrace_target_info *btinfo,
665 enum btrace_read_type type) override;
666
667 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
668 bool augmented_libraries_svr4_read () override;
669 int follow_fork (int, int) override;
670 void follow_exec (struct inferior *, const char *) override;
671 int insert_fork_catchpoint (int) override;
672 int remove_fork_catchpoint (int) override;
673 int insert_vfork_catchpoint (int) override;
674 int remove_vfork_catchpoint (int) override;
675 int insert_exec_catchpoint (int) override;
676 int remove_exec_catchpoint (int) override;
677 enum exec_direction_kind execution_direction () override;
678
679 public: /* Remote specific methods. */
680
681 void remote_download_command_source (int num, ULONGEST addr,
682 struct command_line *cmds);
683
684 void remote_file_put (const char *local_file, const char *remote_file,
685 int from_tty);
686 void remote_file_get (const char *remote_file, const char *local_file,
687 int from_tty);
688 void remote_file_delete (const char *remote_file, int from_tty);
689
690 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
691 ULONGEST offset, int *remote_errno);
692 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
693 ULONGEST offset, int *remote_errno);
694 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
695 ULONGEST offset, int *remote_errno);
696
697 int remote_hostio_send_command (int command_bytes, int which_packet,
698 int *remote_errno, char **attachment,
699 int *attachment_len);
700 int remote_hostio_set_filesystem (struct inferior *inf,
701 int *remote_errno);
702 /* We should get rid of this and use fileio_open directly. */
703 int remote_hostio_open (struct inferior *inf, const char *filename,
704 int flags, int mode, int warn_if_slow,
705 int *remote_errno);
706 int remote_hostio_close (int fd, int *remote_errno);
707
708 int remote_hostio_unlink (inferior *inf, const char *filename,
709 int *remote_errno);
710
711 struct remote_state *get_remote_state ();
712
713 long get_remote_packet_size (void);
714 long get_memory_packet_size (struct memory_packet_config *config);
715
716 long get_memory_write_packet_size ();
717 long get_memory_read_packet_size ();
718
719 char *append_pending_thread_resumptions (char *p, char *endp,
720 ptid_t ptid);
721 static void open_1 (const char *name, int from_tty, int extended_p);
722 void start_remote (int from_tty, int extended_p);
723 void remote_detach_1 (struct inferior *inf, int from_tty);
724
725 char *append_resumption (char *p, char *endp,
726 ptid_t ptid, int step, gdb_signal siggnal);
727 int remote_resume_with_vcont (ptid_t ptid, int step,
728 gdb_signal siggnal);
729
730 void add_current_inferior_and_thread (char *wait_status);
731
732 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
733 int options);
734 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
735 int options);
736
737 ptid_t process_stop_reply (struct stop_reply *stop_reply,
738 target_waitstatus *status);
739
740 void remote_notice_new_inferior (ptid_t currthread, int executing);
741
742 void process_initial_stop_replies (int from_tty);
743
744 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
745
746 void btrace_sync_conf (const btrace_config *conf);
747
748 void remote_btrace_maybe_reopen ();
749
750 void remove_new_fork_children (threads_listing_context *context);
751 void kill_new_fork_children (int pid);
752 void discard_pending_stop_replies (struct inferior *inf);
753 int stop_reply_queue_length ();
754
755 void check_pending_events_prevent_wildcard_vcont
756 (int *may_global_wildcard_vcont);
757
758 void discard_pending_stop_replies_in_queue ();
759 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
760 struct stop_reply *queued_stop_reply (ptid_t ptid);
761 int peek_stop_reply (ptid_t ptid);
762 void remote_parse_stop_reply (const char *buf, stop_reply *event);
763
764 void remote_stop_ns (ptid_t ptid);
765 void remote_interrupt_as ();
766 void remote_interrupt_ns ();
767
768 char *remote_get_noisy_reply ();
769 int remote_query_attached (int pid);
770 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
771 int try_open_exec);
772
773 ptid_t remote_current_thread (ptid_t oldpid);
774 ptid_t get_current_thread (char *wait_status);
775
776 void set_thread (ptid_t ptid, int gen);
777 void set_general_thread (ptid_t ptid);
778 void set_continue_thread (ptid_t ptid);
779 void set_general_process ();
780
781 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
782
783 int remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
784 gdb_ext_thread_info *info);
785 int remote_get_threadinfo (threadref *threadid, int fieldset,
786 gdb_ext_thread_info *info);
787
788 int parse_threadlist_response (char *pkt, int result_limit,
789 threadref *original_echo,
790 threadref *resultlist,
791 int *doneflag);
792 int remote_get_threadlist (int startflag, threadref *nextthread,
793 int result_limit, int *done, int *result_count,
794 threadref *threadlist);
795
796 int remote_threadlist_iterator (rmt_thread_action stepfunction,
797 void *context, int looplimit);
798
799 int remote_get_threads_with_ql (threads_listing_context *context);
800 int remote_get_threads_with_qxfer (threads_listing_context *context);
801 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
802
803 void extended_remote_restart ();
804
805 void get_offsets ();
806
807 void remote_check_symbols ();
808
809 void remote_supported_packet (const struct protocol_feature *feature,
810 enum packet_support support,
811 const char *argument);
812
813 void remote_query_supported ();
814
815 void remote_packet_size (const protocol_feature *feature,
816 packet_support support, const char *value);
817
818 void remote_serial_quit_handler ();
819
820 void remote_detach_pid (int pid);
821
822 void remote_vcont_probe ();
823
824 void remote_resume_with_hc (ptid_t ptid, int step,
825 gdb_signal siggnal);
826
827 void send_interrupt_sequence ();
828 void interrupt_query ();
829
830 void remote_notif_get_pending_events (notif_client *nc);
831
832 int fetch_register_using_p (struct regcache *regcache,
833 packet_reg *reg);
834 int send_g_packet ();
835 void process_g_packet (struct regcache *regcache);
836 void fetch_registers_using_g (struct regcache *regcache);
837 int store_register_using_P (const struct regcache *regcache,
838 packet_reg *reg);
839 void store_registers_using_G (const struct regcache *regcache);
840
841 void set_remote_traceframe ();
842
843 void check_binary_download (CORE_ADDR addr);
844
845 target_xfer_status remote_write_bytes_aux (const char *header,
846 CORE_ADDR memaddr,
847 const gdb_byte *myaddr,
848 ULONGEST len_units,
849 int unit_size,
850 ULONGEST *xfered_len_units,
851 char packet_format,
852 int use_length);
853
854 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
855 const gdb_byte *myaddr, ULONGEST len,
856 int unit_size, ULONGEST *xfered_len);
857
858 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
859 ULONGEST len_units,
860 int unit_size, ULONGEST *xfered_len_units);
861
862 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
863 ULONGEST memaddr,
864 ULONGEST len,
865 int unit_size,
866 ULONGEST *xfered_len);
867
868 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
869 gdb_byte *myaddr, ULONGEST len,
870 int unit_size,
871 ULONGEST *xfered_len);
872
873 packet_result remote_send_printf (const char *format, ...)
874 ATTRIBUTE_PRINTF (2, 3);
875
876 target_xfer_status remote_flash_write (ULONGEST address,
877 ULONGEST length, ULONGEST *xfered_len,
878 const gdb_byte *data);
879
880 int readchar (int timeout);
881
882 void remote_serial_write (const char *str, int len);
883
884 int putpkt (const char *buf);
885 int putpkt_binary (const char *buf, int cnt);
886
887 int putpkt (const gdb::char_vector &buf)
888 {
889 return putpkt (buf.data ());
890 }
891
892 void skip_frame ();
893 long read_frame (gdb::char_vector *buf_p);
894 void getpkt (gdb::char_vector *buf, int forever);
895 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
896 int expecting_notif, int *is_notif);
897 int getpkt_sane (gdb::char_vector *buf, int forever);
898 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
899 int *is_notif);
900 int remote_vkill (int pid);
901 void remote_kill_k ();
902
903 void extended_remote_disable_randomization (int val);
904 int extended_remote_run (const std::string &args);
905
906 void send_environment_packet (const char *action,
907 const char *packet,
908 const char *value);
909
910 void extended_remote_environment_support ();
911 void extended_remote_set_inferior_cwd ();
912
913 target_xfer_status remote_write_qxfer (const char *object_name,
914 const char *annex,
915 const gdb_byte *writebuf,
916 ULONGEST offset, LONGEST len,
917 ULONGEST *xfered_len,
918 struct packet_config *packet);
919
920 target_xfer_status remote_read_qxfer (const char *object_name,
921 const char *annex,
922 gdb_byte *readbuf, ULONGEST offset,
923 LONGEST len,
924 ULONGEST *xfered_len,
925 struct packet_config *packet);
926
927 void push_stop_reply (struct stop_reply *new_event);
928
929 bool vcont_r_supported ();
930
931 void packet_command (const char *args, int from_tty);
932
933 private: /* data fields */
934
935 /* The remote state. Don't reference this directly. Use the
936 get_remote_state method instead. */
937 remote_state m_remote_state;
938 };
939
940 static const target_info extended_remote_target_info = {
941 "extended-remote",
942 N_("Extended remote serial target in gdb-specific protocol"),
943 remote_doc
944 };
945
946 /* Set up the extended remote target by extending the standard remote
947 target and adding to it. */
948
949 class extended_remote_target final : public remote_target
950 {
951 public:
952 const target_info &info () const override
953 { return extended_remote_target_info; }
954
955 /* Open an extended-remote connection. */
956 static void open (const char *, int);
957
958 bool can_create_inferior () override { return true; }
959 void create_inferior (const char *, const std::string &,
960 char **, int) override;
961
962 void detach (inferior *, int) override;
963
964 bool can_attach () override { return true; }
965 void attach (const char *, int) override;
966
967 void post_attach (int) override;
968 bool supports_disable_randomization () override;
969 };
970
971 /* Per-program-space data key. */
972 static const struct program_space_key<char, gdb::xfree_deleter<char>>
973 remote_pspace_data;
974
975 /* The variable registered as the control variable used by the
976 remote exec-file commands. While the remote exec-file setting is
977 per-program-space, the set/show machinery uses this as the
978 location of the remote exec-file value. */
979 static char *remote_exec_file_var;
980
981 /* The size to align memory write packets, when practical. The protocol
982 does not guarantee any alignment, and gdb will generate short
983 writes and unaligned writes, but even as a best-effort attempt this
984 can improve bulk transfers. For instance, if a write is misaligned
985 relative to the target's data bus, the stub may need to make an extra
986 round trip fetching data from the target. This doesn't make a
987 huge difference, but it's easy to do, so we try to be helpful.
988
989 The alignment chosen is arbitrary; usually data bus width is
990 important here, not the possibly larger cache line size. */
991 enum { REMOTE_ALIGN_WRITES = 16 };
992
993 /* Prototypes for local functions. */
994
995 static int hexnumlen (ULONGEST num);
996
997 static int stubhex (int ch);
998
999 static int hexnumstr (char *, ULONGEST);
1000
1001 static int hexnumnstr (char *, ULONGEST, int);
1002
1003 static CORE_ADDR remote_address_masked (CORE_ADDR);
1004
1005 static void print_packet (const char *);
1006
1007 static int stub_unpack_int (char *buff, int fieldlength);
1008
1009 struct packet_config;
1010
1011 static void show_packet_config_cmd (struct packet_config *config);
1012
1013 static void show_remote_protocol_packet_cmd (struct ui_file *file,
1014 int from_tty,
1015 struct cmd_list_element *c,
1016 const char *value);
1017
1018 static ptid_t read_ptid (const char *buf, const char **obuf);
1019
1020 static void remote_async_inferior_event_handler (gdb_client_data);
1021
1022 static bool remote_read_description_p (struct target_ops *target);
1023
1024 static void remote_console_output (const char *msg);
1025
1026 static void remote_btrace_reset (remote_state *rs);
1027
1028 static void remote_unpush_and_throw (void);
1029
1030 /* For "remote". */
1031
1032 static struct cmd_list_element *remote_cmdlist;
1033
1034 /* For "set remote" and "show remote". */
1035
1036 static struct cmd_list_element *remote_set_cmdlist;
1037 static struct cmd_list_element *remote_show_cmdlist;
1038
1039 /* Controls whether GDB is willing to use range stepping. */
1040
1041 static bool use_range_stepping = true;
1042
1043 /* The max number of chars in debug output. The rest of chars are
1044 omitted. */
1045
1046 #define REMOTE_DEBUG_MAX_CHAR 512
1047
1048 /* Private data that we'll store in (struct thread_info)->priv. */
1049 struct remote_thread_info : public private_thread_info
1050 {
1051 std::string extra;
1052 std::string name;
1053 int core = -1;
1054
1055 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1056 sequence of bytes. */
1057 gdb::byte_vector thread_handle;
1058
1059 /* Whether the target stopped for a breakpoint/watchpoint. */
1060 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
1061
1062 /* This is set to the data address of the access causing the target
1063 to stop for a watchpoint. */
1064 CORE_ADDR watch_data_address = 0;
1065
1066 /* Fields used by the vCont action coalescing implemented in
1067 remote_resume / remote_commit_resume. remote_resume stores each
1068 thread's last resume request in these fields, so that a later
1069 remote_commit_resume knows which is the proper action for this
1070 thread to include in the vCont packet. */
1071
1072 /* True if the last target_resume call for this thread was a step
1073 request, false if a continue request. */
1074 int last_resume_step = 0;
1075
1076 /* The signal specified in the last target_resume call for this
1077 thread. */
1078 gdb_signal last_resume_sig = GDB_SIGNAL_0;
1079
1080 /* Whether this thread was already vCont-resumed on the remote
1081 side. */
1082 int vcont_resumed = 0;
1083 };
1084
1085 remote_state::remote_state ()
1086 : buf (400)
1087 {
1088 }
1089
1090 remote_state::~remote_state ()
1091 {
1092 xfree (this->last_pass_packet);
1093 xfree (this->last_program_signals_packet);
1094 xfree (this->finished_object);
1095 xfree (this->finished_annex);
1096 }
1097
1098 /* Utility: generate error from an incoming stub packet. */
1099 static void
1100 trace_error (char *buf)
1101 {
1102 if (*buf++ != 'E')
1103 return; /* not an error msg */
1104 switch (*buf)
1105 {
1106 case '1': /* malformed packet error */
1107 if (*++buf == '0') /* general case: */
1108 error (_("remote.c: error in outgoing packet."));
1109 else
1110 error (_("remote.c: error in outgoing packet at field #%ld."),
1111 strtol (buf, NULL, 16));
1112 default:
1113 error (_("Target returns error code '%s'."), buf);
1114 }
1115 }
1116
1117 /* Utility: wait for reply from stub, while accepting "O" packets. */
1118
1119 char *
1120 remote_target::remote_get_noisy_reply ()
1121 {
1122 struct remote_state *rs = get_remote_state ();
1123
1124 do /* Loop on reply from remote stub. */
1125 {
1126 char *buf;
1127
1128 QUIT; /* Allow user to bail out with ^C. */
1129 getpkt (&rs->buf, 0);
1130 buf = rs->buf.data ();
1131 if (buf[0] == 'E')
1132 trace_error (buf);
1133 else if (startswith (buf, "qRelocInsn:"))
1134 {
1135 ULONGEST ul;
1136 CORE_ADDR from, to, org_to;
1137 const char *p, *pp;
1138 int adjusted_size = 0;
1139 int relocated = 0;
1140
1141 p = buf + strlen ("qRelocInsn:");
1142 pp = unpack_varlen_hex (p, &ul);
1143 if (*pp != ';')
1144 error (_("invalid qRelocInsn packet: %s"), buf);
1145 from = ul;
1146
1147 p = pp + 1;
1148 unpack_varlen_hex (p, &ul);
1149 to = ul;
1150
1151 org_to = to;
1152
1153 try
1154 {
1155 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
1156 relocated = 1;
1157 }
1158 catch (const gdb_exception &ex)
1159 {
1160 if (ex.error == MEMORY_ERROR)
1161 {
1162 /* Propagate memory errors silently back to the
1163 target. The stub may have limited the range of
1164 addresses we can write to, for example. */
1165 }
1166 else
1167 {
1168 /* Something unexpectedly bad happened. Be verbose
1169 so we can tell what, and propagate the error back
1170 to the stub, so it doesn't get stuck waiting for
1171 a response. */
1172 exception_fprintf (gdb_stderr, ex,
1173 _("warning: relocating instruction: "));
1174 }
1175 putpkt ("E01");
1176 }
1177
1178 if (relocated)
1179 {
1180 adjusted_size = to - org_to;
1181
1182 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
1183 putpkt (buf);
1184 }
1185 }
1186 else if (buf[0] == 'O' && buf[1] != 'K')
1187 remote_console_output (buf + 1); /* 'O' message from stub */
1188 else
1189 return buf; /* Here's the actual reply. */
1190 }
1191 while (1);
1192 }
1193
1194 struct remote_arch_state *
1195 remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
1196 {
1197 remote_arch_state *rsa;
1198
1199 auto it = this->m_arch_states.find (gdbarch);
1200 if (it == this->m_arch_states.end ())
1201 {
1202 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1203 std::forward_as_tuple (gdbarch),
1204 std::forward_as_tuple (gdbarch));
1205 rsa = &p.first->second;
1206
1207 /* Make sure that the packet buffer is plenty big enough for
1208 this architecture. */
1209 if (this->buf.size () < rsa->remote_packet_size)
1210 this->buf.resize (2 * rsa->remote_packet_size);
1211 }
1212 else
1213 rsa = &it->second;
1214
1215 return rsa;
1216 }
1217
1218 /* Fetch the global remote target state. */
1219
1220 remote_state *
1221 remote_target::get_remote_state ()
1222 {
1223 /* Make sure that the remote architecture state has been
1224 initialized, because doing so might reallocate rs->buf. Any
1225 function which calls getpkt also needs to be mindful of changes
1226 to rs->buf, but this call limits the number of places which run
1227 into trouble. */
1228 m_remote_state.get_remote_arch_state (target_gdbarch ());
1229
1230 return &m_remote_state;
1231 }
1232
1233 /* Fetch the remote exec-file from the current program space. */
1234
1235 static const char *
1236 get_remote_exec_file (void)
1237 {
1238 char *remote_exec_file;
1239
1240 remote_exec_file = remote_pspace_data.get (current_program_space);
1241 if (remote_exec_file == NULL)
1242 return "";
1243
1244 return remote_exec_file;
1245 }
1246
1247 /* Set the remote exec file for PSPACE. */
1248
1249 static void
1250 set_pspace_remote_exec_file (struct program_space *pspace,
1251 const char *remote_exec_file)
1252 {
1253 char *old_file = remote_pspace_data.get (pspace);
1254
1255 xfree (old_file);
1256 remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
1257 }
1258
1259 /* The "set/show remote exec-file" set command hook. */
1260
1261 static void
1262 set_remote_exec_file (const char *ignored, int from_tty,
1263 struct cmd_list_element *c)
1264 {
1265 gdb_assert (remote_exec_file_var != NULL);
1266 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1267 }
1268
1269 /* The "set/show remote exec-file" show command hook. */
1270
1271 static void
1272 show_remote_exec_file (struct ui_file *file, int from_tty,
1273 struct cmd_list_element *cmd, const char *value)
1274 {
1275 fprintf_filtered (file, "%s\n", remote_exec_file_var);
1276 }
1277
1278 static int
1279 compare_pnums (const void *lhs_, const void *rhs_)
1280 {
1281 const struct packet_reg * const *lhs
1282 = (const struct packet_reg * const *) lhs_;
1283 const struct packet_reg * const *rhs
1284 = (const struct packet_reg * const *) rhs_;
1285
1286 if ((*lhs)->pnum < (*rhs)->pnum)
1287 return -1;
1288 else if ((*lhs)->pnum == (*rhs)->pnum)
1289 return 0;
1290 else
1291 return 1;
1292 }
1293
1294 static int
1295 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
1296 {
1297 int regnum, num_remote_regs, offset;
1298 struct packet_reg **remote_regs;
1299
1300 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1301 {
1302 struct packet_reg *r = &regs[regnum];
1303
1304 if (register_size (gdbarch, regnum) == 0)
1305 /* Do not try to fetch zero-sized (placeholder) registers. */
1306 r->pnum = -1;
1307 else
1308 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1309
1310 r->regnum = regnum;
1311 }
1312
1313 /* Define the g/G packet format as the contents of each register
1314 with a remote protocol number, in order of ascending protocol
1315 number. */
1316
1317 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
1318 for (num_remote_regs = 0, regnum = 0;
1319 regnum < gdbarch_num_regs (gdbarch);
1320 regnum++)
1321 if (regs[regnum].pnum != -1)
1322 remote_regs[num_remote_regs++] = &regs[regnum];
1323
1324 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
1325 compare_pnums);
1326
1327 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1328 {
1329 remote_regs[regnum]->in_g_packet = 1;
1330 remote_regs[regnum]->offset = offset;
1331 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
1332 }
1333
1334 return offset;
1335 }
1336
1337 /* Given the architecture described by GDBARCH, return the remote
1338 protocol register's number and the register's offset in the g/G
1339 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1340 If the target does not have a mapping for REGNUM, return false,
1341 otherwise, return true. */
1342
1343 int
1344 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1345 int *pnum, int *poffset)
1346 {
1347 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1348
1349 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
1350
1351 map_regcache_remote_table (gdbarch, regs.data ());
1352
1353 *pnum = regs[regnum].pnum;
1354 *poffset = regs[regnum].offset;
1355
1356 return *pnum != -1;
1357 }
1358
1359 remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
1360 {
1361 /* Use the architecture to build a regnum<->pnum table, which will be
1362 1:1 unless a feature set specifies otherwise. */
1363 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
1364
1365 /* Record the maximum possible size of the g packet - it may turn out
1366 to be smaller. */
1367 this->sizeof_g_packet
1368 = map_regcache_remote_table (gdbarch, this->regs.get ());
1369
1370 /* Default maximum number of characters in a packet body. Many
1371 remote stubs have a hardwired buffer size of 400 bytes
1372 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1373 as the maximum packet-size to ensure that the packet and an extra
1374 NUL character can always fit in the buffer. This stops GDB
1375 trashing stubs that try to squeeze an extra NUL into what is
1376 already a full buffer (As of 1999-12-04 that was most stubs). */
1377 this->remote_packet_size = 400 - 1;
1378
1379 /* This one is filled in when a ``g'' packet is received. */
1380 this->actual_register_packet_size = 0;
1381
1382 /* Should rsa->sizeof_g_packet needs more space than the
1383 default, adjust the size accordingly. Remember that each byte is
1384 encoded as two characters. 32 is the overhead for the packet
1385 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
1386 (``$NN:G...#NN'') is a better guess, the below has been padded a
1387 little. */
1388 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1389 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
1390 }
1391
1392 /* Get a pointer to the current remote target. If not connected to a
1393 remote target, return NULL. */
1394
1395 static remote_target *
1396 get_current_remote_target ()
1397 {
1398 target_ops *proc_target = find_target_at (process_stratum);
1399 return dynamic_cast<remote_target *> (proc_target);
1400 }
1401
1402 /* Return the current allowed size of a remote packet. This is
1403 inferred from the current architecture, and should be used to
1404 limit the length of outgoing packets. */
1405 long
1406 remote_target::get_remote_packet_size ()
1407 {
1408 struct remote_state *rs = get_remote_state ();
1409 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1410
1411 if (rs->explicit_packet_size)
1412 return rs->explicit_packet_size;
1413
1414 return rsa->remote_packet_size;
1415 }
1416
1417 static struct packet_reg *
1418 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1419 long regnum)
1420 {
1421 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
1422 return NULL;
1423 else
1424 {
1425 struct packet_reg *r = &rsa->regs[regnum];
1426
1427 gdb_assert (r->regnum == regnum);
1428 return r;
1429 }
1430 }
1431
1432 static struct packet_reg *
1433 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1434 LONGEST pnum)
1435 {
1436 int i;
1437
1438 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
1439 {
1440 struct packet_reg *r = &rsa->regs[i];
1441
1442 if (r->pnum == pnum)
1443 return r;
1444 }
1445 return NULL;
1446 }
1447
1448 /* Allow the user to specify what sequence to send to the remote
1449 when he requests a program interruption: Although ^C is usually
1450 what remote systems expect (this is the default, here), it is
1451 sometimes preferable to send a break. On other systems such
1452 as the Linux kernel, a break followed by g, which is Magic SysRq g
1453 is required in order to interrupt the execution. */
1454 const char interrupt_sequence_control_c[] = "Ctrl-C";
1455 const char interrupt_sequence_break[] = "BREAK";
1456 const char interrupt_sequence_break_g[] = "BREAK-g";
1457 static const char *const interrupt_sequence_modes[] =
1458 {
1459 interrupt_sequence_control_c,
1460 interrupt_sequence_break,
1461 interrupt_sequence_break_g,
1462 NULL
1463 };
1464 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1465
1466 static void
1467 show_interrupt_sequence (struct ui_file *file, int from_tty,
1468 struct cmd_list_element *c,
1469 const char *value)
1470 {
1471 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1472 fprintf_filtered (file,
1473 _("Send the ASCII ETX character (Ctrl-c) "
1474 "to the remote target to interrupt the "
1475 "execution of the program.\n"));
1476 else if (interrupt_sequence_mode == interrupt_sequence_break)
1477 fprintf_filtered (file,
1478 _("send a break signal to the remote target "
1479 "to interrupt the execution of the program.\n"));
1480 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1481 fprintf_filtered (file,
1482 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1483 "the remote target to interrupt the execution "
1484 "of Linux kernel.\n"));
1485 else
1486 internal_error (__FILE__, __LINE__,
1487 _("Invalid value for interrupt_sequence_mode: %s."),
1488 interrupt_sequence_mode);
1489 }
1490
1491 /* This boolean variable specifies whether interrupt_sequence is sent
1492 to the remote target when gdb connects to it.
1493 This is mostly needed when you debug the Linux kernel: The Linux kernel
1494 expects BREAK g which is Magic SysRq g for connecting gdb. */
1495 static bool interrupt_on_connect = false;
1496
1497 /* This variable is used to implement the "set/show remotebreak" commands.
1498 Since these commands are now deprecated in favor of "set/show remote
1499 interrupt-sequence", it no longer has any effect on the code. */
1500 static bool remote_break;
1501
1502 static void
1503 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
1504 {
1505 if (remote_break)
1506 interrupt_sequence_mode = interrupt_sequence_break;
1507 else
1508 interrupt_sequence_mode = interrupt_sequence_control_c;
1509 }
1510
1511 static void
1512 show_remotebreak (struct ui_file *file, int from_tty,
1513 struct cmd_list_element *c,
1514 const char *value)
1515 {
1516 }
1517
1518 /* This variable sets the number of bits in an address that are to be
1519 sent in a memory ("M" or "m") packet. Normally, after stripping
1520 leading zeros, the entire address would be sent. This variable
1521 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1522 initial implementation of remote.c restricted the address sent in
1523 memory packets to ``host::sizeof long'' bytes - (typically 32
1524 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1525 address was never sent. Since fixing this bug may cause a break in
1526 some remote targets this variable is principly provided to
1527 facilitate backward compatibility. */
1528
1529 static unsigned int remote_address_size;
1530
1531 \f
1532 /* User configurable variables for the number of characters in a
1533 memory read/write packet. MIN (rsa->remote_packet_size,
1534 rsa->sizeof_g_packet) is the default. Some targets need smaller
1535 values (fifo overruns, et.al.) and some users need larger values
1536 (speed up transfers). The variables ``preferred_*'' (the user
1537 request), ``current_*'' (what was actually set) and ``forced_*''
1538 (Positive - a soft limit, negative - a hard limit). */
1539
1540 struct memory_packet_config
1541 {
1542 const char *name;
1543 long size;
1544 int fixed_p;
1545 };
1546
1547 /* The default max memory-write-packet-size, when the setting is
1548 "fixed". The 16k is historical. (It came from older GDB's using
1549 alloca for buffers and the knowledge (folklore?) that some hosts
1550 don't cope very well with large alloca calls.) */
1551 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
1552
1553 /* The minimum remote packet size for memory transfers. Ensures we
1554 can write at least one byte. */
1555 #define MIN_MEMORY_PACKET_SIZE 20
1556
1557 /* Get the memory packet size, assuming it is fixed. */
1558
1559 static long
1560 get_fixed_memory_packet_size (struct memory_packet_config *config)
1561 {
1562 gdb_assert (config->fixed_p);
1563
1564 if (config->size <= 0)
1565 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1566 else
1567 return config->size;
1568 }
1569
1570 /* Compute the current size of a read/write packet. Since this makes
1571 use of ``actual_register_packet_size'' the computation is dynamic. */
1572
1573 long
1574 remote_target::get_memory_packet_size (struct memory_packet_config *config)
1575 {
1576 struct remote_state *rs = get_remote_state ();
1577 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1578
1579 long what_they_get;
1580 if (config->fixed_p)
1581 what_they_get = get_fixed_memory_packet_size (config);
1582 else
1583 {
1584 what_they_get = get_remote_packet_size ();
1585 /* Limit the packet to the size specified by the user. */
1586 if (config->size > 0
1587 && what_they_get > config->size)
1588 what_they_get = config->size;
1589
1590 /* Limit it to the size of the targets ``g'' response unless we have
1591 permission from the stub to use a larger packet size. */
1592 if (rs->explicit_packet_size == 0
1593 && rsa->actual_register_packet_size > 0
1594 && what_they_get > rsa->actual_register_packet_size)
1595 what_they_get = rsa->actual_register_packet_size;
1596 }
1597 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1598 what_they_get = MIN_MEMORY_PACKET_SIZE;
1599
1600 /* Make sure there is room in the global buffer for this packet
1601 (including its trailing NUL byte). */
1602 if (rs->buf.size () < what_they_get + 1)
1603 rs->buf.resize (2 * what_they_get);
1604
1605 return what_they_get;
1606 }
1607
1608 /* Update the size of a read/write packet. If they user wants
1609 something really big then do a sanity check. */
1610
1611 static void
1612 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1613 {
1614 int fixed_p = config->fixed_p;
1615 long size = config->size;
1616
1617 if (args == NULL)
1618 error (_("Argument required (integer, `fixed' or `limited')."));
1619 else if (strcmp (args, "hard") == 0
1620 || strcmp (args, "fixed") == 0)
1621 fixed_p = 1;
1622 else if (strcmp (args, "soft") == 0
1623 || strcmp (args, "limit") == 0)
1624 fixed_p = 0;
1625 else
1626 {
1627 char *end;
1628
1629 size = strtoul (args, &end, 0);
1630 if (args == end)
1631 error (_("Invalid %s (bad syntax)."), config->name);
1632
1633 /* Instead of explicitly capping the size of a packet to or
1634 disallowing it, the user is allowed to set the size to
1635 something arbitrarily large. */
1636 }
1637
1638 /* Extra checks? */
1639 if (fixed_p && !config->fixed_p)
1640 {
1641 /* So that the query shows the correct value. */
1642 long query_size = (size <= 0
1643 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1644 : size);
1645
1646 if (! query (_("The target may not be able to correctly handle a %s\n"
1647 "of %ld bytes. Change the packet size? "),
1648 config->name, query_size))
1649 error (_("Packet size not changed."));
1650 }
1651 /* Update the config. */
1652 config->fixed_p = fixed_p;
1653 config->size = size;
1654 }
1655
1656 static void
1657 show_memory_packet_size (struct memory_packet_config *config)
1658 {
1659 if (config->size == 0)
1660 printf_filtered (_("The %s is 0 (default). "), config->name);
1661 else
1662 printf_filtered (_("The %s is %ld. "), config->name, config->size);
1663 if (config->fixed_p)
1664 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1665 get_fixed_memory_packet_size (config));
1666 else
1667 {
1668 remote_target *remote = get_current_remote_target ();
1669
1670 if (remote != NULL)
1671 printf_filtered (_("Packets are limited to %ld bytes.\n"),
1672 remote->get_memory_packet_size (config));
1673 else
1674 puts_filtered ("The actual limit will be further reduced "
1675 "dependent on the target.\n");
1676 }
1677 }
1678
1679 static struct memory_packet_config memory_write_packet_config =
1680 {
1681 "memory-write-packet-size",
1682 };
1683
1684 static void
1685 set_memory_write_packet_size (const char *args, int from_tty)
1686 {
1687 set_memory_packet_size (args, &memory_write_packet_config);
1688 }
1689
1690 static void
1691 show_memory_write_packet_size (const char *args, int from_tty)
1692 {
1693 show_memory_packet_size (&memory_write_packet_config);
1694 }
1695
1696 /* Show the number of hardware watchpoints that can be used. */
1697
1698 static void
1699 show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1700 struct cmd_list_element *c,
1701 const char *value)
1702 {
1703 fprintf_filtered (file, _("The maximum number of target hardware "
1704 "watchpoints is %s.\n"), value);
1705 }
1706
1707 /* Show the length limit (in bytes) for hardware watchpoints. */
1708
1709 static void
1710 show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1711 struct cmd_list_element *c,
1712 const char *value)
1713 {
1714 fprintf_filtered (file, _("The maximum length (in bytes) of a target "
1715 "hardware watchpoint is %s.\n"), value);
1716 }
1717
1718 /* Show the number of hardware breakpoints that can be used. */
1719
1720 static void
1721 show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1722 struct cmd_list_element *c,
1723 const char *value)
1724 {
1725 fprintf_filtered (file, _("The maximum number of target hardware "
1726 "breakpoints is %s.\n"), value);
1727 }
1728
1729 long
1730 remote_target::get_memory_write_packet_size ()
1731 {
1732 return get_memory_packet_size (&memory_write_packet_config);
1733 }
1734
1735 static struct memory_packet_config memory_read_packet_config =
1736 {
1737 "memory-read-packet-size",
1738 };
1739
1740 static void
1741 set_memory_read_packet_size (const char *args, int from_tty)
1742 {
1743 set_memory_packet_size (args, &memory_read_packet_config);
1744 }
1745
1746 static void
1747 show_memory_read_packet_size (const char *args, int from_tty)
1748 {
1749 show_memory_packet_size (&memory_read_packet_config);
1750 }
1751
1752 long
1753 remote_target::get_memory_read_packet_size ()
1754 {
1755 long size = get_memory_packet_size (&memory_read_packet_config);
1756
1757 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1758 extra buffer size argument before the memory read size can be
1759 increased beyond this. */
1760 if (size > get_remote_packet_size ())
1761 size = get_remote_packet_size ();
1762 return size;
1763 }
1764
1765 \f
1766
1767 struct packet_config
1768 {
1769 const char *name;
1770 const char *title;
1771
1772 /* If auto, GDB auto-detects support for this packet or feature,
1773 either through qSupported, or by trying the packet and looking
1774 at the response. If true, GDB assumes the target supports this
1775 packet. If false, the packet is disabled. Configs that don't
1776 have an associated command always have this set to auto. */
1777 enum auto_boolean detect;
1778
1779 /* Does the target support this packet? */
1780 enum packet_support support;
1781 };
1782
1783 static enum packet_support packet_config_support (struct packet_config *config);
1784 static enum packet_support packet_support (int packet);
1785
1786 static void
1787 show_packet_config_cmd (struct packet_config *config)
1788 {
1789 const char *support = "internal-error";
1790
1791 switch (packet_config_support (config))
1792 {
1793 case PACKET_ENABLE:
1794 support = "enabled";
1795 break;
1796 case PACKET_DISABLE:
1797 support = "disabled";
1798 break;
1799 case PACKET_SUPPORT_UNKNOWN:
1800 support = "unknown";
1801 break;
1802 }
1803 switch (config->detect)
1804 {
1805 case AUTO_BOOLEAN_AUTO:
1806 printf_filtered (_("Support for the `%s' packet "
1807 "is auto-detected, currently %s.\n"),
1808 config->name, support);
1809 break;
1810 case AUTO_BOOLEAN_TRUE:
1811 case AUTO_BOOLEAN_FALSE:
1812 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1813 config->name, support);
1814 break;
1815 }
1816 }
1817
1818 static void
1819 add_packet_config_cmd (struct packet_config *config, const char *name,
1820 const char *title, int legacy)
1821 {
1822 char *set_doc;
1823 char *show_doc;
1824 char *cmd_name;
1825
1826 config->name = name;
1827 config->title = title;
1828 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
1829 name, title);
1830 show_doc = xstrprintf ("Show current use of remote "
1831 "protocol `%s' (%s) packet.",
1832 name, title);
1833 /* set/show TITLE-packet {auto,on,off} */
1834 cmd_name = xstrprintf ("%s-packet", title);
1835 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1836 &config->detect, set_doc,
1837 show_doc, NULL, /* help_doc */
1838 NULL,
1839 show_remote_protocol_packet_cmd,
1840 &remote_set_cmdlist, &remote_show_cmdlist);
1841 /* The command code copies the documentation strings. */
1842 xfree (set_doc);
1843 xfree (show_doc);
1844 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
1845 if (legacy)
1846 {
1847 char *legacy_name;
1848
1849 legacy_name = xstrprintf ("%s-packet", name);
1850 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1851 &remote_set_cmdlist);
1852 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1853 &remote_show_cmdlist);
1854 }
1855 }
1856
1857 static enum packet_result
1858 packet_check_result (const char *buf)
1859 {
1860 if (buf[0] != '\0')
1861 {
1862 /* The stub recognized the packet request. Check that the
1863 operation succeeded. */
1864 if (buf[0] == 'E'
1865 && isxdigit (buf[1]) && isxdigit (buf[2])
1866 && buf[3] == '\0')
1867 /* "Enn" - definitly an error. */
1868 return PACKET_ERROR;
1869
1870 /* Always treat "E." as an error. This will be used for
1871 more verbose error messages, such as E.memtypes. */
1872 if (buf[0] == 'E' && buf[1] == '.')
1873 return PACKET_ERROR;
1874
1875 /* The packet may or may not be OK. Just assume it is. */
1876 return PACKET_OK;
1877 }
1878 else
1879 /* The stub does not support the packet. */
1880 return PACKET_UNKNOWN;
1881 }
1882
1883 static enum packet_result
1884 packet_check_result (const gdb::char_vector &buf)
1885 {
1886 return packet_check_result (buf.data ());
1887 }
1888
1889 static enum packet_result
1890 packet_ok (const char *buf, struct packet_config *config)
1891 {
1892 enum packet_result result;
1893
1894 if (config->detect != AUTO_BOOLEAN_TRUE
1895 && config->support == PACKET_DISABLE)
1896 internal_error (__FILE__, __LINE__,
1897 _("packet_ok: attempt to use a disabled packet"));
1898
1899 result = packet_check_result (buf);
1900 switch (result)
1901 {
1902 case PACKET_OK:
1903 case PACKET_ERROR:
1904 /* The stub recognized the packet request. */
1905 if (config->support == PACKET_SUPPORT_UNKNOWN)
1906 {
1907 if (remote_debug)
1908 fprintf_unfiltered (gdb_stdlog,
1909 "Packet %s (%s) is supported\n",
1910 config->name, config->title);
1911 config->support = PACKET_ENABLE;
1912 }
1913 break;
1914 case PACKET_UNKNOWN:
1915 /* The stub does not support the packet. */
1916 if (config->detect == AUTO_BOOLEAN_AUTO
1917 && config->support == PACKET_ENABLE)
1918 {
1919 /* If the stub previously indicated that the packet was
1920 supported then there is a protocol error. */
1921 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1922 config->name, config->title);
1923 }
1924 else if (config->detect == AUTO_BOOLEAN_TRUE)
1925 {
1926 /* The user set it wrong. */
1927 error (_("Enabled packet %s (%s) not recognized by stub"),
1928 config->name, config->title);
1929 }
1930
1931 if (remote_debug)
1932 fprintf_unfiltered (gdb_stdlog,
1933 "Packet %s (%s) is NOT supported\n",
1934 config->name, config->title);
1935 config->support = PACKET_DISABLE;
1936 break;
1937 }
1938
1939 return result;
1940 }
1941
1942 static enum packet_result
1943 packet_ok (const gdb::char_vector &buf, struct packet_config *config)
1944 {
1945 return packet_ok (buf.data (), config);
1946 }
1947
1948 enum {
1949 PACKET_vCont = 0,
1950 PACKET_X,
1951 PACKET_qSymbol,
1952 PACKET_P,
1953 PACKET_p,
1954 PACKET_Z0,
1955 PACKET_Z1,
1956 PACKET_Z2,
1957 PACKET_Z3,
1958 PACKET_Z4,
1959 PACKET_vFile_setfs,
1960 PACKET_vFile_open,
1961 PACKET_vFile_pread,
1962 PACKET_vFile_pwrite,
1963 PACKET_vFile_close,
1964 PACKET_vFile_unlink,
1965 PACKET_vFile_readlink,
1966 PACKET_vFile_fstat,
1967 PACKET_qXfer_auxv,
1968 PACKET_qXfer_features,
1969 PACKET_qXfer_exec_file,
1970 PACKET_qXfer_libraries,
1971 PACKET_qXfer_libraries_svr4,
1972 PACKET_qXfer_memory_map,
1973 PACKET_qXfer_osdata,
1974 PACKET_qXfer_threads,
1975 PACKET_qXfer_statictrace_read,
1976 PACKET_qXfer_traceframe_info,
1977 PACKET_qXfer_uib,
1978 PACKET_qGetTIBAddr,
1979 PACKET_qGetTLSAddr,
1980 PACKET_qSupported,
1981 PACKET_qTStatus,
1982 PACKET_QPassSignals,
1983 PACKET_QCatchSyscalls,
1984 PACKET_QProgramSignals,
1985 PACKET_QSetWorkingDir,
1986 PACKET_QStartupWithShell,
1987 PACKET_QEnvironmentHexEncoded,
1988 PACKET_QEnvironmentReset,
1989 PACKET_QEnvironmentUnset,
1990 PACKET_qCRC,
1991 PACKET_qSearch_memory,
1992 PACKET_vAttach,
1993 PACKET_vRun,
1994 PACKET_QStartNoAckMode,
1995 PACKET_vKill,
1996 PACKET_qXfer_siginfo_read,
1997 PACKET_qXfer_siginfo_write,
1998 PACKET_qAttached,
1999
2000 /* Support for conditional tracepoints. */
2001 PACKET_ConditionalTracepoints,
2002
2003 /* Support for target-side breakpoint conditions. */
2004 PACKET_ConditionalBreakpoints,
2005
2006 /* Support for target-side breakpoint commands. */
2007 PACKET_BreakpointCommands,
2008
2009 /* Support for fast tracepoints. */
2010 PACKET_FastTracepoints,
2011
2012 /* Support for static tracepoints. */
2013 PACKET_StaticTracepoints,
2014
2015 /* Support for installing tracepoints while a trace experiment is
2016 running. */
2017 PACKET_InstallInTrace,
2018
2019 PACKET_bc,
2020 PACKET_bs,
2021 PACKET_TracepointSource,
2022 PACKET_QAllow,
2023 PACKET_qXfer_fdpic,
2024 PACKET_QDisableRandomization,
2025 PACKET_QAgent,
2026 PACKET_QTBuffer_size,
2027 PACKET_Qbtrace_off,
2028 PACKET_Qbtrace_bts,
2029 PACKET_Qbtrace_pt,
2030 PACKET_qXfer_btrace,
2031
2032 /* Support for the QNonStop packet. */
2033 PACKET_QNonStop,
2034
2035 /* Support for the QThreadEvents packet. */
2036 PACKET_QThreadEvents,
2037
2038 /* Support for multi-process extensions. */
2039 PACKET_multiprocess_feature,
2040
2041 /* Support for enabling and disabling tracepoints while a trace
2042 experiment is running. */
2043 PACKET_EnableDisableTracepoints_feature,
2044
2045 /* Support for collecting strings using the tracenz bytecode. */
2046 PACKET_tracenz_feature,
2047
2048 /* Support for continuing to run a trace experiment while GDB is
2049 disconnected. */
2050 PACKET_DisconnectedTracing_feature,
2051
2052 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
2053 PACKET_augmented_libraries_svr4_read_feature,
2054
2055 /* Support for the qXfer:btrace-conf:read packet. */
2056 PACKET_qXfer_btrace_conf,
2057
2058 /* Support for the Qbtrace-conf:bts:size packet. */
2059 PACKET_Qbtrace_conf_bts_size,
2060
2061 /* Support for swbreak+ feature. */
2062 PACKET_swbreak_feature,
2063
2064 /* Support for hwbreak+ feature. */
2065 PACKET_hwbreak_feature,
2066
2067 /* Support for fork events. */
2068 PACKET_fork_event_feature,
2069
2070 /* Support for vfork events. */
2071 PACKET_vfork_event_feature,
2072
2073 /* Support for the Qbtrace-conf:pt:size packet. */
2074 PACKET_Qbtrace_conf_pt_size,
2075
2076 /* Support for exec events. */
2077 PACKET_exec_event_feature,
2078
2079 /* Support for query supported vCont actions. */
2080 PACKET_vContSupported,
2081
2082 /* Support remote CTRL-C. */
2083 PACKET_vCtrlC,
2084
2085 /* Support TARGET_WAITKIND_NO_RESUMED. */
2086 PACKET_no_resumed,
2087
2088 PACKET_MAX
2089 };
2090
2091 static struct packet_config remote_protocol_packets[PACKET_MAX];
2092
2093 /* Returns the packet's corresponding "set remote foo-packet" command
2094 state. See struct packet_config for more details. */
2095
2096 static enum auto_boolean
2097 packet_set_cmd_state (int packet)
2098 {
2099 return remote_protocol_packets[packet].detect;
2100 }
2101
2102 /* Returns whether a given packet or feature is supported. This takes
2103 into account the state of the corresponding "set remote foo-packet"
2104 command, which may be used to bypass auto-detection. */
2105
2106 static enum packet_support
2107 packet_config_support (struct packet_config *config)
2108 {
2109 switch (config->detect)
2110 {
2111 case AUTO_BOOLEAN_TRUE:
2112 return PACKET_ENABLE;
2113 case AUTO_BOOLEAN_FALSE:
2114 return PACKET_DISABLE;
2115 case AUTO_BOOLEAN_AUTO:
2116 return config->support;
2117 default:
2118 gdb_assert_not_reached (_("bad switch"));
2119 }
2120 }
2121
2122 /* Same as packet_config_support, but takes the packet's enum value as
2123 argument. */
2124
2125 static enum packet_support
2126 packet_support (int packet)
2127 {
2128 struct packet_config *config = &remote_protocol_packets[packet];
2129
2130 return packet_config_support (config);
2131 }
2132
2133 static void
2134 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2135 struct cmd_list_element *c,
2136 const char *value)
2137 {
2138 struct packet_config *packet;
2139
2140 for (packet = remote_protocol_packets;
2141 packet < &remote_protocol_packets[PACKET_MAX];
2142 packet++)
2143 {
2144 if (&packet->detect == c->var)
2145 {
2146 show_packet_config_cmd (packet);
2147 return;
2148 }
2149 }
2150 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
2151 c->name);
2152 }
2153
2154 /* Should we try one of the 'Z' requests? */
2155
2156 enum Z_packet_type
2157 {
2158 Z_PACKET_SOFTWARE_BP,
2159 Z_PACKET_HARDWARE_BP,
2160 Z_PACKET_WRITE_WP,
2161 Z_PACKET_READ_WP,
2162 Z_PACKET_ACCESS_WP,
2163 NR_Z_PACKET_TYPES
2164 };
2165
2166 /* For compatibility with older distributions. Provide a ``set remote
2167 Z-packet ...'' command that updates all the Z packet types. */
2168
2169 static enum auto_boolean remote_Z_packet_detect;
2170
2171 static void
2172 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
2173 struct cmd_list_element *c)
2174 {
2175 int i;
2176
2177 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2178 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
2179 }
2180
2181 static void
2182 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2183 struct cmd_list_element *c,
2184 const char *value)
2185 {
2186 int i;
2187
2188 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2189 {
2190 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
2191 }
2192 }
2193
2194 /* Returns true if the multi-process extensions are in effect. */
2195
2196 static int
2197 remote_multi_process_p (struct remote_state *rs)
2198 {
2199 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2200 }
2201
2202 /* Returns true if fork events are supported. */
2203
2204 static int
2205 remote_fork_event_p (struct remote_state *rs)
2206 {
2207 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2208 }
2209
2210 /* Returns true if vfork events are supported. */
2211
2212 static int
2213 remote_vfork_event_p (struct remote_state *rs)
2214 {
2215 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2216 }
2217
2218 /* Returns true if exec events are supported. */
2219
2220 static int
2221 remote_exec_event_p (struct remote_state *rs)
2222 {
2223 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2224 }
2225
2226 /* Insert fork catchpoint target routine. If fork events are enabled
2227 then return success, nothing more to do. */
2228
2229 int
2230 remote_target::insert_fork_catchpoint (int pid)
2231 {
2232 struct remote_state *rs = get_remote_state ();
2233
2234 return !remote_fork_event_p (rs);
2235 }
2236
2237 /* Remove fork catchpoint target routine. Nothing to do, just
2238 return success. */
2239
2240 int
2241 remote_target::remove_fork_catchpoint (int pid)
2242 {
2243 return 0;
2244 }
2245
2246 /* Insert vfork catchpoint target routine. If vfork events are enabled
2247 then return success, nothing more to do. */
2248
2249 int
2250 remote_target::insert_vfork_catchpoint (int pid)
2251 {
2252 struct remote_state *rs = get_remote_state ();
2253
2254 return !remote_vfork_event_p (rs);
2255 }
2256
2257 /* Remove vfork catchpoint target routine. Nothing to do, just
2258 return success. */
2259
2260 int
2261 remote_target::remove_vfork_catchpoint (int pid)
2262 {
2263 return 0;
2264 }
2265
2266 /* Insert exec catchpoint target routine. If exec events are
2267 enabled, just return success. */
2268
2269 int
2270 remote_target::insert_exec_catchpoint (int pid)
2271 {
2272 struct remote_state *rs = get_remote_state ();
2273
2274 return !remote_exec_event_p (rs);
2275 }
2276
2277 /* Remove exec catchpoint target routine. Nothing to do, just
2278 return success. */
2279
2280 int
2281 remote_target::remove_exec_catchpoint (int pid)
2282 {
2283 return 0;
2284 }
2285
2286 \f
2287
2288 /* Take advantage of the fact that the TID field is not used, to tag
2289 special ptids with it set to != 0. */
2290 static const ptid_t magic_null_ptid (42000, -1, 1);
2291 static const ptid_t not_sent_ptid (42000, -2, 1);
2292 static const ptid_t any_thread_ptid (42000, 0, 1);
2293
2294 /* Find out if the stub attached to PID (and hence GDB should offer to
2295 detach instead of killing it when bailing out). */
2296
2297 int
2298 remote_target::remote_query_attached (int pid)
2299 {
2300 struct remote_state *rs = get_remote_state ();
2301 size_t size = get_remote_packet_size ();
2302
2303 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
2304 return 0;
2305
2306 if (remote_multi_process_p (rs))
2307 xsnprintf (rs->buf.data (), size, "qAttached:%x", pid);
2308 else
2309 xsnprintf (rs->buf.data (), size, "qAttached");
2310
2311 putpkt (rs->buf);
2312 getpkt (&rs->buf, 0);
2313
2314 switch (packet_ok (rs->buf,
2315 &remote_protocol_packets[PACKET_qAttached]))
2316 {
2317 case PACKET_OK:
2318 if (strcmp (rs->buf.data (), "1") == 0)
2319 return 1;
2320 break;
2321 case PACKET_ERROR:
2322 warning (_("Remote failure reply: %s"), rs->buf.data ());
2323 break;
2324 case PACKET_UNKNOWN:
2325 break;
2326 }
2327
2328 return 0;
2329 }
2330
2331 /* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2332 has been invented by GDB, instead of reported by the target. Since
2333 we can be connected to a remote system before before knowing about
2334 any inferior, mark the target with execution when we find the first
2335 inferior. If ATTACHED is 1, then we had just attached to this
2336 inferior. If it is 0, then we just created this inferior. If it
2337 is -1, then try querying the remote stub to find out if it had
2338 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2339 attempt to open this inferior's executable as the main executable
2340 if no main executable is open already. */
2341
2342 inferior *
2343 remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached,
2344 int try_open_exec)
2345 {
2346 struct inferior *inf;
2347
2348 /* Check whether this process we're learning about is to be
2349 considered attached, or if is to be considered to have been
2350 spawned by the stub. */
2351 if (attached == -1)
2352 attached = remote_query_attached (pid);
2353
2354 if (gdbarch_has_global_solist (target_gdbarch ()))
2355 {
2356 /* If the target shares code across all inferiors, then every
2357 attach adds a new inferior. */
2358 inf = add_inferior (pid);
2359
2360 /* ... and every inferior is bound to the same program space.
2361 However, each inferior may still have its own address
2362 space. */
2363 inf->aspace = maybe_new_address_space ();
2364 inf->pspace = current_program_space;
2365 }
2366 else
2367 {
2368 /* In the traditional debugging scenario, there's a 1-1 match
2369 between program/address spaces. We simply bind the inferior
2370 to the program space's address space. */
2371 inf = current_inferior ();
2372 inferior_appeared (inf, pid);
2373 }
2374
2375 inf->attach_flag = attached;
2376 inf->fake_pid_p = fake_pid_p;
2377
2378 /* If no main executable is currently open then attempt to
2379 open the file that was executed to create this inferior. */
2380 if (try_open_exec && get_exec_file (0) == NULL)
2381 exec_file_locate_attach (pid, 0, 1);
2382
2383 return inf;
2384 }
2385
2386 static remote_thread_info *get_remote_thread_info (thread_info *thread);
2387 static remote_thread_info *get_remote_thread_info (ptid_t ptid);
2388
2389 /* Add thread PTID to GDB's thread list. Tag it as executing/running
2390 according to RUNNING. */
2391
2392 thread_info *
2393 remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
2394 {
2395 struct remote_state *rs = get_remote_state ();
2396 struct thread_info *thread;
2397
2398 /* GDB historically didn't pull threads in the initial connection
2399 setup. If the remote target doesn't even have a concept of
2400 threads (e.g., a bare-metal target), even if internally we
2401 consider that a single-threaded target, mentioning a new thread
2402 might be confusing to the user. Be silent then, preserving the
2403 age old behavior. */
2404 if (rs->starting_up)
2405 thread = add_thread_silent (ptid);
2406 else
2407 thread = add_thread (ptid);
2408
2409 get_remote_thread_info (thread)->vcont_resumed = executing;
2410 set_executing (ptid, executing);
2411 set_running (ptid, running);
2412
2413 return thread;
2414 }
2415
2416 /* Come here when we learn about a thread id from the remote target.
2417 It may be the first time we hear about such thread, so take the
2418 opportunity to add it to GDB's thread list. In case this is the
2419 first time we're noticing its corresponding inferior, add it to
2420 GDB's inferior list as well. EXECUTING indicates whether the
2421 thread is (internally) executing or stopped. */
2422
2423 void
2424 remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
2425 {
2426 /* In non-stop mode, we assume new found threads are (externally)
2427 running until proven otherwise with a stop reply. In all-stop,
2428 we can only get here if all threads are stopped. */
2429 int running = target_is_non_stop_p () ? 1 : 0;
2430
2431 /* If this is a new thread, add it to GDB's thread list.
2432 If we leave it up to WFI to do this, bad things will happen. */
2433
2434 thread_info *tp = find_thread_ptid (currthread);
2435 if (tp != NULL && tp->state == THREAD_EXITED)
2436 {
2437 /* We're seeing an event on a thread id we knew had exited.
2438 This has to be a new thread reusing the old id. Add it. */
2439 remote_add_thread (currthread, running, executing);
2440 return;
2441 }
2442
2443 if (!in_thread_list (currthread))
2444 {
2445 struct inferior *inf = NULL;
2446 int pid = currthread.pid ();
2447
2448 if (inferior_ptid.is_pid ()
2449 && pid == inferior_ptid.pid ())
2450 {
2451 /* inferior_ptid has no thread member yet. This can happen
2452 with the vAttach -> remote_wait,"TAAthread:" path if the
2453 stub doesn't support qC. This is the first stop reported
2454 after an attach, so this is the main thread. Update the
2455 ptid in the thread list. */
2456 if (in_thread_list (ptid_t (pid)))
2457 thread_change_ptid (inferior_ptid, currthread);
2458 else
2459 {
2460 remote_add_thread (currthread, running, executing);
2461 inferior_ptid = currthread;
2462 }
2463 return;
2464 }
2465
2466 if (magic_null_ptid == inferior_ptid)
2467 {
2468 /* inferior_ptid is not set yet. This can happen with the
2469 vRun -> remote_wait,"TAAthread:" path if the stub
2470 doesn't support qC. This is the first stop reported
2471 after an attach, so this is the main thread. Update the
2472 ptid in the thread list. */
2473 thread_change_ptid (inferior_ptid, currthread);
2474 return;
2475 }
2476
2477 /* When connecting to a target remote, or to a target
2478 extended-remote which already was debugging an inferior, we
2479 may not know about it yet. Add it before adding its child
2480 thread, so notifications are emitted in a sensible order. */
2481 if (find_inferior_pid (currthread.pid ()) == NULL)
2482 {
2483 struct remote_state *rs = get_remote_state ();
2484 bool fake_pid_p = !remote_multi_process_p (rs);
2485
2486 inf = remote_add_inferior (fake_pid_p,
2487 currthread.pid (), -1, 1);
2488 }
2489
2490 /* This is really a new thread. Add it. */
2491 thread_info *new_thr
2492 = remote_add_thread (currthread, running, executing);
2493
2494 /* If we found a new inferior, let the common code do whatever
2495 it needs to with it (e.g., read shared libraries, insert
2496 breakpoints), unless we're just setting up an all-stop
2497 connection. */
2498 if (inf != NULL)
2499 {
2500 struct remote_state *rs = get_remote_state ();
2501
2502 if (!rs->starting_up)
2503 notice_new_inferior (new_thr, executing, 0);
2504 }
2505 }
2506 }
2507
2508 /* Return THREAD's private thread data, creating it if necessary. */
2509
2510 static remote_thread_info *
2511 get_remote_thread_info (thread_info *thread)
2512 {
2513 gdb_assert (thread != NULL);
2514
2515 if (thread->priv == NULL)
2516 thread->priv.reset (new remote_thread_info);
2517
2518 return static_cast<remote_thread_info *> (thread->priv.get ());
2519 }
2520
2521 static remote_thread_info *
2522 get_remote_thread_info (ptid_t ptid)
2523 {
2524 thread_info *thr = find_thread_ptid (ptid);
2525 return get_remote_thread_info (thr);
2526 }
2527
2528 /* Call this function as a result of
2529 1) A halt indication (T packet) containing a thread id
2530 2) A direct query of currthread
2531 3) Successful execution of set thread */
2532
2533 static void
2534 record_currthread (struct remote_state *rs, ptid_t currthread)
2535 {
2536 rs->general_thread = currthread;
2537 }
2538
2539 /* If 'QPassSignals' is supported, tell the remote stub what signals
2540 it can simply pass through to the inferior without reporting. */
2541
2542 void
2543 remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
2544 {
2545 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2546 {
2547 char *pass_packet, *p;
2548 int count = 0;
2549 struct remote_state *rs = get_remote_state ();
2550
2551 gdb_assert (pass_signals.size () < 256);
2552 for (size_t i = 0; i < pass_signals.size (); i++)
2553 {
2554 if (pass_signals[i])
2555 count++;
2556 }
2557 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2558 strcpy (pass_packet, "QPassSignals:");
2559 p = pass_packet + strlen (pass_packet);
2560 for (size_t i = 0; i < pass_signals.size (); i++)
2561 {
2562 if (pass_signals[i])
2563 {
2564 if (i >= 16)
2565 *p++ = tohex (i >> 4);
2566 *p++ = tohex (i & 15);
2567 if (count)
2568 *p++ = ';';
2569 else
2570 break;
2571 count--;
2572 }
2573 }
2574 *p = 0;
2575 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2576 {
2577 putpkt (pass_packet);
2578 getpkt (&rs->buf, 0);
2579 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2580 if (rs->last_pass_packet)
2581 xfree (rs->last_pass_packet);
2582 rs->last_pass_packet = pass_packet;
2583 }
2584 else
2585 xfree (pass_packet);
2586 }
2587 }
2588
2589 /* If 'QCatchSyscalls' is supported, tell the remote stub
2590 to report syscalls to GDB. */
2591
2592 int
2593 remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2594 gdb::array_view<const int> syscall_counts)
2595 {
2596 const char *catch_packet;
2597 enum packet_result result;
2598 int n_sysno = 0;
2599
2600 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2601 {
2602 /* Not supported. */
2603 return 1;
2604 }
2605
2606 if (needed && any_count == 0)
2607 {
2608 /* Count how many syscalls are to be caught. */
2609 for (size_t i = 0; i < syscall_counts.size (); i++)
2610 {
2611 if (syscall_counts[i] != 0)
2612 n_sysno++;
2613 }
2614 }
2615
2616 if (remote_debug)
2617 {
2618 fprintf_unfiltered (gdb_stdlog,
2619 "remote_set_syscall_catchpoint "
2620 "pid %d needed %d any_count %d n_sysno %d\n",
2621 pid, needed, any_count, n_sysno);
2622 }
2623
2624 std::string built_packet;
2625 if (needed)
2626 {
2627 /* Prepare a packet with the sysno list, assuming max 8+1
2628 characters for a sysno. If the resulting packet size is too
2629 big, fallback on the non-selective packet. */
2630 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2631 built_packet.reserve (maxpktsz);
2632 built_packet = "QCatchSyscalls:1";
2633 if (any_count == 0)
2634 {
2635 /* Add in each syscall to be caught. */
2636 for (size_t i = 0; i < syscall_counts.size (); i++)
2637 {
2638 if (syscall_counts[i] != 0)
2639 string_appendf (built_packet, ";%zx", i);
2640 }
2641 }
2642 if (built_packet.size () > get_remote_packet_size ())
2643 {
2644 /* catch_packet too big. Fallback to less efficient
2645 non selective mode, with GDB doing the filtering. */
2646 catch_packet = "QCatchSyscalls:1";
2647 }
2648 else
2649 catch_packet = built_packet.c_str ();
2650 }
2651 else
2652 catch_packet = "QCatchSyscalls:0";
2653
2654 struct remote_state *rs = get_remote_state ();
2655
2656 putpkt (catch_packet);
2657 getpkt (&rs->buf, 0);
2658 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2659 if (result == PACKET_OK)
2660 return 0;
2661 else
2662 return -1;
2663 }
2664
2665 /* If 'QProgramSignals' is supported, tell the remote stub what
2666 signals it should pass through to the inferior when detaching. */
2667
2668 void
2669 remote_target::program_signals (gdb::array_view<const unsigned char> signals)
2670 {
2671 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2672 {
2673 char *packet, *p;
2674 int count = 0;
2675 struct remote_state *rs = get_remote_state ();
2676
2677 gdb_assert (signals.size () < 256);
2678 for (size_t i = 0; i < signals.size (); i++)
2679 {
2680 if (signals[i])
2681 count++;
2682 }
2683 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2684 strcpy (packet, "QProgramSignals:");
2685 p = packet + strlen (packet);
2686 for (size_t i = 0; i < signals.size (); i++)
2687 {
2688 if (signal_pass_state (i))
2689 {
2690 if (i >= 16)
2691 *p++ = tohex (i >> 4);
2692 *p++ = tohex (i & 15);
2693 if (count)
2694 *p++ = ';';
2695 else
2696 break;
2697 count--;
2698 }
2699 }
2700 *p = 0;
2701 if (!rs->last_program_signals_packet
2702 || strcmp (rs->last_program_signals_packet, packet) != 0)
2703 {
2704 putpkt (packet);
2705 getpkt (&rs->buf, 0);
2706 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2707 xfree (rs->last_program_signals_packet);
2708 rs->last_program_signals_packet = packet;
2709 }
2710 else
2711 xfree (packet);
2712 }
2713 }
2714
2715 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2716 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2717 thread. If GEN is set, set the general thread, if not, then set
2718 the step/continue thread. */
2719 void
2720 remote_target::set_thread (ptid_t ptid, int gen)
2721 {
2722 struct remote_state *rs = get_remote_state ();
2723 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2724 char *buf = rs->buf.data ();
2725 char *endbuf = buf + get_remote_packet_size ();
2726
2727 if (state == ptid)
2728 return;
2729
2730 *buf++ = 'H';
2731 *buf++ = gen ? 'g' : 'c';
2732 if (ptid == magic_null_ptid)
2733 xsnprintf (buf, endbuf - buf, "0");
2734 else if (ptid == any_thread_ptid)
2735 xsnprintf (buf, endbuf - buf, "0");
2736 else if (ptid == minus_one_ptid)
2737 xsnprintf (buf, endbuf - buf, "-1");
2738 else
2739 write_ptid (buf, endbuf, ptid);
2740 putpkt (rs->buf);
2741 getpkt (&rs->buf, 0);
2742 if (gen)
2743 rs->general_thread = ptid;
2744 else
2745 rs->continue_thread = ptid;
2746 }
2747
2748 void
2749 remote_target::set_general_thread (ptid_t ptid)
2750 {
2751 set_thread (ptid, 1);
2752 }
2753
2754 void
2755 remote_target::set_continue_thread (ptid_t ptid)
2756 {
2757 set_thread (ptid, 0);
2758 }
2759
2760 /* Change the remote current process. Which thread within the process
2761 ends up selected isn't important, as long as it is the same process
2762 as what INFERIOR_PTID points to.
2763
2764 This comes from that fact that there is no explicit notion of
2765 "selected process" in the protocol. The selected process for
2766 general operations is the process the selected general thread
2767 belongs to. */
2768
2769 void
2770 remote_target::set_general_process ()
2771 {
2772 struct remote_state *rs = get_remote_state ();
2773
2774 /* If the remote can't handle multiple processes, don't bother. */
2775 if (!remote_multi_process_p (rs))
2776 return;
2777
2778 /* We only need to change the remote current thread if it's pointing
2779 at some other process. */
2780 if (rs->general_thread.pid () != inferior_ptid.pid ())
2781 set_general_thread (inferior_ptid);
2782 }
2783
2784 \f
2785 /* Return nonzero if this is the main thread that we made up ourselves
2786 to model non-threaded targets as single-threaded. */
2787
2788 static int
2789 remote_thread_always_alive (ptid_t ptid)
2790 {
2791 if (ptid == magic_null_ptid)
2792 /* The main thread is always alive. */
2793 return 1;
2794
2795 if (ptid.pid () != 0 && ptid.lwp () == 0)
2796 /* The main thread is always alive. This can happen after a
2797 vAttach, if the remote side doesn't support
2798 multi-threading. */
2799 return 1;
2800
2801 return 0;
2802 }
2803
2804 /* Return nonzero if the thread PTID is still alive on the remote
2805 system. */
2806
2807 bool
2808 remote_target::thread_alive (ptid_t ptid)
2809 {
2810 struct remote_state *rs = get_remote_state ();
2811 char *p, *endp;
2812
2813 /* Check if this is a thread that we made up ourselves to model
2814 non-threaded targets as single-threaded. */
2815 if (remote_thread_always_alive (ptid))
2816 return 1;
2817
2818 p = rs->buf.data ();
2819 endp = p + get_remote_packet_size ();
2820
2821 *p++ = 'T';
2822 write_ptid (p, endp, ptid);
2823
2824 putpkt (rs->buf);
2825 getpkt (&rs->buf, 0);
2826 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2827 }
2828
2829 /* Return a pointer to a thread name if we know it and NULL otherwise.
2830 The thread_info object owns the memory for the name. */
2831
2832 const char *
2833 remote_target::thread_name (struct thread_info *info)
2834 {
2835 if (info->priv != NULL)
2836 {
2837 const std::string &name = get_remote_thread_info (info)->name;
2838 return !name.empty () ? name.c_str () : NULL;
2839 }
2840
2841 return NULL;
2842 }
2843
2844 /* About these extended threadlist and threadinfo packets. They are
2845 variable length packets but, the fields within them are often fixed
2846 length. They are redundent enough to send over UDP as is the
2847 remote protocol in general. There is a matching unit test module
2848 in libstub. */
2849
2850 /* WARNING: This threadref data structure comes from the remote O.S.,
2851 libstub protocol encoding, and remote.c. It is not particularly
2852 changable. */
2853
2854 /* Right now, the internal structure is int. We want it to be bigger.
2855 Plan to fix this. */
2856
2857 typedef int gdb_threadref; /* Internal GDB thread reference. */
2858
2859 /* gdb_ext_thread_info is an internal GDB data structure which is
2860 equivalent to the reply of the remote threadinfo packet. */
2861
2862 struct gdb_ext_thread_info
2863 {
2864 threadref threadid; /* External form of thread reference. */
2865 int active; /* Has state interesting to GDB?
2866 regs, stack. */
2867 char display[256]; /* Brief state display, name,
2868 blocked/suspended. */
2869 char shortname[32]; /* To be used to name threads. */
2870 char more_display[256]; /* Long info, statistics, queue depth,
2871 whatever. */
2872 };
2873
2874 /* The volume of remote transfers can be limited by submitting
2875 a mask containing bits specifying the desired information.
2876 Use a union of these values as the 'selection' parameter to
2877 get_thread_info. FIXME: Make these TAG names more thread specific. */
2878
2879 #define TAG_THREADID 1
2880 #define TAG_EXISTS 2
2881 #define TAG_DISPLAY 4
2882 #define TAG_THREADNAME 8
2883 #define TAG_MOREDISPLAY 16
2884
2885 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2886
2887 static char *unpack_nibble (char *buf, int *val);
2888
2889 static char *unpack_byte (char *buf, int *value);
2890
2891 static char *pack_int (char *buf, int value);
2892
2893 static char *unpack_int (char *buf, int *value);
2894
2895 static char *unpack_string (char *src, char *dest, int length);
2896
2897 static char *pack_threadid (char *pkt, threadref *id);
2898
2899 static char *unpack_threadid (char *inbuf, threadref *id);
2900
2901 void int_to_threadref (threadref *id, int value);
2902
2903 static int threadref_to_int (threadref *ref);
2904
2905 static void copy_threadref (threadref *dest, threadref *src);
2906
2907 static int threadmatch (threadref *dest, threadref *src);
2908
2909 static char *pack_threadinfo_request (char *pkt, int mode,
2910 threadref *id);
2911
2912 static char *pack_threadlist_request (char *pkt, int startflag,
2913 int threadcount,
2914 threadref *nextthread);
2915
2916 static int remote_newthread_step (threadref *ref, void *context);
2917
2918
2919 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2920 buffer we're allowed to write to. Returns
2921 BUF+CHARACTERS_WRITTEN. */
2922
2923 char *
2924 remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2925 {
2926 int pid, tid;
2927 struct remote_state *rs = get_remote_state ();
2928
2929 if (remote_multi_process_p (rs))
2930 {
2931 pid = ptid.pid ();
2932 if (pid < 0)
2933 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2934 else
2935 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2936 }
2937 tid = ptid.lwp ();
2938 if (tid < 0)
2939 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2940 else
2941 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2942
2943 return buf;
2944 }
2945
2946 /* Extract a PTID from BUF. If non-null, OBUF is set to one past the
2947 last parsed char. Returns null_ptid if no thread id is found, and
2948 throws an error if the thread id has an invalid format. */
2949
2950 static ptid_t
2951 read_ptid (const char *buf, const char **obuf)
2952 {
2953 const char *p = buf;
2954 const char *pp;
2955 ULONGEST pid = 0, tid = 0;
2956
2957 if (*p == 'p')
2958 {
2959 /* Multi-process ptid. */
2960 pp = unpack_varlen_hex (p + 1, &pid);
2961 if (*pp != '.')
2962 error (_("invalid remote ptid: %s"), p);
2963
2964 p = pp;
2965 pp = unpack_varlen_hex (p + 1, &tid);
2966 if (obuf)
2967 *obuf = pp;
2968 return ptid_t (pid, tid, 0);
2969 }
2970
2971 /* No multi-process. Just a tid. */
2972 pp = unpack_varlen_hex (p, &tid);
2973
2974 /* Return null_ptid when no thread id is found. */
2975 if (p == pp)
2976 {
2977 if (obuf)
2978 *obuf = pp;
2979 return null_ptid;
2980 }
2981
2982 /* Since the stub is not sending a process id, then default to
2983 what's in inferior_ptid, unless it's null at this point. If so,
2984 then since there's no way to know the pid of the reported
2985 threads, use the magic number. */
2986 if (inferior_ptid == null_ptid)
2987 pid = magic_null_ptid.pid ();
2988 else
2989 pid = inferior_ptid.pid ();
2990
2991 if (obuf)
2992 *obuf = pp;
2993 return ptid_t (pid, tid, 0);
2994 }
2995
2996 static int
2997 stubhex (int ch)
2998 {
2999 if (ch >= 'a' && ch <= 'f')
3000 return ch - 'a' + 10;
3001 if (ch >= '0' && ch <= '9')
3002 return ch - '0';
3003 if (ch >= 'A' && ch <= 'F')
3004 return ch - 'A' + 10;
3005 return -1;
3006 }
3007
3008 static int
3009 stub_unpack_int (char *buff, int fieldlength)
3010 {
3011 int nibble;
3012 int retval = 0;
3013
3014 while (fieldlength)
3015 {
3016 nibble = stubhex (*buff++);
3017 retval |= nibble;
3018 fieldlength--;
3019 if (fieldlength)
3020 retval = retval << 4;
3021 }
3022 return retval;
3023 }
3024
3025 static char *
3026 unpack_nibble (char *buf, int *val)
3027 {
3028 *val = fromhex (*buf++);
3029 return buf;
3030 }
3031
3032 static char *
3033 unpack_byte (char *buf, int *value)
3034 {
3035 *value = stub_unpack_int (buf, 2);
3036 return buf + 2;
3037 }
3038
3039 static char *
3040 pack_int (char *buf, int value)
3041 {
3042 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3043 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3044 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3045 buf = pack_hex_byte (buf, (value & 0xff));
3046 return buf;
3047 }
3048
3049 static char *
3050 unpack_int (char *buf, int *value)
3051 {
3052 *value = stub_unpack_int (buf, 8);
3053 return buf + 8;
3054 }
3055
3056 #if 0 /* Currently unused, uncomment when needed. */
3057 static char *pack_string (char *pkt, char *string);
3058
3059 static char *
3060 pack_string (char *pkt, char *string)
3061 {
3062 char ch;
3063 int len;
3064
3065 len = strlen (string);
3066 if (len > 200)
3067 len = 200; /* Bigger than most GDB packets, junk??? */
3068 pkt = pack_hex_byte (pkt, len);
3069 while (len-- > 0)
3070 {
3071 ch = *string++;
3072 if ((ch == '\0') || (ch == '#'))
3073 ch = '*'; /* Protect encapsulation. */
3074 *pkt++ = ch;
3075 }
3076 return pkt;
3077 }
3078 #endif /* 0 (unused) */
3079
3080 static char *
3081 unpack_string (char *src, char *dest, int length)
3082 {
3083 while (length--)
3084 *dest++ = *src++;
3085 *dest = '\0';
3086 return src;
3087 }
3088
3089 static char *
3090 pack_threadid (char *pkt, threadref *id)
3091 {
3092 char *limit;
3093 unsigned char *altid;
3094
3095 altid = (unsigned char *) id;
3096 limit = pkt + BUF_THREAD_ID_SIZE;
3097 while (pkt < limit)
3098 pkt = pack_hex_byte (pkt, *altid++);
3099 return pkt;
3100 }
3101
3102
3103 static char *
3104 unpack_threadid (char *inbuf, threadref *id)
3105 {
3106 char *altref;
3107 char *limit = inbuf + BUF_THREAD_ID_SIZE;
3108 int x, y;
3109
3110 altref = (char *) id;
3111
3112 while (inbuf < limit)
3113 {
3114 x = stubhex (*inbuf++);
3115 y = stubhex (*inbuf++);
3116 *altref++ = (x << 4) | y;
3117 }
3118 return inbuf;
3119 }
3120
3121 /* Externally, threadrefs are 64 bits but internally, they are still
3122 ints. This is due to a mismatch of specifications. We would like
3123 to use 64bit thread references internally. This is an adapter
3124 function. */
3125
3126 void
3127 int_to_threadref (threadref *id, int value)
3128 {
3129 unsigned char *scan;
3130
3131 scan = (unsigned char *) id;
3132 {
3133 int i = 4;
3134 while (i--)
3135 *scan++ = 0;
3136 }
3137 *scan++ = (value >> 24) & 0xff;
3138 *scan++ = (value >> 16) & 0xff;
3139 *scan++ = (value >> 8) & 0xff;
3140 *scan++ = (value & 0xff);
3141 }
3142
3143 static int
3144 threadref_to_int (threadref *ref)
3145 {
3146 int i, value = 0;
3147 unsigned char *scan;
3148
3149 scan = *ref;
3150 scan += 4;
3151 i = 4;
3152 while (i-- > 0)
3153 value = (value << 8) | ((*scan++) & 0xff);
3154 return value;
3155 }
3156
3157 static void
3158 copy_threadref (threadref *dest, threadref *src)
3159 {
3160 int i;
3161 unsigned char *csrc, *cdest;
3162
3163 csrc = (unsigned char *) src;
3164 cdest = (unsigned char *) dest;
3165 i = 8;
3166 while (i--)
3167 *cdest++ = *csrc++;
3168 }
3169
3170 static int
3171 threadmatch (threadref *dest, threadref *src)
3172 {
3173 /* Things are broken right now, so just assume we got a match. */
3174 #if 0
3175 unsigned char *srcp, *destp;
3176 int i, result;
3177 srcp = (char *) src;
3178 destp = (char *) dest;
3179
3180 result = 1;
3181 while (i-- > 0)
3182 result &= (*srcp++ == *destp++) ? 1 : 0;
3183 return result;
3184 #endif
3185 return 1;
3186 }
3187
3188 /*
3189 threadid:1, # always request threadid
3190 context_exists:2,
3191 display:4,
3192 unique_name:8,
3193 more_display:16
3194 */
3195
3196 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3197
3198 static char *
3199 pack_threadinfo_request (char *pkt, int mode, threadref *id)
3200 {
3201 *pkt++ = 'q'; /* Info Query */
3202 *pkt++ = 'P'; /* process or thread info */
3203 pkt = pack_int (pkt, mode); /* mode */
3204 pkt = pack_threadid (pkt, id); /* threadid */
3205 *pkt = '\0'; /* terminate */
3206 return pkt;
3207 }
3208
3209 /* These values tag the fields in a thread info response packet. */
3210 /* Tagging the fields allows us to request specific fields and to
3211 add more fields as time goes by. */
3212
3213 #define TAG_THREADID 1 /* Echo the thread identifier. */
3214 #define TAG_EXISTS 2 /* Is this process defined enough to
3215 fetch registers and its stack? */
3216 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
3217 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
3218 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
3219 the process. */
3220
3221 int
3222 remote_target::remote_unpack_thread_info_response (char *pkt,
3223 threadref *expectedref,
3224 gdb_ext_thread_info *info)
3225 {
3226 struct remote_state *rs = get_remote_state ();
3227 int mask, length;
3228 int tag;
3229 threadref ref;
3230 char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */
3231 int retval = 1;
3232
3233 /* info->threadid = 0; FIXME: implement zero_threadref. */
3234 info->active = 0;
3235 info->display[0] = '\0';
3236 info->shortname[0] = '\0';
3237 info->more_display[0] = '\0';
3238
3239 /* Assume the characters indicating the packet type have been
3240 stripped. */
3241 pkt = unpack_int (pkt, &mask); /* arg mask */
3242 pkt = unpack_threadid (pkt, &ref);
3243
3244 if (mask == 0)
3245 warning (_("Incomplete response to threadinfo request."));
3246 if (!threadmatch (&ref, expectedref))
3247 { /* This is an answer to a different request. */
3248 warning (_("ERROR RMT Thread info mismatch."));
3249 return 0;
3250 }
3251 copy_threadref (&info->threadid, &ref);
3252
3253 /* Loop on tagged fields , try to bail if somthing goes wrong. */
3254
3255 /* Packets are terminated with nulls. */
3256 while ((pkt < limit) && mask && *pkt)
3257 {
3258 pkt = unpack_int (pkt, &tag); /* tag */
3259 pkt = unpack_byte (pkt, &length); /* length */
3260 if (!(tag & mask)) /* Tags out of synch with mask. */
3261 {
3262 warning (_("ERROR RMT: threadinfo tag mismatch."));
3263 retval = 0;
3264 break;
3265 }
3266 if (tag == TAG_THREADID)
3267 {
3268 if (length != 16)
3269 {
3270 warning (_("ERROR RMT: length of threadid is not 16."));
3271 retval = 0;
3272 break;
3273 }
3274 pkt = unpack_threadid (pkt, &ref);
3275 mask = mask & ~TAG_THREADID;
3276 continue;
3277 }
3278 if (tag == TAG_EXISTS)
3279 {
3280 info->active = stub_unpack_int (pkt, length);
3281 pkt += length;
3282 mask = mask & ~(TAG_EXISTS);
3283 if (length > 8)
3284 {
3285 warning (_("ERROR RMT: 'exists' length too long."));
3286 retval = 0;
3287 break;
3288 }
3289 continue;
3290 }
3291 if (tag == TAG_THREADNAME)
3292 {
3293 pkt = unpack_string (pkt, &info->shortname[0], length);
3294 mask = mask & ~TAG_THREADNAME;
3295 continue;
3296 }
3297 if (tag == TAG_DISPLAY)
3298 {
3299 pkt = unpack_string (pkt, &info->display[0], length);
3300 mask = mask & ~TAG_DISPLAY;
3301 continue;
3302 }
3303 if (tag == TAG_MOREDISPLAY)
3304 {
3305 pkt = unpack_string (pkt, &info->more_display[0], length);
3306 mask = mask & ~TAG_MOREDISPLAY;
3307 continue;
3308 }
3309 warning (_("ERROR RMT: unknown thread info tag."));
3310 break; /* Not a tag we know about. */
3311 }
3312 return retval;
3313 }
3314
3315 int
3316 remote_target::remote_get_threadinfo (threadref *threadid,
3317 int fieldset,
3318 gdb_ext_thread_info *info)
3319 {
3320 struct remote_state *rs = get_remote_state ();
3321 int result;
3322
3323 pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
3324 putpkt (rs->buf);
3325 getpkt (&rs->buf, 0);
3326
3327 if (rs->buf[0] == '\0')
3328 return 0;
3329
3330 result = remote_unpack_thread_info_response (&rs->buf[2],
3331 threadid, info);
3332 return result;
3333 }
3334
3335 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3336
3337 static char *
3338 pack_threadlist_request (char *pkt, int startflag, int threadcount,
3339 threadref *nextthread)
3340 {
3341 *pkt++ = 'q'; /* info query packet */
3342 *pkt++ = 'L'; /* Process LIST or threadLIST request */
3343 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
3344 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3345 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3346 *pkt = '\0';
3347 return pkt;
3348 }
3349
3350 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3351
3352 int
3353 remote_target::parse_threadlist_response (char *pkt, int result_limit,
3354 threadref *original_echo,
3355 threadref *resultlist,
3356 int *doneflag)
3357 {
3358 struct remote_state *rs = get_remote_state ();
3359 char *limit;
3360 int count, resultcount, done;
3361
3362 resultcount = 0;
3363 /* Assume the 'q' and 'M chars have been stripped. */
3364 limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
3365 /* done parse past here */
3366 pkt = unpack_byte (pkt, &count); /* count field */
3367 pkt = unpack_nibble (pkt, &done);
3368 /* The first threadid is the argument threadid. */
3369 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3370 while ((count-- > 0) && (pkt < limit))
3371 {
3372 pkt = unpack_threadid (pkt, resultlist++);
3373 if (resultcount++ >= result_limit)
3374 break;
3375 }
3376 if (doneflag)
3377 *doneflag = done;
3378 return resultcount;
3379 }
3380
3381 /* Fetch the next batch of threads from the remote. Returns -1 if the
3382 qL packet is not supported, 0 on error and 1 on success. */
3383
3384 int
3385 remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3386 int result_limit, int *done, int *result_count,
3387 threadref *threadlist)
3388 {
3389 struct remote_state *rs = get_remote_state ();
3390 int result = 1;
3391
3392 /* Trancate result limit to be smaller than the packet size. */
3393 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3394 >= get_remote_packet_size ())
3395 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
3396
3397 pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3398 nextthread);
3399 putpkt (rs->buf);
3400 getpkt (&rs->buf, 0);
3401 if (rs->buf[0] == '\0')
3402 {
3403 /* Packet not supported. */
3404 return -1;
3405 }
3406
3407 *result_count =
3408 parse_threadlist_response (&rs->buf[2], result_limit,
3409 &rs->echo_nextthread, threadlist, done);
3410
3411 if (!threadmatch (&rs->echo_nextthread, nextthread))
3412 {
3413 /* FIXME: This is a good reason to drop the packet. */
3414 /* Possably, there is a duplicate response. */
3415 /* Possabilities :
3416 retransmit immediatly - race conditions
3417 retransmit after timeout - yes
3418 exit
3419 wait for packet, then exit
3420 */
3421 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
3422 return 0; /* I choose simply exiting. */
3423 }
3424 if (*result_count <= 0)
3425 {
3426 if (*done != 1)
3427 {
3428 warning (_("RMT ERROR : failed to get remote thread list."));
3429 result = 0;
3430 }
3431 return result; /* break; */
3432 }
3433 if (*result_count > result_limit)
3434 {
3435 *result_count = 0;
3436 warning (_("RMT ERROR: threadlist response longer than requested."));
3437 return 0;
3438 }
3439 return result;
3440 }
3441
3442 /* Fetch the list of remote threads, with the qL packet, and call
3443 STEPFUNCTION for each thread found. Stops iterating and returns 1
3444 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3445 STEPFUNCTION returns false. If the packet is not supported,
3446 returns -1. */
3447
3448 int
3449 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3450 void *context, int looplimit)
3451 {
3452 struct remote_state *rs = get_remote_state ();
3453 int done, i, result_count;
3454 int startflag = 1;
3455 int result = 1;
3456 int loopcount = 0;
3457
3458 done = 0;
3459 while (!done)
3460 {
3461 if (loopcount++ > looplimit)
3462 {
3463 result = 0;
3464 warning (_("Remote fetch threadlist -infinite loop-."));
3465 break;
3466 }
3467 result = remote_get_threadlist (startflag, &rs->nextthread,
3468 MAXTHREADLISTRESULTS,
3469 &done, &result_count,
3470 rs->resultthreadlist);
3471 if (result <= 0)
3472 break;
3473 /* Clear for later iterations. */
3474 startflag = 0;
3475 /* Setup to resume next batch of thread references, set nextthread. */
3476 if (result_count >= 1)
3477 copy_threadref (&rs->nextthread,
3478 &rs->resultthreadlist[result_count - 1]);
3479 i = 0;
3480 while (result_count--)
3481 {
3482 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3483 {
3484 result = 0;
3485 break;
3486 }
3487 }
3488 }
3489 return result;
3490 }
3491
3492 /* A thread found on the remote target. */
3493
3494 struct thread_item
3495 {
3496 explicit thread_item (ptid_t ptid_)
3497 : ptid (ptid_)
3498 {}
3499
3500 thread_item (thread_item &&other) = default;
3501 thread_item &operator= (thread_item &&other) = default;
3502
3503 DISABLE_COPY_AND_ASSIGN (thread_item);
3504
3505 /* The thread's PTID. */
3506 ptid_t ptid;
3507
3508 /* The thread's extra info. */
3509 std::string extra;
3510
3511 /* The thread's name. */
3512 std::string name;
3513
3514 /* The core the thread was running on. -1 if not known. */
3515 int core = -1;
3516
3517 /* The thread handle associated with the thread. */
3518 gdb::byte_vector thread_handle;
3519 };
3520
3521 /* Context passed around to the various methods listing remote
3522 threads. As new threads are found, they're added to the ITEMS
3523 vector. */
3524
3525 struct threads_listing_context
3526 {
3527 /* Return true if this object contains an entry for a thread with ptid
3528 PTID. */
3529
3530 bool contains_thread (ptid_t ptid) const
3531 {
3532 auto match_ptid = [&] (const thread_item &item)
3533 {
3534 return item.ptid == ptid;
3535 };
3536
3537 auto it = std::find_if (this->items.begin (),
3538 this->items.end (),
3539 match_ptid);
3540
3541 return it != this->items.end ();
3542 }
3543
3544 /* Remove the thread with ptid PTID. */
3545
3546 void remove_thread (ptid_t ptid)
3547 {
3548 auto match_ptid = [&] (const thread_item &item)
3549 {
3550 return item.ptid == ptid;
3551 };
3552
3553 auto it = std::remove_if (this->items.begin (),
3554 this->items.end (),
3555 match_ptid);
3556
3557 if (it != this->items.end ())
3558 this->items.erase (it);
3559 }
3560
3561 /* The threads found on the remote target. */
3562 std::vector<thread_item> items;
3563 };
3564
3565 static int
3566 remote_newthread_step (threadref *ref, void *data)
3567 {
3568 struct threads_listing_context *context
3569 = (struct threads_listing_context *) data;
3570 int pid = inferior_ptid.pid ();
3571 int lwp = threadref_to_int (ref);
3572 ptid_t ptid (pid, lwp);
3573
3574 context->items.emplace_back (ptid);
3575
3576 return 1; /* continue iterator */
3577 }
3578
3579 #define CRAZY_MAX_THREADS 1000
3580
3581 ptid_t
3582 remote_target::remote_current_thread (ptid_t oldpid)
3583 {
3584 struct remote_state *rs = get_remote_state ();
3585
3586 putpkt ("qC");
3587 getpkt (&rs->buf, 0);
3588 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3589 {
3590 const char *obuf;
3591 ptid_t result;
3592
3593 result = read_ptid (&rs->buf[2], &obuf);
3594 if (*obuf != '\0' && remote_debug)
3595 fprintf_unfiltered (gdb_stdlog,
3596 "warning: garbage in qC reply\n");
3597
3598 return result;
3599 }
3600 else
3601 return oldpid;
3602 }
3603
3604 /* List remote threads using the deprecated qL packet. */
3605
3606 int
3607 remote_target::remote_get_threads_with_ql (threads_listing_context *context)
3608 {
3609 if (remote_threadlist_iterator (remote_newthread_step, context,
3610 CRAZY_MAX_THREADS) >= 0)
3611 return 1;
3612
3613 return 0;
3614 }
3615
3616 #if defined(HAVE_LIBEXPAT)
3617
3618 static void
3619 start_thread (struct gdb_xml_parser *parser,
3620 const struct gdb_xml_element *element,
3621 void *user_data,
3622 std::vector<gdb_xml_value> &attributes)
3623 {
3624 struct threads_listing_context *data
3625 = (struct threads_listing_context *) user_data;
3626 struct gdb_xml_value *attr;
3627
3628 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
3629 ptid_t ptid = read_ptid (id, NULL);
3630
3631 data->items.emplace_back (ptid);
3632 thread_item &item = data->items.back ();
3633
3634 attr = xml_find_attribute (attributes, "core");
3635 if (attr != NULL)
3636 item.core = *(ULONGEST *) attr->value.get ();
3637
3638 attr = xml_find_attribute (attributes, "name");
3639 if (attr != NULL)
3640 item.name = (const char *) attr->value.get ();
3641
3642 attr = xml_find_attribute (attributes, "handle");
3643 if (attr != NULL)
3644 item.thread_handle = hex2bin ((const char *) attr->value.get ());
3645 }
3646
3647 static void
3648 end_thread (struct gdb_xml_parser *parser,
3649 const struct gdb_xml_element *element,
3650 void *user_data, const char *body_text)
3651 {
3652 struct threads_listing_context *data
3653 = (struct threads_listing_context *) user_data;
3654
3655 if (body_text != NULL && *body_text != '\0')
3656 data->items.back ().extra = body_text;
3657 }
3658
3659 const struct gdb_xml_attribute thread_attributes[] = {
3660 { "id", GDB_XML_AF_NONE, NULL, NULL },
3661 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3662 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3663 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3664 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3665 };
3666
3667 const struct gdb_xml_element thread_children[] = {
3668 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3669 };
3670
3671 const struct gdb_xml_element threads_children[] = {
3672 { "thread", thread_attributes, thread_children,
3673 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3674 start_thread, end_thread },
3675 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3676 };
3677
3678 const struct gdb_xml_element threads_elements[] = {
3679 { "threads", NULL, threads_children,
3680 GDB_XML_EF_NONE, NULL, NULL },
3681 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3682 };
3683
3684 #endif
3685
3686 /* List remote threads using qXfer:threads:read. */
3687
3688 int
3689 remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
3690 {
3691 #if defined(HAVE_LIBEXPAT)
3692 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3693 {
3694 gdb::optional<gdb::char_vector> xml
3695 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
3696
3697 if (xml && (*xml)[0] != '\0')
3698 {
3699 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3700 threads_elements, xml->data (), context);
3701 }
3702
3703 return 1;
3704 }
3705 #endif
3706
3707 return 0;
3708 }
3709
3710 /* List remote threads using qfThreadInfo/qsThreadInfo. */
3711
3712 int
3713 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
3714 {
3715 struct remote_state *rs = get_remote_state ();
3716
3717 if (rs->use_threadinfo_query)
3718 {
3719 const char *bufp;
3720
3721 putpkt ("qfThreadInfo");
3722 getpkt (&rs->buf, 0);
3723 bufp = rs->buf.data ();
3724 if (bufp[0] != '\0') /* q packet recognized */
3725 {
3726 while (*bufp++ == 'm') /* reply contains one or more TID */
3727 {
3728 do
3729 {
3730 ptid_t ptid = read_ptid (bufp, &bufp);
3731 context->items.emplace_back (ptid);
3732 }
3733 while (*bufp++ == ','); /* comma-separated list */
3734 putpkt ("qsThreadInfo");
3735 getpkt (&rs->buf, 0);
3736 bufp = rs->buf.data ();
3737 }
3738 return 1;
3739 }
3740 else
3741 {
3742 /* Packet not recognized. */
3743 rs->use_threadinfo_query = 0;
3744 }
3745 }
3746
3747 return 0;
3748 }
3749
3750 /* Implement the to_update_thread_list function for the remote
3751 targets. */
3752
3753 void
3754 remote_target::update_thread_list ()
3755 {
3756 struct threads_listing_context context;
3757 int got_list = 0;
3758
3759 /* We have a few different mechanisms to fetch the thread list. Try
3760 them all, starting with the most preferred one first, falling
3761 back to older methods. */
3762 if (remote_get_threads_with_qxfer (&context)
3763 || remote_get_threads_with_qthreadinfo (&context)
3764 || remote_get_threads_with_ql (&context))
3765 {
3766 got_list = 1;
3767
3768 if (context.items.empty ()
3769 && remote_thread_always_alive (inferior_ptid))
3770 {
3771 /* Some targets don't really support threads, but still
3772 reply an (empty) thread list in response to the thread
3773 listing packets, instead of replying "packet not
3774 supported". Exit early so we don't delete the main
3775 thread. */
3776 return;
3777 }
3778
3779 /* CONTEXT now holds the current thread list on the remote
3780 target end. Delete GDB-side threads no longer found on the
3781 target. */
3782 for (thread_info *tp : all_threads_safe ())
3783 {
3784 if (!context.contains_thread (tp->ptid))
3785 {
3786 /* Not found. */
3787 delete_thread (tp);
3788 }
3789 }
3790
3791 /* Remove any unreported fork child threads from CONTEXT so
3792 that we don't interfere with follow fork, which is where
3793 creation of such threads is handled. */
3794 remove_new_fork_children (&context);
3795
3796 /* And now add threads we don't know about yet to our list. */
3797 for (thread_item &item : context.items)
3798 {
3799 if (item.ptid != null_ptid)
3800 {
3801 /* In non-stop mode, we assume new found threads are
3802 executing until proven otherwise with a stop reply.
3803 In all-stop, we can only get here if all threads are
3804 stopped. */
3805 int executing = target_is_non_stop_p () ? 1 : 0;
3806
3807 remote_notice_new_inferior (item.ptid, executing);
3808
3809 thread_info *tp = find_thread_ptid (item.ptid);
3810 remote_thread_info *info = get_remote_thread_info (tp);
3811 info->core = item.core;
3812 info->extra = std::move (item.extra);
3813 info->name = std::move (item.name);
3814 info->thread_handle = std::move (item.thread_handle);
3815 }
3816 }
3817 }
3818
3819 if (!got_list)
3820 {
3821 /* If no thread listing method is supported, then query whether
3822 each known thread is alive, one by one, with the T packet.
3823 If the target doesn't support threads at all, then this is a
3824 no-op. See remote_thread_alive. */
3825 prune_threads ();
3826 }
3827 }
3828
3829 /*
3830 * Collect a descriptive string about the given thread.
3831 * The target may say anything it wants to about the thread
3832 * (typically info about its blocked / runnable state, name, etc.).
3833 * This string will appear in the info threads display.
3834 *
3835 * Optional: targets are not required to implement this function.
3836 */
3837
3838 const char *
3839 remote_target::extra_thread_info (thread_info *tp)
3840 {
3841 struct remote_state *rs = get_remote_state ();
3842 int set;
3843 threadref id;
3844 struct gdb_ext_thread_info threadinfo;
3845
3846 if (rs->remote_desc == 0) /* paranoia */
3847 internal_error (__FILE__, __LINE__,
3848 _("remote_threads_extra_info"));
3849
3850 if (tp->ptid == magic_null_ptid
3851 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
3852 /* This is the main thread which was added by GDB. The remote
3853 server doesn't know about it. */
3854 return NULL;
3855
3856 std::string &extra = get_remote_thread_info (tp)->extra;
3857
3858 /* If already have cached info, use it. */
3859 if (!extra.empty ())
3860 return extra.c_str ();
3861
3862 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3863 {
3864 /* If we're using qXfer:threads:read, then the extra info is
3865 included in the XML. So if we didn't have anything cached,
3866 it's because there's really no extra info. */
3867 return NULL;
3868 }
3869
3870 if (rs->use_threadextra_query)
3871 {
3872 char *b = rs->buf.data ();
3873 char *endb = b + get_remote_packet_size ();
3874
3875 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3876 b += strlen (b);
3877 write_ptid (b, endb, tp->ptid);
3878
3879 putpkt (rs->buf);
3880 getpkt (&rs->buf, 0);
3881 if (rs->buf[0] != 0)
3882 {
3883 extra.resize (strlen (rs->buf.data ()) / 2);
3884 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
3885 return extra.c_str ();
3886 }
3887 }
3888
3889 /* If the above query fails, fall back to the old method. */
3890 rs->use_threadextra_query = 0;
3891 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3892 | TAG_MOREDISPLAY | TAG_DISPLAY;
3893 int_to_threadref (&id, tp->ptid.lwp ());
3894 if (remote_get_threadinfo (&id, set, &threadinfo))
3895 if (threadinfo.active)
3896 {
3897 if (*threadinfo.shortname)
3898 string_appendf (extra, " Name: %s", threadinfo.shortname);
3899 if (*threadinfo.display)
3900 {
3901 if (!extra.empty ())
3902 extra += ',';
3903 string_appendf (extra, " State: %s", threadinfo.display);
3904 }
3905 if (*threadinfo.more_display)
3906 {
3907 if (!extra.empty ())
3908 extra += ',';
3909 string_appendf (extra, " Priority: %s", threadinfo.more_display);
3910 }
3911 return extra.c_str ();
3912 }
3913 return NULL;
3914 }
3915 \f
3916
3917 bool
3918 remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
3919 struct static_tracepoint_marker *marker)
3920 {
3921 struct remote_state *rs = get_remote_state ();
3922 char *p = rs->buf.data ();
3923
3924 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3925 p += strlen (p);
3926 p += hexnumstr (p, addr);
3927 putpkt (rs->buf);
3928 getpkt (&rs->buf, 0);
3929 p = rs->buf.data ();
3930
3931 if (*p == 'E')
3932 error (_("Remote failure reply: %s"), p);
3933
3934 if (*p++ == 'm')
3935 {
3936 parse_static_tracepoint_marker_definition (p, NULL, marker);
3937 return true;
3938 }
3939
3940 return false;
3941 }
3942
3943 std::vector<static_tracepoint_marker>
3944 remote_target::static_tracepoint_markers_by_strid (const char *strid)
3945 {
3946 struct remote_state *rs = get_remote_state ();
3947 std::vector<static_tracepoint_marker> markers;
3948 const char *p;
3949 static_tracepoint_marker marker;
3950
3951 /* Ask for a first packet of static tracepoint marker
3952 definition. */
3953 putpkt ("qTfSTM");
3954 getpkt (&rs->buf, 0);
3955 p = rs->buf.data ();
3956 if (*p == 'E')
3957 error (_("Remote failure reply: %s"), p);
3958
3959 while (*p++ == 'm')
3960 {
3961 do
3962 {
3963 parse_static_tracepoint_marker_definition (p, &p, &marker);
3964
3965 if (strid == NULL || marker.str_id == strid)
3966 markers.push_back (std::move (marker));
3967 }
3968 while (*p++ == ','); /* comma-separated list */
3969 /* Ask for another packet of static tracepoint definition. */
3970 putpkt ("qTsSTM");
3971 getpkt (&rs->buf, 0);
3972 p = rs->buf.data ();
3973 }
3974
3975 return markers;
3976 }
3977
3978 \f
3979 /* Implement the to_get_ada_task_ptid function for the remote targets. */
3980
3981 ptid_t
3982 remote_target::get_ada_task_ptid (long lwp, long thread)
3983 {
3984 return ptid_t (inferior_ptid.pid (), lwp, 0);
3985 }
3986 \f
3987
3988 /* Restart the remote side; this is an extended protocol operation. */
3989
3990 void
3991 remote_target::extended_remote_restart ()
3992 {
3993 struct remote_state *rs = get_remote_state ();
3994
3995 /* Send the restart command; for reasons I don't understand the
3996 remote side really expects a number after the "R". */
3997 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
3998 putpkt (rs->buf);
3999
4000 remote_fileio_reset ();
4001 }
4002 \f
4003 /* Clean up connection to a remote debugger. */
4004
4005 void
4006 remote_target::close ()
4007 {
4008 /* Make sure we leave stdin registered in the event loop. */
4009 terminal_ours ();
4010
4011 /* We don't have a connection to the remote stub anymore. Get rid
4012 of all the inferiors and their threads we were controlling.
4013 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
4014 will be unable to find the thread corresponding to (pid, 0, 0). */
4015 inferior_ptid = null_ptid;
4016 discard_all_inferiors ();
4017
4018 trace_reset_local_state ();
4019
4020 delete this;
4021 }
4022
4023 remote_target::~remote_target ()
4024 {
4025 struct remote_state *rs = get_remote_state ();
4026
4027 /* Check for NULL because we may get here with a partially
4028 constructed target/connection. */
4029 if (rs->remote_desc == nullptr)
4030 return;
4031
4032 serial_close (rs->remote_desc);
4033
4034 /* We are destroying the remote target, so we should discard
4035 everything of this target. */
4036 discard_pending_stop_replies_in_queue ();
4037
4038 if (rs->remote_async_inferior_event_token)
4039 delete_async_event_handler (&rs->remote_async_inferior_event_token);
4040
4041 delete rs->notif_state;
4042 }
4043
4044 /* Query the remote side for the text, data and bss offsets. */
4045
4046 void
4047 remote_target::get_offsets ()
4048 {
4049 struct remote_state *rs = get_remote_state ();
4050 char *buf;
4051 char *ptr;
4052 int lose, num_segments = 0, do_sections, do_segments;
4053 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
4054 struct section_offsets *offs;
4055 struct symfile_segment_data *data;
4056
4057 if (symfile_objfile == NULL)
4058 return;
4059
4060 putpkt ("qOffsets");
4061 getpkt (&rs->buf, 0);
4062 buf = rs->buf.data ();
4063
4064 if (buf[0] == '\000')
4065 return; /* Return silently. Stub doesn't support
4066 this command. */
4067 if (buf[0] == 'E')
4068 {
4069 warning (_("Remote failure reply: %s"), buf);
4070 return;
4071 }
4072
4073 /* Pick up each field in turn. This used to be done with scanf, but
4074 scanf will make trouble if CORE_ADDR size doesn't match
4075 conversion directives correctly. The following code will work
4076 with any size of CORE_ADDR. */
4077 text_addr = data_addr = bss_addr = 0;
4078 ptr = buf;
4079 lose = 0;
4080
4081 if (startswith (ptr, "Text="))
4082 {
4083 ptr += 5;
4084 /* Don't use strtol, could lose on big values. */
4085 while (*ptr && *ptr != ';')
4086 text_addr = (text_addr << 4) + fromhex (*ptr++);
4087
4088 if (startswith (ptr, ";Data="))
4089 {
4090 ptr += 6;
4091 while (*ptr && *ptr != ';')
4092 data_addr = (data_addr << 4) + fromhex (*ptr++);
4093 }
4094 else
4095 lose = 1;
4096
4097 if (!lose && startswith (ptr, ";Bss="))
4098 {
4099 ptr += 5;
4100 while (*ptr && *ptr != ';')
4101 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
4102
4103 if (bss_addr != data_addr)
4104 warning (_("Target reported unsupported offsets: %s"), buf);
4105 }
4106 else
4107 lose = 1;
4108 }
4109 else if (startswith (ptr, "TextSeg="))
4110 {
4111 ptr += 8;
4112 /* Don't use strtol, could lose on big values. */
4113 while (*ptr && *ptr != ';')
4114 text_addr = (text_addr << 4) + fromhex (*ptr++);
4115 num_segments = 1;
4116
4117 if (startswith (ptr, ";DataSeg="))
4118 {
4119 ptr += 9;
4120 while (*ptr && *ptr != ';')
4121 data_addr = (data_addr << 4) + fromhex (*ptr++);
4122 num_segments++;
4123 }
4124 }
4125 else
4126 lose = 1;
4127
4128 if (lose)
4129 error (_("Malformed response to offset query, %s"), buf);
4130 else if (*ptr != '\0')
4131 warning (_("Target reported unsupported offsets: %s"), buf);
4132
4133 offs = ((struct section_offsets *)
4134 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
4135 memcpy (offs, symfile_objfile->section_offsets,
4136 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
4137
4138 data = get_symfile_segment_data (symfile_objfile->obfd);
4139 do_segments = (data != NULL);
4140 do_sections = num_segments == 0;
4141
4142 if (num_segments > 0)
4143 {
4144 segments[0] = text_addr;
4145 segments[1] = data_addr;
4146 }
4147 /* If we have two segments, we can still try to relocate everything
4148 by assuming that the .text and .data offsets apply to the whole
4149 text and data segments. Convert the offsets given in the packet
4150 to base addresses for symfile_map_offsets_to_segments. */
4151 else if (data && data->num_segments == 2)
4152 {
4153 segments[0] = data->segment_bases[0] + text_addr;
4154 segments[1] = data->segment_bases[1] + data_addr;
4155 num_segments = 2;
4156 }
4157 /* If the object file has only one segment, assume that it is text
4158 rather than data; main programs with no writable data are rare,
4159 but programs with no code are useless. Of course the code might
4160 have ended up in the data segment... to detect that we would need
4161 the permissions here. */
4162 else if (data && data->num_segments == 1)
4163 {
4164 segments[0] = data->segment_bases[0] + text_addr;
4165 num_segments = 1;
4166 }
4167 /* There's no way to relocate by segment. */
4168 else
4169 do_segments = 0;
4170
4171 if (do_segments)
4172 {
4173 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
4174 offs, num_segments, segments);
4175
4176 if (ret == 0 && !do_sections)
4177 error (_("Can not handle qOffsets TextSeg "
4178 "response with this symbol file"));
4179
4180 if (ret > 0)
4181 do_sections = 0;
4182 }
4183
4184 if (data)
4185 free_symfile_segment_data (data);
4186
4187 if (do_sections)
4188 {
4189 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
4190
4191 /* This is a temporary kludge to force data and bss to use the
4192 same offsets because that's what nlmconv does now. The real
4193 solution requires changes to the stub and remote.c that I
4194 don't have time to do right now. */
4195
4196 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
4197 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
4198 }
4199
4200 objfile_relocate (symfile_objfile, offs);
4201 }
4202
4203 /* Send interrupt_sequence to remote target. */
4204
4205 void
4206 remote_target::send_interrupt_sequence ()
4207 {
4208 struct remote_state *rs = get_remote_state ();
4209
4210 if (interrupt_sequence_mode == interrupt_sequence_control_c)
4211 remote_serial_write ("\x03", 1);
4212 else if (interrupt_sequence_mode == interrupt_sequence_break)
4213 serial_send_break (rs->remote_desc);
4214 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4215 {
4216 serial_send_break (rs->remote_desc);
4217 remote_serial_write ("g", 1);
4218 }
4219 else
4220 internal_error (__FILE__, __LINE__,
4221 _("Invalid value for interrupt_sequence_mode: %s."),
4222 interrupt_sequence_mode);
4223 }
4224
4225
4226 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
4227 and extract the PTID. Returns NULL_PTID if not found. */
4228
4229 static ptid_t
4230 stop_reply_extract_thread (char *stop_reply)
4231 {
4232 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4233 {
4234 const char *p;
4235
4236 /* Txx r:val ; r:val (...) */
4237 p = &stop_reply[3];
4238
4239 /* Look for "register" named "thread". */
4240 while (*p != '\0')
4241 {
4242 const char *p1;
4243
4244 p1 = strchr (p, ':');
4245 if (p1 == NULL)
4246 return null_ptid;
4247
4248 if (strncmp (p, "thread", p1 - p) == 0)
4249 return read_ptid (++p1, &p);
4250
4251 p1 = strchr (p, ';');
4252 if (p1 == NULL)
4253 return null_ptid;
4254 p1++;
4255
4256 p = p1;
4257 }
4258 }
4259
4260 return null_ptid;
4261 }
4262
4263 /* Determine the remote side's current thread. If we have a stop
4264 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4265 "thread" register we can extract the current thread from. If not,
4266 ask the remote which is the current thread with qC. The former
4267 method avoids a roundtrip. */
4268
4269 ptid_t
4270 remote_target::get_current_thread (char *wait_status)
4271 {
4272 ptid_t ptid = null_ptid;
4273
4274 /* Note we don't use remote_parse_stop_reply as that makes use of
4275 the target architecture, which we haven't yet fully determined at
4276 this point. */
4277 if (wait_status != NULL)
4278 ptid = stop_reply_extract_thread (wait_status);
4279 if (ptid == null_ptid)
4280 ptid = remote_current_thread (inferior_ptid);
4281
4282 return ptid;
4283 }
4284
4285 /* Query the remote target for which is the current thread/process,
4286 add it to our tables, and update INFERIOR_PTID. The caller is
4287 responsible for setting the state such that the remote end is ready
4288 to return the current thread.
4289
4290 This function is called after handling the '?' or 'vRun' packets,
4291 whose response is a stop reply from which we can also try
4292 extracting the thread. If the target doesn't support the explicit
4293 qC query, we infer the current thread from that stop reply, passed
4294 in in WAIT_STATUS, which may be NULL. */
4295
4296 void
4297 remote_target::add_current_inferior_and_thread (char *wait_status)
4298 {
4299 struct remote_state *rs = get_remote_state ();
4300 bool fake_pid_p = false;
4301
4302 inferior_ptid = null_ptid;
4303
4304 /* Now, if we have thread information, update inferior_ptid. */
4305 ptid_t curr_ptid = get_current_thread (wait_status);
4306
4307 if (curr_ptid != null_ptid)
4308 {
4309 if (!remote_multi_process_p (rs))
4310 fake_pid_p = true;
4311 }
4312 else
4313 {
4314 /* Without this, some commands which require an active target
4315 (such as kill) won't work. This variable serves (at least)
4316 double duty as both the pid of the target process (if it has
4317 such), and as a flag indicating that a target is active. */
4318 curr_ptid = magic_null_ptid;
4319 fake_pid_p = true;
4320 }
4321
4322 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
4323
4324 /* Add the main thread and switch to it. Don't try reading
4325 registers yet, since we haven't fetched the target description
4326 yet. */
4327 thread_info *tp = add_thread_silent (curr_ptid);
4328 switch_to_thread_no_regs (tp);
4329 }
4330
4331 /* Print info about a thread that was found already stopped on
4332 connection. */
4333
4334 static void
4335 print_one_stopped_thread (struct thread_info *thread)
4336 {
4337 struct target_waitstatus *ws = &thread->suspend.waitstatus;
4338
4339 switch_to_thread (thread);
4340 thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
4341 set_current_sal_from_frame (get_current_frame ());
4342
4343 thread->suspend.waitstatus_pending_p = 0;
4344
4345 if (ws->kind == TARGET_WAITKIND_STOPPED)
4346 {
4347 enum gdb_signal sig = ws->value.sig;
4348
4349 if (signal_print_state (sig))
4350 gdb::observers::signal_received.notify (sig);
4351 }
4352 gdb::observers::normal_stop.notify (NULL, 1);
4353 }
4354
4355 /* Process all initial stop replies the remote side sent in response
4356 to the ? packet. These indicate threads that were already stopped
4357 on initial connection. We mark these threads as stopped and print
4358 their current frame before giving the user the prompt. */
4359
4360 void
4361 remote_target::process_initial_stop_replies (int from_tty)
4362 {
4363 int pending_stop_replies = stop_reply_queue_length ();
4364 struct thread_info *selected = NULL;
4365 struct thread_info *lowest_stopped = NULL;
4366 struct thread_info *first = NULL;
4367
4368 /* Consume the initial pending events. */
4369 while (pending_stop_replies-- > 0)
4370 {
4371 ptid_t waiton_ptid = minus_one_ptid;
4372 ptid_t event_ptid;
4373 struct target_waitstatus ws;
4374 int ignore_event = 0;
4375
4376 memset (&ws, 0, sizeof (ws));
4377 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4378 if (remote_debug)
4379 print_target_wait_results (waiton_ptid, event_ptid, &ws);
4380
4381 switch (ws.kind)
4382 {
4383 case TARGET_WAITKIND_IGNORE:
4384 case TARGET_WAITKIND_NO_RESUMED:
4385 case TARGET_WAITKIND_SIGNALLED:
4386 case TARGET_WAITKIND_EXITED:
4387 /* We shouldn't see these, but if we do, just ignore. */
4388 if (remote_debug)
4389 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
4390 ignore_event = 1;
4391 break;
4392
4393 case TARGET_WAITKIND_EXECD:
4394 xfree (ws.value.execd_pathname);
4395 break;
4396 default:
4397 break;
4398 }
4399
4400 if (ignore_event)
4401 continue;
4402
4403 struct thread_info *evthread = find_thread_ptid (event_ptid);
4404
4405 if (ws.kind == TARGET_WAITKIND_STOPPED)
4406 {
4407 enum gdb_signal sig = ws.value.sig;
4408
4409 /* Stubs traditionally report SIGTRAP as initial signal,
4410 instead of signal 0. Suppress it. */
4411 if (sig == GDB_SIGNAL_TRAP)
4412 sig = GDB_SIGNAL_0;
4413 evthread->suspend.stop_signal = sig;
4414 ws.value.sig = sig;
4415 }
4416
4417 evthread->suspend.waitstatus = ws;
4418
4419 if (ws.kind != TARGET_WAITKIND_STOPPED
4420 || ws.value.sig != GDB_SIGNAL_0)
4421 evthread->suspend.waitstatus_pending_p = 1;
4422
4423 set_executing (event_ptid, 0);
4424 set_running (event_ptid, 0);
4425 get_remote_thread_info (evthread)->vcont_resumed = 0;
4426 }
4427
4428 /* "Notice" the new inferiors before anything related to
4429 registers/memory. */
4430 for (inferior *inf : all_non_exited_inferiors ())
4431 {
4432 inf->needs_setup = 1;
4433
4434 if (non_stop)
4435 {
4436 thread_info *thread = any_live_thread_of_inferior (inf);
4437 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
4438 from_tty);
4439 }
4440 }
4441
4442 /* If all-stop on top of non-stop, pause all threads. Note this
4443 records the threads' stop pc, so must be done after "noticing"
4444 the inferiors. */
4445 if (!non_stop)
4446 {
4447 stop_all_threads ();
4448
4449 /* If all threads of an inferior were already stopped, we
4450 haven't setup the inferior yet. */
4451 for (inferior *inf : all_non_exited_inferiors ())
4452 {
4453 if (inf->needs_setup)
4454 {
4455 thread_info *thread = any_live_thread_of_inferior (inf);
4456 switch_to_thread_no_regs (thread);
4457 setup_inferior (0);
4458 }
4459 }
4460 }
4461
4462 /* Now go over all threads that are stopped, and print their current
4463 frame. If all-stop, then if there's a signalled thread, pick
4464 that as current. */
4465 for (thread_info *thread : all_non_exited_threads ())
4466 {
4467 if (first == NULL)
4468 first = thread;
4469
4470 if (!non_stop)
4471 thread->set_running (false);
4472 else if (thread->state != THREAD_STOPPED)
4473 continue;
4474
4475 if (selected == NULL
4476 && thread->suspend.waitstatus_pending_p)
4477 selected = thread;
4478
4479 if (lowest_stopped == NULL
4480 || thread->inf->num < lowest_stopped->inf->num
4481 || thread->per_inf_num < lowest_stopped->per_inf_num)
4482 lowest_stopped = thread;
4483
4484 if (non_stop)
4485 print_one_stopped_thread (thread);
4486 }
4487
4488 /* In all-stop, we only print the status of one thread, and leave
4489 others with their status pending. */
4490 if (!non_stop)
4491 {
4492 thread_info *thread = selected;
4493 if (thread == NULL)
4494 thread = lowest_stopped;
4495 if (thread == NULL)
4496 thread = first;
4497
4498 print_one_stopped_thread (thread);
4499 }
4500
4501 /* For "info program". */
4502 thread_info *thread = inferior_thread ();
4503 if (thread->state == THREAD_STOPPED)
4504 set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4505 }
4506
4507 /* Start the remote connection and sync state. */
4508
4509 void
4510 remote_target::start_remote (int from_tty, int extended_p)
4511 {
4512 struct remote_state *rs = get_remote_state ();
4513 struct packet_config *noack_config;
4514 char *wait_status = NULL;
4515
4516 /* Signal other parts that we're going through the initial setup,
4517 and so things may not be stable yet. E.g., we don't try to
4518 install tracepoints until we've relocated symbols. Also, a
4519 Ctrl-C before we're connected and synced up can't interrupt the
4520 target. Instead, it offers to drop the (potentially wedged)
4521 connection. */
4522 rs->starting_up = 1;
4523
4524 QUIT;
4525
4526 if (interrupt_on_connect)
4527 send_interrupt_sequence ();
4528
4529 /* Ack any packet which the remote side has already sent. */
4530 remote_serial_write ("+", 1);
4531
4532 /* The first packet we send to the target is the optional "supported
4533 packets" request. If the target can answer this, it will tell us
4534 which later probes to skip. */
4535 remote_query_supported ();
4536
4537 /* If the stub wants to get a QAllow, compose one and send it. */
4538 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4539 set_permissions ();
4540
4541 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4542 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4543 as a reply to known packet. For packet "vFile:setfs:" it is an
4544 invalid reply and GDB would return error in
4545 remote_hostio_set_filesystem, making remote files access impossible.
4546 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4547 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4548 {
4549 const char v_mustreplyempty[] = "vMustReplyEmpty";
4550
4551 putpkt (v_mustreplyempty);
4552 getpkt (&rs->buf, 0);
4553 if (strcmp (rs->buf.data (), "OK") == 0)
4554 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4555 else if (strcmp (rs->buf.data (), "") != 0)
4556 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4557 rs->buf.data ());
4558 }
4559
4560 /* Next, we possibly activate noack mode.
4561
4562 If the QStartNoAckMode packet configuration is set to AUTO,
4563 enable noack mode if the stub reported a wish for it with
4564 qSupported.
4565
4566 If set to TRUE, then enable noack mode even if the stub didn't
4567 report it in qSupported. If the stub doesn't reply OK, the
4568 session ends with an error.
4569
4570 If FALSE, then don't activate noack mode, regardless of what the
4571 stub claimed should be the default with qSupported. */
4572
4573 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4574 if (packet_config_support (noack_config) != PACKET_DISABLE)
4575 {
4576 putpkt ("QStartNoAckMode");
4577 getpkt (&rs->buf, 0);
4578 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4579 rs->noack_mode = 1;
4580 }
4581
4582 if (extended_p)
4583 {
4584 /* Tell the remote that we are using the extended protocol. */
4585 putpkt ("!");
4586 getpkt (&rs->buf, 0);
4587 }
4588
4589 /* Let the target know which signals it is allowed to pass down to
4590 the program. */
4591 update_signals_program_target ();
4592
4593 /* Next, if the target can specify a description, read it. We do
4594 this before anything involving memory or registers. */
4595 target_find_description ();
4596
4597 /* Next, now that we know something about the target, update the
4598 address spaces in the program spaces. */
4599 update_address_spaces ();
4600
4601 /* On OSs where the list of libraries is global to all
4602 processes, we fetch them early. */
4603 if (gdbarch_has_global_solist (target_gdbarch ()))
4604 solib_add (NULL, from_tty, auto_solib_add);
4605
4606 if (target_is_non_stop_p ())
4607 {
4608 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4609 error (_("Non-stop mode requested, but remote "
4610 "does not support non-stop"));
4611
4612 putpkt ("QNonStop:1");
4613 getpkt (&rs->buf, 0);
4614
4615 if (strcmp (rs->buf.data (), "OK") != 0)
4616 error (_("Remote refused setting non-stop mode with: %s"),
4617 rs->buf.data ());
4618
4619 /* Find about threads and processes the stub is already
4620 controlling. We default to adding them in the running state.
4621 The '?' query below will then tell us about which threads are
4622 stopped. */
4623 this->update_thread_list ();
4624 }
4625 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4626 {
4627 /* Don't assume that the stub can operate in all-stop mode.
4628 Request it explicitly. */
4629 putpkt ("QNonStop:0");
4630 getpkt (&rs->buf, 0);
4631
4632 if (strcmp (rs->buf.data (), "OK") != 0)
4633 error (_("Remote refused setting all-stop mode with: %s"),
4634 rs->buf.data ());
4635 }
4636
4637 /* Upload TSVs regardless of whether the target is running or not. The
4638 remote stub, such as GDBserver, may have some predefined or builtin
4639 TSVs, even if the target is not running. */
4640 if (get_trace_status (current_trace_status ()) != -1)
4641 {
4642 struct uploaded_tsv *uploaded_tsvs = NULL;
4643
4644 upload_trace_state_variables (&uploaded_tsvs);
4645 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4646 }
4647
4648 /* Check whether the target is running now. */
4649 putpkt ("?");
4650 getpkt (&rs->buf, 0);
4651
4652 if (!target_is_non_stop_p ())
4653 {
4654 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4655 {
4656 if (!extended_p)
4657 error (_("The target is not running (try extended-remote?)"));
4658
4659 /* We're connected, but not running. Drop out before we
4660 call start_remote. */
4661 rs->starting_up = 0;
4662 return;
4663 }
4664 else
4665 {
4666 /* Save the reply for later. */
4667 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4668 strcpy (wait_status, rs->buf.data ());
4669 }
4670
4671 /* Fetch thread list. */
4672 target_update_thread_list ();
4673
4674 /* Let the stub know that we want it to return the thread. */
4675 set_continue_thread (minus_one_ptid);
4676
4677 if (thread_count () == 0)
4678 {
4679 /* Target has no concept of threads at all. GDB treats
4680 non-threaded target as single-threaded; add a main
4681 thread. */
4682 add_current_inferior_and_thread (wait_status);
4683 }
4684 else
4685 {
4686 /* We have thread information; select the thread the target
4687 says should be current. If we're reconnecting to a
4688 multi-threaded program, this will ideally be the thread
4689 that last reported an event before GDB disconnected. */
4690 inferior_ptid = get_current_thread (wait_status);
4691 if (inferior_ptid == null_ptid)
4692 {
4693 /* Odd... The target was able to list threads, but not
4694 tell us which thread was current (no "thread"
4695 register in T stop reply?). Just pick the first
4696 thread in the thread list then. */
4697
4698 if (remote_debug)
4699 fprintf_unfiltered (gdb_stdlog,
4700 "warning: couldn't determine remote "
4701 "current thread; picking first in list.\n");
4702
4703 inferior_ptid = inferior_list->thread_list->ptid;
4704 }
4705 }
4706
4707 /* init_wait_for_inferior should be called before get_offsets in order
4708 to manage `inserted' flag in bp loc in a correct state.
4709 breakpoint_init_inferior, called from init_wait_for_inferior, set
4710 `inserted' flag to 0, while before breakpoint_re_set, called from
4711 start_remote, set `inserted' flag to 1. In the initialization of
4712 inferior, breakpoint_init_inferior should be called first, and then
4713 breakpoint_re_set can be called. If this order is broken, state of
4714 `inserted' flag is wrong, and cause some problems on breakpoint
4715 manipulation. */
4716 init_wait_for_inferior ();
4717
4718 get_offsets (); /* Get text, data & bss offsets. */
4719
4720 /* If we could not find a description using qXfer, and we know
4721 how to do it some other way, try again. This is not
4722 supported for non-stop; it could be, but it is tricky if
4723 there are no stopped threads when we connect. */
4724 if (remote_read_description_p (this)
4725 && gdbarch_target_desc (target_gdbarch ()) == NULL)
4726 {
4727 target_clear_description ();
4728 target_find_description ();
4729 }
4730
4731 /* Use the previously fetched status. */
4732 gdb_assert (wait_status != NULL);
4733 strcpy (rs->buf.data (), wait_status);
4734 rs->cached_wait_status = 1;
4735
4736 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
4737 }
4738 else
4739 {
4740 /* Clear WFI global state. Do this before finding about new
4741 threads and inferiors, and setting the current inferior.
4742 Otherwise we would clear the proceed status of the current
4743 inferior when we want its stop_soon state to be preserved
4744 (see notice_new_inferior). */
4745 init_wait_for_inferior ();
4746
4747 /* In non-stop, we will either get an "OK", meaning that there
4748 are no stopped threads at this time; or, a regular stop
4749 reply. In the latter case, there may be more than one thread
4750 stopped --- we pull them all out using the vStopped
4751 mechanism. */
4752 if (strcmp (rs->buf.data (), "OK") != 0)
4753 {
4754 struct notif_client *notif = &notif_client_stop;
4755
4756 /* remote_notif_get_pending_replies acks this one, and gets
4757 the rest out. */
4758 rs->notif_state->pending_event[notif_client_stop.id]
4759 = remote_notif_parse (this, notif, rs->buf.data ());
4760 remote_notif_get_pending_events (notif);
4761 }
4762
4763 if (thread_count () == 0)
4764 {
4765 if (!extended_p)
4766 error (_("The target is not running (try extended-remote?)"));
4767
4768 /* We're connected, but not running. Drop out before we
4769 call start_remote. */
4770 rs->starting_up = 0;
4771 return;
4772 }
4773
4774 /* In non-stop mode, any cached wait status will be stored in
4775 the stop reply queue. */
4776 gdb_assert (wait_status == NULL);
4777
4778 /* Report all signals during attach/startup. */
4779 pass_signals ({});
4780
4781 /* If there are already stopped threads, mark them stopped and
4782 report their stops before giving the prompt to the user. */
4783 process_initial_stop_replies (from_tty);
4784
4785 if (target_can_async_p ())
4786 target_async (1);
4787 }
4788
4789 /* If we connected to a live target, do some additional setup. */
4790 if (target_has_execution)
4791 {
4792 if (symfile_objfile) /* No use without a symbol-file. */
4793 remote_check_symbols ();
4794 }
4795
4796 /* Possibly the target has been engaged in a trace run started
4797 previously; find out where things are at. */
4798 if (get_trace_status (current_trace_status ()) != -1)
4799 {
4800 struct uploaded_tp *uploaded_tps = NULL;
4801
4802 if (current_trace_status ()->running)
4803 printf_filtered (_("Trace is already running on the target.\n"));
4804
4805 upload_tracepoints (&uploaded_tps);
4806
4807 merge_uploaded_tracepoints (&uploaded_tps);
4808 }
4809
4810 /* Possibly the target has been engaged in a btrace record started
4811 previously; find out where things are at. */
4812 remote_btrace_maybe_reopen ();
4813
4814 /* The thread and inferior lists are now synchronized with the
4815 target, our symbols have been relocated, and we're merged the
4816 target's tracepoints with ours. We're done with basic start
4817 up. */
4818 rs->starting_up = 0;
4819
4820 /* Maybe breakpoints are global and need to be inserted now. */
4821 if (breakpoints_should_be_inserted_now ())
4822 insert_breakpoints ();
4823 }
4824
4825 /* Open a connection to a remote debugger.
4826 NAME is the filename used for communication. */
4827
4828 void
4829 remote_target::open (const char *name, int from_tty)
4830 {
4831 open_1 (name, from_tty, 0);
4832 }
4833
4834 /* Open a connection to a remote debugger using the extended
4835 remote gdb protocol. NAME is the filename used for communication. */
4836
4837 void
4838 extended_remote_target::open (const char *name, int from_tty)
4839 {
4840 open_1 (name, from_tty, 1 /*extended_p */);
4841 }
4842
4843 /* Reset all packets back to "unknown support". Called when opening a
4844 new connection to a remote target. */
4845
4846 static void
4847 reset_all_packet_configs_support (void)
4848 {
4849 int i;
4850
4851 for (i = 0; i < PACKET_MAX; i++)
4852 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4853 }
4854
4855 /* Initialize all packet configs. */
4856
4857 static void
4858 init_all_packet_configs (void)
4859 {
4860 int i;
4861
4862 for (i = 0; i < PACKET_MAX; i++)
4863 {
4864 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4865 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4866 }
4867 }
4868
4869 /* Symbol look-up. */
4870
4871 void
4872 remote_target::remote_check_symbols ()
4873 {
4874 char *tmp;
4875 int end;
4876
4877 /* The remote side has no concept of inferiors that aren't running
4878 yet, it only knows about running processes. If we're connected
4879 but our current inferior is not running, we should not invite the
4880 remote target to request symbol lookups related to its
4881 (unrelated) current process. */
4882 if (!target_has_execution)
4883 return;
4884
4885 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4886 return;
4887
4888 /* Make sure the remote is pointing at the right process. Note
4889 there's no way to select "no process". */
4890 set_general_process ();
4891
4892 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4893 because we need both at the same time. */
4894 gdb::char_vector msg (get_remote_packet_size ());
4895 gdb::char_vector reply (get_remote_packet_size ());
4896
4897 /* Invite target to request symbol lookups. */
4898
4899 putpkt ("qSymbol::");
4900 getpkt (&reply, 0);
4901 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4902
4903 while (startswith (reply.data (), "qSymbol:"))
4904 {
4905 struct bound_minimal_symbol sym;
4906
4907 tmp = &reply[8];
4908 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
4909 strlen (tmp) / 2);
4910 msg[end] = '\0';
4911 sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
4912 if (sym.minsym == NULL)
4913 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
4914 &reply[8]);
4915 else
4916 {
4917 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4918 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4919
4920 /* If this is a function address, return the start of code
4921 instead of any data function descriptor. */
4922 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4923 sym_addr,
4924 current_top_target ());
4925
4926 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
4927 phex_nz (sym_addr, addr_size), &reply[8]);
4928 }
4929
4930 putpkt (msg.data ());
4931 getpkt (&reply, 0);
4932 }
4933 }
4934
4935 static struct serial *
4936 remote_serial_open (const char *name)
4937 {
4938 static int udp_warning = 0;
4939
4940 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4941 of in ser-tcp.c, because it is the remote protocol assuming that the
4942 serial connection is reliable and not the serial connection promising
4943 to be. */
4944 if (!udp_warning && startswith (name, "udp:"))
4945 {
4946 warning (_("The remote protocol may be unreliable over UDP.\n"
4947 "Some events may be lost, rendering further debugging "
4948 "impossible."));
4949 udp_warning = 1;
4950 }
4951
4952 return serial_open (name);
4953 }
4954
4955 /* Inform the target of our permission settings. The permission flags
4956 work without this, but if the target knows the settings, it can do
4957 a couple things. First, it can add its own check, to catch cases
4958 that somehow manage to get by the permissions checks in target
4959 methods. Second, if the target is wired to disallow particular
4960 settings (for instance, a system in the field that is not set up to
4961 be able to stop at a breakpoint), it can object to any unavailable
4962 permissions. */
4963
4964 void
4965 remote_target::set_permissions ()
4966 {
4967 struct remote_state *rs = get_remote_state ();
4968
4969 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
4970 "WriteReg:%x;WriteMem:%x;"
4971 "InsertBreak:%x;InsertTrace:%x;"
4972 "InsertFastTrace:%x;Stop:%x",
4973 may_write_registers, may_write_memory,
4974 may_insert_breakpoints, may_insert_tracepoints,
4975 may_insert_fast_tracepoints, may_stop);
4976 putpkt (rs->buf);
4977 getpkt (&rs->buf, 0);
4978
4979 /* If the target didn't like the packet, warn the user. Do not try
4980 to undo the user's settings, that would just be maddening. */
4981 if (strcmp (rs->buf.data (), "OK") != 0)
4982 warning (_("Remote refused setting permissions with: %s"),
4983 rs->buf.data ());
4984 }
4985
4986 /* This type describes each known response to the qSupported
4987 packet. */
4988 struct protocol_feature
4989 {
4990 /* The name of this protocol feature. */
4991 const char *name;
4992
4993 /* The default for this protocol feature. */
4994 enum packet_support default_support;
4995
4996 /* The function to call when this feature is reported, or after
4997 qSupported processing if the feature is not supported.
4998 The first argument points to this structure. The second
4999 argument indicates whether the packet requested support be
5000 enabled, disabled, or probed (or the default, if this function
5001 is being called at the end of processing and this feature was
5002 not reported). The third argument may be NULL; if not NULL, it
5003 is a NUL-terminated string taken from the packet following
5004 this feature's name and an equals sign. */
5005 void (*func) (remote_target *remote, const struct protocol_feature *,
5006 enum packet_support, const char *);
5007
5008 /* The corresponding packet for this feature. Only used if
5009 FUNC is remote_supported_packet. */
5010 int packet;
5011 };
5012
5013 static void
5014 remote_supported_packet (remote_target *remote,
5015 const struct protocol_feature *feature,
5016 enum packet_support support,
5017 const char *argument)
5018 {
5019 if (argument)
5020 {
5021 warning (_("Remote qSupported response supplied an unexpected value for"
5022 " \"%s\"."), feature->name);
5023 return;
5024 }
5025
5026 remote_protocol_packets[feature->packet].support = support;
5027 }
5028
5029 void
5030 remote_target::remote_packet_size (const protocol_feature *feature,
5031 enum packet_support support, const char *value)
5032 {
5033 struct remote_state *rs = get_remote_state ();
5034
5035 int packet_size;
5036 char *value_end;
5037
5038 if (support != PACKET_ENABLE)
5039 return;
5040
5041 if (value == NULL || *value == '\0')
5042 {
5043 warning (_("Remote target reported \"%s\" without a size."),
5044 feature->name);
5045 return;
5046 }
5047
5048 errno = 0;
5049 packet_size = strtol (value, &value_end, 16);
5050 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5051 {
5052 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5053 feature->name, value);
5054 return;
5055 }
5056
5057 /* Record the new maximum packet size. */
5058 rs->explicit_packet_size = packet_size;
5059 }
5060
5061 void
5062 remote_packet_size (remote_target *remote, const protocol_feature *feature,
5063 enum packet_support support, const char *value)
5064 {
5065 remote->remote_packet_size (feature, support, value);
5066 }
5067
5068 static const struct protocol_feature remote_protocol_features[] = {
5069 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
5070 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
5071 PACKET_qXfer_auxv },
5072 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5073 PACKET_qXfer_exec_file },
5074 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5075 PACKET_qXfer_features },
5076 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5077 PACKET_qXfer_libraries },
5078 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5079 PACKET_qXfer_libraries_svr4 },
5080 { "augmented-libraries-svr4-read", PACKET_DISABLE,
5081 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
5082 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
5083 PACKET_qXfer_memory_map },
5084 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5085 PACKET_qXfer_osdata },
5086 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5087 PACKET_qXfer_threads },
5088 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5089 PACKET_qXfer_traceframe_info },
5090 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5091 PACKET_QPassSignals },
5092 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5093 PACKET_QCatchSyscalls },
5094 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5095 PACKET_QProgramSignals },
5096 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5097 PACKET_QSetWorkingDir },
5098 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5099 PACKET_QStartupWithShell },
5100 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5101 PACKET_QEnvironmentHexEncoded },
5102 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5103 PACKET_QEnvironmentReset },
5104 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5105 PACKET_QEnvironmentUnset },
5106 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5107 PACKET_QStartNoAckMode },
5108 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5109 PACKET_multiprocess_feature },
5110 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
5111 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5112 PACKET_qXfer_siginfo_read },
5113 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5114 PACKET_qXfer_siginfo_write },
5115 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
5116 PACKET_ConditionalTracepoints },
5117 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
5118 PACKET_ConditionalBreakpoints },
5119 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
5120 PACKET_BreakpointCommands },
5121 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
5122 PACKET_FastTracepoints },
5123 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
5124 PACKET_StaticTracepoints },
5125 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
5126 PACKET_InstallInTrace},
5127 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5128 PACKET_DisconnectedTracing_feature },
5129 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5130 PACKET_bc },
5131 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5132 PACKET_bs },
5133 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5134 PACKET_TracepointSource },
5135 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5136 PACKET_QAllow },
5137 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5138 PACKET_EnableDisableTracepoints_feature },
5139 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5140 PACKET_qXfer_fdpic },
5141 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5142 PACKET_qXfer_uib },
5143 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5144 PACKET_QDisableRandomization },
5145 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
5146 { "QTBuffer:size", PACKET_DISABLE,
5147 remote_supported_packet, PACKET_QTBuffer_size},
5148 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
5149 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5150 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
5151 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
5152 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
5153 PACKET_qXfer_btrace },
5154 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
5155 PACKET_qXfer_btrace_conf },
5156 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
5157 PACKET_Qbtrace_conf_bts_size },
5158 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
5159 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
5160 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5161 PACKET_fork_event_feature },
5162 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5163 PACKET_vfork_event_feature },
5164 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5165 PACKET_exec_event_feature },
5166 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
5167 PACKET_Qbtrace_conf_pt_size },
5168 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5169 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
5170 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
5171 };
5172
5173 static char *remote_support_xml;
5174
5175 /* Register string appended to "xmlRegisters=" in qSupported query. */
5176
5177 void
5178 register_remote_support_xml (const char *xml)
5179 {
5180 #if defined(HAVE_LIBEXPAT)
5181 if (remote_support_xml == NULL)
5182 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
5183 else
5184 {
5185 char *copy = xstrdup (remote_support_xml + 13);
5186 char *p = strtok (copy, ",");
5187
5188 do
5189 {
5190 if (strcmp (p, xml) == 0)
5191 {
5192 /* already there */
5193 xfree (copy);
5194 return;
5195 }
5196 }
5197 while ((p = strtok (NULL, ",")) != NULL);
5198 xfree (copy);
5199
5200 remote_support_xml = reconcat (remote_support_xml,
5201 remote_support_xml, ",", xml,
5202 (char *) NULL);
5203 }
5204 #endif
5205 }
5206
5207 static void
5208 remote_query_supported_append (std::string *msg, const char *append)
5209 {
5210 if (!msg->empty ())
5211 msg->append (";");
5212 msg->append (append);
5213 }
5214
5215 void
5216 remote_target::remote_query_supported ()
5217 {
5218 struct remote_state *rs = get_remote_state ();
5219 char *next;
5220 int i;
5221 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5222
5223 /* The packet support flags are handled differently for this packet
5224 than for most others. We treat an error, a disabled packet, and
5225 an empty response identically: any features which must be reported
5226 to be used will be automatically disabled. An empty buffer
5227 accomplishes this, since that is also the representation for a list
5228 containing no features. */
5229
5230 rs->buf[0] = 0;
5231 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
5232 {
5233 std::string q;
5234
5235 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
5236 remote_query_supported_append (&q, "multiprocess+");
5237
5238 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
5239 remote_query_supported_append (&q, "swbreak+");
5240 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
5241 remote_query_supported_append (&q, "hwbreak+");
5242
5243 remote_query_supported_append (&q, "qRelocInsn+");
5244
5245 if (packet_set_cmd_state (PACKET_fork_event_feature)
5246 != AUTO_BOOLEAN_FALSE)
5247 remote_query_supported_append (&q, "fork-events+");
5248 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5249 != AUTO_BOOLEAN_FALSE)
5250 remote_query_supported_append (&q, "vfork-events+");
5251 if (packet_set_cmd_state (PACKET_exec_event_feature)
5252 != AUTO_BOOLEAN_FALSE)
5253 remote_query_supported_append (&q, "exec-events+");
5254
5255 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
5256 remote_query_supported_append (&q, "vContSupported+");
5257
5258 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
5259 remote_query_supported_append (&q, "QThreadEvents+");
5260
5261 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
5262 remote_query_supported_append (&q, "no-resumed+");
5263
5264 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5265 the qSupported:xmlRegisters=i386 handling. */
5266 if (remote_support_xml != NULL
5267 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
5268 remote_query_supported_append (&q, remote_support_xml);
5269
5270 q = "qSupported:" + q;
5271 putpkt (q.c_str ());
5272
5273 getpkt (&rs->buf, 0);
5274
5275 /* If an error occured, warn, but do not return - just reset the
5276 buffer to empty and go on to disable features. */
5277 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5278 == PACKET_ERROR)
5279 {
5280 warning (_("Remote failure reply: %s"), rs->buf.data ());
5281 rs->buf[0] = 0;
5282 }
5283 }
5284
5285 memset (seen, 0, sizeof (seen));
5286
5287 next = rs->buf.data ();
5288 while (*next)
5289 {
5290 enum packet_support is_supported;
5291 char *p, *end, *name_end, *value;
5292
5293 /* First separate out this item from the rest of the packet. If
5294 there's another item after this, we overwrite the separator
5295 (terminated strings are much easier to work with). */
5296 p = next;
5297 end = strchr (p, ';');
5298 if (end == NULL)
5299 {
5300 end = p + strlen (p);
5301 next = end;
5302 }
5303 else
5304 {
5305 *end = '\0';
5306 next = end + 1;
5307
5308 if (end == p)
5309 {
5310 warning (_("empty item in \"qSupported\" response"));
5311 continue;
5312 }
5313 }
5314
5315 name_end = strchr (p, '=');
5316 if (name_end)
5317 {
5318 /* This is a name=value entry. */
5319 is_supported = PACKET_ENABLE;
5320 value = name_end + 1;
5321 *name_end = '\0';
5322 }
5323 else
5324 {
5325 value = NULL;
5326 switch (end[-1])
5327 {
5328 case '+':
5329 is_supported = PACKET_ENABLE;
5330 break;
5331
5332 case '-':
5333 is_supported = PACKET_DISABLE;
5334 break;
5335
5336 case '?':
5337 is_supported = PACKET_SUPPORT_UNKNOWN;
5338 break;
5339
5340 default:
5341 warning (_("unrecognized item \"%s\" "
5342 "in \"qSupported\" response"), p);
5343 continue;
5344 }
5345 end[-1] = '\0';
5346 }
5347
5348 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5349 if (strcmp (remote_protocol_features[i].name, p) == 0)
5350 {
5351 const struct protocol_feature *feature;
5352
5353 seen[i] = 1;
5354 feature = &remote_protocol_features[i];
5355 feature->func (this, feature, is_supported, value);
5356 break;
5357 }
5358 }
5359
5360 /* If we increased the packet size, make sure to increase the global
5361 buffer size also. We delay this until after parsing the entire
5362 qSupported packet, because this is the same buffer we were
5363 parsing. */
5364 if (rs->buf.size () < rs->explicit_packet_size)
5365 rs->buf.resize (rs->explicit_packet_size);
5366
5367 /* Handle the defaults for unmentioned features. */
5368 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5369 if (!seen[i])
5370 {
5371 const struct protocol_feature *feature;
5372
5373 feature = &remote_protocol_features[i];
5374 feature->func (this, feature, feature->default_support, NULL);
5375 }
5376 }
5377
5378 /* Serial QUIT handler for the remote serial descriptor.
5379
5380 Defers handling a Ctrl-C until we're done with the current
5381 command/response packet sequence, unless:
5382
5383 - We're setting up the connection. Don't send a remote interrupt
5384 request, as we're not fully synced yet. Quit immediately
5385 instead.
5386
5387 - The target has been resumed in the foreground
5388 (target_terminal::is_ours is false) with a synchronous resume
5389 packet, and we're blocked waiting for the stop reply, thus a
5390 Ctrl-C should be immediately sent to the target.
5391
5392 - We get a second Ctrl-C while still within the same serial read or
5393 write. In that case the serial is seemingly wedged --- offer to
5394 quit/disconnect.
5395
5396 - We see a second Ctrl-C without target response, after having
5397 previously interrupted the target. In that case the target/stub
5398 is probably wedged --- offer to quit/disconnect.
5399 */
5400
5401 void
5402 remote_target::remote_serial_quit_handler ()
5403 {
5404 struct remote_state *rs = get_remote_state ();
5405
5406 if (check_quit_flag ())
5407 {
5408 /* If we're starting up, we're not fully synced yet. Quit
5409 immediately. */
5410 if (rs->starting_up)
5411 quit ();
5412 else if (rs->got_ctrlc_during_io)
5413 {
5414 if (query (_("The target is not responding to GDB commands.\n"
5415 "Stop debugging it? ")))
5416 remote_unpush_and_throw ();
5417 }
5418 /* If ^C has already been sent once, offer to disconnect. */
5419 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
5420 interrupt_query ();
5421 /* All-stop protocol, and blocked waiting for stop reply. Send
5422 an interrupt request. */
5423 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
5424 target_interrupt ();
5425 else
5426 rs->got_ctrlc_during_io = 1;
5427 }
5428 }
5429
5430 /* The remote_target that is current while the quit handler is
5431 overridden with remote_serial_quit_handler. */
5432 static remote_target *curr_quit_handler_target;
5433
5434 static void
5435 remote_serial_quit_handler ()
5436 {
5437 curr_quit_handler_target->remote_serial_quit_handler ();
5438 }
5439
5440 /* Remove any of the remote.c targets from target stack. Upper targets depend
5441 on it so remove them first. */
5442
5443 static void
5444 remote_unpush_target (void)
5445 {
5446 pop_all_targets_at_and_above (process_stratum);
5447 }
5448
5449 static void
5450 remote_unpush_and_throw (void)
5451 {
5452 remote_unpush_target ();
5453 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5454 }
5455
5456 void
5457 remote_target::open_1 (const char *name, int from_tty, int extended_p)
5458 {
5459 remote_target *curr_remote = get_current_remote_target ();
5460
5461 if (name == 0)
5462 error (_("To open a remote debug connection, you need to specify what\n"
5463 "serial device is attached to the remote system\n"
5464 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5465
5466 /* If we're connected to a running target, target_preopen will kill it.
5467 Ask this question first, before target_preopen has a chance to kill
5468 anything. */
5469 if (curr_remote != NULL && !have_inferiors ())
5470 {
5471 if (from_tty
5472 && !query (_("Already connected to a remote target. Disconnect? ")))
5473 error (_("Still connected."));
5474 }
5475
5476 /* Here the possibly existing remote target gets unpushed. */
5477 target_preopen (from_tty);
5478
5479 remote_fileio_reset ();
5480 reopen_exec_file ();
5481 reread_symbols ();
5482
5483 remote_target *remote
5484 = (extended_p ? new extended_remote_target () : new remote_target ());
5485 target_ops_up target_holder (remote);
5486
5487 remote_state *rs = remote->get_remote_state ();
5488
5489 /* See FIXME above. */
5490 if (!target_async_permitted)
5491 rs->wait_forever_enabled_p = 1;
5492
5493 rs->remote_desc = remote_serial_open (name);
5494 if (!rs->remote_desc)
5495 perror_with_name (name);
5496
5497 if (baud_rate != -1)
5498 {
5499 if (serial_setbaudrate (rs->remote_desc, baud_rate))
5500 {
5501 /* The requested speed could not be set. Error out to
5502 top level after closing remote_desc. Take care to
5503 set remote_desc to NULL to avoid closing remote_desc
5504 more than once. */
5505 serial_close (rs->remote_desc);
5506 rs->remote_desc = NULL;
5507 perror_with_name (name);
5508 }
5509 }
5510
5511 serial_setparity (rs->remote_desc, serial_parity);
5512 serial_raw (rs->remote_desc);
5513
5514 /* If there is something sitting in the buffer we might take it as a
5515 response to a command, which would be bad. */
5516 serial_flush_input (rs->remote_desc);
5517
5518 if (from_tty)
5519 {
5520 puts_filtered ("Remote debugging using ");
5521 puts_filtered (name);
5522 puts_filtered ("\n");
5523 }
5524
5525 /* Switch to using the remote target now. */
5526 push_target (std::move (target_holder));
5527
5528 /* Register extra event sources in the event loop. */
5529 rs->remote_async_inferior_event_token
5530 = create_async_event_handler (remote_async_inferior_event_handler,
5531 remote);
5532 rs->notif_state = remote_notif_state_allocate (remote);
5533
5534 /* Reset the target state; these things will be queried either by
5535 remote_query_supported or as they are needed. */
5536 reset_all_packet_configs_support ();
5537 rs->cached_wait_status = 0;
5538 rs->explicit_packet_size = 0;
5539 rs->noack_mode = 0;
5540 rs->extended = extended_p;
5541 rs->waiting_for_stop_reply = 0;
5542 rs->ctrlc_pending_p = 0;
5543 rs->got_ctrlc_during_io = 0;
5544
5545 rs->general_thread = not_sent_ptid;
5546 rs->continue_thread = not_sent_ptid;
5547 rs->remote_traceframe_number = -1;
5548
5549 rs->last_resume_exec_dir = EXEC_FORWARD;
5550
5551 /* Probe for ability to use "ThreadInfo" query, as required. */
5552 rs->use_threadinfo_query = 1;
5553 rs->use_threadextra_query = 1;
5554
5555 rs->readahead_cache.invalidate ();
5556
5557 if (target_async_permitted)
5558 {
5559 /* FIXME: cagney/1999-09-23: During the initial connection it is
5560 assumed that the target is already ready and able to respond to
5561 requests. Unfortunately remote_start_remote() eventually calls
5562 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
5563 around this. Eventually a mechanism that allows
5564 wait_for_inferior() to expect/get timeouts will be
5565 implemented. */
5566 rs->wait_forever_enabled_p = 0;
5567 }
5568
5569 /* First delete any symbols previously loaded from shared libraries. */
5570 no_shared_libraries (NULL, 0);
5571
5572 /* Start the remote connection. If error() or QUIT, discard this
5573 target (we'd otherwise be in an inconsistent state) and then
5574 propogate the error on up the exception chain. This ensures that
5575 the caller doesn't stumble along blindly assuming that the
5576 function succeeded. The CLI doesn't have this problem but other
5577 UI's, such as MI do.
5578
5579 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5580 this function should return an error indication letting the
5581 caller restore the previous state. Unfortunately the command
5582 ``target remote'' is directly wired to this function making that
5583 impossible. On a positive note, the CLI side of this problem has
5584 been fixed - the function set_cmd_context() makes it possible for
5585 all the ``target ....'' commands to share a common callback
5586 function. See cli-dump.c. */
5587 {
5588
5589 try
5590 {
5591 remote->start_remote (from_tty, extended_p);
5592 }
5593 catch (const gdb_exception &ex)
5594 {
5595 /* Pop the partially set up target - unless something else did
5596 already before throwing the exception. */
5597 if (ex.error != TARGET_CLOSE_ERROR)
5598 remote_unpush_target ();
5599 throw;
5600 }
5601 }
5602
5603 remote_btrace_reset (rs);
5604
5605 if (target_async_permitted)
5606 rs->wait_forever_enabled_p = 1;
5607 }
5608
5609 /* Detach the specified process. */
5610
5611 void
5612 remote_target::remote_detach_pid (int pid)
5613 {
5614 struct remote_state *rs = get_remote_state ();
5615
5616 /* This should not be necessary, but the handling for D;PID in
5617 GDBserver versions prior to 8.2 incorrectly assumes that the
5618 selected process points to the same process we're detaching,
5619 leading to misbehavior (and possibly GDBserver crashing) when it
5620 does not. Since it's easy and cheap, work around it by forcing
5621 GDBserver to select GDB's current process. */
5622 set_general_process ();
5623
5624 if (remote_multi_process_p (rs))
5625 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
5626 else
5627 strcpy (rs->buf.data (), "D");
5628
5629 putpkt (rs->buf);
5630 getpkt (&rs->buf, 0);
5631
5632 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5633 ;
5634 else if (rs->buf[0] == '\0')
5635 error (_("Remote doesn't know how to detach"));
5636 else
5637 error (_("Can't detach process."));
5638 }
5639
5640 /* This detaches a program to which we previously attached, using
5641 inferior_ptid to identify the process. After this is done, GDB
5642 can be used to debug some other program. We better not have left
5643 any breakpoints in the target program or it'll die when it hits
5644 one. */
5645
5646 void
5647 remote_target::remote_detach_1 (inferior *inf, int from_tty)
5648 {
5649 int pid = inferior_ptid.pid ();
5650 struct remote_state *rs = get_remote_state ();
5651 int is_fork_parent;
5652
5653 if (!target_has_execution)
5654 error (_("No process to detach from."));
5655
5656 target_announce_detach (from_tty);
5657
5658 /* Tell the remote target to detach. */
5659 remote_detach_pid (pid);
5660
5661 /* Exit only if this is the only active inferior. */
5662 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5663 puts_filtered (_("Ending remote debugging.\n"));
5664
5665 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5666
5667 /* Check to see if we are detaching a fork parent. Note that if we
5668 are detaching a fork child, tp == NULL. */
5669 is_fork_parent = (tp != NULL
5670 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5671
5672 /* If doing detach-on-fork, we don't mourn, because that will delete
5673 breakpoints that should be available for the followed inferior. */
5674 if (!is_fork_parent)
5675 {
5676 /* Save the pid as a string before mourning, since that will
5677 unpush the remote target, and we need the string after. */
5678 std::string infpid = target_pid_to_str (ptid_t (pid));
5679
5680 target_mourn_inferior (inferior_ptid);
5681 if (print_inferior_events)
5682 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5683 inf->num, infpid.c_str ());
5684 }
5685 else
5686 {
5687 inferior_ptid = null_ptid;
5688 detach_inferior (current_inferior ());
5689 }
5690 }
5691
5692 void
5693 remote_target::detach (inferior *inf, int from_tty)
5694 {
5695 remote_detach_1 (inf, from_tty);
5696 }
5697
5698 void
5699 extended_remote_target::detach (inferior *inf, int from_tty)
5700 {
5701 remote_detach_1 (inf, from_tty);
5702 }
5703
5704 /* Target follow-fork function for remote targets. On entry, and
5705 at return, the current inferior is the fork parent.
5706
5707 Note that although this is currently only used for extended-remote,
5708 it is named remote_follow_fork in anticipation of using it for the
5709 remote target as well. */
5710
5711 int
5712 remote_target::follow_fork (int follow_child, int detach_fork)
5713 {
5714 struct remote_state *rs = get_remote_state ();
5715 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5716
5717 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5718 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5719 {
5720 /* When following the parent and detaching the child, we detach
5721 the child here. For the case of following the child and
5722 detaching the parent, the detach is done in the target-
5723 independent follow fork code in infrun.c. We can't use
5724 target_detach when detaching an unfollowed child because
5725 the client side doesn't know anything about the child. */
5726 if (detach_fork && !follow_child)
5727 {
5728 /* Detach the fork child. */
5729 ptid_t child_ptid;
5730 pid_t child_pid;
5731
5732 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5733 child_pid = child_ptid.pid ();
5734
5735 remote_detach_pid (child_pid);
5736 }
5737 }
5738 return 0;
5739 }
5740
5741 /* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5742 in the program space of the new inferior. On entry and at return the
5743 current inferior is the exec'ing inferior. INF is the new exec'd
5744 inferior, which may be the same as the exec'ing inferior unless
5745 follow-exec-mode is "new". */
5746
5747 void
5748 remote_target::follow_exec (struct inferior *inf, const char *execd_pathname)
5749 {
5750 /* We know that this is a target file name, so if it has the "target:"
5751 prefix we strip it off before saving it in the program space. */
5752 if (is_target_filename (execd_pathname))
5753 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5754
5755 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5756 }
5757
5758 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5759
5760 void
5761 remote_target::disconnect (const char *args, int from_tty)
5762 {
5763 if (args)
5764 error (_("Argument given to \"disconnect\" when remotely debugging."));
5765
5766 /* Make sure we unpush even the extended remote targets. Calling
5767 target_mourn_inferior won't unpush, and remote_mourn won't
5768 unpush if there is more than one inferior left. */
5769 unpush_target (this);
5770 generic_mourn_inferior ();
5771
5772 if (from_tty)
5773 puts_filtered ("Ending remote debugging.\n");
5774 }
5775
5776 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5777 be chatty about it. */
5778
5779 void
5780 extended_remote_target::attach (const char *args, int from_tty)
5781 {
5782 struct remote_state *rs = get_remote_state ();
5783 int pid;
5784 char *wait_status = NULL;
5785
5786 pid = parse_pid_to_attach (args);
5787
5788 /* Remote PID can be freely equal to getpid, do not check it here the same
5789 way as in other targets. */
5790
5791 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5792 error (_("This target does not support attaching to a process"));
5793
5794 if (from_tty)
5795 {
5796 char *exec_file = get_exec_file (0);
5797
5798 if (exec_file)
5799 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5800 target_pid_to_str (ptid_t (pid)).c_str ());
5801 else
5802 printf_unfiltered (_("Attaching to %s\n"),
5803 target_pid_to_str (ptid_t (pid)).c_str ());
5804 }
5805
5806 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
5807 putpkt (rs->buf);
5808 getpkt (&rs->buf, 0);
5809
5810 switch (packet_ok (rs->buf,
5811 &remote_protocol_packets[PACKET_vAttach]))
5812 {
5813 case PACKET_OK:
5814 if (!target_is_non_stop_p ())
5815 {
5816 /* Save the reply for later. */
5817 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
5818 strcpy (wait_status, rs->buf.data ());
5819 }
5820 else if (strcmp (rs->buf.data (), "OK") != 0)
5821 error (_("Attaching to %s failed with: %s"),
5822 target_pid_to_str (ptid_t (pid)).c_str (),
5823 rs->buf.data ());
5824 break;
5825 case PACKET_UNKNOWN:
5826 error (_("This target does not support attaching to a process"));
5827 default:
5828 error (_("Attaching to %s failed"),
5829 target_pid_to_str (ptid_t (pid)).c_str ());
5830 }
5831
5832 set_current_inferior (remote_add_inferior (false, pid, 1, 0));
5833
5834 inferior_ptid = ptid_t (pid);
5835
5836 if (target_is_non_stop_p ())
5837 {
5838 struct thread_info *thread;
5839
5840 /* Get list of threads. */
5841 update_thread_list ();
5842
5843 thread = first_thread_of_inferior (current_inferior ());
5844 if (thread)
5845 inferior_ptid = thread->ptid;
5846 else
5847 inferior_ptid = ptid_t (pid);
5848
5849 /* Invalidate our notion of the remote current thread. */
5850 record_currthread (rs, minus_one_ptid);
5851 }
5852 else
5853 {
5854 /* Now, if we have thread information, update inferior_ptid. */
5855 inferior_ptid = remote_current_thread (inferior_ptid);
5856
5857 /* Add the main thread to the thread list. */
5858 thread_info *thr = add_thread_silent (inferior_ptid);
5859 /* Don't consider the thread stopped until we've processed the
5860 saved stop reply. */
5861 set_executing (thr->ptid, true);
5862 }
5863
5864 /* Next, if the target can specify a description, read it. We do
5865 this before anything involving memory or registers. */
5866 target_find_description ();
5867
5868 if (!target_is_non_stop_p ())
5869 {
5870 /* Use the previously fetched status. */
5871 gdb_assert (wait_status != NULL);
5872
5873 if (target_can_async_p ())
5874 {
5875 struct notif_event *reply
5876 = remote_notif_parse (this, &notif_client_stop, wait_status);
5877
5878 push_stop_reply ((struct stop_reply *) reply);
5879
5880 target_async (1);
5881 }
5882 else
5883 {
5884 gdb_assert (wait_status != NULL);
5885 strcpy (rs->buf.data (), wait_status);
5886 rs->cached_wait_status = 1;
5887 }
5888 }
5889 else
5890 gdb_assert (wait_status == NULL);
5891 }
5892
5893 /* Implementation of the to_post_attach method. */
5894
5895 void
5896 extended_remote_target::post_attach (int pid)
5897 {
5898 /* Get text, data & bss offsets. */
5899 get_offsets ();
5900
5901 /* In certain cases GDB might not have had the chance to start
5902 symbol lookup up until now. This could happen if the debugged
5903 binary is not using shared libraries, the vsyscall page is not
5904 present (on Linux) and the binary itself hadn't changed since the
5905 debugging process was started. */
5906 if (symfile_objfile != NULL)
5907 remote_check_symbols();
5908 }
5909
5910 \f
5911 /* Check for the availability of vCont. This function should also check
5912 the response. */
5913
5914 void
5915 remote_target::remote_vcont_probe ()
5916 {
5917 remote_state *rs = get_remote_state ();
5918 char *buf;
5919
5920 strcpy (rs->buf.data (), "vCont?");
5921 putpkt (rs->buf);
5922 getpkt (&rs->buf, 0);
5923 buf = rs->buf.data ();
5924
5925 /* Make sure that the features we assume are supported. */
5926 if (startswith (buf, "vCont"))
5927 {
5928 char *p = &buf[5];
5929 int support_c, support_C;
5930
5931 rs->supports_vCont.s = 0;
5932 rs->supports_vCont.S = 0;
5933 support_c = 0;
5934 support_C = 0;
5935 rs->supports_vCont.t = 0;
5936 rs->supports_vCont.r = 0;
5937 while (p && *p == ';')
5938 {
5939 p++;
5940 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5941 rs->supports_vCont.s = 1;
5942 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5943 rs->supports_vCont.S = 1;
5944 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5945 support_c = 1;
5946 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5947 support_C = 1;
5948 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5949 rs->supports_vCont.t = 1;
5950 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5951 rs->supports_vCont.r = 1;
5952
5953 p = strchr (p, ';');
5954 }
5955
5956 /* If c, and C are not all supported, we can't use vCont. Clearing
5957 BUF will make packet_ok disable the packet. */
5958 if (!support_c || !support_C)
5959 buf[0] = 0;
5960 }
5961
5962 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
5963 }
5964
5965 /* Helper function for building "vCont" resumptions. Write a
5966 resumption to P. ENDP points to one-passed-the-end of the buffer
5967 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5968 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5969 resumed thread should be single-stepped and/or signalled. If PTID
5970 equals minus_one_ptid, then all threads are resumed; if PTID
5971 represents a process, then all threads of the process are resumed;
5972 the thread to be stepped and/or signalled is given in the global
5973 INFERIOR_PTID. */
5974
5975 char *
5976 remote_target::append_resumption (char *p, char *endp,
5977 ptid_t ptid, int step, gdb_signal siggnal)
5978 {
5979 struct remote_state *rs = get_remote_state ();
5980
5981 if (step && siggnal != GDB_SIGNAL_0)
5982 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5983 else if (step
5984 /* GDB is willing to range step. */
5985 && use_range_stepping
5986 /* Target supports range stepping. */
5987 && rs->supports_vCont.r
5988 /* We don't currently support range stepping multiple
5989 threads with a wildcard (though the protocol allows it,
5990 so stubs shouldn't make an active effort to forbid
5991 it). */
5992 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
5993 {
5994 struct thread_info *tp;
5995
5996 if (ptid == minus_one_ptid)
5997 {
5998 /* If we don't know about the target thread's tid, then
5999 we're resuming magic_null_ptid (see caller). */
6000 tp = find_thread_ptid (magic_null_ptid);
6001 }
6002 else
6003 tp = find_thread_ptid (ptid);
6004 gdb_assert (tp != NULL);
6005
6006 if (tp->control.may_range_step)
6007 {
6008 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6009
6010 p += xsnprintf (p, endp - p, ";r%s,%s",
6011 phex_nz (tp->control.step_range_start,
6012 addr_size),
6013 phex_nz (tp->control.step_range_end,
6014 addr_size));
6015 }
6016 else
6017 p += xsnprintf (p, endp - p, ";s");
6018 }
6019 else if (step)
6020 p += xsnprintf (p, endp - p, ";s");
6021 else if (siggnal != GDB_SIGNAL_0)
6022 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6023 else
6024 p += xsnprintf (p, endp - p, ";c");
6025
6026 if (remote_multi_process_p (rs) && ptid.is_pid ())
6027 {
6028 ptid_t nptid;
6029
6030 /* All (-1) threads of process. */
6031 nptid = ptid_t (ptid.pid (), -1, 0);
6032
6033 p += xsnprintf (p, endp - p, ":");
6034 p = write_ptid (p, endp, nptid);
6035 }
6036 else if (ptid != minus_one_ptid)
6037 {
6038 p += xsnprintf (p, endp - p, ":");
6039 p = write_ptid (p, endp, ptid);
6040 }
6041
6042 return p;
6043 }
6044
6045 /* Clear the thread's private info on resume. */
6046
6047 static void
6048 resume_clear_thread_private_info (struct thread_info *thread)
6049 {
6050 if (thread->priv != NULL)
6051 {
6052 remote_thread_info *priv = get_remote_thread_info (thread);
6053
6054 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6055 priv->watch_data_address = 0;
6056 }
6057 }
6058
6059 /* Append a vCont continue-with-signal action for threads that have a
6060 non-zero stop signal. */
6061
6062 char *
6063 remote_target::append_pending_thread_resumptions (char *p, char *endp,
6064 ptid_t ptid)
6065 {
6066 for (thread_info *thread : all_non_exited_threads (ptid))
6067 if (inferior_ptid != thread->ptid
6068 && thread->suspend.stop_signal != GDB_SIGNAL_0)
6069 {
6070 p = append_resumption (p, endp, thread->ptid,
6071 0, thread->suspend.stop_signal);
6072 thread->suspend.stop_signal = GDB_SIGNAL_0;
6073 resume_clear_thread_private_info (thread);
6074 }
6075
6076 return p;
6077 }
6078
6079 /* Set the target running, using the packets that use Hc
6080 (c/s/C/S). */
6081
6082 void
6083 remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6084 gdb_signal siggnal)
6085 {
6086 struct remote_state *rs = get_remote_state ();
6087 char *buf;
6088
6089 rs->last_sent_signal = siggnal;
6090 rs->last_sent_step = step;
6091
6092 /* The c/s/C/S resume packets use Hc, so set the continue
6093 thread. */
6094 if (ptid == minus_one_ptid)
6095 set_continue_thread (any_thread_ptid);
6096 else
6097 set_continue_thread (ptid);
6098
6099 for (thread_info *thread : all_non_exited_threads ())
6100 resume_clear_thread_private_info (thread);
6101
6102 buf = rs->buf.data ();
6103 if (::execution_direction == EXEC_REVERSE)
6104 {
6105 /* We don't pass signals to the target in reverse exec mode. */
6106 if (info_verbose && siggnal != GDB_SIGNAL_0)
6107 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6108 siggnal);
6109
6110 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6111 error (_("Remote reverse-step not supported."));
6112 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6113 error (_("Remote reverse-continue not supported."));
6114
6115 strcpy (buf, step ? "bs" : "bc");
6116 }
6117 else if (siggnal != GDB_SIGNAL_0)
6118 {
6119 buf[0] = step ? 'S' : 'C';
6120 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6121 buf[2] = tohex (((int) siggnal) & 0xf);
6122 buf[3] = '\0';
6123 }
6124 else
6125 strcpy (buf, step ? "s" : "c");
6126
6127 putpkt (buf);
6128 }
6129
6130 /* Resume the remote inferior by using a "vCont" packet. The thread
6131 to be resumed is PTID; STEP and SIGGNAL indicate whether the
6132 resumed thread should be single-stepped and/or signalled. If PTID
6133 equals minus_one_ptid, then all threads are resumed; the thread to
6134 be stepped and/or signalled is given in the global INFERIOR_PTID.
6135 This function returns non-zero iff it resumes the inferior.
6136
6137 This function issues a strict subset of all possible vCont commands
6138 at the moment. */
6139
6140 int
6141 remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6142 enum gdb_signal siggnal)
6143 {
6144 struct remote_state *rs = get_remote_state ();
6145 char *p;
6146 char *endp;
6147
6148 /* No reverse execution actions defined for vCont. */
6149 if (::execution_direction == EXEC_REVERSE)
6150 return 0;
6151
6152 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6153 remote_vcont_probe ();
6154
6155 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6156 return 0;
6157
6158 p = rs->buf.data ();
6159 endp = p + get_remote_packet_size ();
6160
6161 /* If we could generate a wider range of packets, we'd have to worry
6162 about overflowing BUF. Should there be a generic
6163 "multi-part-packet" packet? */
6164
6165 p += xsnprintf (p, endp - p, "vCont");
6166
6167 if (ptid == magic_null_ptid)
6168 {
6169 /* MAGIC_NULL_PTID means that we don't have any active threads,
6170 so we don't have any TID numbers the inferior will
6171 understand. Make sure to only send forms that do not specify
6172 a TID. */
6173 append_resumption (p, endp, minus_one_ptid, step, siggnal);
6174 }
6175 else if (ptid == minus_one_ptid || ptid.is_pid ())
6176 {
6177 /* Resume all threads (of all processes, or of a single
6178 process), with preference for INFERIOR_PTID. This assumes
6179 inferior_ptid belongs to the set of all threads we are about
6180 to resume. */
6181 if (step || siggnal != GDB_SIGNAL_0)
6182 {
6183 /* Step inferior_ptid, with or without signal. */
6184 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
6185 }
6186
6187 /* Also pass down any pending signaled resumption for other
6188 threads not the current. */
6189 p = append_pending_thread_resumptions (p, endp, ptid);
6190
6191 /* And continue others without a signal. */
6192 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
6193 }
6194 else
6195 {
6196 /* Scheduler locking; resume only PTID. */
6197 append_resumption (p, endp, ptid, step, siggnal);
6198 }
6199
6200 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
6201 putpkt (rs->buf);
6202
6203 if (target_is_non_stop_p ())
6204 {
6205 /* In non-stop, the stub replies to vCont with "OK". The stop
6206 reply will be reported asynchronously by means of a `%Stop'
6207 notification. */
6208 getpkt (&rs->buf, 0);
6209 if (strcmp (rs->buf.data (), "OK") != 0)
6210 error (_("Unexpected vCont reply in non-stop mode: %s"),
6211 rs->buf.data ());
6212 }
6213
6214 return 1;
6215 }
6216
6217 /* Tell the remote machine to resume. */
6218
6219 void
6220 remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
6221 {
6222 struct remote_state *rs = get_remote_state ();
6223
6224 /* When connected in non-stop mode, the core resumes threads
6225 individually. Resuming remote threads directly in target_resume
6226 would thus result in sending one packet per thread. Instead, to
6227 minimize roundtrip latency, here we just store the resume
6228 request; the actual remote resumption will be done in
6229 target_commit_resume / remote_commit_resume, where we'll be able
6230 to do vCont action coalescing. */
6231 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
6232 {
6233 remote_thread_info *remote_thr;
6234
6235 if (minus_one_ptid == ptid || ptid.is_pid ())
6236 remote_thr = get_remote_thread_info (inferior_ptid);
6237 else
6238 remote_thr = get_remote_thread_info (ptid);
6239
6240 remote_thr->last_resume_step = step;
6241 remote_thr->last_resume_sig = siggnal;
6242 return;
6243 }
6244
6245 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6246 (explained in remote-notif.c:handle_notification) so
6247 remote_notif_process is not called. We need find a place where
6248 it is safe to start a 'vNotif' sequence. It is good to do it
6249 before resuming inferior, because inferior was stopped and no RSP
6250 traffic at that moment. */
6251 if (!target_is_non_stop_p ())
6252 remote_notif_process (rs->notif_state, &notif_client_stop);
6253
6254 rs->last_resume_exec_dir = ::execution_direction;
6255
6256 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6257 if (!remote_resume_with_vcont (ptid, step, siggnal))
6258 remote_resume_with_hc (ptid, step, siggnal);
6259
6260 /* We are about to start executing the inferior, let's register it
6261 with the event loop. NOTE: this is the one place where all the
6262 execution commands end up. We could alternatively do this in each
6263 of the execution commands in infcmd.c. */
6264 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6265 into infcmd.c in order to allow inferior function calls to work
6266 NOT asynchronously. */
6267 if (target_can_async_p ())
6268 target_async (1);
6269
6270 /* We've just told the target to resume. The remote server will
6271 wait for the inferior to stop, and then send a stop reply. In
6272 the mean time, we can't start another command/query ourselves
6273 because the stub wouldn't be ready to process it. This applies
6274 only to the base all-stop protocol, however. In non-stop (which
6275 only supports vCont), the stub replies with an "OK", and is
6276 immediate able to process further serial input. */
6277 if (!target_is_non_stop_p ())
6278 rs->waiting_for_stop_reply = 1;
6279 }
6280
6281 static int is_pending_fork_parent_thread (struct thread_info *thread);
6282
6283 /* Private per-inferior info for target remote processes. */
6284
6285 struct remote_inferior : public private_inferior
6286 {
6287 /* Whether we can send a wildcard vCont for this process. */
6288 bool may_wildcard_vcont = true;
6289 };
6290
6291 /* Get the remote private inferior data associated to INF. */
6292
6293 static remote_inferior *
6294 get_remote_inferior (inferior *inf)
6295 {
6296 if (inf->priv == NULL)
6297 inf->priv.reset (new remote_inferior);
6298
6299 return static_cast<remote_inferior *> (inf->priv.get ());
6300 }
6301
6302 /* Class used to track the construction of a vCont packet in the
6303 outgoing packet buffer. This is used to send multiple vCont
6304 packets if we have more actions than would fit a single packet. */
6305
6306 class vcont_builder
6307 {
6308 public:
6309 explicit vcont_builder (remote_target *remote)
6310 : m_remote (remote)
6311 {
6312 restart ();
6313 }
6314
6315 void flush ();
6316 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6317
6318 private:
6319 void restart ();
6320
6321 /* The remote target. */
6322 remote_target *m_remote;
6323
6324 /* Pointer to the first action. P points here if no action has been
6325 appended yet. */
6326 char *m_first_action;
6327
6328 /* Where the next action will be appended. */
6329 char *m_p;
6330
6331 /* The end of the buffer. Must never write past this. */
6332 char *m_endp;
6333 };
6334
6335 /* Prepare the outgoing buffer for a new vCont packet. */
6336
6337 void
6338 vcont_builder::restart ()
6339 {
6340 struct remote_state *rs = m_remote->get_remote_state ();
6341
6342 m_p = rs->buf.data ();
6343 m_endp = m_p + m_remote->get_remote_packet_size ();
6344 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6345 m_first_action = m_p;
6346 }
6347
6348 /* If the vCont packet being built has any action, send it to the
6349 remote end. */
6350
6351 void
6352 vcont_builder::flush ()
6353 {
6354 struct remote_state *rs;
6355
6356 if (m_p == m_first_action)
6357 return;
6358
6359 rs = m_remote->get_remote_state ();
6360 m_remote->putpkt (rs->buf);
6361 m_remote->getpkt (&rs->buf, 0);
6362 if (strcmp (rs->buf.data (), "OK") != 0)
6363 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
6364 }
6365
6366 /* The largest action is range-stepping, with its two addresses. This
6367 is more than sufficient. If a new, bigger action is created, it'll
6368 quickly trigger a failed assertion in append_resumption (and we'll
6369 just bump this). */
6370 #define MAX_ACTION_SIZE 200
6371
6372 /* Append a new vCont action in the outgoing packet being built. If
6373 the action doesn't fit the packet along with previous actions, push
6374 what we've got so far to the remote end and start over a new vCont
6375 packet (with the new action). */
6376
6377 void
6378 vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
6379 {
6380 char buf[MAX_ACTION_SIZE + 1];
6381
6382 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6383 ptid, step, siggnal);
6384
6385 /* Check whether this new action would fit in the vCont packet along
6386 with previous actions. If not, send what we've got so far and
6387 start a new vCont packet. */
6388 size_t rsize = endp - buf;
6389 if (rsize > m_endp - m_p)
6390 {
6391 flush ();
6392 restart ();
6393
6394 /* Should now fit. */
6395 gdb_assert (rsize <= m_endp - m_p);
6396 }
6397
6398 memcpy (m_p, buf, rsize);
6399 m_p += rsize;
6400 *m_p = '\0';
6401 }
6402
6403 /* to_commit_resume implementation. */
6404
6405 void
6406 remote_target::commit_resume ()
6407 {
6408 int any_process_wildcard;
6409 int may_global_wildcard_vcont;
6410
6411 /* If connected in all-stop mode, we'd send the remote resume
6412 request directly from remote_resume. Likewise if
6413 reverse-debugging, as there are no defined vCont actions for
6414 reverse execution. */
6415 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
6416 return;
6417
6418 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6419 instead of resuming all threads of each process individually.
6420 However, if any thread of a process must remain halted, we can't
6421 send wildcard resumes and must send one action per thread.
6422
6423 Care must be taken to not resume threads/processes the server
6424 side already told us are stopped, but the core doesn't know about
6425 yet, because the events are still in the vStopped notification
6426 queue. For example:
6427
6428 #1 => vCont s:p1.1;c
6429 #2 <= OK
6430 #3 <= %Stopped T05 p1.1
6431 #4 => vStopped
6432 #5 <= T05 p1.2
6433 #6 => vStopped
6434 #7 <= OK
6435 #8 (infrun handles the stop for p1.1 and continues stepping)
6436 #9 => vCont s:p1.1;c
6437
6438 The last vCont above would resume thread p1.2 by mistake, because
6439 the server has no idea that the event for p1.2 had not been
6440 handled yet.
6441
6442 The server side must similarly ignore resume actions for the
6443 thread that has a pending %Stopped notification (and any other
6444 threads with events pending), until GDB acks the notification
6445 with vStopped. Otherwise, e.g., the following case is
6446 mishandled:
6447
6448 #1 => g (or any other packet)
6449 #2 <= [registers]
6450 #3 <= %Stopped T05 p1.2
6451 #4 => vCont s:p1.1;c
6452 #5 <= OK
6453
6454 Above, the server must not resume thread p1.2. GDB can't know
6455 that p1.2 stopped until it acks the %Stopped notification, and
6456 since from GDB's perspective all threads should be running, it
6457 sends a "c" action.
6458
6459 Finally, special care must also be given to handling fork/vfork
6460 events. A (v)fork event actually tells us that two processes
6461 stopped -- the parent and the child. Until we follow the fork,
6462 we must not resume the child. Therefore, if we have a pending
6463 fork follow, we must not send a global wildcard resume action
6464 (vCont;c). We can still send process-wide wildcards though. */
6465
6466 /* Start by assuming a global wildcard (vCont;c) is possible. */
6467 may_global_wildcard_vcont = 1;
6468
6469 /* And assume every process is individually wildcard-able too. */
6470 for (inferior *inf : all_non_exited_inferiors ())
6471 {
6472 remote_inferior *priv = get_remote_inferior (inf);
6473
6474 priv->may_wildcard_vcont = true;
6475 }
6476
6477 /* Check for any pending events (not reported or processed yet) and
6478 disable process and global wildcard resumes appropriately. */
6479 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6480
6481 for (thread_info *tp : all_non_exited_threads ())
6482 {
6483 /* If a thread of a process is not meant to be resumed, then we
6484 can't wildcard that process. */
6485 if (!tp->executing)
6486 {
6487 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
6488
6489 /* And if we can't wildcard a process, we can't wildcard
6490 everything either. */
6491 may_global_wildcard_vcont = 0;
6492 continue;
6493 }
6494
6495 /* If a thread is the parent of an unfollowed fork, then we
6496 can't do a global wildcard, as that would resume the fork
6497 child. */
6498 if (is_pending_fork_parent_thread (tp))
6499 may_global_wildcard_vcont = 0;
6500 }
6501
6502 /* Now let's build the vCont packet(s). Actions must be appended
6503 from narrower to wider scopes (thread -> process -> global). If
6504 we end up with too many actions for a single packet vcont_builder
6505 flushes the current vCont packet to the remote side and starts a
6506 new one. */
6507 struct vcont_builder vcont_builder (this);
6508
6509 /* Threads first. */
6510 for (thread_info *tp : all_non_exited_threads ())
6511 {
6512 remote_thread_info *remote_thr = get_remote_thread_info (tp);
6513
6514 if (!tp->executing || remote_thr->vcont_resumed)
6515 continue;
6516
6517 gdb_assert (!thread_is_in_step_over_chain (tp));
6518
6519 if (!remote_thr->last_resume_step
6520 && remote_thr->last_resume_sig == GDB_SIGNAL_0
6521 && get_remote_inferior (tp->inf)->may_wildcard_vcont)
6522 {
6523 /* We'll send a wildcard resume instead. */
6524 remote_thr->vcont_resumed = 1;
6525 continue;
6526 }
6527
6528 vcont_builder.push_action (tp->ptid,
6529 remote_thr->last_resume_step,
6530 remote_thr->last_resume_sig);
6531 remote_thr->vcont_resumed = 1;
6532 }
6533
6534 /* Now check whether we can send any process-wide wildcard. This is
6535 to avoid sending a global wildcard in the case nothing is
6536 supposed to be resumed. */
6537 any_process_wildcard = 0;
6538
6539 for (inferior *inf : all_non_exited_inferiors ())
6540 {
6541 if (get_remote_inferior (inf)->may_wildcard_vcont)
6542 {
6543 any_process_wildcard = 1;
6544 break;
6545 }
6546 }
6547
6548 if (any_process_wildcard)
6549 {
6550 /* If all processes are wildcard-able, then send a single "c"
6551 action, otherwise, send an "all (-1) threads of process"
6552 continue action for each running process, if any. */
6553 if (may_global_wildcard_vcont)
6554 {
6555 vcont_builder.push_action (minus_one_ptid,
6556 false, GDB_SIGNAL_0);
6557 }
6558 else
6559 {
6560 for (inferior *inf : all_non_exited_inferiors ())
6561 {
6562 if (get_remote_inferior (inf)->may_wildcard_vcont)
6563 {
6564 vcont_builder.push_action (ptid_t (inf->pid),
6565 false, GDB_SIGNAL_0);
6566 }
6567 }
6568 }
6569 }
6570
6571 vcont_builder.flush ();
6572 }
6573
6574 \f
6575
6576 /* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6577 thread, all threads of a remote process, or all threads of all
6578 processes. */
6579
6580 void
6581 remote_target::remote_stop_ns (ptid_t ptid)
6582 {
6583 struct remote_state *rs = get_remote_state ();
6584 char *p = rs->buf.data ();
6585 char *endp = p + get_remote_packet_size ();
6586
6587 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6588 remote_vcont_probe ();
6589
6590 if (!rs->supports_vCont.t)
6591 error (_("Remote server does not support stopping threads"));
6592
6593 if (ptid == minus_one_ptid
6594 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
6595 p += xsnprintf (p, endp - p, "vCont;t");
6596 else
6597 {
6598 ptid_t nptid;
6599
6600 p += xsnprintf (p, endp - p, "vCont;t:");
6601
6602 if (ptid.is_pid ())
6603 /* All (-1) threads of process. */
6604 nptid = ptid_t (ptid.pid (), -1, 0);
6605 else
6606 {
6607 /* Small optimization: if we already have a stop reply for
6608 this thread, no use in telling the stub we want this
6609 stopped. */
6610 if (peek_stop_reply (ptid))
6611 return;
6612
6613 nptid = ptid;
6614 }
6615
6616 write_ptid (p, endp, nptid);
6617 }
6618
6619 /* In non-stop, we get an immediate OK reply. The stop reply will
6620 come in asynchronously by notification. */
6621 putpkt (rs->buf);
6622 getpkt (&rs->buf, 0);
6623 if (strcmp (rs->buf.data (), "OK") != 0)
6624 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
6625 rs->buf.data ());
6626 }
6627
6628 /* All-stop version of target_interrupt. Sends a break or a ^C to
6629 interrupt the remote target. It is undefined which thread of which
6630 process reports the interrupt. */
6631
6632 void
6633 remote_target::remote_interrupt_as ()
6634 {
6635 struct remote_state *rs = get_remote_state ();
6636
6637 rs->ctrlc_pending_p = 1;
6638
6639 /* If the inferior is stopped already, but the core didn't know
6640 about it yet, just ignore the request. The cached wait status
6641 will be collected in remote_wait. */
6642 if (rs->cached_wait_status)
6643 return;
6644
6645 /* Send interrupt_sequence to remote target. */
6646 send_interrupt_sequence ();
6647 }
6648
6649 /* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6650 the remote target. It is undefined which thread of which process
6651 reports the interrupt. Throws an error if the packet is not
6652 supported by the server. */
6653
6654 void
6655 remote_target::remote_interrupt_ns ()
6656 {
6657 struct remote_state *rs = get_remote_state ();
6658 char *p = rs->buf.data ();
6659 char *endp = p + get_remote_packet_size ();
6660
6661 xsnprintf (p, endp - p, "vCtrlC");
6662
6663 /* In non-stop, we get an immediate OK reply. The stop reply will
6664 come in asynchronously by notification. */
6665 putpkt (rs->buf);
6666 getpkt (&rs->buf, 0);
6667
6668 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6669 {
6670 case PACKET_OK:
6671 break;
6672 case PACKET_UNKNOWN:
6673 error (_("No support for interrupting the remote target."));
6674 case PACKET_ERROR:
6675 error (_("Interrupting target failed: %s"), rs->buf.data ());
6676 }
6677 }
6678
6679 /* Implement the to_stop function for the remote targets. */
6680
6681 void
6682 remote_target::stop (ptid_t ptid)
6683 {
6684 if (remote_debug)
6685 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6686
6687 if (target_is_non_stop_p ())
6688 remote_stop_ns (ptid);
6689 else
6690 {
6691 /* We don't currently have a way to transparently pause the
6692 remote target in all-stop mode. Interrupt it instead. */
6693 remote_interrupt_as ();
6694 }
6695 }
6696
6697 /* Implement the to_interrupt function for the remote targets. */
6698
6699 void
6700 remote_target::interrupt ()
6701 {
6702 if (remote_debug)
6703 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6704
6705 if (target_is_non_stop_p ())
6706 remote_interrupt_ns ();
6707 else
6708 remote_interrupt_as ();
6709 }
6710
6711 /* Implement the to_pass_ctrlc function for the remote targets. */
6712
6713 void
6714 remote_target::pass_ctrlc ()
6715 {
6716 struct remote_state *rs = get_remote_state ();
6717
6718 if (remote_debug)
6719 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6720
6721 /* If we're starting up, we're not fully synced yet. Quit
6722 immediately. */
6723 if (rs->starting_up)
6724 quit ();
6725 /* If ^C has already been sent once, offer to disconnect. */
6726 else if (rs->ctrlc_pending_p)
6727 interrupt_query ();
6728 else
6729 target_interrupt ();
6730 }
6731
6732 /* Ask the user what to do when an interrupt is received. */
6733
6734 void
6735 remote_target::interrupt_query ()
6736 {
6737 struct remote_state *rs = get_remote_state ();
6738
6739 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6740 {
6741 if (query (_("The target is not responding to interrupt requests.\n"
6742 "Stop debugging it? ")))
6743 {
6744 remote_unpush_target ();
6745 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6746 }
6747 }
6748 else
6749 {
6750 if (query (_("Interrupted while waiting for the program.\n"
6751 "Give up waiting? ")))
6752 quit ();
6753 }
6754 }
6755
6756 /* Enable/disable target terminal ownership. Most targets can use
6757 terminal groups to control terminal ownership. Remote targets are
6758 different in that explicit transfer of ownership to/from GDB/target
6759 is required. */
6760
6761 void
6762 remote_target::terminal_inferior ()
6763 {
6764 /* NOTE: At this point we could also register our selves as the
6765 recipient of all input. Any characters typed could then be
6766 passed on down to the target. */
6767 }
6768
6769 void
6770 remote_target::terminal_ours ()
6771 {
6772 }
6773
6774 static void
6775 remote_console_output (const char *msg)
6776 {
6777 const char *p;
6778
6779 for (p = msg; p[0] && p[1]; p += 2)
6780 {
6781 char tb[2];
6782 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6783
6784 tb[0] = c;
6785 tb[1] = 0;
6786 fputs_unfiltered (tb, gdb_stdtarg);
6787 }
6788 gdb_flush (gdb_stdtarg);
6789 }
6790
6791 struct stop_reply : public notif_event
6792 {
6793 ~stop_reply ();
6794
6795 /* The identifier of the thread about this event */
6796 ptid_t ptid;
6797
6798 /* The remote state this event is associated with. When the remote
6799 connection, represented by a remote_state object, is closed,
6800 all the associated stop_reply events should be released. */
6801 struct remote_state *rs;
6802
6803 struct target_waitstatus ws;
6804
6805 /* The architecture associated with the expedited registers. */
6806 gdbarch *arch;
6807
6808 /* Expedited registers. This makes remote debugging a bit more
6809 efficient for those targets that provide critical registers as
6810 part of their normal status mechanism (as another roundtrip to
6811 fetch them is avoided). */
6812 std::vector<cached_reg_t> regcache;
6813
6814 enum target_stop_reason stop_reason;
6815
6816 CORE_ADDR watch_data_address;
6817
6818 int core;
6819 };
6820
6821 /* Return the length of the stop reply queue. */
6822
6823 int
6824 remote_target::stop_reply_queue_length ()
6825 {
6826 remote_state *rs = get_remote_state ();
6827 return rs->stop_reply_queue.size ();
6828 }
6829
6830 void
6831 remote_notif_stop_parse (remote_target *remote,
6832 struct notif_client *self, const char *buf,
6833 struct notif_event *event)
6834 {
6835 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
6836 }
6837
6838 static void
6839 remote_notif_stop_ack (remote_target *remote,
6840 struct notif_client *self, const char *buf,
6841 struct notif_event *event)
6842 {
6843 struct stop_reply *stop_reply = (struct stop_reply *) event;
6844
6845 /* acknowledge */
6846 putpkt (remote, self->ack_command);
6847
6848 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6849 {
6850 /* We got an unknown stop reply. */
6851 error (_("Unknown stop reply"));
6852 }
6853
6854 remote->push_stop_reply (stop_reply);
6855 }
6856
6857 static int
6858 remote_notif_stop_can_get_pending_events (remote_target *remote,
6859 struct notif_client *self)
6860 {
6861 /* We can't get pending events in remote_notif_process for
6862 notification stop, and we have to do this in remote_wait_ns
6863 instead. If we fetch all queued events from stub, remote stub
6864 may exit and we have no chance to process them back in
6865 remote_wait_ns. */
6866 remote_state *rs = remote->get_remote_state ();
6867 mark_async_event_handler (rs->remote_async_inferior_event_token);
6868 return 0;
6869 }
6870
6871 stop_reply::~stop_reply ()
6872 {
6873 for (cached_reg_t &reg : regcache)
6874 xfree (reg.data);
6875 }
6876
6877 static notif_event_up
6878 remote_notif_stop_alloc_reply ()
6879 {
6880 return notif_event_up (new struct stop_reply ());
6881 }
6882
6883 /* A client of notification Stop. */
6884
6885 struct notif_client notif_client_stop =
6886 {
6887 "Stop",
6888 "vStopped",
6889 remote_notif_stop_parse,
6890 remote_notif_stop_ack,
6891 remote_notif_stop_can_get_pending_events,
6892 remote_notif_stop_alloc_reply,
6893 REMOTE_NOTIF_STOP,
6894 };
6895
6896 /* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
6897 the pid of the process that owns the threads we want to check, or
6898 -1 if we want to check all threads. */
6899
6900 static int
6901 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6902 ptid_t thread_ptid)
6903 {
6904 if (ws->kind == TARGET_WAITKIND_FORKED
6905 || ws->kind == TARGET_WAITKIND_VFORKED)
6906 {
6907 if (event_pid == -1 || event_pid == thread_ptid.pid ())
6908 return 1;
6909 }
6910
6911 return 0;
6912 }
6913
6914 /* Return the thread's pending status used to determine whether the
6915 thread is a fork parent stopped at a fork event. */
6916
6917 static struct target_waitstatus *
6918 thread_pending_fork_status (struct thread_info *thread)
6919 {
6920 if (thread->suspend.waitstatus_pending_p)
6921 return &thread->suspend.waitstatus;
6922 else
6923 return &thread->pending_follow;
6924 }
6925
6926 /* Determine if THREAD is a pending fork parent thread. */
6927
6928 static int
6929 is_pending_fork_parent_thread (struct thread_info *thread)
6930 {
6931 struct target_waitstatus *ws = thread_pending_fork_status (thread);
6932 int pid = -1;
6933
6934 return is_pending_fork_parent (ws, pid, thread->ptid);
6935 }
6936
6937 /* If CONTEXT contains any fork child threads that have not been
6938 reported yet, remove them from the CONTEXT list. If such a
6939 thread exists it is because we are stopped at a fork catchpoint
6940 and have not yet called follow_fork, which will set up the
6941 host-side data structures for the new process. */
6942
6943 void
6944 remote_target::remove_new_fork_children (threads_listing_context *context)
6945 {
6946 int pid = -1;
6947 struct notif_client *notif = &notif_client_stop;
6948
6949 /* For any threads stopped at a fork event, remove the corresponding
6950 fork child threads from the CONTEXT list. */
6951 for (thread_info *thread : all_non_exited_threads ())
6952 {
6953 struct target_waitstatus *ws = thread_pending_fork_status (thread);
6954
6955 if (is_pending_fork_parent (ws, pid, thread->ptid))
6956 context->remove_thread (ws->value.related_pid);
6957 }
6958
6959 /* Check for any pending fork events (not reported or processed yet)
6960 in process PID and remove those fork child threads from the
6961 CONTEXT list as well. */
6962 remote_notif_get_pending_events (notif);
6963 for (auto &event : get_remote_state ()->stop_reply_queue)
6964 if (event->ws.kind == TARGET_WAITKIND_FORKED
6965 || event->ws.kind == TARGET_WAITKIND_VFORKED
6966 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6967 context->remove_thread (event->ws.value.related_pid);
6968 }
6969
6970 /* Check whether any event pending in the vStopped queue would prevent
6971 a global or process wildcard vCont action. Clear
6972 *may_global_wildcard if we can't do a global wildcard (vCont;c),
6973 and clear the event inferior's may_wildcard_vcont flag if we can't
6974 do a process-wide wildcard resume (vCont;c:pPID.-1). */
6975
6976 void
6977 remote_target::check_pending_events_prevent_wildcard_vcont
6978 (int *may_global_wildcard)
6979 {
6980 struct notif_client *notif = &notif_client_stop;
6981
6982 remote_notif_get_pending_events (notif);
6983 for (auto &event : get_remote_state ()->stop_reply_queue)
6984 {
6985 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6986 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6987 continue;
6988
6989 if (event->ws.kind == TARGET_WAITKIND_FORKED
6990 || event->ws.kind == TARGET_WAITKIND_VFORKED)
6991 *may_global_wildcard = 0;
6992
6993 struct inferior *inf = find_inferior_ptid (event->ptid);
6994
6995 /* This may be the first time we heard about this process.
6996 Regardless, we must not do a global wildcard resume, otherwise
6997 we'd resume this process too. */
6998 *may_global_wildcard = 0;
6999 if (inf != NULL)
7000 get_remote_inferior (inf)->may_wildcard_vcont = false;
7001 }
7002 }
7003
7004 /* Discard all pending stop replies of inferior INF. */
7005
7006 void
7007 remote_target::discard_pending_stop_replies (struct inferior *inf)
7008 {
7009 struct stop_reply *reply;
7010 struct remote_state *rs = get_remote_state ();
7011 struct remote_notif_state *rns = rs->notif_state;
7012
7013 /* This function can be notified when an inferior exists. When the
7014 target is not remote, the notification state is NULL. */
7015 if (rs->remote_desc == NULL)
7016 return;
7017
7018 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
7019
7020 /* Discard the in-flight notification. */
7021 if (reply != NULL && reply->ptid.pid () == inf->pid)
7022 {
7023 delete reply;
7024 rns->pending_event[notif_client_stop.id] = NULL;
7025 }
7026
7027 /* Discard the stop replies we have already pulled with
7028 vStopped. */
7029 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7030 rs->stop_reply_queue.end (),
7031 [=] (const stop_reply_up &event)
7032 {
7033 return event->ptid.pid () == inf->pid;
7034 });
7035 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7036 }
7037
7038 /* Discard the stop replies for RS in stop_reply_queue. */
7039
7040 void
7041 remote_target::discard_pending_stop_replies_in_queue ()
7042 {
7043 remote_state *rs = get_remote_state ();
7044
7045 /* Discard the stop replies we have already pulled with
7046 vStopped. */
7047 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7048 rs->stop_reply_queue.end (),
7049 [=] (const stop_reply_up &event)
7050 {
7051 return event->rs == rs;
7052 });
7053 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
7054 }
7055
7056 /* Remove the first reply in 'stop_reply_queue' which matches
7057 PTID. */
7058
7059 struct stop_reply *
7060 remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
7061 {
7062 remote_state *rs = get_remote_state ();
7063
7064 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7065 rs->stop_reply_queue.end (),
7066 [=] (const stop_reply_up &event)
7067 {
7068 return event->ptid.matches (ptid);
7069 });
7070 struct stop_reply *result;
7071 if (iter == rs->stop_reply_queue.end ())
7072 result = nullptr;
7073 else
7074 {
7075 result = iter->release ();
7076 rs->stop_reply_queue.erase (iter);
7077 }
7078
7079 if (notif_debug)
7080 fprintf_unfiltered (gdb_stdlog,
7081 "notif: discard queued event: 'Stop' in %s\n",
7082 target_pid_to_str (ptid).c_str ());
7083
7084 return result;
7085 }
7086
7087 /* Look for a queued stop reply belonging to PTID. If one is found,
7088 remove it from the queue, and return it. Returns NULL if none is
7089 found. If there are still queued events left to process, tell the
7090 event loop to get back to target_wait soon. */
7091
7092 struct stop_reply *
7093 remote_target::queued_stop_reply (ptid_t ptid)
7094 {
7095 remote_state *rs = get_remote_state ();
7096 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
7097
7098 if (!rs->stop_reply_queue.empty ())
7099 {
7100 /* There's still at least an event left. */
7101 mark_async_event_handler (rs->remote_async_inferior_event_token);
7102 }
7103
7104 return r;
7105 }
7106
7107 /* Push a fully parsed stop reply in the stop reply queue. Since we
7108 know that we now have at least one queued event left to pass to the
7109 core side, tell the event loop to get back to target_wait soon. */
7110
7111 void
7112 remote_target::push_stop_reply (struct stop_reply *new_event)
7113 {
7114 remote_state *rs = get_remote_state ();
7115 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
7116
7117 if (notif_debug)
7118 fprintf_unfiltered (gdb_stdlog,
7119 "notif: push 'Stop' %s to queue %d\n",
7120 target_pid_to_str (new_event->ptid).c_str (),
7121 int (rs->stop_reply_queue.size ()));
7122
7123 mark_async_event_handler (rs->remote_async_inferior_event_token);
7124 }
7125
7126 /* Returns true if we have a stop reply for PTID. */
7127
7128 int
7129 remote_target::peek_stop_reply (ptid_t ptid)
7130 {
7131 remote_state *rs = get_remote_state ();
7132 for (auto &event : rs->stop_reply_queue)
7133 if (ptid == event->ptid
7134 && event->ws.kind == TARGET_WAITKIND_STOPPED)
7135 return 1;
7136 return 0;
7137 }
7138
7139 /* Helper for remote_parse_stop_reply. Return nonzero if the substring
7140 starting with P and ending with PEND matches PREFIX. */
7141
7142 static int
7143 strprefix (const char *p, const char *pend, const char *prefix)
7144 {
7145 for ( ; p < pend; p++, prefix++)
7146 if (*p != *prefix)
7147 return 0;
7148 return *prefix == '\0';
7149 }
7150
7151 /* Parse the stop reply in BUF. Either the function succeeds, and the
7152 result is stored in EVENT, or throws an error. */
7153
7154 void
7155 remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
7156 {
7157 remote_arch_state *rsa = NULL;
7158 ULONGEST addr;
7159 const char *p;
7160 int skipregs = 0;
7161
7162 event->ptid = null_ptid;
7163 event->rs = get_remote_state ();
7164 event->ws.kind = TARGET_WAITKIND_IGNORE;
7165 event->ws.value.integer = 0;
7166 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
7167 event->regcache.clear ();
7168 event->core = -1;
7169
7170 switch (buf[0])
7171 {
7172 case 'T': /* Status with PC, SP, FP, ... */
7173 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7174 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7175 ss = signal number
7176 n... = register number
7177 r... = register contents
7178 */
7179
7180 p = &buf[3]; /* after Txx */
7181 while (*p)
7182 {
7183 const char *p1;
7184 int fieldsize;
7185
7186 p1 = strchr (p, ':');
7187 if (p1 == NULL)
7188 error (_("Malformed packet(a) (missing colon): %s\n\
7189 Packet: '%s'\n"),
7190 p, buf);
7191 if (p == p1)
7192 error (_("Malformed packet(a) (missing register number): %s\n\
7193 Packet: '%s'\n"),
7194 p, buf);
7195
7196 /* Some "registers" are actually extended stop information.
7197 Note if you're adding a new entry here: GDB 7.9 and
7198 earlier assume that all register "numbers" that start
7199 with an hex digit are real register numbers. Make sure
7200 the server only sends such a packet if it knows the
7201 client understands it. */
7202
7203 if (strprefix (p, p1, "thread"))
7204 event->ptid = read_ptid (++p1, &p);
7205 else if (strprefix (p, p1, "syscall_entry"))
7206 {
7207 ULONGEST sysno;
7208
7209 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7210 p = unpack_varlen_hex (++p1, &sysno);
7211 event->ws.value.syscall_number = (int) sysno;
7212 }
7213 else if (strprefix (p, p1, "syscall_return"))
7214 {
7215 ULONGEST sysno;
7216
7217 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7218 p = unpack_varlen_hex (++p1, &sysno);
7219 event->ws.value.syscall_number = (int) sysno;
7220 }
7221 else if (strprefix (p, p1, "watch")
7222 || strprefix (p, p1, "rwatch")
7223 || strprefix (p, p1, "awatch"))
7224 {
7225 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
7226 p = unpack_varlen_hex (++p1, &addr);
7227 event->watch_data_address = (CORE_ADDR) addr;
7228 }
7229 else if (strprefix (p, p1, "swbreak"))
7230 {
7231 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7232
7233 /* Make sure the stub doesn't forget to indicate support
7234 with qSupported. */
7235 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7236 error (_("Unexpected swbreak stop reason"));
7237
7238 /* The value part is documented as "must be empty",
7239 though we ignore it, in case we ever decide to make
7240 use of it in a backward compatible way. */
7241 p = strchrnul (p1 + 1, ';');
7242 }
7243 else if (strprefix (p, p1, "hwbreak"))
7244 {
7245 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7246
7247 /* Make sure the stub doesn't forget to indicate support
7248 with qSupported. */
7249 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7250 error (_("Unexpected hwbreak stop reason"));
7251
7252 /* See above. */
7253 p = strchrnul (p1 + 1, ';');
7254 }
7255 else if (strprefix (p, p1, "library"))
7256 {
7257 event->ws.kind = TARGET_WAITKIND_LOADED;
7258 p = strchrnul (p1 + 1, ';');
7259 }
7260 else if (strprefix (p, p1, "replaylog"))
7261 {
7262 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7263 /* p1 will indicate "begin" or "end", but it makes
7264 no difference for now, so ignore it. */
7265 p = strchrnul (p1 + 1, ';');
7266 }
7267 else if (strprefix (p, p1, "core"))
7268 {
7269 ULONGEST c;
7270
7271 p = unpack_varlen_hex (++p1, &c);
7272 event->core = c;
7273 }
7274 else if (strprefix (p, p1, "fork"))
7275 {
7276 event->ws.value.related_pid = read_ptid (++p1, &p);
7277 event->ws.kind = TARGET_WAITKIND_FORKED;
7278 }
7279 else if (strprefix (p, p1, "vfork"))
7280 {
7281 event->ws.value.related_pid = read_ptid (++p1, &p);
7282 event->ws.kind = TARGET_WAITKIND_VFORKED;
7283 }
7284 else if (strprefix (p, p1, "vforkdone"))
7285 {
7286 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
7287 p = strchrnul (p1 + 1, ';');
7288 }
7289 else if (strprefix (p, p1, "exec"))
7290 {
7291 ULONGEST ignored;
7292 int pathlen;
7293
7294 /* Determine the length of the execd pathname. */
7295 p = unpack_varlen_hex (++p1, &ignored);
7296 pathlen = (p - p1) / 2;
7297
7298 /* Save the pathname for event reporting and for
7299 the next run command. */
7300 gdb::unique_xmalloc_ptr<char[]> pathname
7301 ((char *) xmalloc (pathlen + 1));
7302 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
7303 pathname[pathlen] = '\0';
7304
7305 /* This is freed during event handling. */
7306 event->ws.value.execd_pathname = pathname.release ();
7307 event->ws.kind = TARGET_WAITKIND_EXECD;
7308
7309 /* Skip the registers included in this packet, since
7310 they may be for an architecture different from the
7311 one used by the original program. */
7312 skipregs = 1;
7313 }
7314 else if (strprefix (p, p1, "create"))
7315 {
7316 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
7317 p = strchrnul (p1 + 1, ';');
7318 }
7319 else
7320 {
7321 ULONGEST pnum;
7322 const char *p_temp;
7323
7324 if (skipregs)
7325 {
7326 p = strchrnul (p1 + 1, ';');
7327 p++;
7328 continue;
7329 }
7330
7331 /* Maybe a real ``P'' register number. */
7332 p_temp = unpack_varlen_hex (p, &pnum);
7333 /* If the first invalid character is the colon, we got a
7334 register number. Otherwise, it's an unknown stop
7335 reason. */
7336 if (p_temp == p1)
7337 {
7338 /* If we haven't parsed the event's thread yet, find
7339 it now, in order to find the architecture of the
7340 reported expedited registers. */
7341 if (event->ptid == null_ptid)
7342 {
7343 const char *thr = strstr (p1 + 1, ";thread:");
7344 if (thr != NULL)
7345 event->ptid = read_ptid (thr + strlen (";thread:"),
7346 NULL);
7347 else
7348 {
7349 /* Either the current thread hasn't changed,
7350 or the inferior is not multi-threaded.
7351 The event must be for the thread we last
7352 set as (or learned as being) current. */
7353 event->ptid = event->rs->general_thread;
7354 }
7355 }
7356
7357 if (rsa == NULL)
7358 {
7359 inferior *inf = (event->ptid == null_ptid
7360 ? NULL
7361 : find_inferior_ptid (event->ptid));
7362 /* If this is the first time we learn anything
7363 about this process, skip the registers
7364 included in this packet, since we don't yet
7365 know which architecture to use to parse them.
7366 We'll determine the architecture later when
7367 we process the stop reply and retrieve the
7368 target description, via
7369 remote_notice_new_inferior ->
7370 post_create_inferior. */
7371 if (inf == NULL)
7372 {
7373 p = strchrnul (p1 + 1, ';');
7374 p++;
7375 continue;
7376 }
7377
7378 event->arch = inf->gdbarch;
7379 rsa = event->rs->get_remote_arch_state (event->arch);
7380 }
7381
7382 packet_reg *reg
7383 = packet_reg_from_pnum (event->arch, rsa, pnum);
7384 cached_reg_t cached_reg;
7385
7386 if (reg == NULL)
7387 error (_("Remote sent bad register number %s: %s\n\
7388 Packet: '%s'\n"),
7389 hex_string (pnum), p, buf);
7390
7391 cached_reg.num = reg->regnum;
7392 cached_reg.data = (gdb_byte *)
7393 xmalloc (register_size (event->arch, reg->regnum));
7394
7395 p = p1 + 1;
7396 fieldsize = hex2bin (p, cached_reg.data,
7397 register_size (event->arch, reg->regnum));
7398 p += 2 * fieldsize;
7399 if (fieldsize < register_size (event->arch, reg->regnum))
7400 warning (_("Remote reply is too short: %s"), buf);
7401
7402 event->regcache.push_back (cached_reg);
7403 }
7404 else
7405 {
7406 /* Not a number. Silently skip unknown optional
7407 info. */
7408 p = strchrnul (p1 + 1, ';');
7409 }
7410 }
7411
7412 if (*p != ';')
7413 error (_("Remote register badly formatted: %s\nhere: %s"),
7414 buf, p);
7415 ++p;
7416 }
7417
7418 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7419 break;
7420
7421 /* fall through */
7422 case 'S': /* Old style status, just signal only. */
7423 {
7424 int sig;
7425
7426 event->ws.kind = TARGET_WAITKIND_STOPPED;
7427 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7428 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7429 event->ws.value.sig = (enum gdb_signal) sig;
7430 else
7431 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7432 }
7433 break;
7434 case 'w': /* Thread exited. */
7435 {
7436 ULONGEST value;
7437
7438 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7439 p = unpack_varlen_hex (&buf[1], &value);
7440 event->ws.value.integer = value;
7441 if (*p != ';')
7442 error (_("stop reply packet badly formatted: %s"), buf);
7443 event->ptid = read_ptid (++p, NULL);
7444 break;
7445 }
7446 case 'W': /* Target exited. */
7447 case 'X':
7448 {
7449 int pid;
7450 ULONGEST value;
7451
7452 /* GDB used to accept only 2 hex chars here. Stubs should
7453 only send more if they detect GDB supports multi-process
7454 support. */
7455 p = unpack_varlen_hex (&buf[1], &value);
7456
7457 if (buf[0] == 'W')
7458 {
7459 /* The remote process exited. */
7460 event->ws.kind = TARGET_WAITKIND_EXITED;
7461 event->ws.value.integer = value;
7462 }
7463 else
7464 {
7465 /* The remote process exited with a signal. */
7466 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7467 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7468 event->ws.value.sig = (enum gdb_signal) value;
7469 else
7470 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7471 }
7472
7473 /* If no process is specified, assume inferior_ptid. */
7474 pid = inferior_ptid.pid ();
7475 if (*p == '\0')
7476 ;
7477 else if (*p == ';')
7478 {
7479 p++;
7480
7481 if (*p == '\0')
7482 ;
7483 else if (startswith (p, "process:"))
7484 {
7485 ULONGEST upid;
7486
7487 p += sizeof ("process:") - 1;
7488 unpack_varlen_hex (p, &upid);
7489 pid = upid;
7490 }
7491 else
7492 error (_("unknown stop reply packet: %s"), buf);
7493 }
7494 else
7495 error (_("unknown stop reply packet: %s"), buf);
7496 event->ptid = ptid_t (pid);
7497 }
7498 break;
7499 case 'N':
7500 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7501 event->ptid = minus_one_ptid;
7502 break;
7503 }
7504
7505 if (target_is_non_stop_p () && event->ptid == null_ptid)
7506 error (_("No process or thread specified in stop reply: %s"), buf);
7507 }
7508
7509 /* When the stub wants to tell GDB about a new notification reply, it
7510 sends a notification (%Stop, for example). Those can come it at
7511 any time, hence, we have to make sure that any pending
7512 putpkt/getpkt sequence we're making is finished, before querying
7513 the stub for more events with the corresponding ack command
7514 (vStopped, for example). E.g., if we started a vStopped sequence
7515 immediately upon receiving the notification, something like this
7516 could happen:
7517
7518 1.1) --> Hg 1
7519 1.2) <-- OK
7520 1.3) --> g
7521 1.4) <-- %Stop
7522 1.5) --> vStopped
7523 1.6) <-- (registers reply to step #1.3)
7524
7525 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7526 query.
7527
7528 To solve this, whenever we parse a %Stop notification successfully,
7529 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7530 doing whatever we were doing:
7531
7532 2.1) --> Hg 1
7533 2.2) <-- OK
7534 2.3) --> g
7535 2.4) <-- %Stop
7536 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7537 2.5) <-- (registers reply to step #2.3)
7538
7539 Eventualy after step #2.5, we return to the event loop, which
7540 notices there's an event on the
7541 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7542 associated callback --- the function below. At this point, we're
7543 always safe to start a vStopped sequence. :
7544
7545 2.6) --> vStopped
7546 2.7) <-- T05 thread:2
7547 2.8) --> vStopped
7548 2.9) --> OK
7549 */
7550
7551 void
7552 remote_target::remote_notif_get_pending_events (notif_client *nc)
7553 {
7554 struct remote_state *rs = get_remote_state ();
7555
7556 if (rs->notif_state->pending_event[nc->id] != NULL)
7557 {
7558 if (notif_debug)
7559 fprintf_unfiltered (gdb_stdlog,
7560 "notif: process: '%s' ack pending event\n",
7561 nc->name);
7562
7563 /* acknowledge */
7564 nc->ack (this, nc, rs->buf.data (),
7565 rs->notif_state->pending_event[nc->id]);
7566 rs->notif_state->pending_event[nc->id] = NULL;
7567
7568 while (1)
7569 {
7570 getpkt (&rs->buf, 0);
7571 if (strcmp (rs->buf.data (), "OK") == 0)
7572 break;
7573 else
7574 remote_notif_ack (this, nc, rs->buf.data ());
7575 }
7576 }
7577 else
7578 {
7579 if (notif_debug)
7580 fprintf_unfiltered (gdb_stdlog,
7581 "notif: process: '%s' no pending reply\n",
7582 nc->name);
7583 }
7584 }
7585
7586 /* Wrapper around remote_target::remote_notif_get_pending_events to
7587 avoid having to export the whole remote_target class. */
7588
7589 void
7590 remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7591 {
7592 remote->remote_notif_get_pending_events (nc);
7593 }
7594
7595 /* Called when it is decided that STOP_REPLY holds the info of the
7596 event that is to be returned to the core. This function always
7597 destroys STOP_REPLY. */
7598
7599 ptid_t
7600 remote_target::process_stop_reply (struct stop_reply *stop_reply,
7601 struct target_waitstatus *status)
7602 {
7603 ptid_t ptid;
7604
7605 *status = stop_reply->ws;
7606 ptid = stop_reply->ptid;
7607
7608 /* If no thread/process was reported by the stub, assume the current
7609 inferior. */
7610 if (ptid == null_ptid)
7611 ptid = inferior_ptid;
7612
7613 if (status->kind != TARGET_WAITKIND_EXITED
7614 && status->kind != TARGET_WAITKIND_SIGNALLED
7615 && status->kind != TARGET_WAITKIND_NO_RESUMED)
7616 {
7617 /* Expedited registers. */
7618 if (!stop_reply->regcache.empty ())
7619 {
7620 struct regcache *regcache
7621 = get_thread_arch_regcache (ptid, stop_reply->arch);
7622
7623 for (cached_reg_t &reg : stop_reply->regcache)
7624 {
7625 regcache->raw_supply (reg.num, reg.data);
7626 xfree (reg.data);
7627 }
7628
7629 stop_reply->regcache.clear ();
7630 }
7631
7632 remote_notice_new_inferior (ptid, 0);
7633 remote_thread_info *remote_thr = get_remote_thread_info (ptid);
7634 remote_thr->core = stop_reply->core;
7635 remote_thr->stop_reason = stop_reply->stop_reason;
7636 remote_thr->watch_data_address = stop_reply->watch_data_address;
7637 remote_thr->vcont_resumed = 0;
7638 }
7639
7640 delete stop_reply;
7641 return ptid;
7642 }
7643
7644 /* The non-stop mode version of target_wait. */
7645
7646 ptid_t
7647 remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7648 {
7649 struct remote_state *rs = get_remote_state ();
7650 struct stop_reply *stop_reply;
7651 int ret;
7652 int is_notif = 0;
7653
7654 /* If in non-stop mode, get out of getpkt even if a
7655 notification is received. */
7656
7657 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
7658 while (1)
7659 {
7660 if (ret != -1 && !is_notif)
7661 switch (rs->buf[0])
7662 {
7663 case 'E': /* Error of some sort. */
7664 /* We're out of sync with the target now. Did it continue
7665 or not? We can't tell which thread it was in non-stop,
7666 so just ignore this. */
7667 warning (_("Remote failure reply: %s"), rs->buf.data ());
7668 break;
7669 case 'O': /* Console output. */
7670 remote_console_output (&rs->buf[1]);
7671 break;
7672 default:
7673 warning (_("Invalid remote reply: %s"), rs->buf.data ());
7674 break;
7675 }
7676
7677 /* Acknowledge a pending stop reply that may have arrived in the
7678 mean time. */
7679 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7680 remote_notif_get_pending_events (&notif_client_stop);
7681
7682 /* If indeed we noticed a stop reply, we're done. */
7683 stop_reply = queued_stop_reply (ptid);
7684 if (stop_reply != NULL)
7685 return process_stop_reply (stop_reply, status);
7686
7687 /* Still no event. If we're just polling for an event, then
7688 return to the event loop. */
7689 if (options & TARGET_WNOHANG)
7690 {
7691 status->kind = TARGET_WAITKIND_IGNORE;
7692 return minus_one_ptid;
7693 }
7694
7695 /* Otherwise do a blocking wait. */
7696 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
7697 }
7698 }
7699
7700 /* Wait until the remote machine stops, then return, storing status in
7701 STATUS just as `wait' would. */
7702
7703 ptid_t
7704 remote_target::wait_as (ptid_t ptid, target_waitstatus *status, int options)
7705 {
7706 struct remote_state *rs = get_remote_state ();
7707 ptid_t event_ptid = null_ptid;
7708 char *buf;
7709 struct stop_reply *stop_reply;
7710
7711 again:
7712
7713 status->kind = TARGET_WAITKIND_IGNORE;
7714 status->value.integer = 0;
7715
7716 stop_reply = queued_stop_reply (ptid);
7717 if (stop_reply != NULL)
7718 return process_stop_reply (stop_reply, status);
7719
7720 if (rs->cached_wait_status)
7721 /* Use the cached wait status, but only once. */
7722 rs->cached_wait_status = 0;
7723 else
7724 {
7725 int ret;
7726 int is_notif;
7727 int forever = ((options & TARGET_WNOHANG) == 0
7728 && rs->wait_forever_enabled_p);
7729
7730 if (!rs->waiting_for_stop_reply)
7731 {
7732 status->kind = TARGET_WAITKIND_NO_RESUMED;
7733 return minus_one_ptid;
7734 }
7735
7736 /* FIXME: cagney/1999-09-27: If we're in async mode we should
7737 _never_ wait for ever -> test on target_is_async_p().
7738 However, before we do that we need to ensure that the caller
7739 knows how to take the target into/out of async mode. */
7740 ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
7741
7742 /* GDB gets a notification. Return to core as this event is
7743 not interesting. */
7744 if (ret != -1 && is_notif)
7745 return minus_one_ptid;
7746
7747 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7748 return minus_one_ptid;
7749 }
7750
7751 buf = rs->buf.data ();
7752
7753 /* Assume that the target has acknowledged Ctrl-C unless we receive
7754 an 'F' or 'O' packet. */
7755 if (buf[0] != 'F' && buf[0] != 'O')
7756 rs->ctrlc_pending_p = 0;
7757
7758 switch (buf[0])
7759 {
7760 case 'E': /* Error of some sort. */
7761 /* We're out of sync with the target now. Did it continue or
7762 not? Not is more likely, so report a stop. */
7763 rs->waiting_for_stop_reply = 0;
7764
7765 warning (_("Remote failure reply: %s"), buf);
7766 status->kind = TARGET_WAITKIND_STOPPED;
7767 status->value.sig = GDB_SIGNAL_0;
7768 break;
7769 case 'F': /* File-I/O request. */
7770 /* GDB may access the inferior memory while handling the File-I/O
7771 request, but we don't want GDB accessing memory while waiting
7772 for a stop reply. See the comments in putpkt_binary. Set
7773 waiting_for_stop_reply to 0 temporarily. */
7774 rs->waiting_for_stop_reply = 0;
7775 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
7776 rs->ctrlc_pending_p = 0;
7777 /* GDB handled the File-I/O request, and the target is running
7778 again. Keep waiting for events. */
7779 rs->waiting_for_stop_reply = 1;
7780 break;
7781 case 'N': case 'T': case 'S': case 'X': case 'W':
7782 {
7783 /* There is a stop reply to handle. */
7784 rs->waiting_for_stop_reply = 0;
7785
7786 stop_reply
7787 = (struct stop_reply *) remote_notif_parse (this,
7788 &notif_client_stop,
7789 rs->buf.data ());
7790
7791 event_ptid = process_stop_reply (stop_reply, status);
7792 break;
7793 }
7794 case 'O': /* Console output. */
7795 remote_console_output (buf + 1);
7796 break;
7797 case '\0':
7798 if (rs->last_sent_signal != GDB_SIGNAL_0)
7799 {
7800 /* Zero length reply means that we tried 'S' or 'C' and the
7801 remote system doesn't support it. */
7802 target_terminal::ours_for_output ();
7803 printf_filtered
7804 ("Can't send signals to this remote system. %s not sent.\n",
7805 gdb_signal_to_name (rs->last_sent_signal));
7806 rs->last_sent_signal = GDB_SIGNAL_0;
7807 target_terminal::inferior ();
7808
7809 strcpy (buf, rs->last_sent_step ? "s" : "c");
7810 putpkt (buf);
7811 break;
7812 }
7813 /* fallthrough */
7814 default:
7815 warning (_("Invalid remote reply: %s"), buf);
7816 break;
7817 }
7818
7819 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7820 return minus_one_ptid;
7821 else if (status->kind == TARGET_WAITKIND_IGNORE)
7822 {
7823 /* Nothing interesting happened. If we're doing a non-blocking
7824 poll, we're done. Otherwise, go back to waiting. */
7825 if (options & TARGET_WNOHANG)
7826 return minus_one_ptid;
7827 else
7828 goto again;
7829 }
7830 else if (status->kind != TARGET_WAITKIND_EXITED
7831 && status->kind != TARGET_WAITKIND_SIGNALLED)
7832 {
7833 if (event_ptid != null_ptid)
7834 record_currthread (rs, event_ptid);
7835 else
7836 event_ptid = inferior_ptid;
7837 }
7838 else
7839 /* A process exit. Invalidate our notion of current thread. */
7840 record_currthread (rs, minus_one_ptid);
7841
7842 return event_ptid;
7843 }
7844
7845 /* Wait until the remote machine stops, then return, storing status in
7846 STATUS just as `wait' would. */
7847
7848 ptid_t
7849 remote_target::wait (ptid_t ptid, struct target_waitstatus *status, int options)
7850 {
7851 ptid_t event_ptid;
7852
7853 if (target_is_non_stop_p ())
7854 event_ptid = wait_ns (ptid, status, options);
7855 else
7856 event_ptid = wait_as (ptid, status, options);
7857
7858 if (target_is_async_p ())
7859 {
7860 remote_state *rs = get_remote_state ();
7861
7862 /* If there are are events left in the queue tell the event loop
7863 to return here. */
7864 if (!rs->stop_reply_queue.empty ())
7865 mark_async_event_handler (rs->remote_async_inferior_event_token);
7866 }
7867
7868 return event_ptid;
7869 }
7870
7871 /* Fetch a single register using a 'p' packet. */
7872
7873 int
7874 remote_target::fetch_register_using_p (struct regcache *regcache,
7875 packet_reg *reg)
7876 {
7877 struct gdbarch *gdbarch = regcache->arch ();
7878 struct remote_state *rs = get_remote_state ();
7879 char *buf, *p;
7880 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7881 int i;
7882
7883 if (packet_support (PACKET_p) == PACKET_DISABLE)
7884 return 0;
7885
7886 if (reg->pnum == -1)
7887 return 0;
7888
7889 p = rs->buf.data ();
7890 *p++ = 'p';
7891 p += hexnumstr (p, reg->pnum);
7892 *p++ = '\0';
7893 putpkt (rs->buf);
7894 getpkt (&rs->buf, 0);
7895
7896 buf = rs->buf.data ();
7897
7898 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
7899 {
7900 case PACKET_OK:
7901 break;
7902 case PACKET_UNKNOWN:
7903 return 0;
7904 case PACKET_ERROR:
7905 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7906 gdbarch_register_name (regcache->arch (),
7907 reg->regnum),
7908 buf);
7909 }
7910
7911 /* If this register is unfetchable, tell the regcache. */
7912 if (buf[0] == 'x')
7913 {
7914 regcache->raw_supply (reg->regnum, NULL);
7915 return 1;
7916 }
7917
7918 /* Otherwise, parse and supply the value. */
7919 p = buf;
7920 i = 0;
7921 while (p[0] != 0)
7922 {
7923 if (p[1] == 0)
7924 error (_("fetch_register_using_p: early buf termination"));
7925
7926 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7927 p += 2;
7928 }
7929 regcache->raw_supply (reg->regnum, regp);
7930 return 1;
7931 }
7932
7933 /* Fetch the registers included in the target's 'g' packet. */
7934
7935 int
7936 remote_target::send_g_packet ()
7937 {
7938 struct remote_state *rs = get_remote_state ();
7939 int buf_len;
7940
7941 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
7942 putpkt (rs->buf);
7943 getpkt (&rs->buf, 0);
7944 if (packet_check_result (rs->buf) == PACKET_ERROR)
7945 error (_("Could not read registers; remote failure reply '%s'"),
7946 rs->buf.data ());
7947
7948 /* We can get out of synch in various cases. If the first character
7949 in the buffer is not a hex character, assume that has happened
7950 and try to fetch another packet to read. */
7951 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7952 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7953 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7954 && rs->buf[0] != 'x') /* New: unavailable register value. */
7955 {
7956 if (remote_debug)
7957 fprintf_unfiltered (gdb_stdlog,
7958 "Bad register packet; fetching a new packet\n");
7959 getpkt (&rs->buf, 0);
7960 }
7961
7962 buf_len = strlen (rs->buf.data ());
7963
7964 /* Sanity check the received packet. */
7965 if (buf_len % 2 != 0)
7966 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
7967
7968 return buf_len / 2;
7969 }
7970
7971 void
7972 remote_target::process_g_packet (struct regcache *regcache)
7973 {
7974 struct gdbarch *gdbarch = regcache->arch ();
7975 struct remote_state *rs = get_remote_state ();
7976 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
7977 int i, buf_len;
7978 char *p;
7979 char *regs;
7980
7981 buf_len = strlen (rs->buf.data ());
7982
7983 /* Further sanity checks, with knowledge of the architecture. */
7984 if (buf_len > 2 * rsa->sizeof_g_packet)
7985 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7986 "bytes): %s"),
7987 rsa->sizeof_g_packet, buf_len / 2,
7988 rs->buf.data ());
7989
7990 /* Save the size of the packet sent to us by the target. It is used
7991 as a heuristic when determining the max size of packets that the
7992 target can safely receive. */
7993 if (rsa->actual_register_packet_size == 0)
7994 rsa->actual_register_packet_size = buf_len;
7995
7996 /* If this is smaller than we guessed the 'g' packet would be,
7997 update our records. A 'g' reply that doesn't include a register's
7998 value implies either that the register is not available, or that
7999 the 'p' packet must be used. */
8000 if (buf_len < 2 * rsa->sizeof_g_packet)
8001 {
8002 long sizeof_g_packet = buf_len / 2;
8003
8004 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8005 {
8006 long offset = rsa->regs[i].offset;
8007 long reg_size = register_size (gdbarch, i);
8008
8009 if (rsa->regs[i].pnum == -1)
8010 continue;
8011
8012 if (offset >= sizeof_g_packet)
8013 rsa->regs[i].in_g_packet = 0;
8014 else if (offset + reg_size > sizeof_g_packet)
8015 error (_("Truncated register %d in remote 'g' packet"), i);
8016 else
8017 rsa->regs[i].in_g_packet = 1;
8018 }
8019
8020 /* Looks valid enough, we can assume this is the correct length
8021 for a 'g' packet. It's important not to adjust
8022 rsa->sizeof_g_packet if we have truncated registers otherwise
8023 this "if" won't be run the next time the method is called
8024 with a packet of the same size and one of the internal errors
8025 below will trigger instead. */
8026 rsa->sizeof_g_packet = sizeof_g_packet;
8027 }
8028
8029 regs = (char *) alloca (rsa->sizeof_g_packet);
8030
8031 /* Unimplemented registers read as all bits zero. */
8032 memset (regs, 0, rsa->sizeof_g_packet);
8033
8034 /* Reply describes registers byte by byte, each byte encoded as two
8035 hex characters. Suck them all up, then supply them to the
8036 register cacheing/storage mechanism. */
8037
8038 p = rs->buf.data ();
8039 for (i = 0; i < rsa->sizeof_g_packet; i++)
8040 {
8041 if (p[0] == 0 || p[1] == 0)
8042 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8043 internal_error (__FILE__, __LINE__,
8044 _("unexpected end of 'g' packet reply"));
8045
8046 if (p[0] == 'x' && p[1] == 'x')
8047 regs[i] = 0; /* 'x' */
8048 else
8049 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8050 p += 2;
8051 }
8052
8053 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8054 {
8055 struct packet_reg *r = &rsa->regs[i];
8056 long reg_size = register_size (gdbarch, i);
8057
8058 if (r->in_g_packet)
8059 {
8060 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
8061 /* This shouldn't happen - we adjusted in_g_packet above. */
8062 internal_error (__FILE__, __LINE__,
8063 _("unexpected end of 'g' packet reply"));
8064 else if (rs->buf[r->offset * 2] == 'x')
8065 {
8066 gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
8067 /* The register isn't available, mark it as such (at
8068 the same time setting the value to zero). */
8069 regcache->raw_supply (r->regnum, NULL);
8070 }
8071 else
8072 regcache->raw_supply (r->regnum, regs + r->offset);
8073 }
8074 }
8075 }
8076
8077 void
8078 remote_target::fetch_registers_using_g (struct regcache *regcache)
8079 {
8080 send_g_packet ();
8081 process_g_packet (regcache);
8082 }
8083
8084 /* Make the remote selected traceframe match GDB's selected
8085 traceframe. */
8086
8087 void
8088 remote_target::set_remote_traceframe ()
8089 {
8090 int newnum;
8091 struct remote_state *rs = get_remote_state ();
8092
8093 if (rs->remote_traceframe_number == get_traceframe_number ())
8094 return;
8095
8096 /* Avoid recursion, remote_trace_find calls us again. */
8097 rs->remote_traceframe_number = get_traceframe_number ();
8098
8099 newnum = target_trace_find (tfind_number,
8100 get_traceframe_number (), 0, 0, NULL);
8101
8102 /* Should not happen. If it does, all bets are off. */
8103 if (newnum != get_traceframe_number ())
8104 warning (_("could not set remote traceframe"));
8105 }
8106
8107 void
8108 remote_target::fetch_registers (struct regcache *regcache, int regnum)
8109 {
8110 struct gdbarch *gdbarch = regcache->arch ();
8111 struct remote_state *rs = get_remote_state ();
8112 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8113 int i;
8114
8115 set_remote_traceframe ();
8116 set_general_thread (regcache->ptid ());
8117
8118 if (regnum >= 0)
8119 {
8120 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8121
8122 gdb_assert (reg != NULL);
8123
8124 /* If this register might be in the 'g' packet, try that first -
8125 we are likely to read more than one register. If this is the
8126 first 'g' packet, we might be overly optimistic about its
8127 contents, so fall back to 'p'. */
8128 if (reg->in_g_packet)
8129 {
8130 fetch_registers_using_g (regcache);
8131 if (reg->in_g_packet)
8132 return;
8133 }
8134
8135 if (fetch_register_using_p (regcache, reg))
8136 return;
8137
8138 /* This register is not available. */
8139 regcache->raw_supply (reg->regnum, NULL);
8140
8141 return;
8142 }
8143
8144 fetch_registers_using_g (regcache);
8145
8146 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8147 if (!rsa->regs[i].in_g_packet)
8148 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
8149 {
8150 /* This register is not available. */
8151 regcache->raw_supply (i, NULL);
8152 }
8153 }
8154
8155 /* Prepare to store registers. Since we may send them all (using a
8156 'G' request), we have to read out the ones we don't want to change
8157 first. */
8158
8159 void
8160 remote_target::prepare_to_store (struct regcache *regcache)
8161 {
8162 struct remote_state *rs = get_remote_state ();
8163 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8164 int i;
8165
8166 /* Make sure the entire registers array is valid. */
8167 switch (packet_support (PACKET_P))
8168 {
8169 case PACKET_DISABLE:
8170 case PACKET_SUPPORT_UNKNOWN:
8171 /* Make sure all the necessary registers are cached. */
8172 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8173 if (rsa->regs[i].in_g_packet)
8174 regcache->raw_update (rsa->regs[i].regnum);
8175 break;
8176 case PACKET_ENABLE:
8177 break;
8178 }
8179 }
8180
8181 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
8182 packet was not recognized. */
8183
8184 int
8185 remote_target::store_register_using_P (const struct regcache *regcache,
8186 packet_reg *reg)
8187 {
8188 struct gdbarch *gdbarch = regcache->arch ();
8189 struct remote_state *rs = get_remote_state ();
8190 /* Try storing a single register. */
8191 char *buf = rs->buf.data ();
8192 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8193 char *p;
8194
8195 if (packet_support (PACKET_P) == PACKET_DISABLE)
8196 return 0;
8197
8198 if (reg->pnum == -1)
8199 return 0;
8200
8201 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
8202 p = buf + strlen (buf);
8203 regcache->raw_collect (reg->regnum, regp);
8204 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
8205 putpkt (rs->buf);
8206 getpkt (&rs->buf, 0);
8207
8208 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8209 {
8210 case PACKET_OK:
8211 return 1;
8212 case PACKET_ERROR:
8213 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8214 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
8215 case PACKET_UNKNOWN:
8216 return 0;
8217 default:
8218 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8219 }
8220 }
8221
8222 /* Store register REGNUM, or all registers if REGNUM == -1, from the
8223 contents of the register cache buffer. FIXME: ignores errors. */
8224
8225 void
8226 remote_target::store_registers_using_G (const struct regcache *regcache)
8227 {
8228 struct remote_state *rs = get_remote_state ();
8229 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8230 gdb_byte *regs;
8231 char *p;
8232
8233 /* Extract all the registers in the regcache copying them into a
8234 local buffer. */
8235 {
8236 int i;
8237
8238 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
8239 memset (regs, 0, rsa->sizeof_g_packet);
8240 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8241 {
8242 struct packet_reg *r = &rsa->regs[i];
8243
8244 if (r->in_g_packet)
8245 regcache->raw_collect (r->regnum, regs + r->offset);
8246 }
8247 }
8248
8249 /* Command describes registers byte by byte,
8250 each byte encoded as two hex characters. */
8251 p = rs->buf.data ();
8252 *p++ = 'G';
8253 bin2hex (regs, p, rsa->sizeof_g_packet);
8254 putpkt (rs->buf);
8255 getpkt (&rs->buf, 0);
8256 if (packet_check_result (rs->buf) == PACKET_ERROR)
8257 error (_("Could not write registers; remote failure reply '%s'"),
8258 rs->buf.data ());
8259 }
8260
8261 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8262 of the register cache buffer. FIXME: ignores errors. */
8263
8264 void
8265 remote_target::store_registers (struct regcache *regcache, int regnum)
8266 {
8267 struct gdbarch *gdbarch = regcache->arch ();
8268 struct remote_state *rs = get_remote_state ();
8269 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8270 int i;
8271
8272 set_remote_traceframe ();
8273 set_general_thread (regcache->ptid ());
8274
8275 if (regnum >= 0)
8276 {
8277 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8278
8279 gdb_assert (reg != NULL);
8280
8281 /* Always prefer to store registers using the 'P' packet if
8282 possible; we often change only a small number of registers.
8283 Sometimes we change a larger number; we'd need help from a
8284 higher layer to know to use 'G'. */
8285 if (store_register_using_P (regcache, reg))
8286 return;
8287
8288 /* For now, don't complain if we have no way to write the
8289 register. GDB loses track of unavailable registers too
8290 easily. Some day, this may be an error. We don't have
8291 any way to read the register, either... */
8292 if (!reg->in_g_packet)
8293 return;
8294
8295 store_registers_using_G (regcache);
8296 return;
8297 }
8298
8299 store_registers_using_G (regcache);
8300
8301 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8302 if (!rsa->regs[i].in_g_packet)
8303 if (!store_register_using_P (regcache, &rsa->regs[i]))
8304 /* See above for why we do not issue an error here. */
8305 continue;
8306 }
8307 \f
8308
8309 /* Return the number of hex digits in num. */
8310
8311 static int
8312 hexnumlen (ULONGEST num)
8313 {
8314 int i;
8315
8316 for (i = 0; num != 0; i++)
8317 num >>= 4;
8318
8319 return std::max (i, 1);
8320 }
8321
8322 /* Set BUF to the minimum number of hex digits representing NUM. */
8323
8324 static int
8325 hexnumstr (char *buf, ULONGEST num)
8326 {
8327 int len = hexnumlen (num);
8328
8329 return hexnumnstr (buf, num, len);
8330 }
8331
8332
8333 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
8334
8335 static int
8336 hexnumnstr (char *buf, ULONGEST num, int width)
8337 {
8338 int i;
8339
8340 buf[width] = '\0';
8341
8342 for (i = width - 1; i >= 0; i--)
8343 {
8344 buf[i] = "0123456789abcdef"[(num & 0xf)];
8345 num >>= 4;
8346 }
8347
8348 return width;
8349 }
8350
8351 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
8352
8353 static CORE_ADDR
8354 remote_address_masked (CORE_ADDR addr)
8355 {
8356 unsigned int address_size = remote_address_size;
8357
8358 /* If "remoteaddresssize" was not set, default to target address size. */
8359 if (!address_size)
8360 address_size = gdbarch_addr_bit (target_gdbarch ());
8361
8362 if (address_size > 0
8363 && address_size < (sizeof (ULONGEST) * 8))
8364 {
8365 /* Only create a mask when that mask can safely be constructed
8366 in a ULONGEST variable. */
8367 ULONGEST mask = 1;
8368
8369 mask = (mask << address_size) - 1;
8370 addr &= mask;
8371 }
8372 return addr;
8373 }
8374
8375 /* Determine whether the remote target supports binary downloading.
8376 This is accomplished by sending a no-op memory write of zero length
8377 to the target at the specified address. It does not suffice to send
8378 the whole packet, since many stubs strip the eighth bit and
8379 subsequently compute a wrong checksum, which causes real havoc with
8380 remote_write_bytes.
8381
8382 NOTE: This can still lose if the serial line is not eight-bit
8383 clean. In cases like this, the user should clear "remote
8384 X-packet". */
8385
8386 void
8387 remote_target::check_binary_download (CORE_ADDR addr)
8388 {
8389 struct remote_state *rs = get_remote_state ();
8390
8391 switch (packet_support (PACKET_X))
8392 {
8393 case PACKET_DISABLE:
8394 break;
8395 case PACKET_ENABLE:
8396 break;
8397 case PACKET_SUPPORT_UNKNOWN:
8398 {
8399 char *p;
8400
8401 p = rs->buf.data ();
8402 *p++ = 'X';
8403 p += hexnumstr (p, (ULONGEST) addr);
8404 *p++ = ',';
8405 p += hexnumstr (p, (ULONGEST) 0);
8406 *p++ = ':';
8407 *p = '\0';
8408
8409 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8410 getpkt (&rs->buf, 0);
8411
8412 if (rs->buf[0] == '\0')
8413 {
8414 if (remote_debug)
8415 fprintf_unfiltered (gdb_stdlog,
8416 "binary downloading NOT "
8417 "supported by target\n");
8418 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8419 }
8420 else
8421 {
8422 if (remote_debug)
8423 fprintf_unfiltered (gdb_stdlog,
8424 "binary downloading supported by target\n");
8425 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8426 }
8427 break;
8428 }
8429 }
8430 }
8431
8432 /* Helper function to resize the payload in order to try to get a good
8433 alignment. We try to write an amount of data such that the next write will
8434 start on an address aligned on REMOTE_ALIGN_WRITES. */
8435
8436 static int
8437 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8438 {
8439 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8440 }
8441
8442 /* Write memory data directly to the remote machine.
8443 This does not inform the data cache; the data cache uses this.
8444 HEADER is the starting part of the packet.
8445 MEMADDR is the address in the remote memory space.
8446 MYADDR is the address of the buffer in our space.
8447 LEN_UNITS is the number of addressable units to write.
8448 UNIT_SIZE is the length in bytes of an addressable unit.
8449 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8450 should send data as binary ('X'), or hex-encoded ('M').
8451
8452 The function creates packet of the form
8453 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8454
8455 where encoding of <DATA> is terminated by PACKET_FORMAT.
8456
8457 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8458 are omitted.
8459
8460 Return the transferred status, error or OK (an
8461 'enum target_xfer_status' value). Save the number of addressable units
8462 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8463
8464 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8465 exchange between gdb and the stub could look like (?? in place of the
8466 checksum):
8467
8468 -> $m1000,4#??
8469 <- aaaabbbbccccdddd
8470
8471 -> $M1000,3:eeeeffffeeee#??
8472 <- OK
8473
8474 -> $m1000,4#??
8475 <- eeeeffffeeeedddd */
8476
8477 target_xfer_status
8478 remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8479 const gdb_byte *myaddr,
8480 ULONGEST len_units,
8481 int unit_size,
8482 ULONGEST *xfered_len_units,
8483 char packet_format, int use_length)
8484 {
8485 struct remote_state *rs = get_remote_state ();
8486 char *p;
8487 char *plen = NULL;
8488 int plenlen = 0;
8489 int todo_units;
8490 int units_written;
8491 int payload_capacity_bytes;
8492 int payload_length_bytes;
8493
8494 if (packet_format != 'X' && packet_format != 'M')
8495 internal_error (__FILE__, __LINE__,
8496 _("remote_write_bytes_aux: bad packet format"));
8497
8498 if (len_units == 0)
8499 return TARGET_XFER_EOF;
8500
8501 payload_capacity_bytes = get_memory_write_packet_size ();
8502
8503 /* The packet buffer will be large enough for the payload;
8504 get_memory_packet_size ensures this. */
8505 rs->buf[0] = '\0';
8506
8507 /* Compute the size of the actual payload by subtracting out the
8508 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8509
8510 payload_capacity_bytes -= strlen ("$,:#NN");
8511 if (!use_length)
8512 /* The comma won't be used. */
8513 payload_capacity_bytes += 1;
8514 payload_capacity_bytes -= strlen (header);
8515 payload_capacity_bytes -= hexnumlen (memaddr);
8516
8517 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
8518
8519 strcat (rs->buf.data (), header);
8520 p = rs->buf.data () + strlen (header);
8521
8522 /* Compute a best guess of the number of bytes actually transfered. */
8523 if (packet_format == 'X')
8524 {
8525 /* Best guess at number of bytes that will fit. */
8526 todo_units = std::min (len_units,
8527 (ULONGEST) payload_capacity_bytes / unit_size);
8528 if (use_length)
8529 payload_capacity_bytes -= hexnumlen (todo_units);
8530 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8531 }
8532 else
8533 {
8534 /* Number of bytes that will fit. */
8535 todo_units
8536 = std::min (len_units,
8537 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8538 if (use_length)
8539 payload_capacity_bytes -= hexnumlen (todo_units);
8540 todo_units = std::min (todo_units,
8541 (payload_capacity_bytes / unit_size) / 2);
8542 }
8543
8544 if (todo_units <= 0)
8545 internal_error (__FILE__, __LINE__,
8546 _("minimum packet size too small to write data"));
8547
8548 /* If we already need another packet, then try to align the end
8549 of this packet to a useful boundary. */
8550 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8551 todo_units = align_for_efficient_write (todo_units, memaddr);
8552
8553 /* Append "<memaddr>". */
8554 memaddr = remote_address_masked (memaddr);
8555 p += hexnumstr (p, (ULONGEST) memaddr);
8556
8557 if (use_length)
8558 {
8559 /* Append ",". */
8560 *p++ = ',';
8561
8562 /* Append the length and retain its location and size. It may need to be
8563 adjusted once the packet body has been created. */
8564 plen = p;
8565 plenlen = hexnumstr (p, (ULONGEST) todo_units);
8566 p += plenlen;
8567 }
8568
8569 /* Append ":". */
8570 *p++ = ':';
8571 *p = '\0';
8572
8573 /* Append the packet body. */
8574 if (packet_format == 'X')
8575 {
8576 /* Binary mode. Send target system values byte by byte, in
8577 increasing byte addresses. Only escape certain critical
8578 characters. */
8579 payload_length_bytes =
8580 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8581 &units_written, payload_capacity_bytes);
8582
8583 /* If not all TODO units fit, then we'll need another packet. Make
8584 a second try to keep the end of the packet aligned. Don't do
8585 this if the packet is tiny. */
8586 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8587 {
8588 int new_todo_units;
8589
8590 new_todo_units = align_for_efficient_write (units_written, memaddr);
8591
8592 if (new_todo_units != units_written)
8593 payload_length_bytes =
8594 remote_escape_output (myaddr, new_todo_units, unit_size,
8595 (gdb_byte *) p, &units_written,
8596 payload_capacity_bytes);
8597 }
8598
8599 p += payload_length_bytes;
8600 if (use_length && units_written < todo_units)
8601 {
8602 /* Escape chars have filled up the buffer prematurely,
8603 and we have actually sent fewer units than planned.
8604 Fix-up the length field of the packet. Use the same
8605 number of characters as before. */
8606 plen += hexnumnstr (plen, (ULONGEST) units_written,
8607 plenlen);
8608 *plen = ':'; /* overwrite \0 from hexnumnstr() */
8609 }
8610 }
8611 else
8612 {
8613 /* Normal mode: Send target system values byte by byte, in
8614 increasing byte addresses. Each byte is encoded as a two hex
8615 value. */
8616 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8617 units_written = todo_units;
8618 }
8619
8620 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8621 getpkt (&rs->buf, 0);
8622
8623 if (rs->buf[0] == 'E')
8624 return TARGET_XFER_E_IO;
8625
8626 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8627 send fewer units than we'd planned. */
8628 *xfered_len_units = (ULONGEST) units_written;
8629 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8630 }
8631
8632 /* Write memory data directly to the remote machine.
8633 This does not inform the data cache; the data cache uses this.
8634 MEMADDR is the address in the remote memory space.
8635 MYADDR is the address of the buffer in our space.
8636 LEN is the number of bytes.
8637
8638 Return the transferred status, error or OK (an
8639 'enum target_xfer_status' value). Save the number of bytes
8640 transferred in *XFERED_LEN. Only transfer a single packet. */
8641
8642 target_xfer_status
8643 remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8644 ULONGEST len, int unit_size,
8645 ULONGEST *xfered_len)
8646 {
8647 const char *packet_format = NULL;
8648
8649 /* Check whether the target supports binary download. */
8650 check_binary_download (memaddr);
8651
8652 switch (packet_support (PACKET_X))
8653 {
8654 case PACKET_ENABLE:
8655 packet_format = "X";
8656 break;
8657 case PACKET_DISABLE:
8658 packet_format = "M";
8659 break;
8660 case PACKET_SUPPORT_UNKNOWN:
8661 internal_error (__FILE__, __LINE__,
8662 _("remote_write_bytes: bad internal state"));
8663 default:
8664 internal_error (__FILE__, __LINE__, _("bad switch"));
8665 }
8666
8667 return remote_write_bytes_aux (packet_format,
8668 memaddr, myaddr, len, unit_size, xfered_len,
8669 packet_format[0], 1);
8670 }
8671
8672 /* Read memory data directly from the remote machine.
8673 This does not use the data cache; the data cache uses this.
8674 MEMADDR is the address in the remote memory space.
8675 MYADDR is the address of the buffer in our space.
8676 LEN_UNITS is the number of addressable memory units to read..
8677 UNIT_SIZE is the length in bytes of an addressable unit.
8678
8679 Return the transferred status, error or OK (an
8680 'enum target_xfer_status' value). Save the number of bytes
8681 transferred in *XFERED_LEN_UNITS.
8682
8683 See the comment of remote_write_bytes_aux for an example of
8684 memory read/write exchange between gdb and the stub. */
8685
8686 target_xfer_status
8687 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8688 ULONGEST len_units,
8689 int unit_size, ULONGEST *xfered_len_units)
8690 {
8691 struct remote_state *rs = get_remote_state ();
8692 int buf_size_bytes; /* Max size of packet output buffer. */
8693 char *p;
8694 int todo_units;
8695 int decoded_bytes;
8696
8697 buf_size_bytes = get_memory_read_packet_size ();
8698 /* The packet buffer will be large enough for the payload;
8699 get_memory_packet_size ensures this. */
8700
8701 /* Number of units that will fit. */
8702 todo_units = std::min (len_units,
8703 (ULONGEST) (buf_size_bytes / unit_size) / 2);
8704
8705 /* Construct "m"<memaddr>","<len>". */
8706 memaddr = remote_address_masked (memaddr);
8707 p = rs->buf.data ();
8708 *p++ = 'm';
8709 p += hexnumstr (p, (ULONGEST) memaddr);
8710 *p++ = ',';
8711 p += hexnumstr (p, (ULONGEST) todo_units);
8712 *p = '\0';
8713 putpkt (rs->buf);
8714 getpkt (&rs->buf, 0);
8715 if (rs->buf[0] == 'E'
8716 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8717 && rs->buf[3] == '\0')
8718 return TARGET_XFER_E_IO;
8719 /* Reply describes memory byte by byte, each byte encoded as two hex
8720 characters. */
8721 p = rs->buf.data ();
8722 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8723 /* Return what we have. Let higher layers handle partial reads. */
8724 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8725 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8726 }
8727
8728 /* Using the set of read-only target sections of remote, read live
8729 read-only memory.
8730
8731 For interface/parameters/return description see target.h,
8732 to_xfer_partial. */
8733
8734 target_xfer_status
8735 remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
8736 ULONGEST memaddr,
8737 ULONGEST len,
8738 int unit_size,
8739 ULONGEST *xfered_len)
8740 {
8741 struct target_section *secp;
8742 struct target_section_table *table;
8743
8744 secp = target_section_by_addr (this, memaddr);
8745 if (secp != NULL
8746 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
8747 {
8748 struct target_section *p;
8749 ULONGEST memend = memaddr + len;
8750
8751 table = target_get_section_table (this);
8752
8753 for (p = table->sections; p < table->sections_end; p++)
8754 {
8755 if (memaddr >= p->addr)
8756 {
8757 if (memend <= p->endaddr)
8758 {
8759 /* Entire transfer is within this section. */
8760 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8761 xfered_len);
8762 }
8763 else if (memaddr >= p->endaddr)
8764 {
8765 /* This section ends before the transfer starts. */
8766 continue;
8767 }
8768 else
8769 {
8770 /* This section overlaps the transfer. Just do half. */
8771 len = p->endaddr - memaddr;
8772 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8773 xfered_len);
8774 }
8775 }
8776 }
8777 }
8778
8779 return TARGET_XFER_EOF;
8780 }
8781
8782 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8783 first if the requested memory is unavailable in traceframe.
8784 Otherwise, fall back to remote_read_bytes_1. */
8785
8786 target_xfer_status
8787 remote_target::remote_read_bytes (CORE_ADDR memaddr,
8788 gdb_byte *myaddr, ULONGEST len, int unit_size,
8789 ULONGEST *xfered_len)
8790 {
8791 if (len == 0)
8792 return TARGET_XFER_EOF;
8793
8794 if (get_traceframe_number () != -1)
8795 {
8796 std::vector<mem_range> available;
8797
8798 /* If we fail to get the set of available memory, then the
8799 target does not support querying traceframe info, and so we
8800 attempt reading from the traceframe anyway (assuming the
8801 target implements the old QTro packet then). */
8802 if (traceframe_available_memory (&available, memaddr, len))
8803 {
8804 if (available.empty () || available[0].start != memaddr)
8805 {
8806 enum target_xfer_status res;
8807
8808 /* Don't read into the traceframe's available
8809 memory. */
8810 if (!available.empty ())
8811 {
8812 LONGEST oldlen = len;
8813
8814 len = available[0].start - memaddr;
8815 gdb_assert (len <= oldlen);
8816 }
8817
8818 /* This goes through the topmost target again. */
8819 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
8820 len, unit_size, xfered_len);
8821 if (res == TARGET_XFER_OK)
8822 return TARGET_XFER_OK;
8823 else
8824 {
8825 /* No use trying further, we know some memory starting
8826 at MEMADDR isn't available. */
8827 *xfered_len = len;
8828 return (*xfered_len != 0) ?
8829 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8830 }
8831 }
8832
8833 /* Don't try to read more than how much is available, in
8834 case the target implements the deprecated QTro packet to
8835 cater for older GDBs (the target's knowledge of read-only
8836 sections may be outdated by now). */
8837 len = available[0].length;
8838 }
8839 }
8840
8841 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8842 }
8843
8844 \f
8845
8846 /* Sends a packet with content determined by the printf format string
8847 FORMAT and the remaining arguments, then gets the reply. Returns
8848 whether the packet was a success, a failure, or unknown. */
8849
8850 packet_result
8851 remote_target::remote_send_printf (const char *format, ...)
8852 {
8853 struct remote_state *rs = get_remote_state ();
8854 int max_size = get_remote_packet_size ();
8855 va_list ap;
8856
8857 va_start (ap, format);
8858
8859 rs->buf[0] = '\0';
8860 int size = vsnprintf (rs->buf.data (), max_size, format, ap);
8861
8862 va_end (ap);
8863
8864 if (size >= max_size)
8865 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8866
8867 if (putpkt (rs->buf) < 0)
8868 error (_("Communication problem with target."));
8869
8870 rs->buf[0] = '\0';
8871 getpkt (&rs->buf, 0);
8872
8873 return packet_check_result (rs->buf);
8874 }
8875
8876 /* Flash writing can take quite some time. We'll set
8877 effectively infinite timeout for flash operations.
8878 In future, we'll need to decide on a better approach. */
8879 static const int remote_flash_timeout = 1000;
8880
8881 void
8882 remote_target::flash_erase (ULONGEST address, LONGEST length)
8883 {
8884 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8885 enum packet_result ret;
8886 scoped_restore restore_timeout
8887 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8888
8889 ret = remote_send_printf ("vFlashErase:%s,%s",
8890 phex (address, addr_size),
8891 phex (length, 4));
8892 switch (ret)
8893 {
8894 case PACKET_UNKNOWN:
8895 error (_("Remote target does not support flash erase"));
8896 case PACKET_ERROR:
8897 error (_("Error erasing flash with vFlashErase packet"));
8898 default:
8899 break;
8900 }
8901 }
8902
8903 target_xfer_status
8904 remote_target::remote_flash_write (ULONGEST address,
8905 ULONGEST length, ULONGEST *xfered_len,
8906 const gdb_byte *data)
8907 {
8908 scoped_restore restore_timeout
8909 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8910 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8911 xfered_len,'X', 0);
8912 }
8913
8914 void
8915 remote_target::flash_done ()
8916 {
8917 int ret;
8918
8919 scoped_restore restore_timeout
8920 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8921
8922 ret = remote_send_printf ("vFlashDone");
8923
8924 switch (ret)
8925 {
8926 case PACKET_UNKNOWN:
8927 error (_("Remote target does not support vFlashDone"));
8928 case PACKET_ERROR:
8929 error (_("Error finishing flash operation"));
8930 default:
8931 break;
8932 }
8933 }
8934
8935 void
8936 remote_target::files_info ()
8937 {
8938 puts_filtered ("Debugging a target over a serial line.\n");
8939 }
8940 \f
8941 /* Stuff for dealing with the packets which are part of this protocol.
8942 See comment at top of file for details. */
8943
8944 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8945 error to higher layers. Called when a serial error is detected.
8946 The exception message is STRING, followed by a colon and a blank,
8947 the system error message for errno at function entry and final dot
8948 for output compatibility with throw_perror_with_name. */
8949
8950 static void
8951 unpush_and_perror (const char *string)
8952 {
8953 int saved_errno = errno;
8954
8955 remote_unpush_target ();
8956 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8957 safe_strerror (saved_errno));
8958 }
8959
8960 /* Read a single character from the remote end. The current quit
8961 handler is overridden to avoid quitting in the middle of packet
8962 sequence, as that would break communication with the remote server.
8963 See remote_serial_quit_handler for more detail. */
8964
8965 int
8966 remote_target::readchar (int timeout)
8967 {
8968 int ch;
8969 struct remote_state *rs = get_remote_state ();
8970
8971 {
8972 scoped_restore restore_quit_target
8973 = make_scoped_restore (&curr_quit_handler_target, this);
8974 scoped_restore restore_quit
8975 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
8976
8977 rs->got_ctrlc_during_io = 0;
8978
8979 ch = serial_readchar (rs->remote_desc, timeout);
8980
8981 if (rs->got_ctrlc_during_io)
8982 set_quit_flag ();
8983 }
8984
8985 if (ch >= 0)
8986 return ch;
8987
8988 switch ((enum serial_rc) ch)
8989 {
8990 case SERIAL_EOF:
8991 remote_unpush_target ();
8992 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8993 /* no return */
8994 case SERIAL_ERROR:
8995 unpush_and_perror (_("Remote communication error. "
8996 "Target disconnected."));
8997 /* no return */
8998 case SERIAL_TIMEOUT:
8999 break;
9000 }
9001 return ch;
9002 }
9003
9004 /* Wrapper for serial_write that closes the target and throws if
9005 writing fails. The current quit handler is overridden to avoid
9006 quitting in the middle of packet sequence, as that would break
9007 communication with the remote server. See
9008 remote_serial_quit_handler for more detail. */
9009
9010 void
9011 remote_target::remote_serial_write (const char *str, int len)
9012 {
9013 struct remote_state *rs = get_remote_state ();
9014
9015 scoped_restore restore_quit_target
9016 = make_scoped_restore (&curr_quit_handler_target, this);
9017 scoped_restore restore_quit
9018 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9019
9020 rs->got_ctrlc_during_io = 0;
9021
9022 if (serial_write (rs->remote_desc, str, len))
9023 {
9024 unpush_and_perror (_("Remote communication error. "
9025 "Target disconnected."));
9026 }
9027
9028 if (rs->got_ctrlc_during_io)
9029 set_quit_flag ();
9030 }
9031
9032 /* Return a string representing an escaped version of BUF, of len N.
9033 E.g. \n is converted to \\n, \t to \\t, etc. */
9034
9035 static std::string
9036 escape_buffer (const char *buf, int n)
9037 {
9038 string_file stb;
9039
9040 stb.putstrn (buf, n, '\\');
9041 return std::move (stb.string ());
9042 }
9043
9044 /* Display a null-terminated packet on stdout, for debugging, using C
9045 string notation. */
9046
9047 static void
9048 print_packet (const char *buf)
9049 {
9050 puts_filtered ("\"");
9051 fputstr_filtered (buf, '"', gdb_stdout);
9052 puts_filtered ("\"");
9053 }
9054
9055 int
9056 remote_target::putpkt (const char *buf)
9057 {
9058 return putpkt_binary (buf, strlen (buf));
9059 }
9060
9061 /* Wrapper around remote_target::putpkt to avoid exporting
9062 remote_target. */
9063
9064 int
9065 putpkt (remote_target *remote, const char *buf)
9066 {
9067 return remote->putpkt (buf);
9068 }
9069
9070 /* Send a packet to the remote machine, with error checking. The data
9071 of the packet is in BUF. The string in BUF can be at most
9072 get_remote_packet_size () - 5 to account for the $, # and checksum,
9073 and for a possible /0 if we are debugging (remote_debug) and want
9074 to print the sent packet as a string. */
9075
9076 int
9077 remote_target::putpkt_binary (const char *buf, int cnt)
9078 {
9079 struct remote_state *rs = get_remote_state ();
9080 int i;
9081 unsigned char csum = 0;
9082 gdb::def_vector<char> data (cnt + 6);
9083 char *buf2 = data.data ();
9084
9085 int ch;
9086 int tcount = 0;
9087 char *p;
9088
9089 /* Catch cases like trying to read memory or listing threads while
9090 we're waiting for a stop reply. The remote server wouldn't be
9091 ready to handle this request, so we'd hang and timeout. We don't
9092 have to worry about this in synchronous mode, because in that
9093 case it's not possible to issue a command while the target is
9094 running. This is not a problem in non-stop mode, because in that
9095 case, the stub is always ready to process serial input. */
9096 if (!target_is_non_stop_p ()
9097 && target_is_async_p ()
9098 && rs->waiting_for_stop_reply)
9099 {
9100 error (_("Cannot execute this command while the target is running.\n"
9101 "Use the \"interrupt\" command to stop the target\n"
9102 "and then try again."));
9103 }
9104
9105 /* We're sending out a new packet. Make sure we don't look at a
9106 stale cached response. */
9107 rs->cached_wait_status = 0;
9108
9109 /* Copy the packet into buffer BUF2, encapsulating it
9110 and giving it a checksum. */
9111
9112 p = buf2;
9113 *p++ = '$';
9114
9115 for (i = 0; i < cnt; i++)
9116 {
9117 csum += buf[i];
9118 *p++ = buf[i];
9119 }
9120 *p++ = '#';
9121 *p++ = tohex ((csum >> 4) & 0xf);
9122 *p++ = tohex (csum & 0xf);
9123
9124 /* Send it over and over until we get a positive ack. */
9125
9126 while (1)
9127 {
9128 int started_error_output = 0;
9129
9130 if (remote_debug)
9131 {
9132 *p = '\0';
9133
9134 int len = (int) (p - buf2);
9135
9136 std::string str
9137 = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
9138
9139 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
9140
9141 if (len > REMOTE_DEBUG_MAX_CHAR)
9142 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9143 len - REMOTE_DEBUG_MAX_CHAR);
9144
9145 fprintf_unfiltered (gdb_stdlog, "...");
9146
9147 gdb_flush (gdb_stdlog);
9148 }
9149 remote_serial_write (buf2, p - buf2);
9150
9151 /* If this is a no acks version of the remote protocol, send the
9152 packet and move on. */
9153 if (rs->noack_mode)
9154 break;
9155
9156 /* Read until either a timeout occurs (-2) or '+' is read.
9157 Handle any notification that arrives in the mean time. */
9158 while (1)
9159 {
9160 ch = readchar (remote_timeout);
9161
9162 if (remote_debug)
9163 {
9164 switch (ch)
9165 {
9166 case '+':
9167 case '-':
9168 case SERIAL_TIMEOUT:
9169 case '$':
9170 case '%':
9171 if (started_error_output)
9172 {
9173 putchar_unfiltered ('\n');
9174 started_error_output = 0;
9175 }
9176 }
9177 }
9178
9179 switch (ch)
9180 {
9181 case '+':
9182 if (remote_debug)
9183 fprintf_unfiltered (gdb_stdlog, "Ack\n");
9184 return 1;
9185 case '-':
9186 if (remote_debug)
9187 fprintf_unfiltered (gdb_stdlog, "Nak\n");
9188 /* FALLTHROUGH */
9189 case SERIAL_TIMEOUT:
9190 tcount++;
9191 if (tcount > 3)
9192 return 0;
9193 break; /* Retransmit buffer. */
9194 case '$':
9195 {
9196 if (remote_debug)
9197 fprintf_unfiltered (gdb_stdlog,
9198 "Packet instead of Ack, ignoring it\n");
9199 /* It's probably an old response sent because an ACK
9200 was lost. Gobble up the packet and ack it so it
9201 doesn't get retransmitted when we resend this
9202 packet. */
9203 skip_frame ();
9204 remote_serial_write ("+", 1);
9205 continue; /* Now, go look for +. */
9206 }
9207
9208 case '%':
9209 {
9210 int val;
9211
9212 /* If we got a notification, handle it, and go back to looking
9213 for an ack. */
9214 /* We've found the start of a notification. Now
9215 collect the data. */
9216 val = read_frame (&rs->buf);
9217 if (val >= 0)
9218 {
9219 if (remote_debug)
9220 {
9221 std::string str = escape_buffer (rs->buf.data (), val);
9222
9223 fprintf_unfiltered (gdb_stdlog,
9224 " Notification received: %s\n",
9225 str.c_str ());
9226 }
9227 handle_notification (rs->notif_state, rs->buf.data ());
9228 /* We're in sync now, rewait for the ack. */
9229 tcount = 0;
9230 }
9231 else
9232 {
9233 if (remote_debug)
9234 {
9235 if (!started_error_output)
9236 {
9237 started_error_output = 1;
9238 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9239 }
9240 fputc_unfiltered (ch & 0177, gdb_stdlog);
9241 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf.data ());
9242 }
9243 }
9244 continue;
9245 }
9246 /* fall-through */
9247 default:
9248 if (remote_debug)
9249 {
9250 if (!started_error_output)
9251 {
9252 started_error_output = 1;
9253 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9254 }
9255 fputc_unfiltered (ch & 0177, gdb_stdlog);
9256 }
9257 continue;
9258 }
9259 break; /* Here to retransmit. */
9260 }
9261
9262 #if 0
9263 /* This is wrong. If doing a long backtrace, the user should be
9264 able to get out next time we call QUIT, without anything as
9265 violent as interrupt_query. If we want to provide a way out of
9266 here without getting to the next QUIT, it should be based on
9267 hitting ^C twice as in remote_wait. */
9268 if (quit_flag)
9269 {
9270 quit_flag = 0;
9271 interrupt_query ();
9272 }
9273 #endif
9274 }
9275
9276 return 0;
9277 }
9278
9279 /* Come here after finding the start of a frame when we expected an
9280 ack. Do our best to discard the rest of this packet. */
9281
9282 void
9283 remote_target::skip_frame ()
9284 {
9285 int c;
9286
9287 while (1)
9288 {
9289 c = readchar (remote_timeout);
9290 switch (c)
9291 {
9292 case SERIAL_TIMEOUT:
9293 /* Nothing we can do. */
9294 return;
9295 case '#':
9296 /* Discard the two bytes of checksum and stop. */
9297 c = readchar (remote_timeout);
9298 if (c >= 0)
9299 c = readchar (remote_timeout);
9300
9301 return;
9302 case '*': /* Run length encoding. */
9303 /* Discard the repeat count. */
9304 c = readchar (remote_timeout);
9305 if (c < 0)
9306 return;
9307 break;
9308 default:
9309 /* A regular character. */
9310 break;
9311 }
9312 }
9313 }
9314
9315 /* Come here after finding the start of the frame. Collect the rest
9316 into *BUF, verifying the checksum, length, and handling run-length
9317 compression. NUL terminate the buffer. If there is not enough room,
9318 expand *BUF.
9319
9320 Returns -1 on error, number of characters in buffer (ignoring the
9321 trailing NULL) on success. (could be extended to return one of the
9322 SERIAL status indications). */
9323
9324 long
9325 remote_target::read_frame (gdb::char_vector *buf_p)
9326 {
9327 unsigned char csum;
9328 long bc;
9329 int c;
9330 char *buf = buf_p->data ();
9331 struct remote_state *rs = get_remote_state ();
9332
9333 csum = 0;
9334 bc = 0;
9335
9336 while (1)
9337 {
9338 c = readchar (remote_timeout);
9339 switch (c)
9340 {
9341 case SERIAL_TIMEOUT:
9342 if (remote_debug)
9343 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
9344 return -1;
9345 case '$':
9346 if (remote_debug)
9347 fputs_filtered ("Saw new packet start in middle of old one\n",
9348 gdb_stdlog);
9349 return -1; /* Start a new packet, count retries. */
9350 case '#':
9351 {
9352 unsigned char pktcsum;
9353 int check_0 = 0;
9354 int check_1 = 0;
9355
9356 buf[bc] = '\0';
9357
9358 check_0 = readchar (remote_timeout);
9359 if (check_0 >= 0)
9360 check_1 = readchar (remote_timeout);
9361
9362 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9363 {
9364 if (remote_debug)
9365 fputs_filtered ("Timeout in checksum, retrying\n",
9366 gdb_stdlog);
9367 return -1;
9368 }
9369 else if (check_0 < 0 || check_1 < 0)
9370 {
9371 if (remote_debug)
9372 fputs_filtered ("Communication error in checksum\n",
9373 gdb_stdlog);
9374 return -1;
9375 }
9376
9377 /* Don't recompute the checksum; with no ack packets we
9378 don't have any way to indicate a packet retransmission
9379 is necessary. */
9380 if (rs->noack_mode)
9381 return bc;
9382
9383 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9384 if (csum == pktcsum)
9385 return bc;
9386
9387 if (remote_debug)
9388 {
9389 std::string str = escape_buffer (buf, bc);
9390
9391 fprintf_unfiltered (gdb_stdlog,
9392 "Bad checksum, sentsum=0x%x, "
9393 "csum=0x%x, buf=%s\n",
9394 pktcsum, csum, str.c_str ());
9395 }
9396 /* Number of characters in buffer ignoring trailing
9397 NULL. */
9398 return -1;
9399 }
9400 case '*': /* Run length encoding. */
9401 {
9402 int repeat;
9403
9404 csum += c;
9405 c = readchar (remote_timeout);
9406 csum += c;
9407 repeat = c - ' ' + 3; /* Compute repeat count. */
9408
9409 /* The character before ``*'' is repeated. */
9410
9411 if (repeat > 0 && repeat <= 255 && bc > 0)
9412 {
9413 if (bc + repeat - 1 >= buf_p->size () - 1)
9414 {
9415 /* Make some more room in the buffer. */
9416 buf_p->resize (buf_p->size () + repeat);
9417 buf = buf_p->data ();
9418 }
9419
9420 memset (&buf[bc], buf[bc - 1], repeat);
9421 bc += repeat;
9422 continue;
9423 }
9424
9425 buf[bc] = '\0';
9426 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9427 return -1;
9428 }
9429 default:
9430 if (bc >= buf_p->size () - 1)
9431 {
9432 /* Make some more room in the buffer. */
9433 buf_p->resize (buf_p->size () * 2);
9434 buf = buf_p->data ();
9435 }
9436
9437 buf[bc++] = c;
9438 csum += c;
9439 continue;
9440 }
9441 }
9442 }
9443
9444 /* Set this to the maximum number of seconds to wait instead of waiting forever
9445 in target_wait(). If this timer times out, then it generates an error and
9446 the command is aborted. This replaces most of the need for timeouts in the
9447 GDB test suite, and makes it possible to distinguish between a hung target
9448 and one with slow communications. */
9449
9450 static int watchdog = 0;
9451 static void
9452 show_watchdog (struct ui_file *file, int from_tty,
9453 struct cmd_list_element *c, const char *value)
9454 {
9455 fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
9456 }
9457
9458 /* Read a packet from the remote machine, with error checking, and
9459 store it in *BUF. Resize *BUF if necessary to hold the result. If
9460 FOREVER, wait forever rather than timing out; this is used (in
9461 synchronous mode) to wait for a target that is is executing user
9462 code to stop. */
9463 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9464 don't have to change all the calls to getpkt to deal with the
9465 return value, because at the moment I don't know what the right
9466 thing to do it for those. */
9467
9468 void
9469 remote_target::getpkt (gdb::char_vector *buf, int forever)
9470 {
9471 getpkt_sane (buf, forever);
9472 }
9473
9474
9475 /* Read a packet from the remote machine, with error checking, and
9476 store it in *BUF. Resize *BUF if necessary to hold the result. If
9477 FOREVER, wait forever rather than timing out; this is used (in
9478 synchronous mode) to wait for a target that is is executing user
9479 code to stop. If FOREVER == 0, this function is allowed to time
9480 out gracefully and return an indication of this to the caller.
9481 Otherwise return the number of bytes read. If EXPECTING_NOTIF,
9482 consider receiving a notification enough reason to return to the
9483 caller. *IS_NOTIF is an output boolean that indicates whether *BUF
9484 holds a notification or not (a regular packet). */
9485
9486 int
9487 remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
9488 int forever, int expecting_notif,
9489 int *is_notif)
9490 {
9491 struct remote_state *rs = get_remote_state ();
9492 int c;
9493 int tries;
9494 int timeout;
9495 int val = -1;
9496
9497 /* We're reading a new response. Make sure we don't look at a
9498 previously cached response. */
9499 rs->cached_wait_status = 0;
9500
9501 strcpy (buf->data (), "timeout");
9502
9503 if (forever)
9504 timeout = watchdog > 0 ? watchdog : -1;
9505 else if (expecting_notif)
9506 timeout = 0; /* There should already be a char in the buffer. If
9507 not, bail out. */
9508 else
9509 timeout = remote_timeout;
9510
9511 #define MAX_TRIES 3
9512
9513 /* Process any number of notifications, and then return when
9514 we get a packet. */
9515 for (;;)
9516 {
9517 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9518 times. */
9519 for (tries = 1; tries <= MAX_TRIES; tries++)
9520 {
9521 /* This can loop forever if the remote side sends us
9522 characters continuously, but if it pauses, we'll get
9523 SERIAL_TIMEOUT from readchar because of timeout. Then
9524 we'll count that as a retry.
9525
9526 Note that even when forever is set, we will only wait
9527 forever prior to the start of a packet. After that, we
9528 expect characters to arrive at a brisk pace. They should
9529 show up within remote_timeout intervals. */
9530 do
9531 c = readchar (timeout);
9532 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9533
9534 if (c == SERIAL_TIMEOUT)
9535 {
9536 if (expecting_notif)
9537 return -1; /* Don't complain, it's normal to not get
9538 anything in this case. */
9539
9540 if (forever) /* Watchdog went off? Kill the target. */
9541 {
9542 remote_unpush_target ();
9543 throw_error (TARGET_CLOSE_ERROR,
9544 _("Watchdog timeout has expired. "
9545 "Target detached."));
9546 }
9547 if (remote_debug)
9548 fputs_filtered ("Timed out.\n", gdb_stdlog);
9549 }
9550 else
9551 {
9552 /* We've found the start of a packet or notification.
9553 Now collect the data. */
9554 val = read_frame (buf);
9555 if (val >= 0)
9556 break;
9557 }
9558
9559 remote_serial_write ("-", 1);
9560 }
9561
9562 if (tries > MAX_TRIES)
9563 {
9564 /* We have tried hard enough, and just can't receive the
9565 packet/notification. Give up. */
9566 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9567
9568 /* Skip the ack char if we're in no-ack mode. */
9569 if (!rs->noack_mode)
9570 remote_serial_write ("+", 1);
9571 return -1;
9572 }
9573
9574 /* If we got an ordinary packet, return that to our caller. */
9575 if (c == '$')
9576 {
9577 if (remote_debug)
9578 {
9579 std::string str
9580 = escape_buffer (buf->data (),
9581 std::min (val, REMOTE_DEBUG_MAX_CHAR));
9582
9583 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9584 str.c_str ());
9585
9586 if (val > REMOTE_DEBUG_MAX_CHAR)
9587 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9588 val - REMOTE_DEBUG_MAX_CHAR);
9589
9590 fprintf_unfiltered (gdb_stdlog, "\n");
9591 }
9592
9593 /* Skip the ack char if we're in no-ack mode. */
9594 if (!rs->noack_mode)
9595 remote_serial_write ("+", 1);
9596 if (is_notif != NULL)
9597 *is_notif = 0;
9598 return val;
9599 }
9600
9601 /* If we got a notification, handle it, and go back to looking
9602 for a packet. */
9603 else
9604 {
9605 gdb_assert (c == '%');
9606
9607 if (remote_debug)
9608 {
9609 std::string str = escape_buffer (buf->data (), val);
9610
9611 fprintf_unfiltered (gdb_stdlog,
9612 " Notification received: %s\n",
9613 str.c_str ());
9614 }
9615 if (is_notif != NULL)
9616 *is_notif = 1;
9617
9618 handle_notification (rs->notif_state, buf->data ());
9619
9620 /* Notifications require no acknowledgement. */
9621
9622 if (expecting_notif)
9623 return val;
9624 }
9625 }
9626 }
9627
9628 int
9629 remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
9630 {
9631 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
9632 }
9633
9634 int
9635 remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
9636 int *is_notif)
9637 {
9638 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
9639 }
9640
9641 /* Kill any new fork children of process PID that haven't been
9642 processed by follow_fork. */
9643
9644 void
9645 remote_target::kill_new_fork_children (int pid)
9646 {
9647 remote_state *rs = get_remote_state ();
9648 struct notif_client *notif = &notif_client_stop;
9649
9650 /* Kill the fork child threads of any threads in process PID
9651 that are stopped at a fork event. */
9652 for (thread_info *thread : all_non_exited_threads ())
9653 {
9654 struct target_waitstatus *ws = &thread->pending_follow;
9655
9656 if (is_pending_fork_parent (ws, pid, thread->ptid))
9657 {
9658 int child_pid = ws->value.related_pid.pid ();
9659 int res;
9660
9661 res = remote_vkill (child_pid);
9662 if (res != 0)
9663 error (_("Can't kill fork child process %d"), child_pid);
9664 }
9665 }
9666
9667 /* Check for any pending fork events (not reported or processed yet)
9668 in process PID and kill those fork child threads as well. */
9669 remote_notif_get_pending_events (notif);
9670 for (auto &event : rs->stop_reply_queue)
9671 if (is_pending_fork_parent (&event->ws, pid, event->ptid))
9672 {
9673 int child_pid = event->ws.value.related_pid.pid ();
9674 int res;
9675
9676 res = remote_vkill (child_pid);
9677 if (res != 0)
9678 error (_("Can't kill fork child process %d"), child_pid);
9679 }
9680 }
9681
9682 \f
9683 /* Target hook to kill the current inferior. */
9684
9685 void
9686 remote_target::kill ()
9687 {
9688 int res = -1;
9689 int pid = inferior_ptid.pid ();
9690 struct remote_state *rs = get_remote_state ();
9691
9692 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9693 {
9694 /* If we're stopped while forking and we haven't followed yet,
9695 kill the child task. We need to do this before killing the
9696 parent task because if this is a vfork then the parent will
9697 be sleeping. */
9698 kill_new_fork_children (pid);
9699
9700 res = remote_vkill (pid);
9701 if (res == 0)
9702 {
9703 target_mourn_inferior (inferior_ptid);
9704 return;
9705 }
9706 }
9707
9708 /* If we are in 'target remote' mode and we are killing the only
9709 inferior, then we will tell gdbserver to exit and unpush the
9710 target. */
9711 if (res == -1 && !remote_multi_process_p (rs)
9712 && number_of_live_inferiors () == 1)
9713 {
9714 remote_kill_k ();
9715
9716 /* We've killed the remote end, we get to mourn it. If we are
9717 not in extended mode, mourning the inferior also unpushes
9718 remote_ops from the target stack, which closes the remote
9719 connection. */
9720 target_mourn_inferior (inferior_ptid);
9721
9722 return;
9723 }
9724
9725 error (_("Can't kill process"));
9726 }
9727
9728 /* Send a kill request to the target using the 'vKill' packet. */
9729
9730 int
9731 remote_target::remote_vkill (int pid)
9732 {
9733 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9734 return -1;
9735
9736 remote_state *rs = get_remote_state ();
9737
9738 /* Tell the remote target to detach. */
9739 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
9740 putpkt (rs->buf);
9741 getpkt (&rs->buf, 0);
9742
9743 switch (packet_ok (rs->buf,
9744 &remote_protocol_packets[PACKET_vKill]))
9745 {
9746 case PACKET_OK:
9747 return 0;
9748 case PACKET_ERROR:
9749 return 1;
9750 case PACKET_UNKNOWN:
9751 return -1;
9752 default:
9753 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9754 }
9755 }
9756
9757 /* Send a kill request to the target using the 'k' packet. */
9758
9759 void
9760 remote_target::remote_kill_k ()
9761 {
9762 /* Catch errors so the user can quit from gdb even when we
9763 aren't on speaking terms with the remote system. */
9764 try
9765 {
9766 putpkt ("k");
9767 }
9768 catch (const gdb_exception_error &ex)
9769 {
9770 if (ex.error == TARGET_CLOSE_ERROR)
9771 {
9772 /* If we got an (EOF) error that caused the target
9773 to go away, then we're done, that's what we wanted.
9774 "k" is susceptible to cause a premature EOF, given
9775 that the remote server isn't actually required to
9776 reply to "k", and it can happen that it doesn't
9777 even get to reply ACK to the "k". */
9778 return;
9779 }
9780
9781 /* Otherwise, something went wrong. We didn't actually kill
9782 the target. Just propagate the exception, and let the
9783 user or higher layers decide what to do. */
9784 throw;
9785 }
9786 }
9787
9788 void
9789 remote_target::mourn_inferior ()
9790 {
9791 struct remote_state *rs = get_remote_state ();
9792
9793 /* We're no longer interested in notification events of an inferior
9794 that exited or was killed/detached. */
9795 discard_pending_stop_replies (current_inferior ());
9796
9797 /* In 'target remote' mode with one inferior, we close the connection. */
9798 if (!rs->extended && number_of_live_inferiors () <= 1)
9799 {
9800 unpush_target (this);
9801
9802 /* remote_close takes care of doing most of the clean up. */
9803 generic_mourn_inferior ();
9804 return;
9805 }
9806
9807 /* In case we got here due to an error, but we're going to stay
9808 connected. */
9809 rs->waiting_for_stop_reply = 0;
9810
9811 /* If the current general thread belonged to the process we just
9812 detached from or has exited, the remote side current general
9813 thread becomes undefined. Considering a case like this:
9814
9815 - We just got here due to a detach.
9816 - The process that we're detaching from happens to immediately
9817 report a global breakpoint being hit in non-stop mode, in the
9818 same thread we had selected before.
9819 - GDB attaches to this process again.
9820 - This event happens to be the next event we handle.
9821
9822 GDB would consider that the current general thread didn't need to
9823 be set on the stub side (with Hg), since for all it knew,
9824 GENERAL_THREAD hadn't changed.
9825
9826 Notice that although in all-stop mode, the remote server always
9827 sets the current thread to the thread reporting the stop event,
9828 that doesn't happen in non-stop mode; in non-stop, the stub *must
9829 not* change the current thread when reporting a breakpoint hit,
9830 due to the decoupling of event reporting and event handling.
9831
9832 To keep things simple, we always invalidate our notion of the
9833 current thread. */
9834 record_currthread (rs, minus_one_ptid);
9835
9836 /* Call common code to mark the inferior as not running. */
9837 generic_mourn_inferior ();
9838
9839 if (!have_inferiors ())
9840 {
9841 if (!remote_multi_process_p (rs))
9842 {
9843 /* Check whether the target is running now - some remote stubs
9844 automatically restart after kill. */
9845 putpkt ("?");
9846 getpkt (&rs->buf, 0);
9847
9848 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9849 {
9850 /* Assume that the target has been restarted. Set
9851 inferior_ptid so that bits of core GDB realizes
9852 there's something here, e.g., so that the user can
9853 say "kill" again. */
9854 inferior_ptid = magic_null_ptid;
9855 }
9856 }
9857 }
9858 }
9859
9860 bool
9861 extended_remote_target::supports_disable_randomization ()
9862 {
9863 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9864 }
9865
9866 void
9867 remote_target::extended_remote_disable_randomization (int val)
9868 {
9869 struct remote_state *rs = get_remote_state ();
9870 char *reply;
9871
9872 xsnprintf (rs->buf.data (), get_remote_packet_size (),
9873 "QDisableRandomization:%x", val);
9874 putpkt (rs->buf);
9875 reply = remote_get_noisy_reply ();
9876 if (*reply == '\0')
9877 error (_("Target does not support QDisableRandomization."));
9878 if (strcmp (reply, "OK") != 0)
9879 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9880 }
9881
9882 int
9883 remote_target::extended_remote_run (const std::string &args)
9884 {
9885 struct remote_state *rs = get_remote_state ();
9886 int len;
9887 const char *remote_exec_file = get_remote_exec_file ();
9888
9889 /* If the user has disabled vRun support, or we have detected that
9890 support is not available, do not try it. */
9891 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9892 return -1;
9893
9894 strcpy (rs->buf.data (), "vRun;");
9895 len = strlen (rs->buf.data ());
9896
9897 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9898 error (_("Remote file name too long for run packet"));
9899 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
9900 strlen (remote_exec_file));
9901
9902 if (!args.empty ())
9903 {
9904 int i;
9905
9906 gdb_argv argv (args.c_str ());
9907 for (i = 0; argv[i] != NULL; i++)
9908 {
9909 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9910 error (_("Argument list too long for run packet"));
9911 rs->buf[len++] = ';';
9912 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
9913 strlen (argv[i]));
9914 }
9915 }
9916
9917 rs->buf[len++] = '\0';
9918
9919 putpkt (rs->buf);
9920 getpkt (&rs->buf, 0);
9921
9922 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9923 {
9924 case PACKET_OK:
9925 /* We have a wait response. All is well. */
9926 return 0;
9927 case PACKET_UNKNOWN:
9928 return -1;
9929 case PACKET_ERROR:
9930 if (remote_exec_file[0] == '\0')
9931 error (_("Running the default executable on the remote target failed; "
9932 "try \"set remote exec-file\"?"));
9933 else
9934 error (_("Running \"%s\" on the remote target failed"),
9935 remote_exec_file);
9936 default:
9937 gdb_assert_not_reached (_("bad switch"));
9938 }
9939 }
9940
9941 /* Helper function to send set/unset environment packets. ACTION is
9942 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
9943 or "QEnvironmentUnsetVariable". VALUE is the variable to be
9944 sent. */
9945
9946 void
9947 remote_target::send_environment_packet (const char *action,
9948 const char *packet,
9949 const char *value)
9950 {
9951 remote_state *rs = get_remote_state ();
9952
9953 /* Convert the environment variable to an hex string, which
9954 is the best format to be transmitted over the wire. */
9955 std::string encoded_value = bin2hex ((const gdb_byte *) value,
9956 strlen (value));
9957
9958 xsnprintf (rs->buf.data (), get_remote_packet_size (),
9959 "%s:%s", packet, encoded_value.c_str ());
9960
9961 putpkt (rs->buf);
9962 getpkt (&rs->buf, 0);
9963 if (strcmp (rs->buf.data (), "OK") != 0)
9964 warning (_("Unable to %s environment variable '%s' on remote."),
9965 action, value);
9966 }
9967
9968 /* Helper function to handle the QEnvironment* packets. */
9969
9970 void
9971 remote_target::extended_remote_environment_support ()
9972 {
9973 remote_state *rs = get_remote_state ();
9974
9975 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9976 {
9977 putpkt ("QEnvironmentReset");
9978 getpkt (&rs->buf, 0);
9979 if (strcmp (rs->buf.data (), "OK") != 0)
9980 warning (_("Unable to reset environment on remote."));
9981 }
9982
9983 gdb_environ *e = &current_inferior ()->environment;
9984
9985 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9986 for (const std::string &el : e->user_set_env ())
9987 send_environment_packet ("set", "QEnvironmentHexEncoded",
9988 el.c_str ());
9989
9990 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9991 for (const std::string &el : e->user_unset_env ())
9992 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
9993 }
9994
9995 /* Helper function to set the current working directory for the
9996 inferior in the remote target. */
9997
9998 void
9999 remote_target::extended_remote_set_inferior_cwd ()
10000 {
10001 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10002 {
10003 const char *inferior_cwd = get_inferior_cwd ();
10004 remote_state *rs = get_remote_state ();
10005
10006 if (inferior_cwd != NULL)
10007 {
10008 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10009 strlen (inferior_cwd));
10010
10011 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10012 "QSetWorkingDir:%s", hexpath.c_str ());
10013 }
10014 else
10015 {
10016 /* An empty inferior_cwd means that the user wants us to
10017 reset the remote server's inferior's cwd. */
10018 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10019 "QSetWorkingDir:");
10020 }
10021
10022 putpkt (rs->buf);
10023 getpkt (&rs->buf, 0);
10024 if (packet_ok (rs->buf,
10025 &remote_protocol_packets[PACKET_QSetWorkingDir])
10026 != PACKET_OK)
10027 error (_("\
10028 Remote replied unexpectedly while setting the inferior's working\n\
10029 directory: %s"),
10030 rs->buf.data ());
10031
10032 }
10033 }
10034
10035 /* In the extended protocol we want to be able to do things like
10036 "run" and have them basically work as expected. So we need
10037 a special create_inferior function. We support changing the
10038 executable file and the command line arguments, but not the
10039 environment. */
10040
10041 void
10042 extended_remote_target::create_inferior (const char *exec_file,
10043 const std::string &args,
10044 char **env, int from_tty)
10045 {
10046 int run_worked;
10047 char *stop_reply;
10048 struct remote_state *rs = get_remote_state ();
10049 const char *remote_exec_file = get_remote_exec_file ();
10050
10051 /* If running asynchronously, register the target file descriptor
10052 with the event loop. */
10053 if (target_can_async_p ())
10054 target_async (1);
10055
10056 /* Disable address space randomization if requested (and supported). */
10057 if (supports_disable_randomization ())
10058 extended_remote_disable_randomization (disable_randomization);
10059
10060 /* If startup-with-shell is on, we inform gdbserver to start the
10061 remote inferior using a shell. */
10062 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10063 {
10064 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10065 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10066 putpkt (rs->buf);
10067 getpkt (&rs->buf, 0);
10068 if (strcmp (rs->buf.data (), "OK") != 0)
10069 error (_("\
10070 Remote replied unexpectedly while setting startup-with-shell: %s"),
10071 rs->buf.data ());
10072 }
10073
10074 extended_remote_environment_support ();
10075
10076 extended_remote_set_inferior_cwd ();
10077
10078 /* Now restart the remote server. */
10079 run_worked = extended_remote_run (args) != -1;
10080 if (!run_worked)
10081 {
10082 /* vRun was not supported. Fail if we need it to do what the
10083 user requested. */
10084 if (remote_exec_file[0])
10085 error (_("Remote target does not support \"set remote exec-file\""));
10086 if (!args.empty ())
10087 error (_("Remote target does not support \"set args\" or run ARGS"));
10088
10089 /* Fall back to "R". */
10090 extended_remote_restart ();
10091 }
10092
10093 /* vRun's success return is a stop reply. */
10094 stop_reply = run_worked ? rs->buf.data () : NULL;
10095 add_current_inferior_and_thread (stop_reply);
10096
10097 /* Get updated offsets, if the stub uses qOffsets. */
10098 get_offsets ();
10099 }
10100 \f
10101
10102 /* Given a location's target info BP_TGT and the packet buffer BUF, output
10103 the list of conditions (in agent expression bytecode format), if any, the
10104 target needs to evaluate. The output is placed into the packet buffer
10105 started from BUF and ended at BUF_END. */
10106
10107 static int
10108 remote_add_target_side_condition (struct gdbarch *gdbarch,
10109 struct bp_target_info *bp_tgt, char *buf,
10110 char *buf_end)
10111 {
10112 if (bp_tgt->conditions.empty ())
10113 return 0;
10114
10115 buf += strlen (buf);
10116 xsnprintf (buf, buf_end - buf, "%s", ";");
10117 buf++;
10118
10119 /* Send conditions to the target. */
10120 for (agent_expr *aexpr : bp_tgt->conditions)
10121 {
10122 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
10123 buf += strlen (buf);
10124 for (int i = 0; i < aexpr->len; ++i)
10125 buf = pack_hex_byte (buf, aexpr->buf[i]);
10126 *buf = '\0';
10127 }
10128 return 0;
10129 }
10130
10131 static void
10132 remote_add_target_side_commands (struct gdbarch *gdbarch,
10133 struct bp_target_info *bp_tgt, char *buf)
10134 {
10135 if (bp_tgt->tcommands.empty ())
10136 return;
10137
10138 buf += strlen (buf);
10139
10140 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10141 buf += strlen (buf);
10142
10143 /* Concatenate all the agent expressions that are commands into the
10144 cmds parameter. */
10145 for (agent_expr *aexpr : bp_tgt->tcommands)
10146 {
10147 sprintf (buf, "X%x,", aexpr->len);
10148 buf += strlen (buf);
10149 for (int i = 0; i < aexpr->len; ++i)
10150 buf = pack_hex_byte (buf, aexpr->buf[i]);
10151 *buf = '\0';
10152 }
10153 }
10154
10155 /* Insert a breakpoint. On targets that have software breakpoint
10156 support, we ask the remote target to do the work; on targets
10157 which don't, we insert a traditional memory breakpoint. */
10158
10159 int
10160 remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10161 struct bp_target_info *bp_tgt)
10162 {
10163 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10164 If it succeeds, then set the support to PACKET_ENABLE. If it
10165 fails, and the user has explicitly requested the Z support then
10166 report an error, otherwise, mark it disabled and go on. */
10167
10168 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10169 {
10170 CORE_ADDR addr = bp_tgt->reqstd_address;
10171 struct remote_state *rs;
10172 char *p, *endbuf;
10173
10174 /* Make sure the remote is pointing at the right process, if
10175 necessary. */
10176 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10177 set_general_process ();
10178
10179 rs = get_remote_state ();
10180 p = rs->buf.data ();
10181 endbuf = p + get_remote_packet_size ();
10182
10183 *(p++) = 'Z';
10184 *(p++) = '0';
10185 *(p++) = ',';
10186 addr = (ULONGEST) remote_address_masked (addr);
10187 p += hexnumstr (p, addr);
10188 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10189
10190 if (supports_evaluation_of_breakpoint_conditions ())
10191 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10192
10193 if (can_run_breakpoint_commands ())
10194 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10195
10196 putpkt (rs->buf);
10197 getpkt (&rs->buf, 0);
10198
10199 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
10200 {
10201 case PACKET_ERROR:
10202 return -1;
10203 case PACKET_OK:
10204 return 0;
10205 case PACKET_UNKNOWN:
10206 break;
10207 }
10208 }
10209
10210 /* If this breakpoint has target-side commands but this stub doesn't
10211 support Z0 packets, throw error. */
10212 if (!bp_tgt->tcommands.empty ())
10213 throw_error (NOT_SUPPORTED_ERROR, _("\
10214 Target doesn't support breakpoints that have target side commands."));
10215
10216 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
10217 }
10218
10219 int
10220 remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10221 struct bp_target_info *bp_tgt,
10222 enum remove_bp_reason reason)
10223 {
10224 CORE_ADDR addr = bp_tgt->placed_address;
10225 struct remote_state *rs = get_remote_state ();
10226
10227 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10228 {
10229 char *p = rs->buf.data ();
10230 char *endbuf = p + get_remote_packet_size ();
10231
10232 /* Make sure the remote is pointing at the right process, if
10233 necessary. */
10234 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10235 set_general_process ();
10236
10237 *(p++) = 'z';
10238 *(p++) = '0';
10239 *(p++) = ',';
10240
10241 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10242 p += hexnumstr (p, addr);
10243 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10244
10245 putpkt (rs->buf);
10246 getpkt (&rs->buf, 0);
10247
10248 return (rs->buf[0] == 'E');
10249 }
10250
10251 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
10252 }
10253
10254 static enum Z_packet_type
10255 watchpoint_to_Z_packet (int type)
10256 {
10257 switch (type)
10258 {
10259 case hw_write:
10260 return Z_PACKET_WRITE_WP;
10261 break;
10262 case hw_read:
10263 return Z_PACKET_READ_WP;
10264 break;
10265 case hw_access:
10266 return Z_PACKET_ACCESS_WP;
10267 break;
10268 default:
10269 internal_error (__FILE__, __LINE__,
10270 _("hw_bp_to_z: bad watchpoint type %d"), type);
10271 }
10272 }
10273
10274 int
10275 remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10276 enum target_hw_bp_type type, struct expression *cond)
10277 {
10278 struct remote_state *rs = get_remote_state ();
10279 char *endbuf = rs->buf.data () + get_remote_packet_size ();
10280 char *p;
10281 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10282
10283 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10284 return 1;
10285
10286 /* Make sure the remote is pointing at the right process, if
10287 necessary. */
10288 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10289 set_general_process ();
10290
10291 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10292 p = strchr (rs->buf.data (), '\0');
10293 addr = remote_address_masked (addr);
10294 p += hexnumstr (p, (ULONGEST) addr);
10295 xsnprintf (p, endbuf - p, ",%x", len);
10296
10297 putpkt (rs->buf);
10298 getpkt (&rs->buf, 0);
10299
10300 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10301 {
10302 case PACKET_ERROR:
10303 return -1;
10304 case PACKET_UNKNOWN:
10305 return 1;
10306 case PACKET_OK:
10307 return 0;
10308 }
10309 internal_error (__FILE__, __LINE__,
10310 _("remote_insert_watchpoint: reached end of function"));
10311 }
10312
10313 bool
10314 remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10315 CORE_ADDR start, int length)
10316 {
10317 CORE_ADDR diff = remote_address_masked (addr - start);
10318
10319 return diff < length;
10320 }
10321
10322
10323 int
10324 remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10325 enum target_hw_bp_type type, struct expression *cond)
10326 {
10327 struct remote_state *rs = get_remote_state ();
10328 char *endbuf = rs->buf.data () + get_remote_packet_size ();
10329 char *p;
10330 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10331
10332 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10333 return -1;
10334
10335 /* Make sure the remote is pointing at the right process, if
10336 necessary. */
10337 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10338 set_general_process ();
10339
10340 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10341 p = strchr (rs->buf.data (), '\0');
10342 addr = remote_address_masked (addr);
10343 p += hexnumstr (p, (ULONGEST) addr);
10344 xsnprintf (p, endbuf - p, ",%x", len);
10345 putpkt (rs->buf);
10346 getpkt (&rs->buf, 0);
10347
10348 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10349 {
10350 case PACKET_ERROR:
10351 case PACKET_UNKNOWN:
10352 return -1;
10353 case PACKET_OK:
10354 return 0;
10355 }
10356 internal_error (__FILE__, __LINE__,
10357 _("remote_remove_watchpoint: reached end of function"));
10358 }
10359
10360
10361 static int remote_hw_watchpoint_limit = -1;
10362 static int remote_hw_watchpoint_length_limit = -1;
10363 static int remote_hw_breakpoint_limit = -1;
10364
10365 int
10366 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
10367 {
10368 if (remote_hw_watchpoint_length_limit == 0)
10369 return 0;
10370 else if (remote_hw_watchpoint_length_limit < 0)
10371 return 1;
10372 else if (len <= remote_hw_watchpoint_length_limit)
10373 return 1;
10374 else
10375 return 0;
10376 }
10377
10378 int
10379 remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
10380 {
10381 if (type == bp_hardware_breakpoint)
10382 {
10383 if (remote_hw_breakpoint_limit == 0)
10384 return 0;
10385 else if (remote_hw_breakpoint_limit < 0)
10386 return 1;
10387 else if (cnt <= remote_hw_breakpoint_limit)
10388 return 1;
10389 }
10390 else
10391 {
10392 if (remote_hw_watchpoint_limit == 0)
10393 return 0;
10394 else if (remote_hw_watchpoint_limit < 0)
10395 return 1;
10396 else if (ot)
10397 return -1;
10398 else if (cnt <= remote_hw_watchpoint_limit)
10399 return 1;
10400 }
10401 return -1;
10402 }
10403
10404 /* The to_stopped_by_sw_breakpoint method of target remote. */
10405
10406 bool
10407 remote_target::stopped_by_sw_breakpoint ()
10408 {
10409 struct thread_info *thread = inferior_thread ();
10410
10411 return (thread->priv != NULL
10412 && (get_remote_thread_info (thread)->stop_reason
10413 == TARGET_STOPPED_BY_SW_BREAKPOINT));
10414 }
10415
10416 /* The to_supports_stopped_by_sw_breakpoint method of target
10417 remote. */
10418
10419 bool
10420 remote_target::supports_stopped_by_sw_breakpoint ()
10421 {
10422 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10423 }
10424
10425 /* The to_stopped_by_hw_breakpoint method of target remote. */
10426
10427 bool
10428 remote_target::stopped_by_hw_breakpoint ()
10429 {
10430 struct thread_info *thread = inferior_thread ();
10431
10432 return (thread->priv != NULL
10433 && (get_remote_thread_info (thread)->stop_reason
10434 == TARGET_STOPPED_BY_HW_BREAKPOINT));
10435 }
10436
10437 /* The to_supports_stopped_by_hw_breakpoint method of target
10438 remote. */
10439
10440 bool
10441 remote_target::supports_stopped_by_hw_breakpoint ()
10442 {
10443 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10444 }
10445
10446 bool
10447 remote_target::stopped_by_watchpoint ()
10448 {
10449 struct thread_info *thread = inferior_thread ();
10450
10451 return (thread->priv != NULL
10452 && (get_remote_thread_info (thread)->stop_reason
10453 == TARGET_STOPPED_BY_WATCHPOINT));
10454 }
10455
10456 bool
10457 remote_target::stopped_data_address (CORE_ADDR *addr_p)
10458 {
10459 struct thread_info *thread = inferior_thread ();
10460
10461 if (thread->priv != NULL
10462 && (get_remote_thread_info (thread)->stop_reason
10463 == TARGET_STOPPED_BY_WATCHPOINT))
10464 {
10465 *addr_p = get_remote_thread_info (thread)->watch_data_address;
10466 return true;
10467 }
10468
10469 return false;
10470 }
10471
10472
10473 int
10474 remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10475 struct bp_target_info *bp_tgt)
10476 {
10477 CORE_ADDR addr = bp_tgt->reqstd_address;
10478 struct remote_state *rs;
10479 char *p, *endbuf;
10480 char *message;
10481
10482 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10483 return -1;
10484
10485 /* Make sure the remote is pointing at the right process, if
10486 necessary. */
10487 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10488 set_general_process ();
10489
10490 rs = get_remote_state ();
10491 p = rs->buf.data ();
10492 endbuf = p + get_remote_packet_size ();
10493
10494 *(p++) = 'Z';
10495 *(p++) = '1';
10496 *(p++) = ',';
10497
10498 addr = remote_address_masked (addr);
10499 p += hexnumstr (p, (ULONGEST) addr);
10500 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10501
10502 if (supports_evaluation_of_breakpoint_conditions ())
10503 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10504
10505 if (can_run_breakpoint_commands ())
10506 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10507
10508 putpkt (rs->buf);
10509 getpkt (&rs->buf, 0);
10510
10511 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10512 {
10513 case PACKET_ERROR:
10514 if (rs->buf[1] == '.')
10515 {
10516 message = strchr (&rs->buf[2], '.');
10517 if (message)
10518 error (_("Remote failure reply: %s"), message + 1);
10519 }
10520 return -1;
10521 case PACKET_UNKNOWN:
10522 return -1;
10523 case PACKET_OK:
10524 return 0;
10525 }
10526 internal_error (__FILE__, __LINE__,
10527 _("remote_insert_hw_breakpoint: reached end of function"));
10528 }
10529
10530
10531 int
10532 remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10533 struct bp_target_info *bp_tgt)
10534 {
10535 CORE_ADDR addr;
10536 struct remote_state *rs = get_remote_state ();
10537 char *p = rs->buf.data ();
10538 char *endbuf = p + get_remote_packet_size ();
10539
10540 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10541 return -1;
10542
10543 /* Make sure the remote is pointing at the right process, if
10544 necessary. */
10545 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10546 set_general_process ();
10547
10548 *(p++) = 'z';
10549 *(p++) = '1';
10550 *(p++) = ',';
10551
10552 addr = remote_address_masked (bp_tgt->placed_address);
10553 p += hexnumstr (p, (ULONGEST) addr);
10554 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10555
10556 putpkt (rs->buf);
10557 getpkt (&rs->buf, 0);
10558
10559 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10560 {
10561 case PACKET_ERROR:
10562 case PACKET_UNKNOWN:
10563 return -1;
10564 case PACKET_OK:
10565 return 0;
10566 }
10567 internal_error (__FILE__, __LINE__,
10568 _("remote_remove_hw_breakpoint: reached end of function"));
10569 }
10570
10571 /* Verify memory using the "qCRC:" request. */
10572
10573 int
10574 remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10575 {
10576 struct remote_state *rs = get_remote_state ();
10577 unsigned long host_crc, target_crc;
10578 char *tmp;
10579
10580 /* It doesn't make sense to use qCRC if the remote target is
10581 connected but not running. */
10582 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10583 {
10584 enum packet_result result;
10585
10586 /* Make sure the remote is pointing at the right process. */
10587 set_general_process ();
10588
10589 /* FIXME: assumes lma can fit into long. */
10590 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
10591 (long) lma, (long) size);
10592 putpkt (rs->buf);
10593
10594 /* Be clever; compute the host_crc before waiting for target
10595 reply. */
10596 host_crc = xcrc32 (data, size, 0xffffffff);
10597
10598 getpkt (&rs->buf, 0);
10599
10600 result = packet_ok (rs->buf,
10601 &remote_protocol_packets[PACKET_qCRC]);
10602 if (result == PACKET_ERROR)
10603 return -1;
10604 else if (result == PACKET_OK)
10605 {
10606 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10607 target_crc = target_crc * 16 + fromhex (*tmp);
10608
10609 return (host_crc == target_crc);
10610 }
10611 }
10612
10613 return simple_verify_memory (this, data, lma, size);
10614 }
10615
10616 /* compare-sections command
10617
10618 With no arguments, compares each loadable section in the exec bfd
10619 with the same memory range on the target, and reports mismatches.
10620 Useful for verifying the image on the target against the exec file. */
10621
10622 static void
10623 compare_sections_command (const char *args, int from_tty)
10624 {
10625 asection *s;
10626 const char *sectname;
10627 bfd_size_type size;
10628 bfd_vma lma;
10629 int matched = 0;
10630 int mismatched = 0;
10631 int res;
10632 int read_only = 0;
10633
10634 if (!exec_bfd)
10635 error (_("command cannot be used without an exec file"));
10636
10637 if (args != NULL && strcmp (args, "-r") == 0)
10638 {
10639 read_only = 1;
10640 args = NULL;
10641 }
10642
10643 for (s = exec_bfd->sections; s; s = s->next)
10644 {
10645 if (!(s->flags & SEC_LOAD))
10646 continue; /* Skip non-loadable section. */
10647
10648 if (read_only && (s->flags & SEC_READONLY) == 0)
10649 continue; /* Skip writeable sections */
10650
10651 size = bfd_section_size (s);
10652 if (size == 0)
10653 continue; /* Skip zero-length section. */
10654
10655 sectname = bfd_section_name (s);
10656 if (args && strcmp (args, sectname) != 0)
10657 continue; /* Not the section selected by user. */
10658
10659 matched = 1; /* Do this section. */
10660 lma = s->lma;
10661
10662 gdb::byte_vector sectdata (size);
10663 bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10664
10665 res = target_verify_memory (sectdata.data (), lma, size);
10666
10667 if (res == -1)
10668 error (_("target memory fault, section %s, range %s -- %s"), sectname,
10669 paddress (target_gdbarch (), lma),
10670 paddress (target_gdbarch (), lma + size));
10671
10672 printf_filtered ("Section %s, range %s -- %s: ", sectname,
10673 paddress (target_gdbarch (), lma),
10674 paddress (target_gdbarch (), lma + size));
10675 if (res)
10676 printf_filtered ("matched.\n");
10677 else
10678 {
10679 printf_filtered ("MIS-MATCHED!\n");
10680 mismatched++;
10681 }
10682 }
10683 if (mismatched > 0)
10684 warning (_("One or more sections of the target image does not match\n\
10685 the loaded file\n"));
10686 if (args && !matched)
10687 printf_filtered (_("No loaded section named '%s'.\n"), args);
10688 }
10689
10690 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10691 into remote target. The number of bytes written to the remote
10692 target is returned, or -1 for error. */
10693
10694 target_xfer_status
10695 remote_target::remote_write_qxfer (const char *object_name,
10696 const char *annex, const gdb_byte *writebuf,
10697 ULONGEST offset, LONGEST len,
10698 ULONGEST *xfered_len,
10699 struct packet_config *packet)
10700 {
10701 int i, buf_len;
10702 ULONGEST n;
10703 struct remote_state *rs = get_remote_state ();
10704 int max_size = get_memory_write_packet_size ();
10705
10706 if (packet_config_support (packet) == PACKET_DISABLE)
10707 return TARGET_XFER_E_IO;
10708
10709 /* Insert header. */
10710 i = snprintf (rs->buf.data (), max_size,
10711 "qXfer:%s:write:%s:%s:",
10712 object_name, annex ? annex : "",
10713 phex_nz (offset, sizeof offset));
10714 max_size -= (i + 1);
10715
10716 /* Escape as much data as fits into rs->buf. */
10717 buf_len = remote_escape_output
10718 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
10719
10720 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
10721 || getpkt_sane (&rs->buf, 0) < 0
10722 || packet_ok (rs->buf, packet) != PACKET_OK)
10723 return TARGET_XFER_E_IO;
10724
10725 unpack_varlen_hex (rs->buf.data (), &n);
10726
10727 *xfered_len = n;
10728 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10729 }
10730
10731 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10732 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10733 number of bytes read is returned, or 0 for EOF, or -1 for error.
10734 The number of bytes read may be less than LEN without indicating an
10735 EOF. PACKET is checked and updated to indicate whether the remote
10736 target supports this object. */
10737
10738 target_xfer_status
10739 remote_target::remote_read_qxfer (const char *object_name,
10740 const char *annex,
10741 gdb_byte *readbuf, ULONGEST offset,
10742 LONGEST len,
10743 ULONGEST *xfered_len,
10744 struct packet_config *packet)
10745 {
10746 struct remote_state *rs = get_remote_state ();
10747 LONGEST i, n, packet_len;
10748
10749 if (packet_config_support (packet) == PACKET_DISABLE)
10750 return TARGET_XFER_E_IO;
10751
10752 /* Check whether we've cached an end-of-object packet that matches
10753 this request. */
10754 if (rs->finished_object)
10755 {
10756 if (strcmp (object_name, rs->finished_object) == 0
10757 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10758 && offset == rs->finished_offset)
10759 return TARGET_XFER_EOF;
10760
10761
10762 /* Otherwise, we're now reading something different. Discard
10763 the cache. */
10764 xfree (rs->finished_object);
10765 xfree (rs->finished_annex);
10766 rs->finished_object = NULL;
10767 rs->finished_annex = NULL;
10768 }
10769
10770 /* Request only enough to fit in a single packet. The actual data
10771 may not, since we don't know how much of it will need to be escaped;
10772 the target is free to respond with slightly less data. We subtract
10773 five to account for the response type and the protocol frame. */
10774 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10775 snprintf (rs->buf.data (), get_remote_packet_size () - 4,
10776 "qXfer:%s:read:%s:%s,%s",
10777 object_name, annex ? annex : "",
10778 phex_nz (offset, sizeof offset),
10779 phex_nz (n, sizeof n));
10780 i = putpkt (rs->buf);
10781 if (i < 0)
10782 return TARGET_XFER_E_IO;
10783
10784 rs->buf[0] = '\0';
10785 packet_len = getpkt_sane (&rs->buf, 0);
10786 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10787 return TARGET_XFER_E_IO;
10788
10789 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10790 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
10791
10792 /* 'm' means there is (or at least might be) more data after this
10793 batch. That does not make sense unless there's at least one byte
10794 of data in this reply. */
10795 if (rs->buf[0] == 'm' && packet_len == 1)
10796 error (_("Remote qXfer reply contained no data."));
10797
10798 /* Got some data. */
10799 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
10800 packet_len - 1, readbuf, n);
10801
10802 /* 'l' is an EOF marker, possibly including a final block of data,
10803 or possibly empty. If we have the final block of a non-empty
10804 object, record this fact to bypass a subsequent partial read. */
10805 if (rs->buf[0] == 'l' && offset + i > 0)
10806 {
10807 rs->finished_object = xstrdup (object_name);
10808 rs->finished_annex = xstrdup (annex ? annex : "");
10809 rs->finished_offset = offset + i;
10810 }
10811
10812 if (i == 0)
10813 return TARGET_XFER_EOF;
10814 else
10815 {
10816 *xfered_len = i;
10817 return TARGET_XFER_OK;
10818 }
10819 }
10820
10821 enum target_xfer_status
10822 remote_target::xfer_partial (enum target_object object,
10823 const char *annex, gdb_byte *readbuf,
10824 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10825 ULONGEST *xfered_len)
10826 {
10827 struct remote_state *rs;
10828 int i;
10829 char *p2;
10830 char query_type;
10831 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10832
10833 set_remote_traceframe ();
10834 set_general_thread (inferior_ptid);
10835
10836 rs = get_remote_state ();
10837
10838 /* Handle memory using the standard memory routines. */
10839 if (object == TARGET_OBJECT_MEMORY)
10840 {
10841 /* If the remote target is connected but not running, we should
10842 pass this request down to a lower stratum (e.g. the executable
10843 file). */
10844 if (!target_has_execution)
10845 return TARGET_XFER_EOF;
10846
10847 if (writebuf != NULL)
10848 return remote_write_bytes (offset, writebuf, len, unit_size,
10849 xfered_len);
10850 else
10851 return remote_read_bytes (offset, readbuf, len, unit_size,
10852 xfered_len);
10853 }
10854
10855 /* Handle extra signal info using qxfer packets. */
10856 if (object == TARGET_OBJECT_SIGNAL_INFO)
10857 {
10858 if (readbuf)
10859 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
10860 xfered_len, &remote_protocol_packets
10861 [PACKET_qXfer_siginfo_read]);
10862 else
10863 return remote_write_qxfer ("siginfo", annex,
10864 writebuf, offset, len, xfered_len,
10865 &remote_protocol_packets
10866 [PACKET_qXfer_siginfo_write]);
10867 }
10868
10869 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10870 {
10871 if (readbuf)
10872 return remote_read_qxfer ("statictrace", annex,
10873 readbuf, offset, len, xfered_len,
10874 &remote_protocol_packets
10875 [PACKET_qXfer_statictrace_read]);
10876 else
10877 return TARGET_XFER_E_IO;
10878 }
10879
10880 /* Only handle flash writes. */
10881 if (writebuf != NULL)
10882 {
10883 switch (object)
10884 {
10885 case TARGET_OBJECT_FLASH:
10886 return remote_flash_write (offset, len, xfered_len,
10887 writebuf);
10888
10889 default:
10890 return TARGET_XFER_E_IO;
10891 }
10892 }
10893
10894 /* Map pre-existing objects onto letters. DO NOT do this for new
10895 objects!!! Instead specify new query packets. */
10896 switch (object)
10897 {
10898 case TARGET_OBJECT_AVR:
10899 query_type = 'R';
10900 break;
10901
10902 case TARGET_OBJECT_AUXV:
10903 gdb_assert (annex == NULL);
10904 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
10905 xfered_len,
10906 &remote_protocol_packets[PACKET_qXfer_auxv]);
10907
10908 case TARGET_OBJECT_AVAILABLE_FEATURES:
10909 return remote_read_qxfer
10910 ("features", annex, readbuf, offset, len, xfered_len,
10911 &remote_protocol_packets[PACKET_qXfer_features]);
10912
10913 case TARGET_OBJECT_LIBRARIES:
10914 return remote_read_qxfer
10915 ("libraries", annex, readbuf, offset, len, xfered_len,
10916 &remote_protocol_packets[PACKET_qXfer_libraries]);
10917
10918 case TARGET_OBJECT_LIBRARIES_SVR4:
10919 return remote_read_qxfer
10920 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
10921 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10922
10923 case TARGET_OBJECT_MEMORY_MAP:
10924 gdb_assert (annex == NULL);
10925 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
10926 xfered_len,
10927 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10928
10929 case TARGET_OBJECT_OSDATA:
10930 /* Should only get here if we're connected. */
10931 gdb_assert (rs->remote_desc);
10932 return remote_read_qxfer
10933 ("osdata", annex, readbuf, offset, len, xfered_len,
10934 &remote_protocol_packets[PACKET_qXfer_osdata]);
10935
10936 case TARGET_OBJECT_THREADS:
10937 gdb_assert (annex == NULL);
10938 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
10939 xfered_len,
10940 &remote_protocol_packets[PACKET_qXfer_threads]);
10941
10942 case TARGET_OBJECT_TRACEFRAME_INFO:
10943 gdb_assert (annex == NULL);
10944 return remote_read_qxfer
10945 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
10946 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10947
10948 case TARGET_OBJECT_FDPIC:
10949 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
10950 xfered_len,
10951 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10952
10953 case TARGET_OBJECT_OPENVMS_UIB:
10954 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
10955 xfered_len,
10956 &remote_protocol_packets[PACKET_qXfer_uib]);
10957
10958 case TARGET_OBJECT_BTRACE:
10959 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
10960 xfered_len,
10961 &remote_protocol_packets[PACKET_qXfer_btrace]);
10962
10963 case TARGET_OBJECT_BTRACE_CONF:
10964 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
10965 len, xfered_len,
10966 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10967
10968 case TARGET_OBJECT_EXEC_FILE:
10969 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
10970 len, xfered_len,
10971 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10972
10973 default:
10974 return TARGET_XFER_E_IO;
10975 }
10976
10977 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
10978 large enough let the caller deal with it. */
10979 if (len < get_remote_packet_size ())
10980 return TARGET_XFER_E_IO;
10981 len = get_remote_packet_size ();
10982
10983 /* Except for querying the minimum buffer size, target must be open. */
10984 if (!rs->remote_desc)
10985 error (_("remote query is only available after target open"));
10986
10987 gdb_assert (annex != NULL);
10988 gdb_assert (readbuf != NULL);
10989
10990 p2 = rs->buf.data ();
10991 *p2++ = 'q';
10992 *p2++ = query_type;
10993
10994 /* We used one buffer char for the remote protocol q command and
10995 another for the query type. As the remote protocol encapsulation
10996 uses 4 chars plus one extra in case we are debugging
10997 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10998 string. */
10999 i = 0;
11000 while (annex[i] && (i < (get_remote_packet_size () - 8)))
11001 {
11002 /* Bad caller may have sent forbidden characters. */
11003 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11004 *p2++ = annex[i];
11005 i++;
11006 }
11007 *p2 = '\0';
11008 gdb_assert (annex[i] == '\0');
11009
11010 i = putpkt (rs->buf);
11011 if (i < 0)
11012 return TARGET_XFER_E_IO;
11013
11014 getpkt (&rs->buf, 0);
11015 strcpy ((char *) readbuf, rs->buf.data ());
11016
11017 *xfered_len = strlen ((char *) readbuf);
11018 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11019 }
11020
11021 /* Implementation of to_get_memory_xfer_limit. */
11022
11023 ULONGEST
11024 remote_target::get_memory_xfer_limit ()
11025 {
11026 return get_memory_write_packet_size ();
11027 }
11028
11029 int
11030 remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11031 const gdb_byte *pattern, ULONGEST pattern_len,
11032 CORE_ADDR *found_addrp)
11033 {
11034 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
11035 struct remote_state *rs = get_remote_state ();
11036 int max_size = get_memory_write_packet_size ();
11037 struct packet_config *packet =
11038 &remote_protocol_packets[PACKET_qSearch_memory];
11039 /* Number of packet bytes used to encode the pattern;
11040 this could be more than PATTERN_LEN due to escape characters. */
11041 int escaped_pattern_len;
11042 /* Amount of pattern that was encodable in the packet. */
11043 int used_pattern_len;
11044 int i;
11045 int found;
11046 ULONGEST found_addr;
11047
11048 /* Don't go to the target if we don't have to. This is done before
11049 checking packet_config_support to avoid the possibility that a
11050 success for this edge case means the facility works in
11051 general. */
11052 if (pattern_len > search_space_len)
11053 return 0;
11054 if (pattern_len == 0)
11055 {
11056 *found_addrp = start_addr;
11057 return 1;
11058 }
11059
11060 /* If we already know the packet isn't supported, fall back to the simple
11061 way of searching memory. */
11062
11063 if (packet_config_support (packet) == PACKET_DISABLE)
11064 {
11065 /* Target doesn't provided special support, fall back and use the
11066 standard support (copy memory and do the search here). */
11067 return simple_search_memory (this, start_addr, search_space_len,
11068 pattern, pattern_len, found_addrp);
11069 }
11070
11071 /* Make sure the remote is pointing at the right process. */
11072 set_general_process ();
11073
11074 /* Insert header. */
11075 i = snprintf (rs->buf.data (), max_size,
11076 "qSearch:memory:%s;%s;",
11077 phex_nz (start_addr, addr_size),
11078 phex_nz (search_space_len, sizeof (search_space_len)));
11079 max_size -= (i + 1);
11080
11081 /* Escape as much data as fits into rs->buf. */
11082 escaped_pattern_len =
11083 remote_escape_output (pattern, pattern_len, 1,
11084 (gdb_byte *) rs->buf.data () + i,
11085 &used_pattern_len, max_size);
11086
11087 /* Bail if the pattern is too large. */
11088 if (used_pattern_len != pattern_len)
11089 error (_("Pattern is too large to transmit to remote target."));
11090
11091 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11092 || getpkt_sane (&rs->buf, 0) < 0
11093 || packet_ok (rs->buf, packet) != PACKET_OK)
11094 {
11095 /* The request may not have worked because the command is not
11096 supported. If so, fall back to the simple way. */
11097 if (packet_config_support (packet) == PACKET_DISABLE)
11098 {
11099 return simple_search_memory (this, start_addr, search_space_len,
11100 pattern, pattern_len, found_addrp);
11101 }
11102 return -1;
11103 }
11104
11105 if (rs->buf[0] == '0')
11106 found = 0;
11107 else if (rs->buf[0] == '1')
11108 {
11109 found = 1;
11110 if (rs->buf[1] != ',')
11111 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11112 unpack_varlen_hex (&rs->buf[2], &found_addr);
11113 *found_addrp = found_addr;
11114 }
11115 else
11116 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11117
11118 return found;
11119 }
11120
11121 void
11122 remote_target::rcmd (const char *command, struct ui_file *outbuf)
11123 {
11124 struct remote_state *rs = get_remote_state ();
11125 char *p = rs->buf.data ();
11126
11127 if (!rs->remote_desc)
11128 error (_("remote rcmd is only available after target open"));
11129
11130 /* Send a NULL command across as an empty command. */
11131 if (command == NULL)
11132 command = "";
11133
11134 /* The query prefix. */
11135 strcpy (rs->buf.data (), "qRcmd,");
11136 p = strchr (rs->buf.data (), '\0');
11137
11138 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
11139 > get_remote_packet_size ())
11140 error (_("\"monitor\" command ``%s'' is too long."), command);
11141
11142 /* Encode the actual command. */
11143 bin2hex ((const gdb_byte *) command, p, strlen (command));
11144
11145 if (putpkt (rs->buf) < 0)
11146 error (_("Communication problem with target."));
11147
11148 /* get/display the response */
11149 while (1)
11150 {
11151 char *buf;
11152
11153 /* XXX - see also remote_get_noisy_reply(). */
11154 QUIT; /* Allow user to bail out with ^C. */
11155 rs->buf[0] = '\0';
11156 if (getpkt_sane (&rs->buf, 0) == -1)
11157 {
11158 /* Timeout. Continue to (try to) read responses.
11159 This is better than stopping with an error, assuming the stub
11160 is still executing the (long) monitor command.
11161 If needed, the user can interrupt gdb using C-c, obtaining
11162 an effect similar to stop on timeout. */
11163 continue;
11164 }
11165 buf = rs->buf.data ();
11166 if (buf[0] == '\0')
11167 error (_("Target does not support this command."));
11168 if (buf[0] == 'O' && buf[1] != 'K')
11169 {
11170 remote_console_output (buf + 1); /* 'O' message from stub. */
11171 continue;
11172 }
11173 if (strcmp (buf, "OK") == 0)
11174 break;
11175 if (strlen (buf) == 3 && buf[0] == 'E'
11176 && isdigit (buf[1]) && isdigit (buf[2]))
11177 {
11178 error (_("Protocol error with Rcmd"));
11179 }
11180 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11181 {
11182 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
11183
11184 fputc_unfiltered (c, outbuf);
11185 }
11186 break;
11187 }
11188 }
11189
11190 std::vector<mem_region>
11191 remote_target::memory_map ()
11192 {
11193 std::vector<mem_region> result;
11194 gdb::optional<gdb::char_vector> text
11195 = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
11196
11197 if (text)
11198 result = parse_memory_map (text->data ());
11199
11200 return result;
11201 }
11202
11203 static void
11204 packet_command (const char *args, int from_tty)
11205 {
11206 remote_target *remote = get_current_remote_target ();
11207
11208 if (remote == nullptr)
11209 error (_("command can only be used with remote target"));
11210
11211 remote->packet_command (args, from_tty);
11212 }
11213
11214 void
11215 remote_target::packet_command (const char *args, int from_tty)
11216 {
11217 if (!args)
11218 error (_("remote-packet command requires packet text as argument"));
11219
11220 puts_filtered ("sending: ");
11221 print_packet (args);
11222 puts_filtered ("\n");
11223 putpkt (args);
11224
11225 remote_state *rs = get_remote_state ();
11226
11227 getpkt (&rs->buf, 0);
11228 puts_filtered ("received: ");
11229 print_packet (rs->buf.data ());
11230 puts_filtered ("\n");
11231 }
11232
11233 #if 0
11234 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
11235
11236 static void display_thread_info (struct gdb_ext_thread_info *info);
11237
11238 static void threadset_test_cmd (char *cmd, int tty);
11239
11240 static void threadalive_test (char *cmd, int tty);
11241
11242 static void threadlist_test_cmd (char *cmd, int tty);
11243
11244 int get_and_display_threadinfo (threadref *ref);
11245
11246 static void threadinfo_test_cmd (char *cmd, int tty);
11247
11248 static int thread_display_step (threadref *ref, void *context);
11249
11250 static void threadlist_update_test_cmd (char *cmd, int tty);
11251
11252 static void init_remote_threadtests (void);
11253
11254 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
11255
11256 static void
11257 threadset_test_cmd (const char *cmd, int tty)
11258 {
11259 int sample_thread = SAMPLE_THREAD;
11260
11261 printf_filtered (_("Remote threadset test\n"));
11262 set_general_thread (sample_thread);
11263 }
11264
11265
11266 static void
11267 threadalive_test (const char *cmd, int tty)
11268 {
11269 int sample_thread = SAMPLE_THREAD;
11270 int pid = inferior_ptid.pid ();
11271 ptid_t ptid = ptid_t (pid, sample_thread, 0);
11272
11273 if (remote_thread_alive (ptid))
11274 printf_filtered ("PASS: Thread alive test\n");
11275 else
11276 printf_filtered ("FAIL: Thread alive test\n");
11277 }
11278
11279 void output_threadid (char *title, threadref *ref);
11280
11281 void
11282 output_threadid (char *title, threadref *ref)
11283 {
11284 char hexid[20];
11285
11286 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
11287 hexid[16] = 0;
11288 printf_filtered ("%s %s\n", title, (&hexid[0]));
11289 }
11290
11291 static void
11292 threadlist_test_cmd (const char *cmd, int tty)
11293 {
11294 int startflag = 1;
11295 threadref nextthread;
11296 int done, result_count;
11297 threadref threadlist[3];
11298
11299 printf_filtered ("Remote Threadlist test\n");
11300 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11301 &result_count, &threadlist[0]))
11302 printf_filtered ("FAIL: threadlist test\n");
11303 else
11304 {
11305 threadref *scan = threadlist;
11306 threadref *limit = scan + result_count;
11307
11308 while (scan < limit)
11309 output_threadid (" thread ", scan++);
11310 }
11311 }
11312
11313 void
11314 display_thread_info (struct gdb_ext_thread_info *info)
11315 {
11316 output_threadid ("Threadid: ", &info->threadid);
11317 printf_filtered ("Name: %s\n ", info->shortname);
11318 printf_filtered ("State: %s\n", info->display);
11319 printf_filtered ("other: %s\n\n", info->more_display);
11320 }
11321
11322 int
11323 get_and_display_threadinfo (threadref *ref)
11324 {
11325 int result;
11326 int set;
11327 struct gdb_ext_thread_info threadinfo;
11328
11329 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11330 | TAG_MOREDISPLAY | TAG_DISPLAY;
11331 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11332 display_thread_info (&threadinfo);
11333 return result;
11334 }
11335
11336 static void
11337 threadinfo_test_cmd (const char *cmd, int tty)
11338 {
11339 int athread = SAMPLE_THREAD;
11340 threadref thread;
11341 int set;
11342
11343 int_to_threadref (&thread, athread);
11344 printf_filtered ("Remote Threadinfo test\n");
11345 if (!get_and_display_threadinfo (&thread))
11346 printf_filtered ("FAIL cannot get thread info\n");
11347 }
11348
11349 static int
11350 thread_display_step (threadref *ref, void *context)
11351 {
11352 /* output_threadid(" threadstep ",ref); *//* simple test */
11353 return get_and_display_threadinfo (ref);
11354 }
11355
11356 static void
11357 threadlist_update_test_cmd (const char *cmd, int tty)
11358 {
11359 printf_filtered ("Remote Threadlist update test\n");
11360 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11361 }
11362
11363 static void
11364 init_remote_threadtests (void)
11365 {
11366 add_com ("tlist", class_obscure, threadlist_test_cmd,
11367 _("Fetch and print the remote list of "
11368 "thread identifiers, one pkt only."));
11369 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11370 _("Fetch and display info about one thread."));
11371 add_com ("tset", class_obscure, threadset_test_cmd,
11372 _("Test setting to a different thread."));
11373 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11374 _("Iterate through updating all remote thread info."));
11375 add_com ("talive", class_obscure, threadalive_test,
11376 _("Remote thread alive test."));
11377 }
11378
11379 #endif /* 0 */
11380
11381 /* Convert a thread ID to a string. */
11382
11383 std::string
11384 remote_target::pid_to_str (ptid_t ptid)
11385 {
11386 struct remote_state *rs = get_remote_state ();
11387
11388 if (ptid == null_ptid)
11389 return normal_pid_to_str (ptid);
11390 else if (ptid.is_pid ())
11391 {
11392 /* Printing an inferior target id. */
11393
11394 /* When multi-process extensions are off, there's no way in the
11395 remote protocol to know the remote process id, if there's any
11396 at all. There's one exception --- when we're connected with
11397 target extended-remote, and we manually attached to a process
11398 with "attach PID". We don't record anywhere a flag that
11399 allows us to distinguish that case from the case of
11400 connecting with extended-remote and the stub already being
11401 attached to a process, and reporting yes to qAttached, hence
11402 no smart special casing here. */
11403 if (!remote_multi_process_p (rs))
11404 return "Remote target";
11405
11406 return normal_pid_to_str (ptid);
11407 }
11408 else
11409 {
11410 if (magic_null_ptid == ptid)
11411 return "Thread <main>";
11412 else if (remote_multi_process_p (rs))
11413 if (ptid.lwp () == 0)
11414 return normal_pid_to_str (ptid);
11415 else
11416 return string_printf ("Thread %d.%ld",
11417 ptid.pid (), ptid.lwp ());
11418 else
11419 return string_printf ("Thread %ld", ptid.lwp ());
11420 }
11421 }
11422
11423 /* Get the address of the thread local variable in OBJFILE which is
11424 stored at OFFSET within the thread local storage for thread PTID. */
11425
11426 CORE_ADDR
11427 remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11428 CORE_ADDR offset)
11429 {
11430 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11431 {
11432 struct remote_state *rs = get_remote_state ();
11433 char *p = rs->buf.data ();
11434 char *endp = p + get_remote_packet_size ();
11435 enum packet_result result;
11436
11437 strcpy (p, "qGetTLSAddr:");
11438 p += strlen (p);
11439 p = write_ptid (p, endp, ptid);
11440 *p++ = ',';
11441 p += hexnumstr (p, offset);
11442 *p++ = ',';
11443 p += hexnumstr (p, lm);
11444 *p++ = '\0';
11445
11446 putpkt (rs->buf);
11447 getpkt (&rs->buf, 0);
11448 result = packet_ok (rs->buf,
11449 &remote_protocol_packets[PACKET_qGetTLSAddr]);
11450 if (result == PACKET_OK)
11451 {
11452 ULONGEST addr;
11453
11454 unpack_varlen_hex (rs->buf.data (), &addr);
11455 return addr;
11456 }
11457 else if (result == PACKET_UNKNOWN)
11458 throw_error (TLS_GENERIC_ERROR,
11459 _("Remote target doesn't support qGetTLSAddr packet"));
11460 else
11461 throw_error (TLS_GENERIC_ERROR,
11462 _("Remote target failed to process qGetTLSAddr request"));
11463 }
11464 else
11465 throw_error (TLS_GENERIC_ERROR,
11466 _("TLS not supported or disabled on this target"));
11467 /* Not reached. */
11468 return 0;
11469 }
11470
11471 /* Provide thread local base, i.e. Thread Information Block address.
11472 Returns 1 if ptid is found and thread_local_base is non zero. */
11473
11474 bool
11475 remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
11476 {
11477 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11478 {
11479 struct remote_state *rs = get_remote_state ();
11480 char *p = rs->buf.data ();
11481 char *endp = p + get_remote_packet_size ();
11482 enum packet_result result;
11483
11484 strcpy (p, "qGetTIBAddr:");
11485 p += strlen (p);
11486 p = write_ptid (p, endp, ptid);
11487 *p++ = '\0';
11488
11489 putpkt (rs->buf);
11490 getpkt (&rs->buf, 0);
11491 result = packet_ok (rs->buf,
11492 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11493 if (result == PACKET_OK)
11494 {
11495 ULONGEST val;
11496 unpack_varlen_hex (rs->buf.data (), &val);
11497 if (addr)
11498 *addr = (CORE_ADDR) val;
11499 return true;
11500 }
11501 else if (result == PACKET_UNKNOWN)
11502 error (_("Remote target doesn't support qGetTIBAddr packet"));
11503 else
11504 error (_("Remote target failed to process qGetTIBAddr request"));
11505 }
11506 else
11507 error (_("qGetTIBAddr not supported or disabled on this target"));
11508 /* Not reached. */
11509 return false;
11510 }
11511
11512 /* Support for inferring a target description based on the current
11513 architecture and the size of a 'g' packet. While the 'g' packet
11514 can have any size (since optional registers can be left off the
11515 end), some sizes are easily recognizable given knowledge of the
11516 approximate architecture. */
11517
11518 struct remote_g_packet_guess
11519 {
11520 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11521 : bytes (bytes_),
11522 tdesc (tdesc_)
11523 {
11524 }
11525
11526 int bytes;
11527 const struct target_desc *tdesc;
11528 };
11529
11530 struct remote_g_packet_data : public allocate_on_obstack
11531 {
11532 std::vector<remote_g_packet_guess> guesses;
11533 };
11534
11535 static struct gdbarch_data *remote_g_packet_data_handle;
11536
11537 static void *
11538 remote_g_packet_data_init (struct obstack *obstack)
11539 {
11540 return new (obstack) remote_g_packet_data;
11541 }
11542
11543 void
11544 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11545 const struct target_desc *tdesc)
11546 {
11547 struct remote_g_packet_data *data
11548 = ((struct remote_g_packet_data *)
11549 gdbarch_data (gdbarch, remote_g_packet_data_handle));
11550
11551 gdb_assert (tdesc != NULL);
11552
11553 for (const remote_g_packet_guess &guess : data->guesses)
11554 if (guess.bytes == bytes)
11555 internal_error (__FILE__, __LINE__,
11556 _("Duplicate g packet description added for size %d"),
11557 bytes);
11558
11559 data->guesses.emplace_back (bytes, tdesc);
11560 }
11561
11562 /* Return true if remote_read_description would do anything on this target
11563 and architecture, false otherwise. */
11564
11565 static bool
11566 remote_read_description_p (struct target_ops *target)
11567 {
11568 struct remote_g_packet_data *data
11569 = ((struct remote_g_packet_data *)
11570 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11571
11572 return !data->guesses.empty ();
11573 }
11574
11575 const struct target_desc *
11576 remote_target::read_description ()
11577 {
11578 struct remote_g_packet_data *data
11579 = ((struct remote_g_packet_data *)
11580 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11581
11582 /* Do not try this during initial connection, when we do not know
11583 whether there is a running but stopped thread. */
11584 if (!target_has_execution || inferior_ptid == null_ptid)
11585 return beneath ()->read_description ();
11586
11587 if (!data->guesses.empty ())
11588 {
11589 int bytes = send_g_packet ();
11590
11591 for (const remote_g_packet_guess &guess : data->guesses)
11592 if (guess.bytes == bytes)
11593 return guess.tdesc;
11594
11595 /* We discard the g packet. A minor optimization would be to
11596 hold on to it, and fill the register cache once we have selected
11597 an architecture, but it's too tricky to do safely. */
11598 }
11599
11600 return beneath ()->read_description ();
11601 }
11602
11603 /* Remote file transfer support. This is host-initiated I/O, not
11604 target-initiated; for target-initiated, see remote-fileio.c. */
11605
11606 /* If *LEFT is at least the length of STRING, copy STRING to
11607 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11608 decrease *LEFT. Otherwise raise an error. */
11609
11610 static void
11611 remote_buffer_add_string (char **buffer, int *left, const char *string)
11612 {
11613 int len = strlen (string);
11614
11615 if (len > *left)
11616 error (_("Packet too long for target."));
11617
11618 memcpy (*buffer, string, len);
11619 *buffer += len;
11620 *left -= len;
11621
11622 /* NUL-terminate the buffer as a convenience, if there is
11623 room. */
11624 if (*left)
11625 **buffer = '\0';
11626 }
11627
11628 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11629 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11630 decrease *LEFT. Otherwise raise an error. */
11631
11632 static void
11633 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11634 int len)
11635 {
11636 if (2 * len > *left)
11637 error (_("Packet too long for target."));
11638
11639 bin2hex (bytes, *buffer, len);
11640 *buffer += 2 * len;
11641 *left -= 2 * len;
11642
11643 /* NUL-terminate the buffer as a convenience, if there is
11644 room. */
11645 if (*left)
11646 **buffer = '\0';
11647 }
11648
11649 /* If *LEFT is large enough, convert VALUE to hex and add it to
11650 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11651 decrease *LEFT. Otherwise raise an error. */
11652
11653 static void
11654 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11655 {
11656 int len = hexnumlen (value);
11657
11658 if (len > *left)
11659 error (_("Packet too long for target."));
11660
11661 hexnumstr (*buffer, value);
11662 *buffer += len;
11663 *left -= len;
11664
11665 /* NUL-terminate the buffer as a convenience, if there is
11666 room. */
11667 if (*left)
11668 **buffer = '\0';
11669 }
11670
11671 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11672 value, *REMOTE_ERRNO to the remote error number or zero if none
11673 was included, and *ATTACHMENT to point to the start of the annex
11674 if any. The length of the packet isn't needed here; there may
11675 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11676
11677 Return 0 if the packet could be parsed, -1 if it could not. If
11678 -1 is returned, the other variables may not be initialized. */
11679
11680 static int
11681 remote_hostio_parse_result (char *buffer, int *retcode,
11682 int *remote_errno, char **attachment)
11683 {
11684 char *p, *p2;
11685
11686 *remote_errno = 0;
11687 *attachment = NULL;
11688
11689 if (buffer[0] != 'F')
11690 return -1;
11691
11692 errno = 0;
11693 *retcode = strtol (&buffer[1], &p, 16);
11694 if (errno != 0 || p == &buffer[1])
11695 return -1;
11696
11697 /* Check for ",errno". */
11698 if (*p == ',')
11699 {
11700 errno = 0;
11701 *remote_errno = strtol (p + 1, &p2, 16);
11702 if (errno != 0 || p + 1 == p2)
11703 return -1;
11704 p = p2;
11705 }
11706
11707 /* Check for ";attachment". If there is no attachment, the
11708 packet should end here. */
11709 if (*p == ';')
11710 {
11711 *attachment = p + 1;
11712 return 0;
11713 }
11714 else if (*p == '\0')
11715 return 0;
11716 else
11717 return -1;
11718 }
11719
11720 /* Send a prepared I/O packet to the target and read its response.
11721 The prepared packet is in the global RS->BUF before this function
11722 is called, and the answer is there when we return.
11723
11724 COMMAND_BYTES is the length of the request to send, which may include
11725 binary data. WHICH_PACKET is the packet configuration to check
11726 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11727 is set to the error number and -1 is returned. Otherwise the value
11728 returned by the function is returned.
11729
11730 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11731 attachment is expected; an error will be reported if there's a
11732 mismatch. If one is found, *ATTACHMENT will be set to point into
11733 the packet buffer and *ATTACHMENT_LEN will be set to the
11734 attachment's length. */
11735
11736 int
11737 remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
11738 int *remote_errno, char **attachment,
11739 int *attachment_len)
11740 {
11741 struct remote_state *rs = get_remote_state ();
11742 int ret, bytes_read;
11743 char *attachment_tmp;
11744
11745 if (packet_support (which_packet) == PACKET_DISABLE)
11746 {
11747 *remote_errno = FILEIO_ENOSYS;
11748 return -1;
11749 }
11750
11751 putpkt_binary (rs->buf.data (), command_bytes);
11752 bytes_read = getpkt_sane (&rs->buf, 0);
11753
11754 /* If it timed out, something is wrong. Don't try to parse the
11755 buffer. */
11756 if (bytes_read < 0)
11757 {
11758 *remote_errno = FILEIO_EINVAL;
11759 return -1;
11760 }
11761
11762 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11763 {
11764 case PACKET_ERROR:
11765 *remote_errno = FILEIO_EINVAL;
11766 return -1;
11767 case PACKET_UNKNOWN:
11768 *remote_errno = FILEIO_ENOSYS;
11769 return -1;
11770 case PACKET_OK:
11771 break;
11772 }
11773
11774 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
11775 &attachment_tmp))
11776 {
11777 *remote_errno = FILEIO_EINVAL;
11778 return -1;
11779 }
11780
11781 /* Make sure we saw an attachment if and only if we expected one. */
11782 if ((attachment_tmp == NULL && attachment != NULL)
11783 || (attachment_tmp != NULL && attachment == NULL))
11784 {
11785 *remote_errno = FILEIO_EINVAL;
11786 return -1;
11787 }
11788
11789 /* If an attachment was found, it must point into the packet buffer;
11790 work out how many bytes there were. */
11791 if (attachment_tmp != NULL)
11792 {
11793 *attachment = attachment_tmp;
11794 *attachment_len = bytes_read - (*attachment - rs->buf.data ());
11795 }
11796
11797 return ret;
11798 }
11799
11800 /* See declaration.h. */
11801
11802 void
11803 readahead_cache::invalidate ()
11804 {
11805 this->fd = -1;
11806 }
11807
11808 /* See declaration.h. */
11809
11810 void
11811 readahead_cache::invalidate_fd (int fd)
11812 {
11813 if (this->fd == fd)
11814 this->fd = -1;
11815 }
11816
11817 /* Set the filesystem remote_hostio functions that take FILENAME
11818 arguments will use. Return 0 on success, or -1 if an error
11819 occurs (and set *REMOTE_ERRNO). */
11820
11821 int
11822 remote_target::remote_hostio_set_filesystem (struct inferior *inf,
11823 int *remote_errno)
11824 {
11825 struct remote_state *rs = get_remote_state ();
11826 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11827 char *p = rs->buf.data ();
11828 int left = get_remote_packet_size () - 1;
11829 char arg[9];
11830 int ret;
11831
11832 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11833 return 0;
11834
11835 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11836 return 0;
11837
11838 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11839
11840 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11841 remote_buffer_add_string (&p, &left, arg);
11842
11843 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
11844 remote_errno, NULL, NULL);
11845
11846 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11847 return 0;
11848
11849 if (ret == 0)
11850 rs->fs_pid = required_pid;
11851
11852 return ret;
11853 }
11854
11855 /* Implementation of to_fileio_open. */
11856
11857 int
11858 remote_target::remote_hostio_open (inferior *inf, const char *filename,
11859 int flags, int mode, int warn_if_slow,
11860 int *remote_errno)
11861 {
11862 struct remote_state *rs = get_remote_state ();
11863 char *p = rs->buf.data ();
11864 int left = get_remote_packet_size () - 1;
11865
11866 if (warn_if_slow)
11867 {
11868 static int warning_issued = 0;
11869
11870 printf_unfiltered (_("Reading %s from remote target...\n"),
11871 filename);
11872
11873 if (!warning_issued)
11874 {
11875 warning (_("File transfers from remote targets can be slow."
11876 " Use \"set sysroot\" to access files locally"
11877 " instead."));
11878 warning_issued = 1;
11879 }
11880 }
11881
11882 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11883 return -1;
11884
11885 remote_buffer_add_string (&p, &left, "vFile:open:");
11886
11887 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11888 strlen (filename));
11889 remote_buffer_add_string (&p, &left, ",");
11890
11891 remote_buffer_add_int (&p, &left, flags);
11892 remote_buffer_add_string (&p, &left, ",");
11893
11894 remote_buffer_add_int (&p, &left, mode);
11895
11896 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
11897 remote_errno, NULL, NULL);
11898 }
11899
11900 int
11901 remote_target::fileio_open (struct inferior *inf, const char *filename,
11902 int flags, int mode, int warn_if_slow,
11903 int *remote_errno)
11904 {
11905 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
11906 remote_errno);
11907 }
11908
11909 /* Implementation of to_fileio_pwrite. */
11910
11911 int
11912 remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
11913 ULONGEST offset, int *remote_errno)
11914 {
11915 struct remote_state *rs = get_remote_state ();
11916 char *p = rs->buf.data ();
11917 int left = get_remote_packet_size ();
11918 int out_len;
11919
11920 rs->readahead_cache.invalidate_fd (fd);
11921
11922 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11923
11924 remote_buffer_add_int (&p, &left, fd);
11925 remote_buffer_add_string (&p, &left, ",");
11926
11927 remote_buffer_add_int (&p, &left, offset);
11928 remote_buffer_add_string (&p, &left, ",");
11929
11930 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11931 (get_remote_packet_size ()
11932 - (p - rs->buf.data ())));
11933
11934 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
11935 remote_errno, NULL, NULL);
11936 }
11937
11938 int
11939 remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
11940 ULONGEST offset, int *remote_errno)
11941 {
11942 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
11943 }
11944
11945 /* Helper for the implementation of to_fileio_pread. Read the file
11946 from the remote side with vFile:pread. */
11947
11948 int
11949 remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
11950 ULONGEST offset, int *remote_errno)
11951 {
11952 struct remote_state *rs = get_remote_state ();
11953 char *p = rs->buf.data ();
11954 char *attachment;
11955 int left = get_remote_packet_size ();
11956 int ret, attachment_len;
11957 int read_len;
11958
11959 remote_buffer_add_string (&p, &left, "vFile:pread:");
11960
11961 remote_buffer_add_int (&p, &left, fd);
11962 remote_buffer_add_string (&p, &left, ",");
11963
11964 remote_buffer_add_int (&p, &left, len);
11965 remote_buffer_add_string (&p, &left, ",");
11966
11967 remote_buffer_add_int (&p, &left, offset);
11968
11969 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
11970 remote_errno, &attachment,
11971 &attachment_len);
11972
11973 if (ret < 0)
11974 return ret;
11975
11976 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11977 read_buf, len);
11978 if (read_len != ret)
11979 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11980
11981 return ret;
11982 }
11983
11984 /* See declaration.h. */
11985
11986 int
11987 readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
11988 ULONGEST offset)
11989 {
11990 if (this->fd == fd
11991 && this->offset <= offset
11992 && offset < this->offset + this->bufsize)
11993 {
11994 ULONGEST max = this->offset + this->bufsize;
11995
11996 if (offset + len > max)
11997 len = max - offset;
11998
11999 memcpy (read_buf, this->buf + offset - this->offset, len);
12000 return len;
12001 }
12002
12003 return 0;
12004 }
12005
12006 /* Implementation of to_fileio_pread. */
12007
12008 int
12009 remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12010 ULONGEST offset, int *remote_errno)
12011 {
12012 int ret;
12013 struct remote_state *rs = get_remote_state ();
12014 readahead_cache *cache = &rs->readahead_cache;
12015
12016 ret = cache->pread (fd, read_buf, len, offset);
12017 if (ret > 0)
12018 {
12019 cache->hit_count++;
12020
12021 if (remote_debug)
12022 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
12023 pulongest (cache->hit_count));
12024 return ret;
12025 }
12026
12027 cache->miss_count++;
12028 if (remote_debug)
12029 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
12030 pulongest (cache->miss_count));
12031
12032 cache->fd = fd;
12033 cache->offset = offset;
12034 cache->bufsize = get_remote_packet_size ();
12035 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
12036
12037 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
12038 cache->offset, remote_errno);
12039 if (ret <= 0)
12040 {
12041 cache->invalidate_fd (fd);
12042 return ret;
12043 }
12044
12045 cache->bufsize = ret;
12046 return cache->pread (fd, read_buf, len, offset);
12047 }
12048
12049 int
12050 remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12051 ULONGEST offset, int *remote_errno)
12052 {
12053 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
12054 }
12055
12056 /* Implementation of to_fileio_close. */
12057
12058 int
12059 remote_target::remote_hostio_close (int fd, int *remote_errno)
12060 {
12061 struct remote_state *rs = get_remote_state ();
12062 char *p = rs->buf.data ();
12063 int left = get_remote_packet_size () - 1;
12064
12065 rs->readahead_cache.invalidate_fd (fd);
12066
12067 remote_buffer_add_string (&p, &left, "vFile:close:");
12068
12069 remote_buffer_add_int (&p, &left, fd);
12070
12071 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
12072 remote_errno, NULL, NULL);
12073 }
12074
12075 int
12076 remote_target::fileio_close (int fd, int *remote_errno)
12077 {
12078 return remote_hostio_close (fd, remote_errno);
12079 }
12080
12081 /* Implementation of to_fileio_unlink. */
12082
12083 int
12084 remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12085 int *remote_errno)
12086 {
12087 struct remote_state *rs = get_remote_state ();
12088 char *p = rs->buf.data ();
12089 int left = get_remote_packet_size () - 1;
12090
12091 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12092 return -1;
12093
12094 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12095
12096 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12097 strlen (filename));
12098
12099 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
12100 remote_errno, NULL, NULL);
12101 }
12102
12103 int
12104 remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12105 int *remote_errno)
12106 {
12107 return remote_hostio_unlink (inf, filename, remote_errno);
12108 }
12109
12110 /* Implementation of to_fileio_readlink. */
12111
12112 gdb::optional<std::string>
12113 remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12114 int *remote_errno)
12115 {
12116 struct remote_state *rs = get_remote_state ();
12117 char *p = rs->buf.data ();
12118 char *attachment;
12119 int left = get_remote_packet_size ();
12120 int len, attachment_len;
12121 int read_len;
12122
12123 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12124 return {};
12125
12126 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12127
12128 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12129 strlen (filename));
12130
12131 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
12132 remote_errno, &attachment,
12133 &attachment_len);
12134
12135 if (len < 0)
12136 return {};
12137
12138 std::string ret (len, '\0');
12139
12140 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12141 (gdb_byte *) &ret[0], len);
12142 if (read_len != len)
12143 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12144
12145 return ret;
12146 }
12147
12148 /* Implementation of to_fileio_fstat. */
12149
12150 int
12151 remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
12152 {
12153 struct remote_state *rs = get_remote_state ();
12154 char *p = rs->buf.data ();
12155 int left = get_remote_packet_size ();
12156 int attachment_len, ret;
12157 char *attachment;
12158 struct fio_stat fst;
12159 int read_len;
12160
12161 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12162
12163 remote_buffer_add_int (&p, &left, fd);
12164
12165 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
12166 remote_errno, &attachment,
12167 &attachment_len);
12168 if (ret < 0)
12169 {
12170 if (*remote_errno != FILEIO_ENOSYS)
12171 return ret;
12172
12173 /* Strictly we should return -1, ENOSYS here, but when
12174 "set sysroot remote:" was implemented in August 2008
12175 BFD's need for a stat function was sidestepped with
12176 this hack. This was not remedied until March 2015
12177 so we retain the previous behavior to avoid breaking
12178 compatibility.
12179
12180 Note that the memset is a March 2015 addition; older
12181 GDBs set st_size *and nothing else* so the structure
12182 would have garbage in all other fields. This might
12183 break something but retaining the previous behavior
12184 here would be just too wrong. */
12185
12186 memset (st, 0, sizeof (struct stat));
12187 st->st_size = INT_MAX;
12188 return 0;
12189 }
12190
12191 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12192 (gdb_byte *) &fst, sizeof (fst));
12193
12194 if (read_len != ret)
12195 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12196
12197 if (read_len != sizeof (fst))
12198 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12199 read_len, (int) sizeof (fst));
12200
12201 remote_fileio_to_host_stat (&fst, st);
12202
12203 return 0;
12204 }
12205
12206 /* Implementation of to_filesystem_is_local. */
12207
12208 bool
12209 remote_target::filesystem_is_local ()
12210 {
12211 /* Valgrind GDB presents itself as a remote target but works
12212 on the local filesystem: it does not implement remote get
12213 and users are not expected to set a sysroot. To handle
12214 this case we treat the remote filesystem as local if the
12215 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12216 does not support vFile:open. */
12217 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
12218 {
12219 enum packet_support ps = packet_support (PACKET_vFile_open);
12220
12221 if (ps == PACKET_SUPPORT_UNKNOWN)
12222 {
12223 int fd, remote_errno;
12224
12225 /* Try opening a file to probe support. The supplied
12226 filename is irrelevant, we only care about whether
12227 the stub recognizes the packet or not. */
12228 fd = remote_hostio_open (NULL, "just probing",
12229 FILEIO_O_RDONLY, 0700, 0,
12230 &remote_errno);
12231
12232 if (fd >= 0)
12233 remote_hostio_close (fd, &remote_errno);
12234
12235 ps = packet_support (PACKET_vFile_open);
12236 }
12237
12238 if (ps == PACKET_DISABLE)
12239 {
12240 static int warning_issued = 0;
12241
12242 if (!warning_issued)
12243 {
12244 warning (_("remote target does not support file"
12245 " transfer, attempting to access files"
12246 " from local filesystem."));
12247 warning_issued = 1;
12248 }
12249
12250 return true;
12251 }
12252 }
12253
12254 return false;
12255 }
12256
12257 static int
12258 remote_fileio_errno_to_host (int errnum)
12259 {
12260 switch (errnum)
12261 {
12262 case FILEIO_EPERM:
12263 return EPERM;
12264 case FILEIO_ENOENT:
12265 return ENOENT;
12266 case FILEIO_EINTR:
12267 return EINTR;
12268 case FILEIO_EIO:
12269 return EIO;
12270 case FILEIO_EBADF:
12271 return EBADF;
12272 case FILEIO_EACCES:
12273 return EACCES;
12274 case FILEIO_EFAULT:
12275 return EFAULT;
12276 case FILEIO_EBUSY:
12277 return EBUSY;
12278 case FILEIO_EEXIST:
12279 return EEXIST;
12280 case FILEIO_ENODEV:
12281 return ENODEV;
12282 case FILEIO_ENOTDIR:
12283 return ENOTDIR;
12284 case FILEIO_EISDIR:
12285 return EISDIR;
12286 case FILEIO_EINVAL:
12287 return EINVAL;
12288 case FILEIO_ENFILE:
12289 return ENFILE;
12290 case FILEIO_EMFILE:
12291 return EMFILE;
12292 case FILEIO_EFBIG:
12293 return EFBIG;
12294 case FILEIO_ENOSPC:
12295 return ENOSPC;
12296 case FILEIO_ESPIPE:
12297 return ESPIPE;
12298 case FILEIO_EROFS:
12299 return EROFS;
12300 case FILEIO_ENOSYS:
12301 return ENOSYS;
12302 case FILEIO_ENAMETOOLONG:
12303 return ENAMETOOLONG;
12304 }
12305 return -1;
12306 }
12307
12308 static char *
12309 remote_hostio_error (int errnum)
12310 {
12311 int host_error = remote_fileio_errno_to_host (errnum);
12312
12313 if (host_error == -1)
12314 error (_("Unknown remote I/O error %d"), errnum);
12315 else
12316 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12317 }
12318
12319 /* A RAII wrapper around a remote file descriptor. */
12320
12321 class scoped_remote_fd
12322 {
12323 public:
12324 scoped_remote_fd (remote_target *remote, int fd)
12325 : m_remote (remote), m_fd (fd)
12326 {
12327 }
12328
12329 ~scoped_remote_fd ()
12330 {
12331 if (m_fd != -1)
12332 {
12333 try
12334 {
12335 int remote_errno;
12336 m_remote->remote_hostio_close (m_fd, &remote_errno);
12337 }
12338 catch (...)
12339 {
12340 /* Swallow exception before it escapes the dtor. If
12341 something goes wrong, likely the connection is gone,
12342 and there's nothing else that can be done. */
12343 }
12344 }
12345 }
12346
12347 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12348
12349 /* Release ownership of the file descriptor, and return it. */
12350 ATTRIBUTE_UNUSED_RESULT int release () noexcept
12351 {
12352 int fd = m_fd;
12353 m_fd = -1;
12354 return fd;
12355 }
12356
12357 /* Return the owned file descriptor. */
12358 int get () const noexcept
12359 {
12360 return m_fd;
12361 }
12362
12363 private:
12364 /* The remote target. */
12365 remote_target *m_remote;
12366
12367 /* The owned remote I/O file descriptor. */
12368 int m_fd;
12369 };
12370
12371 void
12372 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12373 {
12374 remote_target *remote = get_current_remote_target ();
12375
12376 if (remote == nullptr)
12377 error (_("command can only be used with remote target"));
12378
12379 remote->remote_file_put (local_file, remote_file, from_tty);
12380 }
12381
12382 void
12383 remote_target::remote_file_put (const char *local_file, const char *remote_file,
12384 int from_tty)
12385 {
12386 int retcode, remote_errno, bytes, io_size;
12387 int bytes_in_buffer;
12388 int saw_eof;
12389 ULONGEST offset;
12390
12391 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12392 if (file == NULL)
12393 perror_with_name (local_file);
12394
12395 scoped_remote_fd fd
12396 (this, remote_hostio_open (NULL,
12397 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12398 | FILEIO_O_TRUNC),
12399 0700, 0, &remote_errno));
12400 if (fd.get () == -1)
12401 remote_hostio_error (remote_errno);
12402
12403 /* Send up to this many bytes at once. They won't all fit in the
12404 remote packet limit, so we'll transfer slightly fewer. */
12405 io_size = get_remote_packet_size ();
12406 gdb::byte_vector buffer (io_size);
12407
12408 bytes_in_buffer = 0;
12409 saw_eof = 0;
12410 offset = 0;
12411 while (bytes_in_buffer || !saw_eof)
12412 {
12413 if (!saw_eof)
12414 {
12415 bytes = fread (buffer.data () + bytes_in_buffer, 1,
12416 io_size - bytes_in_buffer,
12417 file.get ());
12418 if (bytes == 0)
12419 {
12420 if (ferror (file.get ()))
12421 error (_("Error reading %s."), local_file);
12422 else
12423 {
12424 /* EOF. Unless there is something still in the
12425 buffer from the last iteration, we are done. */
12426 saw_eof = 1;
12427 if (bytes_in_buffer == 0)
12428 break;
12429 }
12430 }
12431 }
12432 else
12433 bytes = 0;
12434
12435 bytes += bytes_in_buffer;
12436 bytes_in_buffer = 0;
12437
12438 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
12439 offset, &remote_errno);
12440
12441 if (retcode < 0)
12442 remote_hostio_error (remote_errno);
12443 else if (retcode == 0)
12444 error (_("Remote write of %d bytes returned 0!"), bytes);
12445 else if (retcode < bytes)
12446 {
12447 /* Short write. Save the rest of the read data for the next
12448 write. */
12449 bytes_in_buffer = bytes - retcode;
12450 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
12451 }
12452
12453 offset += retcode;
12454 }
12455
12456 if (remote_hostio_close (fd.release (), &remote_errno))
12457 remote_hostio_error (remote_errno);
12458
12459 if (from_tty)
12460 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12461 }
12462
12463 void
12464 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12465 {
12466 remote_target *remote = get_current_remote_target ();
12467
12468 if (remote == nullptr)
12469 error (_("command can only be used with remote target"));
12470
12471 remote->remote_file_get (remote_file, local_file, from_tty);
12472 }
12473
12474 void
12475 remote_target::remote_file_get (const char *remote_file, const char *local_file,
12476 int from_tty)
12477 {
12478 int remote_errno, bytes, io_size;
12479 ULONGEST offset;
12480
12481 scoped_remote_fd fd
12482 (this, remote_hostio_open (NULL,
12483 remote_file, FILEIO_O_RDONLY, 0, 0,
12484 &remote_errno));
12485 if (fd.get () == -1)
12486 remote_hostio_error (remote_errno);
12487
12488 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12489 if (file == NULL)
12490 perror_with_name (local_file);
12491
12492 /* Send up to this many bytes at once. They won't all fit in the
12493 remote packet limit, so we'll transfer slightly fewer. */
12494 io_size = get_remote_packet_size ();
12495 gdb::byte_vector buffer (io_size);
12496
12497 offset = 0;
12498 while (1)
12499 {
12500 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
12501 &remote_errno);
12502 if (bytes == 0)
12503 /* Success, but no bytes, means end-of-file. */
12504 break;
12505 if (bytes == -1)
12506 remote_hostio_error (remote_errno);
12507
12508 offset += bytes;
12509
12510 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
12511 if (bytes == 0)
12512 perror_with_name (local_file);
12513 }
12514
12515 if (remote_hostio_close (fd.release (), &remote_errno))
12516 remote_hostio_error (remote_errno);
12517
12518 if (from_tty)
12519 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12520 }
12521
12522 void
12523 remote_file_delete (const char *remote_file, int from_tty)
12524 {
12525 remote_target *remote = get_current_remote_target ();
12526
12527 if (remote == nullptr)
12528 error (_("command can only be used with remote target"));
12529
12530 remote->remote_file_delete (remote_file, from_tty);
12531 }
12532
12533 void
12534 remote_target::remote_file_delete (const char *remote_file, int from_tty)
12535 {
12536 int retcode, remote_errno;
12537
12538 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
12539 if (retcode == -1)
12540 remote_hostio_error (remote_errno);
12541
12542 if (from_tty)
12543 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12544 }
12545
12546 static void
12547 remote_put_command (const char *args, int from_tty)
12548 {
12549 if (args == NULL)
12550 error_no_arg (_("file to put"));
12551
12552 gdb_argv argv (args);
12553 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12554 error (_("Invalid parameters to remote put"));
12555
12556 remote_file_put (argv[0], argv[1], from_tty);
12557 }
12558
12559 static void
12560 remote_get_command (const char *args, int from_tty)
12561 {
12562 if (args == NULL)
12563 error_no_arg (_("file to get"));
12564
12565 gdb_argv argv (args);
12566 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12567 error (_("Invalid parameters to remote get"));
12568
12569 remote_file_get (argv[0], argv[1], from_tty);
12570 }
12571
12572 static void
12573 remote_delete_command (const char *args, int from_tty)
12574 {
12575 if (args == NULL)
12576 error_no_arg (_("file to delete"));
12577
12578 gdb_argv argv (args);
12579 if (argv[0] == NULL || argv[1] != NULL)
12580 error (_("Invalid parameters to remote delete"));
12581
12582 remote_file_delete (argv[0], from_tty);
12583 }
12584
12585 static void
12586 remote_command (const char *args, int from_tty)
12587 {
12588 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12589 }
12590
12591 bool
12592 remote_target::can_execute_reverse ()
12593 {
12594 if (packet_support (PACKET_bs) == PACKET_ENABLE
12595 || packet_support (PACKET_bc) == PACKET_ENABLE)
12596 return true;
12597 else
12598 return false;
12599 }
12600
12601 bool
12602 remote_target::supports_non_stop ()
12603 {
12604 return true;
12605 }
12606
12607 bool
12608 remote_target::supports_disable_randomization ()
12609 {
12610 /* Only supported in extended mode. */
12611 return false;
12612 }
12613
12614 bool
12615 remote_target::supports_multi_process ()
12616 {
12617 struct remote_state *rs = get_remote_state ();
12618
12619 return remote_multi_process_p (rs);
12620 }
12621
12622 static int
12623 remote_supports_cond_tracepoints ()
12624 {
12625 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12626 }
12627
12628 bool
12629 remote_target::supports_evaluation_of_breakpoint_conditions ()
12630 {
12631 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12632 }
12633
12634 static int
12635 remote_supports_fast_tracepoints ()
12636 {
12637 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12638 }
12639
12640 static int
12641 remote_supports_static_tracepoints ()
12642 {
12643 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12644 }
12645
12646 static int
12647 remote_supports_install_in_trace ()
12648 {
12649 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12650 }
12651
12652 bool
12653 remote_target::supports_enable_disable_tracepoint ()
12654 {
12655 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12656 == PACKET_ENABLE);
12657 }
12658
12659 bool
12660 remote_target::supports_string_tracing ()
12661 {
12662 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12663 }
12664
12665 bool
12666 remote_target::can_run_breakpoint_commands ()
12667 {
12668 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12669 }
12670
12671 void
12672 remote_target::trace_init ()
12673 {
12674 struct remote_state *rs = get_remote_state ();
12675
12676 putpkt ("QTinit");
12677 remote_get_noisy_reply ();
12678 if (strcmp (rs->buf.data (), "OK") != 0)
12679 error (_("Target does not support this command."));
12680 }
12681
12682 /* Recursive routine to walk through command list including loops, and
12683 download packets for each command. */
12684
12685 void
12686 remote_target::remote_download_command_source (int num, ULONGEST addr,
12687 struct command_line *cmds)
12688 {
12689 struct remote_state *rs = get_remote_state ();
12690 struct command_line *cmd;
12691
12692 for (cmd = cmds; cmd; cmd = cmd->next)
12693 {
12694 QUIT; /* Allow user to bail out with ^C. */
12695 strcpy (rs->buf.data (), "QTDPsrc:");
12696 encode_source_string (num, addr, "cmd", cmd->line,
12697 rs->buf.data () + strlen (rs->buf.data ()),
12698 rs->buf.size () - strlen (rs->buf.data ()));
12699 putpkt (rs->buf);
12700 remote_get_noisy_reply ();
12701 if (strcmp (rs->buf.data (), "OK"))
12702 warning (_("Target does not support source download."));
12703
12704 if (cmd->control_type == while_control
12705 || cmd->control_type == while_stepping_control)
12706 {
12707 remote_download_command_source (num, addr, cmd->body_list_0.get ());
12708
12709 QUIT; /* Allow user to bail out with ^C. */
12710 strcpy (rs->buf.data (), "QTDPsrc:");
12711 encode_source_string (num, addr, "cmd", "end",
12712 rs->buf.data () + strlen (rs->buf.data ()),
12713 rs->buf.size () - strlen (rs->buf.data ()));
12714 putpkt (rs->buf);
12715 remote_get_noisy_reply ();
12716 if (strcmp (rs->buf.data (), "OK"))
12717 warning (_("Target does not support source download."));
12718 }
12719 }
12720 }
12721
12722 void
12723 remote_target::download_tracepoint (struct bp_location *loc)
12724 {
12725 CORE_ADDR tpaddr;
12726 char addrbuf[40];
12727 std::vector<std::string> tdp_actions;
12728 std::vector<std::string> stepping_actions;
12729 char *pkt;
12730 struct breakpoint *b = loc->owner;
12731 struct tracepoint *t = (struct tracepoint *) b;
12732 struct remote_state *rs = get_remote_state ();
12733 int ret;
12734 const char *err_msg = _("Tracepoint packet too large for target.");
12735 size_t size_left;
12736
12737 /* We use a buffer other than rs->buf because we'll build strings
12738 across multiple statements, and other statements in between could
12739 modify rs->buf. */
12740 gdb::char_vector buf (get_remote_packet_size ());
12741
12742 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12743
12744 tpaddr = loc->address;
12745 sprintf_vma (addrbuf, tpaddr);
12746 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
12747 b->number, addrbuf, /* address */
12748 (b->enable_state == bp_enabled ? 'E' : 'D'),
12749 t->step_count, t->pass_count);
12750
12751 if (ret < 0 || ret >= buf.size ())
12752 error ("%s", err_msg);
12753
12754 /* Fast tracepoints are mostly handled by the target, but we can
12755 tell the target how big of an instruction block should be moved
12756 around. */
12757 if (b->type == bp_fast_tracepoint)
12758 {
12759 /* Only test for support at download time; we may not know
12760 target capabilities at definition time. */
12761 if (remote_supports_fast_tracepoints ())
12762 {
12763 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12764 NULL))
12765 {
12766 size_left = buf.size () - strlen (buf.data ());
12767 ret = snprintf (buf.data () + strlen (buf.data ()),
12768 size_left, ":F%x",
12769 gdb_insn_length (loc->gdbarch, tpaddr));
12770
12771 if (ret < 0 || ret >= size_left)
12772 error ("%s", err_msg);
12773 }
12774 else
12775 /* If it passed validation at definition but fails now,
12776 something is very wrong. */
12777 internal_error (__FILE__, __LINE__,
12778 _("Fast tracepoint not "
12779 "valid during download"));
12780 }
12781 else
12782 /* Fast tracepoints are functionally identical to regular
12783 tracepoints, so don't take lack of support as a reason to
12784 give up on the trace run. */
12785 warning (_("Target does not support fast tracepoints, "
12786 "downloading %d as regular tracepoint"), b->number);
12787 }
12788 else if (b->type == bp_static_tracepoint)
12789 {
12790 /* Only test for support at download time; we may not know
12791 target capabilities at definition time. */
12792 if (remote_supports_static_tracepoints ())
12793 {
12794 struct static_tracepoint_marker marker;
12795
12796 if (target_static_tracepoint_marker_at (tpaddr, &marker))
12797 {
12798 size_left = buf.size () - strlen (buf.data ());
12799 ret = snprintf (buf.data () + strlen (buf.data ()),
12800 size_left, ":S");
12801
12802 if (ret < 0 || ret >= size_left)
12803 error ("%s", err_msg);
12804 }
12805 else
12806 error (_("Static tracepoint not valid during download"));
12807 }
12808 else
12809 /* Fast tracepoints are functionally identical to regular
12810 tracepoints, so don't take lack of support as a reason
12811 to give up on the trace run. */
12812 error (_("Target does not support static tracepoints"));
12813 }
12814 /* If the tracepoint has a conditional, make it into an agent
12815 expression and append to the definition. */
12816 if (loc->cond)
12817 {
12818 /* Only test support at download time, we may not know target
12819 capabilities at definition time. */
12820 if (remote_supports_cond_tracepoints ())
12821 {
12822 agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
12823 loc->cond.get ());
12824
12825 size_left = buf.size () - strlen (buf.data ());
12826
12827 ret = snprintf (buf.data () + strlen (buf.data ()),
12828 size_left, ":X%x,", aexpr->len);
12829
12830 if (ret < 0 || ret >= size_left)
12831 error ("%s", err_msg);
12832
12833 size_left = buf.size () - strlen (buf.data ());
12834
12835 /* Two bytes to encode each aexpr byte, plus the terminating
12836 null byte. */
12837 if (aexpr->len * 2 + 1 > size_left)
12838 error ("%s", err_msg);
12839
12840 pkt = buf.data () + strlen (buf.data ());
12841
12842 for (int ndx = 0; ndx < aexpr->len; ++ndx)
12843 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12844 *pkt = '\0';
12845 }
12846 else
12847 warning (_("Target does not support conditional tracepoints, "
12848 "ignoring tp %d cond"), b->number);
12849 }
12850
12851 if (b->commands || *default_collect)
12852 {
12853 size_left = buf.size () - strlen (buf.data ());
12854
12855 ret = snprintf (buf.data () + strlen (buf.data ()),
12856 size_left, "-");
12857
12858 if (ret < 0 || ret >= size_left)
12859 error ("%s", err_msg);
12860 }
12861
12862 putpkt (buf.data ());
12863 remote_get_noisy_reply ();
12864 if (strcmp (rs->buf.data (), "OK"))
12865 error (_("Target does not support tracepoints."));
12866
12867 /* do_single_steps (t); */
12868 for (auto action_it = tdp_actions.begin ();
12869 action_it != tdp_actions.end (); action_it++)
12870 {
12871 QUIT; /* Allow user to bail out with ^C. */
12872
12873 bool has_more = ((action_it + 1) != tdp_actions.end ()
12874 || !stepping_actions.empty ());
12875
12876 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
12877 b->number, addrbuf, /* address */
12878 action_it->c_str (),
12879 has_more ? '-' : 0);
12880
12881 if (ret < 0 || ret >= buf.size ())
12882 error ("%s", err_msg);
12883
12884 putpkt (buf.data ());
12885 remote_get_noisy_reply ();
12886 if (strcmp (rs->buf.data (), "OK"))
12887 error (_("Error on target while setting tracepoints."));
12888 }
12889
12890 for (auto action_it = stepping_actions.begin ();
12891 action_it != stepping_actions.end (); action_it++)
12892 {
12893 QUIT; /* Allow user to bail out with ^C. */
12894
12895 bool is_first = action_it == stepping_actions.begin ();
12896 bool has_more = (action_it + 1) != stepping_actions.end ();
12897
12898 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
12899 b->number, addrbuf, /* address */
12900 is_first ? "S" : "",
12901 action_it->c_str (),
12902 has_more ? "-" : "");
12903
12904 if (ret < 0 || ret >= buf.size ())
12905 error ("%s", err_msg);
12906
12907 putpkt (buf.data ());
12908 remote_get_noisy_reply ();
12909 if (strcmp (rs->buf.data (), "OK"))
12910 error (_("Error on target while setting tracepoints."));
12911 }
12912
12913 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12914 {
12915 if (b->location != NULL)
12916 {
12917 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
12918
12919 if (ret < 0 || ret >= buf.size ())
12920 error ("%s", err_msg);
12921
12922 encode_source_string (b->number, loc->address, "at",
12923 event_location_to_string (b->location.get ()),
12924 buf.data () + strlen (buf.data ()),
12925 buf.size () - strlen (buf.data ()));
12926 putpkt (buf.data ());
12927 remote_get_noisy_reply ();
12928 if (strcmp (rs->buf.data (), "OK"))
12929 warning (_("Target does not support source download."));
12930 }
12931 if (b->cond_string)
12932 {
12933 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
12934
12935 if (ret < 0 || ret >= buf.size ())
12936 error ("%s", err_msg);
12937
12938 encode_source_string (b->number, loc->address,
12939 "cond", b->cond_string,
12940 buf.data () + strlen (buf.data ()),
12941 buf.size () - strlen (buf.data ()));
12942 putpkt (buf.data ());
12943 remote_get_noisy_reply ();
12944 if (strcmp (rs->buf.data (), "OK"))
12945 warning (_("Target does not support source download."));
12946 }
12947 remote_download_command_source (b->number, loc->address,
12948 breakpoint_commands (b));
12949 }
12950 }
12951
12952 bool
12953 remote_target::can_download_tracepoint ()
12954 {
12955 struct remote_state *rs = get_remote_state ();
12956 struct trace_status *ts;
12957 int status;
12958
12959 /* Don't try to install tracepoints until we've relocated our
12960 symbols, and fetched and merged the target's tracepoint list with
12961 ours. */
12962 if (rs->starting_up)
12963 return false;
12964
12965 ts = current_trace_status ();
12966 status = get_trace_status (ts);
12967
12968 if (status == -1 || !ts->running_known || !ts->running)
12969 return false;
12970
12971 /* If we are in a tracing experiment, but remote stub doesn't support
12972 installing tracepoint in trace, we have to return. */
12973 if (!remote_supports_install_in_trace ())
12974 return false;
12975
12976 return true;
12977 }
12978
12979
12980 void
12981 remote_target::download_trace_state_variable (const trace_state_variable &tsv)
12982 {
12983 struct remote_state *rs = get_remote_state ();
12984 char *p;
12985
12986 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
12987 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
12988 tsv.builtin);
12989 p = rs->buf.data () + strlen (rs->buf.data ());
12990 if ((p - rs->buf.data ()) + tsv.name.length () * 2
12991 >= get_remote_packet_size ())
12992 error (_("Trace state variable name too long for tsv definition packet"));
12993 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
12994 *p++ = '\0';
12995 putpkt (rs->buf);
12996 remote_get_noisy_reply ();
12997 if (rs->buf[0] == '\0')
12998 error (_("Target does not support this command."));
12999 if (strcmp (rs->buf.data (), "OK") != 0)
13000 error (_("Error on target while downloading trace state variable."));
13001 }
13002
13003 void
13004 remote_target::enable_tracepoint (struct bp_location *location)
13005 {
13006 struct remote_state *rs = get_remote_state ();
13007 char addr_buf[40];
13008
13009 sprintf_vma (addr_buf, location->address);
13010 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
13011 location->owner->number, addr_buf);
13012 putpkt (rs->buf);
13013 remote_get_noisy_reply ();
13014 if (rs->buf[0] == '\0')
13015 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13016 if (strcmp (rs->buf.data (), "OK") != 0)
13017 error (_("Error on target while enabling tracepoint."));
13018 }
13019
13020 void
13021 remote_target::disable_tracepoint (struct bp_location *location)
13022 {
13023 struct remote_state *rs = get_remote_state ();
13024 char addr_buf[40];
13025
13026 sprintf_vma (addr_buf, location->address);
13027 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
13028 location->owner->number, addr_buf);
13029 putpkt (rs->buf);
13030 remote_get_noisy_reply ();
13031 if (rs->buf[0] == '\0')
13032 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13033 if (strcmp (rs->buf.data (), "OK") != 0)
13034 error (_("Error on target while disabling tracepoint."));
13035 }
13036
13037 void
13038 remote_target::trace_set_readonly_regions ()
13039 {
13040 asection *s;
13041 bfd_size_type size;
13042 bfd_vma vma;
13043 int anysecs = 0;
13044 int offset = 0;
13045
13046 if (!exec_bfd)
13047 return; /* No information to give. */
13048
13049 struct remote_state *rs = get_remote_state ();
13050
13051 strcpy (rs->buf.data (), "QTro");
13052 offset = strlen (rs->buf.data ());
13053 for (s = exec_bfd->sections; s; s = s->next)
13054 {
13055 char tmp1[40], tmp2[40];
13056 int sec_length;
13057
13058 if ((s->flags & SEC_LOAD) == 0 ||
13059 /* (s->flags & SEC_CODE) == 0 || */
13060 (s->flags & SEC_READONLY) == 0)
13061 continue;
13062
13063 anysecs = 1;
13064 vma = bfd_section_vma (s);
13065 size = bfd_section_size (s);
13066 sprintf_vma (tmp1, vma);
13067 sprintf_vma (tmp2, vma + size);
13068 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
13069 if (offset + sec_length + 1 > rs->buf.size ())
13070 {
13071 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
13072 warning (_("\
13073 Too many sections for read-only sections definition packet."));
13074 break;
13075 }
13076 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
13077 tmp1, tmp2);
13078 offset += sec_length;
13079 }
13080 if (anysecs)
13081 {
13082 putpkt (rs->buf);
13083 getpkt (&rs->buf, 0);
13084 }
13085 }
13086
13087 void
13088 remote_target::trace_start ()
13089 {
13090 struct remote_state *rs = get_remote_state ();
13091
13092 putpkt ("QTStart");
13093 remote_get_noisy_reply ();
13094 if (rs->buf[0] == '\0')
13095 error (_("Target does not support this command."));
13096 if (strcmp (rs->buf.data (), "OK") != 0)
13097 error (_("Bogus reply from target: %s"), rs->buf.data ());
13098 }
13099
13100 int
13101 remote_target::get_trace_status (struct trace_status *ts)
13102 {
13103 /* Initialize it just to avoid a GCC false warning. */
13104 char *p = NULL;
13105 /* FIXME we need to get register block size some other way. */
13106 extern int trace_regblock_size;
13107 enum packet_result result;
13108 struct remote_state *rs = get_remote_state ();
13109
13110 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
13111 return -1;
13112
13113 trace_regblock_size
13114 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
13115
13116 putpkt ("qTStatus");
13117
13118 try
13119 {
13120 p = remote_get_noisy_reply ();
13121 }
13122 catch (const gdb_exception_error &ex)
13123 {
13124 if (ex.error != TARGET_CLOSE_ERROR)
13125 {
13126 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13127 return -1;
13128 }
13129 throw;
13130 }
13131
13132 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13133
13134 /* If the remote target doesn't do tracing, flag it. */
13135 if (result == PACKET_UNKNOWN)
13136 return -1;
13137
13138 /* We're working with a live target. */
13139 ts->filename = NULL;
13140
13141 if (*p++ != 'T')
13142 error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
13143
13144 /* Function 'parse_trace_status' sets default value of each field of
13145 'ts' at first, so we don't have to do it here. */
13146 parse_trace_status (p, ts);
13147
13148 return ts->running;
13149 }
13150
13151 void
13152 remote_target::get_tracepoint_status (struct breakpoint *bp,
13153 struct uploaded_tp *utp)
13154 {
13155 struct remote_state *rs = get_remote_state ();
13156 char *reply;
13157 struct bp_location *loc;
13158 struct tracepoint *tp = (struct tracepoint *) bp;
13159 size_t size = get_remote_packet_size ();
13160
13161 if (tp)
13162 {
13163 tp->hit_count = 0;
13164 tp->traceframe_usage = 0;
13165 for (loc = tp->loc; loc; loc = loc->next)
13166 {
13167 /* If the tracepoint was never downloaded, don't go asking for
13168 any status. */
13169 if (tp->number_on_target == 0)
13170 continue;
13171 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
13172 phex_nz (loc->address, 0));
13173 putpkt (rs->buf);
13174 reply = remote_get_noisy_reply ();
13175 if (reply && *reply)
13176 {
13177 if (*reply == 'V')
13178 parse_tracepoint_status (reply + 1, bp, utp);
13179 }
13180 }
13181 }
13182 else if (utp)
13183 {
13184 utp->hit_count = 0;
13185 utp->traceframe_usage = 0;
13186 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
13187 phex_nz (utp->addr, 0));
13188 putpkt (rs->buf);
13189 reply = remote_get_noisy_reply ();
13190 if (reply && *reply)
13191 {
13192 if (*reply == 'V')
13193 parse_tracepoint_status (reply + 1, bp, utp);
13194 }
13195 }
13196 }
13197
13198 void
13199 remote_target::trace_stop ()
13200 {
13201 struct remote_state *rs = get_remote_state ();
13202
13203 putpkt ("QTStop");
13204 remote_get_noisy_reply ();
13205 if (rs->buf[0] == '\0')
13206 error (_("Target does not support this command."));
13207 if (strcmp (rs->buf.data (), "OK") != 0)
13208 error (_("Bogus reply from target: %s"), rs->buf.data ());
13209 }
13210
13211 int
13212 remote_target::trace_find (enum trace_find_type type, int num,
13213 CORE_ADDR addr1, CORE_ADDR addr2,
13214 int *tpp)
13215 {
13216 struct remote_state *rs = get_remote_state ();
13217 char *endbuf = rs->buf.data () + get_remote_packet_size ();
13218 char *p, *reply;
13219 int target_frameno = -1, target_tracept = -1;
13220
13221 /* Lookups other than by absolute frame number depend on the current
13222 trace selected, so make sure it is correct on the remote end
13223 first. */
13224 if (type != tfind_number)
13225 set_remote_traceframe ();
13226
13227 p = rs->buf.data ();
13228 strcpy (p, "QTFrame:");
13229 p = strchr (p, '\0');
13230 switch (type)
13231 {
13232 case tfind_number:
13233 xsnprintf (p, endbuf - p, "%x", num);
13234 break;
13235 case tfind_pc:
13236 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
13237 break;
13238 case tfind_tp:
13239 xsnprintf (p, endbuf - p, "tdp:%x", num);
13240 break;
13241 case tfind_range:
13242 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13243 phex_nz (addr2, 0));
13244 break;
13245 case tfind_outside:
13246 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13247 phex_nz (addr2, 0));
13248 break;
13249 default:
13250 error (_("Unknown trace find type %d"), type);
13251 }
13252
13253 putpkt (rs->buf);
13254 reply = remote_get_noisy_reply ();
13255 if (*reply == '\0')
13256 error (_("Target does not support this command."));
13257
13258 while (reply && *reply)
13259 switch (*reply)
13260 {
13261 case 'F':
13262 p = ++reply;
13263 target_frameno = (int) strtol (p, &reply, 16);
13264 if (reply == p)
13265 error (_("Unable to parse trace frame number"));
13266 /* Don't update our remote traceframe number cache on failure
13267 to select a remote traceframe. */
13268 if (target_frameno == -1)
13269 return -1;
13270 break;
13271 case 'T':
13272 p = ++reply;
13273 target_tracept = (int) strtol (p, &reply, 16);
13274 if (reply == p)
13275 error (_("Unable to parse tracepoint number"));
13276 break;
13277 case 'O': /* "OK"? */
13278 if (reply[1] == 'K' && reply[2] == '\0')
13279 reply += 2;
13280 else
13281 error (_("Bogus reply from target: %s"), reply);
13282 break;
13283 default:
13284 error (_("Bogus reply from target: %s"), reply);
13285 }
13286 if (tpp)
13287 *tpp = target_tracept;
13288
13289 rs->remote_traceframe_number = target_frameno;
13290 return target_frameno;
13291 }
13292
13293 bool
13294 remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
13295 {
13296 struct remote_state *rs = get_remote_state ();
13297 char *reply;
13298 ULONGEST uval;
13299
13300 set_remote_traceframe ();
13301
13302 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
13303 putpkt (rs->buf);
13304 reply = remote_get_noisy_reply ();
13305 if (reply && *reply)
13306 {
13307 if (*reply == 'V')
13308 {
13309 unpack_varlen_hex (reply + 1, &uval);
13310 *val = (LONGEST) uval;
13311 return true;
13312 }
13313 }
13314 return false;
13315 }
13316
13317 int
13318 remote_target::save_trace_data (const char *filename)
13319 {
13320 struct remote_state *rs = get_remote_state ();
13321 char *p, *reply;
13322
13323 p = rs->buf.data ();
13324 strcpy (p, "QTSave:");
13325 p += strlen (p);
13326 if ((p - rs->buf.data ()) + strlen (filename) * 2
13327 >= get_remote_packet_size ())
13328 error (_("Remote file name too long for trace save packet"));
13329 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
13330 *p++ = '\0';
13331 putpkt (rs->buf);
13332 reply = remote_get_noisy_reply ();
13333 if (*reply == '\0')
13334 error (_("Target does not support this command."));
13335 if (strcmp (reply, "OK") != 0)
13336 error (_("Bogus reply from target: %s"), reply);
13337 return 0;
13338 }
13339
13340 /* This is basically a memory transfer, but needs to be its own packet
13341 because we don't know how the target actually organizes its trace
13342 memory, plus we want to be able to ask for as much as possible, but
13343 not be unhappy if we don't get as much as we ask for. */
13344
13345 LONGEST
13346 remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
13347 {
13348 struct remote_state *rs = get_remote_state ();
13349 char *reply;
13350 char *p;
13351 int rslt;
13352
13353 p = rs->buf.data ();
13354 strcpy (p, "qTBuffer:");
13355 p += strlen (p);
13356 p += hexnumstr (p, offset);
13357 *p++ = ',';
13358 p += hexnumstr (p, len);
13359 *p++ = '\0';
13360
13361 putpkt (rs->buf);
13362 reply = remote_get_noisy_reply ();
13363 if (reply && *reply)
13364 {
13365 /* 'l' by itself means we're at the end of the buffer and
13366 there is nothing more to get. */
13367 if (*reply == 'l')
13368 return 0;
13369
13370 /* Convert the reply into binary. Limit the number of bytes to
13371 convert according to our passed-in buffer size, rather than
13372 what was returned in the packet; if the target is
13373 unexpectedly generous and gives us a bigger reply than we
13374 asked for, we don't want to crash. */
13375 rslt = hex2bin (reply, buf, len);
13376 return rslt;
13377 }
13378
13379 /* Something went wrong, flag as an error. */
13380 return -1;
13381 }
13382
13383 void
13384 remote_target::set_disconnected_tracing (int val)
13385 {
13386 struct remote_state *rs = get_remote_state ();
13387
13388 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
13389 {
13390 char *reply;
13391
13392 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13393 "QTDisconnected:%x", val);
13394 putpkt (rs->buf);
13395 reply = remote_get_noisy_reply ();
13396 if (*reply == '\0')
13397 error (_("Target does not support this command."));
13398 if (strcmp (reply, "OK") != 0)
13399 error (_("Bogus reply from target: %s"), reply);
13400 }
13401 else if (val)
13402 warning (_("Target does not support disconnected tracing."));
13403 }
13404
13405 int
13406 remote_target::core_of_thread (ptid_t ptid)
13407 {
13408 struct thread_info *info = find_thread_ptid (ptid);
13409
13410 if (info != NULL && info->priv != NULL)
13411 return get_remote_thread_info (info)->core;
13412
13413 return -1;
13414 }
13415
13416 void
13417 remote_target::set_circular_trace_buffer (int val)
13418 {
13419 struct remote_state *rs = get_remote_state ();
13420 char *reply;
13421
13422 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13423 "QTBuffer:circular:%x", val);
13424 putpkt (rs->buf);
13425 reply = remote_get_noisy_reply ();
13426 if (*reply == '\0')
13427 error (_("Target does not support this command."));
13428 if (strcmp (reply, "OK") != 0)
13429 error (_("Bogus reply from target: %s"), reply);
13430 }
13431
13432 traceframe_info_up
13433 remote_target::traceframe_info ()
13434 {
13435 gdb::optional<gdb::char_vector> text
13436 = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
13437 NULL);
13438 if (text)
13439 return parse_traceframe_info (text->data ());
13440
13441 return NULL;
13442 }
13443
13444 /* Handle the qTMinFTPILen packet. Returns the minimum length of
13445 instruction on which a fast tracepoint may be placed. Returns -1
13446 if the packet is not supported, and 0 if the minimum instruction
13447 length is unknown. */
13448
13449 int
13450 remote_target::get_min_fast_tracepoint_insn_len ()
13451 {
13452 struct remote_state *rs = get_remote_state ();
13453 char *reply;
13454
13455 /* If we're not debugging a process yet, the IPA can't be
13456 loaded. */
13457 if (!target_has_execution)
13458 return 0;
13459
13460 /* Make sure the remote is pointing at the right process. */
13461 set_general_process ();
13462
13463 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
13464 putpkt (rs->buf);
13465 reply = remote_get_noisy_reply ();
13466 if (*reply == '\0')
13467 return -1;
13468 else
13469 {
13470 ULONGEST min_insn_len;
13471
13472 unpack_varlen_hex (reply, &min_insn_len);
13473
13474 return (int) min_insn_len;
13475 }
13476 }
13477
13478 void
13479 remote_target::set_trace_buffer_size (LONGEST val)
13480 {
13481 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13482 {
13483 struct remote_state *rs = get_remote_state ();
13484 char *buf = rs->buf.data ();
13485 char *endbuf = buf + get_remote_packet_size ();
13486 enum packet_result result;
13487
13488 gdb_assert (val >= 0 || val == -1);
13489 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13490 /* Send -1 as literal "-1" to avoid host size dependency. */
13491 if (val < 0)
13492 {
13493 *buf++ = '-';
13494 buf += hexnumstr (buf, (ULONGEST) -val);
13495 }
13496 else
13497 buf += hexnumstr (buf, (ULONGEST) val);
13498
13499 putpkt (rs->buf);
13500 remote_get_noisy_reply ();
13501 result = packet_ok (rs->buf,
13502 &remote_protocol_packets[PACKET_QTBuffer_size]);
13503
13504 if (result != PACKET_OK)
13505 warning (_("Bogus reply from target: %s"), rs->buf.data ());
13506 }
13507 }
13508
13509 bool
13510 remote_target::set_trace_notes (const char *user, const char *notes,
13511 const char *stop_notes)
13512 {
13513 struct remote_state *rs = get_remote_state ();
13514 char *reply;
13515 char *buf = rs->buf.data ();
13516 char *endbuf = buf + get_remote_packet_size ();
13517 int nbytes;
13518
13519 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13520 if (user)
13521 {
13522 buf += xsnprintf (buf, endbuf - buf, "user:");
13523 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13524 buf += 2 * nbytes;
13525 *buf++ = ';';
13526 }
13527 if (notes)
13528 {
13529 buf += xsnprintf (buf, endbuf - buf, "notes:");
13530 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13531 buf += 2 * nbytes;
13532 *buf++ = ';';
13533 }
13534 if (stop_notes)
13535 {
13536 buf += xsnprintf (buf, endbuf - buf, "tstop:");
13537 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13538 buf += 2 * nbytes;
13539 *buf++ = ';';
13540 }
13541 /* Ensure the buffer is terminated. */
13542 *buf = '\0';
13543
13544 putpkt (rs->buf);
13545 reply = remote_get_noisy_reply ();
13546 if (*reply == '\0')
13547 return false;
13548
13549 if (strcmp (reply, "OK") != 0)
13550 error (_("Bogus reply from target: %s"), reply);
13551
13552 return true;
13553 }
13554
13555 bool
13556 remote_target::use_agent (bool use)
13557 {
13558 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13559 {
13560 struct remote_state *rs = get_remote_state ();
13561
13562 /* If the stub supports QAgent. */
13563 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
13564 putpkt (rs->buf);
13565 getpkt (&rs->buf, 0);
13566
13567 if (strcmp (rs->buf.data (), "OK") == 0)
13568 {
13569 ::use_agent = use;
13570 return true;
13571 }
13572 }
13573
13574 return false;
13575 }
13576
13577 bool
13578 remote_target::can_use_agent ()
13579 {
13580 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13581 }
13582
13583 struct btrace_target_info
13584 {
13585 /* The ptid of the traced thread. */
13586 ptid_t ptid;
13587
13588 /* The obtained branch trace configuration. */
13589 struct btrace_config conf;
13590 };
13591
13592 /* Reset our idea of our target's btrace configuration. */
13593
13594 static void
13595 remote_btrace_reset (remote_state *rs)
13596 {
13597 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13598 }
13599
13600 /* Synchronize the configuration with the target. */
13601
13602 void
13603 remote_target::btrace_sync_conf (const btrace_config *conf)
13604 {
13605 struct packet_config *packet;
13606 struct remote_state *rs;
13607 char *buf, *pos, *endbuf;
13608
13609 rs = get_remote_state ();
13610 buf = rs->buf.data ();
13611 endbuf = buf + get_remote_packet_size ();
13612
13613 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13614 if (packet_config_support (packet) == PACKET_ENABLE
13615 && conf->bts.size != rs->btrace_config.bts.size)
13616 {
13617 pos = buf;
13618 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13619 conf->bts.size);
13620
13621 putpkt (buf);
13622 getpkt (&rs->buf, 0);
13623
13624 if (packet_ok (buf, packet) == PACKET_ERROR)
13625 {
13626 if (buf[0] == 'E' && buf[1] == '.')
13627 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13628 else
13629 error (_("Failed to configure the BTS buffer size."));
13630 }
13631
13632 rs->btrace_config.bts.size = conf->bts.size;
13633 }
13634
13635 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13636 if (packet_config_support (packet) == PACKET_ENABLE
13637 && conf->pt.size != rs->btrace_config.pt.size)
13638 {
13639 pos = buf;
13640 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13641 conf->pt.size);
13642
13643 putpkt (buf);
13644 getpkt (&rs->buf, 0);
13645
13646 if (packet_ok (buf, packet) == PACKET_ERROR)
13647 {
13648 if (buf[0] == 'E' && buf[1] == '.')
13649 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13650 else
13651 error (_("Failed to configure the trace buffer size."));
13652 }
13653
13654 rs->btrace_config.pt.size = conf->pt.size;
13655 }
13656 }
13657
13658 /* Read the current thread's btrace configuration from the target and
13659 store it into CONF. */
13660
13661 static void
13662 btrace_read_config (struct btrace_config *conf)
13663 {
13664 gdb::optional<gdb::char_vector> xml
13665 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
13666 if (xml)
13667 parse_xml_btrace_conf (conf, xml->data ());
13668 }
13669
13670 /* Maybe reopen target btrace. */
13671
13672 void
13673 remote_target::remote_btrace_maybe_reopen ()
13674 {
13675 struct remote_state *rs = get_remote_state ();
13676 int btrace_target_pushed = 0;
13677 #if !defined (HAVE_LIBIPT)
13678 int warned = 0;
13679 #endif
13680
13681 /* Don't bother walking the entirety of the remote thread list when
13682 we know the feature isn't supported by the remote. */
13683 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
13684 return;
13685
13686 scoped_restore_current_thread restore_thread;
13687
13688 for (thread_info *tp : all_non_exited_threads ())
13689 {
13690 set_general_thread (tp->ptid);
13691
13692 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13693 btrace_read_config (&rs->btrace_config);
13694
13695 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13696 continue;
13697
13698 #if !defined (HAVE_LIBIPT)
13699 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13700 {
13701 if (!warned)
13702 {
13703 warned = 1;
13704 warning (_("Target is recording using Intel Processor Trace "
13705 "but support was disabled at compile time."));
13706 }
13707
13708 continue;
13709 }
13710 #endif /* !defined (HAVE_LIBIPT) */
13711
13712 /* Push target, once, but before anything else happens. This way our
13713 changes to the threads will be cleaned up by unpushing the target
13714 in case btrace_read_config () throws. */
13715 if (!btrace_target_pushed)
13716 {
13717 btrace_target_pushed = 1;
13718 record_btrace_push_target ();
13719 printf_filtered (_("Target is recording using %s.\n"),
13720 btrace_format_string (rs->btrace_config.format));
13721 }
13722
13723 tp->btrace.target = XCNEW (struct btrace_target_info);
13724 tp->btrace.target->ptid = tp->ptid;
13725 tp->btrace.target->conf = rs->btrace_config;
13726 }
13727 }
13728
13729 /* Enable branch tracing. */
13730
13731 struct btrace_target_info *
13732 remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
13733 {
13734 struct btrace_target_info *tinfo = NULL;
13735 struct packet_config *packet = NULL;
13736 struct remote_state *rs = get_remote_state ();
13737 char *buf = rs->buf.data ();
13738 char *endbuf = buf + get_remote_packet_size ();
13739
13740 switch (conf->format)
13741 {
13742 case BTRACE_FORMAT_BTS:
13743 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13744 break;
13745
13746 case BTRACE_FORMAT_PT:
13747 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13748 break;
13749 }
13750
13751 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13752 error (_("Target does not support branch tracing."));
13753
13754 btrace_sync_conf (conf);
13755
13756 set_general_thread (ptid);
13757
13758 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13759 putpkt (rs->buf);
13760 getpkt (&rs->buf, 0);
13761
13762 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13763 {
13764 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13765 error (_("Could not enable branch tracing for %s: %s"),
13766 target_pid_to_str (ptid).c_str (), &rs->buf[2]);
13767 else
13768 error (_("Could not enable branch tracing for %s."),
13769 target_pid_to_str (ptid).c_str ());
13770 }
13771
13772 tinfo = XCNEW (struct btrace_target_info);
13773 tinfo->ptid = ptid;
13774
13775 /* If we fail to read the configuration, we lose some information, but the
13776 tracing itself is not impacted. */
13777 try
13778 {
13779 btrace_read_config (&tinfo->conf);
13780 }
13781 catch (const gdb_exception_error &err)
13782 {
13783 if (err.message != NULL)
13784 warning ("%s", err.what ());
13785 }
13786
13787 return tinfo;
13788 }
13789
13790 /* Disable branch tracing. */
13791
13792 void
13793 remote_target::disable_btrace (struct btrace_target_info *tinfo)
13794 {
13795 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13796 struct remote_state *rs = get_remote_state ();
13797 char *buf = rs->buf.data ();
13798 char *endbuf = buf + get_remote_packet_size ();
13799
13800 if (packet_config_support (packet) != PACKET_ENABLE)
13801 error (_("Target does not support branch tracing."));
13802
13803 set_general_thread (tinfo->ptid);
13804
13805 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13806 putpkt (rs->buf);
13807 getpkt (&rs->buf, 0);
13808
13809 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13810 {
13811 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13812 error (_("Could not disable branch tracing for %s: %s"),
13813 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
13814 else
13815 error (_("Could not disable branch tracing for %s."),
13816 target_pid_to_str (tinfo->ptid).c_str ());
13817 }
13818
13819 xfree (tinfo);
13820 }
13821
13822 /* Teardown branch tracing. */
13823
13824 void
13825 remote_target::teardown_btrace (struct btrace_target_info *tinfo)
13826 {
13827 /* We must not talk to the target during teardown. */
13828 xfree (tinfo);
13829 }
13830
13831 /* Read the branch trace. */
13832
13833 enum btrace_error
13834 remote_target::read_btrace (struct btrace_data *btrace,
13835 struct btrace_target_info *tinfo,
13836 enum btrace_read_type type)
13837 {
13838 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13839 const char *annex;
13840
13841 if (packet_config_support (packet) != PACKET_ENABLE)
13842 error (_("Target does not support branch tracing."));
13843
13844 #if !defined(HAVE_LIBEXPAT)
13845 error (_("Cannot process branch tracing result. XML parsing not supported."));
13846 #endif
13847
13848 switch (type)
13849 {
13850 case BTRACE_READ_ALL:
13851 annex = "all";
13852 break;
13853 case BTRACE_READ_NEW:
13854 annex = "new";
13855 break;
13856 case BTRACE_READ_DELTA:
13857 annex = "delta";
13858 break;
13859 default:
13860 internal_error (__FILE__, __LINE__,
13861 _("Bad branch tracing read type: %u."),
13862 (unsigned int) type);
13863 }
13864
13865 gdb::optional<gdb::char_vector> xml
13866 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
13867 if (!xml)
13868 return BTRACE_ERR_UNKNOWN;
13869
13870 parse_xml_btrace (btrace, xml->data ());
13871
13872 return BTRACE_ERR_NONE;
13873 }
13874
13875 const struct btrace_config *
13876 remote_target::btrace_conf (const struct btrace_target_info *tinfo)
13877 {
13878 return &tinfo->conf;
13879 }
13880
13881 bool
13882 remote_target::augmented_libraries_svr4_read ()
13883 {
13884 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13885 == PACKET_ENABLE);
13886 }
13887
13888 /* Implementation of to_load. */
13889
13890 void
13891 remote_target::load (const char *name, int from_tty)
13892 {
13893 generic_load (name, from_tty);
13894 }
13895
13896 /* Accepts an integer PID; returns a string representing a file that
13897 can be opened on the remote side to get the symbols for the child
13898 process. Returns NULL if the operation is not supported. */
13899
13900 char *
13901 remote_target::pid_to_exec_file (int pid)
13902 {
13903 static gdb::optional<gdb::char_vector> filename;
13904 struct inferior *inf;
13905 char *annex = NULL;
13906
13907 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13908 return NULL;
13909
13910 inf = find_inferior_pid (pid);
13911 if (inf == NULL)
13912 internal_error (__FILE__, __LINE__,
13913 _("not currently attached to process %d"), pid);
13914
13915 if (!inf->fake_pid_p)
13916 {
13917 const int annex_size = 9;
13918
13919 annex = (char *) alloca (annex_size);
13920 xsnprintf (annex, annex_size, "%x", pid);
13921 }
13922
13923 filename = target_read_stralloc (current_top_target (),
13924 TARGET_OBJECT_EXEC_FILE, annex);
13925
13926 return filename ? filename->data () : nullptr;
13927 }
13928
13929 /* Implement the to_can_do_single_step target_ops method. */
13930
13931 int
13932 remote_target::can_do_single_step ()
13933 {
13934 /* We can only tell whether target supports single step or not by
13935 supported s and S vCont actions if the stub supports vContSupported
13936 feature. If the stub doesn't support vContSupported feature,
13937 we have conservatively to think target doesn't supports single
13938 step. */
13939 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13940 {
13941 struct remote_state *rs = get_remote_state ();
13942
13943 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13944 remote_vcont_probe ();
13945
13946 return rs->supports_vCont.s && rs->supports_vCont.S;
13947 }
13948 else
13949 return 0;
13950 }
13951
13952 /* Implementation of the to_execution_direction method for the remote
13953 target. */
13954
13955 enum exec_direction_kind
13956 remote_target::execution_direction ()
13957 {
13958 struct remote_state *rs = get_remote_state ();
13959
13960 return rs->last_resume_exec_dir;
13961 }
13962
13963 /* Return pointer to the thread_info struct which corresponds to
13964 THREAD_HANDLE (having length HANDLE_LEN). */
13965
13966 thread_info *
13967 remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
13968 int handle_len,
13969 inferior *inf)
13970 {
13971 for (thread_info *tp : all_non_exited_threads ())
13972 {
13973 remote_thread_info *priv = get_remote_thread_info (tp);
13974
13975 if (tp->inf == inf && priv != NULL)
13976 {
13977 if (handle_len != priv->thread_handle.size ())
13978 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
13979 handle_len, priv->thread_handle.size ());
13980 if (memcmp (thread_handle, priv->thread_handle.data (),
13981 handle_len) == 0)
13982 return tp;
13983 }
13984 }
13985
13986 return NULL;
13987 }
13988
13989 gdb::byte_vector
13990 remote_target::thread_info_to_thread_handle (struct thread_info *tp)
13991 {
13992 remote_thread_info *priv = get_remote_thread_info (tp);
13993 return priv->thread_handle;
13994 }
13995
13996 bool
13997 remote_target::can_async_p ()
13998 {
13999 struct remote_state *rs = get_remote_state ();
14000
14001 /* We don't go async if the user has explicitly prevented it with the
14002 "maint set target-async" command. */
14003 if (!target_async_permitted)
14004 return false;
14005
14006 /* We're async whenever the serial device is. */
14007 return serial_can_async_p (rs->remote_desc);
14008 }
14009
14010 bool
14011 remote_target::is_async_p ()
14012 {
14013 struct remote_state *rs = get_remote_state ();
14014
14015 if (!target_async_permitted)
14016 /* We only enable async when the user specifically asks for it. */
14017 return false;
14018
14019 /* We're async whenever the serial device is. */
14020 return serial_is_async_p (rs->remote_desc);
14021 }
14022
14023 /* Pass the SERIAL event on and up to the client. One day this code
14024 will be able to delay notifying the client of an event until the
14025 point where an entire packet has been received. */
14026
14027 static serial_event_ftype remote_async_serial_handler;
14028
14029 static void
14030 remote_async_serial_handler (struct serial *scb, void *context)
14031 {
14032 /* Don't propogate error information up to the client. Instead let
14033 the client find out about the error by querying the target. */
14034 inferior_event_handler (INF_REG_EVENT, NULL);
14035 }
14036
14037 static void
14038 remote_async_inferior_event_handler (gdb_client_data data)
14039 {
14040 inferior_event_handler (INF_REG_EVENT, data);
14041 }
14042
14043 void
14044 remote_target::async (int enable)
14045 {
14046 struct remote_state *rs = get_remote_state ();
14047
14048 if (enable)
14049 {
14050 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
14051
14052 /* If there are pending events in the stop reply queue tell the
14053 event loop to process them. */
14054 if (!rs->stop_reply_queue.empty ())
14055 mark_async_event_handler (rs->remote_async_inferior_event_token);
14056 /* For simplicity, below we clear the pending events token
14057 without remembering whether it is marked, so here we always
14058 mark it. If there's actually no pending notification to
14059 process, this ends up being a no-op (other than a spurious
14060 event-loop wakeup). */
14061 if (target_is_non_stop_p ())
14062 mark_async_event_handler (rs->notif_state->get_pending_events_token);
14063 }
14064 else
14065 {
14066 serial_async (rs->remote_desc, NULL, NULL);
14067 /* If the core is disabling async, it doesn't want to be
14068 disturbed with target events. Clear all async event sources
14069 too. */
14070 clear_async_event_handler (rs->remote_async_inferior_event_token);
14071 if (target_is_non_stop_p ())
14072 clear_async_event_handler (rs->notif_state->get_pending_events_token);
14073 }
14074 }
14075
14076 /* Implementation of the to_thread_events method. */
14077
14078 void
14079 remote_target::thread_events (int enable)
14080 {
14081 struct remote_state *rs = get_remote_state ();
14082 size_t size = get_remote_packet_size ();
14083
14084 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14085 return;
14086
14087 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
14088 putpkt (rs->buf);
14089 getpkt (&rs->buf, 0);
14090
14091 switch (packet_ok (rs->buf,
14092 &remote_protocol_packets[PACKET_QThreadEvents]))
14093 {
14094 case PACKET_OK:
14095 if (strcmp (rs->buf.data (), "OK") != 0)
14096 error (_("Remote refused setting thread events: %s"), rs->buf.data ());
14097 break;
14098 case PACKET_ERROR:
14099 warning (_("Remote failure reply: %s"), rs->buf.data ());
14100 break;
14101 case PACKET_UNKNOWN:
14102 break;
14103 }
14104 }
14105
14106 static void
14107 set_remote_cmd (const char *args, int from_tty)
14108 {
14109 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
14110 }
14111
14112 static void
14113 show_remote_cmd (const char *args, int from_tty)
14114 {
14115 /* We can't just use cmd_show_list here, because we want to skip
14116 the redundant "show remote Z-packet" and the legacy aliases. */
14117 struct cmd_list_element *list = remote_show_cmdlist;
14118 struct ui_out *uiout = current_uiout;
14119
14120 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
14121 for (; list != NULL; list = list->next)
14122 if (strcmp (list->name, "Z-packet") == 0)
14123 continue;
14124 else if (list->type == not_set_cmd)
14125 /* Alias commands are exactly like the original, except they
14126 don't have the normal type. */
14127 continue;
14128 else
14129 {
14130 ui_out_emit_tuple option_emitter (uiout, "option");
14131
14132 uiout->field_string ("name", list->name);
14133 uiout->text (": ");
14134 if (list->type == show_cmd)
14135 do_show_command (NULL, from_tty, list);
14136 else
14137 cmd_func (list, NULL, from_tty);
14138 }
14139 }
14140
14141
14142 /* Function to be called whenever a new objfile (shlib) is detected. */
14143 static void
14144 remote_new_objfile (struct objfile *objfile)
14145 {
14146 remote_target *remote = get_current_remote_target ();
14147
14148 if (remote != NULL) /* Have a remote connection. */
14149 remote->remote_check_symbols ();
14150 }
14151
14152 /* Pull all the tracepoints defined on the target and create local
14153 data structures representing them. We don't want to create real
14154 tracepoints yet, we don't want to mess up the user's existing
14155 collection. */
14156
14157 int
14158 remote_target::upload_tracepoints (struct uploaded_tp **utpp)
14159 {
14160 struct remote_state *rs = get_remote_state ();
14161 char *p;
14162
14163 /* Ask for a first packet of tracepoint definition. */
14164 putpkt ("qTfP");
14165 getpkt (&rs->buf, 0);
14166 p = rs->buf.data ();
14167 while (*p && *p != 'l')
14168 {
14169 parse_tracepoint_definition (p, utpp);
14170 /* Ask for another packet of tracepoint definition. */
14171 putpkt ("qTsP");
14172 getpkt (&rs->buf, 0);
14173 p = rs->buf.data ();
14174 }
14175 return 0;
14176 }
14177
14178 int
14179 remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
14180 {
14181 struct remote_state *rs = get_remote_state ();
14182 char *p;
14183
14184 /* Ask for a first packet of variable definition. */
14185 putpkt ("qTfV");
14186 getpkt (&rs->buf, 0);
14187 p = rs->buf.data ();
14188 while (*p && *p != 'l')
14189 {
14190 parse_tsv_definition (p, utsvp);
14191 /* Ask for another packet of variable definition. */
14192 putpkt ("qTsV");
14193 getpkt (&rs->buf, 0);
14194 p = rs->buf.data ();
14195 }
14196 return 0;
14197 }
14198
14199 /* The "set/show range-stepping" show hook. */
14200
14201 static void
14202 show_range_stepping (struct ui_file *file, int from_tty,
14203 struct cmd_list_element *c,
14204 const char *value)
14205 {
14206 fprintf_filtered (file,
14207 _("Debugger's willingness to use range stepping "
14208 "is %s.\n"), value);
14209 }
14210
14211 /* Return true if the vCont;r action is supported by the remote
14212 stub. */
14213
14214 bool
14215 remote_target::vcont_r_supported ()
14216 {
14217 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14218 remote_vcont_probe ();
14219
14220 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14221 && get_remote_state ()->supports_vCont.r);
14222 }
14223
14224 /* The "set/show range-stepping" set hook. */
14225
14226 static void
14227 set_range_stepping (const char *ignore_args, int from_tty,
14228 struct cmd_list_element *c)
14229 {
14230 /* When enabling, check whether range stepping is actually supported
14231 by the target, and warn if not. */
14232 if (use_range_stepping)
14233 {
14234 remote_target *remote = get_current_remote_target ();
14235 if (remote == NULL
14236 || !remote->vcont_r_supported ())
14237 warning (_("Range stepping is not supported by the current target"));
14238 }
14239 }
14240
14241 void
14242 _initialize_remote (void)
14243 {
14244 struct cmd_list_element *cmd;
14245 const char *cmd_name;
14246
14247 /* architecture specific data */
14248 remote_g_packet_data_handle =
14249 gdbarch_data_register_pre_init (remote_g_packet_data_init);
14250
14251 add_target (remote_target_info, remote_target::open);
14252 add_target (extended_remote_target_info, extended_remote_target::open);
14253
14254 /* Hook into new objfile notification. */
14255 gdb::observers::new_objfile.attach (remote_new_objfile);
14256
14257 #if 0
14258 init_remote_threadtests ();
14259 #endif
14260
14261 /* set/show remote ... */
14262
14263 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
14264 Remote protocol specific variables.\n\
14265 Configure various remote-protocol specific variables such as\n\
14266 the packets being used."),
14267 &remote_set_cmdlist, "set remote ",
14268 0 /* allow-unknown */, &setlist);
14269 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14270 Remote protocol specific variables.\n\
14271 Configure various remote-protocol specific variables such as\n\
14272 the packets being used."),
14273 &remote_show_cmdlist, "show remote ",
14274 0 /* allow-unknown */, &showlist);
14275
14276 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14277 Compare section data on target to the exec file.\n\
14278 Argument is a single section name (default: all loaded sections).\n\
14279 To compare only read-only loaded sections, specify the -r option."),
14280 &cmdlist);
14281
14282 add_cmd ("packet", class_maintenance, packet_command, _("\
14283 Send an arbitrary packet to a remote target.\n\
14284 maintenance packet TEXT\n\
14285 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14286 this command sends the string TEXT to the inferior, and displays the\n\
14287 response packet. GDB supplies the initial `$' character, and the\n\
14288 terminating `#' character and checksum."),
14289 &maintenancelist);
14290
14291 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14292 Set whether to send break if interrupted."), _("\
14293 Show whether to send break if interrupted."), _("\
14294 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14295 set_remotebreak, show_remotebreak,
14296 &setlist, &showlist);
14297 cmd_name = "remotebreak";
14298 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14299 deprecate_cmd (cmd, "set remote interrupt-sequence");
14300 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14301 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14302 deprecate_cmd (cmd, "show remote interrupt-sequence");
14303
14304 add_setshow_enum_cmd ("interrupt-sequence", class_support,
14305 interrupt_sequence_modes, &interrupt_sequence_mode,
14306 _("\
14307 Set interrupt sequence to remote target."), _("\
14308 Show interrupt sequence to remote target."), _("\
14309 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14310 NULL, show_interrupt_sequence,
14311 &remote_set_cmdlist,
14312 &remote_show_cmdlist);
14313
14314 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14315 &interrupt_on_connect, _("\
14316 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14317 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14318 If set, interrupt sequence is sent to remote target."),
14319 NULL, NULL,
14320 &remote_set_cmdlist, &remote_show_cmdlist);
14321
14322 /* Install commands for configuring memory read/write packets. */
14323
14324 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14325 Set the maximum number of bytes per memory write packet (deprecated)."),
14326 &setlist);
14327 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14328 Show the maximum number of bytes per memory write packet (deprecated)."),
14329 &showlist);
14330 add_cmd ("memory-write-packet-size", no_class,
14331 set_memory_write_packet_size, _("\
14332 Set the maximum number of bytes per memory-write packet.\n\
14333 Specify the number of bytes in a packet or 0 (zero) for the\n\
14334 default packet size. The actual limit is further reduced\n\
14335 dependent on the target. Specify ``fixed'' to disable the\n\
14336 further restriction and ``limit'' to enable that restriction."),
14337 &remote_set_cmdlist);
14338 add_cmd ("memory-read-packet-size", no_class,
14339 set_memory_read_packet_size, _("\
14340 Set the maximum number of bytes per memory-read packet.\n\
14341 Specify the number of bytes in a packet or 0 (zero) for the\n\
14342 default packet size. The actual limit is further reduced\n\
14343 dependent on the target. Specify ``fixed'' to disable the\n\
14344 further restriction and ``limit'' to enable that restriction."),
14345 &remote_set_cmdlist);
14346 add_cmd ("memory-write-packet-size", no_class,
14347 show_memory_write_packet_size,
14348 _("Show the maximum number of bytes per memory-write packet."),
14349 &remote_show_cmdlist);
14350 add_cmd ("memory-read-packet-size", no_class,
14351 show_memory_read_packet_size,
14352 _("Show the maximum number of bytes per memory-read packet."),
14353 &remote_show_cmdlist);
14354
14355 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
14356 &remote_hw_watchpoint_limit, _("\
14357 Set the maximum number of target hardware watchpoints."), _("\
14358 Show the maximum number of target hardware watchpoints."), _("\
14359 Specify \"unlimited\" for unlimited hardware watchpoints."),
14360 NULL, show_hardware_watchpoint_limit,
14361 &remote_set_cmdlist,
14362 &remote_show_cmdlist);
14363 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
14364 no_class,
14365 &remote_hw_watchpoint_length_limit, _("\
14366 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14367 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14368 Specify \"unlimited\" to allow watchpoints of unlimited size."),
14369 NULL, show_hardware_watchpoint_length_limit,
14370 &remote_set_cmdlist, &remote_show_cmdlist);
14371 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
14372 &remote_hw_breakpoint_limit, _("\
14373 Set the maximum number of target hardware breakpoints."), _("\
14374 Show the maximum number of target hardware breakpoints."), _("\
14375 Specify \"unlimited\" for unlimited hardware breakpoints."),
14376 NULL, show_hardware_breakpoint_limit,
14377 &remote_set_cmdlist, &remote_show_cmdlist);
14378
14379 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14380 &remote_address_size, _("\
14381 Set the maximum size of the address (in bits) in a memory packet."), _("\
14382 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14383 NULL,
14384 NULL, /* FIXME: i18n: */
14385 &setlist, &showlist);
14386
14387 init_all_packet_configs ();
14388
14389 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14390 "X", "binary-download", 1);
14391
14392 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14393 "vCont", "verbose-resume", 0);
14394
14395 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14396 "QPassSignals", "pass-signals", 0);
14397
14398 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14399 "QCatchSyscalls", "catch-syscalls", 0);
14400
14401 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14402 "QProgramSignals", "program-signals", 0);
14403
14404 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14405 "QSetWorkingDir", "set-working-dir", 0);
14406
14407 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14408 "QStartupWithShell", "startup-with-shell", 0);
14409
14410 add_packet_config_cmd (&remote_protocol_packets
14411 [PACKET_QEnvironmentHexEncoded],
14412 "QEnvironmentHexEncoded", "environment-hex-encoded",
14413 0);
14414
14415 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14416 "QEnvironmentReset", "environment-reset",
14417 0);
14418
14419 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14420 "QEnvironmentUnset", "environment-unset",
14421 0);
14422
14423 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14424 "qSymbol", "symbol-lookup", 0);
14425
14426 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14427 "P", "set-register", 1);
14428
14429 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14430 "p", "fetch-register", 1);
14431
14432 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14433 "Z0", "software-breakpoint", 0);
14434
14435 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14436 "Z1", "hardware-breakpoint", 0);
14437
14438 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14439 "Z2", "write-watchpoint", 0);
14440
14441 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14442 "Z3", "read-watchpoint", 0);
14443
14444 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14445 "Z4", "access-watchpoint", 0);
14446
14447 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14448 "qXfer:auxv:read", "read-aux-vector", 0);
14449
14450 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14451 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14452
14453 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14454 "qXfer:features:read", "target-features", 0);
14455
14456 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14457 "qXfer:libraries:read", "library-info", 0);
14458
14459 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14460 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14461
14462 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14463 "qXfer:memory-map:read", "memory-map", 0);
14464
14465 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14466 "qXfer:osdata:read", "osdata", 0);
14467
14468 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14469 "qXfer:threads:read", "threads", 0);
14470
14471 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14472 "qXfer:siginfo:read", "read-siginfo-object", 0);
14473
14474 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14475 "qXfer:siginfo:write", "write-siginfo-object", 0);
14476
14477 add_packet_config_cmd
14478 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14479 "qXfer:traceframe-info:read", "traceframe-info", 0);
14480
14481 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14482 "qXfer:uib:read", "unwind-info-block", 0);
14483
14484 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14485 "qGetTLSAddr", "get-thread-local-storage-address",
14486 0);
14487
14488 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14489 "qGetTIBAddr", "get-thread-information-block-address",
14490 0);
14491
14492 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14493 "bc", "reverse-continue", 0);
14494
14495 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14496 "bs", "reverse-step", 0);
14497
14498 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14499 "qSupported", "supported-packets", 0);
14500
14501 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14502 "qSearch:memory", "search-memory", 0);
14503
14504 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14505 "qTStatus", "trace-status", 0);
14506
14507 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14508 "vFile:setfs", "hostio-setfs", 0);
14509
14510 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14511 "vFile:open", "hostio-open", 0);
14512
14513 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14514 "vFile:pread", "hostio-pread", 0);
14515
14516 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14517 "vFile:pwrite", "hostio-pwrite", 0);
14518
14519 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14520 "vFile:close", "hostio-close", 0);
14521
14522 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14523 "vFile:unlink", "hostio-unlink", 0);
14524
14525 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14526 "vFile:readlink", "hostio-readlink", 0);
14527
14528 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14529 "vFile:fstat", "hostio-fstat", 0);
14530
14531 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14532 "vAttach", "attach", 0);
14533
14534 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14535 "vRun", "run", 0);
14536
14537 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14538 "QStartNoAckMode", "noack", 0);
14539
14540 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14541 "vKill", "kill", 0);
14542
14543 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14544 "qAttached", "query-attached", 0);
14545
14546 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14547 "ConditionalTracepoints",
14548 "conditional-tracepoints", 0);
14549
14550 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14551 "ConditionalBreakpoints",
14552 "conditional-breakpoints", 0);
14553
14554 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14555 "BreakpointCommands",
14556 "breakpoint-commands", 0);
14557
14558 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14559 "FastTracepoints", "fast-tracepoints", 0);
14560
14561 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14562 "TracepointSource", "TracepointSource", 0);
14563
14564 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14565 "QAllow", "allow", 0);
14566
14567 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14568 "StaticTracepoints", "static-tracepoints", 0);
14569
14570 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14571 "InstallInTrace", "install-in-trace", 0);
14572
14573 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14574 "qXfer:statictrace:read", "read-sdata-object", 0);
14575
14576 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14577 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14578
14579 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14580 "QDisableRandomization", "disable-randomization", 0);
14581
14582 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14583 "QAgent", "agent", 0);
14584
14585 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14586 "QTBuffer:size", "trace-buffer-size", 0);
14587
14588 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14589 "Qbtrace:off", "disable-btrace", 0);
14590
14591 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14592 "Qbtrace:bts", "enable-btrace-bts", 0);
14593
14594 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14595 "Qbtrace:pt", "enable-btrace-pt", 0);
14596
14597 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14598 "qXfer:btrace", "read-btrace", 0);
14599
14600 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14601 "qXfer:btrace-conf", "read-btrace-conf", 0);
14602
14603 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14604 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14605
14606 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14607 "multiprocess-feature", "multiprocess-feature", 0);
14608
14609 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14610 "swbreak-feature", "swbreak-feature", 0);
14611
14612 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14613 "hwbreak-feature", "hwbreak-feature", 0);
14614
14615 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14616 "fork-event-feature", "fork-event-feature", 0);
14617
14618 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14619 "vfork-event-feature", "vfork-event-feature", 0);
14620
14621 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14622 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14623
14624 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14625 "vContSupported", "verbose-resume-supported", 0);
14626
14627 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14628 "exec-event-feature", "exec-event-feature", 0);
14629
14630 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14631 "vCtrlC", "ctrl-c", 0);
14632
14633 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14634 "QThreadEvents", "thread-events", 0);
14635
14636 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14637 "N stop reply", "no-resumed-stop-reply", 0);
14638
14639 /* Assert that we've registered "set remote foo-packet" commands
14640 for all packet configs. */
14641 {
14642 int i;
14643
14644 for (i = 0; i < PACKET_MAX; i++)
14645 {
14646 /* Ideally all configs would have a command associated. Some
14647 still don't though. */
14648 int excepted;
14649
14650 switch (i)
14651 {
14652 case PACKET_QNonStop:
14653 case PACKET_EnableDisableTracepoints_feature:
14654 case PACKET_tracenz_feature:
14655 case PACKET_DisconnectedTracing_feature:
14656 case PACKET_augmented_libraries_svr4_read_feature:
14657 case PACKET_qCRC:
14658 /* Additions to this list need to be well justified:
14659 pre-existing packets are OK; new packets are not. */
14660 excepted = 1;
14661 break;
14662 default:
14663 excepted = 0;
14664 break;
14665 }
14666
14667 /* This catches both forgetting to add a config command, and
14668 forgetting to remove a packet from the exception list. */
14669 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14670 }
14671 }
14672
14673 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14674 Z sub-packet has its own set and show commands, but users may
14675 have sets to this variable in their .gdbinit files (or in their
14676 documentation). */
14677 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14678 &remote_Z_packet_detect, _("\
14679 Set use of remote protocol `Z' packets."), _("\
14680 Show use of remote protocol `Z' packets."), _("\
14681 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14682 packets."),
14683 set_remote_protocol_Z_packet_cmd,
14684 show_remote_protocol_Z_packet_cmd,
14685 /* FIXME: i18n: Use of remote protocol
14686 `Z' packets is %s. */
14687 &remote_set_cmdlist, &remote_show_cmdlist);
14688
14689 add_prefix_cmd ("remote", class_files, remote_command, _("\
14690 Manipulate files on the remote system.\n\
14691 Transfer files to and from the remote target system."),
14692 &remote_cmdlist, "remote ",
14693 0 /* allow-unknown */, &cmdlist);
14694
14695 add_cmd ("put", class_files, remote_put_command,
14696 _("Copy a local file to the remote system."),
14697 &remote_cmdlist);
14698
14699 add_cmd ("get", class_files, remote_get_command,
14700 _("Copy a remote file to the local system."),
14701 &remote_cmdlist);
14702
14703 add_cmd ("delete", class_files, remote_delete_command,
14704 _("Delete a remote file."),
14705 &remote_cmdlist);
14706
14707 add_setshow_string_noescape_cmd ("exec-file", class_files,
14708 &remote_exec_file_var, _("\
14709 Set the remote pathname for \"run\"."), _("\
14710 Show the remote pathname for \"run\"."), NULL,
14711 set_remote_exec_file,
14712 show_remote_exec_file,
14713 &remote_set_cmdlist,
14714 &remote_show_cmdlist);
14715
14716 add_setshow_boolean_cmd ("range-stepping", class_run,
14717 &use_range_stepping, _("\
14718 Enable or disable range stepping."), _("\
14719 Show whether target-assisted range stepping is enabled."), _("\
14720 If on, and the target supports it, when stepping a source line, GDB\n\
14721 tells the target to step the corresponding range of addresses itself instead\n\
14722 of issuing multiple single-steps. This speeds up source level\n\
14723 stepping. If off, GDB always issues single-steps, even if range\n\
14724 stepping is supported by the target. The default is on."),
14725 set_range_stepping,
14726 show_range_stepping,
14727 &setlist,
14728 &showlist);
14729
14730 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
14731 Set watchdog timer."), _("\
14732 Show watchdog timer."), _("\
14733 When non-zero, this timeout is used instead of waiting forever for a target\n\
14734 to finish a low-level step or continue operation. If the specified amount\n\
14735 of time passes without a response from the target, an error occurs."),
14736 NULL,
14737 show_watchdog,
14738 &setlist, &showlist);
14739
14740 /* Eventually initialize fileio. See fileio.c */
14741 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14742 }