Introduce array_operation
[deliverable/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
3666a048 3 Copyright (C) 1988-2021 Free Software Foundation, Inc.
c906108c 4
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c5aa993b 19
23860348 20/* See the GDB User Guide for details of the GDB remote protocol. */
c5aa993b 21
c906108c 22#include "defs.h"
c906108c
SS
23#include <ctype.h>
24#include <fcntl.h>
c906108c 25#include "inferior.h"
45741a9c 26#include "infrun.h"
c906108c
SS
27#include "bfd.h"
28#include "symfile.h"
29#include "target.h"
3b3dac9b 30#include "process-stratum-target.h"
c906108c
SS
31#include "gdbcmd.h"
32#include "objfiles.h"
33#include "gdb-stabs.h"
34#include "gdbthread.h"
c2c6d25f 35#include "remote.h"
722247f1 36#include "remote-notif.h"
4e052eda 37#include "regcache.h"
fd0407d6 38#include "value.h"
76727919 39#include "observable.h"
a77053c2 40#include "solib.h"
37a105a1
DJ
41#include "cli/cli-decode.h"
42#include "cli/cli-setshow.h"
424163ea 43#include "target-descriptions.h"
a4453b7e 44#include "gdb_bfd.h"
268a13a5
TT
45#include "gdbsupport/filestuff.h"
46#include "gdbsupport/rsp-low.h"
6b940e6a 47#include "disasm.h"
f00aae0f 48#include "location.h"
c906108c 49
268a13a5 50#include "gdbsupport/gdb_sys_time.h"
c906108c 51
400b5eca 52#include "gdbsupport/event-loop.h"
c2c6d25f 53#include "event-top.h"
2acceee2 54#include "inf-loop.h"
43ff13b4 55
c906108c
SS
56#include <signal.h>
57#include "serial.h"
58
7e10abd1 59#include "gdbcore.h"
6240bebf 60
449092f6 61#include "remote-fileio.h"
a6b151f1 62#include "gdb/fileio.h"
53ce3c39 63#include <sys/stat.h>
dc146f7c 64#include "xml-support.h"
449092f6 65
fd79ecee
DJ
66#include "memory-map.h"
67
35b1e5cc
SS
68#include "tracepoint.h"
69#include "ax.h"
70#include "ax-gdb.h"
268a13a5 71#include "gdbsupport/agent.h"
9accd112 72#include "btrace.h"
c0272db5 73#include "record-btrace.h"
325fac50 74#include <algorithm>
268a13a5
TT
75#include "gdbsupport/scoped_restore.h"
76#include "gdbsupport/environ.h"
77#include "gdbsupport/byte-vector.h"
4a72de73 78#include "gdbsupport/search.h"
39ef2f62 79#include <algorithm>
9d6eea31 80#include <unordered_map>
93b54c8e 81#include "async-event.h"
35b1e5cc 82
f6ac5f3d
PA
83/* The remote target. */
84
d9f719f1
PA
85static const char remote_doc[] = N_("\
86Use a remote computer via a serial line, using a gdb-specific protocol.\n\
87Specify the serial device it is connected to\n\
88(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
89
cda09ec9
SM
90/* See remote.h */
91
02349803 92bool remote_debug = false;
cda09ec9 93
6b8edb51
PA
94#define OPAQUETHREADBYTES 8
95
96/* a 64 bit opaque identifier */
97typedef unsigned char threadref[OPAQUETHREADBYTES];
98
99struct gdb_ext_thread_info;
100struct threads_listing_context;
101typedef int (*rmt_thread_action) (threadref *ref, void *context);
102struct protocol_feature;
103struct packet_reg;
104
105struct stop_reply;
32603266 106typedef std::unique_ptr<stop_reply> stop_reply_up;
6b8edb51
PA
107
108/* Generic configuration support for packets the stub optionally
109 supports. Allows the user to specify the use of the packet as well
110 as allowing GDB to auto-detect support in the remote stub. */
111
112enum packet_support
113 {
114 PACKET_SUPPORT_UNKNOWN = 0,
115 PACKET_ENABLE,
116 PACKET_DISABLE
117 };
118
119/* Analyze a packet's return value and update the packet config
120 accordingly. */
121
122enum packet_result
123{
124 PACKET_ERROR,
125 PACKET_OK,
126 PACKET_UNKNOWN
127};
128
129struct threads_listing_context;
3c69da40
PA
130
131/* Stub vCont actions support.
132
133 Each field is a boolean flag indicating whether the stub reports
134 support for the corresponding action. */
135
136struct vCont_action_support
137{
138 /* vCont;t */
139 bool t = false;
140
141 /* vCont;r */
142 bool r = false;
143
144 /* vCont;s */
145 bool s = false;
146
147 /* vCont;S */
148 bool S = false;
149};
150
405feb71 151/* About this many threadids fit in a packet. */
3c69da40
PA
152
153#define MAXTHREADLISTRESULTS 32
154
155/* Data for the vFile:pread readahead cache. */
156
157struct readahead_cache
158{
159 /* Invalidate the readahead cache. */
160 void invalidate ();
161
162 /* Invalidate the readahead cache if it is holding data for FD. */
163 void invalidate_fd (int fd);
164
165 /* Serve pread from the readahead cache. Returns number of bytes
166 read, or 0 if the request can't be served from the cache. */
167 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
168
169 /* The file descriptor for the file that is being cached. -1 if the
170 cache is invalid. */
171 int fd = -1;
172
173 /* The offset into the file that the cache buffer corresponds
174 to. */
175 ULONGEST offset = 0;
176
177 /* The buffer holding the cache contents. */
178 gdb_byte *buf = nullptr;
179 /* The buffer's size. We try to read as much as fits into a packet
180 at a time. */
181 size_t bufsize = 0;
182
183 /* Cache hit and miss counters. */
184 ULONGEST hit_count = 0;
185 ULONGEST miss_count = 0;
186};
187
188/* Description of the remote protocol for a given architecture. */
189
190struct packet_reg
191{
192 long offset; /* Offset into G packet. */
193 long regnum; /* GDB's internal register number. */
194 LONGEST pnum; /* Remote protocol register number. */
195 int in_g_packet; /* Always part of G packet. */
196 /* long size in bytes; == register_size (target_gdbarch (), regnum);
197 at present. */
198 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
199 at present. */
200};
201
202struct remote_arch_state
203{
204 explicit remote_arch_state (struct gdbarch *gdbarch);
205
206 /* Description of the remote protocol registers. */
207 long sizeof_g_packet;
208
209 /* Description of the remote protocol registers indexed by REGNUM
210 (making an array gdbarch_num_regs in size). */
211 std::unique_ptr<packet_reg[]> regs;
212
213 /* This is the size (in chars) of the first response to the ``g''
214 packet. It is used as a heuristic when determining the maximum
215 size of memory-read and memory-write packets. A target will
216 typically only reserve a buffer large enough to hold the ``g''
217 packet. The size does not include packet overhead (headers and
218 trailers). */
219 long actual_register_packet_size;
220
221 /* This is the maximum size (in chars) of a non read/write packet.
222 It is also used as a cap on the size of read/write packets. */
223 long remote_packet_size;
224};
225
226/* Description of the remote protocol state for the currently
227 connected target. This is per-target state, and independent of the
228 selected architecture. */
229
230class remote_state
231{
232public:
233
234 remote_state ();
235 ~remote_state ();
236
237 /* Get the remote arch state for GDBARCH. */
238 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
239
240public: /* data */
241
242 /* A buffer to use for incoming packets, and its current size. The
243 buffer is grown dynamically for larger incoming packets.
244 Outgoing packets may also be constructed in this buffer.
8d64371b 245 The size of the buffer is always at least REMOTE_PACKET_SIZE;
3c69da40
PA
246 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
247 packets. */
8d64371b 248 gdb::char_vector buf;
3c69da40
PA
249
250 /* True if we're going through initial connection setup (finding out
251 about the remote side's threads, relocating symbols, etc.). */
252 bool starting_up = false;
253
254 /* If we negotiated packet size explicitly (and thus can bypass
255 heuristics for the largest packet size that will not overflow
256 a buffer in the stub), this will be set to that packet size.
257 Otherwise zero, meaning to use the guessed size. */
258 long explicit_packet_size = 0;
259
260 /* remote_wait is normally called when the target is running and
261 waits for a stop reply packet. But sometimes we need to call it
262 when the target is already stopped. We can send a "?" packet
263 and have remote_wait read the response. Or, if we already have
264 the response, we can stash it in BUF and tell remote_wait to
265 skip calling getpkt. This flag is set when BUF contains a
266 stop reply packet and the target is not waiting. */
267 int cached_wait_status = 0;
268
269 /* True, if in no ack mode. That is, neither GDB nor the stub will
270 expect acks from each other. The connection is assumed to be
271 reliable. */
272 bool noack_mode = false;
273
274 /* True if we're connected in extended remote mode. */
275 bool extended = false;
276
277 /* True if we resumed the target and we're waiting for the target to
278 stop. In the mean time, we can't start another command/query.
279 The remote server wouldn't be ready to process it, so we'd
280 timeout waiting for a reply that would never come and eventually
281 we'd close the connection. This can happen in asynchronous mode
282 because we allow GDB commands while the target is running. */
283 bool waiting_for_stop_reply = false;
284
285 /* The status of the stub support for the various vCont actions. */
286 vCont_action_support supports_vCont;
5b6d1e4f
PA
287 /* Whether vCont support was probed already. This is a workaround
288 until packet_support is per-connection. */
289 bool supports_vCont_probed;
3c69da40
PA
290
291 /* True if the user has pressed Ctrl-C, but the target hasn't
292 responded to that. */
293 bool ctrlc_pending_p = false;
294
295 /* True if we saw a Ctrl-C while reading or writing from/to the
296 remote descriptor. At that point it is not safe to send a remote
297 interrupt packet, so we instead remember we saw the Ctrl-C and
298 process it once we're done with sending/receiving the current
299 packet, which should be shortly. If however that takes too long,
300 and the user presses Ctrl-C again, we offer to disconnect. */
301 bool got_ctrlc_during_io = false;
302
303 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
304 remote_open knows that we don't have a file open when the program
305 starts. */
306 struct serial *remote_desc = nullptr;
307
308 /* These are the threads which we last sent to the remote system. The
309 TID member will be -1 for all or -2 for not sent yet. */
310 ptid_t general_thread = null_ptid;
311 ptid_t continue_thread = null_ptid;
312
313 /* This is the traceframe which we last selected on the remote system.
314 It will be -1 if no traceframe is selected. */
315 int remote_traceframe_number = -1;
316
317 char *last_pass_packet = nullptr;
318
319 /* The last QProgramSignals packet sent to the target. We bypass
320 sending a new program signals list down to the target if the new
321 packet is exactly the same as the last we sent. IOW, we only let
322 the target know about program signals list changes. */
323 char *last_program_signals_packet = nullptr;
324
325 gdb_signal last_sent_signal = GDB_SIGNAL_0;
326
327 bool last_sent_step = false;
328
329 /* The execution direction of the last resume we got. */
330 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
331
332 char *finished_object = nullptr;
333 char *finished_annex = nullptr;
334 ULONGEST finished_offset = 0;
335
336 /* Should we try the 'ThreadInfo' query packet?
337
338 This variable (NOT available to the user: auto-detect only!)
339 determines whether GDB will use the new, simpler "ThreadInfo"
340 query or the older, more complex syntax for thread queries.
341 This is an auto-detect variable (set to true at each connect,
342 and set to false when the target fails to recognize it). */
343 bool use_threadinfo_query = false;
344 bool use_threadextra_query = false;
345
346 threadref echo_nextthread {};
347 threadref nextthread {};
348 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
349
350 /* The state of remote notification. */
351 struct remote_notif_state *notif_state = nullptr;
352
353 /* The branch trace configuration. */
354 struct btrace_config btrace_config {};
355
356 /* The argument to the last "vFile:setfs:" packet we sent, used
357 to avoid sending repeated unnecessary "vFile:setfs:" packets.
358 Initialized to -1 to indicate that no "vFile:setfs:" packet
359 has yet been sent. */
360 int fs_pid = -1;
361
362 /* A readahead cache for vFile:pread. Often, reading a binary
363 involves a sequence of small reads. E.g., when parsing an ELF
364 file. A readahead cache helps mostly the case of remote
365 debugging on a connection with higher latency, due to the
366 request/reply nature of the RSP. We only cache data for a single
367 file descriptor at a time. */
368 struct readahead_cache readahead_cache;
369
370 /* The list of already fetched and acknowledged stop events. This
371 queue is used for notification Stop, and other notifications
372 don't need queue for their events, because the notification
373 events of Stop can't be consumed immediately, so that events
374 should be queued first, and be consumed by remote_wait_{ns,as}
375 one per time. Other notifications can consume their events
376 immediately, so queue is not needed for them. */
953edf2b 377 std::vector<stop_reply_up> stop_reply_queue;
3c69da40
PA
378
379 /* Asynchronous signal handle registered as event loop source for
380 when we have pending events ready to be passed to the core. */
381 struct async_event_handler *remote_async_inferior_event_token = nullptr;
382
383 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
384 ``forever'' still use the normal timeout mechanism. This is
385 currently used by the ASYNC code to guarentee that target reads
386 during the initial connect always time-out. Once getpkt has been
387 modified to return a timeout indication and, in turn
388 remote_wait()/wait_for_inferior() have gained a timeout parameter
389 this can go away. */
390 int wait_forever_enabled_p = 1;
391
392private:
393 /* Mapping of remote protocol data for each gdbarch. Usually there
394 is only one entry here, though we may see more with stubs that
395 support multi-process. */
396 std::unordered_map<struct gdbarch *, remote_arch_state>
397 m_arch_states;
398};
6b8edb51 399
d9f719f1
PA
400static const target_info remote_target_info = {
401 "remote",
402 N_("Remote serial target in gdb-specific protocol"),
403 remote_doc
404};
405
3b3dac9b 406class remote_target : public process_stratum_target
f6ac5f3d
PA
407{
408public:
3b3dac9b 409 remote_target () = default;
6b8edb51 410 ~remote_target () override;
f6ac5f3d 411
d9f719f1
PA
412 const target_info &info () const override
413 { return remote_target_info; }
f6ac5f3d 414
121b3efd
PA
415 const char *connection_string () override;
416
f6ac5f3d
PA
417 thread_control_capabilities get_thread_control_capabilities () override
418 { return tc_schedlock; }
419
d9f719f1
PA
420 /* Open a remote connection. */
421 static void open (const char *, int);
422
f6ac5f3d
PA
423 void close () override;
424
425 void detach (inferior *, int) override;
426 void disconnect (const char *, int) override;
427
428 void commit_resume () override;
429 void resume (ptid_t, int, enum gdb_signal) override;
b60cea74 430 ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
f6ac5f3d
PA
431
432 void fetch_registers (struct regcache *, int) override;
433 void store_registers (struct regcache *, int) override;
434 void prepare_to_store (struct regcache *) override;
435
436 void files_info () override;
437
438 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
439
440 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
441 enum remove_bp_reason) override;
442
443
57810aa7
PA
444 bool stopped_by_sw_breakpoint () override;
445 bool supports_stopped_by_sw_breakpoint () override;
f6ac5f3d 446
57810aa7 447 bool stopped_by_hw_breakpoint () override;
f6ac5f3d 448
57810aa7 449 bool supports_stopped_by_hw_breakpoint () override;
f6ac5f3d 450
57810aa7 451 bool stopped_by_watchpoint () override;
f6ac5f3d 452
57810aa7 453 bool stopped_data_address (CORE_ADDR *) override;
f6ac5f3d 454
57810aa7 455 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
f6ac5f3d
PA
456
457 int can_use_hw_breakpoint (enum bptype, int, int) override;
458
459 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
460
461 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
462
463 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
464
465 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
466 struct expression *) override;
467
468 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
469 struct expression *) override;
470
471 void kill () override;
472
473 void load (const char *, int) override;
474
475 void mourn_inferior () override;
476
adc6a863 477 void pass_signals (gdb::array_view<const unsigned char>) override;
f6ac5f3d
PA
478
479 int set_syscall_catchpoint (int, bool, int,
480 gdb::array_view<const int>) override;
481
adc6a863 482 void program_signals (gdb::array_view<const unsigned char>) override;
f6ac5f3d 483
57810aa7 484 bool thread_alive (ptid_t ptid) override;
f6ac5f3d
PA
485
486 const char *thread_name (struct thread_info *) override;
487
488 void update_thread_list () override;
489
a068643d 490 std::string pid_to_str (ptid_t) override;
f6ac5f3d
PA
491
492 const char *extra_thread_info (struct thread_info *) override;
493
494 ptid_t get_ada_task_ptid (long lwp, long thread) override;
495
496 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
497 int handle_len,
498 inferior *inf) override;
499
3d6c6204
KB
500 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
501 override;
502
f6ac5f3d
PA
503 void stop (ptid_t) override;
504
505 void interrupt () override;
506
507 void pass_ctrlc () override;
508
509 enum target_xfer_status xfer_partial (enum target_object object,
510 const char *annex,
511 gdb_byte *readbuf,
512 const gdb_byte *writebuf,
513 ULONGEST offset, ULONGEST len,
514 ULONGEST *xfered_len) override;
515
516 ULONGEST get_memory_xfer_limit () override;
517
518 void rcmd (const char *command, struct ui_file *output) override;
519
520 char *pid_to_exec_file (int pid) override;
521
522 void log_command (const char *cmd) override
523 {
524 serial_log_command (this, cmd);
525 }
526
527 CORE_ADDR get_thread_local_address (ptid_t ptid,
528 CORE_ADDR load_module_addr,
529 CORE_ADDR offset) override;
530
57810aa7 531 bool can_execute_reverse () override;
f6ac5f3d
PA
532
533 std::vector<mem_region> memory_map () override;
534
535 void flash_erase (ULONGEST address, LONGEST length) override;
536
537 void flash_done () override;
538
539 const struct target_desc *read_description () override;
540
541 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
542 const gdb_byte *pattern, ULONGEST pattern_len,
543 CORE_ADDR *found_addrp) override;
544
57810aa7 545 bool can_async_p () override;
f6ac5f3d 546
57810aa7 547 bool is_async_p () override;
f6ac5f3d
PA
548
549 void async (int) override;
550
5b6d1e4f
PA
551 int async_wait_fd () override;
552
f6ac5f3d
PA
553 void thread_events (int) override;
554
555 int can_do_single_step () override;
556
557 void terminal_inferior () override;
558
559 void terminal_ours () override;
560
57810aa7 561 bool supports_non_stop () override;
f6ac5f3d 562
57810aa7 563 bool supports_multi_process () override;
f6ac5f3d 564
57810aa7 565 bool supports_disable_randomization () override;
f6ac5f3d 566
57810aa7 567 bool filesystem_is_local () override;
f6ac5f3d
PA
568
569
570 int fileio_open (struct inferior *inf, const char *filename,
571 int flags, int mode, int warn_if_slow,
572 int *target_errno) override;
573
574 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
575 ULONGEST offset, int *target_errno) override;
576
577 int fileio_pread (int fd, gdb_byte *read_buf, int len,
578 ULONGEST offset, int *target_errno) override;
579
580 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
581
582 int fileio_close (int fd, int *target_errno) override;
583
584 int fileio_unlink (struct inferior *inf,
585 const char *filename,
586 int *target_errno) override;
587
588 gdb::optional<std::string>
589 fileio_readlink (struct inferior *inf,
590 const char *filename,
591 int *target_errno) override;
592
57810aa7 593 bool supports_enable_disable_tracepoint () override;
f6ac5f3d 594
57810aa7 595 bool supports_string_tracing () override;
f6ac5f3d 596
57810aa7 597 bool supports_evaluation_of_breakpoint_conditions () override;
f6ac5f3d 598
57810aa7 599 bool can_run_breakpoint_commands () override;
f6ac5f3d
PA
600
601 void trace_init () override;
602
603 void download_tracepoint (struct bp_location *location) override;
604
57810aa7 605 bool can_download_tracepoint () override;
f6ac5f3d
PA
606
607 void download_trace_state_variable (const trace_state_variable &tsv) override;
608
609 void enable_tracepoint (struct bp_location *location) override;
610
611 void disable_tracepoint (struct bp_location *location) override;
612
613 void trace_set_readonly_regions () override;
614
615 void trace_start () override;
616
617 int get_trace_status (struct trace_status *ts) override;
618
619 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
620 override;
621
622 void trace_stop () override;
623
624 int trace_find (enum trace_find_type type, int num,
625 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
626
57810aa7 627 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
f6ac5f3d
PA
628
629 int save_trace_data (const char *filename) override;
630
631 int upload_tracepoints (struct uploaded_tp **utpp) override;
632
633 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
634
635 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
636
637 int get_min_fast_tracepoint_insn_len () override;
638
639 void set_disconnected_tracing (int val) override;
640
641 void set_circular_trace_buffer (int val) override;
642
643 void set_trace_buffer_size (LONGEST val) override;
644
57810aa7
PA
645 bool set_trace_notes (const char *user, const char *notes,
646 const char *stopnotes) override;
f6ac5f3d
PA
647
648 int core_of_thread (ptid_t ptid) override;
649
650 int verify_memory (const gdb_byte *data,
651 CORE_ADDR memaddr, ULONGEST size) override;
652
653
57810aa7 654 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
f6ac5f3d
PA
655
656 void set_permissions () override;
657
658 bool static_tracepoint_marker_at (CORE_ADDR,
659 struct static_tracepoint_marker *marker)
660 override;
661
662 std::vector<static_tracepoint_marker>
663 static_tracepoint_markers_by_strid (const char *id) override;
664
665 traceframe_info_up traceframe_info () override;
666
57810aa7
PA
667 bool use_agent (bool use) override;
668 bool can_use_agent () override;
f6ac5f3d
PA
669
670 struct btrace_target_info *enable_btrace (ptid_t ptid,
671 const struct btrace_config *conf) override;
672
673 void disable_btrace (struct btrace_target_info *tinfo) override;
674
675 void teardown_btrace (struct btrace_target_info *tinfo) override;
676
677 enum btrace_error read_btrace (struct btrace_data *data,
678 struct btrace_target_info *btinfo,
679 enum btrace_read_type type) override;
680
681 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
57810aa7 682 bool augmented_libraries_svr4_read () override;
5ab2fbf1 683 bool follow_fork (bool, bool) override;
4ca51187 684 void follow_exec (struct inferior *, const char *) override;
f6ac5f3d
PA
685 int insert_fork_catchpoint (int) override;
686 int remove_fork_catchpoint (int) override;
687 int insert_vfork_catchpoint (int) override;
688 int remove_vfork_catchpoint (int) override;
689 int insert_exec_catchpoint (int) override;
690 int remove_exec_catchpoint (int) override;
691 enum exec_direction_kind execution_direction () override;
692
6b8edb51
PA
693public: /* Remote specific methods. */
694
695 void remote_download_command_source (int num, ULONGEST addr,
696 struct command_line *cmds);
697
698 void remote_file_put (const char *local_file, const char *remote_file,
699 int from_tty);
700 void remote_file_get (const char *remote_file, const char *local_file,
701 int from_tty);
702 void remote_file_delete (const char *remote_file, int from_tty);
703
704 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
705 ULONGEST offset, int *remote_errno);
706 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
707 ULONGEST offset, int *remote_errno);
708 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
709 ULONGEST offset, int *remote_errno);
710
711 int remote_hostio_send_command (int command_bytes, int which_packet,
aa2838cc 712 int *remote_errno, const char **attachment,
6b8edb51
PA
713 int *attachment_len);
714 int remote_hostio_set_filesystem (struct inferior *inf,
715 int *remote_errno);
716 /* We should get rid of this and use fileio_open directly. */
717 int remote_hostio_open (struct inferior *inf, const char *filename,
718 int flags, int mode, int warn_if_slow,
719 int *remote_errno);
720 int remote_hostio_close (int fd, int *remote_errno);
721
722 int remote_hostio_unlink (inferior *inf, const char *filename,
723 int *remote_errno);
724
725 struct remote_state *get_remote_state ();
726
727 long get_remote_packet_size (void);
728 long get_memory_packet_size (struct memory_packet_config *config);
729
730 long get_memory_write_packet_size ();
731 long get_memory_read_packet_size ();
732
733 char *append_pending_thread_resumptions (char *p, char *endp,
734 ptid_t ptid);
d9f719f1 735 static void open_1 (const char *name, int from_tty, int extended_p);
f6ac5f3d 736 void start_remote (int from_tty, int extended_p);
00431a78 737 void remote_detach_1 (struct inferior *inf, int from_tty);
6b8edb51
PA
738
739 char *append_resumption (char *p, char *endp,
740 ptid_t ptid, int step, gdb_signal siggnal);
741 int remote_resume_with_vcont (ptid_t ptid, int step,
742 gdb_signal siggnal);
743
64d38fdd 744 thread_info *add_current_inferior_and_thread (const char *wait_status);
6b8edb51
PA
745
746 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
b60cea74 747 target_wait_flags options);
6b8edb51 748 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
b60cea74 749 target_wait_flags options);
6b8edb51
PA
750
751 ptid_t process_stop_reply (struct stop_reply *stop_reply,
752 target_waitstatus *status);
753
8f66807b
AB
754 ptid_t select_thread_for_ambiguous_stop_reply
755 (const struct target_waitstatus *status);
756
6b8edb51
PA
757 void remote_notice_new_inferior (ptid_t currthread, int executing);
758
759 void process_initial_stop_replies (int from_tty);
760
00431a78 761 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
6b8edb51
PA
762
763 void btrace_sync_conf (const btrace_config *conf);
764
765 void remote_btrace_maybe_reopen ();
766
767 void remove_new_fork_children (threads_listing_context *context);
768 void kill_new_fork_children (int pid);
769 void discard_pending_stop_replies (struct inferior *inf);
770 int stop_reply_queue_length ();
771
772 void check_pending_events_prevent_wildcard_vcont
773 (int *may_global_wildcard_vcont);
774
775 void discard_pending_stop_replies_in_queue ();
776 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
777 struct stop_reply *queued_stop_reply (ptid_t ptid);
778 int peek_stop_reply (ptid_t ptid);
bb277751 779 void remote_parse_stop_reply (const char *buf, stop_reply *event);
6b8edb51
PA
780
781 void remote_stop_ns (ptid_t ptid);
782 void remote_interrupt_as ();
783 void remote_interrupt_ns ();
784
785 char *remote_get_noisy_reply ();
786 int remote_query_attached (int pid);
9ab8741a 787 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
6b8edb51
PA
788 int try_open_exec);
789
790 ptid_t remote_current_thread (ptid_t oldpid);
e3b2741b 791 ptid_t get_current_thread (const char *wait_status);
6b8edb51
PA
792
793 void set_thread (ptid_t ptid, int gen);
794 void set_general_thread (ptid_t ptid);
795 void set_continue_thread (ptid_t ptid);
796 void set_general_process ();
797
798 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
799
cecb1912 800 int remote_unpack_thread_info_response (const char *pkt, threadref *expectedref,
6b8edb51
PA
801 gdb_ext_thread_info *info);
802 int remote_get_threadinfo (threadref *threadid, int fieldset,
803 gdb_ext_thread_info *info);
804
cecb1912 805 int parse_threadlist_response (const char *pkt, int result_limit,
6b8edb51
PA
806 threadref *original_echo,
807 threadref *resultlist,
808 int *doneflag);
809 int remote_get_threadlist (int startflag, threadref *nextthread,
810 int result_limit, int *done, int *result_count,
811 threadref *threadlist);
812
813 int remote_threadlist_iterator (rmt_thread_action stepfunction,
814 void *context, int looplimit);
815
816 int remote_get_threads_with_ql (threads_listing_context *context);
817 int remote_get_threads_with_qxfer (threads_listing_context *context);
818 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
819
820 void extended_remote_restart ();
821
822 void get_offsets ();
823
824 void remote_check_symbols ();
825
826 void remote_supported_packet (const struct protocol_feature *feature,
827 enum packet_support support,
828 const char *argument);
829
830 void remote_query_supported ();
831
832 void remote_packet_size (const protocol_feature *feature,
833 packet_support support, const char *value);
834
835 void remote_serial_quit_handler ();
836
837 void remote_detach_pid (int pid);
838
839 void remote_vcont_probe ();
840
841 void remote_resume_with_hc (ptid_t ptid, int step,
842 gdb_signal siggnal);
843
844 void send_interrupt_sequence ();
845 void interrupt_query ();
846
847 void remote_notif_get_pending_events (notif_client *nc);
848
849 int fetch_register_using_p (struct regcache *regcache,
850 packet_reg *reg);
851 int send_g_packet ();
852 void process_g_packet (struct regcache *regcache);
853 void fetch_registers_using_g (struct regcache *regcache);
854 int store_register_using_P (const struct regcache *regcache,
855 packet_reg *reg);
856 void store_registers_using_G (const struct regcache *regcache);
857
858 void set_remote_traceframe ();
859
860 void check_binary_download (CORE_ADDR addr);
861
862 target_xfer_status remote_write_bytes_aux (const char *header,
863 CORE_ADDR memaddr,
864 const gdb_byte *myaddr,
865 ULONGEST len_units,
866 int unit_size,
867 ULONGEST *xfered_len_units,
868 char packet_format,
869 int use_length);
870
871 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
872 const gdb_byte *myaddr, ULONGEST len,
873 int unit_size, ULONGEST *xfered_len);
874
875 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
876 ULONGEST len_units,
877 int unit_size, ULONGEST *xfered_len_units);
878
879 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
880 ULONGEST memaddr,
881 ULONGEST len,
882 int unit_size,
883 ULONGEST *xfered_len);
884
885 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
886 gdb_byte *myaddr, ULONGEST len,
887 int unit_size,
888 ULONGEST *xfered_len);
889
890 packet_result remote_send_printf (const char *format, ...)
891 ATTRIBUTE_PRINTF (2, 3);
892
893 target_xfer_status remote_flash_write (ULONGEST address,
894 ULONGEST length, ULONGEST *xfered_len,
895 const gdb_byte *data);
896
897 int readchar (int timeout);
898
899 void remote_serial_write (const char *str, int len);
900
901 int putpkt (const char *buf);
902 int putpkt_binary (const char *buf, int cnt);
903
8d64371b
TT
904 int putpkt (const gdb::char_vector &buf)
905 {
906 return putpkt (buf.data ());
907 }
908
6b8edb51 909 void skip_frame ();
8d64371b
TT
910 long read_frame (gdb::char_vector *buf_p);
911 void getpkt (gdb::char_vector *buf, int forever);
912 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
6b8edb51 913 int expecting_notif, int *is_notif);
8d64371b
TT
914 int getpkt_sane (gdb::char_vector *buf, int forever);
915 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
6b8edb51
PA
916 int *is_notif);
917 int remote_vkill (int pid);
918 void remote_kill_k ();
919
920 void extended_remote_disable_randomization (int val);
921 int extended_remote_run (const std::string &args);
922
923 void send_environment_packet (const char *action,
924 const char *packet,
925 const char *value);
926
927 void extended_remote_environment_support ();
3c69da40 928 void extended_remote_set_inferior_cwd ();
80152258 929
3c69da40
PA
930 target_xfer_status remote_write_qxfer (const char *object_name,
931 const char *annex,
932 const gdb_byte *writebuf,
933 ULONGEST offset, LONGEST len,
934 ULONGEST *xfered_len,
935 struct packet_config *packet);
43c3a0e4 936
3c69da40
PA
937 target_xfer_status remote_read_qxfer (const char *object_name,
938 const char *annex,
939 gdb_byte *readbuf, ULONGEST offset,
940 LONGEST len,
941 ULONGEST *xfered_len,
942 struct packet_config *packet);
43c3a0e4 943
3c69da40 944 void push_stop_reply (struct stop_reply *new_event);
43c3a0e4 945
3c69da40 946 bool vcont_r_supported ();
43c3a0e4 947
3c69da40 948 void packet_command (const char *args, int from_tty);
43c3a0e4 949
3c69da40 950private: /* data fields */
43c3a0e4 951
3c69da40
PA
952 /* The remote state. Don't reference this directly. Use the
953 get_remote_state method instead. */
954 remote_state m_remote_state;
43c3a0e4
PA
955};
956
3c69da40
PA
957static const target_info extended_remote_target_info = {
958 "extended-remote",
959 N_("Extended remote serial target in gdb-specific protocol"),
960 remote_doc
961};
ea9c271d 962
3c69da40
PA
963/* Set up the extended remote target by extending the standard remote
964 target and adding to it. */
965
966class extended_remote_target final : public remote_target
ea9c271d 967{
9d6eea31 968public:
3c69da40
PA
969 const target_info &info () const override
970 { return extended_remote_target_info; }
9d6eea31 971
3c69da40
PA
972 /* Open an extended-remote connection. */
973 static void open (const char *, int);
de44f5a7 974
3c69da40
PA
975 bool can_create_inferior () override { return true; }
976 void create_inferior (const char *, const std::string &,
977 char **, int) override;
9d6eea31 978
3c69da40 979 void detach (inferior *, int) override;
9d6eea31 980
3c69da40
PA
981 bool can_attach () override { return true; }
982 void attach (const char *, int) override;
be2a5f71 983
3c69da40
PA
984 void post_attach (int) override;
985 bool supports_disable_randomization () override;
986};
1e51243a 987
3c69da40 988/* Per-program-space data key. */
7b4a314f
TT
989static const struct program_space_key<char, gdb::xfree_deleter<char>>
990 remote_pspace_data;
2d717e4f 991
3c69da40
PA
992/* The variable registered as the control variable used by the
993 remote exec-file commands. While the remote exec-file setting is
994 per-program-space, the set/show machinery uses this as the
995 location of the remote exec-file value. */
996static char *remote_exec_file_var;
a6f3e723 997
3c69da40
PA
998/* The size to align memory write packets, when practical. The protocol
999 does not guarantee any alignment, and gdb will generate short
1000 writes and unaligned writes, but even as a best-effort attempt this
1001 can improve bulk transfers. For instance, if a write is misaligned
1002 relative to the target's data bus, the stub may need to make an extra
1003 round trip fetching data from the target. This doesn't make a
1004 huge difference, but it's easy to do, so we try to be helpful.
82f73884 1005
3c69da40
PA
1006 The alignment chosen is arbitrary; usually data bus width is
1007 important here, not the possibly larger cache line size. */
1008enum { REMOTE_ALIGN_WRITES = 16 };
82f73884 1009
3c69da40 1010/* Prototypes for local functions. */
74531fed 1011
3c69da40 1012static int hexnumlen (ULONGEST num);
782b2b07 1013
3c69da40 1014static int stubhex (int ch);
5d93a237 1015
3c69da40 1016static int hexnumstr (char *, ULONGEST);
048094ac 1017
3c69da40 1018static int hexnumnstr (char *, ULONGEST, int);
47f8a51d 1019
3c69da40 1020static CORE_ADDR remote_address_masked (CORE_ADDR);
262e1174 1021
3c69da40 1022static void print_packet (const char *);
747dc59d 1023
cecb1912 1024static int stub_unpack_int (const char *buff, int fieldlength);
5e4a05c4 1025
3c69da40 1026struct packet_config;
b73be471 1027
3c69da40 1028static void show_packet_config_cmd (struct packet_config *config);
280ceea3 1029
3c69da40
PA
1030static void show_remote_protocol_packet_cmd (struct ui_file *file,
1031 int from_tty,
1032 struct cmd_list_element *c,
1033 const char *value);
8e88304f 1034
3c69da40 1035static ptid_t read_ptid (const char *buf, const char **obuf);
3a00c802 1036
3c69da40 1037static void remote_async_inferior_event_handler (gdb_client_data);
b80fafe3 1038
eefce37f 1039static bool remote_read_description_p (struct target_ops *target);
88b496c3 1040
05be00a8 1041static void remote_console_output (const char *msg);
5965e028 1042
3c69da40 1043static void remote_btrace_reset (remote_state *rs);
f4abbc16 1044
5b6d1e4f 1045static void remote_unpush_and_throw (remote_target *target);
15a201c8 1046
3c69da40 1047/* For "remote". */
80152258 1048
3c69da40 1049static struct cmd_list_element *remote_cmdlist;
9d6eea31 1050
3c69da40 1051/* For "set remote" and "show remote". */
6b8edb51 1052
3c69da40
PA
1053static struct cmd_list_element *remote_set_cmdlist;
1054static struct cmd_list_element *remote_show_cmdlist;
6b8edb51 1055
3c69da40 1056/* Controls whether GDB is willing to use range stepping. */
6b8edb51 1057
491144b5 1058static bool use_range_stepping = true;
3c69da40 1059
c9d22089
SM
1060/* From the remote target's point of view, each thread is in one of these three
1061 states. */
1062enum class resume_state
1063{
1064 /* Not resumed - we haven't been asked to resume this thread. */
1065 NOT_RESUMED,
1066
1067 /* We have been asked to resume this thread, but haven't sent a vCont action
1068 for it yet. We'll need to consider it next time commit_resume is
1069 called. */
1070 RESUMED_PENDING_VCONT,
1071
1072 /* We have been asked to resume this thread, and we have sent a vCont action
1073 for it. */
1074 RESUMED,
1075};
1076
1077/* Information about a thread's pending vCont-resume. Used when a thread is in
1078 the remote_resume_state::RESUMED_PENDING_VCONT state. remote_target::resume
1079 stores this information which is then picked up by
1080 remote_target::commit_resume to know which is the proper action for this
1081 thread to include in the vCont packet. */
1082struct resumed_pending_vcont_info
1083{
1084 /* True if the last resume call for this thread was a step request, false
1085 if a continue request. */
1086 bool step;
1087
1088 /* The signal specified in the last resume call for this thread. */
1089 gdb_signal sig;
1090};
1091
7aabaf9d
SM
1092/* Private data that we'll store in (struct thread_info)->priv. */
1093struct remote_thread_info : public private_thread_info
dc146f7c 1094{
7aabaf9d
SM
1095 std::string extra;
1096 std::string name;
1097 int core = -1;
799a2abe 1098
f6327dcb
KB
1099 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1100 sequence of bytes. */
7aabaf9d 1101 gdb::byte_vector thread_handle;
f6327dcb 1102
799a2abe 1103 /* Whether the target stopped for a breakpoint/watchpoint. */
7aabaf9d 1104 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
799a2abe
PA
1105
1106 /* This is set to the data address of the access causing the target
1107 to stop for a watchpoint. */
7aabaf9d 1108 CORE_ADDR watch_data_address = 0;
85ad3aaf 1109
c9d22089 1110 /* Get the thread's resume state. */
a6c11cbb 1111 enum resume_state get_resume_state () const
c9d22089
SM
1112 {
1113 return m_resume_state;
1114 }
1115
1116 /* Put the thread in the NOT_RESUMED state. */
1117 void set_not_resumed ()
1118 {
1119 m_resume_state = resume_state::NOT_RESUMED;
1120 }
85ad3aaf 1121
c9d22089
SM
1122 /* Put the thread in the RESUMED_PENDING_VCONT state. */
1123 void set_resumed_pending_vcont (bool step, gdb_signal sig)
1124 {
1125 m_resume_state = resume_state::RESUMED_PENDING_VCONT;
1126 m_resumed_pending_vcont_info.step = step;
1127 m_resumed_pending_vcont_info.sig = sig;
1128 }
85ad3aaf 1129
c9d22089 1130 /* Get the information this thread's pending vCont-resumption.
85ad3aaf 1131
c9d22089
SM
1132 Must only be called if the thread is in the RESUMED_PENDING_VCONT resume
1133 state. */
1134 const struct resumed_pending_vcont_info &resumed_pending_vcont_info () const
1135 {
1136 gdb_assert (m_resume_state == resume_state::RESUMED_PENDING_VCONT);
1137
1138 return m_resumed_pending_vcont_info;
1139 }
1140
1141 /* Put the thread in the VCONT_RESUMED state. */
1142 void set_resumed ()
1143 {
1144 m_resume_state = resume_state::RESUMED;
1145 }
1146
1147private:
1148 /* Resume state for this thread. This is used to implement vCont action
1149 coalescing (only when the target operates in non-stop mode).
1150
1151 remote_target::resume moves the thread to the RESUMED_PENDING_VCONT state,
1152 which notes that this thread must be considered in the next commit_resume
1153 call.
1154
1155 remote_target::commit_resume sends a vCont packet with actions for the
1156 threads in the RESUMED_PENDING_VCONT state and moves them to the
1157 VCONT_RESUMED state.
1158
1159 When reporting a stop to the core for a thread, that thread is moved back
1160 to the NOT_RESUMED state. */
1161 enum resume_state m_resume_state = resume_state::NOT_RESUMED;
1162
1163 /* Extra info used if the thread is in the RESUMED_PENDING_VCONT state. */
1164 struct resumed_pending_vcont_info m_resumed_pending_vcont_info;
dc146f7c
VP
1165};
1166
de44f5a7 1167remote_state::remote_state ()
8d64371b 1168 : buf (400)
de44f5a7 1169{
de44f5a7
PA
1170}
1171
1172remote_state::~remote_state ()
1173{
1174 xfree (this->last_pass_packet);
1175 xfree (this->last_program_signals_packet);
de44f5a7
PA
1176 xfree (this->finished_object);
1177 xfree (this->finished_annex);
cf792862
TT
1178}
1179
35b1e5cc
SS
1180/* Utility: generate error from an incoming stub packet. */
1181static void
1182trace_error (char *buf)
1183{
1184 if (*buf++ != 'E')
1185 return; /* not an error msg */
1186 switch (*buf)
1187 {
1188 case '1': /* malformed packet error */
1189 if (*++buf == '0') /* general case: */
1190 error (_("remote.c: error in outgoing packet."));
1191 else
1192 error (_("remote.c: error in outgoing packet at field #%ld."),
1193 strtol (buf, NULL, 16));
35b1e5cc
SS
1194 default:
1195 error (_("Target returns error code '%s'."), buf);
1196 }
1197}
1198
1199/* Utility: wait for reply from stub, while accepting "O" packets. */
b6bb3468 1200
6b8edb51
PA
1201char *
1202remote_target::remote_get_noisy_reply ()
35b1e5cc 1203{
b6bb3468
PA
1204 struct remote_state *rs = get_remote_state ();
1205
35b1e5cc
SS
1206 do /* Loop on reply from remote stub. */
1207 {
1208 char *buf;
a744cf53 1209
0df8b418 1210 QUIT; /* Allow user to bail out with ^C. */
8d64371b
TT
1211 getpkt (&rs->buf, 0);
1212 buf = rs->buf.data ();
ad91cd99 1213 if (buf[0] == 'E')
35b1e5cc 1214 trace_error (buf);
61012eef 1215 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
1216 {
1217 ULONGEST ul;
1218 CORE_ADDR from, to, org_to;
256642e8 1219 const char *p, *pp;
dde08ee1 1220 int adjusted_size = 0;
7556d4a4 1221 int relocated = 0;
dde08ee1
PA
1222
1223 p = buf + strlen ("qRelocInsn:");
1224 pp = unpack_varlen_hex (p, &ul);
1225 if (*pp != ';')
cb91c06a 1226 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
1227 from = ul;
1228
1229 p = pp + 1;
a9cbf802 1230 unpack_varlen_hex (p, &ul);
dde08ee1
PA
1231 to = ul;
1232
1233 org_to = to;
1234
a70b8144 1235 try
dde08ee1 1236 {
f5656ead 1237 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 1238 relocated = 1;
dde08ee1 1239 }
230d2906 1240 catch (const gdb_exception &ex)
7556d4a4
PA
1241 {
1242 if (ex.error == MEMORY_ERROR)
1243 {
1244 /* Propagate memory errors silently back to the
1245 target. The stub may have limited the range of
1246 addresses we can write to, for example. */
1247 }
1248 else
1249 {
1250 /* Something unexpectedly bad happened. Be verbose
1251 so we can tell what, and propagate the error back
1252 to the stub, so it doesn't get stuck waiting for
1253 a response. */
1254 exception_fprintf (gdb_stderr, ex,
1255 _("warning: relocating instruction: "));
1256 }
1257 putpkt ("E01");
1258 }
1259
1260 if (relocated)
dde08ee1
PA
1261 {
1262 adjusted_size = to - org_to;
1263
8d64371b 1264 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
1265 putpkt (buf);
1266 }
dde08ee1 1267 }
ad91cd99 1268 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
1269 remote_console_output (buf + 1); /* 'O' message from stub */
1270 else
0df8b418 1271 return buf; /* Here's the actual reply. */
35b1e5cc
SS
1272 }
1273 while (1);
1274}
3c3bea1c 1275
9d6eea31
PA
1276struct remote_arch_state *
1277remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
d01949b6 1278{
43c3a0e4
PA
1279 remote_arch_state *rsa;
1280
1281 auto it = this->m_arch_states.find (gdbarch);
1282 if (it == this->m_arch_states.end ())
9d6eea31 1283 {
43c3a0e4
PA
1284 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1285 std::forward_as_tuple (gdbarch),
1286 std::forward_as_tuple (gdbarch));
1287 rsa = &p.first->second;
9d6eea31
PA
1288
1289 /* Make sure that the packet buffer is plenty big enough for
1290 this architecture. */
8d64371b
TT
1291 if (this->buf.size () < rsa->remote_packet_size)
1292 this->buf.resize (2 * rsa->remote_packet_size);
9d6eea31 1293 }
43c3a0e4
PA
1294 else
1295 rsa = &it->second;
1296
1297 return rsa;
d01949b6
AC
1298}
1299
0b83947e
DJ
1300/* Fetch the global remote target state. */
1301
6b8edb51
PA
1302remote_state *
1303remote_target::get_remote_state ()
0b83947e
DJ
1304{
1305 /* Make sure that the remote architecture state has been
1306 initialized, because doing so might reallocate rs->buf. Any
1307 function which calls getpkt also needs to be mindful of changes
1308 to rs->buf, but this call limits the number of places which run
1309 into trouble. */
3c69da40 1310 m_remote_state.get_remote_arch_state (target_gdbarch ());
0b83947e 1311
3c69da40 1312 return &m_remote_state;
0b83947e
DJ
1313}
1314
94585166
DB
1315/* Fetch the remote exec-file from the current program space. */
1316
1317static const char *
1318get_remote_exec_file (void)
1319{
1320 char *remote_exec_file;
1321
7b4a314f 1322 remote_exec_file = remote_pspace_data.get (current_program_space);
94585166
DB
1323 if (remote_exec_file == NULL)
1324 return "";
1325
1326 return remote_exec_file;
1327}
1328
1329/* Set the remote exec file for PSPACE. */
1330
1331static void
1332set_pspace_remote_exec_file (struct program_space *pspace,
7b4a314f 1333 const char *remote_exec_file)
94585166 1334{
7b4a314f 1335 char *old_file = remote_pspace_data.get (pspace);
94585166
DB
1336
1337 xfree (old_file);
7b4a314f 1338 remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
94585166
DB
1339}
1340
1341/* The "set/show remote exec-file" set command hook. */
1342
1343static void
eb4c3f4a 1344set_remote_exec_file (const char *ignored, int from_tty,
94585166
DB
1345 struct cmd_list_element *c)
1346{
1347 gdb_assert (remote_exec_file_var != NULL);
1348 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1349}
1350
1351/* The "set/show remote exec-file" show command hook. */
1352
1353static void
1354show_remote_exec_file (struct ui_file *file, int from_tty,
1355 struct cmd_list_element *cmd, const char *value)
1356{
acdf84a6 1357 fprintf_filtered (file, "%s\n", get_remote_exec_file ());
94585166
DB
1358}
1359
c21236dc
PA
1360static int
1361map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 1362{
74ca34ce 1363 int regnum, num_remote_regs, offset;
74ca34ce 1364 struct packet_reg **remote_regs;
ea9c271d 1365
4a22f64d 1366 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 1367 {
c21236dc 1368 struct packet_reg *r = &regs[regnum];
baef701f 1369
4a22f64d 1370 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
1371 /* Do not try to fetch zero-sized (placeholder) registers. */
1372 r->pnum = -1;
1373 else
1374 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1375
b323314b 1376 r->regnum = regnum;
74ca34ce
DJ
1377 }
1378
1379 /* Define the g/G packet format as the contents of each register
1380 with a remote protocol number, in order of ascending protocol
1381 number. */
1382
224c3ddb 1383 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 1384 for (num_remote_regs = 0, regnum = 0;
4a22f64d 1385 regnum < gdbarch_num_regs (gdbarch);
f57d151a 1386 regnum++)
c21236dc
PA
1387 if (regs[regnum].pnum != -1)
1388 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 1389
39ef2f62
CB
1390 std::sort (remote_regs, remote_regs + num_remote_regs,
1391 [] (const packet_reg *a, const packet_reg *b)
1392 { return a->pnum < b->pnum; });
74ca34ce
DJ
1393
1394 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1395 {
1396 remote_regs[regnum]->in_g_packet = 1;
1397 remote_regs[regnum]->offset = offset;
4a22f64d 1398 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
1399 }
1400
c21236dc
PA
1401 return offset;
1402}
1403
1404/* Given the architecture described by GDBARCH, return the remote
1405 protocol register's number and the register's offset in the g/G
1406 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1407 If the target does not have a mapping for REGNUM, return false,
1408 otherwise, return true. */
1409
1410int
1411remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1412 int *pnum, int *poffset)
1413{
c21236dc
PA
1414 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1415
b80406ac 1416 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
c21236dc 1417
b80406ac 1418 map_regcache_remote_table (gdbarch, regs.data ());
c21236dc
PA
1419
1420 *pnum = regs[regnum].pnum;
1421 *poffset = regs[regnum].offset;
1422
c21236dc
PA
1423 return *pnum != -1;
1424}
1425
9d6eea31 1426remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
c21236dc 1427{
c21236dc
PA
1428 /* Use the architecture to build a regnum<->pnum table, which will be
1429 1:1 unless a feature set specifies otherwise. */
9d6eea31 1430 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
c21236dc 1431
74ca34ce
DJ
1432 /* Record the maximum possible size of the g packet - it may turn out
1433 to be smaller. */
9d6eea31
PA
1434 this->sizeof_g_packet
1435 = map_regcache_remote_table (gdbarch, this->regs.get ());
74ca34ce 1436
0df8b418 1437 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
1438 remote stubs have a hardwired buffer size of 400 bytes
1439 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1440 as the maximum packet-size to ensure that the packet and an extra
1441 NUL character can always fit in the buffer. This stops GDB
1442 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d 1443 already a full buffer (As of 1999-12-04 that was most stubs). */
9d6eea31 1444 this->remote_packet_size = 400 - 1;
d01949b6 1445
ea9c271d 1446 /* This one is filled in when a ``g'' packet is received. */
9d6eea31 1447 this->actual_register_packet_size = 0;
ea9c271d
DJ
1448
1449 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
1450 default, adjust the size accordingly. Remember that each byte is
1451 encoded as two characters. 32 is the overhead for the packet
1452 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 1453 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 1454 little. */
9d6eea31
PA
1455 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1456 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
ea9c271d
DJ
1457}
1458
6b8edb51
PA
1459/* Get a pointer to the current remote target. If not connected to a
1460 remote target, return NULL. */
1461
1462static remote_target *
1463get_current_remote_target ()
1464{
5b6d1e4f 1465 target_ops *proc_target = current_inferior ()->process_target ();
6b8edb51
PA
1466 return dynamic_cast<remote_target *> (proc_target);
1467}
1468
ea9c271d
DJ
1469/* Return the current allowed size of a remote packet. This is
1470 inferred from the current architecture, and should be used to
1471 limit the length of outgoing packets. */
6b8edb51
PA
1472long
1473remote_target::get_remote_packet_size ()
ea9c271d 1474{
be2a5f71 1475 struct remote_state *rs = get_remote_state ();
9d6eea31 1476 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1477
be2a5f71
DJ
1478 if (rs->explicit_packet_size)
1479 return rs->explicit_packet_size;
1480
ea9c271d 1481 return rsa->remote_packet_size;
d01949b6
AC
1482}
1483
ad10f812 1484static struct packet_reg *
5cd63fda
PA
1485packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1486 long regnum)
ad10f812 1487{
5cd63fda 1488 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
b323314b
AC
1489 return NULL;
1490 else
ad10f812 1491 {
ea9c271d 1492 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 1493
b323314b
AC
1494 gdb_assert (r->regnum == regnum);
1495 return r;
ad10f812 1496 }
ad10f812
AC
1497}
1498
1499static struct packet_reg *
5cd63fda
PA
1500packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1501 LONGEST pnum)
ad10f812 1502{
b323314b 1503 int i;
a744cf53 1504
5cd63fda 1505 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
ad10f812 1506 {
ea9c271d 1507 struct packet_reg *r = &rsa->regs[i];
a744cf53 1508
b323314b
AC
1509 if (r->pnum == pnum)
1510 return r;
ad10f812
AC
1511 }
1512 return NULL;
d01949b6
AC
1513}
1514
9a7071a8
JB
1515/* Allow the user to specify what sequence to send to the remote
1516 when he requests a program interruption: Although ^C is usually
1517 what remote systems expect (this is the default, here), it is
1518 sometimes preferable to send a break. On other systems such
1519 as the Linux kernel, a break followed by g, which is Magic SysRq g
1520 is required in order to interrupt the execution. */
1521const char interrupt_sequence_control_c[] = "Ctrl-C";
1522const char interrupt_sequence_break[] = "BREAK";
1523const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 1524static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
1525 {
1526 interrupt_sequence_control_c,
1527 interrupt_sequence_break,
1528 interrupt_sequence_break_g,
1529 NULL
1530 };
1531static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1532
1533static void
1534show_interrupt_sequence (struct ui_file *file, int from_tty,
1535 struct cmd_list_element *c,
1536 const char *value)
1537{
1538 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1539 fprintf_filtered (file,
1540 _("Send the ASCII ETX character (Ctrl-c) "
1541 "to the remote target to interrupt the "
1542 "execution of the program.\n"));
1543 else if (interrupt_sequence_mode == interrupt_sequence_break)
1544 fprintf_filtered (file,
1545 _("send a break signal to the remote target "
1546 "to interrupt the execution of the program.\n"));
1547 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1548 fprintf_filtered (file,
1549 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1550 "the remote target to interrupt the execution "
1551 "of Linux kernel.\n"));
1552 else
1553 internal_error (__FILE__, __LINE__,
1554 _("Invalid value for interrupt_sequence_mode: %s."),
1555 interrupt_sequence_mode);
1556}
6426a772 1557
9a7071a8
JB
1558/* This boolean variable specifies whether interrupt_sequence is sent
1559 to the remote target when gdb connects to it.
1560 This is mostly needed when you debug the Linux kernel: The Linux kernel
1561 expects BREAK g which is Magic SysRq g for connecting gdb. */
491144b5 1562static bool interrupt_on_connect = false;
c906108c 1563
9a7071a8
JB
1564/* This variable is used to implement the "set/show remotebreak" commands.
1565 Since these commands are now deprecated in favor of "set/show remote
1566 interrupt-sequence", it no longer has any effect on the code. */
491144b5 1567static bool remote_break;
c906108c 1568
9a7071a8 1569static void
eb4c3f4a 1570set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
9a7071a8
JB
1571{
1572 if (remote_break)
1573 interrupt_sequence_mode = interrupt_sequence_break;
1574 else
1575 interrupt_sequence_mode = interrupt_sequence_control_c;
1576}
1577
1578static void
1579show_remotebreak (struct ui_file *file, int from_tty,
1580 struct cmd_list_element *c,
1581 const char *value)
1582{
1583}
1584
c906108c
SS
1585/* This variable sets the number of bits in an address that are to be
1586 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 1587 leading zeros, the entire address would be sent. This variable
c906108c
SS
1588 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1589 initial implementation of remote.c restricted the address sent in
1590 memory packets to ``host::sizeof long'' bytes - (typically 32
1591 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1592 address was never sent. Since fixing this bug may cause a break in
85102364 1593 some remote targets this variable is principally provided to
23860348 1594 facilitate backward compatibility. */
c906108c 1595
883b9c6c 1596static unsigned int remote_address_size;
c906108c 1597
11cf8741 1598\f
11cf8741 1599/* User configurable variables for the number of characters in a
ea9c271d
DJ
1600 memory read/write packet. MIN (rsa->remote_packet_size,
1601 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 1602 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
1603 (speed up transfers). The variables ``preferred_*'' (the user
1604 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1605 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1606
1607struct memory_packet_config
1608{
a121b7c1 1609 const char *name;
11cf8741
JM
1610 long size;
1611 int fixed_p;
1612};
1613
cc0be08f
PA
1614/* The default max memory-write-packet-size, when the setting is
1615 "fixed". The 16k is historical. (It came from older GDB's using
1616 alloca for buffers and the knowledge (folklore?) that some hosts
1617 don't cope very well with large alloca calls.) */
1618#define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
a5c0808e
PA
1619
1620/* The minimum remote packet size for memory transfers. Ensures we
1621 can write at least one byte. */
1622#define MIN_MEMORY_PACKET_SIZE 20
1623
cc0be08f
PA
1624/* Get the memory packet size, assuming it is fixed. */
1625
1626static long
1627get_fixed_memory_packet_size (struct memory_packet_config *config)
1628{
1629 gdb_assert (config->fixed_p);
1630
1631 if (config->size <= 0)
1632 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1633 else
1634 return config->size;
1635}
1636
11cf8741
JM
1637/* Compute the current size of a read/write packet. Since this makes
1638 use of ``actual_register_packet_size'' the computation is dynamic. */
1639
6b8edb51
PA
1640long
1641remote_target::get_memory_packet_size (struct memory_packet_config *config)
11cf8741 1642{
d01949b6 1643 struct remote_state *rs = get_remote_state ();
9d6eea31 1644 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1645
11cf8741
JM
1646 long what_they_get;
1647 if (config->fixed_p)
cc0be08f 1648 what_they_get = get_fixed_memory_packet_size (config);
11cf8741
JM
1649 else
1650 {
ea9c271d 1651 what_they_get = get_remote_packet_size ();
23860348 1652 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1653 if (config->size > 0
1654 && what_they_get > config->size)
1655 what_they_get = config->size;
be2a5f71
DJ
1656
1657 /* Limit it to the size of the targets ``g'' response unless we have
1658 permission from the stub to use a larger packet size. */
1659 if (rs->explicit_packet_size == 0
1660 && rsa->actual_register_packet_size > 0
1661 && what_they_get > rsa->actual_register_packet_size)
1662 what_they_get = rsa->actual_register_packet_size;
11cf8741 1663 }
a5c0808e
PA
1664 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1665 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1666
1667 /* Make sure there is room in the global buffer for this packet
1668 (including its trailing NUL byte). */
8d64371b
TT
1669 if (rs->buf.size () < what_they_get + 1)
1670 rs->buf.resize (2 * what_they_get);
6d820c5c 1671
11cf8741
JM
1672 return what_they_get;
1673}
1674
0df8b418 1675/* Update the size of a read/write packet. If they user wants
23860348 1676 something really big then do a sanity check. */
11cf8741
JM
1677
1678static void
ac88e2de 1679set_memory_packet_size (const char *args, struct memory_packet_config *config)
11cf8741
JM
1680{
1681 int fixed_p = config->fixed_p;
1682 long size = config->size;
a744cf53 1683
11cf8741 1684 if (args == NULL)
8a3fe4f8 1685 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1686 else if (strcmp (args, "hard") == 0
1687 || strcmp (args, "fixed") == 0)
1688 fixed_p = 1;
1689 else if (strcmp (args, "soft") == 0
1690 || strcmp (args, "limit") == 0)
1691 fixed_p = 0;
1692 else
1693 {
1694 char *end;
a744cf53 1695
11cf8741
JM
1696 size = strtoul (args, &end, 0);
1697 if (args == end)
8a3fe4f8 1698 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1699
1700 /* Instead of explicitly capping the size of a packet to or
1701 disallowing it, the user is allowed to set the size to
1702 something arbitrarily large. */
11cf8741 1703 }
a5c0808e 1704
23860348 1705 /* Extra checks? */
11cf8741
JM
1706 if (fixed_p && !config->fixed_p)
1707 {
cc0be08f
PA
1708 /* So that the query shows the correct value. */
1709 long query_size = (size <= 0
1710 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1711 : size);
1712
e2e0b3e5
AC
1713 if (! query (_("The target may not be able to correctly handle a %s\n"
1714 "of %ld bytes. Change the packet size? "),
cc0be08f 1715 config->name, query_size))
8a3fe4f8 1716 error (_("Packet size not changed."));
11cf8741 1717 }
23860348 1718 /* Update the config. */
11cf8741
JM
1719 config->fixed_p = fixed_p;
1720 config->size = size;
1721}
1722
1723static void
1724show_memory_packet_size (struct memory_packet_config *config)
1725{
cc0be08f
PA
1726 if (config->size == 0)
1727 printf_filtered (_("The %s is 0 (default). "), config->name);
1728 else
1729 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1730 if (config->fixed_p)
a3f17187 1731 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
cc0be08f 1732 get_fixed_memory_packet_size (config));
11cf8741 1733 else
cc0be08f 1734 {
6b8edb51 1735 remote_target *remote = get_current_remote_target ();
cc0be08f 1736
6b8edb51 1737 if (remote != NULL)
cc0be08f 1738 printf_filtered (_("Packets are limited to %ld bytes.\n"),
6b8edb51 1739 remote->get_memory_packet_size (config));
cc0be08f
PA
1740 else
1741 puts_filtered ("The actual limit will be further reduced "
1742 "dependent on the target.\n");
1743 }
11cf8741
JM
1744}
1745
5b6d1e4f 1746/* FIXME: needs to be per-remote-target. */
11cf8741
JM
1747static struct memory_packet_config memory_write_packet_config =
1748{
1749 "memory-write-packet-size",
1750};
1751
1752static void
ac88e2de 1753set_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1754{
1755 set_memory_packet_size (args, &memory_write_packet_config);
1756}
1757
1758static void
ac88e2de 1759show_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1760{
1761 show_memory_packet_size (&memory_write_packet_config);
1762}
1763
055303e2
AB
1764/* Show the number of hardware watchpoints that can be used. */
1765
1766static void
1767show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1768 struct cmd_list_element *c,
1769 const char *value)
1770{
1771 fprintf_filtered (file, _("The maximum number of target hardware "
1772 "watchpoints is %s.\n"), value);
1773}
1774
1775/* Show the length limit (in bytes) for hardware watchpoints. */
1776
1777static void
1778show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1779 struct cmd_list_element *c,
1780 const char *value)
1781{
1782 fprintf_filtered (file, _("The maximum length (in bytes) of a target "
1783 "hardware watchpoint is %s.\n"), value);
1784}
1785
1786/* Show the number of hardware breakpoints that can be used. */
1787
1788static void
1789show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1790 struct cmd_list_element *c,
1791 const char *value)
1792{
1793 fprintf_filtered (file, _("The maximum number of target hardware "
1794 "breakpoints is %s.\n"), value);
1795}
1796
6cc8564b
LM
1797/* Controls the maximum number of characters to display in the debug output
1798 for each remote packet. The remaining characters are omitted. */
1799
1800static int remote_packet_max_chars = 512;
1801
1802/* Show the maximum number of characters to display for each remote packet
1803 when remote debugging is enabled. */
1804
1805static void
1806show_remote_packet_max_chars (struct ui_file *file, int from_tty,
1807 struct cmd_list_element *c,
1808 const char *value)
1809{
1810 fprintf_filtered (file, _("Number of remote packet characters to "
1811 "display is %s.\n"), value);
1812}
1813
6b8edb51
PA
1814long
1815remote_target::get_memory_write_packet_size ()
11cf8741
JM
1816{
1817 return get_memory_packet_size (&memory_write_packet_config);
1818}
1819
5b6d1e4f 1820/* FIXME: needs to be per-remote-target. */
11cf8741
JM
1821static struct memory_packet_config memory_read_packet_config =
1822{
1823 "memory-read-packet-size",
1824};
1825
1826static void
ac88e2de 1827set_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1828{
1829 set_memory_packet_size (args, &memory_read_packet_config);
1830}
1831
1832static void
ac88e2de 1833show_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1834{
1835 show_memory_packet_size (&memory_read_packet_config);
1836}
1837
6b8edb51
PA
1838long
1839remote_target::get_memory_read_packet_size ()
11cf8741
JM
1840{
1841 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1842
11cf8741
JM
1843 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1844 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1845 increased beyond this. */
1846 if (size > get_remote_packet_size ())
1847 size = get_remote_packet_size ();
11cf8741
JM
1848 return size;
1849}
1850
11cf8741 1851\f
5a2468f5 1852
5a2468f5
JM
1853struct packet_config
1854 {
bb572ddd
DJ
1855 const char *name;
1856 const char *title;
4082afcc
PA
1857
1858 /* If auto, GDB auto-detects support for this packet or feature,
1859 either through qSupported, or by trying the packet and looking
1860 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1861 packet. If false, the packet is disabled. Configs that don't
1862 have an associated command always have this set to auto. */
7f19b9a2 1863 enum auto_boolean detect;
4082afcc
PA
1864
1865 /* Does the target support this packet? */
5a2468f5
JM
1866 enum packet_support support;
1867 };
1868
4082afcc
PA
1869static enum packet_support packet_config_support (struct packet_config *config);
1870static enum packet_support packet_support (int packet);
5a2468f5
JM
1871
1872static void
fba45db2 1873show_packet_config_cmd (struct packet_config *config)
5a2468f5 1874{
a121b7c1 1875 const char *support = "internal-error";
a744cf53 1876
4082afcc 1877 switch (packet_config_support (config))
5a2468f5
JM
1878 {
1879 case PACKET_ENABLE:
1880 support = "enabled";
1881 break;
1882 case PACKET_DISABLE:
1883 support = "disabled";
1884 break;
1885 case PACKET_SUPPORT_UNKNOWN:
1886 support = "unknown";
1887 break;
1888 }
1889 switch (config->detect)
1890 {
7f19b9a2 1891 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1892 printf_filtered (_("Support for the `%s' packet "
1893 "is auto-detected, currently %s.\n"),
37a105a1 1894 config->name, support);
5a2468f5 1895 break;
7f19b9a2
AC
1896 case AUTO_BOOLEAN_TRUE:
1897 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1898 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1899 config->name, support);
8e248173 1900 break;
5a2468f5
JM
1901 }
1902}
1903
1904static void
bb572ddd
DJ
1905add_packet_config_cmd (struct packet_config *config, const char *name,
1906 const char *title, int legacy)
d471ea57 1907{
5a2468f5
JM
1908 char *set_doc;
1909 char *show_doc;
d471ea57 1910 char *cmd_name;
3ed07be4 1911
5a2468f5
JM
1912 config->name = name;
1913 config->title = title;
590042fc 1914 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
b435e160 1915 name, title);
3e43a32a 1916 show_doc = xstrprintf ("Show current use of remote "
590042fc 1917 "protocol `%s' (%s) packet.",
b435e160 1918 name, title);
d471ea57 1919 /* set/show TITLE-packet {auto,on,off} */
b435e160 1920 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1921 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1922 &config->detect, set_doc,
1923 show_doc, NULL, /* help_doc */
4082afcc 1924 NULL,
bb572ddd
DJ
1925 show_remote_protocol_packet_cmd,
1926 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1927 /* The command code copies the documentation strings. */
1928 xfree (set_doc);
1929 xfree (show_doc);
23860348 1930 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1931 if (legacy)
1932 {
1933 char *legacy_name;
a744cf53 1934
b435e160 1935 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1936 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1937 &remote_set_cmdlist);
d471ea57 1938 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1939 &remote_show_cmdlist);
d471ea57 1940 }
5a2468f5
JM
1941}
1942
d471ea57 1943static enum packet_result
a76d924d 1944packet_check_result (const char *buf)
5a2468f5 1945{
d471ea57 1946 if (buf[0] != '\0')
5a2468f5 1947 {
d471ea57 1948 /* The stub recognized the packet request. Check that the
23860348 1949 operation succeeded. */
a76d924d
DJ
1950 if (buf[0] == 'E'
1951 && isxdigit (buf[1]) && isxdigit (buf[2])
1952 && buf[3] == '\0')
85102364 1953 /* "Enn" - definitely an error. */
a76d924d
DJ
1954 return PACKET_ERROR;
1955
1956 /* Always treat "E." as an error. This will be used for
1957 more verbose error messages, such as E.memtypes. */
1958 if (buf[0] == 'E' && buf[1] == '.')
1959 return PACKET_ERROR;
1960
1961 /* The packet may or may not be OK. Just assume it is. */
1962 return PACKET_OK;
1963 }
1964 else
1965 /* The stub does not support the packet. */
1966 return PACKET_UNKNOWN;
1967}
1968
8d64371b
TT
1969static enum packet_result
1970packet_check_result (const gdb::char_vector &buf)
1971{
1972 return packet_check_result (buf.data ());
1973}
1974
a76d924d
DJ
1975static enum packet_result
1976packet_ok (const char *buf, struct packet_config *config)
1977{
1978 enum packet_result result;
1979
4082afcc
PA
1980 if (config->detect != AUTO_BOOLEAN_TRUE
1981 && config->support == PACKET_DISABLE)
1982 internal_error (__FILE__, __LINE__,
1983 _("packet_ok: attempt to use a disabled packet"));
1984
a76d924d
DJ
1985 result = packet_check_result (buf);
1986 switch (result)
1987 {
1988 case PACKET_OK:
1989 case PACKET_ERROR:
1990 /* The stub recognized the packet request. */
4082afcc 1991 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1992 {
2189c312
SM
1993 remote_debug_printf ("Packet %s (%s) is supported",
1994 config->name, config->title);
d471ea57 1995 config->support = PACKET_ENABLE;
d471ea57 1996 }
a76d924d
DJ
1997 break;
1998 case PACKET_UNKNOWN:
23860348 1999 /* The stub does not support the packet. */
4082afcc
PA
2000 if (config->detect == AUTO_BOOLEAN_AUTO
2001 && config->support == PACKET_ENABLE)
d471ea57 2002 {
4082afcc
PA
2003 /* If the stub previously indicated that the packet was
2004 supported then there is a protocol error. */
2005 error (_("Protocol error: %s (%s) conflicting enabled responses."),
2006 config->name, config->title);
2007 }
2008 else if (config->detect == AUTO_BOOLEAN_TRUE)
2009 {
2010 /* The user set it wrong. */
2011 error (_("Enabled packet %s (%s) not recognized by stub"),
2012 config->name, config->title);
d471ea57 2013 }
4082afcc 2014
2189c312
SM
2015 remote_debug_printf ("Packet %s (%s) is NOT supported",
2016 config->name, config->title);
4082afcc 2017 config->support = PACKET_DISABLE;
a76d924d 2018 break;
5a2468f5 2019 }
a76d924d
DJ
2020
2021 return result;
5a2468f5
JM
2022}
2023
8d64371b
TT
2024static enum packet_result
2025packet_ok (const gdb::char_vector &buf, struct packet_config *config)
2026{
2027 return packet_ok (buf.data (), config);
2028}
2029
444abaca
DJ
2030enum {
2031 PACKET_vCont = 0,
2032 PACKET_X,
2033 PACKET_qSymbol,
2034 PACKET_P,
2035 PACKET_p,
2036 PACKET_Z0,
2037 PACKET_Z1,
2038 PACKET_Z2,
2039 PACKET_Z3,
2040 PACKET_Z4,
15a201c8 2041 PACKET_vFile_setfs,
a6b151f1
DJ
2042 PACKET_vFile_open,
2043 PACKET_vFile_pread,
2044 PACKET_vFile_pwrite,
2045 PACKET_vFile_close,
2046 PACKET_vFile_unlink,
b9e7b9c3 2047 PACKET_vFile_readlink,
0a93529c 2048 PACKET_vFile_fstat,
0876f84a 2049 PACKET_qXfer_auxv,
23181151 2050 PACKET_qXfer_features,
c78fa86a 2051 PACKET_qXfer_exec_file,
cfa9d6d9 2052 PACKET_qXfer_libraries,
2268b414 2053 PACKET_qXfer_libraries_svr4,
fd79ecee 2054 PACKET_qXfer_memory_map,
07e059b5 2055 PACKET_qXfer_osdata,
dc146f7c 2056 PACKET_qXfer_threads,
0fb4aa4b 2057 PACKET_qXfer_statictrace_read,
b3b9301e 2058 PACKET_qXfer_traceframe_info,
169081d0 2059 PACKET_qXfer_uib,
711e434b 2060 PACKET_qGetTIBAddr,
444abaca 2061 PACKET_qGetTLSAddr,
be2a5f71 2062 PACKET_qSupported,
bd3eecc3 2063 PACKET_qTStatus,
89be2091 2064 PACKET_QPassSignals,
82075af2 2065 PACKET_QCatchSyscalls,
9b224c5e 2066 PACKET_QProgramSignals,
bc3b087d 2067 PACKET_QSetWorkingDir,
aefd8b33 2068 PACKET_QStartupWithShell,
0a2dde4a
SDJ
2069 PACKET_QEnvironmentHexEncoded,
2070 PACKET_QEnvironmentReset,
2071 PACKET_QEnvironmentUnset,
936d2992 2072 PACKET_qCRC,
08388c79 2073 PACKET_qSearch_memory,
2d717e4f
DJ
2074 PACKET_vAttach,
2075 PACKET_vRun,
a6f3e723 2076 PACKET_QStartNoAckMode,
82f73884 2077 PACKET_vKill,
4aa995e1
PA
2078 PACKET_qXfer_siginfo_read,
2079 PACKET_qXfer_siginfo_write,
0b16c5cf 2080 PACKET_qAttached,
4082afcc
PA
2081
2082 /* Support for conditional tracepoints. */
782b2b07 2083 PACKET_ConditionalTracepoints,
4082afcc
PA
2084
2085 /* Support for target-side breakpoint conditions. */
3788aec7 2086 PACKET_ConditionalBreakpoints,
4082afcc
PA
2087
2088 /* Support for target-side breakpoint commands. */
d3ce09f5 2089 PACKET_BreakpointCommands,
4082afcc
PA
2090
2091 /* Support for fast tracepoints. */
7a697b8d 2092 PACKET_FastTracepoints,
4082afcc
PA
2093
2094 /* Support for static tracepoints. */
0fb4aa4b 2095 PACKET_StaticTracepoints,
4082afcc
PA
2096
2097 /* Support for installing tracepoints while a trace experiment is
2098 running. */
1e4d1764 2099 PACKET_InstallInTrace,
4082afcc 2100
40ab02ce
MS
2101 PACKET_bc,
2102 PACKET_bs,
409873ef 2103 PACKET_TracepointSource,
d914c394 2104 PACKET_QAllow,
78d85199 2105 PACKET_qXfer_fdpic,
03583c20 2106 PACKET_QDisableRandomization,
d1feda86 2107 PACKET_QAgent,
f6f899bf 2108 PACKET_QTBuffer_size,
9accd112
MM
2109 PACKET_Qbtrace_off,
2110 PACKET_Qbtrace_bts,
b20a6524 2111 PACKET_Qbtrace_pt,
9accd112 2112 PACKET_qXfer_btrace,
4082afcc
PA
2113
2114 /* Support for the QNonStop packet. */
2115 PACKET_QNonStop,
2116
65706a29
PA
2117 /* Support for the QThreadEvents packet. */
2118 PACKET_QThreadEvents,
2119
4082afcc
PA
2120 /* Support for multi-process extensions. */
2121 PACKET_multiprocess_feature,
2122
2123 /* Support for enabling and disabling tracepoints while a trace
2124 experiment is running. */
2125 PACKET_EnableDisableTracepoints_feature,
2126
2127 /* Support for collecting strings using the tracenz bytecode. */
2128 PACKET_tracenz_feature,
2129
2130 /* Support for continuing to run a trace experiment while GDB is
2131 disconnected. */
2132 PACKET_DisconnectedTracing_feature,
2133
2134 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
2135 PACKET_augmented_libraries_svr4_read_feature,
2136
f4abbc16
MM
2137 /* Support for the qXfer:btrace-conf:read packet. */
2138 PACKET_qXfer_btrace_conf,
2139
d33501a5
MM
2140 /* Support for the Qbtrace-conf:bts:size packet. */
2141 PACKET_Qbtrace_conf_bts_size,
2142
f7e6eed5
PA
2143 /* Support for swbreak+ feature. */
2144 PACKET_swbreak_feature,
2145
2146 /* Support for hwbreak+ feature. */
2147 PACKET_hwbreak_feature,
2148
89245bc0
DB
2149 /* Support for fork events. */
2150 PACKET_fork_event_feature,
2151
2152 /* Support for vfork events. */
2153 PACKET_vfork_event_feature,
2154
b20a6524
MM
2155 /* Support for the Qbtrace-conf:pt:size packet. */
2156 PACKET_Qbtrace_conf_pt_size,
2157
94585166
DB
2158 /* Support for exec events. */
2159 PACKET_exec_event_feature,
2160
750ce8d1
YQ
2161 /* Support for query supported vCont actions. */
2162 PACKET_vContSupported,
2163
de979965
PA
2164 /* Support remote CTRL-C. */
2165 PACKET_vCtrlC,
2166
f2faf941
PA
2167 /* Support TARGET_WAITKIND_NO_RESUMED. */
2168 PACKET_no_resumed,
2169
444abaca
DJ
2170 PACKET_MAX
2171};
506fb367 2172
5b6d1e4f
PA
2173/* FIXME: needs to be per-remote-target. Ignoring this for now,
2174 assuming all remote targets are the same server (thus all support
2175 the same packets). */
444abaca 2176static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97 2177
f7e6eed5
PA
2178/* Returns the packet's corresponding "set remote foo-packet" command
2179 state. See struct packet_config for more details. */
2180
2181static enum auto_boolean
2182packet_set_cmd_state (int packet)
2183{
2184 return remote_protocol_packets[packet].detect;
2185}
2186
4082afcc
PA
2187/* Returns whether a given packet or feature is supported. This takes
2188 into account the state of the corresponding "set remote foo-packet"
2189 command, which may be used to bypass auto-detection. */
dc8acb97 2190
4082afcc
PA
2191static enum packet_support
2192packet_config_support (struct packet_config *config)
2193{
2194 switch (config->detect)
444abaca 2195 {
4082afcc
PA
2196 case AUTO_BOOLEAN_TRUE:
2197 return PACKET_ENABLE;
2198 case AUTO_BOOLEAN_FALSE:
2199 return PACKET_DISABLE;
2200 case AUTO_BOOLEAN_AUTO:
2201 return config->support;
2202 default:
2203 gdb_assert_not_reached (_("bad switch"));
444abaca 2204 }
4082afcc
PA
2205}
2206
2207/* Same as packet_config_support, but takes the packet's enum value as
2208 argument. */
2209
2210static enum packet_support
2211packet_support (int packet)
2212{
2213 struct packet_config *config = &remote_protocol_packets[packet];
2214
2215 return packet_config_support (config);
dc8acb97
MS
2216}
2217
5a2468f5 2218static void
444abaca
DJ
2219show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2220 struct cmd_list_element *c,
2221 const char *value)
5a2468f5 2222{
444abaca 2223 struct packet_config *packet;
5a2468f5 2224
444abaca
DJ
2225 for (packet = remote_protocol_packets;
2226 packet < &remote_protocol_packets[PACKET_MAX];
2227 packet++)
2228 {
2229 if (&packet->detect == c->var)
2230 {
2231 show_packet_config_cmd (packet);
2232 return;
2233 }
2234 }
9b20d036 2235 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 2236 c->name);
5a2468f5
JM
2237}
2238
d471ea57
AC
2239/* Should we try one of the 'Z' requests? */
2240
2241enum Z_packet_type
2242{
2243 Z_PACKET_SOFTWARE_BP,
2244 Z_PACKET_HARDWARE_BP,
2245 Z_PACKET_WRITE_WP,
2246 Z_PACKET_READ_WP,
2247 Z_PACKET_ACCESS_WP,
2248 NR_Z_PACKET_TYPES
2249};
96baa820 2250
d471ea57 2251/* For compatibility with older distributions. Provide a ``set remote
23860348 2252 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 2253
7f19b9a2 2254static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
2255
2256static void
eb4c3f4a 2257set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
fba45db2 2258 struct cmd_list_element *c)
96baa820 2259{
d471ea57 2260 int i;
a744cf53 2261
d471ea57 2262 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
4082afcc 2263 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
96baa820
JM
2264}
2265
2266static void
08546159
AC
2267show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2268 struct cmd_list_element *c,
2269 const char *value)
96baa820 2270{
d471ea57 2271 int i;
a744cf53 2272
d471ea57
AC
2273 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2274 {
444abaca 2275 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 2276 }
96baa820
JM
2277}
2278
4082afcc
PA
2279/* Returns true if the multi-process extensions are in effect. */
2280
2281static int
2282remote_multi_process_p (struct remote_state *rs)
2283{
2284 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2285}
2286
de0d863e
DB
2287/* Returns true if fork events are supported. */
2288
2289static int
2290remote_fork_event_p (struct remote_state *rs)
2291{
2292 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2293}
2294
c269dbdb
DB
2295/* Returns true if vfork events are supported. */
2296
2297static int
2298remote_vfork_event_p (struct remote_state *rs)
2299{
2300 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2301}
2302
d46addbb
DB
2303/* Returns true if exec events are supported. */
2304
2305static int
2306remote_exec_event_p (struct remote_state *rs)
2307{
2308 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2309}
2310
cbb8991c
DB
2311/* Insert fork catchpoint target routine. If fork events are enabled
2312 then return success, nothing more to do. */
2313
f6ac5f3d
PA
2314int
2315remote_target::insert_fork_catchpoint (int pid)
cbb8991c
DB
2316{
2317 struct remote_state *rs = get_remote_state ();
2318
2319 return !remote_fork_event_p (rs);
2320}
2321
2322/* Remove fork catchpoint target routine. Nothing to do, just
2323 return success. */
2324
f6ac5f3d
PA
2325int
2326remote_target::remove_fork_catchpoint (int pid)
cbb8991c
DB
2327{
2328 return 0;
2329}
2330
2331/* Insert vfork catchpoint target routine. If vfork events are enabled
2332 then return success, nothing more to do. */
2333
f6ac5f3d
PA
2334int
2335remote_target::insert_vfork_catchpoint (int pid)
cbb8991c
DB
2336{
2337 struct remote_state *rs = get_remote_state ();
2338
2339 return !remote_vfork_event_p (rs);
2340}
2341
2342/* Remove vfork catchpoint target routine. Nothing to do, just
2343 return success. */
2344
f6ac5f3d
PA
2345int
2346remote_target::remove_vfork_catchpoint (int pid)
cbb8991c
DB
2347{
2348 return 0;
2349}
2350
d46addbb
DB
2351/* Insert exec catchpoint target routine. If exec events are
2352 enabled, just return success. */
2353
f6ac5f3d
PA
2354int
2355remote_target::insert_exec_catchpoint (int pid)
d46addbb
DB
2356{
2357 struct remote_state *rs = get_remote_state ();
2358
2359 return !remote_exec_event_p (rs);
2360}
2361
2362/* Remove exec catchpoint target routine. Nothing to do, just
2363 return success. */
2364
f6ac5f3d
PA
2365int
2366remote_target::remove_exec_catchpoint (int pid)
d46addbb
DB
2367{
2368 return 0;
2369}
2370
c906108c
SS
2371\f
2372
ffdd69cf
TT
2373/* Take advantage of the fact that the TID field is not used, to tag
2374 special ptids with it set to != 0. */
2375static const ptid_t magic_null_ptid (42000, -1, 1);
2376static const ptid_t not_sent_ptid (42000, -2, 1);
2377static const ptid_t any_thread_ptid (42000, 0, 1);
79d7f229 2378
0b16c5cf
PA
2379/* Find out if the stub attached to PID (and hence GDB should offer to
2380 detach instead of killing it when bailing out). */
2381
6b8edb51
PA
2382int
2383remote_target::remote_query_attached (int pid)
0b16c5cf
PA
2384{
2385 struct remote_state *rs = get_remote_state ();
bba74b36 2386 size_t size = get_remote_packet_size ();
0b16c5cf 2387
4082afcc 2388 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
0b16c5cf
PA
2389 return 0;
2390
2391 if (remote_multi_process_p (rs))
8d64371b 2392 xsnprintf (rs->buf.data (), size, "qAttached:%x", pid);
0b16c5cf 2393 else
8d64371b 2394 xsnprintf (rs->buf.data (), size, "qAttached");
0b16c5cf
PA
2395
2396 putpkt (rs->buf);
8d64371b 2397 getpkt (&rs->buf, 0);
0b16c5cf
PA
2398
2399 switch (packet_ok (rs->buf,
1554e9be 2400 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
2401 {
2402 case PACKET_OK:
8d64371b 2403 if (strcmp (rs->buf.data (), "1") == 0)
0b16c5cf
PA
2404 return 1;
2405 break;
2406 case PACKET_ERROR:
8d64371b 2407 warning (_("Remote failure reply: %s"), rs->buf.data ());
0b16c5cf
PA
2408 break;
2409 case PACKET_UNKNOWN:
2410 break;
2411 }
2412
2413 return 0;
2414}
2415
49c62f2e
PA
2416/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2417 has been invented by GDB, instead of reported by the target. Since
2418 we can be connected to a remote system before before knowing about
2419 any inferior, mark the target with execution when we find the first
2420 inferior. If ATTACHED is 1, then we had just attached to this
2421 inferior. If it is 0, then we just created this inferior. If it
2422 is -1, then try querying the remote stub to find out if it had
1b6e6f5c
GB
2423 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2424 attempt to open this inferior's executable as the main executable
2425 if no main executable is open already. */
1941c569 2426
6b8edb51 2427inferior *
9ab8741a 2428remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached,
6b8edb51 2429 int try_open_exec)
1941c569 2430{
1941c569
PA
2431 struct inferior *inf;
2432
0b16c5cf
PA
2433 /* Check whether this process we're learning about is to be
2434 considered attached, or if is to be considered to have been
2435 spawned by the stub. */
2436 if (attached == -1)
2437 attached = remote_query_attached (pid);
2438
f5656ead 2439 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
2440 {
2441 /* If the target shares code across all inferiors, then every
2442 attach adds a new inferior. */
2443 inf = add_inferior (pid);
2444
2445 /* ... and every inferior is bound to the same program space.
2446 However, each inferior may still have its own address
2447 space. */
2448 inf->aspace = maybe_new_address_space ();
2449 inf->pspace = current_program_space;
2450 }
2451 else
2452 {
2453 /* In the traditional debugging scenario, there's a 1-1 match
2454 between program/address spaces. We simply bind the inferior
2455 to the program space's address space. */
2456 inf = current_inferior ();
78f2c40a
PA
2457
2458 /* However, if the current inferior is already bound to a
2459 process, find some other empty inferior. */
2460 if (inf->pid != 0)
2461 {
2462 inf = nullptr;
2463 for (inferior *it : all_inferiors ())
2464 if (it->pid == 0)
2465 {
2466 inf = it;
2467 break;
2468 }
2469 }
2470 if (inf == nullptr)
2471 {
2472 /* Since all inferiors were already bound to a process, add
2473 a new inferior. */
2474 inf = add_inferior_with_spaces ();
2475 }
2476 switch_to_inferior_no_thread (inf);
5b6d1e4f 2477 push_target (this);
6c95b8df
PA
2478 inferior_appeared (inf, pid);
2479 }
1941c569 2480
0b16c5cf 2481 inf->attach_flag = attached;
49c62f2e 2482 inf->fake_pid_p = fake_pid_p;
0b16c5cf 2483
1b6e6f5c
GB
2484 /* If no main executable is currently open then attempt to
2485 open the file that was executed to create this inferior. */
835205d0 2486 if (try_open_exec && get_exec_file (0) == NULL)
bb805577 2487 exec_file_locate_attach (pid, 0, 1);
1b6e6f5c 2488
a2fedca9
PW
2489 /* Check for exec file mismatch, and let the user solve it. */
2490 validate_exec_file (1);
2491
1941c569
PA
2492 return inf;
2493}
2494
7aabaf9d 2495static remote_thread_info *get_remote_thread_info (thread_info *thread);
5b6d1e4f
PA
2496static remote_thread_info *get_remote_thread_info (remote_target *target,
2497 ptid_t ptid);
85ad3aaf 2498
1941c569
PA
2499/* Add thread PTID to GDB's thread list. Tag it as executing/running
2500 according to RUNNING. */
2501
00431a78 2502thread_info *
6b8edb51 2503remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
c906108c 2504{
b7ea362b 2505 struct remote_state *rs = get_remote_state ();
85ad3aaf 2506 struct thread_info *thread;
b7ea362b
PA
2507
2508 /* GDB historically didn't pull threads in the initial connection
2509 setup. If the remote target doesn't even have a concept of
2510 threads (e.g., a bare-metal target), even if internally we
2511 consider that a single-threaded target, mentioning a new thread
2512 might be confusing to the user. Be silent then, preserving the
2513 age old behavior. */
2514 if (rs->starting_up)
5b6d1e4f 2515 thread = add_thread_silent (this, ptid);
b7ea362b 2516 else
5b6d1e4f 2517 thread = add_thread (this, ptid);
1941c569 2518
c9d22089
SM
2519 /* We start by assuming threads are resumed. That state then gets updated
2520 when we process a matching stop reply. */
2521 get_remote_thread_info (thread)->set_resumed ();
2522
5b6d1e4f
PA
2523 set_executing (this, ptid, executing);
2524 set_running (this, ptid, running);
00431a78
PA
2525
2526 return thread;
1941c569
PA
2527}
2528
2529/* Come here when we learn about a thread id from the remote target.
2530 It may be the first time we hear about such thread, so take the
2531 opportunity to add it to GDB's thread list. In case this is the
2532 first time we're noticing its corresponding inferior, add it to
0d5b594f
PA
2533 GDB's inferior list as well. EXECUTING indicates whether the
2534 thread is (internally) executing or stopped. */
1941c569 2535
6b8edb51
PA
2536void
2537remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
1941c569 2538{
0d5b594f
PA
2539 /* In non-stop mode, we assume new found threads are (externally)
2540 running until proven otherwise with a stop reply. In all-stop,
2541 we can only get here if all threads are stopped. */
2542 int running = target_is_non_stop_p () ? 1 : 0;
2543
c906108c
SS
2544 /* If this is a new thread, add it to GDB's thread list.
2545 If we leave it up to WFI to do this, bad things will happen. */
82f73884 2546
5b6d1e4f 2547 thread_info *tp = find_thread_ptid (this, currthread);
00431a78 2548 if (tp != NULL && tp->state == THREAD_EXITED)
82f73884
PA
2549 {
2550 /* We're seeing an event on a thread id we knew had exited.
2551 This has to be a new thread reusing the old id. Add it. */
0d5b594f 2552 remote_add_thread (currthread, running, executing);
82f73884
PA
2553 return;
2554 }
2555
5b6d1e4f 2556 if (!in_thread_list (this, currthread))
c0a2216e 2557 {
1941c569 2558 struct inferior *inf = NULL;
e99b03dc 2559 int pid = currthread.pid ();
1941c569 2560
0e998d96 2561 if (inferior_ptid.is_pid ()
e99b03dc 2562 && pid == inferior_ptid.pid ())
c0a2216e
PA
2563 {
2564 /* inferior_ptid has no thread member yet. This can happen
2565 with the vAttach -> remote_wait,"TAAthread:" path if the
2566 stub doesn't support qC. This is the first stop reported
2567 after an attach, so this is the main thread. Update the
2568 ptid in the thread list. */
5b6d1e4f
PA
2569 if (in_thread_list (this, ptid_t (pid)))
2570 thread_change_ptid (this, inferior_ptid, currthread);
bad34192
PA
2571 else
2572 {
0ac55310
PA
2573 thread_info *thr
2574 = remote_add_thread (currthread, running, executing);
2575 switch_to_thread (thr);
bad34192 2576 }
dc146f7c 2577 return;
c0a2216e 2578 }
82f73884 2579
d7e15655 2580 if (magic_null_ptid == inferior_ptid)
c0a2216e
PA
2581 {
2582 /* inferior_ptid is not set yet. This can happen with the
2583 vRun -> remote_wait,"TAAthread:" path if the stub
2584 doesn't support qC. This is the first stop reported
2585 after an attach, so this is the main thread. Update the
2586 ptid in the thread list. */
5b6d1e4f 2587 thread_change_ptid (this, inferior_ptid, currthread);
82f73884 2588 return;
c0a2216e 2589 }
82f73884 2590
29c87f7f
PA
2591 /* When connecting to a target remote, or to a target
2592 extended-remote which already was debugging an inferior, we
2593 may not know about it yet. Add it before adding its child
2594 thread, so notifications are emitted in a sensible order. */
5b6d1e4f 2595 if (find_inferior_pid (this, currthread.pid ()) == NULL)
49c62f2e
PA
2596 {
2597 struct remote_state *rs = get_remote_state ();
9ab8741a 2598 bool fake_pid_p = !remote_multi_process_p (rs);
49c62f2e
PA
2599
2600 inf = remote_add_inferior (fake_pid_p,
e99b03dc 2601 currthread.pid (), -1, 1);
49c62f2e 2602 }
29c87f7f 2603
82f73884 2604 /* This is really a new thread. Add it. */
00431a78
PA
2605 thread_info *new_thr
2606 = remote_add_thread (currthread, running, executing);
1941c569
PA
2607
2608 /* If we found a new inferior, let the common code do whatever
2609 it needs to with it (e.g., read shared libraries, insert
b7ea362b
PA
2610 breakpoints), unless we're just setting up an all-stop
2611 connection. */
1941c569 2612 if (inf != NULL)
b7ea362b
PA
2613 {
2614 struct remote_state *rs = get_remote_state ();
2615
6efcd9a8 2616 if (!rs->starting_up)
00431a78 2617 notice_new_inferior (new_thr, executing, 0);
b7ea362b 2618 }
c0a2216e 2619 }
c906108c
SS
2620}
2621
85ad3aaf 2622/* Return THREAD's private thread data, creating it if necessary. */
dc146f7c 2623
7aabaf9d
SM
2624static remote_thread_info *
2625get_remote_thread_info (thread_info *thread)
dc146f7c 2626{
85ad3aaf 2627 gdb_assert (thread != NULL);
dc146f7c 2628
85ad3aaf 2629 if (thread->priv == NULL)
7aabaf9d 2630 thread->priv.reset (new remote_thread_info);
dc146f7c 2631
7aabaf9d 2632 return static_cast<remote_thread_info *> (thread->priv.get ());
85ad3aaf
PA
2633}
2634
5b6d1e4f
PA
2635/* Return PTID's private thread data, creating it if necessary. */
2636
7aabaf9d 2637static remote_thread_info *
5b6d1e4f 2638get_remote_thread_info (remote_target *target, ptid_t ptid)
85ad3aaf 2639{
5b6d1e4f 2640 thread_info *thr = find_thread_ptid (target, ptid);
00431a78 2641 return get_remote_thread_info (thr);
dc146f7c
VP
2642}
2643
74531fed
PA
2644/* Call this function as a result of
2645 1) A halt indication (T packet) containing a thread id
2646 2) A direct query of currthread
0df8b418 2647 3) Successful execution of set thread */
74531fed
PA
2648
2649static void
47f8a51d 2650record_currthread (struct remote_state *rs, ptid_t currthread)
74531fed 2651{
47f8a51d 2652 rs->general_thread = currthread;
74531fed
PA
2653}
2654
89be2091
DJ
2655/* If 'QPassSignals' is supported, tell the remote stub what signals
2656 it can simply pass through to the inferior without reporting. */
2657
f6ac5f3d 2658void
adc6a863 2659remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
89be2091 2660{
4082afcc 2661 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
89be2091
DJ
2662 {
2663 char *pass_packet, *p;
adc6a863 2664 int count = 0;
747dc59d 2665 struct remote_state *rs = get_remote_state ();
89be2091 2666
adc6a863
PA
2667 gdb_assert (pass_signals.size () < 256);
2668 for (size_t i = 0; i < pass_signals.size (); i++)
89be2091 2669 {
2455069d 2670 if (pass_signals[i])
89be2091
DJ
2671 count++;
2672 }
224c3ddb 2673 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
89be2091
DJ
2674 strcpy (pass_packet, "QPassSignals:");
2675 p = pass_packet + strlen (pass_packet);
adc6a863 2676 for (size_t i = 0; i < pass_signals.size (); i++)
89be2091 2677 {
2455069d 2678 if (pass_signals[i])
89be2091
DJ
2679 {
2680 if (i >= 16)
2681 *p++ = tohex (i >> 4);
2682 *p++ = tohex (i & 15);
2683 if (count)
2684 *p++ = ';';
2685 else
2686 break;
2687 count--;
2688 }
2689 }
2690 *p = 0;
747dc59d 2691 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
89be2091 2692 {
89be2091 2693 putpkt (pass_packet);
8d64371b 2694 getpkt (&rs->buf, 0);
8dc5b319 2695 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
84d53fa9 2696 xfree (rs->last_pass_packet);
747dc59d 2697 rs->last_pass_packet = pass_packet;
89be2091
DJ
2698 }
2699 else
2700 xfree (pass_packet);
2701 }
2702}
2703
82075af2
JS
2704/* If 'QCatchSyscalls' is supported, tell the remote stub
2705 to report syscalls to GDB. */
2706
f6ac5f3d
PA
2707int
2708remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2709 gdb::array_view<const int> syscall_counts)
82075af2 2710{
b80406ac 2711 const char *catch_packet;
82075af2
JS
2712 enum packet_result result;
2713 int n_sysno = 0;
2714
2715 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2716 {
2717 /* Not supported. */
2718 return 1;
2719 }
2720
649a140c 2721 if (needed && any_count == 0)
82075af2 2722 {
649a140c
PA
2723 /* Count how many syscalls are to be caught. */
2724 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2725 {
649a140c 2726 if (syscall_counts[i] != 0)
82075af2
JS
2727 n_sysno++;
2728 }
2729 }
2730
2189c312
SM
2731 remote_debug_printf ("pid %d needed %d any_count %d n_sysno %d",
2732 pid, needed, any_count, n_sysno);
82075af2 2733
1b81856f 2734 std::string built_packet;
82075af2
JS
2735 if (needed)
2736 {
2737 /* Prepare a packet with the sysno list, assuming max 8+1
2738 characters for a sysno. If the resulting packet size is too
2739 big, fallback on the non-selective packet. */
2740 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
1b81856f
PA
2741 built_packet.reserve (maxpktsz);
2742 built_packet = "QCatchSyscalls:1";
649a140c 2743 if (any_count == 0)
82075af2 2744 {
649a140c
PA
2745 /* Add in each syscall to be caught. */
2746 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2747 {
649a140c
PA
2748 if (syscall_counts[i] != 0)
2749 string_appendf (built_packet, ";%zx", i);
82075af2
JS
2750 }
2751 }
1b81856f 2752 if (built_packet.size () > get_remote_packet_size ())
82075af2
JS
2753 {
2754 /* catch_packet too big. Fallback to less efficient
2755 non selective mode, with GDB doing the filtering. */
b80406ac 2756 catch_packet = "QCatchSyscalls:1";
82075af2 2757 }
b80406ac 2758 else
1b81856f 2759 catch_packet = built_packet.c_str ();
82075af2
JS
2760 }
2761 else
b80406ac 2762 catch_packet = "QCatchSyscalls:0";
82075af2 2763
b80406ac 2764 struct remote_state *rs = get_remote_state ();
82075af2 2765
b80406ac 2766 putpkt (catch_packet);
8d64371b 2767 getpkt (&rs->buf, 0);
b80406ac
TT
2768 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2769 if (result == PACKET_OK)
2770 return 0;
2771 else
2772 return -1;
82075af2
JS
2773}
2774
9b224c5e
PA
2775/* If 'QProgramSignals' is supported, tell the remote stub what
2776 signals it should pass through to the inferior when detaching. */
2777
f6ac5f3d 2778void
adc6a863 2779remote_target::program_signals (gdb::array_view<const unsigned char> signals)
9b224c5e 2780{
4082afcc 2781 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2782 {
2783 char *packet, *p;
adc6a863 2784 int count = 0;
5e4a05c4 2785 struct remote_state *rs = get_remote_state ();
9b224c5e 2786
adc6a863
PA
2787 gdb_assert (signals.size () < 256);
2788 for (size_t i = 0; i < signals.size (); i++)
9b224c5e
PA
2789 {
2790 if (signals[i])
2791 count++;
2792 }
224c3ddb 2793 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2794 strcpy (packet, "QProgramSignals:");
2795 p = packet + strlen (packet);
adc6a863 2796 for (size_t i = 0; i < signals.size (); i++)
9b224c5e
PA
2797 {
2798 if (signal_pass_state (i))
2799 {
2800 if (i >= 16)
2801 *p++ = tohex (i >> 4);
2802 *p++ = tohex (i & 15);
2803 if (count)
2804 *p++ = ';';
2805 else
2806 break;
2807 count--;
2808 }
2809 }
2810 *p = 0;
5e4a05c4
TT
2811 if (!rs->last_program_signals_packet
2812 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2813 {
9b224c5e 2814 putpkt (packet);
8d64371b 2815 getpkt (&rs->buf, 0);
8dc5b319 2816 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2817 xfree (rs->last_program_signals_packet);
2818 rs->last_program_signals_packet = packet;
9b224c5e
PA
2819 }
2820 else
2821 xfree (packet);
2822 }
2823}
2824
79d7f229
PA
2825/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2826 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2827 thread. If GEN is set, set the general thread, if not, then set
2828 the step/continue thread. */
6b8edb51
PA
2829void
2830remote_target::set_thread (ptid_t ptid, int gen)
c906108c 2831{
d01949b6 2832 struct remote_state *rs = get_remote_state ();
47f8a51d 2833 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
8d64371b
TT
2834 char *buf = rs->buf.data ();
2835 char *endbuf = buf + get_remote_packet_size ();
c906108c 2836
d7e15655 2837 if (state == ptid)
c906108c
SS
2838 return;
2839
79d7f229
PA
2840 *buf++ = 'H';
2841 *buf++ = gen ? 'g' : 'c';
d7e15655 2842 if (ptid == magic_null_ptid)
79d7f229 2843 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2844 else if (ptid == any_thread_ptid)
79d7f229 2845 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2846 else if (ptid == minus_one_ptid)
79d7f229
PA
2847 xsnprintf (buf, endbuf - buf, "-1");
2848 else
82f73884 2849 write_ptid (buf, endbuf, ptid);
79d7f229 2850 putpkt (rs->buf);
8d64371b 2851 getpkt (&rs->buf, 0);
c906108c 2852 if (gen)
47f8a51d 2853 rs->general_thread = ptid;
c906108c 2854 else
47f8a51d 2855 rs->continue_thread = ptid;
c906108c 2856}
79d7f229 2857
6b8edb51
PA
2858void
2859remote_target::set_general_thread (ptid_t ptid)
79d7f229
PA
2860{
2861 set_thread (ptid, 1);
2862}
2863
6b8edb51
PA
2864void
2865remote_target::set_continue_thread (ptid_t ptid)
79d7f229
PA
2866{
2867 set_thread (ptid, 0);
2868}
2869
3c9c4b83
PA
2870/* Change the remote current process. Which thread within the process
2871 ends up selected isn't important, as long as it is the same process
2872 as what INFERIOR_PTID points to.
2873
2874 This comes from that fact that there is no explicit notion of
2875 "selected process" in the protocol. The selected process for
2876 general operations is the process the selected general thread
2877 belongs to. */
2878
6b8edb51
PA
2879void
2880remote_target::set_general_process ()
3c9c4b83
PA
2881{
2882 struct remote_state *rs = get_remote_state ();
2883
2884 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2885 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2886 return;
2887
2888 /* We only need to change the remote current thread if it's pointing
2889 at some other process. */
e99b03dc 2890 if (rs->general_thread.pid () != inferior_ptid.pid ())
3c9c4b83
PA
2891 set_general_thread (inferior_ptid);
2892}
2893
c906108c 2894\f
7d1a114c
PA
2895/* Return nonzero if this is the main thread that we made up ourselves
2896 to model non-threaded targets as single-threaded. */
c906108c
SS
2897
2898static int
f6ac5f3d 2899remote_thread_always_alive (ptid_t ptid)
c906108c 2900{
d7e15655 2901 if (ptid == magic_null_ptid)
c0a2216e
PA
2902 /* The main thread is always alive. */
2903 return 1;
2904
e38504b3 2905 if (ptid.pid () != 0 && ptid.lwp () == 0)
c0a2216e
PA
2906 /* The main thread is always alive. This can happen after a
2907 vAttach, if the remote side doesn't support
2908 multi-threading. */
2909 return 1;
2910
7d1a114c
PA
2911 return 0;
2912}
2913
2914/* Return nonzero if the thread PTID is still alive on the remote
2915 system. */
2916
57810aa7 2917bool
f6ac5f3d 2918remote_target::thread_alive (ptid_t ptid)
7d1a114c
PA
2919{
2920 struct remote_state *rs = get_remote_state ();
2921 char *p, *endp;
2922
2923 /* Check if this is a thread that we made up ourselves to model
2924 non-threaded targets as single-threaded. */
f6ac5f3d 2925 if (remote_thread_always_alive (ptid))
7d1a114c
PA
2926 return 1;
2927
8d64371b
TT
2928 p = rs->buf.data ();
2929 endp = p + get_remote_packet_size ();
82f73884
PA
2930
2931 *p++ = 'T';
2932 write_ptid (p, endp, ptid);
2933
2e9f7625 2934 putpkt (rs->buf);
8d64371b 2935 getpkt (&rs->buf, 0);
2e9f7625 2936 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2937}
2938
79efa585
SM
2939/* Return a pointer to a thread name if we know it and NULL otherwise.
2940 The thread_info object owns the memory for the name. */
2941
f6ac5f3d
PA
2942const char *
2943remote_target::thread_name (struct thread_info *info)
79efa585
SM
2944{
2945 if (info->priv != NULL)
a9334058
SM
2946 {
2947 const std::string &name = get_remote_thread_info (info)->name;
2948 return !name.empty () ? name.c_str () : NULL;
2949 }
79efa585
SM
2950
2951 return NULL;
2952}
2953
c906108c
SS
2954/* About these extended threadlist and threadinfo packets. They are
2955 variable length packets but, the fields within them are often fixed
30baf67b 2956 length. They are redundant enough to send over UDP as is the
c906108c
SS
2957 remote protocol in general. There is a matching unit test module
2958 in libstub. */
2959
23860348 2960/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2961 libstub protocol encoding, and remote.c. It is not particularly
23860348 2962 changable. */
cce74817
JM
2963
2964/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2965 Plan to fix this. */
cce74817 2966
23860348 2967typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2968
9d1f7ab2 2969/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2970 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2971
2972struct gdb_ext_thread_info
c5aa993b 2973 {
23860348 2974 threadref threadid; /* External form of thread reference. */
2bc416ba 2975 int active; /* Has state interesting to GDB?
23860348 2976 regs, stack. */
2bc416ba 2977 char display[256]; /* Brief state display, name,
cedea757 2978 blocked/suspended. */
23860348 2979 char shortname[32]; /* To be used to name threads. */
2bc416ba 2980 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2981 whatever. */
c5aa993b 2982 };
cce74817
JM
2983
2984/* The volume of remote transfers can be limited by submitting
2985 a mask containing bits specifying the desired information.
2986 Use a union of these values as the 'selection' parameter to
0df8b418 2987 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2988
2989#define TAG_THREADID 1
2990#define TAG_EXISTS 2
2991#define TAG_DISPLAY 4
2992#define TAG_THREADNAME 8
c5aa993b 2993#define TAG_MOREDISPLAY 16
cce74817 2994
23860348 2995#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 2996
cecb1912 2997static const char *unpack_nibble (const char *buf, int *val);
cce74817 2998
cecb1912 2999static const char *unpack_byte (const char *buf, int *value);
cce74817 3000
a14ed312 3001static char *pack_int (char *buf, int value);
cce74817 3002
cecb1912 3003static const char *unpack_int (const char *buf, int *value);
cce74817 3004
cecb1912 3005static const char *unpack_string (const char *src, char *dest, int length);
cce74817 3006
23860348 3007static char *pack_threadid (char *pkt, threadref *id);
cce74817 3008
cecb1912 3009static const char *unpack_threadid (const char *inbuf, threadref *id);
cce74817 3010
23860348 3011void int_to_threadref (threadref *id, int value);
cce74817 3012
23860348 3013static int threadref_to_int (threadref *ref);
cce74817 3014
23860348 3015static void copy_threadref (threadref *dest, threadref *src);
cce74817 3016
23860348 3017static int threadmatch (threadref *dest, threadref *src);
cce74817 3018
2bc416ba 3019static char *pack_threadinfo_request (char *pkt, int mode,
23860348 3020 threadref *id);
cce74817 3021
a14ed312
KB
3022static char *pack_threadlist_request (char *pkt, int startflag,
3023 int threadcount,
23860348 3024 threadref *nextthread);
cce74817 3025
23860348 3026static int remote_newthread_step (threadref *ref, void *context);
cce74817 3027
82f73884
PA
3028
3029/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
3030 buffer we're allowed to write to. Returns
3031 BUF+CHARACTERS_WRITTEN. */
3032
6b8edb51
PA
3033char *
3034remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
82f73884
PA
3035{
3036 int pid, tid;
3037 struct remote_state *rs = get_remote_state ();
3038
3039 if (remote_multi_process_p (rs))
3040 {
e99b03dc 3041 pid = ptid.pid ();
82f73884
PA
3042 if (pid < 0)
3043 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
3044 else
3045 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
3046 }
e38504b3 3047 tid = ptid.lwp ();
82f73884
PA
3048 if (tid < 0)
3049 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
3050 else
3051 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
3052
3053 return buf;
3054}
3055
256642e8
PA
3056/* Extract a PTID from BUF. If non-null, OBUF is set to one past the
3057 last parsed char. Returns null_ptid if no thread id is found, and
3058 throws an error if the thread id has an invalid format. */
82f73884
PA
3059
3060static ptid_t
256642e8 3061read_ptid (const char *buf, const char **obuf)
82f73884 3062{
256642e8
PA
3063 const char *p = buf;
3064 const char *pp;
82f73884 3065 ULONGEST pid = 0, tid = 0;
82f73884
PA
3066
3067 if (*p == 'p')
3068 {
3069 /* Multi-process ptid. */
3070 pp = unpack_varlen_hex (p + 1, &pid);
3071 if (*pp != '.')
b37520b6 3072 error (_("invalid remote ptid: %s"), p);
82f73884
PA
3073
3074 p = pp;
3075 pp = unpack_varlen_hex (p + 1, &tid);
3076 if (obuf)
3077 *obuf = pp;
fd79271b 3078 return ptid_t (pid, tid, 0);
82f73884
PA
3079 }
3080
3081 /* No multi-process. Just a tid. */
3082 pp = unpack_varlen_hex (p, &tid);
3083
c9f35b34
KB
3084 /* Return null_ptid when no thread id is found. */
3085 if (p == pp)
3086 {
3087 if (obuf)
3088 *obuf = pp;
3089 return null_ptid;
3090 }
3091
82f73884 3092 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
3093 what's in inferior_ptid, unless it's null at this point. If so,
3094 then since there's no way to know the pid of the reported
3095 threads, use the magic number. */
d7e15655 3096 if (inferior_ptid == null_ptid)
e99b03dc 3097 pid = magic_null_ptid.pid ();
ca19bf23 3098 else
e99b03dc 3099 pid = inferior_ptid.pid ();
82f73884
PA
3100
3101 if (obuf)
3102 *obuf = pp;
fd79271b 3103 return ptid_t (pid, tid, 0);
82f73884
PA
3104}
3105
c906108c 3106static int
fba45db2 3107stubhex (int ch)
c906108c
SS
3108{
3109 if (ch >= 'a' && ch <= 'f')
3110 return ch - 'a' + 10;
3111 if (ch >= '0' && ch <= '9')
3112 return ch - '0';
3113 if (ch >= 'A' && ch <= 'F')
3114 return ch - 'A' + 10;
3115 return -1;
3116}
3117
3118static int
cecb1912 3119stub_unpack_int (const char *buff, int fieldlength)
c906108c
SS
3120{
3121 int nibble;
3122 int retval = 0;
3123
3124 while (fieldlength)
3125 {
3126 nibble = stubhex (*buff++);
3127 retval |= nibble;
3128 fieldlength--;
3129 if (fieldlength)
3130 retval = retval << 4;
3131 }
3132 return retval;
3133}
3134
cecb1912
SM
3135static const char *
3136unpack_nibble (const char *buf, int *val)
c906108c 3137{
b7589f7d 3138 *val = fromhex (*buf++);
c906108c
SS
3139 return buf;
3140}
3141
cecb1912
SM
3142static const char *
3143unpack_byte (const char *buf, int *value)
c906108c
SS
3144{
3145 *value = stub_unpack_int (buf, 2);
3146 return buf + 2;
3147}
3148
3149static char *
fba45db2 3150pack_int (char *buf, int value)
c906108c
SS
3151{
3152 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3153 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3154 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3155 buf = pack_hex_byte (buf, (value & 0xff));
3156 return buf;
3157}
3158
cecb1912
SM
3159static const char *
3160unpack_int (const char *buf, int *value)
c906108c
SS
3161{
3162 *value = stub_unpack_int (buf, 8);
3163 return buf + 8;
3164}
3165
23860348 3166#if 0 /* Currently unused, uncomment when needed. */
a14ed312 3167static char *pack_string (char *pkt, char *string);
c906108c
SS
3168
3169static char *
fba45db2 3170pack_string (char *pkt, char *string)
c906108c
SS
3171{
3172 char ch;
3173 int len;
3174
3175 len = strlen (string);
3176 if (len > 200)
23860348 3177 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
3178 pkt = pack_hex_byte (pkt, len);
3179 while (len-- > 0)
3180 {
3181 ch = *string++;
3182 if ((ch == '\0') || (ch == '#'))
23860348 3183 ch = '*'; /* Protect encapsulation. */
c906108c
SS
3184 *pkt++ = ch;
3185 }
3186 return pkt;
3187}
3188#endif /* 0 (unused) */
3189
cecb1912
SM
3190static const char *
3191unpack_string (const char *src, char *dest, int length)
c906108c
SS
3192{
3193 while (length--)
3194 *dest++ = *src++;
3195 *dest = '\0';
3196 return src;
3197}
3198
3199static char *
fba45db2 3200pack_threadid (char *pkt, threadref *id)
c906108c
SS
3201{
3202 char *limit;
3203 unsigned char *altid;
3204
3205 altid = (unsigned char *) id;
3206 limit = pkt + BUF_THREAD_ID_SIZE;
3207 while (pkt < limit)
3208 pkt = pack_hex_byte (pkt, *altid++);
3209 return pkt;
3210}
3211
3212
cecb1912
SM
3213static const char *
3214unpack_threadid (const char *inbuf, threadref *id)
c906108c
SS
3215{
3216 char *altref;
cecb1912 3217 const char *limit = inbuf + BUF_THREAD_ID_SIZE;
c906108c
SS
3218 int x, y;
3219
3220 altref = (char *) id;
3221
3222 while (inbuf < limit)
3223 {
3224 x = stubhex (*inbuf++);
3225 y = stubhex (*inbuf++);
3226 *altref++ = (x << 4) | y;
3227 }
3228 return inbuf;
3229}
3230
3231/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 3232 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
3233 to use 64bit thread references internally. This is an adapter
3234 function. */
3235
3236void
fba45db2 3237int_to_threadref (threadref *id, int value)
c906108c
SS
3238{
3239 unsigned char *scan;
3240
3241 scan = (unsigned char *) id;
3242 {
3243 int i = 4;
3244 while (i--)
3245 *scan++ = 0;
3246 }
3247 *scan++ = (value >> 24) & 0xff;
3248 *scan++ = (value >> 16) & 0xff;
3249 *scan++ = (value >> 8) & 0xff;
3250 *scan++ = (value & 0xff);
3251}
3252
3253static int
fba45db2 3254threadref_to_int (threadref *ref)
c906108c
SS
3255{
3256 int i, value = 0;
3257 unsigned char *scan;
3258
cfd77fa1 3259 scan = *ref;
c906108c
SS
3260 scan += 4;
3261 i = 4;
3262 while (i-- > 0)
3263 value = (value << 8) | ((*scan++) & 0xff);
3264 return value;
3265}
3266
3267static void
fba45db2 3268copy_threadref (threadref *dest, threadref *src)
c906108c
SS
3269{
3270 int i;
3271 unsigned char *csrc, *cdest;
3272
3273 csrc = (unsigned char *) src;
3274 cdest = (unsigned char *) dest;
3275 i = 8;
3276 while (i--)
3277 *cdest++ = *csrc++;
3278}
3279
3280static int
fba45db2 3281threadmatch (threadref *dest, threadref *src)
c906108c 3282{
23860348 3283 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
3284#if 0
3285 unsigned char *srcp, *destp;
3286 int i, result;
3287 srcp = (char *) src;
3288 destp = (char *) dest;
3289
3290 result = 1;
3291 while (i-- > 0)
3292 result &= (*srcp++ == *destp++) ? 1 : 0;
3293 return result;
3294#endif
3295 return 1;
3296}
3297
3298/*
c5aa993b
JM
3299 threadid:1, # always request threadid
3300 context_exists:2,
3301 display:4,
3302 unique_name:8,
3303 more_display:16
3304 */
c906108c
SS
3305
3306/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3307
3308static char *
fba45db2 3309pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 3310{
23860348
MS
3311 *pkt++ = 'q'; /* Info Query */
3312 *pkt++ = 'P'; /* process or thread info */
3313 pkt = pack_int (pkt, mode); /* mode */
c906108c 3314 pkt = pack_threadid (pkt, id); /* threadid */
23860348 3315 *pkt = '\0'; /* terminate */
c906108c
SS
3316 return pkt;
3317}
3318
23860348 3319/* These values tag the fields in a thread info response packet. */
c906108c 3320/* Tagging the fields allows us to request specific fields and to
23860348 3321 add more fields as time goes by. */
c906108c 3322
23860348 3323#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 3324#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 3325 fetch registers and its stack? */
c5aa993b 3326#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 3327#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 3328#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 3329 the process. */
c906108c 3330
6b8edb51 3331int
cecb1912 3332remote_target::remote_unpack_thread_info_response (const char *pkt,
6b8edb51
PA
3333 threadref *expectedref,
3334 gdb_ext_thread_info *info)
c906108c 3335{
d01949b6 3336 struct remote_state *rs = get_remote_state ();
c906108c 3337 int mask, length;
cfd77fa1 3338 int tag;
c906108c 3339 threadref ref;
cecb1912 3340 const char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */
c906108c
SS
3341 int retval = 1;
3342
23860348 3343 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
3344 info->active = 0;
3345 info->display[0] = '\0';
3346 info->shortname[0] = '\0';
3347 info->more_display[0] = '\0';
3348
23860348
MS
3349 /* Assume the characters indicating the packet type have been
3350 stripped. */
c906108c
SS
3351 pkt = unpack_int (pkt, &mask); /* arg mask */
3352 pkt = unpack_threadid (pkt, &ref);
3353
3354 if (mask == 0)
8a3fe4f8 3355 warning (_("Incomplete response to threadinfo request."));
c906108c 3356 if (!threadmatch (&ref, expectedref))
23860348 3357 { /* This is an answer to a different request. */
8a3fe4f8 3358 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
3359 return 0;
3360 }
3361 copy_threadref (&info->threadid, &ref);
3362
405feb71 3363 /* Loop on tagged fields , try to bail if something goes wrong. */
c906108c 3364
23860348
MS
3365 /* Packets are terminated with nulls. */
3366 while ((pkt < limit) && mask && *pkt)
c906108c
SS
3367 {
3368 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
3369 pkt = unpack_byte (pkt, &length); /* length */
3370 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 3371 {
8a3fe4f8 3372 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
3373 retval = 0;
3374 break;
3375 }
3376 if (tag == TAG_THREADID)
3377 {
3378 if (length != 16)
3379 {
8a3fe4f8 3380 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
3381 retval = 0;
3382 break;
3383 }
3384 pkt = unpack_threadid (pkt, &ref);
3385 mask = mask & ~TAG_THREADID;
3386 continue;
3387 }
3388 if (tag == TAG_EXISTS)
3389 {
3390 info->active = stub_unpack_int (pkt, length);
3391 pkt += length;
3392 mask = mask & ~(TAG_EXISTS);
3393 if (length > 8)
3394 {
8a3fe4f8 3395 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
3396 retval = 0;
3397 break;
3398 }
3399 continue;
3400 }
3401 if (tag == TAG_THREADNAME)
3402 {
3403 pkt = unpack_string (pkt, &info->shortname[0], length);
3404 mask = mask & ~TAG_THREADNAME;
3405 continue;
3406 }
3407 if (tag == TAG_DISPLAY)
3408 {
3409 pkt = unpack_string (pkt, &info->display[0], length);
3410 mask = mask & ~TAG_DISPLAY;
3411 continue;
3412 }
3413 if (tag == TAG_MOREDISPLAY)
3414 {
3415 pkt = unpack_string (pkt, &info->more_display[0], length);
3416 mask = mask & ~TAG_MOREDISPLAY;
3417 continue;
3418 }
8a3fe4f8 3419 warning (_("ERROR RMT: unknown thread info tag."));
23860348 3420 break; /* Not a tag we know about. */
c906108c
SS
3421 }
3422 return retval;
3423}
3424
6b8edb51
PA
3425int
3426remote_target::remote_get_threadinfo (threadref *threadid,
3427 int fieldset,
3428 gdb_ext_thread_info *info)
c906108c 3429{
d01949b6 3430 struct remote_state *rs = get_remote_state ();
c906108c 3431 int result;
c906108c 3432
8d64371b 3433 pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
2e9f7625 3434 putpkt (rs->buf);
8d64371b 3435 getpkt (&rs->buf, 0);
3084dd77
PA
3436
3437 if (rs->buf[0] == '\0')
3438 return 0;
3439
8d64371b 3440 result = remote_unpack_thread_info_response (&rs->buf[2],
23860348 3441 threadid, info);
c906108c
SS
3442 return result;
3443}
3444
c906108c
SS
3445/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3446
3447static char *
fba45db2
KB
3448pack_threadlist_request (char *pkt, int startflag, int threadcount,
3449 threadref *nextthread)
c906108c
SS
3450{
3451 *pkt++ = 'q'; /* info query packet */
3452 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 3453 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
3454 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3455 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3456 *pkt = '\0';
3457 return pkt;
3458}
3459
3460/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3461
6b8edb51 3462int
cecb1912 3463remote_target::parse_threadlist_response (const char *pkt, int result_limit,
6b8edb51
PA
3464 threadref *original_echo,
3465 threadref *resultlist,
3466 int *doneflag)
c906108c 3467{
d01949b6 3468 struct remote_state *rs = get_remote_state ();
c906108c
SS
3469 int count, resultcount, done;
3470
3471 resultcount = 0;
3472 /* Assume the 'q' and 'M chars have been stripped. */
cecb1912 3473 const char *limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
23860348 3474 /* done parse past here */
c906108c
SS
3475 pkt = unpack_byte (pkt, &count); /* count field */
3476 pkt = unpack_nibble (pkt, &done);
3477 /* The first threadid is the argument threadid. */
3478 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3479 while ((count-- > 0) && (pkt < limit))
3480 {
3481 pkt = unpack_threadid (pkt, resultlist++);
3482 if (resultcount++ >= result_limit)
3483 break;
3484 }
3485 if (doneflag)
3486 *doneflag = done;
3487 return resultcount;
3488}
3489
6dc54d91
PA
3490/* Fetch the next batch of threads from the remote. Returns -1 if the
3491 qL packet is not supported, 0 on error and 1 on success. */
3492
6b8edb51
PA
3493int
3494remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3495 int result_limit, int *done, int *result_count,
3496 threadref *threadlist)
c906108c 3497{
d01949b6 3498 struct remote_state *rs = get_remote_state ();
c906108c
SS
3499 int result = 1;
3500
405feb71 3501 /* Truncate result limit to be smaller than the packet size. */
3e43a32a
MS
3502 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3503 >= get_remote_packet_size ())
ea9c271d 3504 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 3505
8d64371b
TT
3506 pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3507 nextthread);
6d820c5c 3508 putpkt (rs->buf);
8d64371b
TT
3509 getpkt (&rs->buf, 0);
3510 if (rs->buf[0] == '\0')
6dc54d91
PA
3511 {
3512 /* Packet not supported. */
3513 return -1;
3514 }
3515
3516 *result_count =
8d64371b 3517 parse_threadlist_response (&rs->buf[2], result_limit,
6dc54d91 3518 &rs->echo_nextthread, threadlist, done);
c906108c 3519
0d031856 3520 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 3521 {
23860348 3522 /* FIXME: This is a good reason to drop the packet. */
405feb71
TV
3523 /* Possibly, there is a duplicate response. */
3524 /* Possibilities :
dda83cd7
SM
3525 retransmit immediatly - race conditions
3526 retransmit after timeout - yes
3527 exit
3528 wait for packet, then exit
c906108c 3529 */
8a3fe4f8 3530 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 3531 return 0; /* I choose simply exiting. */
c906108c
SS
3532 }
3533 if (*result_count <= 0)
3534 {
3535 if (*done != 1)
3536 {
8a3fe4f8 3537 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
3538 result = 0;
3539 }
3540 return result; /* break; */
3541 }
3542 if (*result_count > result_limit)
3543 {
3544 *result_count = 0;
8a3fe4f8 3545 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
3546 return 0;
3547 }
3548 return result;
3549}
3550
6dc54d91
PA
3551/* Fetch the list of remote threads, with the qL packet, and call
3552 STEPFUNCTION for each thread found. Stops iterating and returns 1
3553 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3554 STEPFUNCTION returns false. If the packet is not supported,
3555 returns -1. */
c906108c 3556
6b8edb51
PA
3557int
3558remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3559 void *context, int looplimit)
c906108c 3560{
0d031856 3561 struct remote_state *rs = get_remote_state ();
c906108c
SS
3562 int done, i, result_count;
3563 int startflag = 1;
3564 int result = 1;
3565 int loopcount = 0;
c906108c
SS
3566
3567 done = 0;
3568 while (!done)
3569 {
3570 if (loopcount++ > looplimit)
3571 {
3572 result = 0;
8a3fe4f8 3573 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
3574 break;
3575 }
6dc54d91
PA
3576 result = remote_get_threadlist (startflag, &rs->nextthread,
3577 MAXTHREADLISTRESULTS,
3578 &done, &result_count,
3579 rs->resultthreadlist);
3580 if (result <= 0)
3581 break;
23860348 3582 /* Clear for later iterations. */
c906108c
SS
3583 startflag = 0;
3584 /* Setup to resume next batch of thread references, set nextthread. */
3585 if (result_count >= 1)
0d031856
TT
3586 copy_threadref (&rs->nextthread,
3587 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
3588 i = 0;
3589 while (result_count--)
6dc54d91
PA
3590 {
3591 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3592 {
3593 result = 0;
3594 break;
3595 }
3596 }
c906108c
SS
3597 }
3598 return result;
3599}
3600
6dc54d91
PA
3601/* A thread found on the remote target. */
3602
21fe1c75 3603struct thread_item
6dc54d91 3604{
21fe1c75
SM
3605 explicit thread_item (ptid_t ptid_)
3606 : ptid (ptid_)
3607 {}
3608
3609 thread_item (thread_item &&other) = default;
3610 thread_item &operator= (thread_item &&other) = default;
3611
3612 DISABLE_COPY_AND_ASSIGN (thread_item);
3613
6dc54d91
PA
3614 /* The thread's PTID. */
3615 ptid_t ptid;
3616
21fe1c75
SM
3617 /* The thread's extra info. */
3618 std::string extra;
6dc54d91 3619
21fe1c75
SM
3620 /* The thread's name. */
3621 std::string name;
79efa585 3622
6dc54d91 3623 /* The core the thread was running on. -1 if not known. */
21fe1c75 3624 int core = -1;
f6327dcb
KB
3625
3626 /* The thread handle associated with the thread. */
21fe1c75 3627 gdb::byte_vector thread_handle;
21fe1c75 3628};
6dc54d91
PA
3629
3630/* Context passed around to the various methods listing remote
3631 threads. As new threads are found, they're added to the ITEMS
3632 vector. */
3633
3634struct threads_listing_context
3635{
21fe1c75
SM
3636 /* Return true if this object contains an entry for a thread with ptid
3637 PTID. */
6dc54d91 3638
21fe1c75
SM
3639 bool contains_thread (ptid_t ptid) const
3640 {
3641 auto match_ptid = [&] (const thread_item &item)
3642 {
3643 return item.ptid == ptid;
3644 };
80134cf5 3645
21fe1c75
SM
3646 auto it = std::find_if (this->items.begin (),
3647 this->items.end (),
3648 match_ptid);
80134cf5 3649
21fe1c75
SM
3650 return it != this->items.end ();
3651 }
80134cf5 3652
21fe1c75 3653 /* Remove the thread with ptid PTID. */
80134cf5 3654
21fe1c75
SM
3655 void remove_thread (ptid_t ptid)
3656 {
3657 auto match_ptid = [&] (const thread_item &item)
3658 {
dda83cd7 3659 return item.ptid == ptid;
21fe1c75 3660 };
cbb8991c 3661
21fe1c75
SM
3662 auto it = std::remove_if (this->items.begin (),
3663 this->items.end (),
3664 match_ptid);
cbb8991c 3665
21fe1c75
SM
3666 if (it != this->items.end ())
3667 this->items.erase (it);
3668 }
3669
3670 /* The threads found on the remote target. */
3671 std::vector<thread_item> items;
3672};
cbb8991c 3673
c906108c 3674static int
6dc54d91 3675remote_newthread_step (threadref *ref, void *data)
c906108c 3676{
19ba03f4
SM
3677 struct threads_listing_context *context
3678 = (struct threads_listing_context *) data;
21fe1c75
SM
3679 int pid = inferior_ptid.pid ();
3680 int lwp = threadref_to_int (ref);
3681 ptid_t ptid (pid, lwp);
6dc54d91 3682
21fe1c75 3683 context->items.emplace_back (ptid);
6dc54d91 3684
c906108c
SS
3685 return 1; /* continue iterator */
3686}
3687
3688#define CRAZY_MAX_THREADS 1000
3689
6b8edb51
PA
3690ptid_t
3691remote_target::remote_current_thread (ptid_t oldpid)
c906108c 3692{
d01949b6 3693 struct remote_state *rs = get_remote_state ();
c906108c
SS
3694
3695 putpkt ("qC");
8d64371b 3696 getpkt (&rs->buf, 0);
2e9f7625 3697 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34 3698 {
256642e8 3699 const char *obuf;
c9f35b34
KB
3700 ptid_t result;
3701
3702 result = read_ptid (&rs->buf[2], &obuf);
2189c312
SM
3703 if (*obuf != '\0')
3704 remote_debug_printf ("warning: garbage in qC reply");
c9f35b34
KB
3705
3706 return result;
3707 }
c906108c
SS
3708 else
3709 return oldpid;
3710}
3711
6dc54d91 3712/* List remote threads using the deprecated qL packet. */
cce74817 3713
6b8edb51
PA
3714int
3715remote_target::remote_get_threads_with_ql (threads_listing_context *context)
c906108c 3716{
6dc54d91
PA
3717 if (remote_threadlist_iterator (remote_newthread_step, context,
3718 CRAZY_MAX_THREADS) >= 0)
3719 return 1;
3720
3721 return 0;
c906108c
SS
3722}
3723
dc146f7c
VP
3724#if defined(HAVE_LIBEXPAT)
3725
dc146f7c
VP
3726static void
3727start_thread (struct gdb_xml_parser *parser,
3728 const struct gdb_xml_element *element,
4d0fdd9b
SM
3729 void *user_data,
3730 std::vector<gdb_xml_value> &attributes)
dc146f7c 3731{
19ba03f4
SM
3732 struct threads_listing_context *data
3733 = (struct threads_listing_context *) user_data;
3d2c1d41 3734 struct gdb_xml_value *attr;
dc146f7c 3735
4d0fdd9b 3736 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
21fe1c75
SM
3737 ptid_t ptid = read_ptid (id, NULL);
3738
3739 data->items.emplace_back (ptid);
3740 thread_item &item = data->items.back ();
dc146f7c 3741
3d2c1d41
PA
3742 attr = xml_find_attribute (attributes, "core");
3743 if (attr != NULL)
4d0fdd9b 3744 item.core = *(ULONGEST *) attr->value.get ();
dc146f7c 3745
79efa585 3746 attr = xml_find_attribute (attributes, "name");
21fe1c75 3747 if (attr != NULL)
4d0fdd9b 3748 item.name = (const char *) attr->value.get ();
79efa585 3749
f6327dcb
KB
3750 attr = xml_find_attribute (attributes, "handle");
3751 if (attr != NULL)
4d0fdd9b 3752 item.thread_handle = hex2bin ((const char *) attr->value.get ());
dc146f7c
VP
3753}
3754
3755static void
3756end_thread (struct gdb_xml_parser *parser,
3757 const struct gdb_xml_element *element,
3758 void *user_data, const char *body_text)
3759{
19ba03f4
SM
3760 struct threads_listing_context *data
3761 = (struct threads_listing_context *) user_data;
dc146f7c 3762
21fe1c75
SM
3763 if (body_text != NULL && *body_text != '\0')
3764 data->items.back ().extra = body_text;
dc146f7c
VP
3765}
3766
3767const struct gdb_xml_attribute thread_attributes[] = {
3768 { "id", GDB_XML_AF_NONE, NULL, NULL },
3769 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3770 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
f6327dcb 3771 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3772 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3773};
3774
3775const struct gdb_xml_element thread_children[] = {
3776 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3777};
3778
3779const struct gdb_xml_element threads_children[] = {
3780 { "thread", thread_attributes, thread_children,
3781 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3782 start_thread, end_thread },
3783 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3784};
3785
3786const struct gdb_xml_element threads_elements[] = {
3787 { "threads", NULL, threads_children,
3788 GDB_XML_EF_NONE, NULL, NULL },
3789 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3790};
3791
3792#endif
3793
6dc54d91 3794/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3795
6b8edb51
PA
3796int
3797remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
0f71a2f6 3798{
dc146f7c 3799#if defined(HAVE_LIBEXPAT)
4082afcc 3800 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3801 {
9018be22 3802 gdb::optional<gdb::char_vector> xml
6b8edb51 3803 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
efc0eabd 3804
9018be22 3805 if (xml && (*xml)[0] != '\0')
dc146f7c 3806 {
6dc54d91 3807 gdb_xml_parse_quick (_("threads"), "threads.dtd",
9018be22 3808 threads_elements, xml->data (), context);
dc146f7c
VP
3809 }
3810
6dc54d91 3811 return 1;
dc146f7c
VP
3812 }
3813#endif
3814
6dc54d91
PA
3815 return 0;
3816}
3817
3818/* List remote threads using qfThreadInfo/qsThreadInfo. */
3819
6b8edb51
PA
3820int
3821remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
6dc54d91
PA
3822{
3823 struct remote_state *rs = get_remote_state ();
3824
b80fafe3 3825 if (rs->use_threadinfo_query)
9d1f7ab2 3826 {
256642e8 3827 const char *bufp;
6dc54d91 3828
9d1f7ab2 3829 putpkt ("qfThreadInfo");
8d64371b
TT
3830 getpkt (&rs->buf, 0);
3831 bufp = rs->buf.data ();
9d1f7ab2 3832 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3833 {
9d1f7ab2
MS
3834 while (*bufp++ == 'm') /* reply contains one or more TID */
3835 {
3836 do
3837 {
21fe1c75
SM
3838 ptid_t ptid = read_ptid (bufp, &bufp);
3839 context->items.emplace_back (ptid);
9d1f7ab2
MS
3840 }
3841 while (*bufp++ == ','); /* comma-separated list */
3842 putpkt ("qsThreadInfo");
8d64371b
TT
3843 getpkt (&rs->buf, 0);
3844 bufp = rs->buf.data ();
9d1f7ab2 3845 }
6dc54d91
PA
3846 return 1;
3847 }
3848 else
3849 {
3850 /* Packet not recognized. */
3851 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3852 }
3853 }
3854
6dc54d91
PA
3855 return 0;
3856}
3857
a05575d3
TBA
3858/* Return true if INF only has one non-exited thread. */
3859
3860static bool
3861has_single_non_exited_thread (inferior *inf)
3862{
3863 int count = 0;
3864 for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
3865 if (++count > 1)
3866 break;
3867 return count == 1;
3868}
3869
e8032dde 3870/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3871 targets. */
3872
f6ac5f3d
PA
3873void
3874remote_target::update_thread_list ()
6dc54d91 3875{
6dc54d91 3876 struct threads_listing_context context;
ab970af1 3877 int got_list = 0;
e8032dde 3878
6dc54d91
PA
3879 /* We have a few different mechanisms to fetch the thread list. Try
3880 them all, starting with the most preferred one first, falling
3881 back to older methods. */
6b8edb51
PA
3882 if (remote_get_threads_with_qxfer (&context)
3883 || remote_get_threads_with_qthreadinfo (&context)
3884 || remote_get_threads_with_ql (&context))
6dc54d91 3885 {
ab970af1
PA
3886 got_list = 1;
3887
21fe1c75 3888 if (context.items.empty ()
f6ac5f3d 3889 && remote_thread_always_alive (inferior_ptid))
7d1a114c
PA
3890 {
3891 /* Some targets don't really support threads, but still
3892 reply an (empty) thread list in response to the thread
3893 listing packets, instead of replying "packet not
3894 supported". Exit early so we don't delete the main
3895 thread. */
7d1a114c
PA
3896 return;
3897 }
3898
ab970af1
PA
3899 /* CONTEXT now holds the current thread list on the remote
3900 target end. Delete GDB-side threads no longer found on the
3901 target. */
08036331 3902 for (thread_info *tp : all_threads_safe ())
cbb8991c 3903 {
5b6d1e4f
PA
3904 if (tp->inf->process_target () != this)
3905 continue;
3906
21fe1c75 3907 if (!context.contains_thread (tp->ptid))
ab970af1 3908 {
a05575d3
TBA
3909 /* Do not remove the thread if it is the last thread in
3910 the inferior. This situation happens when we have a
3911 pending exit process status to process. Otherwise we
3912 may end up with a seemingly live inferior (i.e. pid
3913 != 0) that has no threads. */
3914 if (has_single_non_exited_thread (tp->inf))
3915 continue;
3916
ab970af1 3917 /* Not found. */
00431a78 3918 delete_thread (tp);
ab970af1 3919 }
cbb8991c
DB
3920 }
3921
3922 /* Remove any unreported fork child threads from CONTEXT so
3923 that we don't interfere with follow fork, which is where
3924 creation of such threads is handled. */
3925 remove_new_fork_children (&context);
74531fed 3926
ab970af1 3927 /* And now add threads we don't know about yet to our list. */
21fe1c75 3928 for (thread_item &item : context.items)
6dc54d91 3929 {
21fe1c75 3930 if (item.ptid != null_ptid)
6dc54d91 3931 {
6dc54d91 3932 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3933 executing until proven otherwise with a stop reply.
3934 In all-stop, we can only get here if all threads are
6dc54d91 3935 stopped. */
0d5b594f 3936 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3937
21fe1c75 3938 remote_notice_new_inferior (item.ptid, executing);
6dc54d91 3939
5b6d1e4f 3940 thread_info *tp = find_thread_ptid (this, item.ptid);
00431a78 3941 remote_thread_info *info = get_remote_thread_info (tp);
21fe1c75 3942 info->core = item.core;
7aabaf9d
SM
3943 info->extra = std::move (item.extra);
3944 info->name = std::move (item.name);
3945 info->thread_handle = std::move (item.thread_handle);
6dc54d91
PA
3946 }
3947 }
3948 }
3949
ab970af1
PA
3950 if (!got_list)
3951 {
3952 /* If no thread listing method is supported, then query whether
3953 each known thread is alive, one by one, with the T packet.
3954 If the target doesn't support threads at all, then this is a
3955 no-op. See remote_thread_alive. */
3956 prune_threads ();
3957 }
9d1f7ab2
MS
3958}
3959
802188a7 3960/*
9d1f7ab2
MS
3961 * Collect a descriptive string about the given thread.
3962 * The target may say anything it wants to about the thread
3963 * (typically info about its blocked / runnable state, name, etc.).
3964 * This string will appear in the info threads display.
802188a7 3965 *
9d1f7ab2
MS
3966 * Optional: targets are not required to implement this function.
3967 */
3968
f6ac5f3d
PA
3969const char *
3970remote_target::extra_thread_info (thread_info *tp)
9d1f7ab2 3971{
d01949b6 3972 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3973 int set;
3974 threadref id;
3975 struct gdb_ext_thread_info threadinfo;
9d1f7ab2 3976
5d93a237 3977 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3978 internal_error (__FILE__, __LINE__,
e2e0b3e5 3979 _("remote_threads_extra_info"));
9d1f7ab2 3980
d7e15655 3981 if (tp->ptid == magic_null_ptid
e38504b3 3982 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
60e569b9
PA
3983 /* This is the main thread which was added by GDB. The remote
3984 server doesn't know about it. */
3985 return NULL;
3986
c76a8ea3
PA
3987 std::string &extra = get_remote_thread_info (tp)->extra;
3988
3989 /* If already have cached info, use it. */
3990 if (!extra.empty ())
3991 return extra.c_str ();
3992
4082afcc 3993 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3994 {
c76a8ea3
PA
3995 /* If we're using qXfer:threads:read, then the extra info is
3996 included in the XML. So if we didn't have anything cached,
3997 it's because there's really no extra info. */
3998 return NULL;
dc146f7c
VP
3999 }
4000
b80fafe3 4001 if (rs->use_threadextra_query)
9d1f7ab2 4002 {
8d64371b
TT
4003 char *b = rs->buf.data ();
4004 char *endb = b + get_remote_packet_size ();
82f73884
PA
4005
4006 xsnprintf (b, endb - b, "qThreadExtraInfo,");
4007 b += strlen (b);
4008 write_ptid (b, endb, tp->ptid);
4009
2e9f7625 4010 putpkt (rs->buf);
8d64371b 4011 getpkt (&rs->buf, 0);
2e9f7625 4012 if (rs->buf[0] != 0)
9d1f7ab2 4013 {
8d64371b
TT
4014 extra.resize (strlen (rs->buf.data ()) / 2);
4015 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
c76a8ea3 4016 return extra.c_str ();
9d1f7ab2 4017 }
0f71a2f6 4018 }
9d1f7ab2
MS
4019
4020 /* If the above query fails, fall back to the old method. */
b80fafe3 4021 rs->use_threadextra_query = 0;
9d1f7ab2
MS
4022 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
4023 | TAG_MOREDISPLAY | TAG_DISPLAY;
e38504b3 4024 int_to_threadref (&id, tp->ptid.lwp ());
9d1f7ab2
MS
4025 if (remote_get_threadinfo (&id, set, &threadinfo))
4026 if (threadinfo.active)
0f71a2f6 4027 {
9d1f7ab2 4028 if (*threadinfo.shortname)
c76a8ea3 4029 string_appendf (extra, " Name: %s", threadinfo.shortname);
9d1f7ab2 4030 if (*threadinfo.display)
c76a8ea3
PA
4031 {
4032 if (!extra.empty ())
4033 extra += ',';
4034 string_appendf (extra, " State: %s", threadinfo.display);
4035 }
9d1f7ab2 4036 if (*threadinfo.more_display)
c5aa993b 4037 {
c76a8ea3
PA
4038 if (!extra.empty ())
4039 extra += ',';
4040 string_appendf (extra, " Priority: %s", threadinfo.more_display);
c5aa993b 4041 }
c76a8ea3 4042 return extra.c_str ();
0f71a2f6 4043 }
9d1f7ab2 4044 return NULL;
0f71a2f6 4045}
c906108c 4046\f
c5aa993b 4047
f6ac5f3d
PA
4048bool
4049remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
4050 struct static_tracepoint_marker *marker)
0fb4aa4b
PA
4051{
4052 struct remote_state *rs = get_remote_state ();
8d64371b 4053 char *p = rs->buf.data ();
0fb4aa4b 4054
bba74b36 4055 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
4056 p += strlen (p);
4057 p += hexnumstr (p, addr);
4058 putpkt (rs->buf);
8d64371b
TT
4059 getpkt (&rs->buf, 0);
4060 p = rs->buf.data ();
0fb4aa4b
PA
4061
4062 if (*p == 'E')
4063 error (_("Remote failure reply: %s"), p);
4064
4065 if (*p++ == 'm')
4066 {
256642e8 4067 parse_static_tracepoint_marker_definition (p, NULL, marker);
5d9310c4 4068 return true;
0fb4aa4b
PA
4069 }
4070
5d9310c4 4071 return false;
0fb4aa4b
PA
4072}
4073
f6ac5f3d
PA
4074std::vector<static_tracepoint_marker>
4075remote_target::static_tracepoint_markers_by_strid (const char *strid)
0fb4aa4b
PA
4076{
4077 struct remote_state *rs = get_remote_state ();
5d9310c4 4078 std::vector<static_tracepoint_marker> markers;
256642e8 4079 const char *p;
5d9310c4 4080 static_tracepoint_marker marker;
0fb4aa4b
PA
4081
4082 /* Ask for a first packet of static tracepoint marker
4083 definition. */
4084 putpkt ("qTfSTM");
8d64371b
TT
4085 getpkt (&rs->buf, 0);
4086 p = rs->buf.data ();
0fb4aa4b
PA
4087 if (*p == 'E')
4088 error (_("Remote failure reply: %s"), p);
4089
0fb4aa4b
PA
4090 while (*p++ == 'm')
4091 {
0fb4aa4b
PA
4092 do
4093 {
5d9310c4 4094 parse_static_tracepoint_marker_definition (p, &p, &marker);
0fb4aa4b 4095
5d9310c4
SM
4096 if (strid == NULL || marker.str_id == strid)
4097 markers.push_back (std::move (marker));
0fb4aa4b
PA
4098 }
4099 while (*p++ == ','); /* comma-separated list */
4100 /* Ask for another packet of static tracepoint definition. */
4101 putpkt ("qTsSTM");
8d64371b
TT
4102 getpkt (&rs->buf, 0);
4103 p = rs->buf.data ();
0fb4aa4b
PA
4104 }
4105
0fb4aa4b
PA
4106 return markers;
4107}
4108
4109\f
10760264
JB
4110/* Implement the to_get_ada_task_ptid function for the remote targets. */
4111
f6ac5f3d
PA
4112ptid_t
4113remote_target::get_ada_task_ptid (long lwp, long thread)
10760264 4114{
e99b03dc 4115 return ptid_t (inferior_ptid.pid (), lwp, 0);
10760264
JB
4116}
4117\f
4118
24b06219 4119/* Restart the remote side; this is an extended protocol operation. */
c906108c 4120
6b8edb51
PA
4121void
4122remote_target::extended_remote_restart ()
c906108c 4123{
d01949b6 4124 struct remote_state *rs = get_remote_state ();
c906108c
SS
4125
4126 /* Send the restart command; for reasons I don't understand the
4127 remote side really expects a number after the "R". */
8d64371b 4128 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
6d820c5c 4129 putpkt (rs->buf);
c906108c 4130
ad9a8f3f 4131 remote_fileio_reset ();
c906108c
SS
4132}
4133\f
4134/* Clean up connection to a remote debugger. */
4135
f6ac5f3d
PA
4136void
4137remote_target::close ()
c906108c 4138{
048094ac 4139 /* Make sure we leave stdin registered in the event loop. */
f6ac5f3d 4140 terminal_ours ();
ce5ce7ed 4141
6b8edb51
PA
4142 trace_reset_local_state ();
4143
4144 delete this;
4145}
4146
4147remote_target::~remote_target ()
4148{
4149 struct remote_state *rs = get_remote_state ();
4150
4151 /* Check for NULL because we may get here with a partially
4152 constructed target/connection. */
4153 if (rs->remote_desc == nullptr)
4154 return;
4155
4156 serial_close (rs->remote_desc);
4157
4158 /* We are destroying the remote target, so we should discard
f48ff2a7 4159 everything of this target. */
6b8edb51 4160 discard_pending_stop_replies_in_queue ();
74531fed 4161
6b8edb51
PA
4162 if (rs->remote_async_inferior_event_token)
4163 delete_async_event_handler (&rs->remote_async_inferior_event_token);
722247f1 4164
97dfbadd 4165 delete rs->notif_state;
c906108c
SS
4166}
4167
23860348 4168/* Query the remote side for the text, data and bss offsets. */
c906108c 4169
6b8edb51
PA
4170void
4171remote_target::get_offsets ()
c906108c 4172{
d01949b6 4173 struct remote_state *rs = get_remote_state ();
2e9f7625 4174 char *buf;
085dd6e6 4175 char *ptr;
31d99776
DJ
4176 int lose, num_segments = 0, do_sections, do_segments;
4177 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
31d99776 4178
a42d7dd8 4179 if (current_program_space->symfile_object_file == NULL)
31d99776 4180 return;
c906108c
SS
4181
4182 putpkt ("qOffsets");
8d64371b
TT
4183 getpkt (&rs->buf, 0);
4184 buf = rs->buf.data ();
c906108c
SS
4185
4186 if (buf[0] == '\000')
4187 return; /* Return silently. Stub doesn't support
23860348 4188 this command. */
c906108c
SS
4189 if (buf[0] == 'E')
4190 {
8a3fe4f8 4191 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
4192 return;
4193 }
4194
4195 /* Pick up each field in turn. This used to be done with scanf, but
4196 scanf will make trouble if CORE_ADDR size doesn't match
4197 conversion directives correctly. The following code will work
4198 with any size of CORE_ADDR. */
4199 text_addr = data_addr = bss_addr = 0;
4200 ptr = buf;
4201 lose = 0;
4202
61012eef 4203 if (startswith (ptr, "Text="))
c906108c
SS
4204 {
4205 ptr += 5;
4206 /* Don't use strtol, could lose on big values. */
4207 while (*ptr && *ptr != ';')
4208 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 4209
61012eef 4210 if (startswith (ptr, ";Data="))
31d99776
DJ
4211 {
4212 ptr += 6;
4213 while (*ptr && *ptr != ';')
4214 data_addr = (data_addr << 4) + fromhex (*ptr++);
4215 }
4216 else
4217 lose = 1;
4218
61012eef 4219 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
4220 {
4221 ptr += 5;
4222 while (*ptr && *ptr != ';')
4223 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 4224
31d99776
DJ
4225 if (bss_addr != data_addr)
4226 warning (_("Target reported unsupported offsets: %s"), buf);
4227 }
4228 else
4229 lose = 1;
4230 }
61012eef 4231 else if (startswith (ptr, "TextSeg="))
c906108c 4232 {
31d99776
DJ
4233 ptr += 8;
4234 /* Don't use strtol, could lose on big values. */
c906108c 4235 while (*ptr && *ptr != ';')
31d99776
DJ
4236 text_addr = (text_addr << 4) + fromhex (*ptr++);
4237 num_segments = 1;
4238
61012eef 4239 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
4240 {
4241 ptr += 9;
4242 while (*ptr && *ptr != ';')
4243 data_addr = (data_addr << 4) + fromhex (*ptr++);
4244 num_segments++;
4245 }
c906108c
SS
4246 }
4247 else
4248 lose = 1;
4249
4250 if (lose)
8a3fe4f8 4251 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
4252 else if (*ptr != '\0')
4253 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 4254
a42d7dd8
TT
4255 objfile *objf = current_program_space->symfile_object_file;
4256 section_offsets offs = objf->section_offsets;
c906108c 4257
a42d7dd8 4258 symfile_segment_data_up data = get_symfile_segment_data (objf->obfd);
31d99776
DJ
4259 do_segments = (data != NULL);
4260 do_sections = num_segments == 0;
c906108c 4261
28c32713 4262 if (num_segments > 0)
31d99776 4263 {
31d99776
DJ
4264 segments[0] = text_addr;
4265 segments[1] = data_addr;
4266 }
28c32713
JB
4267 /* If we have two segments, we can still try to relocate everything
4268 by assuming that the .text and .data offsets apply to the whole
4269 text and data segments. Convert the offsets given in the packet
4270 to base addresses for symfile_map_offsets_to_segments. */
68b888ff 4271 else if (data != nullptr && data->segments.size () == 2)
28c32713 4272 {
68b888ff
SM
4273 segments[0] = data->segments[0].base + text_addr;
4274 segments[1] = data->segments[1].base + data_addr;
28c32713
JB
4275 num_segments = 2;
4276 }
8d385431
DJ
4277 /* If the object file has only one segment, assume that it is text
4278 rather than data; main programs with no writable data are rare,
4279 but programs with no code are useless. Of course the code might
4280 have ended up in the data segment... to detect that we would need
4281 the permissions here. */
68b888ff 4282 else if (data && data->segments.size () == 1)
8d385431 4283 {
68b888ff 4284 segments[0] = data->segments[0].base + text_addr;
8d385431
DJ
4285 num_segments = 1;
4286 }
28c32713
JB
4287 /* There's no way to relocate by segment. */
4288 else
4289 do_segments = 0;
31d99776
DJ
4290
4291 if (do_segments)
4292 {
a42d7dd8 4293 int ret = symfile_map_offsets_to_segments (objf->obfd,
62982abd
SM
4294 data.get (), offs,
4295 num_segments, segments);
31d99776
DJ
4296
4297 if (ret == 0 && !do_sections)
3e43a32a
MS
4298 error (_("Can not handle qOffsets TextSeg "
4299 "response with this symbol file"));
31d99776
DJ
4300
4301 if (ret > 0)
4302 do_sections = 0;
4303 }
c906108c 4304
31d99776
DJ
4305 if (do_sections)
4306 {
a42d7dd8 4307 offs[SECT_OFF_TEXT (objf)] = text_addr;
31d99776 4308
3e43a32a
MS
4309 /* This is a temporary kludge to force data and bss to use the
4310 same offsets because that's what nlmconv does now. The real
4311 solution requires changes to the stub and remote.c that I
4312 don't have time to do right now. */
31d99776 4313
a42d7dd8
TT
4314 offs[SECT_OFF_DATA (objf)] = data_addr;
4315 offs[SECT_OFF_BSS (objf)] = data_addr;
31d99776 4316 }
c906108c 4317
a42d7dd8 4318 objfile_relocate (objf, offs);
c906108c
SS
4319}
4320
9a7071a8 4321/* Send interrupt_sequence to remote target. */
6b8edb51
PA
4322
4323void
4324remote_target::send_interrupt_sequence ()
9a7071a8 4325{
5d93a237
TT
4326 struct remote_state *rs = get_remote_state ();
4327
9a7071a8 4328 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 4329 remote_serial_write ("\x03", 1);
9a7071a8 4330 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 4331 serial_send_break (rs->remote_desc);
9a7071a8
JB
4332 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4333 {
5d93a237 4334 serial_send_break (rs->remote_desc);
c33e31fd 4335 remote_serial_write ("g", 1);
9a7071a8
JB
4336 }
4337 else
4338 internal_error (__FILE__, __LINE__,
4339 _("Invalid value for interrupt_sequence_mode: %s."),
4340 interrupt_sequence_mode);
4341}
4342
3405876a
PA
4343
4344/* If STOP_REPLY is a T stop reply, look for the "thread" register,
4345 and extract the PTID. Returns NULL_PTID if not found. */
4346
4347static ptid_t
e3b2741b 4348stop_reply_extract_thread (const char *stop_reply)
3405876a
PA
4349{
4350 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4351 {
256642e8 4352 const char *p;
3405876a
PA
4353
4354 /* Txx r:val ; r:val (...) */
4355 p = &stop_reply[3];
4356
4357 /* Look for "register" named "thread". */
4358 while (*p != '\0')
4359 {
256642e8 4360 const char *p1;
3405876a
PA
4361
4362 p1 = strchr (p, ':');
4363 if (p1 == NULL)
4364 return null_ptid;
4365
4366 if (strncmp (p, "thread", p1 - p) == 0)
4367 return read_ptid (++p1, &p);
4368
4369 p1 = strchr (p, ';');
4370 if (p1 == NULL)
4371 return null_ptid;
4372 p1++;
4373
4374 p = p1;
4375 }
4376 }
4377
4378 return null_ptid;
4379}
4380
b7ea362b
PA
4381/* Determine the remote side's current thread. If we have a stop
4382 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4383 "thread" register we can extract the current thread from. If not,
4384 ask the remote which is the current thread with qC. The former
4385 method avoids a roundtrip. */
4386
6b8edb51 4387ptid_t
e3b2741b 4388remote_target::get_current_thread (const char *wait_status)
b7ea362b 4389{
6a49a997 4390 ptid_t ptid = null_ptid;
b7ea362b
PA
4391
4392 /* Note we don't use remote_parse_stop_reply as that makes use of
4393 the target architecture, which we haven't yet fully determined at
4394 this point. */
4395 if (wait_status != NULL)
4396 ptid = stop_reply_extract_thread (wait_status);
d7e15655 4397 if (ptid == null_ptid)
b7ea362b
PA
4398 ptid = remote_current_thread (inferior_ptid);
4399
4400 return ptid;
4401}
4402
49c62f2e
PA
4403/* Query the remote target for which is the current thread/process,
4404 add it to our tables, and update INFERIOR_PTID. The caller is
4405 responsible for setting the state such that the remote end is ready
3405876a
PA
4406 to return the current thread.
4407
4408 This function is called after handling the '?' or 'vRun' packets,
4409 whose response is a stop reply from which we can also try
4410 extracting the thread. If the target doesn't support the explicit
4411 qC query, we infer the current thread from that stop reply, passed
64d38fdd 4412 in in WAIT_STATUS, which may be NULL.
49c62f2e 4413
64d38fdd
JM
4414 The function returns pointer to the main thread of the inferior. */
4415
4416thread_info *
e3b2741b 4417remote_target::add_current_inferior_and_thread (const char *wait_status)
49c62f2e
PA
4418{
4419 struct remote_state *rs = get_remote_state ();
9ab8741a 4420 bool fake_pid_p = false;
49c62f2e 4421
0ac55310 4422 switch_to_no_thread ();
49c62f2e 4423
0ac55310
PA
4424 /* Now, if we have thread information, update the current thread's
4425 ptid. */
87215ad1 4426 ptid_t curr_ptid = get_current_thread (wait_status);
3405876a 4427
87215ad1 4428 if (curr_ptid != null_ptid)
49c62f2e
PA
4429 {
4430 if (!remote_multi_process_p (rs))
9ab8741a 4431 fake_pid_p = true;
49c62f2e
PA
4432 }
4433 else
4434 {
4435 /* Without this, some commands which require an active target
4436 (such as kill) won't work. This variable serves (at least)
4437 double duty as both the pid of the target process (if it has
4438 such), and as a flag indicating that a target is active. */
87215ad1 4439 curr_ptid = magic_null_ptid;
9ab8741a 4440 fake_pid_p = true;
49c62f2e
PA
4441 }
4442
e99b03dc 4443 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
49c62f2e 4444
87215ad1
SDJ
4445 /* Add the main thread and switch to it. Don't try reading
4446 registers yet, since we haven't fetched the target description
4447 yet. */
5b6d1e4f 4448 thread_info *tp = add_thread_silent (this, curr_ptid);
87215ad1 4449 switch_to_thread_no_regs (tp);
64d38fdd
JM
4450
4451 return tp;
49c62f2e
PA
4452}
4453
6efcd9a8
PA
4454/* Print info about a thread that was found already stopped on
4455 connection. */
4456
4457static void
4458print_one_stopped_thread (struct thread_info *thread)
4459{
4460 struct target_waitstatus *ws = &thread->suspend.waitstatus;
4461
00431a78 4462 switch_to_thread (thread);
f2ffa92b 4463 thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
6efcd9a8
PA
4464 set_current_sal_from_frame (get_current_frame ());
4465
4466 thread->suspend.waitstatus_pending_p = 0;
4467
4468 if (ws->kind == TARGET_WAITKIND_STOPPED)
4469 {
4470 enum gdb_signal sig = ws->value.sig;
4471
4472 if (signal_print_state (sig))
76727919 4473 gdb::observers::signal_received.notify (sig);
6efcd9a8 4474 }
76727919 4475 gdb::observers::normal_stop.notify (NULL, 1);
6efcd9a8
PA
4476}
4477
221e1a37
PA
4478/* Process all initial stop replies the remote side sent in response
4479 to the ? packet. These indicate threads that were already stopped
4480 on initial connection. We mark these threads as stopped and print
4481 their current frame before giving the user the prompt. */
4482
6b8edb51
PA
4483void
4484remote_target::process_initial_stop_replies (int from_tty)
221e1a37
PA
4485{
4486 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
4487 struct thread_info *selected = NULL;
4488 struct thread_info *lowest_stopped = NULL;
4489 struct thread_info *first = NULL;
221e1a37
PA
4490
4491 /* Consume the initial pending events. */
4492 while (pending_stop_replies-- > 0)
4493 {
4494 ptid_t waiton_ptid = minus_one_ptid;
4495 ptid_t event_ptid;
4496 struct target_waitstatus ws;
4497 int ignore_event = 0;
4498
4499 memset (&ws, 0, sizeof (ws));
4500 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4501 if (remote_debug)
4502 print_target_wait_results (waiton_ptid, event_ptid, &ws);
4503
4504 switch (ws.kind)
4505 {
4506 case TARGET_WAITKIND_IGNORE:
4507 case TARGET_WAITKIND_NO_RESUMED:
4508 case TARGET_WAITKIND_SIGNALLED:
4509 case TARGET_WAITKIND_EXITED:
4510 /* We shouldn't see these, but if we do, just ignore. */
2189c312 4511 remote_debug_printf ("event ignored");
221e1a37
PA
4512 ignore_event = 1;
4513 break;
4514
4515 case TARGET_WAITKIND_EXECD:
4516 xfree (ws.value.execd_pathname);
4517 break;
4518 default:
4519 break;
4520 }
4521
4522 if (ignore_event)
4523 continue;
4524
5b6d1e4f 4525 thread_info *evthread = find_thread_ptid (this, event_ptid);
221e1a37
PA
4526
4527 if (ws.kind == TARGET_WAITKIND_STOPPED)
4528 {
4529 enum gdb_signal sig = ws.value.sig;
4530
4531 /* Stubs traditionally report SIGTRAP as initial signal,
4532 instead of signal 0. Suppress it. */
4533 if (sig == GDB_SIGNAL_TRAP)
4534 sig = GDB_SIGNAL_0;
b926417a 4535 evthread->suspend.stop_signal = sig;
6efcd9a8
PA
4536 ws.value.sig = sig;
4537 }
221e1a37 4538
b926417a 4539 evthread->suspend.waitstatus = ws;
6efcd9a8
PA
4540
4541 if (ws.kind != TARGET_WAITKIND_STOPPED
4542 || ws.value.sig != GDB_SIGNAL_0)
b926417a 4543 evthread->suspend.waitstatus_pending_p = 1;
6efcd9a8 4544
719546c4
SM
4545 set_executing (this, event_ptid, false);
4546 set_running (this, event_ptid, false);
c9d22089 4547 get_remote_thread_info (evthread)->set_not_resumed ();
6efcd9a8
PA
4548 }
4549
4550 /* "Notice" the new inferiors before anything related to
4551 registers/memory. */
5b6d1e4f 4552 for (inferior *inf : all_non_exited_inferiors (this))
6efcd9a8 4553 {
6efcd9a8
PA
4554 inf->needs_setup = 1;
4555
4556 if (non_stop)
4557 {
08036331 4558 thread_info *thread = any_live_thread_of_inferior (inf);
00431a78 4559 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
6efcd9a8
PA
4560 from_tty);
4561 }
4562 }
4563
4564 /* If all-stop on top of non-stop, pause all threads. Note this
4565 records the threads' stop pc, so must be done after "noticing"
4566 the inferiors. */
4567 if (!non_stop)
4568 {
4569 stop_all_threads ();
4570
4571 /* If all threads of an inferior were already stopped, we
4572 haven't setup the inferior yet. */
5b6d1e4f 4573 for (inferior *inf : all_non_exited_inferiors (this))
6efcd9a8 4574 {
6efcd9a8
PA
4575 if (inf->needs_setup)
4576 {
08036331 4577 thread_info *thread = any_live_thread_of_inferior (inf);
6efcd9a8
PA
4578 switch_to_thread_no_regs (thread);
4579 setup_inferior (0);
4580 }
4581 }
221e1a37 4582 }
6efcd9a8
PA
4583
4584 /* Now go over all threads that are stopped, and print their current
4585 frame. If all-stop, then if there's a signalled thread, pick
4586 that as current. */
5b6d1e4f 4587 for (thread_info *thread : all_non_exited_threads (this))
6efcd9a8 4588 {
6efcd9a8
PA
4589 if (first == NULL)
4590 first = thread;
4591
4592 if (!non_stop)
00431a78 4593 thread->set_running (false);
6efcd9a8
PA
4594 else if (thread->state != THREAD_STOPPED)
4595 continue;
4596
6efcd9a8
PA
4597 if (selected == NULL
4598 && thread->suspend.waitstatus_pending_p)
4599 selected = thread;
4600
5d5658a1
PA
4601 if (lowest_stopped == NULL
4602 || thread->inf->num < lowest_stopped->inf->num
4603 || thread->per_inf_num < lowest_stopped->per_inf_num)
6efcd9a8
PA
4604 lowest_stopped = thread;
4605
4606 if (non_stop)
4607 print_one_stopped_thread (thread);
4608 }
4609
4610 /* In all-stop, we only print the status of one thread, and leave
4611 others with their status pending. */
4612 if (!non_stop)
4613 {
08036331 4614 thread_info *thread = selected;
6efcd9a8
PA
4615 if (thread == NULL)
4616 thread = lowest_stopped;
4617 if (thread == NULL)
4618 thread = first;
4619
4620 print_one_stopped_thread (thread);
4621 }
4622
4623 /* For "info program". */
08036331 4624 thread_info *thread = inferior_thread ();
6efcd9a8 4625 if (thread->state == THREAD_STOPPED)
5b6d1e4f 4626 set_last_target_status (this, inferior_ptid, thread->suspend.waitstatus);
221e1a37
PA
4627}
4628
048094ac
PA
4629/* Start the remote connection and sync state. */
4630
f6ac5f3d
PA
4631void
4632remote_target::start_remote (int from_tty, int extended_p)
c906108c 4633{
2189c312
SM
4634 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
4635
c8d104ad
PA
4636 struct remote_state *rs = get_remote_state ();
4637 struct packet_config *noack_config;
8621d6a9 4638
048094ac
PA
4639 /* Signal other parts that we're going through the initial setup,
4640 and so things may not be stable yet. E.g., we don't try to
4641 install tracepoints until we've relocated symbols. Also, a
4642 Ctrl-C before we're connected and synced up can't interrupt the
4643 target. Instead, it offers to drop the (potentially wedged)
4644 connection. */
4645 rs->starting_up = 1;
4646
522002f9 4647 QUIT;
c906108c 4648
9a7071a8
JB
4649 if (interrupt_on_connect)
4650 send_interrupt_sequence ();
4651
57e12211 4652 /* Ack any packet which the remote side has already sent. */
048094ac 4653 remote_serial_write ("+", 1);
1e51243a 4654
c8d104ad
PA
4655 /* The first packet we send to the target is the optional "supported
4656 packets" request. If the target can answer this, it will tell us
4657 which later probes to skip. */
4658 remote_query_supported ();
4659
d914c394 4660 /* If the stub wants to get a QAllow, compose one and send it. */
4082afcc 4661 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
f6ac5f3d 4662 set_permissions ();
d914c394 4663
57809e5e
JK
4664 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4665 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4666 as a reply to known packet. For packet "vFile:setfs:" it is an
4667 invalid reply and GDB would return error in
4668 remote_hostio_set_filesystem, making remote files access impossible.
4669 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4670 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4671 {
4672 const char v_mustreplyempty[] = "vMustReplyEmpty";
4673
4674 putpkt (v_mustreplyempty);
8d64371b
TT
4675 getpkt (&rs->buf, 0);
4676 if (strcmp (rs->buf.data (), "OK") == 0)
57809e5e 4677 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
8d64371b 4678 else if (strcmp (rs->buf.data (), "") != 0)
57809e5e 4679 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
8d64371b 4680 rs->buf.data ());
57809e5e
JK
4681 }
4682
c8d104ad
PA
4683 /* Next, we possibly activate noack mode.
4684
4685 If the QStartNoAckMode packet configuration is set to AUTO,
4686 enable noack mode if the stub reported a wish for it with
4687 qSupported.
4688
4689 If set to TRUE, then enable noack mode even if the stub didn't
4690 report it in qSupported. If the stub doesn't reply OK, the
4691 session ends with an error.
4692
4693 If FALSE, then don't activate noack mode, regardless of what the
4694 stub claimed should be the default with qSupported. */
4695
4696 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4082afcc 4697 if (packet_config_support (noack_config) != PACKET_DISABLE)
c8d104ad
PA
4698 {
4699 putpkt ("QStartNoAckMode");
8d64371b 4700 getpkt (&rs->buf, 0);
c8d104ad
PA
4701 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4702 rs->noack_mode = 1;
4703 }
4704
04bd08de 4705 if (extended_p)
5fe04517
PA
4706 {
4707 /* Tell the remote that we are using the extended protocol. */
4708 putpkt ("!");
8d64371b 4709 getpkt (&rs->buf, 0);
5fe04517
PA
4710 }
4711
9b224c5e
PA
4712 /* Let the target know which signals it is allowed to pass down to
4713 the program. */
4714 update_signals_program_target ();
4715
d962ef82
DJ
4716 /* Next, if the target can specify a description, read it. We do
4717 this before anything involving memory or registers. */
4718 target_find_description ();
4719
6c95b8df
PA
4720 /* Next, now that we know something about the target, update the
4721 address spaces in the program spaces. */
4722 update_address_spaces ();
4723
50c71eaf
PA
4724 /* On OSs where the list of libraries is global to all
4725 processes, we fetch them early. */
f5656ead 4726 if (gdbarch_has_global_solist (target_gdbarch ()))
e696b3ad 4727 solib_add (NULL, from_tty, auto_solib_add);
50c71eaf 4728
6efcd9a8 4729 if (target_is_non_stop_p ())
74531fed 4730 {
4082afcc 4731 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3e43a32a
MS
4732 error (_("Non-stop mode requested, but remote "
4733 "does not support non-stop"));
74531fed
PA
4734
4735 putpkt ("QNonStop:1");
8d64371b 4736 getpkt (&rs->buf, 0);
74531fed 4737
8d64371b
TT
4738 if (strcmp (rs->buf.data (), "OK") != 0)
4739 error (_("Remote refused setting non-stop mode with: %s"),
4740 rs->buf.data ());
74531fed
PA
4741
4742 /* Find about threads and processes the stub is already
4743 controlling. We default to adding them in the running state.
4744 The '?' query below will then tell us about which threads are
4745 stopped. */
f6ac5f3d 4746 this->update_thread_list ();
74531fed 4747 }
4082afcc 4748 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4749 {
4750 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4751 Request it explicitly. */
74531fed 4752 putpkt ("QNonStop:0");
8d64371b 4753 getpkt (&rs->buf, 0);
74531fed 4754
8d64371b
TT
4755 if (strcmp (rs->buf.data (), "OK") != 0)
4756 error (_("Remote refused setting all-stop mode with: %s"),
4757 rs->buf.data ());
74531fed
PA
4758 }
4759
a0743c90
YQ
4760 /* Upload TSVs regardless of whether the target is running or not. The
4761 remote stub, such as GDBserver, may have some predefined or builtin
4762 TSVs, even if the target is not running. */
f6ac5f3d 4763 if (get_trace_status (current_trace_status ()) != -1)
a0743c90
YQ
4764 {
4765 struct uploaded_tsv *uploaded_tsvs = NULL;
4766
f6ac5f3d 4767 upload_trace_state_variables (&uploaded_tsvs);
a0743c90
YQ
4768 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4769 }
4770
2d717e4f
DJ
4771 /* Check whether the target is running now. */
4772 putpkt ("?");
8d64371b 4773 getpkt (&rs->buf, 0);
2d717e4f 4774
6efcd9a8 4775 if (!target_is_non_stop_p ())
2d717e4f 4776 {
b5c8f22d
SM
4777 char *wait_status = NULL;
4778
74531fed 4779 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4780 {
04bd08de 4781 if (!extended_p)
74531fed 4782 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4783
4784 /* We're connected, but not running. Drop out before we
4785 call start_remote. */
e278ad5b 4786 rs->starting_up = 0;
c35b1492 4787 return;
2d717e4f
DJ
4788 }
4789 else
74531fed 4790 {
74531fed 4791 /* Save the reply for later. */
8d64371b
TT
4792 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4793 strcpy (wait_status, rs->buf.data ());
74531fed
PA
4794 }
4795
b7ea362b 4796 /* Fetch thread list. */
e8032dde 4797 target_update_thread_list ();
b7ea362b 4798
74531fed
PA
4799 /* Let the stub know that we want it to return the thread. */
4800 set_continue_thread (minus_one_ptid);
4801
5b6d1e4f 4802 if (thread_count (this) == 0)
b7ea362b
PA
4803 {
4804 /* Target has no concept of threads at all. GDB treats
4805 non-threaded target as single-threaded; add a main
4806 thread. */
64d38fdd
JM
4807 thread_info *tp = add_current_inferior_and_thread (wait_status);
4808 get_remote_thread_info (tp)->set_resumed ();
b7ea362b
PA
4809 }
4810 else
4811 {
4812 /* We have thread information; select the thread the target
4813 says should be current. If we're reconnecting to a
4814 multi-threaded program, this will ideally be the thread
4815 that last reported an event before GDB disconnected. */
75c6c844
PA
4816 ptid_t curr_thread = get_current_thread (wait_status);
4817 if (curr_thread == null_ptid)
b7ea362b
PA
4818 {
4819 /* Odd... The target was able to list threads, but not
4820 tell us which thread was current (no "thread"
4821 register in T stop reply?). Just pick the first
4822 thread in the thread list then. */
2189c312
SM
4823
4824 remote_debug_printf ("warning: couldn't determine remote "
4825 "current thread; picking first in list.");
c9f35b34 4826
5b6d1e4f
PA
4827 for (thread_info *tp : all_non_exited_threads (this,
4828 minus_one_ptid))
75c6c844
PA
4829 {
4830 switch_to_thread (tp);
4831 break;
4832 }
b7ea362b 4833 }
75c6c844 4834 else
5b6d1e4f 4835 switch_to_thread (find_thread_ptid (this, curr_thread));
b7ea362b 4836 }
74531fed 4837
6e586cc5
YQ
4838 /* init_wait_for_inferior should be called before get_offsets in order
4839 to manage `inserted' flag in bp loc in a correct state.
4840 breakpoint_init_inferior, called from init_wait_for_inferior, set
4841 `inserted' flag to 0, while before breakpoint_re_set, called from
4842 start_remote, set `inserted' flag to 1. In the initialization of
4843 inferior, breakpoint_init_inferior should be called first, and then
4844 breakpoint_re_set can be called. If this order is broken, state of
4845 `inserted' flag is wrong, and cause some problems on breakpoint
4846 manipulation. */
4847 init_wait_for_inferior ();
4848
74531fed
PA
4849 get_offsets (); /* Get text, data & bss offsets. */
4850
d962ef82
DJ
4851 /* If we could not find a description using qXfer, and we know
4852 how to do it some other way, try again. This is not
4853 supported for non-stop; it could be, but it is tricky if
4854 there are no stopped threads when we connect. */
f6ac5f3d 4855 if (remote_read_description_p (this)
f5656ead 4856 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4857 {
4858 target_clear_description ();
4859 target_find_description ();
4860 }
4861
74531fed
PA
4862 /* Use the previously fetched status. */
4863 gdb_assert (wait_status != NULL);
8d64371b 4864 strcpy (rs->buf.data (), wait_status);
74531fed
PA
4865 rs->cached_wait_status = 1;
4866
f6ac5f3d 4867 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4868 }
4869 else
4870 {
68c97600
PA
4871 /* Clear WFI global state. Do this before finding about new
4872 threads and inferiors, and setting the current inferior.
4873 Otherwise we would clear the proceed status of the current
4874 inferior when we want its stop_soon state to be preserved
4875 (see notice_new_inferior). */
4876 init_wait_for_inferior ();
4877
74531fed
PA
4878 /* In non-stop, we will either get an "OK", meaning that there
4879 are no stopped threads at this time; or, a regular stop
4880 reply. In the latter case, there may be more than one thread
4881 stopped --- we pull them all out using the vStopped
4882 mechanism. */
8d64371b 4883 if (strcmp (rs->buf.data (), "OK") != 0)
74531fed 4884 {
722247f1 4885 struct notif_client *notif = &notif_client_stop;
2d717e4f 4886
722247f1
YQ
4887 /* remote_notif_get_pending_replies acks this one, and gets
4888 the rest out. */
f48ff2a7 4889 rs->notif_state->pending_event[notif_client_stop.id]
8d64371b 4890 = remote_notif_parse (this, notif, rs->buf.data ());
722247f1 4891 remote_notif_get_pending_events (notif);
74531fed 4892 }
2d717e4f 4893
5b6d1e4f 4894 if (thread_count (this) == 0)
74531fed 4895 {
04bd08de 4896 if (!extended_p)
74531fed 4897 error (_("The target is not running (try extended-remote?)"));
82f73884 4898
c35b1492
PA
4899 /* We're connected, but not running. Drop out before we
4900 call start_remote. */
e278ad5b 4901 rs->starting_up = 0;
c35b1492
PA
4902 return;
4903 }
74531fed 4904
2455069d 4905 /* Report all signals during attach/startup. */
adc6a863 4906 pass_signals ({});
221e1a37
PA
4907
4908 /* If there are already stopped threads, mark them stopped and
4909 report their stops before giving the prompt to the user. */
6efcd9a8 4910 process_initial_stop_replies (from_tty);
221e1a37
PA
4911
4912 if (target_can_async_p ())
4913 target_async (1);
74531fed 4914 }
c8d104ad 4915
c8d104ad 4916 /* If we connected to a live target, do some additional setup. */
55f6301a 4917 if (target_has_execution ())
c8d104ad 4918 {
a42d7dd8
TT
4919 /* No use without a symbol-file. */
4920 if (current_program_space->symfile_object_file)
36d25514 4921 remote_check_symbols ();
c8d104ad 4922 }
50c71eaf 4923
d5551862
SS
4924 /* Possibly the target has been engaged in a trace run started
4925 previously; find out where things are at. */
f6ac5f3d 4926 if (get_trace_status (current_trace_status ()) != -1)
d5551862 4927 {
00bf0b85 4928 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4929
00bf0b85
SS
4930 if (current_trace_status ()->running)
4931 printf_filtered (_("Trace is already running on the target.\n"));
4932
f6ac5f3d 4933 upload_tracepoints (&uploaded_tps);
00bf0b85
SS
4934
4935 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4936 }
4937
c0272db5
TW
4938 /* Possibly the target has been engaged in a btrace record started
4939 previously; find out where things are at. */
4940 remote_btrace_maybe_reopen ();
4941
1e51243a
PA
4942 /* The thread and inferior lists are now synchronized with the
4943 target, our symbols have been relocated, and we're merged the
4944 target's tracepoints with ours. We're done with basic start
4945 up. */
4946 rs->starting_up = 0;
4947
a25a5a45
PA
4948 /* Maybe breakpoints are global and need to be inserted now. */
4949 if (breakpoints_should_be_inserted_now ())
50c71eaf 4950 insert_breakpoints ();
c906108c
SS
4951}
4952
121b3efd
PA
4953const char *
4954remote_target::connection_string ()
4955{
4956 remote_state *rs = get_remote_state ();
4957
4958 if (rs->remote_desc->name != NULL)
4959 return rs->remote_desc->name;
4960 else
4961 return NULL;
4962}
4963
c906108c
SS
4964/* Open a connection to a remote debugger.
4965 NAME is the filename used for communication. */
4966
f6ac5f3d
PA
4967void
4968remote_target::open (const char *name, int from_tty)
c906108c 4969{
f6ac5f3d 4970 open_1 (name, from_tty, 0);
43ff13b4
JM
4971}
4972
c906108c
SS
4973/* Open a connection to a remote debugger using the extended
4974 remote gdb protocol. NAME is the filename used for communication. */
4975
f6ac5f3d
PA
4976void
4977extended_remote_target::open (const char *name, int from_tty)
c906108c 4978{
f6ac5f3d 4979 open_1 (name, from_tty, 1 /*extended_p */);
43ff13b4
JM
4980}
4981
ca4f7f8b
PA
4982/* Reset all packets back to "unknown support". Called when opening a
4983 new connection to a remote target. */
c906108c 4984
d471ea57 4985static void
ca4f7f8b 4986reset_all_packet_configs_support (void)
d471ea57
AC
4987{
4988 int i;
a744cf53 4989
444abaca 4990 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4991 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4992}
4993
ca4f7f8b
PA
4994/* Initialize all packet configs. */
4995
4996static void
4997init_all_packet_configs (void)
4998{
4999 int i;
5000
5001 for (i = 0; i < PACKET_MAX; i++)
5002 {
5003 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
5004 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
5005 }
5006}
5007
23860348 5008/* Symbol look-up. */
dc8acb97 5009
6b8edb51
PA
5010void
5011remote_target::remote_check_symbols ()
dc8acb97 5012{
8d64371b 5013 char *tmp;
dc8acb97
MS
5014 int end;
5015
63154eca
PA
5016 /* The remote side has no concept of inferiors that aren't running
5017 yet, it only knows about running processes. If we're connected
5018 but our current inferior is not running, we should not invite the
5019 remote target to request symbol lookups related to its
5020 (unrelated) current process. */
55f6301a 5021 if (!target_has_execution ())
63154eca
PA
5022 return;
5023
4082afcc 5024 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
dc8acb97
MS
5025 return;
5026
63154eca
PA
5027 /* Make sure the remote is pointing at the right process. Note
5028 there's no way to select "no process". */
3c9c4b83
PA
5029 set_general_process ();
5030
6d820c5c
DJ
5031 /* Allocate a message buffer. We can't reuse the input buffer in RS,
5032 because we need both at the same time. */
66644cd3 5033 gdb::char_vector msg (get_remote_packet_size ());
8d64371b 5034 gdb::char_vector reply (get_remote_packet_size ());
6d820c5c 5035
23860348 5036 /* Invite target to request symbol lookups. */
dc8acb97
MS
5037
5038 putpkt ("qSymbol::");
8d64371b 5039 getpkt (&reply, 0);
28170b88 5040 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 5041
8d64371b 5042 while (startswith (reply.data (), "qSymbol:"))
dc8acb97 5043 {
77e371c0
TT
5044 struct bound_minimal_symbol sym;
5045
dc8acb97 5046 tmp = &reply[8];
66644cd3
AB
5047 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
5048 strlen (tmp) / 2);
dc8acb97 5049 msg[end] = '\0';
66644cd3 5050 sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
3b7344d5 5051 if (sym.minsym == NULL)
66644cd3
AB
5052 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
5053 &reply[8]);
dc8acb97 5054 else
2bbe3cc1 5055 {
f5656ead 5056 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 5057 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
5058
5059 /* If this is a function address, return the start of code
5060 instead of any data function descriptor. */
f5656ead 5061 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1 5062 sym_addr,
8b88a78e 5063 current_top_target ());
2bbe3cc1 5064
66644cd3 5065 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 5066 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1 5067 }
66644cd3
AB
5068
5069 putpkt (msg.data ());
8d64371b 5070 getpkt (&reply, 0);
dc8acb97
MS
5071 }
5072}
5073
9db8d71f 5074static struct serial *
baa336ce 5075remote_serial_open (const char *name)
9db8d71f
DJ
5076{
5077 static int udp_warning = 0;
5078
5079 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
5080 of in ser-tcp.c, because it is the remote protocol assuming that the
5081 serial connection is reliable and not the serial connection promising
5082 to be. */
61012eef 5083 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 5084 {
3e43a32a
MS
5085 warning (_("The remote protocol may be unreliable over UDP.\n"
5086 "Some events may be lost, rendering further debugging "
5087 "impossible."));
9db8d71f
DJ
5088 udp_warning = 1;
5089 }
5090
5091 return serial_open (name);
5092}
5093
d914c394
SS
5094/* Inform the target of our permission settings. The permission flags
5095 work without this, but if the target knows the settings, it can do
5096 a couple things. First, it can add its own check, to catch cases
5097 that somehow manage to get by the permissions checks in target
5098 methods. Second, if the target is wired to disallow particular
5099 settings (for instance, a system in the field that is not set up to
5100 be able to stop at a breakpoint), it can object to any unavailable
5101 permissions. */
5102
5103void
f6ac5f3d 5104remote_target::set_permissions ()
d914c394
SS
5105{
5106 struct remote_state *rs = get_remote_state ();
5107
8d64371b 5108 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
bba74b36
YQ
5109 "WriteReg:%x;WriteMem:%x;"
5110 "InsertBreak:%x;InsertTrace:%x;"
5111 "InsertFastTrace:%x;Stop:%x",
5112 may_write_registers, may_write_memory,
5113 may_insert_breakpoints, may_insert_tracepoints,
5114 may_insert_fast_tracepoints, may_stop);
d914c394 5115 putpkt (rs->buf);
8d64371b 5116 getpkt (&rs->buf, 0);
d914c394
SS
5117
5118 /* If the target didn't like the packet, warn the user. Do not try
5119 to undo the user's settings, that would just be maddening. */
8d64371b
TT
5120 if (strcmp (rs->buf.data (), "OK") != 0)
5121 warning (_("Remote refused setting permissions with: %s"),
5122 rs->buf.data ());
d914c394
SS
5123}
5124
be2a5f71
DJ
5125/* This type describes each known response to the qSupported
5126 packet. */
5127struct protocol_feature
5128{
5129 /* The name of this protocol feature. */
5130 const char *name;
5131
5132 /* The default for this protocol feature. */
5133 enum packet_support default_support;
5134
5135 /* The function to call when this feature is reported, or after
5136 qSupported processing if the feature is not supported.
5137 The first argument points to this structure. The second
5138 argument indicates whether the packet requested support be
5139 enabled, disabled, or probed (or the default, if this function
5140 is being called at the end of processing and this feature was
5141 not reported). The third argument may be NULL; if not NULL, it
5142 is a NUL-terminated string taken from the packet following
5143 this feature's name and an equals sign. */
6b8edb51
PA
5144 void (*func) (remote_target *remote, const struct protocol_feature *,
5145 enum packet_support, const char *);
be2a5f71
DJ
5146
5147 /* The corresponding packet for this feature. Only used if
5148 FUNC is remote_supported_packet. */
5149 int packet;
5150};
5151
be2a5f71 5152static void
6b8edb51
PA
5153remote_supported_packet (remote_target *remote,
5154 const struct protocol_feature *feature,
be2a5f71
DJ
5155 enum packet_support support,
5156 const char *argument)
5157{
5158 if (argument)
5159 {
5160 warning (_("Remote qSupported response supplied an unexpected value for"
5161 " \"%s\"."), feature->name);
5162 return;
5163 }
5164
4082afcc 5165 remote_protocol_packets[feature->packet].support = support;
be2a5f71 5166}
be2a5f71 5167
6b8edb51
PA
5168void
5169remote_target::remote_packet_size (const protocol_feature *feature,
5170 enum packet_support support, const char *value)
be2a5f71
DJ
5171{
5172 struct remote_state *rs = get_remote_state ();
5173
5174 int packet_size;
5175 char *value_end;
5176
5177 if (support != PACKET_ENABLE)
5178 return;
5179
5180 if (value == NULL || *value == '\0')
5181 {
5182 warning (_("Remote target reported \"%s\" without a size."),
5183 feature->name);
5184 return;
5185 }
5186
5187 errno = 0;
5188 packet_size = strtol (value, &value_end, 16);
5189 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5190 {
5191 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5192 feature->name, value);
5193 return;
5194 }
5195
be2a5f71
DJ
5196 /* Record the new maximum packet size. */
5197 rs->explicit_packet_size = packet_size;
5198}
5199
cb8c24b6 5200static void
6b8edb51
PA
5201remote_packet_size (remote_target *remote, const protocol_feature *feature,
5202 enum packet_support support, const char *value)
5203{
5204 remote->remote_packet_size (feature, support, value);
5205}
5206
dc473cfb 5207static const struct protocol_feature remote_protocol_features[] = {
0876f84a 5208 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 5209 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 5210 PACKET_qXfer_auxv },
c78fa86a
GB
5211 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5212 PACKET_qXfer_exec_file },
23181151
DJ
5213 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5214 PACKET_qXfer_features },
cfa9d6d9
DJ
5215 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5216 PACKET_qXfer_libraries },
2268b414
JK
5217 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5218 PACKET_qXfer_libraries_svr4 },
ced63ec0 5219 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 5220 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 5221 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 5222 PACKET_qXfer_memory_map },
07e059b5
VP
5223 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5224 PACKET_qXfer_osdata },
dc146f7c
VP
5225 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5226 PACKET_qXfer_threads },
b3b9301e
PA
5227 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5228 PACKET_qXfer_traceframe_info },
89be2091
DJ
5229 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5230 PACKET_QPassSignals },
82075af2
JS
5231 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5232 PACKET_QCatchSyscalls },
9b224c5e
PA
5233 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5234 PACKET_QProgramSignals },
bc3b087d
SDJ
5235 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5236 PACKET_QSetWorkingDir },
aefd8b33
SDJ
5237 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5238 PACKET_QStartupWithShell },
0a2dde4a
SDJ
5239 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5240 PACKET_QEnvironmentHexEncoded },
5241 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5242 PACKET_QEnvironmentReset },
5243 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5244 PACKET_QEnvironmentUnset },
a6f3e723
SL
5245 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5246 PACKET_QStartNoAckMode },
4082afcc
PA
5247 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5248 PACKET_multiprocess_feature },
5249 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
5250 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5251 PACKET_qXfer_siginfo_read },
5252 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5253 PACKET_qXfer_siginfo_write },
4082afcc 5254 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 5255 PACKET_ConditionalTracepoints },
4082afcc 5256 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 5257 PACKET_ConditionalBreakpoints },
4082afcc 5258 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 5259 PACKET_BreakpointCommands },
4082afcc 5260 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 5261 PACKET_FastTracepoints },
4082afcc 5262 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 5263 PACKET_StaticTracepoints },
4082afcc 5264 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 5265 PACKET_InstallInTrace},
4082afcc
PA
5266 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5267 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
5268 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5269 PACKET_bc },
5270 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5271 PACKET_bs },
409873ef
SS
5272 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5273 PACKET_TracepointSource },
d914c394
SS
5274 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5275 PACKET_QAllow },
4082afcc
PA
5276 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5277 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
5278 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5279 PACKET_qXfer_fdpic },
169081d0
TG
5280 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5281 PACKET_qXfer_uib },
03583c20
UW
5282 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5283 PACKET_QDisableRandomization },
d1feda86 5284 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
5285 { "QTBuffer:size", PACKET_DISABLE,
5286 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 5287 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
5288 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5289 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 5290 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 5291 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
5292 PACKET_qXfer_btrace },
5293 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
5294 PACKET_qXfer_btrace_conf },
5295 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
5296 PACKET_Qbtrace_conf_bts_size },
5297 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 5298 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
5299 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5300 PACKET_fork_event_feature },
5301 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5302 PACKET_vfork_event_feature },
94585166
DB
5303 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5304 PACKET_exec_event_feature },
b20a6524 5305 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 5306 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
5307 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5308 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 5309 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
5310};
5311
c8d5aac9
L
5312static char *remote_support_xml;
5313
5314/* Register string appended to "xmlRegisters=" in qSupported query. */
5315
5316void
6e39997a 5317register_remote_support_xml (const char *xml)
c8d5aac9
L
5318{
5319#if defined(HAVE_LIBEXPAT)
5320 if (remote_support_xml == NULL)
c4f7c687 5321 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
5322 else
5323 {
5324 char *copy = xstrdup (remote_support_xml + 13);
ca3a04f6
CB
5325 char *saveptr;
5326 char *p = strtok_r (copy, ",", &saveptr);
c8d5aac9
L
5327
5328 do
5329 {
5330 if (strcmp (p, xml) == 0)
5331 {
5332 /* already there */
5333 xfree (copy);
5334 return;
5335 }
5336 }
ca3a04f6 5337 while ((p = strtok_r (NULL, ",", &saveptr)) != NULL);
c8d5aac9
L
5338 xfree (copy);
5339
94b0dee1
PA
5340 remote_support_xml = reconcat (remote_support_xml,
5341 remote_support_xml, ",", xml,
5342 (char *) NULL);
c8d5aac9
L
5343 }
5344#endif
5345}
5346
69b6ecb0
TT
5347static void
5348remote_query_supported_append (std::string *msg, const char *append)
c8d5aac9 5349{
69b6ecb0
TT
5350 if (!msg->empty ())
5351 msg->append (";");
5352 msg->append (append);
c8d5aac9
L
5353}
5354
6b8edb51
PA
5355void
5356remote_target::remote_query_supported ()
be2a5f71
DJ
5357{
5358 struct remote_state *rs = get_remote_state ();
5359 char *next;
5360 int i;
5361 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5362
5363 /* The packet support flags are handled differently for this packet
5364 than for most others. We treat an error, a disabled packet, and
5365 an empty response identically: any features which must be reported
5366 to be used will be automatically disabled. An empty buffer
5367 accomplishes this, since that is also the representation for a list
5368 containing no features. */
5369
5370 rs->buf[0] = 0;
4082afcc 5371 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 5372 {
69b6ecb0 5373 std::string q;
c8d5aac9 5374
73b8c1fd 5375 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5376 remote_query_supported_append (&q, "multiprocess+");
c8d5aac9 5377
f7e6eed5 5378 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5379 remote_query_supported_append (&q, "swbreak+");
f7e6eed5 5380 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5381 remote_query_supported_append (&q, "hwbreak+");
f7e6eed5 5382
69b6ecb0 5383 remote_query_supported_append (&q, "qRelocInsn+");
dde08ee1 5384
8020350c
DB
5385 if (packet_set_cmd_state (PACKET_fork_event_feature)
5386 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5387 remote_query_supported_append (&q, "fork-events+");
8020350c
DB
5388 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5389 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5390 remote_query_supported_append (&q, "vfork-events+");
8020350c
DB
5391 if (packet_set_cmd_state (PACKET_exec_event_feature)
5392 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5393 remote_query_supported_append (&q, "exec-events+");
89245bc0 5394
750ce8d1 5395 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5396 remote_query_supported_append (&q, "vContSupported+");
750ce8d1 5397
65706a29 5398 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5399 remote_query_supported_append (&q, "QThreadEvents+");
65706a29 5400
f2faf941 5401 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5402 remote_query_supported_append (&q, "no-resumed+");
f2faf941 5403
b35d5edb
PA
5404 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5405 the qSupported:xmlRegisters=i386 handling. */
7cc244de
PA
5406 if (remote_support_xml != NULL
5407 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
69b6ecb0 5408 remote_query_supported_append (&q, remote_support_xml);
82f73884 5409
69b6ecb0
TT
5410 q = "qSupported:" + q;
5411 putpkt (q.c_str ());
94b0dee1 5412
8d64371b 5413 getpkt (&rs->buf, 0);
be2a5f71
DJ
5414
5415 /* If an error occured, warn, but do not return - just reset the
5416 buffer to empty and go on to disable features. */
5417 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5418 == PACKET_ERROR)
5419 {
8d64371b 5420 warning (_("Remote failure reply: %s"), rs->buf.data ());
be2a5f71
DJ
5421 rs->buf[0] = 0;
5422 }
5423 }
5424
5425 memset (seen, 0, sizeof (seen));
5426
8d64371b 5427 next = rs->buf.data ();
be2a5f71
DJ
5428 while (*next)
5429 {
5430 enum packet_support is_supported;
5431 char *p, *end, *name_end, *value;
5432
5433 /* First separate out this item from the rest of the packet. If
5434 there's another item after this, we overwrite the separator
5435 (terminated strings are much easier to work with). */
5436 p = next;
5437 end = strchr (p, ';');
5438 if (end == NULL)
5439 {
5440 end = p + strlen (p);
5441 next = end;
5442 }
5443 else
5444 {
89be2091
DJ
5445 *end = '\0';
5446 next = end + 1;
5447
be2a5f71
DJ
5448 if (end == p)
5449 {
5450 warning (_("empty item in \"qSupported\" response"));
5451 continue;
5452 }
be2a5f71
DJ
5453 }
5454
5455 name_end = strchr (p, '=');
5456 if (name_end)
5457 {
5458 /* This is a name=value entry. */
5459 is_supported = PACKET_ENABLE;
5460 value = name_end + 1;
5461 *name_end = '\0';
5462 }
5463 else
5464 {
5465 value = NULL;
5466 switch (end[-1])
5467 {
5468 case '+':
5469 is_supported = PACKET_ENABLE;
5470 break;
5471
5472 case '-':
5473 is_supported = PACKET_DISABLE;
5474 break;
5475
5476 case '?':
5477 is_supported = PACKET_SUPPORT_UNKNOWN;
5478 break;
5479
5480 default:
3e43a32a
MS
5481 warning (_("unrecognized item \"%s\" "
5482 "in \"qSupported\" response"), p);
be2a5f71
DJ
5483 continue;
5484 }
5485 end[-1] = '\0';
5486 }
5487
5488 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5489 if (strcmp (remote_protocol_features[i].name, p) == 0)
5490 {
5491 const struct protocol_feature *feature;
5492
5493 seen[i] = 1;
5494 feature = &remote_protocol_features[i];
6b8edb51 5495 feature->func (this, feature, is_supported, value);
be2a5f71
DJ
5496 break;
5497 }
5498 }
5499
5500 /* If we increased the packet size, make sure to increase the global
5501 buffer size also. We delay this until after parsing the entire
5502 qSupported packet, because this is the same buffer we were
5503 parsing. */
8d64371b
TT
5504 if (rs->buf.size () < rs->explicit_packet_size)
5505 rs->buf.resize (rs->explicit_packet_size);
be2a5f71
DJ
5506
5507 /* Handle the defaults for unmentioned features. */
5508 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5509 if (!seen[i])
5510 {
5511 const struct protocol_feature *feature;
5512
5513 feature = &remote_protocol_features[i];
6b8edb51 5514 feature->func (this, feature, feature->default_support, NULL);
be2a5f71
DJ
5515 }
5516}
5517
048094ac
PA
5518/* Serial QUIT handler for the remote serial descriptor.
5519
5520 Defers handling a Ctrl-C until we're done with the current
5521 command/response packet sequence, unless:
5522
5523 - We're setting up the connection. Don't send a remote interrupt
5524 request, as we're not fully synced yet. Quit immediately
5525 instead.
5526
5527 - The target has been resumed in the foreground
223ffa71 5528 (target_terminal::is_ours is false) with a synchronous resume
048094ac
PA
5529 packet, and we're blocked waiting for the stop reply, thus a
5530 Ctrl-C should be immediately sent to the target.
5531
5532 - We get a second Ctrl-C while still within the same serial read or
5533 write. In that case the serial is seemingly wedged --- offer to
5534 quit/disconnect.
5535
5536 - We see a second Ctrl-C without target response, after having
5537 previously interrupted the target. In that case the target/stub
5538 is probably wedged --- offer to quit/disconnect.
5539*/
5540
6b8edb51
PA
5541void
5542remote_target::remote_serial_quit_handler ()
048094ac
PA
5543{
5544 struct remote_state *rs = get_remote_state ();
5545
5546 if (check_quit_flag ())
5547 {
5548 /* If we're starting up, we're not fully synced yet. Quit
5549 immediately. */
5550 if (rs->starting_up)
5551 quit ();
5552 else if (rs->got_ctrlc_during_io)
5553 {
5554 if (query (_("The target is not responding to GDB commands.\n"
5555 "Stop debugging it? ")))
5b6d1e4f 5556 remote_unpush_and_throw (this);
048094ac
PA
5557 }
5558 /* If ^C has already been sent once, offer to disconnect. */
223ffa71 5559 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
048094ac
PA
5560 interrupt_query ();
5561 /* All-stop protocol, and blocked waiting for stop reply. Send
5562 an interrupt request. */
223ffa71 5563 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
e671cd59 5564 target_interrupt ();
048094ac
PA
5565 else
5566 rs->got_ctrlc_during_io = 1;
5567 }
5568}
5569
6b8edb51
PA
5570/* The remote_target that is current while the quit handler is
5571 overridden with remote_serial_quit_handler. */
5572static remote_target *curr_quit_handler_target;
5573
5574static void
5575remote_serial_quit_handler ()
5576{
5577 curr_quit_handler_target->remote_serial_quit_handler ();
5578}
5579
5b6d1e4f
PA
5580/* Remove the remote target from the target stack of each inferior
5581 that is using it. Upper targets depend on it so remove them
5582 first. */
78a095c3
JK
5583
5584static void
5b6d1e4f 5585remote_unpush_target (remote_target *target)
78a095c3 5586{
5b6d1e4f
PA
5587 /* We have to unpush the target from all inferiors, even those that
5588 aren't running. */
5589 scoped_restore_current_inferior restore_current_inferior;
5590
5591 for (inferior *inf : all_inferiors (target))
5592 {
5593 switch_to_inferior_no_thread (inf);
5594 pop_all_targets_at_and_above (process_stratum);
5595 generic_mourn_inferior ();
5596 }
78a095c3 5597}
be2a5f71 5598
048094ac 5599static void
5b6d1e4f 5600remote_unpush_and_throw (remote_target *target)
048094ac 5601{
5b6d1e4f 5602 remote_unpush_target (target);
048094ac
PA
5603 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5604}
5605
f6ac5f3d
PA
5606void
5607remote_target::open_1 (const char *name, int from_tty, int extended_p)
c906108c 5608{
6b8edb51 5609 remote_target *curr_remote = get_current_remote_target ();
a6f3e723 5610
c906108c 5611 if (name == 0)
8a3fe4f8 5612 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 5613 "serial device is attached to the remote system\n"
8a3fe4f8 5614 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 5615
2d717e4f 5616 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
5617 Ask this question first, before target_preopen has a chance to kill
5618 anything. */
55f6301a 5619 if (curr_remote != NULL && !target_has_execution ())
2d717e4f 5620 {
78a095c3
JK
5621 if (from_tty
5622 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
5623 error (_("Still connected."));
5624 }
5625
78a095c3 5626 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
5627 target_preopen (from_tty);
5628
ad9a8f3f 5629 remote_fileio_reset ();
1dd41f16
NS
5630 reopen_exec_file ();
5631 reread_symbols ();
5632
6b8edb51
PA
5633 remote_target *remote
5634 = (extended_p ? new extended_remote_target () : new remote_target ());
5635 target_ops_up target_holder (remote);
5636
5637 remote_state *rs = remote->get_remote_state ();
5638
5639 /* See FIXME above. */
5640 if (!target_async_permitted)
5641 rs->wait_forever_enabled_p = 1;
5642
5d93a237
TT
5643 rs->remote_desc = remote_serial_open (name);
5644 if (!rs->remote_desc)
c906108c
SS
5645 perror_with_name (name);
5646
5647 if (baud_rate != -1)
5648 {
5d93a237 5649 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 5650 {
9b74d5d3
KB
5651 /* The requested speed could not be set. Error out to
5652 top level after closing remote_desc. Take care to
5653 set remote_desc to NULL to avoid closing remote_desc
5654 more than once. */
5d93a237
TT
5655 serial_close (rs->remote_desc);
5656 rs->remote_desc = NULL;
c906108c
SS
5657 perror_with_name (name);
5658 }
5659 }
5660
236af5e3 5661 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 5662 serial_raw (rs->remote_desc);
c906108c
SS
5663
5664 /* If there is something sitting in the buffer we might take it as a
5665 response to a command, which would be bad. */
5d93a237 5666 serial_flush_input (rs->remote_desc);
c906108c
SS
5667
5668 if (from_tty)
5669 {
5670 puts_filtered ("Remote debugging using ");
5671 puts_filtered (name);
5672 puts_filtered ("\n");
5673 }
d9f719f1 5674
6b8edb51 5675 /* Switch to using the remote target now. */
dea57a62 5676 push_target (std::move (target_holder));
c906108c 5677
74531fed 5678 /* Register extra event sources in the event loop. */
6b8edb51 5679 rs->remote_async_inferior_event_token
baa8575b 5680 = create_async_event_handler (remote_async_inferior_event_handler, nullptr,
db20ebdf 5681 "remote");
6b8edb51 5682 rs->notif_state = remote_notif_state_allocate (remote);
74531fed 5683
be2a5f71
DJ
5684 /* Reset the target state; these things will be queried either by
5685 remote_query_supported or as they are needed. */
ca4f7f8b 5686 reset_all_packet_configs_support ();
74531fed 5687 rs->cached_wait_status = 0;
be2a5f71 5688 rs->explicit_packet_size = 0;
a6f3e723 5689 rs->noack_mode = 0;
82f73884 5690 rs->extended = extended_p;
e24a49d8 5691 rs->waiting_for_stop_reply = 0;
3a29589a 5692 rs->ctrlc_pending_p = 0;
048094ac 5693 rs->got_ctrlc_during_io = 0;
802188a7 5694
47f8a51d
TT
5695 rs->general_thread = not_sent_ptid;
5696 rs->continue_thread = not_sent_ptid;
262e1174 5697 rs->remote_traceframe_number = -1;
c906108c 5698
3a00c802
PA
5699 rs->last_resume_exec_dir = EXEC_FORWARD;
5700
9d1f7ab2 5701 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5702 rs->use_threadinfo_query = 1;
5703 rs->use_threadextra_query = 1;
9d1f7ab2 5704
dd194f6b 5705 rs->readahead_cache.invalidate ();
80152258 5706
c6ebd6cf 5707 if (target_async_permitted)
92d1e331 5708 {
92d1e331
DJ
5709 /* FIXME: cagney/1999-09-23: During the initial connection it is
5710 assumed that the target is already ready and able to respond to
0df8b418 5711 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5712 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5713 around this. Eventually a mechanism that allows
92d1e331 5714 wait_for_inferior() to expect/get timeouts will be
23860348 5715 implemented. */
6b8edb51 5716 rs->wait_forever_enabled_p = 0;
92d1e331
DJ
5717 }
5718
23860348 5719 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5720 no_shared_libraries (NULL, 0);
f78f6cf1 5721
36918e70 5722 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5723 target (we'd otherwise be in an inconsistent state) and then
5724 propogate the error on up the exception chain. This ensures that
5725 the caller doesn't stumble along blindly assuming that the
5726 function succeeded. The CLI doesn't have this problem but other
5727 UI's, such as MI do.
36918e70
AC
5728
5729 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5730 this function should return an error indication letting the
ce2826aa 5731 caller restore the previous state. Unfortunately the command
36918e70
AC
5732 ``target remote'' is directly wired to this function making that
5733 impossible. On a positive note, the CLI side of this problem has
5734 been fixed - the function set_cmd_context() makes it possible for
5735 all the ``target ....'' commands to share a common callback
5736 function. See cli-dump.c. */
109c3e39 5737 {
2d717e4f 5738
a70b8144 5739 try
04bd08de 5740 {
6b8edb51 5741 remote->start_remote (from_tty, extended_p);
04bd08de 5742 }
230d2906 5743 catch (const gdb_exception &ex)
109c3e39 5744 {
c8d104ad
PA
5745 /* Pop the partially set up target - unless something else did
5746 already before throwing the exception. */
6b8edb51 5747 if (ex.error != TARGET_CLOSE_ERROR)
5b6d1e4f 5748 remote_unpush_target (remote);
eedc3f4f 5749 throw;
109c3e39
AC
5750 }
5751 }
c906108c 5752
6b8edb51 5753 remote_btrace_reset (rs);
f4abbc16 5754
c6ebd6cf 5755 if (target_async_permitted)
6b8edb51 5756 rs->wait_forever_enabled_p = 1;
43ff13b4
JM
5757}
5758
de0d863e
DB
5759/* Detach the specified process. */
5760
6b8edb51
PA
5761void
5762remote_target::remote_detach_pid (int pid)
de0d863e
DB
5763{
5764 struct remote_state *rs = get_remote_state ();
5765
4c7333b3
PA
5766 /* This should not be necessary, but the handling for D;PID in
5767 GDBserver versions prior to 8.2 incorrectly assumes that the
5768 selected process points to the same process we're detaching,
5769 leading to misbehavior (and possibly GDBserver crashing) when it
5770 does not. Since it's easy and cheap, work around it by forcing
5771 GDBserver to select GDB's current process. */
5772 set_general_process ();
5773
de0d863e 5774 if (remote_multi_process_p (rs))
8d64371b 5775 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
de0d863e 5776 else
8d64371b 5777 strcpy (rs->buf.data (), "D");
de0d863e
DB
5778
5779 putpkt (rs->buf);
8d64371b 5780 getpkt (&rs->buf, 0);
de0d863e
DB
5781
5782 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5783 ;
5784 else if (rs->buf[0] == '\0')
5785 error (_("Remote doesn't know how to detach"));
5786 else
5787 error (_("Can't detach process."));
5788}
5789
5790/* This detaches a program to which we previously attached, using
5791 inferior_ptid to identify the process. After this is done, GDB
5792 can be used to debug some other program. We better not have left
5793 any breakpoints in the target program or it'll die when it hits
5794 one. */
c906108c 5795
6b8edb51 5796void
00431a78 5797remote_target::remote_detach_1 (inferior *inf, int from_tty)
c906108c 5798{
e99b03dc 5799 int pid = inferior_ptid.pid ();
d01949b6 5800 struct remote_state *rs = get_remote_state ();
de0d863e 5801 int is_fork_parent;
c906108c 5802
55f6301a 5803 if (!target_has_execution ())
2d717e4f
DJ
5804 error (_("No process to detach from."));
5805
0f48b757 5806 target_announce_detach (from_tty);
7cee1e54 5807
e87f0fe8
PA
5808 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
5809 {
5810 /* If we're in breakpoints-always-inserted mode, or the inferior
5811 is running, we have to remove breakpoints before detaching.
5812 We don't do this in common code instead because not all
5813 targets support removing breakpoints while the target is
5814 running. The remote target / gdbserver does, though. */
5815 remove_breakpoints_inf (current_inferior ());
5816 }
5817
c906108c 5818 /* Tell the remote target to detach. */
de0d863e 5819 remote_detach_pid (pid);
82f73884 5820
8020350c 5821 /* Exit only if this is the only active inferior. */
5b6d1e4f 5822 if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1)
7cee1e54 5823 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5824
5b6d1e4f 5825 thread_info *tp = find_thread_ptid (this, inferior_ptid);
00431a78 5826
de0d863e
DB
5827 /* Check to see if we are detaching a fork parent. Note that if we
5828 are detaching a fork child, tp == NULL. */
5829 is_fork_parent = (tp != NULL
5830 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5831
5832 /* If doing detach-on-fork, we don't mourn, because that will delete
5833 breakpoints that should be available for the followed inferior. */
5834 if (!is_fork_parent)
f67c0c91 5835 {
249b5733
PA
5836 /* Save the pid as a string before mourning, since that will
5837 unpush the remote target, and we need the string after. */
f2907e49 5838 std::string infpid = target_pid_to_str (ptid_t (pid));
f67c0c91
SDJ
5839
5840 target_mourn_inferior (inferior_ptid);
5841 if (print_inferior_events)
5842 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5843 inf->num, infpid.c_str ());
5844 }
de0d863e
DB
5845 else
5846 {
0ac55310 5847 switch_to_no_thread ();
00431a78 5848 detach_inferior (current_inferior ());
de0d863e 5849 }
2d717e4f
DJ
5850}
5851
f6ac5f3d
PA
5852void
5853remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5854{
00431a78 5855 remote_detach_1 (inf, from_tty);
2d717e4f
DJ
5856}
5857
f6ac5f3d
PA
5858void
5859extended_remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5860{
00431a78 5861 remote_detach_1 (inf, from_tty);
de0d863e
DB
5862}
5863
5864/* Target follow-fork function for remote targets. On entry, and
5865 at return, the current inferior is the fork parent.
5866
5867 Note that although this is currently only used for extended-remote,
5868 it is named remote_follow_fork in anticipation of using it for the
5869 remote target as well. */
5870
5ab2fbf1
SM
5871bool
5872remote_target::follow_fork (bool follow_child, bool detach_fork)
de0d863e
DB
5873{
5874 struct remote_state *rs = get_remote_state ();
c269dbdb 5875 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5876
c269dbdb
DB
5877 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5878 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5879 {
5880 /* When following the parent and detaching the child, we detach
5881 the child here. For the case of following the child and
5882 detaching the parent, the detach is done in the target-
5883 independent follow fork code in infrun.c. We can't use
5884 target_detach when detaching an unfollowed child because
5885 the client side doesn't know anything about the child. */
5886 if (detach_fork && !follow_child)
5887 {
5888 /* Detach the fork child. */
5889 ptid_t child_ptid;
5890 pid_t child_pid;
5891
5892 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
e99b03dc 5893 child_pid = child_ptid.pid ();
de0d863e
DB
5894
5895 remote_detach_pid (child_pid);
de0d863e
DB
5896 }
5897 }
5ab2fbf1
SM
5898
5899 return false;
c906108c
SS
5900}
5901
94585166
DB
5902/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5903 in the program space of the new inferior. On entry and at return the
5904 current inferior is the exec'ing inferior. INF is the new exec'd
5905 inferior, which may be the same as the exec'ing inferior unless
5906 follow-exec-mode is "new". */
5907
f6ac5f3d 5908void
4ca51187 5909remote_target::follow_exec (struct inferior *inf, const char *execd_pathname)
94585166
DB
5910{
5911 /* We know that this is a target file name, so if it has the "target:"
5912 prefix we strip it off before saving it in the program space. */
5913 if (is_target_filename (execd_pathname))
5914 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5915
5916 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5917}
5918
6ad8ae5c
DJ
5919/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5920
f6ac5f3d
PA
5921void
5922remote_target::disconnect (const char *args, int from_tty)
43ff13b4 5923{
43ff13b4 5924 if (args)
2d717e4f 5925 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5926
8020350c 5927 /* Make sure we unpush even the extended remote targets. Calling
5b6d1e4f
PA
5928 target_mourn_inferior won't unpush, and
5929 remote_target::mourn_inferior won't unpush if there is more than
5930 one inferior left. */
5931 remote_unpush_target (this);
2d717e4f 5932
43ff13b4
JM
5933 if (from_tty)
5934 puts_filtered ("Ending remote debugging.\n");
5935}
5936
2d717e4f
DJ
5937/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5938 be chatty about it. */
5939
f6ac5f3d
PA
5940void
5941extended_remote_target::attach (const char *args, int from_tty)
2d717e4f
DJ
5942{
5943 struct remote_state *rs = get_remote_state ();
be86555c 5944 int pid;
96ef3384 5945 char *wait_status = NULL;
2d717e4f 5946
74164c56 5947 pid = parse_pid_to_attach (args);
2d717e4f 5948
74164c56
JK
5949 /* Remote PID can be freely equal to getpid, do not check it here the same
5950 way as in other targets. */
2d717e4f 5951
4082afcc 5952 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5953 error (_("This target does not support attaching to a process"));
5954
7cee1e54
PA
5955 if (from_tty)
5956 {
d9fa87f4 5957 const char *exec_file = get_exec_file (0);
7cee1e54
PA
5958
5959 if (exec_file)
5960 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
a068643d 5961 target_pid_to_str (ptid_t (pid)).c_str ());
7cee1e54
PA
5962 else
5963 printf_unfiltered (_("Attaching to %s\n"),
a068643d 5964 target_pid_to_str (ptid_t (pid)).c_str ());
7cee1e54
PA
5965 }
5966
8d64371b 5967 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f 5968 putpkt (rs->buf);
8d64371b 5969 getpkt (&rs->buf, 0);
2d717e4f 5970
4082afcc
PA
5971 switch (packet_ok (rs->buf,
5972 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5973 {
4082afcc 5974 case PACKET_OK:
6efcd9a8 5975 if (!target_is_non_stop_p ())
74531fed
PA
5976 {
5977 /* Save the reply for later. */
8d64371b
TT
5978 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
5979 strcpy (wait_status, rs->buf.data ());
74531fed 5980 }
8d64371b 5981 else if (strcmp (rs->buf.data (), "OK") != 0)
74531fed 5982 error (_("Attaching to %s failed with: %s"),
a068643d 5983 target_pid_to_str (ptid_t (pid)).c_str (),
8d64371b 5984 rs->buf.data ());
4082afcc
PA
5985 break;
5986 case PACKET_UNKNOWN:
5987 error (_("This target does not support attaching to a process"));
5988 default:
50fa3001
SDJ
5989 error (_("Attaching to %s failed"),
5990 target_pid_to_str (ptid_t (pid)).c_str ());
2d717e4f 5991 }
2d717e4f 5992
0ac55310 5993 switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0));
bad34192 5994
f2907e49 5995 inferior_ptid = ptid_t (pid);
79d7f229 5996
6efcd9a8 5997 if (target_is_non_stop_p ())
bad34192 5998 {
bad34192 5999 /* Get list of threads. */
f6ac5f3d 6000 update_thread_list ();
82f73884 6001
0ac55310
PA
6002 thread_info *thread = first_thread_of_inferior (current_inferior ());
6003 if (thread != nullptr)
6004 switch_to_thread (thread);
bad34192
PA
6005
6006 /* Invalidate our notion of the remote current thread. */
47f8a51d 6007 record_currthread (rs, minus_one_ptid);
bad34192 6008 }
74531fed 6009 else
bad34192 6010 {
0ac55310
PA
6011 /* Now, if we have thread information, update the main thread's
6012 ptid. */
6013 ptid_t curr_ptid = remote_current_thread (ptid_t (pid));
bad34192
PA
6014
6015 /* Add the main thread to the thread list. */
0ac55310
PA
6016 thread_info *thr = add_thread_silent (this, curr_ptid);
6017
6018 switch_to_thread (thr);
6019
00aecdcf
PA
6020 /* Don't consider the thread stopped until we've processed the
6021 saved stop reply. */
5b6d1e4f 6022 set_executing (this, thr->ptid, true);
bad34192 6023 }
c0a2216e 6024
96ef3384
UW
6025 /* Next, if the target can specify a description, read it. We do
6026 this before anything involving memory or registers. */
6027 target_find_description ();
6028
6efcd9a8 6029 if (!target_is_non_stop_p ())
74531fed
PA
6030 {
6031 /* Use the previously fetched status. */
6032 gdb_assert (wait_status != NULL);
6033
6034 if (target_can_async_p ())
6035 {
722247f1 6036 struct notif_event *reply
6b8edb51 6037 = remote_notif_parse (this, &notif_client_stop, wait_status);
74531fed 6038
722247f1 6039 push_stop_reply ((struct stop_reply *) reply);
74531fed 6040
6a3753b3 6041 target_async (1);
74531fed
PA
6042 }
6043 else
6044 {
6045 gdb_assert (wait_status != NULL);
8d64371b 6046 strcpy (rs->buf.data (), wait_status);
74531fed
PA
6047 rs->cached_wait_status = 1;
6048 }
6049 }
6050 else
621cc310
PA
6051 {
6052 gdb_assert (wait_status == NULL);
6053
6054 gdb_assert (target_can_async_p ());
6055 target_async (1);
6056 }
2d717e4f
DJ
6057}
6058
b9c1d481
AS
6059/* Implementation of the to_post_attach method. */
6060
f6ac5f3d
PA
6061void
6062extended_remote_target::post_attach (int pid)
b9c1d481 6063{
6efcd9a8
PA
6064 /* Get text, data & bss offsets. */
6065 get_offsets ();
6066
b9c1d481
AS
6067 /* In certain cases GDB might not have had the chance to start
6068 symbol lookup up until now. This could happen if the debugged
6069 binary is not using shared libraries, the vsyscall page is not
6070 present (on Linux) and the binary itself hadn't changed since the
6071 debugging process was started. */
a42d7dd8 6072 if (current_program_space->symfile_object_file != NULL)
b9c1d481
AS
6073 remote_check_symbols();
6074}
6075
c906108c 6076\f
506fb367
DJ
6077/* Check for the availability of vCont. This function should also check
6078 the response. */
c906108c 6079
6b8edb51
PA
6080void
6081remote_target::remote_vcont_probe ()
c906108c 6082{
6b8edb51 6083 remote_state *rs = get_remote_state ();
2e9f7625 6084 char *buf;
6d820c5c 6085
8d64371b 6086 strcpy (rs->buf.data (), "vCont?");
2e9f7625 6087 putpkt (rs->buf);
8d64371b
TT
6088 getpkt (&rs->buf, 0);
6089 buf = rs->buf.data ();
c906108c 6090
506fb367 6091 /* Make sure that the features we assume are supported. */
61012eef 6092 if (startswith (buf, "vCont"))
506fb367
DJ
6093 {
6094 char *p = &buf[5];
750ce8d1 6095 int support_c, support_C;
506fb367 6096
750ce8d1
YQ
6097 rs->supports_vCont.s = 0;
6098 rs->supports_vCont.S = 0;
506fb367
DJ
6099 support_c = 0;
6100 support_C = 0;
d458bd84 6101 rs->supports_vCont.t = 0;
c1e36e3e 6102 rs->supports_vCont.r = 0;
506fb367
DJ
6103 while (p && *p == ';')
6104 {
6105 p++;
6106 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 6107 rs->supports_vCont.s = 1;
506fb367 6108 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 6109 rs->supports_vCont.S = 1;
506fb367
DJ
6110 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
6111 support_c = 1;
6112 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
6113 support_C = 1;
74531fed 6114 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 6115 rs->supports_vCont.t = 1;
c1e36e3e
PA
6116 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
6117 rs->supports_vCont.r = 1;
506fb367
DJ
6118
6119 p = strchr (p, ';');
6120 }
c906108c 6121
750ce8d1
YQ
6122 /* If c, and C are not all supported, we can't use vCont. Clearing
6123 BUF will make packet_ok disable the packet. */
6124 if (!support_c || !support_C)
506fb367
DJ
6125 buf[0] = 0;
6126 }
c906108c 6127
8d64371b 6128 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
5b6d1e4f 6129 rs->supports_vCont_probed = true;
506fb367 6130}
c906108c 6131
0d8f58ca
PA
6132/* Helper function for building "vCont" resumptions. Write a
6133 resumption to P. ENDP points to one-passed-the-end of the buffer
6134 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
6135 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
6136 resumed thread should be single-stepped and/or signalled. If PTID
6137 equals minus_one_ptid, then all threads are resumed; if PTID
6138 represents a process, then all threads of the process are resumed;
6139 the thread to be stepped and/or signalled is given in the global
6140 INFERIOR_PTID. */
6141
6b8edb51
PA
6142char *
6143remote_target::append_resumption (char *p, char *endp,
6144 ptid_t ptid, int step, gdb_signal siggnal)
0d8f58ca
PA
6145{
6146 struct remote_state *rs = get_remote_state ();
6147
a493e3e2 6148 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 6149 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
6150 else if (step
6151 /* GDB is willing to range step. */
6152 && use_range_stepping
6153 /* Target supports range stepping. */
6154 && rs->supports_vCont.r
6155 /* We don't currently support range stepping multiple
6156 threads with a wildcard (though the protocol allows it,
6157 so stubs shouldn't make an active effort to forbid
6158 it). */
0e998d96 6159 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
c1e36e3e
PA
6160 {
6161 struct thread_info *tp;
6162
d7e15655 6163 if (ptid == minus_one_ptid)
c1e36e3e
PA
6164 {
6165 /* If we don't know about the target thread's tid, then
6166 we're resuming magic_null_ptid (see caller). */
5b6d1e4f 6167 tp = find_thread_ptid (this, magic_null_ptid);
c1e36e3e
PA
6168 }
6169 else
5b6d1e4f 6170 tp = find_thread_ptid (this, ptid);
c1e36e3e
PA
6171 gdb_assert (tp != NULL);
6172
6173 if (tp->control.may_range_step)
6174 {
6175 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6176
6177 p += xsnprintf (p, endp - p, ";r%s,%s",
6178 phex_nz (tp->control.step_range_start,
6179 addr_size),
6180 phex_nz (tp->control.step_range_end,
6181 addr_size));
6182 }
6183 else
6184 p += xsnprintf (p, endp - p, ";s");
6185 }
0d8f58ca
PA
6186 else if (step)
6187 p += xsnprintf (p, endp - p, ";s");
a493e3e2 6188 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
6189 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6190 else
6191 p += xsnprintf (p, endp - p, ";c");
6192
0e998d96 6193 if (remote_multi_process_p (rs) && ptid.is_pid ())
0d8f58ca
PA
6194 {
6195 ptid_t nptid;
6196
6197 /* All (-1) threads of process. */
e99b03dc 6198 nptid = ptid_t (ptid.pid (), -1, 0);
0d8f58ca
PA
6199
6200 p += xsnprintf (p, endp - p, ":");
6201 p = write_ptid (p, endp, nptid);
6202 }
d7e15655 6203 else if (ptid != minus_one_ptid)
0d8f58ca
PA
6204 {
6205 p += xsnprintf (p, endp - p, ":");
6206 p = write_ptid (p, endp, ptid);
6207 }
6208
6209 return p;
6210}
6211
799a2abe
PA
6212/* Clear the thread's private info on resume. */
6213
6214static void
6215resume_clear_thread_private_info (struct thread_info *thread)
6216{
6217 if (thread->priv != NULL)
6218 {
7aabaf9d
SM
6219 remote_thread_info *priv = get_remote_thread_info (thread);
6220
6221 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6222 priv->watch_data_address = 0;
799a2abe
PA
6223 }
6224}
6225
e5ef252a
PA
6226/* Append a vCont continue-with-signal action for threads that have a
6227 non-zero stop signal. */
6228
6b8edb51
PA
6229char *
6230remote_target::append_pending_thread_resumptions (char *p, char *endp,
6231 ptid_t ptid)
e5ef252a 6232{
5b6d1e4f 6233 for (thread_info *thread : all_non_exited_threads (this, ptid))
08036331 6234 if (inferior_ptid != thread->ptid
70509625 6235 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
6236 {
6237 p = append_resumption (p, endp, thread->ptid,
6238 0, thread->suspend.stop_signal);
6239 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 6240 resume_clear_thread_private_info (thread);
e5ef252a
PA
6241 }
6242
6243 return p;
6244}
6245
7b68ffbb
PA
6246/* Set the target running, using the packets that use Hc
6247 (c/s/C/S). */
6248
6b8edb51
PA
6249void
6250remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6251 gdb_signal siggnal)
7b68ffbb
PA
6252{
6253 struct remote_state *rs = get_remote_state ();
7b68ffbb
PA
6254 char *buf;
6255
6256 rs->last_sent_signal = siggnal;
6257 rs->last_sent_step = step;
6258
6259 /* The c/s/C/S resume packets use Hc, so set the continue
6260 thread. */
d7e15655 6261 if (ptid == minus_one_ptid)
7b68ffbb
PA
6262 set_continue_thread (any_thread_ptid);
6263 else
6264 set_continue_thread (ptid);
6265
5b6d1e4f 6266 for (thread_info *thread : all_non_exited_threads (this))
7b68ffbb
PA
6267 resume_clear_thread_private_info (thread);
6268
8d64371b 6269 buf = rs->buf.data ();
6b8edb51 6270 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6271 {
6272 /* We don't pass signals to the target in reverse exec mode. */
6273 if (info_verbose && siggnal != GDB_SIGNAL_0)
6274 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6275 siggnal);
6276
6277 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6278 error (_("Remote reverse-step not supported."));
6279 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6280 error (_("Remote reverse-continue not supported."));
6281
6282 strcpy (buf, step ? "bs" : "bc");
6283 }
6284 else if (siggnal != GDB_SIGNAL_0)
6285 {
6286 buf[0] = step ? 'S' : 'C';
6287 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6288 buf[2] = tohex (((int) siggnal) & 0xf);
6289 buf[3] = '\0';
6290 }
6291 else
6292 strcpy (buf, step ? "s" : "c");
6293
6294 putpkt (buf);
6295}
6296
506fb367
DJ
6297/* Resume the remote inferior by using a "vCont" packet. The thread
6298 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
6299 resumed thread should be single-stepped and/or signalled. If PTID
6300 equals minus_one_ptid, then all threads are resumed; the thread to
6301 be stepped and/or signalled is given in the global INFERIOR_PTID.
6302 This function returns non-zero iff it resumes the inferior.
44eaed12 6303
7b68ffbb
PA
6304 This function issues a strict subset of all possible vCont commands
6305 at the moment. */
44eaed12 6306
6b8edb51
PA
6307int
6308remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6309 enum gdb_signal siggnal)
506fb367
DJ
6310{
6311 struct remote_state *rs = get_remote_state ();
82f73884
PA
6312 char *p;
6313 char *endp;
44eaed12 6314
7b68ffbb 6315 /* No reverse execution actions defined for vCont. */
6b8edb51 6316 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6317 return 0;
6318
4082afcc 6319 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 6320 remote_vcont_probe ();
44eaed12 6321
4082afcc 6322 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 6323 return 0;
44eaed12 6324
8d64371b
TT
6325 p = rs->buf.data ();
6326 endp = p + get_remote_packet_size ();
82f73884 6327
506fb367
DJ
6328 /* If we could generate a wider range of packets, we'd have to worry
6329 about overflowing BUF. Should there be a generic
6330 "multi-part-packet" packet? */
6331
0d8f58ca
PA
6332 p += xsnprintf (p, endp - p, "vCont");
6333
d7e15655 6334 if (ptid == magic_null_ptid)
c906108c 6335 {
79d7f229
PA
6336 /* MAGIC_NULL_PTID means that we don't have any active threads,
6337 so we don't have any TID numbers the inferior will
6338 understand. Make sure to only send forms that do not specify
6339 a TID. */
a9cbf802 6340 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 6341 }
d7e15655 6342 else if (ptid == minus_one_ptid || ptid.is_pid ())
506fb367 6343 {
0d8f58ca
PA
6344 /* Resume all threads (of all processes, or of a single
6345 process), with preference for INFERIOR_PTID. This assumes
6346 inferior_ptid belongs to the set of all threads we are about
6347 to resume. */
a493e3e2 6348 if (step || siggnal != GDB_SIGNAL_0)
82f73884 6349 {
0d8f58ca
PA
6350 /* Step inferior_ptid, with or without signal. */
6351 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 6352 }
0d8f58ca 6353
e5ef252a
PA
6354 /* Also pass down any pending signaled resumption for other
6355 threads not the current. */
6356 p = append_pending_thread_resumptions (p, endp, ptid);
6357
0d8f58ca 6358 /* And continue others without a signal. */
a493e3e2 6359 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
6360 }
6361 else
506fb367
DJ
6362 {
6363 /* Scheduler locking; resume only PTID. */
a9cbf802 6364 append_resumption (p, endp, ptid, step, siggnal);
506fb367 6365 }
c906108c 6366
8d64371b 6367 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
82f73884 6368 putpkt (rs->buf);
506fb367 6369
6efcd9a8 6370 if (target_is_non_stop_p ())
74531fed
PA
6371 {
6372 /* In non-stop, the stub replies to vCont with "OK". The stop
6373 reply will be reported asynchronously by means of a `%Stop'
6374 notification. */
8d64371b
TT
6375 getpkt (&rs->buf, 0);
6376 if (strcmp (rs->buf.data (), "OK") != 0)
6377 error (_("Unexpected vCont reply in non-stop mode: %s"),
6378 rs->buf.data ());
74531fed
PA
6379 }
6380
506fb367 6381 return 1;
c906108c 6382}
43ff13b4 6383
506fb367
DJ
6384/* Tell the remote machine to resume. */
6385
f6ac5f3d
PA
6386void
6387remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 6388{
d01949b6 6389 struct remote_state *rs = get_remote_state ();
43ff13b4 6390
85ad3aaf
PA
6391 /* When connected in non-stop mode, the core resumes threads
6392 individually. Resuming remote threads directly in target_resume
6393 would thus result in sending one packet per thread. Instead, to
6394 minimize roundtrip latency, here we just store the resume
c9d22089
SM
6395 request (put the thread in RESUMED_PENDING_VCONT state); the actual remote
6396 resumption will be done in remote_target::commit_resume, where we'll be
6397 able to do vCont action coalescing. */
f6ac5f3d 6398 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
85ad3aaf 6399 {
7aabaf9d 6400 remote_thread_info *remote_thr;
85ad3aaf 6401
d7e15655 6402 if (minus_one_ptid == ptid || ptid.is_pid ())
5b6d1e4f 6403 remote_thr = get_remote_thread_info (this, inferior_ptid);
85ad3aaf 6404 else
5b6d1e4f 6405 remote_thr = get_remote_thread_info (this, ptid);
7aabaf9d 6406
c9d22089
SM
6407 /* We don't expect the core to ask to resume an already resumed (from
6408 its point of view) thread. */
a6c11cbb 6409 gdb_assert (remote_thr->get_resume_state () == resume_state::NOT_RESUMED);
c9d22089
SM
6410
6411 remote_thr->set_resumed_pending_vcont (step, siggnal);
85ad3aaf
PA
6412 return;
6413 }
6414
722247f1
YQ
6415 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6416 (explained in remote-notif.c:handle_notification) so
6417 remote_notif_process is not called. We need find a place where
6418 it is safe to start a 'vNotif' sequence. It is good to do it
6419 before resuming inferior, because inferior was stopped and no RSP
6420 traffic at that moment. */
6efcd9a8 6421 if (!target_is_non_stop_p ())
5965e028 6422 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 6423
f6ac5f3d 6424 rs->last_resume_exec_dir = ::execution_direction;
3a00c802 6425
7b68ffbb
PA
6426 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6427 if (!remote_resume_with_vcont (ptid, step, siggnal))
6b8edb51 6428 remote_resume_with_hc (ptid, step, siggnal);
43ff13b4 6429
c9d22089
SM
6430 /* Update resumed state tracked by the remote target. */
6431 for (thread_info *tp : all_non_exited_threads (this, ptid))
6432 get_remote_thread_info (tp)->set_resumed ();
6433
2acceee2 6434 /* We are about to start executing the inferior, let's register it
0df8b418
MS
6435 with the event loop. NOTE: this is the one place where all the
6436 execution commands end up. We could alternatively do this in each
23860348 6437 of the execution commands in infcmd.c. */
2acceee2
JM
6438 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6439 into infcmd.c in order to allow inferior function calls to work
23860348 6440 NOT asynchronously. */
362646f5 6441 if (target_can_async_p ())
6a3753b3 6442 target_async (1);
e24a49d8
PA
6443
6444 /* We've just told the target to resume. The remote server will
6445 wait for the inferior to stop, and then send a stop reply. In
6446 the mean time, we can't start another command/query ourselves
74531fed
PA
6447 because the stub wouldn't be ready to process it. This applies
6448 only to the base all-stop protocol, however. In non-stop (which
6449 only supports vCont), the stub replies with an "OK", and is
6450 immediate able to process further serial input. */
6efcd9a8 6451 if (!target_is_non_stop_p ())
74531fed 6452 rs->waiting_for_stop_reply = 1;
43ff13b4 6453}
85ad3aaf 6454
85ad3aaf
PA
6455static int is_pending_fork_parent_thread (struct thread_info *thread);
6456
6457/* Private per-inferior info for target remote processes. */
6458
089354bb 6459struct remote_inferior : public private_inferior
85ad3aaf
PA
6460{
6461 /* Whether we can send a wildcard vCont for this process. */
089354bb 6462 bool may_wildcard_vcont = true;
85ad3aaf
PA
6463};
6464
089354bb
SM
6465/* Get the remote private inferior data associated to INF. */
6466
6467static remote_inferior *
6468get_remote_inferior (inferior *inf)
6469{
6470 if (inf->priv == NULL)
6471 inf->priv.reset (new remote_inferior);
6472
6473 return static_cast<remote_inferior *> (inf->priv.get ());
6474}
6475
f5db4863 6476/* Class used to track the construction of a vCont packet in the
85ad3aaf
PA
6477 outgoing packet buffer. This is used to send multiple vCont
6478 packets if we have more actions than would fit a single packet. */
6479
f5db4863 6480class vcont_builder
85ad3aaf 6481{
f5db4863 6482public:
6b8edb51
PA
6483 explicit vcont_builder (remote_target *remote)
6484 : m_remote (remote)
f5db4863
PA
6485 {
6486 restart ();
6487 }
6488
6489 void flush ();
6490 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6491
6492private:
6493 void restart ();
6494
6b8edb51
PA
6495 /* The remote target. */
6496 remote_target *m_remote;
6497
85ad3aaf
PA
6498 /* Pointer to the first action. P points here if no action has been
6499 appended yet. */
f5db4863 6500 char *m_first_action;
85ad3aaf
PA
6501
6502 /* Where the next action will be appended. */
f5db4863 6503 char *m_p;
85ad3aaf
PA
6504
6505 /* The end of the buffer. Must never write past this. */
f5db4863 6506 char *m_endp;
85ad3aaf
PA
6507};
6508
6509/* Prepare the outgoing buffer for a new vCont packet. */
6510
f5db4863
PA
6511void
6512vcont_builder::restart ()
85ad3aaf 6513{
6b8edb51 6514 struct remote_state *rs = m_remote->get_remote_state ();
85ad3aaf 6515
8d64371b
TT
6516 m_p = rs->buf.data ();
6517 m_endp = m_p + m_remote->get_remote_packet_size ();
f5db4863
PA
6518 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6519 m_first_action = m_p;
85ad3aaf
PA
6520}
6521
6522/* If the vCont packet being built has any action, send it to the
6523 remote end. */
6524
f5db4863
PA
6525void
6526vcont_builder::flush ()
85ad3aaf
PA
6527{
6528 struct remote_state *rs;
6529
f5db4863 6530 if (m_p == m_first_action)
85ad3aaf
PA
6531 return;
6532
6b8edb51
PA
6533 rs = m_remote->get_remote_state ();
6534 m_remote->putpkt (rs->buf);
8d64371b
TT
6535 m_remote->getpkt (&rs->buf, 0);
6536 if (strcmp (rs->buf.data (), "OK") != 0)
6537 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
85ad3aaf
PA
6538}
6539
6540/* The largest action is range-stepping, with its two addresses. This
6541 is more than sufficient. If a new, bigger action is created, it'll
6542 quickly trigger a failed assertion in append_resumption (and we'll
6543 just bump this). */
6544#define MAX_ACTION_SIZE 200
6545
6546/* Append a new vCont action in the outgoing packet being built. If
6547 the action doesn't fit the packet along with previous actions, push
6548 what we've got so far to the remote end and start over a new vCont
6549 packet (with the new action). */
6550
f5db4863
PA
6551void
6552vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
85ad3aaf
PA
6553{
6554 char buf[MAX_ACTION_SIZE + 1];
85ad3aaf 6555
6b8edb51
PA
6556 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6557 ptid, step, siggnal);
85ad3aaf
PA
6558
6559 /* Check whether this new action would fit in the vCont packet along
6560 with previous actions. If not, send what we've got so far and
6561 start a new vCont packet. */
f5db4863
PA
6562 size_t rsize = endp - buf;
6563 if (rsize > m_endp - m_p)
85ad3aaf 6564 {
f5db4863
PA
6565 flush ();
6566 restart ();
85ad3aaf
PA
6567
6568 /* Should now fit. */
f5db4863 6569 gdb_assert (rsize <= m_endp - m_p);
85ad3aaf
PA
6570 }
6571
f5db4863
PA
6572 memcpy (m_p, buf, rsize);
6573 m_p += rsize;
6574 *m_p = '\0';
85ad3aaf
PA
6575}
6576
6577/* to_commit_resume implementation. */
6578
f6ac5f3d
PA
6579void
6580remote_target::commit_resume ()
85ad3aaf 6581{
85ad3aaf
PA
6582 int any_process_wildcard;
6583 int may_global_wildcard_vcont;
85ad3aaf
PA
6584
6585 /* If connected in all-stop mode, we'd send the remote resume
6586 request directly from remote_resume. Likewise if
6587 reverse-debugging, as there are no defined vCont actions for
6588 reverse execution. */
f6ac5f3d 6589 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
85ad3aaf
PA
6590 return;
6591
6592 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6593 instead of resuming all threads of each process individually.
6594 However, if any thread of a process must remain halted, we can't
6595 send wildcard resumes and must send one action per thread.
6596
6597 Care must be taken to not resume threads/processes the server
6598 side already told us are stopped, but the core doesn't know about
6599 yet, because the events are still in the vStopped notification
6600 queue. For example:
6601
6602 #1 => vCont s:p1.1;c
6603 #2 <= OK
6604 #3 <= %Stopped T05 p1.1
6605 #4 => vStopped
6606 #5 <= T05 p1.2
6607 #6 => vStopped
6608 #7 <= OK
6609 #8 (infrun handles the stop for p1.1 and continues stepping)
6610 #9 => vCont s:p1.1;c
6611
6612 The last vCont above would resume thread p1.2 by mistake, because
6613 the server has no idea that the event for p1.2 had not been
6614 handled yet.
6615
6616 The server side must similarly ignore resume actions for the
6617 thread that has a pending %Stopped notification (and any other
6618 threads with events pending), until GDB acks the notification
6619 with vStopped. Otherwise, e.g., the following case is
6620 mishandled:
6621
6622 #1 => g (or any other packet)
6623 #2 <= [registers]
6624 #3 <= %Stopped T05 p1.2
6625 #4 => vCont s:p1.1;c
6626 #5 <= OK
6627
6628 Above, the server must not resume thread p1.2. GDB can't know
6629 that p1.2 stopped until it acks the %Stopped notification, and
6630 since from GDB's perspective all threads should be running, it
6631 sends a "c" action.
6632
6633 Finally, special care must also be given to handling fork/vfork
6634 events. A (v)fork event actually tells us that two processes
6635 stopped -- the parent and the child. Until we follow the fork,
6636 we must not resume the child. Therefore, if we have a pending
6637 fork follow, we must not send a global wildcard resume action
6638 (vCont;c). We can still send process-wide wildcards though. */
6639
6640 /* Start by assuming a global wildcard (vCont;c) is possible. */
6641 may_global_wildcard_vcont = 1;
6642
6643 /* And assume every process is individually wildcard-able too. */
5b6d1e4f 6644 for (inferior *inf : all_non_exited_inferiors (this))
85ad3aaf 6645 {
089354bb
SM
6646 remote_inferior *priv = get_remote_inferior (inf);
6647
6648 priv->may_wildcard_vcont = true;
85ad3aaf
PA
6649 }
6650
6651 /* Check for any pending events (not reported or processed yet) and
6652 disable process and global wildcard resumes appropriately. */
6653 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6654
5b6d1e4f 6655 for (thread_info *tp : all_non_exited_threads (this))
85ad3aaf 6656 {
c9d22089
SM
6657 remote_thread_info *priv = get_remote_thread_info (tp);
6658
85ad3aaf
PA
6659 /* If a thread of a process is not meant to be resumed, then we
6660 can't wildcard that process. */
a6c11cbb 6661 if (priv->get_resume_state () == resume_state::NOT_RESUMED)
85ad3aaf 6662 {
089354bb 6663 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
85ad3aaf
PA
6664
6665 /* And if we can't wildcard a process, we can't wildcard
6666 everything either. */
6667 may_global_wildcard_vcont = 0;
6668 continue;
6669 }
6670
6671 /* If a thread is the parent of an unfollowed fork, then we
6672 can't do a global wildcard, as that would resume the fork
6673 child. */
6674 if (is_pending_fork_parent_thread (tp))
6675 may_global_wildcard_vcont = 0;
6676 }
6677
6678 /* Now let's build the vCont packet(s). Actions must be appended
6679 from narrower to wider scopes (thread -> process -> global). If
6680 we end up with too many actions for a single packet vcont_builder
6681 flushes the current vCont packet to the remote side and starts a
6682 new one. */
6b8edb51 6683 struct vcont_builder vcont_builder (this);
85ad3aaf
PA
6684
6685 /* Threads first. */
5b6d1e4f 6686 for (thread_info *tp : all_non_exited_threads (this))
85ad3aaf 6687 {
7aabaf9d 6688 remote_thread_info *remote_thr = get_remote_thread_info (tp);
85ad3aaf 6689
c9d22089
SM
6690 /* If the thread was previously vCont-resumed, no need to send a specific
6691 action for it. If we didn't receive a resume request for it, don't
6692 send an action for it either. */
a6c11cbb 6693 if (remote_thr->get_resume_state () != resume_state::RESUMED_PENDING_VCONT)
85ad3aaf
PA
6694 continue;
6695
6696 gdb_assert (!thread_is_in_step_over_chain (tp));
6697
c9d22089
SM
6698 const resumed_pending_vcont_info &info
6699 = remote_thr->resumed_pending_vcont_info ();
85ad3aaf 6700
c9d22089
SM
6701 /* Check if we need to send a specific action for this thread. If not,
6702 it will be included in a wildcard resume instead. */
6703 if (info.step || info.sig != GDB_SIGNAL_0
6704 || !get_remote_inferior (tp->inf)->may_wildcard_vcont)
6705 vcont_builder.push_action (tp->ptid, info.step, info.sig);
6706
6707 remote_thr->set_resumed ();
85ad3aaf
PA
6708 }
6709
6710 /* Now check whether we can send any process-wide wildcard. This is
6711 to avoid sending a global wildcard in the case nothing is
6712 supposed to be resumed. */
6713 any_process_wildcard = 0;
6714
5b6d1e4f 6715 for (inferior *inf : all_non_exited_inferiors (this))
85ad3aaf 6716 {
089354bb 6717 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf
PA
6718 {
6719 any_process_wildcard = 1;
6720 break;
6721 }
6722 }
6723
6724 if (any_process_wildcard)
6725 {
6726 /* If all processes are wildcard-able, then send a single "c"
6727 action, otherwise, send an "all (-1) threads of process"
6728 continue action for each running process, if any. */
6729 if (may_global_wildcard_vcont)
6730 {
f5db4863
PA
6731 vcont_builder.push_action (minus_one_ptid,
6732 false, GDB_SIGNAL_0);
85ad3aaf
PA
6733 }
6734 else
6735 {
5b6d1e4f 6736 for (inferior *inf : all_non_exited_inferiors (this))
85ad3aaf 6737 {
089354bb 6738 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf 6739 {
f2907e49 6740 vcont_builder.push_action (ptid_t (inf->pid),
f5db4863 6741 false, GDB_SIGNAL_0);
85ad3aaf
PA
6742 }
6743 }
6744 }
6745 }
6746
f5db4863 6747 vcont_builder.flush ();
85ad3aaf
PA
6748}
6749
c906108c 6750\f
43ff13b4 6751
74531fed
PA
6752/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6753 thread, all threads of a remote process, or all threads of all
6754 processes. */
6755
6b8edb51
PA
6756void
6757remote_target::remote_stop_ns (ptid_t ptid)
74531fed
PA
6758{
6759 struct remote_state *rs = get_remote_state ();
8d64371b
TT
6760 char *p = rs->buf.data ();
6761 char *endp = p + get_remote_packet_size ();
74531fed 6762
5b6d1e4f
PA
6763 /* FIXME: This supports_vCont_probed check is a workaround until
6764 packet_support is per-connection. */
6765 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN
6766 || !rs->supports_vCont_probed)
6b8edb51 6767 remote_vcont_probe ();
74531fed 6768
d458bd84 6769 if (!rs->supports_vCont.t)
74531fed
PA
6770 error (_("Remote server does not support stopping threads"));
6771
d7e15655 6772 if (ptid == minus_one_ptid
0e998d96 6773 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
74531fed
PA
6774 p += xsnprintf (p, endp - p, "vCont;t");
6775 else
6776 {
6777 ptid_t nptid;
6778
74531fed
PA
6779 p += xsnprintf (p, endp - p, "vCont;t:");
6780
0e998d96 6781 if (ptid.is_pid ())
74531fed 6782 /* All (-1) threads of process. */
e99b03dc 6783 nptid = ptid_t (ptid.pid (), -1, 0);
74531fed
PA
6784 else
6785 {
6786 /* Small optimization: if we already have a stop reply for
6787 this thread, no use in telling the stub we want this
6788 stopped. */
6789 if (peek_stop_reply (ptid))
6790 return;
6791
6792 nptid = ptid;
6793 }
6794
a9cbf802 6795 write_ptid (p, endp, nptid);
74531fed
PA
6796 }
6797
6798 /* In non-stop, we get an immediate OK reply. The stop reply will
6799 come in asynchronously by notification. */
6800 putpkt (rs->buf);
8d64371b
TT
6801 getpkt (&rs->buf, 0);
6802 if (strcmp (rs->buf.data (), "OK") != 0)
a068643d 6803 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
8d64371b 6804 rs->buf.data ());
74531fed
PA
6805}
6806
bfedc46a
PA
6807/* All-stop version of target_interrupt. Sends a break or a ^C to
6808 interrupt the remote target. It is undefined which thread of which
6809 process reports the interrupt. */
74531fed 6810
6b8edb51
PA
6811void
6812remote_target::remote_interrupt_as ()
74531fed
PA
6813{
6814 struct remote_state *rs = get_remote_state ();
6815
3a29589a
DJ
6816 rs->ctrlc_pending_p = 1;
6817
74531fed
PA
6818 /* If the inferior is stopped already, but the core didn't know
6819 about it yet, just ignore the request. The cached wait status
6820 will be collected in remote_wait. */
6821 if (rs->cached_wait_status)
6822 return;
6823
9a7071a8
JB
6824 /* Send interrupt_sequence to remote target. */
6825 send_interrupt_sequence ();
74531fed
PA
6826}
6827
de979965
PA
6828/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6829 the remote target. It is undefined which thread of which process
e42de8c7
PA
6830 reports the interrupt. Throws an error if the packet is not
6831 supported by the server. */
de979965 6832
6b8edb51
PA
6833void
6834remote_target::remote_interrupt_ns ()
de979965
PA
6835{
6836 struct remote_state *rs = get_remote_state ();
8d64371b
TT
6837 char *p = rs->buf.data ();
6838 char *endp = p + get_remote_packet_size ();
de979965
PA
6839
6840 xsnprintf (p, endp - p, "vCtrlC");
6841
6842 /* In non-stop, we get an immediate OK reply. The stop reply will
6843 come in asynchronously by notification. */
6844 putpkt (rs->buf);
8d64371b 6845 getpkt (&rs->buf, 0);
de979965
PA
6846
6847 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6848 {
6849 case PACKET_OK:
6850 break;
6851 case PACKET_UNKNOWN:
e42de8c7 6852 error (_("No support for interrupting the remote target."));
de979965 6853 case PACKET_ERROR:
8d64371b 6854 error (_("Interrupting target failed: %s"), rs->buf.data ());
de979965 6855 }
de979965
PA
6856}
6857
bfedc46a 6858/* Implement the to_stop function for the remote targets. */
74531fed 6859
f6ac5f3d
PA
6860void
6861remote_target::stop (ptid_t ptid)
c906108c 6862{
2189c312 6863 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
c906108c 6864
6efcd9a8 6865 if (target_is_non_stop_p ())
74531fed 6866 remote_stop_ns (ptid);
c906108c 6867 else
bfedc46a
PA
6868 {
6869 /* We don't currently have a way to transparently pause the
6870 remote target in all-stop mode. Interrupt it instead. */
de979965 6871 remote_interrupt_as ();
bfedc46a
PA
6872 }
6873}
6874
6875/* Implement the to_interrupt function for the remote targets. */
6876
f6ac5f3d
PA
6877void
6878remote_target::interrupt ()
bfedc46a 6879{
2189c312 6880 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
bfedc46a 6881
e42de8c7
PA
6882 if (target_is_non_stop_p ())
6883 remote_interrupt_ns ();
bfedc46a 6884 else
e42de8c7 6885 remote_interrupt_as ();
c906108c
SS
6886}
6887
93692b58
PA
6888/* Implement the to_pass_ctrlc function for the remote targets. */
6889
f6ac5f3d
PA
6890void
6891remote_target::pass_ctrlc ()
93692b58 6892{
2189c312 6893 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
93692b58 6894
2189c312 6895 struct remote_state *rs = get_remote_state ();
93692b58
PA
6896
6897 /* If we're starting up, we're not fully synced yet. Quit
6898 immediately. */
6899 if (rs->starting_up)
6900 quit ();
6901 /* If ^C has already been sent once, offer to disconnect. */
6902 else if (rs->ctrlc_pending_p)
6903 interrupt_query ();
6904 else
e671cd59 6905 target_interrupt ();
93692b58
PA
6906}
6907
c906108c
SS
6908/* Ask the user what to do when an interrupt is received. */
6909
6b8edb51
PA
6910void
6911remote_target::interrupt_query ()
c906108c 6912{
abc56d60 6913 struct remote_state *rs = get_remote_state ();
c906108c 6914
abc56d60 6915 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 6916 {
abc56d60
PA
6917 if (query (_("The target is not responding to interrupt requests.\n"
6918 "Stop debugging it? ")))
74531fed 6919 {
5b6d1e4f 6920 remote_unpush_target (this);
abc56d60 6921 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
6922 }
6923 }
abc56d60
PA
6924 else
6925 {
6926 if (query (_("Interrupted while waiting for the program.\n"
6927 "Give up waiting? ")))
6928 quit ();
6929 }
c906108c
SS
6930}
6931
6426a772
JM
6932/* Enable/disable target terminal ownership. Most targets can use
6933 terminal groups to control terminal ownership. Remote targets are
6934 different in that explicit transfer of ownership to/from GDB/target
23860348 6935 is required. */
6426a772 6936
f6ac5f3d
PA
6937void
6938remote_target::terminal_inferior ()
6426a772 6939{
6426a772
JM
6940 /* NOTE: At this point we could also register our selves as the
6941 recipient of all input. Any characters typed could then be
23860348 6942 passed on down to the target. */
6426a772
JM
6943}
6944
f6ac5f3d
PA
6945void
6946remote_target::terminal_ours ()
6426a772 6947{
6426a772
JM
6948}
6949
176a6961 6950static void
05be00a8 6951remote_console_output (const char *msg)
c906108c 6952{
05be00a8 6953 const char *p;
c906108c 6954
c5aa993b 6955 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
6956 {
6957 char tb[2];
6958 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 6959
c906108c
SS
6960 tb[0] = c;
6961 tb[1] = 0;
da5bd37e 6962 gdb_stdtarg->puts (tb);
c906108c 6963 }
da5bd37e 6964 gdb_stdtarg->flush ();
00db5b94 6965}
74531fed 6966
32603266 6967struct stop_reply : public notif_event
74531fed 6968{
32603266 6969 ~stop_reply ();
74531fed 6970
722247f1 6971 /* The identifier of the thread about this event */
74531fed
PA
6972 ptid_t ptid;
6973
340e3c99 6974 /* The remote state this event is associated with. When the remote
bcc75809
YQ
6975 connection, represented by a remote_state object, is closed,
6976 all the associated stop_reply events should be released. */
6977 struct remote_state *rs;
6978
74531fed
PA
6979 struct target_waitstatus ws;
6980
5cd63fda
PA
6981 /* The architecture associated with the expedited registers. */
6982 gdbarch *arch;
6983
15148d6a
PA
6984 /* Expedited registers. This makes remote debugging a bit more
6985 efficient for those targets that provide critical registers as
6986 part of their normal status mechanism (as another roundtrip to
6987 fetch them is avoided). */
32603266 6988 std::vector<cached_reg_t> regcache;
74531fed 6989
f7e6eed5
PA
6990 enum target_stop_reason stop_reason;
6991
74531fed
PA
6992 CORE_ADDR watch_data_address;
6993
dc146f7c 6994 int core;
32603266 6995};
c906108c 6996
221e1a37
PA
6997/* Return the length of the stop reply queue. */
6998
6b8edb51
PA
6999int
7000remote_target::stop_reply_queue_length ()
221e1a37 7001{
6b8edb51 7002 remote_state *rs = get_remote_state ();
953edf2b 7003 return rs->stop_reply_queue.size ();
221e1a37
PA
7004}
7005
cb8c24b6 7006static void
6b8edb51 7007remote_notif_stop_parse (remote_target *remote,
bb277751 7008 struct notif_client *self, const char *buf,
722247f1
YQ
7009 struct notif_event *event)
7010{
6b8edb51 7011 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
722247f1
YQ
7012}
7013
7014static void
6b8edb51 7015remote_notif_stop_ack (remote_target *remote,
bb277751 7016 struct notif_client *self, const char *buf,
722247f1
YQ
7017 struct notif_event *event)
7018{
7019 struct stop_reply *stop_reply = (struct stop_reply *) event;
7020
7021 /* acknowledge */
6b8edb51 7022 putpkt (remote, self->ack_command);
722247f1 7023
b0083dd7
PA
7024 /* Kind can be TARGET_WAITKIND_IGNORE if we have meanwhile discarded
7025 the notification. It was left in the queue because we need to
7026 acknowledge it and pull the rest of the notifications out. */
7027 if (stop_reply->ws.kind != TARGET_WAITKIND_IGNORE)
7028 remote->push_stop_reply (stop_reply);
722247f1
YQ
7029}
7030
7031static int
6b8edb51
PA
7032remote_notif_stop_can_get_pending_events (remote_target *remote,
7033 struct notif_client *self)
722247f1
YQ
7034{
7035 /* We can't get pending events in remote_notif_process for
7036 notification stop, and we have to do this in remote_wait_ns
7037 instead. If we fetch all queued events from stub, remote stub
7038 may exit and we have no chance to process them back in
7039 remote_wait_ns. */
6b8edb51
PA
7040 remote_state *rs = remote->get_remote_state ();
7041 mark_async_event_handler (rs->remote_async_inferior_event_token);
722247f1
YQ
7042 return 0;
7043}
7044
32603266 7045stop_reply::~stop_reply ()
722247f1 7046{
32603266
TT
7047 for (cached_reg_t &reg : regcache)
7048 xfree (reg.data);
722247f1
YQ
7049}
7050
32603266
TT
7051static notif_event_up
7052remote_notif_stop_alloc_reply ()
722247f1 7053{
32603266 7054 return notif_event_up (new struct stop_reply ());
722247f1
YQ
7055}
7056
7057/* A client of notification Stop. */
7058
7059struct notif_client notif_client_stop =
7060{
7061 "Stop",
7062 "vStopped",
7063 remote_notif_stop_parse,
7064 remote_notif_stop_ack,
7065 remote_notif_stop_can_get_pending_events,
7066 remote_notif_stop_alloc_reply,
f48ff2a7 7067 REMOTE_NOTIF_STOP,
722247f1
YQ
7068};
7069
85ad3aaf 7070/* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
cbb8991c
DB
7071 the pid of the process that owns the threads we want to check, or
7072 -1 if we want to check all threads. */
7073
7074static int
7075is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
7076 ptid_t thread_ptid)
7077{
7078 if (ws->kind == TARGET_WAITKIND_FORKED
7079 || ws->kind == TARGET_WAITKIND_VFORKED)
7080 {
e99b03dc 7081 if (event_pid == -1 || event_pid == thread_ptid.pid ())
cbb8991c
DB
7082 return 1;
7083 }
7084
7085 return 0;
7086}
7087
85ad3aaf
PA
7088/* Return the thread's pending status used to determine whether the
7089 thread is a fork parent stopped at a fork event. */
7090
7091static struct target_waitstatus *
7092thread_pending_fork_status (struct thread_info *thread)
7093{
7094 if (thread->suspend.waitstatus_pending_p)
7095 return &thread->suspend.waitstatus;
7096 else
7097 return &thread->pending_follow;
7098}
7099
7100/* Determine if THREAD is a pending fork parent thread. */
7101
7102static int
7103is_pending_fork_parent_thread (struct thread_info *thread)
7104{
7105 struct target_waitstatus *ws = thread_pending_fork_status (thread);
7106 int pid = -1;
7107
7108 return is_pending_fork_parent (ws, pid, thread->ptid);
7109}
7110
cbb8991c
DB
7111/* If CONTEXT contains any fork child threads that have not been
7112 reported yet, remove them from the CONTEXT list. If such a
7113 thread exists it is because we are stopped at a fork catchpoint
7114 and have not yet called follow_fork, which will set up the
7115 host-side data structures for the new process. */
7116
6b8edb51
PA
7117void
7118remote_target::remove_new_fork_children (threads_listing_context *context)
cbb8991c 7119{
cbb8991c
DB
7120 int pid = -1;
7121 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
7122
7123 /* For any threads stopped at a fork event, remove the corresponding
7124 fork child threads from the CONTEXT list. */
5b6d1e4f 7125 for (thread_info *thread : all_non_exited_threads (this))
cbb8991c 7126 {
85ad3aaf 7127 struct target_waitstatus *ws = thread_pending_fork_status (thread);
cbb8991c
DB
7128
7129 if (is_pending_fork_parent (ws, pid, thread->ptid))
21fe1c75 7130 context->remove_thread (ws->value.related_pid);
cbb8991c
DB
7131 }
7132
7133 /* Check for any pending fork events (not reported or processed yet)
7134 in process PID and remove those fork child threads from the
7135 CONTEXT list as well. */
7136 remote_notif_get_pending_events (notif);
953edf2b
TT
7137 for (auto &event : get_remote_state ()->stop_reply_queue)
7138 if (event->ws.kind == TARGET_WAITKIND_FORKED
7139 || event->ws.kind == TARGET_WAITKIND_VFORKED
7140 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
7141 context->remove_thread (event->ws.value.related_pid);
85ad3aaf
PA
7142}
7143
7144/* Check whether any event pending in the vStopped queue would prevent
7145 a global or process wildcard vCont action. Clear
7146 *may_global_wildcard if we can't do a global wildcard (vCont;c),
7147 and clear the event inferior's may_wildcard_vcont flag if we can't
7148 do a process-wide wildcard resume (vCont;c:pPID.-1). */
7149
6b8edb51
PA
7150void
7151remote_target::check_pending_events_prevent_wildcard_vcont
7152 (int *may_global_wildcard)
85ad3aaf
PA
7153{
7154 struct notif_client *notif = &notif_client_stop;
7155
7156 remote_notif_get_pending_events (notif);
953edf2b
TT
7157 for (auto &event : get_remote_state ()->stop_reply_queue)
7158 {
7159 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
7160 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
7161 continue;
85ad3aaf 7162
953edf2b
TT
7163 if (event->ws.kind == TARGET_WAITKIND_FORKED
7164 || event->ws.kind == TARGET_WAITKIND_VFORKED)
7165 *may_global_wildcard = 0;
722247f1 7166
5b6d1e4f 7167 struct inferior *inf = find_inferior_ptid (this, event->ptid);
722247f1 7168
953edf2b
TT
7169 /* This may be the first time we heard about this process.
7170 Regardless, we must not do a global wildcard resume, otherwise
7171 we'd resume this process too. */
7172 *may_global_wildcard = 0;
7173 if (inf != NULL)
7174 get_remote_inferior (inf)->may_wildcard_vcont = false;
722247f1 7175 }
722247f1
YQ
7176}
7177
f48ff2a7 7178/* Discard all pending stop replies of inferior INF. */
c906108c 7179
6b8edb51
PA
7180void
7181remote_target::discard_pending_stop_replies (struct inferior *inf)
c906108c 7182{
f48ff2a7
YQ
7183 struct stop_reply *reply;
7184 struct remote_state *rs = get_remote_state ();
7185 struct remote_notif_state *rns = rs->notif_state;
7186
7187 /* This function can be notified when an inferior exists. When the
7188 target is not remote, the notification state is NULL. */
7189 if (rs->remote_desc == NULL)
7190 return;
7191
7192 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 7193
74531fed 7194 /* Discard the in-flight notification. */
e99b03dc 7195 if (reply != NULL && reply->ptid.pid () == inf->pid)
74531fed 7196 {
b0083dd7
PA
7197 /* Leave the notification pending, since the server expects that
7198 we acknowledge it with vStopped. But clear its contents, so
7199 that later on when we acknowledge it, we also discard it. */
7200 reply->ws.kind = TARGET_WAITKIND_IGNORE;
7201
7202 if (remote_debug)
7203 fprintf_unfiltered (gdb_stdlog,
7204 "discarded in-flight notification\n");
74531fed 7205 }
c906108c 7206
74531fed
PA
7207 /* Discard the stop replies we have already pulled with
7208 vStopped. */
953edf2b
TT
7209 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7210 rs->stop_reply_queue.end (),
7211 [=] (const stop_reply_up &event)
7212 {
7213 return event->ptid.pid () == inf->pid;
7214 });
7215 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
bcc75809
YQ
7216}
7217
7218/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7 7219
6b8edb51
PA
7220void
7221remote_target::discard_pending_stop_replies_in_queue ()
f48ff2a7 7222{
6b8edb51 7223 remote_state *rs = get_remote_state ();
f48ff2a7 7224
f48ff2a7
YQ
7225 /* Discard the stop replies we have already pulled with
7226 vStopped. */
953edf2b
TT
7227 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7228 rs->stop_reply_queue.end (),
7229 [=] (const stop_reply_up &event)
7230 {
7231 return event->rs == rs;
7232 });
7233 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
74531fed 7234}
43ff13b4 7235
722247f1
YQ
7236/* Remove the first reply in 'stop_reply_queue' which matches
7237 PTID. */
2e9f7625 7238
6b8edb51
PA
7239struct stop_reply *
7240remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 7241{
953edf2b 7242 remote_state *rs = get_remote_state ();
722247f1 7243
953edf2b
TT
7244 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7245 rs->stop_reply_queue.end (),
7246 [=] (const stop_reply_up &event)
7247 {
7248 return event->ptid.matches (ptid);
7249 });
7250 struct stop_reply *result;
7251 if (iter == rs->stop_reply_queue.end ())
7252 result = nullptr;
7253 else
7254 {
7255 result = iter->release ();
7256 rs->stop_reply_queue.erase (iter);
7257 }
722247f1 7258
722247f1
YQ
7259 if (notif_debug)
7260 fprintf_unfiltered (gdb_stdlog,
7261 "notif: discard queued event: 'Stop' in %s\n",
a068643d 7262 target_pid_to_str (ptid).c_str ());
a744cf53 7263
953edf2b 7264 return result;
74531fed 7265}
75c99385 7266
74531fed
PA
7267/* Look for a queued stop reply belonging to PTID. If one is found,
7268 remove it from the queue, and return it. Returns NULL if none is
7269 found. If there are still queued events left to process, tell the
7270 event loop to get back to target_wait soon. */
e24a49d8 7271
6b8edb51
PA
7272struct stop_reply *
7273remote_target::queued_stop_reply (ptid_t ptid)
74531fed 7274{
953edf2b 7275 remote_state *rs = get_remote_state ();
722247f1 7276 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 7277
953edf2b 7278 if (!rs->stop_reply_queue.empty ())
6b8edb51 7279 {
6b8edb51
PA
7280 /* There's still at least an event left. */
7281 mark_async_event_handler (rs->remote_async_inferior_event_token);
7282 }
74531fed 7283
722247f1 7284 return r;
74531fed
PA
7285}
7286
7287/* Push a fully parsed stop reply in the stop reply queue. Since we
7288 know that we now have at least one queued event left to pass to the
7289 core side, tell the event loop to get back to target_wait soon. */
7290
6b8edb51
PA
7291void
7292remote_target::push_stop_reply (struct stop_reply *new_event)
74531fed 7293{
6b8edb51 7294 remote_state *rs = get_remote_state ();
953edf2b 7295 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
74531fed 7296
722247f1
YQ
7297 if (notif_debug)
7298 fprintf_unfiltered (gdb_stdlog,
7299 "notif: push 'Stop' %s to queue %d\n",
a068643d 7300 target_pid_to_str (new_event->ptid).c_str (),
953edf2b 7301 int (rs->stop_reply_queue.size ()));
74531fed 7302
6b8edb51 7303 mark_async_event_handler (rs->remote_async_inferior_event_token);
74531fed
PA
7304}
7305
7306/* Returns true if we have a stop reply for PTID. */
7307
6b8edb51
PA
7308int
7309remote_target::peek_stop_reply (ptid_t ptid)
74531fed 7310{
6b8edb51 7311 remote_state *rs = get_remote_state ();
953edf2b
TT
7312 for (auto &event : rs->stop_reply_queue)
7313 if (ptid == event->ptid
7314 && event->ws.kind == TARGET_WAITKIND_STOPPED)
7315 return 1;
7316 return 0;
74531fed
PA
7317}
7318
26d56a93
SL
7319/* Helper for remote_parse_stop_reply. Return nonzero if the substring
7320 starting with P and ending with PEND matches PREFIX. */
7321
7322static int
7323strprefix (const char *p, const char *pend, const char *prefix)
7324{
7325 for ( ; p < pend; p++, prefix++)
7326 if (*p != *prefix)
7327 return 0;
7328 return *prefix == '\0';
7329}
7330
74531fed
PA
7331/* Parse the stop reply in BUF. Either the function succeeds, and the
7332 result is stored in EVENT, or throws an error. */
7333
6b8edb51 7334void
bb277751 7335remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
74531fed 7336{
5cd63fda 7337 remote_arch_state *rsa = NULL;
74531fed 7338 ULONGEST addr;
256642e8 7339 const char *p;
94585166 7340 int skipregs = 0;
74531fed
PA
7341
7342 event->ptid = null_ptid;
bcc75809 7343 event->rs = get_remote_state ();
74531fed
PA
7344 event->ws.kind = TARGET_WAITKIND_IGNORE;
7345 event->ws.value.integer = 0;
f7e6eed5 7346 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
32603266 7347 event->regcache.clear ();
dc146f7c 7348 event->core = -1;
74531fed
PA
7349
7350 switch (buf[0])
7351 {
7352 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
7353 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7354 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7355 ss = signal number
7356 n... = register number
7357 r... = register contents
7358 */
7359
7360 p = &buf[3]; /* after Txx */
7361 while (*p)
7362 {
256642e8 7363 const char *p1;
cea39f65 7364 int fieldsize;
43ff13b4 7365
1f10ba14
PA
7366 p1 = strchr (p, ':');
7367 if (p1 == NULL)
7368 error (_("Malformed packet(a) (missing colon): %s\n\
7369Packet: '%s'\n"),
7370 p, buf);
7371 if (p == p1)
7372 error (_("Malformed packet(a) (missing register number): %s\n\
7373Packet: '%s'\n"),
7374 p, buf);
3c3bea1c 7375
1f10ba14
PA
7376 /* Some "registers" are actually extended stop information.
7377 Note if you're adding a new entry here: GDB 7.9 and
7378 earlier assume that all register "numbers" that start
7379 with an hex digit are real register numbers. Make sure
7380 the server only sends such a packet if it knows the
7381 client understands it. */
c8e38a49 7382
26d56a93 7383 if (strprefix (p, p1, "thread"))
1f10ba14 7384 event->ptid = read_ptid (++p1, &p);
82075af2
JS
7385 else if (strprefix (p, p1, "syscall_entry"))
7386 {
7387 ULONGEST sysno;
7388
7389 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7390 p = unpack_varlen_hex (++p1, &sysno);
7391 event->ws.value.syscall_number = (int) sysno;
7392 }
7393 else if (strprefix (p, p1, "syscall_return"))
7394 {
7395 ULONGEST sysno;
7396
7397 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7398 p = unpack_varlen_hex (++p1, &sysno);
7399 event->ws.value.syscall_number = (int) sysno;
7400 }
26d56a93
SL
7401 else if (strprefix (p, p1, "watch")
7402 || strprefix (p, p1, "rwatch")
7403 || strprefix (p, p1, "awatch"))
cea39f65 7404 {
f7e6eed5 7405 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
7406 p = unpack_varlen_hex (++p1, &addr);
7407 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 7408 }
26d56a93 7409 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
7410 {
7411 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7412
7413 /* Make sure the stub doesn't forget to indicate support
7414 with qSupported. */
7415 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7416 error (_("Unexpected swbreak stop reason"));
7417
7418 /* The value part is documented as "must be empty",
7419 though we ignore it, in case we ever decide to make
7420 use of it in a backward compatible way. */
8424cc97 7421 p = strchrnul (p1 + 1, ';');
f7e6eed5 7422 }
26d56a93 7423 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
7424 {
7425 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7426
7427 /* Make sure the stub doesn't forget to indicate support
7428 with qSupported. */
7429 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7430 error (_("Unexpected hwbreak stop reason"));
7431
7432 /* See above. */
8424cc97 7433 p = strchrnul (p1 + 1, ';');
f7e6eed5 7434 }
26d56a93 7435 else if (strprefix (p, p1, "library"))
cea39f65 7436 {
1f10ba14 7437 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 7438 p = strchrnul (p1 + 1, ';');
1f10ba14 7439 }
26d56a93 7440 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
7441 {
7442 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7443 /* p1 will indicate "begin" or "end", but it makes
7444 no difference for now, so ignore it. */
8424cc97 7445 p = strchrnul (p1 + 1, ';');
1f10ba14 7446 }
26d56a93 7447 else if (strprefix (p, p1, "core"))
1f10ba14
PA
7448 {
7449 ULONGEST c;
a744cf53 7450
1f10ba14
PA
7451 p = unpack_varlen_hex (++p1, &c);
7452 event->core = c;
cea39f65 7453 }
26d56a93 7454 else if (strprefix (p, p1, "fork"))
de0d863e
DB
7455 {
7456 event->ws.value.related_pid = read_ptid (++p1, &p);
7457 event->ws.kind = TARGET_WAITKIND_FORKED;
7458 }
26d56a93 7459 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
7460 {
7461 event->ws.value.related_pid = read_ptid (++p1, &p);
7462 event->ws.kind = TARGET_WAITKIND_VFORKED;
7463 }
26d56a93 7464 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
7465 {
7466 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 7467 p = strchrnul (p1 + 1, ';');
c269dbdb 7468 }
6ab24463 7469 else if (strprefix (p, p1, "exec"))
94585166
DB
7470 {
7471 ULONGEST ignored;
94585166
DB
7472 int pathlen;
7473
7474 /* Determine the length of the execd pathname. */
7475 p = unpack_varlen_hex (++p1, &ignored);
7476 pathlen = (p - p1) / 2;
7477
7478 /* Save the pathname for event reporting and for
7479 the next run command. */
c6321f19
TT
7480 gdb::unique_xmalloc_ptr<char[]> pathname
7481 ((char *) xmalloc (pathlen + 1));
7482 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
94585166
DB
7483 pathname[pathlen] = '\0';
7484
7485 /* This is freed during event handling. */
c6321f19 7486 event->ws.value.execd_pathname = pathname.release ();
94585166
DB
7487 event->ws.kind = TARGET_WAITKIND_EXECD;
7488
7489 /* Skip the registers included in this packet, since
7490 they may be for an architecture different from the
7491 one used by the original program. */
7492 skipregs = 1;
7493 }
65706a29
PA
7494 else if (strprefix (p, p1, "create"))
7495 {
7496 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 7497 p = strchrnul (p1 + 1, ';');
65706a29 7498 }
cea39f65
MS
7499 else
7500 {
1f10ba14 7501 ULONGEST pnum;
256642e8 7502 const char *p_temp;
1f10ba14 7503
94585166
DB
7504 if (skipregs)
7505 {
8424cc97 7506 p = strchrnul (p1 + 1, ';');
94585166
DB
7507 p++;
7508 continue;
7509 }
7510
1f10ba14
PA
7511 /* Maybe a real ``P'' register number. */
7512 p_temp = unpack_varlen_hex (p, &pnum);
7513 /* If the first invalid character is the colon, we got a
7514 register number. Otherwise, it's an unknown stop
7515 reason. */
7516 if (p_temp == p1)
7517 {
5cd63fda
PA
7518 /* If we haven't parsed the event's thread yet, find
7519 it now, in order to find the architecture of the
7520 reported expedited registers. */
7521 if (event->ptid == null_ptid)
7522 {
24ed6739
AB
7523 /* If there is no thread-id information then leave
7524 the event->ptid as null_ptid. Later in
7525 process_stop_reply we will pick a suitable
7526 thread. */
5cd63fda
PA
7527 const char *thr = strstr (p1 + 1, ";thread:");
7528 if (thr != NULL)
7529 event->ptid = read_ptid (thr + strlen (";thread:"),
7530 NULL);
5cd63fda
PA
7531 }
7532
7533 if (rsa == NULL)
7534 {
5b6d1e4f
PA
7535 inferior *inf
7536 = (event->ptid == null_ptid
7537 ? NULL
7538 : find_inferior_ptid (this, event->ptid));
5cd63fda
PA
7539 /* If this is the first time we learn anything
7540 about this process, skip the registers
7541 included in this packet, since we don't yet
7542 know which architecture to use to parse them.
7543 We'll determine the architecture later when
7544 we process the stop reply and retrieve the
7545 target description, via
7546 remote_notice_new_inferior ->
7547 post_create_inferior. */
7548 if (inf == NULL)
7549 {
7550 p = strchrnul (p1 + 1, ';');
7551 p++;
7552 continue;
7553 }
7554
7555 event->arch = inf->gdbarch;
9d6eea31 7556 rsa = event->rs->get_remote_arch_state (event->arch);
5cd63fda
PA
7557 }
7558
7559 packet_reg *reg
7560 = packet_reg_from_pnum (event->arch, rsa, pnum);
1f10ba14 7561 cached_reg_t cached_reg;
43ff13b4 7562
1f10ba14
PA
7563 if (reg == NULL)
7564 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 7565Packet: '%s'\n"),
1f10ba14 7566 hex_string (pnum), p, buf);
c8e38a49 7567
1f10ba14 7568 cached_reg.num = reg->regnum;
d1dff226 7569 cached_reg.data = (gdb_byte *)
5cd63fda 7570 xmalloc (register_size (event->arch, reg->regnum));
4100683b 7571
1f10ba14
PA
7572 p = p1 + 1;
7573 fieldsize = hex2bin (p, cached_reg.data,
5cd63fda 7574 register_size (event->arch, reg->regnum));
1f10ba14 7575 p += 2 * fieldsize;
5cd63fda 7576 if (fieldsize < register_size (event->arch, reg->regnum))
1f10ba14 7577 warning (_("Remote reply is too short: %s"), buf);
74531fed 7578
32603266 7579 event->regcache.push_back (cached_reg);
1f10ba14
PA
7580 }
7581 else
7582 {
7583 /* Not a number. Silently skip unknown optional
7584 info. */
8424cc97 7585 p = strchrnul (p1 + 1, ';');
1f10ba14 7586 }
cea39f65 7587 }
c8e38a49 7588
cea39f65
MS
7589 if (*p != ';')
7590 error (_("Remote register badly formatted: %s\nhere: %s"),
7591 buf, p);
7592 ++p;
7593 }
5b5596ff
PA
7594
7595 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7596 break;
7597
c8e38a49
PA
7598 /* fall through */
7599 case 'S': /* Old style status, just signal only. */
3a09da41
PA
7600 {
7601 int sig;
7602
7603 event->ws.kind = TARGET_WAITKIND_STOPPED;
7604 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7605 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7606 event->ws.value.sig = (enum gdb_signal) sig;
7607 else
7608 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7609 }
c8e38a49 7610 break;
65706a29
PA
7611 case 'w': /* Thread exited. */
7612 {
65706a29
PA
7613 ULONGEST value;
7614
7615 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7616 p = unpack_varlen_hex (&buf[1], &value);
7617 event->ws.value.integer = value;
7618 if (*p != ';')
7619 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 7620 event->ptid = read_ptid (++p, NULL);
65706a29
PA
7621 break;
7622 }
c8e38a49
PA
7623 case 'W': /* Target exited. */
7624 case 'X':
7625 {
c8e38a49 7626 ULONGEST value;
82f73884 7627
c8e38a49
PA
7628 /* GDB used to accept only 2 hex chars here. Stubs should
7629 only send more if they detect GDB supports multi-process
7630 support. */
7631 p = unpack_varlen_hex (&buf[1], &value);
82f73884 7632
c8e38a49
PA
7633 if (buf[0] == 'W')
7634 {
7635 /* The remote process exited. */
74531fed
PA
7636 event->ws.kind = TARGET_WAITKIND_EXITED;
7637 event->ws.value.integer = value;
c8e38a49
PA
7638 }
7639 else
7640 {
7641 /* The remote process exited with a signal. */
74531fed 7642 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
7643 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7644 event->ws.value.sig = (enum gdb_signal) value;
7645 else
7646 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 7647 }
82f73884 7648
e7af6c70
TBA
7649 /* If no process is specified, return null_ptid, and let the
7650 caller figure out the right process to use. */
7651 int pid = 0;
c8e38a49
PA
7652 if (*p == '\0')
7653 ;
7654 else if (*p == ';')
7655 {
7656 p++;
7657
0b24eb2d 7658 if (*p == '\0')
82f73884 7659 ;
61012eef 7660 else if (startswith (p, "process:"))
82f73884 7661 {
c8e38a49 7662 ULONGEST upid;
a744cf53 7663
c8e38a49
PA
7664 p += sizeof ("process:") - 1;
7665 unpack_varlen_hex (p, &upid);
7666 pid = upid;
82f73884
PA
7667 }
7668 else
7669 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 7670 }
c8e38a49
PA
7671 else
7672 error (_("unknown stop reply packet: %s"), buf);
f2907e49 7673 event->ptid = ptid_t (pid);
74531fed
PA
7674 }
7675 break;
f2faf941
PA
7676 case 'N':
7677 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7678 event->ptid = minus_one_ptid;
7679 break;
74531fed 7680 }
74531fed
PA
7681}
7682
722247f1
YQ
7683/* When the stub wants to tell GDB about a new notification reply, it
7684 sends a notification (%Stop, for example). Those can come it at
7685 any time, hence, we have to make sure that any pending
7686 putpkt/getpkt sequence we're making is finished, before querying
7687 the stub for more events with the corresponding ack command
7688 (vStopped, for example). E.g., if we started a vStopped sequence
7689 immediately upon receiving the notification, something like this
7690 could happen:
74531fed
PA
7691
7692 1.1) --> Hg 1
7693 1.2) <-- OK
7694 1.3) --> g
7695 1.4) <-- %Stop
7696 1.5) --> vStopped
7697 1.6) <-- (registers reply to step #1.3)
7698
7699 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7700 query.
7701
796cb314 7702 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
7703 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7704 doing whatever we were doing:
7705
7706 2.1) --> Hg 1
7707 2.2) <-- OK
7708 2.3) --> g
7709 2.4) <-- %Stop
7710 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7711 2.5) <-- (registers reply to step #2.3)
7712
85102364 7713 Eventually after step #2.5, we return to the event loop, which
74531fed
PA
7714 notices there's an event on the
7715 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7716 associated callback --- the function below. At this point, we're
7717 always safe to start a vStopped sequence. :
7718
7719 2.6) --> vStopped
7720 2.7) <-- T05 thread:2
7721 2.8) --> vStopped
7722 2.9) --> OK
7723*/
7724
722247f1 7725void
6b8edb51 7726remote_target::remote_notif_get_pending_events (notif_client *nc)
74531fed
PA
7727{
7728 struct remote_state *rs = get_remote_state ();
74531fed 7729
f48ff2a7 7730 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 7731 {
722247f1
YQ
7732 if (notif_debug)
7733 fprintf_unfiltered (gdb_stdlog,
7734 "notif: process: '%s' ack pending event\n",
7735 nc->name);
74531fed 7736
722247f1 7737 /* acknowledge */
8d64371b
TT
7738 nc->ack (this, nc, rs->buf.data (),
7739 rs->notif_state->pending_event[nc->id]);
f48ff2a7 7740 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
7741
7742 while (1)
7743 {
8d64371b
TT
7744 getpkt (&rs->buf, 0);
7745 if (strcmp (rs->buf.data (), "OK") == 0)
74531fed
PA
7746 break;
7747 else
8d64371b 7748 remote_notif_ack (this, nc, rs->buf.data ());
74531fed
PA
7749 }
7750 }
722247f1
YQ
7751 else
7752 {
7753 if (notif_debug)
7754 fprintf_unfiltered (gdb_stdlog,
7755 "notif: process: '%s' no pending reply\n",
7756 nc->name);
7757 }
74531fed
PA
7758}
7759
6b8edb51
PA
7760/* Wrapper around remote_target::remote_notif_get_pending_events to
7761 avoid having to export the whole remote_target class. */
7762
7763void
7764remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7765{
7766 remote->remote_notif_get_pending_events (nc);
7767}
7768
8f66807b
AB
7769/* Called from process_stop_reply when the stop packet we are responding
7770 to didn't include a process-id or thread-id. STATUS is the stop event
7771 we are responding to.
7772
7773 It is the task of this function to select a suitable thread (or process)
7774 and return its ptid, this is the thread (or process) we will assume the
7775 stop event came from.
7776
7777 In some cases there isn't really any choice about which thread (or
7778 process) is selected, a basic remote with a single process containing a
7779 single thread might choose not to send any process-id or thread-id in
7780 its stop packets, this function will select and return the one and only
7781 thread.
7782
7783 However, if a target supports multiple threads (or processes) and still
7784 doesn't include a thread-id (or process-id) in its stop packet then
7785 first, this is a badly behaving target, and second, we're going to have
7786 to select a thread (or process) at random and use that. This function
7787 will print a warning to the user if it detects that there is the
7788 possibility that GDB is guessing which thread (or process) to
7789 report.
7790
7791 Note that this is called before GDB fetches the updated thread list from the
7792 target. So it's possible for the stop reply to be ambiguous and for GDB to
7793 not realize it. For example, if there's initially one thread, the target
7794 spawns a second thread, and then sends a stop reply without an id that
7795 concerns the first thread. GDB will assume the stop reply is about the
7796 first thread - the only thread it knows about - without printing a warning.
7797 Anyway, if the remote meant for the stop reply to be about the second thread,
7798 then it would be really broken, because GDB doesn't know about that thread
7799 yet. */
74531fed 7800
6b8edb51 7801ptid_t
8f66807b
AB
7802remote_target::select_thread_for_ambiguous_stop_reply
7803 (const struct target_waitstatus *status)
74531fed 7804{
8f66807b
AB
7805 /* Some stop events apply to all threads in an inferior, while others
7806 only apply to a single thread. */
7807 bool process_wide_stop
7808 = (status->kind == TARGET_WAITKIND_EXITED
7809 || status->kind == TARGET_WAITKIND_SIGNALLED);
74531fed 7810
8f66807b
AB
7811 thread_info *first_resumed_thread = nullptr;
7812 bool ambiguous = false;
74531fed 7813
8f66807b
AB
7814 /* Consider all non-exited threads of the target, find the first resumed
7815 one. */
7816 for (thread_info *thr : all_non_exited_threads (this))
24ed6739 7817 {
8f66807b 7818 remote_thread_info *remote_thr = get_remote_thread_info (thr);
cada5fc9 7819
a6c11cbb 7820 if (remote_thr->get_resume_state () != resume_state::RESUMED)
8f66807b 7821 continue;
24ed6739 7822
8f66807b
AB
7823 if (first_resumed_thread == nullptr)
7824 first_resumed_thread = thr;
7825 else if (!process_wide_stop
7826 || first_resumed_thread->ptid.pid () != thr->ptid.pid ())
7827 ambiguous = true;
7828 }
7829
7830 gdb_assert (first_resumed_thread != nullptr);
cada5fc9 7831
8f66807b
AB
7832 /* Warn if the remote target is sending ambiguous stop replies. */
7833 if (ambiguous)
7834 {
7835 static bool warned = false;
7836
7837 if (!warned)
7838 {
7839 /* If you are seeing this warning then the remote target has
7840 stopped without specifying a thread-id, but the target
7841 does have multiple threads (or inferiors), and so GDB is
7842 having to guess which thread stopped.
7843
7844 Examples of what might cause this are the target sending
7845 and 'S' stop packet, or a 'T' stop packet and not
7846 including a thread-id.
7847
7848 Additionally, the target might send a 'W' or 'X packet
7849 without including a process-id, when the target has
7850 multiple running inferiors. */
7851 if (process_wide_stop)
7852 warning (_("multi-inferior target stopped without "
7853 "sending a process-id, using first "
7854 "non-exited inferior"));
cada5fc9 7855 else
8f66807b
AB
7856 warning (_("multi-threaded target stopped without "
7857 "sending a thread-id, using first "
7858 "non-exited thread"));
7859 warned = true;
24ed6739 7860 }
24ed6739 7861 }
74531fed 7862
8f66807b
AB
7863 /* If this is a stop for all threads then don't use a particular threads
7864 ptid, instead create a new ptid where only the pid field is set. */
7865 if (process_wide_stop)
7866 return ptid_t (first_resumed_thread->ptid.pid ());
7867 else
7868 return first_resumed_thread->ptid;
7869}
7870
7871/* Called when it is decided that STOP_REPLY holds the info of the
7872 event that is to be returned to the core. This function always
7873 destroys STOP_REPLY. */
7874
7875ptid_t
7876remote_target::process_stop_reply (struct stop_reply *stop_reply,
7877 struct target_waitstatus *status)
7878{
7879 *status = stop_reply->ws;
7880 ptid_t ptid = stop_reply->ptid;
7881
7882 /* If no thread/process was reported by the stub then select a suitable
7883 thread/process. */
7884 if (ptid == null_ptid)
7885 ptid = select_thread_for_ambiguous_stop_reply (status);
7886 gdb_assert (ptid != null_ptid);
7887
5f3563ea 7888 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
7889 && status->kind != TARGET_WAITKIND_SIGNALLED
7890 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 7891 {
5f3563ea 7892 /* Expedited registers. */
32603266 7893 if (!stop_reply->regcache.empty ())
5f3563ea 7894 {
217f1f79 7895 struct regcache *regcache
5b6d1e4f 7896 = get_thread_arch_regcache (this, ptid, stop_reply->arch);
5f3563ea 7897
32603266
TT
7898 for (cached_reg_t &reg : stop_reply->regcache)
7899 {
7900 regcache->raw_supply (reg.num, reg.data);
7901 xfree (reg.data);
7902 }
d1dff226 7903
32603266 7904 stop_reply->regcache.clear ();
5f3563ea 7905 }
74531fed 7906
1941c569 7907 remote_notice_new_inferior (ptid, 0);
5b6d1e4f 7908 remote_thread_info *remote_thr = get_remote_thread_info (this, ptid);
799a2abe
PA
7909 remote_thr->core = stop_reply->core;
7910 remote_thr->stop_reason = stop_reply->stop_reason;
7911 remote_thr->watch_data_address = stop_reply->watch_data_address;
c9d22089
SM
7912
7913 if (target_is_non_stop_p ())
7914 {
7915 /* If the target works in non-stop mode, a stop-reply indicates that
7916 only this thread stopped. */
7917 remote_thr->set_not_resumed ();
7918 }
7919 else
7920 {
7921 /* If the target works in all-stop mode, a stop-reply indicates that
7922 all the target's threads stopped. */
7923 for (thread_info *tp : all_non_exited_threads (this))
7924 get_remote_thread_info (tp)->set_not_resumed ();
7925 }
74531fed
PA
7926 }
7927
32603266 7928 delete stop_reply;
74531fed
PA
7929 return ptid;
7930}
7931
7932/* The non-stop mode version of target_wait. */
7933
6b8edb51 7934ptid_t
b60cea74
TT
7935remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status,
7936 target_wait_flags options)
74531fed
PA
7937{
7938 struct remote_state *rs = get_remote_state ();
74531fed
PA
7939 struct stop_reply *stop_reply;
7940 int ret;
fee9eda9 7941 int is_notif = 0;
74531fed
PA
7942
7943 /* If in non-stop mode, get out of getpkt even if a
7944 notification is received. */
7945
8d64371b 7946 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
74531fed
PA
7947 while (1)
7948 {
fee9eda9 7949 if (ret != -1 && !is_notif)
74531fed
PA
7950 switch (rs->buf[0])
7951 {
7952 case 'E': /* Error of some sort. */
7953 /* We're out of sync with the target now. Did it continue
7954 or not? We can't tell which thread it was in non-stop,
7955 so just ignore this. */
8d64371b 7956 warning (_("Remote failure reply: %s"), rs->buf.data ());
74531fed
PA
7957 break;
7958 case 'O': /* Console output. */
8d64371b 7959 remote_console_output (&rs->buf[1]);
74531fed
PA
7960 break;
7961 default:
8d64371b 7962 warning (_("Invalid remote reply: %s"), rs->buf.data ());
74531fed
PA
7963 break;
7964 }
7965
7966 /* Acknowledge a pending stop reply that may have arrived in the
7967 mean time. */
f48ff2a7 7968 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 7969 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
7970
7971 /* If indeed we noticed a stop reply, we're done. */
7972 stop_reply = queued_stop_reply (ptid);
7973 if (stop_reply != NULL)
7974 return process_stop_reply (stop_reply, status);
7975
47608cb1 7976 /* Still no event. If we're just polling for an event, then
74531fed 7977 return to the event loop. */
47608cb1 7978 if (options & TARGET_WNOHANG)
74531fed
PA
7979 {
7980 status->kind = TARGET_WAITKIND_IGNORE;
7981 return minus_one_ptid;
7982 }
7983
47608cb1 7984 /* Otherwise do a blocking wait. */
8d64371b 7985 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
74531fed
PA
7986 }
7987}
7988
31ba933e
PA
7989/* Return the first resumed thread. */
7990
7991static ptid_t
5b6d1e4f 7992first_remote_resumed_thread (remote_target *target)
31ba933e 7993{
5b6d1e4f 7994 for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid))
31ba933e
PA
7995 if (tp->resumed)
7996 return tp->ptid;
7997 return null_ptid;
7998}
7999
74531fed
PA
8000/* Wait until the remote machine stops, then return, storing status in
8001 STATUS just as `wait' would. */
8002
6b8edb51 8003ptid_t
b60cea74
TT
8004remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
8005 target_wait_flags options)
74531fed
PA
8006{
8007 struct remote_state *rs = get_remote_state ();
74531fed 8008 ptid_t event_ptid = null_ptid;
cea39f65 8009 char *buf;
74531fed
PA
8010 struct stop_reply *stop_reply;
8011
47608cb1
PA
8012 again:
8013
74531fed
PA
8014 status->kind = TARGET_WAITKIND_IGNORE;
8015 status->value.integer = 0;
8016
8017 stop_reply = queued_stop_reply (ptid);
8018 if (stop_reply != NULL)
8019 return process_stop_reply (stop_reply, status);
8020
8021 if (rs->cached_wait_status)
8022 /* Use the cached wait status, but only once. */
8023 rs->cached_wait_status = 0;
8024 else
8025 {
8026 int ret;
722247f1 8027 int is_notif;
567420d1 8028 int forever = ((options & TARGET_WNOHANG) == 0
6b8edb51 8029 && rs->wait_forever_enabled_p);
567420d1
PA
8030
8031 if (!rs->waiting_for_stop_reply)
8032 {
8033 status->kind = TARGET_WAITKIND_NO_RESUMED;
8034 return minus_one_ptid;
8035 }
74531fed 8036
74531fed
PA
8037 /* FIXME: cagney/1999-09-27: If we're in async mode we should
8038 _never_ wait for ever -> test on target_is_async_p().
8039 However, before we do that we need to ensure that the caller
8040 knows how to take the target into/out of async mode. */
8d64371b 8041 ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
722247f1
YQ
8042
8043 /* GDB gets a notification. Return to core as this event is
8044 not interesting. */
8045 if (ret != -1 && is_notif)
8046 return minus_one_ptid;
567420d1
PA
8047
8048 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
8049 return minus_one_ptid;
74531fed
PA
8050 }
8051
8d64371b 8052 buf = rs->buf.data ();
74531fed 8053
3a29589a
DJ
8054 /* Assume that the target has acknowledged Ctrl-C unless we receive
8055 an 'F' or 'O' packet. */
8056 if (buf[0] != 'F' && buf[0] != 'O')
8057 rs->ctrlc_pending_p = 0;
8058
74531fed
PA
8059 switch (buf[0])
8060 {
8061 case 'E': /* Error of some sort. */
8062 /* We're out of sync with the target now. Did it continue or
8063 not? Not is more likely, so report a stop. */
29090fb6
LM
8064 rs->waiting_for_stop_reply = 0;
8065
74531fed
PA
8066 warning (_("Remote failure reply: %s"), buf);
8067 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 8068 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
8069 break;
8070 case 'F': /* File-I/O request. */
e42e5352
YQ
8071 /* GDB may access the inferior memory while handling the File-I/O
8072 request, but we don't want GDB accessing memory while waiting
8073 for a stop reply. See the comments in putpkt_binary. Set
8074 waiting_for_stop_reply to 0 temporarily. */
8075 rs->waiting_for_stop_reply = 0;
6b8edb51 8076 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
3a29589a 8077 rs->ctrlc_pending_p = 0;
e42e5352
YQ
8078 /* GDB handled the File-I/O request, and the target is running
8079 again. Keep waiting for events. */
8080 rs->waiting_for_stop_reply = 1;
74531fed 8081 break;
f2faf941 8082 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 8083 {
29090fb6
LM
8084 /* There is a stop reply to handle. */
8085 rs->waiting_for_stop_reply = 0;
8086
8087 stop_reply
6b8edb51
PA
8088 = (struct stop_reply *) remote_notif_parse (this,
8089 &notif_client_stop,
8d64371b 8090 rs->buf.data ());
74531fed 8091
74531fed 8092 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
8093 break;
8094 }
8095 case 'O': /* Console output. */
8096 remote_console_output (buf + 1);
c8e38a49
PA
8097 break;
8098 case '\0':
b73be471 8099 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
8100 {
8101 /* Zero length reply means that we tried 'S' or 'C' and the
8102 remote system doesn't support it. */
223ffa71 8103 target_terminal::ours_for_output ();
c8e38a49
PA
8104 printf_filtered
8105 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
8106 gdb_signal_to_name (rs->last_sent_signal));
8107 rs->last_sent_signal = GDB_SIGNAL_0;
223ffa71 8108 target_terminal::inferior ();
c8e38a49 8109
f5c4fcd9
TT
8110 strcpy (buf, rs->last_sent_step ? "s" : "c");
8111 putpkt (buf);
c8e38a49 8112 break;
43ff13b4 8113 }
86a73007 8114 /* fallthrough */
c8e38a49
PA
8115 default:
8116 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 8117 break;
43ff13b4 8118 }
c8e38a49 8119
f2faf941
PA
8120 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
8121 return minus_one_ptid;
8122 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
8123 {
8124 /* Nothing interesting happened. If we're doing a non-blocking
8125 poll, we're done. Otherwise, go back to waiting. */
8126 if (options & TARGET_WNOHANG)
8127 return minus_one_ptid;
8128 else
8129 goto again;
8130 }
74531fed
PA
8131 else if (status->kind != TARGET_WAITKIND_EXITED
8132 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884 8133 {
d7e15655 8134 if (event_ptid != null_ptid)
47f8a51d 8135 record_currthread (rs, event_ptid);
82f73884 8136 else
5b6d1e4f 8137 event_ptid = first_remote_resumed_thread (this);
43ff13b4 8138 }
74531fed 8139 else
e7af6c70
TBA
8140 {
8141 /* A process exit. Invalidate our notion of current thread. */
8142 record_currthread (rs, minus_one_ptid);
8143 /* It's possible that the packet did not include a pid. */
8144 if (event_ptid == null_ptid)
5b6d1e4f 8145 event_ptid = first_remote_resumed_thread (this);
e7af6c70
TBA
8146 /* EVENT_PTID could still be NULL_PTID. Double-check. */
8147 if (event_ptid == null_ptid)
8148 event_ptid = magic_null_ptid;
8149 }
79d7f229 8150
82f73884 8151 return event_ptid;
43ff13b4
JM
8152}
8153
74531fed
PA
8154/* Wait until the remote machine stops, then return, storing status in
8155 STATUS just as `wait' would. */
8156
f6ac5f3d 8157ptid_t
b60cea74
TT
8158remote_target::wait (ptid_t ptid, struct target_waitstatus *status,
8159 target_wait_flags options)
c8e38a49 8160{
2189c312
SM
8161 REMOTE_SCOPED_DEBUG_ENTER_EXIT;
8162
baa8575b
SM
8163 remote_state *rs = get_remote_state ();
8164
8165 /* Start by clearing the flag that asks for our wait method to be called,
8166 we'll mark it again at the end if needed. */
8167 if (target_is_async_p ())
8168 clear_async_event_handler (rs->remote_async_inferior_event_token);
8169
c8e38a49
PA
8170 ptid_t event_ptid;
8171
6efcd9a8 8172 if (target_is_non_stop_p ())
6b8edb51 8173 event_ptid = wait_ns (ptid, status, options);
74531fed 8174 else
6b8edb51 8175 event_ptid = wait_as (ptid, status, options);
c8e38a49 8176
d9d41e78 8177 if (target_is_async_p ())
c8e38a49 8178 {
baa8575b
SM
8179 /* If there are events left in the queue, or unacknowledged
8180 notifications, then tell the event loop to call us again. */
8181 if (!rs->stop_reply_queue.empty ()
8182 || rs->notif_state->pending_event[notif_client_stop.id] != nullptr)
6b8edb51 8183 mark_async_event_handler (rs->remote_async_inferior_event_token);
c8e38a49 8184 }
c8e38a49
PA
8185
8186 return event_ptid;
8187}
8188
74ca34ce 8189/* Fetch a single register using a 'p' packet. */
c906108c 8190
6b8edb51
PA
8191int
8192remote_target::fetch_register_using_p (struct regcache *regcache,
8193 packet_reg *reg)
b96ec7ac 8194{
ac7936df 8195 struct gdbarch *gdbarch = regcache->arch ();
b96ec7ac 8196 struct remote_state *rs = get_remote_state ();
2e9f7625 8197 char *buf, *p;
9890e433 8198 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
b96ec7ac
AC
8199 int i;
8200
4082afcc 8201 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
8202 return 0;
8203
8204 if (reg->pnum == -1)
8205 return 0;
8206
8d64371b 8207 p = rs->buf.data ();
fcad0fa4 8208 *p++ = 'p';
74ca34ce 8209 p += hexnumstr (p, reg->pnum);
fcad0fa4 8210 *p++ = '\0';
1f4437a4 8211 putpkt (rs->buf);
8d64371b 8212 getpkt (&rs->buf, 0);
3f9a994c 8213
8d64371b 8214 buf = rs->buf.data ();
2e9f7625 8215
8d64371b 8216 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
74ca34ce
DJ
8217 {
8218 case PACKET_OK:
8219 break;
8220 case PACKET_UNKNOWN:
8221 return 0;
8222 case PACKET_ERROR:
27a9c0bf 8223 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
ac7936df 8224 gdbarch_register_name (regcache->arch (),
27a9c0bf
MS
8225 reg->regnum),
8226 buf);
74ca34ce 8227 }
3f9a994c
JB
8228
8229 /* If this register is unfetchable, tell the regcache. */
8230 if (buf[0] == 'x')
8480adf2 8231 {
73e1c03f 8232 regcache->raw_supply (reg->regnum, NULL);
8480adf2 8233 return 1;
b96ec7ac 8234 }
b96ec7ac 8235
3f9a994c
JB
8236 /* Otherwise, parse and supply the value. */
8237 p = buf;
8238 i = 0;
8239 while (p[0] != 0)
8240 {
8241 if (p[1] == 0)
74ca34ce 8242 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
8243
8244 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
8245 p += 2;
8246 }
73e1c03f 8247 regcache->raw_supply (reg->regnum, regp);
3f9a994c 8248 return 1;
b96ec7ac
AC
8249}
8250
74ca34ce
DJ
8251/* Fetch the registers included in the target's 'g' packet. */
8252
6b8edb51
PA
8253int
8254remote_target::send_g_packet ()
c906108c 8255{
d01949b6 8256 struct remote_state *rs = get_remote_state ();
cea39f65 8257 int buf_len;
c906108c 8258
8d64371b 8259 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
b75abf5b 8260 putpkt (rs->buf);
8d64371b 8261 getpkt (&rs->buf, 0);
b75abf5b
AK
8262 if (packet_check_result (rs->buf) == PACKET_ERROR)
8263 error (_("Could not read registers; remote failure reply '%s'"),
dda83cd7 8264 rs->buf.data ());
c906108c 8265
29709017
DJ
8266 /* We can get out of synch in various cases. If the first character
8267 in the buffer is not a hex character, assume that has happened
8268 and try to fetch another packet to read. */
8269 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
8270 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
8271 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
8272 && rs->buf[0] != 'x') /* New: unavailable register value. */
8273 {
2189c312 8274 remote_debug_printf ("Bad register packet; fetching a new packet");
8d64371b 8275 getpkt (&rs->buf, 0);
29709017
DJ
8276 }
8277
8d64371b 8278 buf_len = strlen (rs->buf.data ());
74ca34ce
DJ
8279
8280 /* Sanity check the received packet. */
8281 if (buf_len % 2 != 0)
8d64371b 8282 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
29709017
DJ
8283
8284 return buf_len / 2;
8285}
8286
6b8edb51
PA
8287void
8288remote_target::process_g_packet (struct regcache *regcache)
29709017 8289{
ac7936df 8290 struct gdbarch *gdbarch = regcache->arch ();
29709017 8291 struct remote_state *rs = get_remote_state ();
9d6eea31 8292 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
29709017
DJ
8293 int i, buf_len;
8294 char *p;
8295 char *regs;
8296
8d64371b 8297 buf_len = strlen (rs->buf.data ());
29709017
DJ
8298
8299 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce 8300 if (buf_len > 2 * rsa->sizeof_g_packet)
fc809827 8301 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8d64371b
TT
8302 "bytes): %s"),
8303 rsa->sizeof_g_packet, buf_len / 2,
8304 rs->buf.data ());
74ca34ce
DJ
8305
8306 /* Save the size of the packet sent to us by the target. It is used
8307 as a heuristic when determining the max size of packets that the
8308 target can safely receive. */
8309 if (rsa->actual_register_packet_size == 0)
8310 rsa->actual_register_packet_size = buf_len;
8311
8312 /* If this is smaller than we guessed the 'g' packet would be,
8313 update our records. A 'g' reply that doesn't include a register's
8314 value implies either that the register is not available, or that
8315 the 'p' packet must be used. */
8316 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 8317 {
9dc193c3 8318 long sizeof_g_packet = buf_len / 2;
74ca34ce 8319
4a22f64d 8320 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 8321 {
9dc193c3
LF
8322 long offset = rsa->regs[i].offset;
8323 long reg_size = register_size (gdbarch, i);
8324
74ca34ce
DJ
8325 if (rsa->regs[i].pnum == -1)
8326 continue;
8327
9dc193c3 8328 if (offset >= sizeof_g_packet)
74ca34ce 8329 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
8330 else if (offset + reg_size > sizeof_g_packet)
8331 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 8332 else
74ca34ce 8333 rsa->regs[i].in_g_packet = 1;
b96ec7ac 8334 }
9dc193c3
LF
8335
8336 /* Looks valid enough, we can assume this is the correct length
dda83cd7
SM
8337 for a 'g' packet. It's important not to adjust
8338 rsa->sizeof_g_packet if we have truncated registers otherwise
8339 this "if" won't be run the next time the method is called
8340 with a packet of the same size and one of the internal errors
8341 below will trigger instead. */
9dc193c3 8342 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 8343 }
b323314b 8344
224c3ddb 8345 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
8346
8347 /* Unimplemented registers read as all bits zero. */
ea9c271d 8348 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 8349
c906108c
SS
8350 /* Reply describes registers byte by byte, each byte encoded as two
8351 hex characters. Suck them all up, then supply them to the
8352 register cacheing/storage mechanism. */
8353
8d64371b 8354 p = rs->buf.data ();
ea9c271d 8355 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 8356 {
74ca34ce
DJ
8357 if (p[0] == 0 || p[1] == 0)
8358 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8359 internal_error (__FILE__, __LINE__,
9b20d036 8360 _("unexpected end of 'g' packet reply"));
74ca34ce 8361
c906108c 8362 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 8363 regs[i] = 0; /* 'x' */
c906108c
SS
8364 else
8365 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8366 p += 2;
8367 }
8368
a744cf53
MS
8369 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8370 {
8371 struct packet_reg *r = &rsa->regs[i];
9dc193c3 8372 long reg_size = register_size (gdbarch, i);
a744cf53
MS
8373
8374 if (r->in_g_packet)
8375 {
8d64371b 8376 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
a744cf53
MS
8377 /* This shouldn't happen - we adjusted in_g_packet above. */
8378 internal_error (__FILE__, __LINE__,
9b20d036 8379 _("unexpected end of 'g' packet reply"));
a744cf53
MS
8380 else if (rs->buf[r->offset * 2] == 'x')
8381 {
8d64371b 8382 gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
a744cf53
MS
8383 /* The register isn't available, mark it as such (at
8384 the same time setting the value to zero). */
73e1c03f 8385 regcache->raw_supply (r->regnum, NULL);
a744cf53
MS
8386 }
8387 else
73e1c03f 8388 regcache->raw_supply (r->regnum, regs + r->offset);
a744cf53
MS
8389 }
8390 }
c906108c
SS
8391}
8392
6b8edb51
PA
8393void
8394remote_target::fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
8395{
8396 send_g_packet ();
56be3814 8397 process_g_packet (regcache);
29709017
DJ
8398}
8399
e6e4e701
PA
8400/* Make the remote selected traceframe match GDB's selected
8401 traceframe. */
8402
6b8edb51
PA
8403void
8404remote_target::set_remote_traceframe ()
e6e4e701
PA
8405{
8406 int newnum;
262e1174 8407 struct remote_state *rs = get_remote_state ();
e6e4e701 8408
262e1174 8409 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
8410 return;
8411
8412 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 8413 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
8414
8415 newnum = target_trace_find (tfind_number,
8416 get_traceframe_number (), 0, 0, NULL);
8417
8418 /* Should not happen. If it does, all bets are off. */
8419 if (newnum != get_traceframe_number ())
8420 warning (_("could not set remote traceframe"));
8421}
8422
f6ac5f3d
PA
8423void
8424remote_target::fetch_registers (struct regcache *regcache, int regnum)
74ca34ce 8425{
ac7936df 8426 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8427 struct remote_state *rs = get_remote_state ();
8428 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8429 int i;
8430
e6e4e701 8431 set_remote_traceframe ();
222312d3 8432 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8433
8434 if (regnum >= 0)
8435 {
5cd63fda 8436 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8437
74ca34ce
DJ
8438 gdb_assert (reg != NULL);
8439
8440 /* If this register might be in the 'g' packet, try that first -
8441 we are likely to read more than one register. If this is the
8442 first 'g' packet, we might be overly optimistic about its
8443 contents, so fall back to 'p'. */
8444 if (reg->in_g_packet)
8445 {
56be3814 8446 fetch_registers_using_g (regcache);
74ca34ce
DJ
8447 if (reg->in_g_packet)
8448 return;
8449 }
8450
56be3814 8451 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
8452 return;
8453
8454 /* This register is not available. */
73e1c03f 8455 regcache->raw_supply (reg->regnum, NULL);
74ca34ce
DJ
8456
8457 return;
8458 }
8459
56be3814 8460 fetch_registers_using_g (regcache);
74ca34ce 8461
5cd63fda 8462 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8463 if (!rsa->regs[i].in_g_packet)
56be3814 8464 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
8465 {
8466 /* This register is not available. */
73e1c03f 8467 regcache->raw_supply (i, NULL);
74ca34ce
DJ
8468 }
8469}
8470
c906108c
SS
8471/* Prepare to store registers. Since we may send them all (using a
8472 'G' request), we have to read out the ones we don't want to change
8473 first. */
8474
f6ac5f3d
PA
8475void
8476remote_target::prepare_to_store (struct regcache *regcache)
c906108c 8477{
9d6eea31
PA
8478 struct remote_state *rs = get_remote_state ();
8479 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cf0e1e0d 8480 int i;
cf0e1e0d 8481
c906108c 8482 /* Make sure the entire registers array is valid. */
4082afcc 8483 switch (packet_support (PACKET_P))
5a2468f5
JM
8484 {
8485 case PACKET_DISABLE:
8486 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 8487 /* Make sure all the necessary registers are cached. */
ac7936df 8488 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
ea9c271d 8489 if (rsa->regs[i].in_g_packet)
0b47d985 8490 regcache->raw_update (rsa->regs[i].regnum);
5a2468f5
JM
8491 break;
8492 case PACKET_ENABLE:
8493 break;
8494 }
8495}
8496
ad10f812 8497/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 8498 packet was not recognized. */
5a2468f5 8499
6b8edb51
PA
8500int
8501remote_target::store_register_using_P (const struct regcache *regcache,
8502 packet_reg *reg)
5a2468f5 8503{
ac7936df 8504 struct gdbarch *gdbarch = regcache->arch ();
d01949b6 8505 struct remote_state *rs = get_remote_state ();
5a2468f5 8506 /* Try storing a single register. */
8d64371b 8507 char *buf = rs->buf.data ();
9890e433 8508 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 8509 char *p;
5a2468f5 8510
4082afcc 8511 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
8512 return 0;
8513
8514 if (reg->pnum == -1)
8515 return 0;
8516
ea9c271d 8517 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 8518 p = buf + strlen (buf);
34a79281 8519 regcache->raw_collect (reg->regnum, regp);
4a22f64d 8520 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4 8521 putpkt (rs->buf);
8d64371b 8522 getpkt (&rs->buf, 0);
5a2468f5 8523
74ca34ce
DJ
8524 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8525 {
8526 case PACKET_OK:
8527 return 1;
8528 case PACKET_ERROR:
27a9c0bf 8529 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8d64371b 8530 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
74ca34ce
DJ
8531 case PACKET_UNKNOWN:
8532 return 0;
8533 default:
8534 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8535 }
c906108c
SS
8536}
8537
23860348
MS
8538/* Store register REGNUM, or all registers if REGNUM == -1, from the
8539 contents of the register cache buffer. FIXME: ignores errors. */
c906108c 8540
6b8edb51
PA
8541void
8542remote_target::store_registers_using_G (const struct regcache *regcache)
c906108c 8543{
d01949b6 8544 struct remote_state *rs = get_remote_state ();
9d6eea31 8545 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cfd77fa1 8546 gdb_byte *regs;
c906108c
SS
8547 char *p;
8548
193cb69f
AC
8549 /* Extract all the registers in the regcache copying them into a
8550 local buffer. */
8551 {
b323314b 8552 int i;
a744cf53 8553
224c3ddb 8554 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 8555 memset (regs, 0, rsa->sizeof_g_packet);
ac7936df 8556 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
193cb69f 8557 {
ea9c271d 8558 struct packet_reg *r = &rsa->regs[i];
a744cf53 8559
b323314b 8560 if (r->in_g_packet)
34a79281 8561 regcache->raw_collect (r->regnum, regs + r->offset);
193cb69f
AC
8562 }
8563 }
c906108c
SS
8564
8565 /* Command describes registers byte by byte,
8566 each byte encoded as two hex characters. */
8d64371b 8567 p = rs->buf.data ();
193cb69f 8568 *p++ = 'G';
74ca34ce 8569 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4 8570 putpkt (rs->buf);
8d64371b 8571 getpkt (&rs->buf, 0);
1f4437a4 8572 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf 8573 error (_("Could not write registers; remote failure reply '%s'"),
8d64371b 8574 rs->buf.data ());
c906108c 8575}
74ca34ce
DJ
8576
8577/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8578 of the register cache buffer. FIXME: ignores errors. */
8579
f6ac5f3d
PA
8580void
8581remote_target::store_registers (struct regcache *regcache, int regnum)
74ca34ce 8582{
5cd63fda 8583 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8584 struct remote_state *rs = get_remote_state ();
8585 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8586 int i;
8587
e6e4e701 8588 set_remote_traceframe ();
222312d3 8589 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8590
8591 if (regnum >= 0)
8592 {
5cd63fda 8593 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8594
74ca34ce
DJ
8595 gdb_assert (reg != NULL);
8596
8597 /* Always prefer to store registers using the 'P' packet if
8598 possible; we often change only a small number of registers.
8599 Sometimes we change a larger number; we'd need help from a
8600 higher layer to know to use 'G'. */
56be3814 8601 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
8602 return;
8603
8604 /* For now, don't complain if we have no way to write the
8605 register. GDB loses track of unavailable registers too
8606 easily. Some day, this may be an error. We don't have
0df8b418 8607 any way to read the register, either... */
74ca34ce
DJ
8608 if (!reg->in_g_packet)
8609 return;
8610
56be3814 8611 store_registers_using_G (regcache);
74ca34ce
DJ
8612 return;
8613 }
8614
56be3814 8615 store_registers_using_G (regcache);
74ca34ce 8616
5cd63fda 8617 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8618 if (!rsa->regs[i].in_g_packet)
56be3814 8619 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
8620 /* See above for why we do not issue an error here. */
8621 continue;
8622}
c906108c
SS
8623\f
8624
8625/* Return the number of hex digits in num. */
8626
8627static int
fba45db2 8628hexnumlen (ULONGEST num)
c906108c
SS
8629{
8630 int i;
8631
8632 for (i = 0; num != 0; i++)
8633 num >>= 4;
8634
325fac50 8635 return std::max (i, 1);
c906108c
SS
8636}
8637
2df3850c 8638/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
8639
8640static int
fba45db2 8641hexnumstr (char *buf, ULONGEST num)
c906108c 8642{
c906108c 8643 int len = hexnumlen (num);
a744cf53 8644
2df3850c
JM
8645 return hexnumnstr (buf, num, len);
8646}
8647
c906108c 8648
2df3850c 8649/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 8650
2df3850c 8651static int
fba45db2 8652hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
8653{
8654 int i;
8655
8656 buf[width] = '\0';
8657
8658 for (i = width - 1; i >= 0; i--)
c906108c 8659 {
c5aa993b 8660 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
8661 num >>= 4;
8662 }
8663
2df3850c 8664 return width;
c906108c
SS
8665}
8666
23860348 8667/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
8668
8669static CORE_ADDR
fba45db2 8670remote_address_masked (CORE_ADDR addr)
c906108c 8671{
883b9c6c 8672 unsigned int address_size = remote_address_size;
a744cf53 8673
911c95a5
UW
8674 /* If "remoteaddresssize" was not set, default to target address size. */
8675 if (!address_size)
f5656ead 8676 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
8677
8678 if (address_size > 0
8679 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
8680 {
8681 /* Only create a mask when that mask can safely be constructed
dda83cd7 8682 in a ULONGEST variable. */
c906108c 8683 ULONGEST mask = 1;
a744cf53 8684
911c95a5 8685 mask = (mask << address_size) - 1;
c906108c
SS
8686 addr &= mask;
8687 }
8688 return addr;
8689}
8690
8691/* Determine whether the remote target supports binary downloading.
8692 This is accomplished by sending a no-op memory write of zero length
8693 to the target at the specified address. It does not suffice to send
23860348
MS
8694 the whole packet, since many stubs strip the eighth bit and
8695 subsequently compute a wrong checksum, which causes real havoc with
8696 remote_write_bytes.
7a292a7a 8697
96baa820 8698 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 8699 clean. In cases like this, the user should clear "remote
23860348 8700 X-packet". */
96baa820 8701
6b8edb51
PA
8702void
8703remote_target::check_binary_download (CORE_ADDR addr)
c906108c 8704{
d01949b6 8705 struct remote_state *rs = get_remote_state ();
24b06219 8706
4082afcc 8707 switch (packet_support (PACKET_X))
c906108c 8708 {
96baa820
JM
8709 case PACKET_DISABLE:
8710 break;
8711 case PACKET_ENABLE:
8712 break;
8713 case PACKET_SUPPORT_UNKNOWN:
8714 {
96baa820 8715 char *p;
802188a7 8716
8d64371b 8717 p = rs->buf.data ();
96baa820
JM
8718 *p++ = 'X';
8719 p += hexnumstr (p, (ULONGEST) addr);
8720 *p++ = ',';
8721 p += hexnumstr (p, (ULONGEST) 0);
8722 *p++ = ':';
8723 *p = '\0';
802188a7 8724
8d64371b
TT
8725 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8726 getpkt (&rs->buf, 0);
c906108c 8727
2e9f7625 8728 if (rs->buf[0] == '\0')
96baa820 8729 {
2189c312 8730 remote_debug_printf ("binary downloading NOT supported by target");
444abaca 8731 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8732 }
8733 else
8734 {
2189c312 8735 remote_debug_printf ("binary downloading supported by target");
444abaca 8736 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8737 }
8738 break;
8739 }
c906108c
SS
8740 }
8741}
8742
124e13d9
SM
8743/* Helper function to resize the payload in order to try to get a good
8744 alignment. We try to write an amount of data such that the next write will
8745 start on an address aligned on REMOTE_ALIGN_WRITES. */
8746
8747static int
8748align_for_efficient_write (int todo, CORE_ADDR memaddr)
8749{
8750 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8751}
8752
c906108c
SS
8753/* Write memory data directly to the remote machine.
8754 This does not inform the data cache; the data cache uses this.
a76d924d 8755 HEADER is the starting part of the packet.
c906108c
SS
8756 MEMADDR is the address in the remote memory space.
8757 MYADDR is the address of the buffer in our space.
124e13d9
SM
8758 LEN_UNITS is the number of addressable units to write.
8759 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8760 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8761 should send data as binary ('X'), or hex-encoded ('M').
8762
8763 The function creates packet of the form
8764 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8765
124e13d9 8766 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8767
8768 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8769 are omitted.
8770
9b409511 8771 Return the transferred status, error or OK (an
124e13d9
SM
8772 'enum target_xfer_status' value). Save the number of addressable units
8773 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8774
8775 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8776 exchange between gdb and the stub could look like (?? in place of the
8777 checksum):
8778
8779 -> $m1000,4#??
8780 <- aaaabbbbccccdddd
8781
8782 -> $M1000,3:eeeeffffeeee#??
8783 <- OK
8784
8785 -> $m1000,4#??
8786 <- eeeeffffeeeedddd */
c906108c 8787
6b8edb51
PA
8788target_xfer_status
8789remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8790 const gdb_byte *myaddr,
8791 ULONGEST len_units,
8792 int unit_size,
8793 ULONGEST *xfered_len_units,
8794 char packet_format, int use_length)
c906108c 8795{
6d820c5c 8796 struct remote_state *rs = get_remote_state ();
cfd77fa1 8797 char *p;
a76d924d
DJ
8798 char *plen = NULL;
8799 int plenlen = 0;
124e13d9
SM
8800 int todo_units;
8801 int units_written;
8802 int payload_capacity_bytes;
8803 int payload_length_bytes;
a76d924d
DJ
8804
8805 if (packet_format != 'X' && packet_format != 'M')
8806 internal_error (__FILE__, __LINE__,
9b20d036 8807 _("remote_write_bytes_aux: bad packet format"));
c906108c 8808
124e13d9 8809 if (len_units == 0)
9b409511 8810 return TARGET_XFER_EOF;
b2182ed2 8811
124e13d9 8812 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8813
6d820c5c
DJ
8814 /* The packet buffer will be large enough for the payload;
8815 get_memory_packet_size ensures this. */
a76d924d 8816 rs->buf[0] = '\0';
c906108c 8817
a257b5bb 8818 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8819 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8820
124e13d9 8821 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8822 if (!use_length)
0df8b418 8823 /* The comma won't be used. */
124e13d9
SM
8824 payload_capacity_bytes += 1;
8825 payload_capacity_bytes -= strlen (header);
8826 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8827
a76d924d 8828 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8829
8d64371b
TT
8830 strcat (rs->buf.data (), header);
8831 p = rs->buf.data () + strlen (header);
a76d924d
DJ
8832
8833 /* Compute a best guess of the number of bytes actually transfered. */
8834 if (packet_format == 'X')
c906108c 8835 {
23860348 8836 /* Best guess at number of bytes that will fit. */
325fac50
PA
8837 todo_units = std::min (len_units,
8838 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8839 if (use_length)
124e13d9 8840 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8841 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8842 }
8843 else
8844 {
124e13d9 8845 /* Number of bytes that will fit. */
325fac50
PA
8846 todo_units
8847 = std::min (len_units,
8848 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8849 if (use_length)
124e13d9 8850 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8851 todo_units = std::min (todo_units,
8852 (payload_capacity_bytes / unit_size) / 2);
917317f4 8853 }
a76d924d 8854
124e13d9 8855 if (todo_units <= 0)
3de11b2e 8856 internal_error (__FILE__, __LINE__,
405f8e94 8857 _("minimum packet size too small to write data"));
802188a7 8858
6765f3e5
DJ
8859 /* If we already need another packet, then try to align the end
8860 of this packet to a useful boundary. */
124e13d9
SM
8861 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8862 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8863
a257b5bb 8864 /* Append "<memaddr>". */
917317f4
JM
8865 memaddr = remote_address_masked (memaddr);
8866 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8867
a76d924d
DJ
8868 if (use_length)
8869 {
8870 /* Append ",". */
8871 *p++ = ',';
802188a7 8872
124e13d9 8873 /* Append the length and retain its location and size. It may need to be
dda83cd7 8874 adjusted once the packet body has been created. */
a76d924d 8875 plen = p;
124e13d9 8876 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8877 p += plenlen;
8878 }
a257b5bb
AC
8879
8880 /* Append ":". */
917317f4
JM
8881 *p++ = ':';
8882 *p = '\0';
802188a7 8883
a257b5bb 8884 /* Append the packet body. */
a76d924d 8885 if (packet_format == 'X')
917317f4 8886 {
917317f4
JM
8887 /* Binary mode. Send target system values byte by byte, in
8888 increasing byte addresses. Only escape certain critical
8889 characters. */
124e13d9
SM
8890 payload_length_bytes =
8891 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8892 &units_written, payload_capacity_bytes);
6765f3e5 8893
124e13d9 8894 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8895 a second try to keep the end of the packet aligned. Don't do
8896 this if the packet is tiny. */
124e13d9 8897 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8898 {
124e13d9
SM
8899 int new_todo_units;
8900
8901 new_todo_units = align_for_efficient_write (units_written, memaddr);
8902
8903 if (new_todo_units != units_written)
8904 payload_length_bytes =
8905 remote_escape_output (myaddr, new_todo_units, unit_size,
8906 (gdb_byte *) p, &units_written,
8907 payload_capacity_bytes);
6765f3e5
DJ
8908 }
8909
124e13d9
SM
8910 p += payload_length_bytes;
8911 if (use_length && units_written < todo_units)
c906108c 8912 {
802188a7 8913 /* Escape chars have filled up the buffer prematurely,
124e13d9 8914 and we have actually sent fewer units than planned.
917317f4
JM
8915 Fix-up the length field of the packet. Use the same
8916 number of characters as before. */
124e13d9
SM
8917 plen += hexnumnstr (plen, (ULONGEST) units_written,
8918 plenlen);
917317f4 8919 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8920 }
a76d924d
DJ
8921 }
8922 else
8923 {
917317f4
JM
8924 /* Normal mode: Send target system values byte by byte, in
8925 increasing byte addresses. Each byte is encoded as a two hex
8926 value. */
124e13d9
SM
8927 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8928 units_written = todo_units;
c906108c 8929 }
802188a7 8930
8d64371b
TT
8931 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8932 getpkt (&rs->buf, 0);
802188a7 8933
2e9f7625 8934 if (rs->buf[0] == 'E')
00d84524 8935 return TARGET_XFER_E_IO;
802188a7 8936
124e13d9
SM
8937 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8938 send fewer units than we'd planned. */
8939 *xfered_len_units = (ULONGEST) units_written;
92ffd475 8940 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
8941}
8942
a76d924d
DJ
8943/* Write memory data directly to the remote machine.
8944 This does not inform the data cache; the data cache uses this.
8945 MEMADDR is the address in the remote memory space.
8946 MYADDR is the address of the buffer in our space.
8947 LEN is the number of bytes.
8948
9b409511
YQ
8949 Return the transferred status, error or OK (an
8950 'enum target_xfer_status' value). Save the number of bytes
8951 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8952
6b8edb51
PA
8953target_xfer_status
8954remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8955 ULONGEST len, int unit_size,
8956 ULONGEST *xfered_len)
a76d924d 8957{
a121b7c1 8958 const char *packet_format = NULL;
a76d924d
DJ
8959
8960 /* Check whether the target supports binary download. */
8961 check_binary_download (memaddr);
8962
4082afcc 8963 switch (packet_support (PACKET_X))
a76d924d
DJ
8964 {
8965 case PACKET_ENABLE:
8966 packet_format = "X";
8967 break;
8968 case PACKET_DISABLE:
8969 packet_format = "M";
8970 break;
8971 case PACKET_SUPPORT_UNKNOWN:
8972 internal_error (__FILE__, __LINE__,
8973 _("remote_write_bytes: bad internal state"));
8974 default:
8975 internal_error (__FILE__, __LINE__, _("bad switch"));
8976 }
8977
8978 return remote_write_bytes_aux (packet_format,
124e13d9 8979 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8980 packet_format[0], 1);
a76d924d
DJ
8981}
8982
9217e74e
YQ
8983/* Read memory data directly from the remote machine.
8984 This does not use the data cache; the data cache uses this.
8985 MEMADDR is the address in the remote memory space.
8986 MYADDR is the address of the buffer in our space.
124e13d9
SM
8987 LEN_UNITS is the number of addressable memory units to read..
8988 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8989
8990 Return the transferred status, error or OK (an
8991 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8992 transferred in *XFERED_LEN_UNITS.
8993
8994 See the comment of remote_write_bytes_aux for an example of
8995 memory read/write exchange between gdb and the stub. */
9217e74e 8996
6b8edb51
PA
8997target_xfer_status
8998remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8999 ULONGEST len_units,
9000 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
9001{
9002 struct remote_state *rs = get_remote_state ();
124e13d9 9003 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 9004 char *p;
124e13d9
SM
9005 int todo_units;
9006 int decoded_bytes;
9217e74e 9007
124e13d9 9008 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
9009 /* The packet buffer will be large enough for the payload;
9010 get_memory_packet_size ensures this. */
9011
124e13d9 9012 /* Number of units that will fit. */
325fac50
PA
9013 todo_units = std::min (len_units,
9014 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
9015
9016 /* Construct "m"<memaddr>","<len>". */
9017 memaddr = remote_address_masked (memaddr);
8d64371b 9018 p = rs->buf.data ();
9217e74e
YQ
9019 *p++ = 'm';
9020 p += hexnumstr (p, (ULONGEST) memaddr);
9021 *p++ = ',';
124e13d9 9022 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
9023 *p = '\0';
9024 putpkt (rs->buf);
8d64371b 9025 getpkt (&rs->buf, 0);
9217e74e
YQ
9026 if (rs->buf[0] == 'E'
9027 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
9028 && rs->buf[3] == '\0')
9029 return TARGET_XFER_E_IO;
9030 /* Reply describes memory byte by byte, each byte encoded as two hex
9031 characters. */
8d64371b 9032 p = rs->buf.data ();
124e13d9 9033 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 9034 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 9035 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
92ffd475 9036 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9217e74e
YQ
9037}
9038
b55fbac4
YQ
9039/* Using the set of read-only target sections of remote, read live
9040 read-only memory.
8acf9577
YQ
9041
9042 For interface/parameters/return description see target.h,
9043 to_xfer_partial. */
9044
6b8edb51
PA
9045target_xfer_status
9046remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
9047 ULONGEST memaddr,
9048 ULONGEST len,
9049 int unit_size,
9050 ULONGEST *xfered_len)
8acf9577 9051{
19cf757a 9052 const struct target_section *secp;
8acf9577 9053
6b8edb51 9054 secp = target_section_by_addr (this, memaddr);
8acf9577 9055 if (secp != NULL
fd361982 9056 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
8acf9577 9057 {
8acf9577
YQ
9058 ULONGEST memend = memaddr + len;
9059
19cf757a
AB
9060 const target_section_table *table = target_get_section_table (this);
9061 for (const target_section &p : *table)
8acf9577 9062 {
bb2a6777 9063 if (memaddr >= p.addr)
8acf9577 9064 {
bb2a6777 9065 if (memend <= p.endaddr)
8acf9577
YQ
9066 {
9067 /* Entire transfer is within this section. */
124e13d9 9068 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 9069 xfered_len);
8acf9577 9070 }
bb2a6777 9071 else if (memaddr >= p.endaddr)
8acf9577
YQ
9072 {
9073 /* This section ends before the transfer starts. */
9074 continue;
9075 }
9076 else
9077 {
9078 /* This section overlaps the transfer. Just do half. */
bb2a6777 9079 len = p.endaddr - memaddr;
124e13d9 9080 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 9081 xfered_len);
8acf9577
YQ
9082 }
9083 }
9084 }
9085 }
9086
9087 return TARGET_XFER_EOF;
9088}
9089
9217e74e
YQ
9090/* Similar to remote_read_bytes_1, but it reads from the remote stub
9091 first if the requested memory is unavailable in traceframe.
9092 Otherwise, fall back to remote_read_bytes_1. */
c906108c 9093
6b8edb51
PA
9094target_xfer_status
9095remote_target::remote_read_bytes (CORE_ADDR memaddr,
9096 gdb_byte *myaddr, ULONGEST len, int unit_size,
9097 ULONGEST *xfered_len)
c906108c 9098{
6b6aa828 9099 if (len == 0)
96c4f946 9100 return TARGET_XFER_EOF;
b2182ed2 9101
8acf9577
YQ
9102 if (get_traceframe_number () != -1)
9103 {
a79b1bc6 9104 std::vector<mem_range> available;
8acf9577
YQ
9105
9106 /* If we fail to get the set of available memory, then the
9107 target does not support querying traceframe info, and so we
9108 attempt reading from the traceframe anyway (assuming the
9109 target implements the old QTro packet then). */
9110 if (traceframe_available_memory (&available, memaddr, len))
9111 {
a79b1bc6 9112 if (available.empty () || available[0].start != memaddr)
8acf9577
YQ
9113 {
9114 enum target_xfer_status res;
9115
9116 /* Don't read into the traceframe's available
9117 memory. */
a79b1bc6 9118 if (!available.empty ())
8acf9577
YQ
9119 {
9120 LONGEST oldlen = len;
9121
a79b1bc6 9122 len = available[0].start - memaddr;
8acf9577
YQ
9123 gdb_assert (len <= oldlen);
9124 }
9125
8acf9577 9126 /* This goes through the topmost target again. */
6b8edb51 9127 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
124e13d9 9128 len, unit_size, xfered_len);
8acf9577
YQ
9129 if (res == TARGET_XFER_OK)
9130 return TARGET_XFER_OK;
9131 else
9132 {
9133 /* No use trying further, we know some memory starting
9134 at MEMADDR isn't available. */
9135 *xfered_len = len;
92ffd475
PC
9136 return (*xfered_len != 0) ?
9137 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8acf9577
YQ
9138 }
9139 }
9140
9141 /* Don't try to read more than how much is available, in
9142 case the target implements the deprecated QTro packet to
9143 cater for older GDBs (the target's knowledge of read-only
9144 sections may be outdated by now). */
a79b1bc6 9145 len = available[0].length;
8acf9577
YQ
9146 }
9147 }
9148
124e13d9 9149 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 9150}
74531fed 9151
c906108c 9152\f
c906108c 9153
a76d924d
DJ
9154/* Sends a packet with content determined by the printf format string
9155 FORMAT and the remaining arguments, then gets the reply. Returns
9156 whether the packet was a success, a failure, or unknown. */
9157
6b8edb51
PA
9158packet_result
9159remote_target::remote_send_printf (const char *format, ...)
a76d924d
DJ
9160{
9161 struct remote_state *rs = get_remote_state ();
9162 int max_size = get_remote_packet_size ();
a76d924d 9163 va_list ap;
a744cf53 9164
a76d924d
DJ
9165 va_start (ap, format);
9166
9167 rs->buf[0] = '\0';
8d64371b 9168 int size = vsnprintf (rs->buf.data (), max_size, format, ap);
33b031ce
GB
9169
9170 va_end (ap);
9171
9172 if (size >= max_size)
9b20d036 9173 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
9174
9175 if (putpkt (rs->buf) < 0)
9176 error (_("Communication problem with target."));
9177
9178 rs->buf[0] = '\0';
8d64371b 9179 getpkt (&rs->buf, 0);
a76d924d
DJ
9180
9181 return packet_check_result (rs->buf);
9182}
9183
a76d924d
DJ
9184/* Flash writing can take quite some time. We'll set
9185 effectively infinite timeout for flash operations.
9186 In future, we'll need to decide on a better approach. */
9187static const int remote_flash_timeout = 1000;
9188
f6ac5f3d
PA
9189void
9190remote_target::flash_erase (ULONGEST address, LONGEST length)
a76d924d 9191{
f5656ead 9192 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d 9193 enum packet_result ret;
2ec845e7
TT
9194 scoped_restore restore_timeout
9195 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
a76d924d
DJ
9196
9197 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 9198 phex (address, addr_size),
a76d924d
DJ
9199 phex (length, 4));
9200 switch (ret)
9201 {
9202 case PACKET_UNKNOWN:
9203 error (_("Remote target does not support flash erase"));
9204 case PACKET_ERROR:
9205 error (_("Error erasing flash with vFlashErase packet"));
9206 default:
9207 break;
9208 }
a76d924d
DJ
9209}
9210
6b8edb51
PA
9211target_xfer_status
9212remote_target::remote_flash_write (ULONGEST address,
9213 ULONGEST length, ULONGEST *xfered_len,
9214 const gdb_byte *data)
a76d924d 9215{
2ec845e7
TT
9216 scoped_restore restore_timeout
9217 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9218 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9219 xfered_len,'X', 0);
a76d924d
DJ
9220}
9221
f6ac5f3d
PA
9222void
9223remote_target::flash_done ()
a76d924d 9224{
a76d924d 9225 int ret;
a76d924d 9226
2ec845e7
TT
9227 scoped_restore restore_timeout
9228 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9229
a76d924d 9230 ret = remote_send_printf ("vFlashDone");
a76d924d
DJ
9231
9232 switch (ret)
9233 {
9234 case PACKET_UNKNOWN:
9235 error (_("Remote target does not support vFlashDone"));
9236 case PACKET_ERROR:
9237 error (_("Error finishing flash operation"));
9238 default:
9239 break;
9240 }
9241}
9242
f6ac5f3d
PA
9243void
9244remote_target::files_info ()
c906108c
SS
9245{
9246 puts_filtered ("Debugging a target over a serial line.\n");
9247}
9248\f
9249/* Stuff for dealing with the packets which are part of this protocol.
9250 See comment at top of file for details. */
9251
1927e618
PA
9252/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
9253 error to higher layers. Called when a serial error is detected.
9254 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
9255 the system error message for errno at function entry and final dot
9256 for output compatibility with throw_perror_with_name. */
1927e618
PA
9257
9258static void
5b6d1e4f 9259unpush_and_perror (remote_target *target, const char *string)
1927e618 9260{
d6cb50a2 9261 int saved_errno = errno;
1927e618 9262
5b6d1e4f 9263 remote_unpush_target (target);
d6cb50a2
JK
9264 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
9265 safe_strerror (saved_errno));
1927e618
PA
9266}
9267
048094ac
PA
9268/* Read a single character from the remote end. The current quit
9269 handler is overridden to avoid quitting in the middle of packet
9270 sequence, as that would break communication with the remote server.
9271 See remote_serial_quit_handler for more detail. */
c906108c 9272
6b8edb51
PA
9273int
9274remote_target::readchar (int timeout)
c906108c
SS
9275{
9276 int ch;
5d93a237 9277 struct remote_state *rs = get_remote_state ();
048094ac 9278
2ec845e7 9279 {
6b8edb51
PA
9280 scoped_restore restore_quit_target
9281 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9282 scoped_restore restore_quit
6b8edb51 9283 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
c906108c 9284
2ec845e7 9285 rs->got_ctrlc_during_io = 0;
c906108c 9286
2ec845e7 9287 ch = serial_readchar (rs->remote_desc, timeout);
048094ac 9288
2ec845e7
TT
9289 if (rs->got_ctrlc_during_io)
9290 set_quit_flag ();
9291 }
048094ac 9292
2acceee2 9293 if (ch >= 0)
0876f84a 9294 return ch;
2acceee2
JM
9295
9296 switch ((enum serial_rc) ch)
c906108c
SS
9297 {
9298 case SERIAL_EOF:
5b6d1e4f 9299 remote_unpush_target (this);
598d3636 9300 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 9301 /* no return */
c906108c 9302 case SERIAL_ERROR:
5b6d1e4f
PA
9303 unpush_and_perror (this, _("Remote communication error. "
9304 "Target disconnected."));
2acceee2 9305 /* no return */
c906108c 9306 case SERIAL_TIMEOUT:
2acceee2 9307 break;
c906108c 9308 }
2acceee2 9309 return ch;
c906108c
SS
9310}
9311
c33e31fd 9312/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
9313 writing fails. The current quit handler is overridden to avoid
9314 quitting in the middle of packet sequence, as that would break
9315 communication with the remote server. See
9316 remote_serial_quit_handler for more detail. */
c33e31fd 9317
6b8edb51
PA
9318void
9319remote_target::remote_serial_write (const char *str, int len)
c33e31fd 9320{
5d93a237 9321 struct remote_state *rs = get_remote_state ();
048094ac 9322
6b8edb51
PA
9323 scoped_restore restore_quit_target
9324 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9325 scoped_restore restore_quit
6b8edb51 9326 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
048094ac
PA
9327
9328 rs->got_ctrlc_during_io = 0;
5d93a237
TT
9329
9330 if (serial_write (rs->remote_desc, str, len))
c33e31fd 9331 {
5b6d1e4f
PA
9332 unpush_and_perror (this, _("Remote communication error. "
9333 "Target disconnected."));
c33e31fd 9334 }
048094ac
PA
9335
9336 if (rs->got_ctrlc_during_io)
9337 set_quit_flag ();
c33e31fd
PA
9338}
9339
b3ced9ba
PA
9340/* Return a string representing an escaped version of BUF, of len N.
9341 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 9342
b3ced9ba 9343static std::string
6e5abd65
PA
9344escape_buffer (const char *buf, int n)
9345{
d7e74731 9346 string_file stb;
6e5abd65 9347
d7e74731
PA
9348 stb.putstrn (buf, n, '\\');
9349 return std::move (stb.string ());
6e5abd65
PA
9350}
9351
c906108c
SS
9352/* Display a null-terminated packet on stdout, for debugging, using C
9353 string notation. */
9354
9355static void
baa336ce 9356print_packet (const char *buf)
c906108c
SS
9357{
9358 puts_filtered ("\"");
43e526b9 9359 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
9360 puts_filtered ("\"");
9361}
9362
9363int
6b8edb51 9364remote_target::putpkt (const char *buf)
c906108c
SS
9365{
9366 return putpkt_binary (buf, strlen (buf));
9367}
9368
6b8edb51
PA
9369/* Wrapper around remote_target::putpkt to avoid exporting
9370 remote_target. */
9371
9372int
9373putpkt (remote_target *remote, const char *buf)
9374{
9375 return remote->putpkt (buf);
9376}
9377
c906108c 9378/* Send a packet to the remote machine, with error checking. The data
23860348 9379 of the packet is in BUF. The string in BUF can be at most
ea9c271d 9380 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
9381 and for a possible /0 if we are debugging (remote_debug) and want
9382 to print the sent packet as a string. */
c906108c 9383
6b8edb51
PA
9384int
9385remote_target::putpkt_binary (const char *buf, int cnt)
c906108c 9386{
2d717e4f 9387 struct remote_state *rs = get_remote_state ();
c906108c
SS
9388 int i;
9389 unsigned char csum = 0;
b80406ac
TT
9390 gdb::def_vector<char> data (cnt + 6);
9391 char *buf2 = data.data ();
085dd6e6 9392
c906108c
SS
9393 int ch;
9394 int tcount = 0;
9395 char *p;
9396
e24a49d8
PA
9397 /* Catch cases like trying to read memory or listing threads while
9398 we're waiting for a stop reply. The remote server wouldn't be
9399 ready to handle this request, so we'd hang and timeout. We don't
9400 have to worry about this in synchronous mode, because in that
9401 case it's not possible to issue a command while the target is
74531fed
PA
9402 running. This is not a problem in non-stop mode, because in that
9403 case, the stub is always ready to process serial input. */
6efcd9a8
PA
9404 if (!target_is_non_stop_p ()
9405 && target_is_async_p ()
9406 && rs->waiting_for_stop_reply)
9597b22a
DE
9407 {
9408 error (_("Cannot execute this command while the target is running.\n"
9409 "Use the \"interrupt\" command to stop the target\n"
9410 "and then try again."));
9411 }
e24a49d8 9412
2d717e4f
DJ
9413 /* We're sending out a new packet. Make sure we don't look at a
9414 stale cached response. */
9415 rs->cached_wait_status = 0;
9416
c906108c
SS
9417 /* Copy the packet into buffer BUF2, encapsulating it
9418 and giving it a checksum. */
9419
c906108c
SS
9420 p = buf2;
9421 *p++ = '$';
9422
9423 for (i = 0; i < cnt; i++)
9424 {
9425 csum += buf[i];
9426 *p++ = buf[i];
9427 }
9428 *p++ = '#';
9429 *p++ = tohex ((csum >> 4) & 0xf);
9430 *p++ = tohex (csum & 0xf);
9431
9432 /* Send it over and over until we get a positive ack. */
9433
9434 while (1)
9435 {
c906108c
SS
9436 if (remote_debug)
9437 {
9438 *p = '\0';
b3ced9ba 9439
6f8976bf 9440 int len = (int) (p - buf2);
6cc8564b
LM
9441 int max_chars;
9442
9443 if (remote_packet_max_chars < 0)
9444 max_chars = len;
9445 else
9446 max_chars = remote_packet_max_chars;
6f8976bf
YQ
9447
9448 std::string str
6cc8564b 9449 = escape_buffer (buf2, std::min (len, max_chars));
6f8976bf 9450
6cc8564b 9451 if (len > max_chars)
2189c312
SM
9452 remote_debug_printf_nofunc
9453 ("Sending packet: %s [%d bytes omitted]", str.c_str (),
9454 len - max_chars);
9455 else
9456 remote_debug_printf_nofunc ("Sending packet: %s", str.c_str ());
c906108c 9457 }
c33e31fd 9458 remote_serial_write (buf2, p - buf2);
c906108c 9459
a6f3e723
SL
9460 /* If this is a no acks version of the remote protocol, send the
9461 packet and move on. */
9462 if (rs->noack_mode)
dda83cd7 9463 break;
a6f3e723 9464
74531fed
PA
9465 /* Read until either a timeout occurs (-2) or '+' is read.
9466 Handle any notification that arrives in the mean time. */
c906108c
SS
9467 while (1)
9468 {
9469 ch = readchar (remote_timeout);
9470
c906108c
SS
9471 switch (ch)
9472 {
9473 case '+':
2189c312 9474 remote_debug_printf_nofunc ("Received Ack");
c906108c 9475 return 1;
1216fa2c 9476 case '-':
2189c312 9477 remote_debug_printf_nofunc ("Received Nak");
a17d146e 9478 /* FALLTHROUGH */
c906108c 9479 case SERIAL_TIMEOUT:
c5aa993b 9480 tcount++;
c906108c 9481 if (tcount > 3)
b80406ac 9482 return 0;
23860348 9483 break; /* Retransmit buffer. */
c906108c
SS
9484 case '$':
9485 {
2189c312 9486 remote_debug_printf ("Packet instead of Ack, ignoring it");
d6f7abdf
AC
9487 /* It's probably an old response sent because an ACK
9488 was lost. Gobble up the packet and ack it so it
9489 doesn't get retransmitted when we resend this
9490 packet. */
6d820c5c 9491 skip_frame ();
c33e31fd 9492 remote_serial_write ("+", 1);
23860348 9493 continue; /* Now, go look for +. */
c906108c 9494 }
74531fed
PA
9495
9496 case '%':
9497 {
9498 int val;
9499
9500 /* If we got a notification, handle it, and go back to looking
9501 for an ack. */
9502 /* We've found the start of a notification. Now
9503 collect the data. */
8d64371b 9504 val = read_frame (&rs->buf);
74531fed
PA
9505 if (val >= 0)
9506 {
2189c312
SM
9507 remote_debug_printf_nofunc
9508 (" Notification received: %s",
9509 escape_buffer (rs->buf.data (), val).c_str ());
6e5abd65 9510
8d64371b 9511 handle_notification (rs->notif_state, rs->buf.data ());
74531fed
PA
9512 /* We're in sync now, rewait for the ack. */
9513 tcount = 0;
9514 }
9515 else
2189c312
SM
9516 remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177,
9517 rs->buf.data ());
74531fed
PA
9518 continue;
9519 }
9520 /* fall-through */
c906108c 9521 default:
2189c312
SM
9522 remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177,
9523 rs->buf.data ());
c906108c
SS
9524 continue;
9525 }
23860348 9526 break; /* Here to retransmit. */
c906108c
SS
9527 }
9528
9529#if 0
9530 /* This is wrong. If doing a long backtrace, the user should be
dda83cd7
SM
9531 able to get out next time we call QUIT, without anything as
9532 violent as interrupt_query. If we want to provide a way out of
9533 here without getting to the next QUIT, it should be based on
9534 hitting ^C twice as in remote_wait. */
c906108c
SS
9535 if (quit_flag)
9536 {
9537 quit_flag = 0;
9538 interrupt_query ();
9539 }
9540#endif
9541 }
a5c0808e 9542
a6f3e723 9543 return 0;
c906108c
SS
9544}
9545
6d820c5c
DJ
9546/* Come here after finding the start of a frame when we expected an
9547 ack. Do our best to discard the rest of this packet. */
9548
6b8edb51
PA
9549void
9550remote_target::skip_frame ()
6d820c5c
DJ
9551{
9552 int c;
9553
9554 while (1)
9555 {
9556 c = readchar (remote_timeout);
9557 switch (c)
9558 {
9559 case SERIAL_TIMEOUT:
9560 /* Nothing we can do. */
9561 return;
9562 case '#':
9563 /* Discard the two bytes of checksum and stop. */
9564 c = readchar (remote_timeout);
9565 if (c >= 0)
9566 c = readchar (remote_timeout);
9567
9568 return;
9569 case '*': /* Run length encoding. */
9570 /* Discard the repeat count. */
9571 c = readchar (remote_timeout);
9572 if (c < 0)
9573 return;
9574 break;
9575 default:
9576 /* A regular character. */
9577 break;
9578 }
9579 }
9580}
9581
c906108c 9582/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
9583 into *BUF, verifying the checksum, length, and handling run-length
9584 compression. NUL terminate the buffer. If there is not enough room,
8d64371b 9585 expand *BUF.
c906108c 9586
c2d11a7d
JM
9587 Returns -1 on error, number of characters in buffer (ignoring the
9588 trailing NULL) on success. (could be extended to return one of the
23860348 9589 SERIAL status indications). */
c2d11a7d 9590
6b8edb51 9591long
8d64371b 9592remote_target::read_frame (gdb::char_vector *buf_p)
c906108c
SS
9593{
9594 unsigned char csum;
c2d11a7d 9595 long bc;
c906108c 9596 int c;
8d64371b 9597 char *buf = buf_p->data ();
a6f3e723 9598 struct remote_state *rs = get_remote_state ();
c906108c
SS
9599
9600 csum = 0;
c2d11a7d 9601 bc = 0;
c906108c
SS
9602
9603 while (1)
9604 {
9605 c = readchar (remote_timeout);
c906108c
SS
9606 switch (c)
9607 {
9608 case SERIAL_TIMEOUT:
2189c312 9609 remote_debug_printf ("Timeout in mid-packet, retrying");
c2d11a7d 9610 return -1;
2189c312 9611
c906108c 9612 case '$':
2189c312 9613 remote_debug_printf ("Saw new packet start in middle of old one");
23860348 9614 return -1; /* Start a new packet, count retries. */
2189c312 9615
c906108c
SS
9616 case '#':
9617 {
9618 unsigned char pktcsum;
e1b09194
AC
9619 int check_0 = 0;
9620 int check_1 = 0;
c906108c 9621
c2d11a7d 9622 buf[bc] = '\0';
c906108c 9623
e1b09194
AC
9624 check_0 = readchar (remote_timeout);
9625 if (check_0 >= 0)
9626 check_1 = readchar (remote_timeout);
802188a7 9627
e1b09194
AC
9628 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9629 {
2189c312 9630 remote_debug_printf ("Timeout in checksum, retrying");
e1b09194
AC
9631 return -1;
9632 }
9633 else if (check_0 < 0 || check_1 < 0)
40e3f985 9634 {
2189c312 9635 remote_debug_printf ("Communication error in checksum");
40e3f985
FN
9636 return -1;
9637 }
c906108c 9638
a6f3e723
SL
9639 /* Don't recompute the checksum; with no ack packets we
9640 don't have any way to indicate a packet retransmission
9641 is necessary. */
9642 if (rs->noack_mode)
9643 return bc;
9644
e1b09194 9645 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9646 if (csum == pktcsum)
dda83cd7 9647 return bc;
c906108c 9648
2189c312
SM
9649 remote_debug_printf
9650 ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s",
9651 pktcsum, csum, escape_buffer (buf, bc).c_str ());
6e5abd65 9652
c2d11a7d 9653 /* Number of characters in buffer ignoring trailing
dda83cd7 9654 NULL. */
c2d11a7d 9655 return -1;
c906108c 9656 }
23860348 9657 case '*': /* Run length encoding. */
dda83cd7 9658 {
c2c6d25f 9659 int repeat;
c906108c 9660
a744cf53 9661 csum += c;
b4501125
AC
9662 c = readchar (remote_timeout);
9663 csum += c;
23860348 9664 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9665
23860348 9666 /* The character before ``*'' is repeated. */
c2d11a7d 9667
6d820c5c 9668 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9669 {
8d64371b 9670 if (bc + repeat - 1 >= buf_p->size () - 1)
6d820c5c
DJ
9671 {
9672 /* Make some more room in the buffer. */
8d64371b
TT
9673 buf_p->resize (buf_p->size () + repeat);
9674 buf = buf_p->data ();
6d820c5c
DJ
9675 }
9676
c2d11a7d
JM
9677 memset (&buf[bc], buf[bc - 1], repeat);
9678 bc += repeat;
c2c6d25f
JM
9679 continue;
9680 }
9681
c2d11a7d 9682 buf[bc] = '\0';
6d820c5c 9683 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9684 return -1;
c2c6d25f 9685 }
c906108c 9686 default:
8d64371b 9687 if (bc >= buf_p->size () - 1)
c906108c 9688 {
6d820c5c 9689 /* Make some more room in the buffer. */
8d64371b
TT
9690 buf_p->resize (buf_p->size () * 2);
9691 buf = buf_p->data ();
c906108c
SS
9692 }
9693
6d820c5c
DJ
9694 buf[bc++] = c;
9695 csum += c;
9696 continue;
c906108c
SS
9697 }
9698 }
9699}
9700
ed2b7c17
TT
9701/* Set this to the maximum number of seconds to wait instead of waiting forever
9702 in target_wait(). If this timer times out, then it generates an error and
9703 the command is aborted. This replaces most of the need for timeouts in the
9704 GDB test suite, and makes it possible to distinguish between a hung target
9705 and one with slow communications. */
9706
9707static int watchdog = 0;
9708static void
9709show_watchdog (struct ui_file *file, int from_tty,
9710 struct cmd_list_element *c, const char *value)
9711{
9712 fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
9713}
9714
c906108c 9715/* Read a packet from the remote machine, with error checking, and
8d64371b
TT
9716 store it in *BUF. Resize *BUF if necessary to hold the result. If
9717 FOREVER, wait forever rather than timing out; this is used (in
9718 synchronous mode) to wait for a target that is is executing user
9719 code to stop. */
d9fcf2fb
JM
9720/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9721 don't have to change all the calls to getpkt to deal with the
9722 return value, because at the moment I don't know what the right
23860348 9723 thing to do it for those. */
6b8edb51 9724
c906108c 9725void
8d64371b 9726remote_target::getpkt (gdb::char_vector *buf, int forever)
d9fcf2fb 9727{
8d64371b 9728 getpkt_sane (buf, forever);
d9fcf2fb
JM
9729}
9730
9731
9732/* Read a packet from the remote machine, with error checking, and
8d64371b
TT
9733 store it in *BUF. Resize *BUF if necessary to hold the result. If
9734 FOREVER, wait forever rather than timing out; this is used (in
9735 synchronous mode) to wait for a target that is is executing user
9736 code to stop. If FOREVER == 0, this function is allowed to time
9737 out gracefully and return an indication of this to the caller.
9738 Otherwise return the number of bytes read. If EXPECTING_NOTIF,
9739 consider receiving a notification enough reason to return to the
9740 caller. *IS_NOTIF is an output boolean that indicates whether *BUF
9741 holds a notification or not (a regular packet). */
74531fed 9742
6b8edb51 9743int
8d64371b 9744remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
6b8edb51
PA
9745 int forever, int expecting_notif,
9746 int *is_notif)
c906108c 9747{
2d717e4f 9748 struct remote_state *rs = get_remote_state ();
c906108c
SS
9749 int c;
9750 int tries;
9751 int timeout;
df4b58fe 9752 int val = -1;
c906108c 9753
2d717e4f
DJ
9754 /* We're reading a new response. Make sure we don't look at a
9755 previously cached response. */
9756 rs->cached_wait_status = 0;
9757
8d64371b 9758 strcpy (buf->data (), "timeout");
c906108c
SS
9759
9760 if (forever)
74531fed
PA
9761 timeout = watchdog > 0 ? watchdog : -1;
9762 else if (expecting_notif)
9763 timeout = 0; /* There should already be a char in the buffer. If
9764 not, bail out. */
c906108c
SS
9765 else
9766 timeout = remote_timeout;
9767
9768#define MAX_TRIES 3
9769
74531fed
PA
9770 /* Process any number of notifications, and then return when
9771 we get a packet. */
9772 for (;;)
c906108c 9773 {
d9c43928 9774 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9775 times. */
9776 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9777 {
74531fed
PA
9778 /* This can loop forever if the remote side sends us
9779 characters continuously, but if it pauses, we'll get
9780 SERIAL_TIMEOUT from readchar because of timeout. Then
9781 we'll count that as a retry.
9782
9783 Note that even when forever is set, we will only wait
9784 forever prior to the start of a packet. After that, we
9785 expect characters to arrive at a brisk pace. They should
9786 show up within remote_timeout intervals. */
9787 do
9788 c = readchar (timeout);
9789 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9790
9791 if (c == SERIAL_TIMEOUT)
9792 {
74531fed
PA
9793 if (expecting_notif)
9794 return -1; /* Don't complain, it's normal to not get
9795 anything in this case. */
9796
23860348 9797 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9798 {
5b6d1e4f 9799 remote_unpush_target (this);
598d3636
JK
9800 throw_error (TARGET_CLOSE_ERROR,
9801 _("Watchdog timeout has expired. "
9802 "Target detached."));
c906108c 9803 }
2189c312
SM
9804
9805 remote_debug_printf ("Timed out.");
c906108c 9806 }
74531fed
PA
9807 else
9808 {
9809 /* We've found the start of a packet or notification.
9810 Now collect the data. */
8d64371b 9811 val = read_frame (buf);
74531fed
PA
9812 if (val >= 0)
9813 break;
9814 }
9815
c33e31fd 9816 remote_serial_write ("-", 1);
c906108c 9817 }
c906108c 9818
74531fed
PA
9819 if (tries > MAX_TRIES)
9820 {
9821 /* We have tried hard enough, and just can't receive the
9822 packet/notification. Give up. */
9823 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9824
74531fed
PA
9825 /* Skip the ack char if we're in no-ack mode. */
9826 if (!rs->noack_mode)
c33e31fd 9827 remote_serial_write ("+", 1);
74531fed
PA
9828 return -1;
9829 }
c906108c 9830
74531fed
PA
9831 /* If we got an ordinary packet, return that to our caller. */
9832 if (c == '$')
c906108c
SS
9833 {
9834 if (remote_debug)
43e526b9 9835 {
6cc8564b
LM
9836 int max_chars;
9837
9838 if (remote_packet_max_chars < 0)
9839 max_chars = val;
9840 else
9841 max_chars = remote_packet_max_chars;
9842
6f8976bf 9843 std::string str
8d64371b 9844 = escape_buffer (buf->data (),
6cc8564b 9845 std::min (val, max_chars));
6f8976bf 9846
6cc8564b 9847 if (val > max_chars)
2189c312
SM
9848 remote_debug_printf_nofunc
9849 ("Packet received: %s [%d bytes omitted]", str.c_str (),
9850 val - max_chars);
9851 else
9852 remote_debug_printf_nofunc ("Packet received: %s",
9853 str.c_str ());
43e526b9 9854 }
a6f3e723
SL
9855
9856 /* Skip the ack char if we're in no-ack mode. */
9857 if (!rs->noack_mode)
c33e31fd 9858 remote_serial_write ("+", 1);
fee9eda9
YQ
9859 if (is_notif != NULL)
9860 *is_notif = 0;
0876f84a 9861 return val;
c906108c
SS
9862 }
9863
74531fed
PA
9864 /* If we got a notification, handle it, and go back to looking
9865 for a packet. */
9866 else
9867 {
9868 gdb_assert (c == '%');
9869
2189c312
SM
9870 remote_debug_printf_nofunc
9871 (" Notification received: %s",
9872 escape_buffer (buf->data (), val).c_str ());
6e5abd65 9873
fee9eda9
YQ
9874 if (is_notif != NULL)
9875 *is_notif = 1;
c906108c 9876
8d64371b 9877 handle_notification (rs->notif_state, buf->data ());
c906108c 9878
74531fed 9879 /* Notifications require no acknowledgement. */
a6f3e723 9880
74531fed 9881 if (expecting_notif)
fee9eda9 9882 return val;
74531fed
PA
9883 }
9884 }
9885}
9886
6b8edb51 9887int
8d64371b 9888remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
74531fed 9889{
8d64371b 9890 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
74531fed
PA
9891}
9892
6b8edb51 9893int
8d64371b 9894remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
6b8edb51 9895 int *is_notif)
74531fed 9896{
8d64371b 9897 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
c906108c 9898}
74531fed 9899
cbb8991c
DB
9900/* Kill any new fork children of process PID that haven't been
9901 processed by follow_fork. */
9902
6b8edb51
PA
9903void
9904remote_target::kill_new_fork_children (int pid)
cbb8991c 9905{
6b8edb51 9906 remote_state *rs = get_remote_state ();
cbb8991c 9907 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
9908
9909 /* Kill the fork child threads of any threads in process PID
9910 that are stopped at a fork event. */
5b6d1e4f 9911 for (thread_info *thread : all_non_exited_threads (this))
cbb8991c
DB
9912 {
9913 struct target_waitstatus *ws = &thread->pending_follow;
9914
9915 if (is_pending_fork_parent (ws, pid, thread->ptid))
9916 {
953edf2b 9917 int child_pid = ws->value.related_pid.pid ();
cbb8991c
DB
9918 int res;
9919
6b8edb51 9920 res = remote_vkill (child_pid);
cbb8991c
DB
9921 if (res != 0)
9922 error (_("Can't kill fork child process %d"), child_pid);
9923 }
9924 }
9925
9926 /* Check for any pending fork events (not reported or processed yet)
9927 in process PID and kill those fork child threads as well. */
9928 remote_notif_get_pending_events (notif);
953edf2b
TT
9929 for (auto &event : rs->stop_reply_queue)
9930 if (is_pending_fork_parent (&event->ws, pid, event->ptid))
9931 {
9932 int child_pid = event->ws.value.related_pid.pid ();
9933 int res;
9934
9935 res = remote_vkill (child_pid);
9936 if (res != 0)
9937 error (_("Can't kill fork child process %d"), child_pid);
9938 }
cbb8991c
DB
9939}
9940
c906108c 9941\f
8020350c
DB
9942/* Target hook to kill the current inferior. */
9943
f6ac5f3d
PA
9944void
9945remote_target::kill ()
43ff13b4 9946{
8020350c 9947 int res = -1;
e99b03dc 9948 int pid = inferior_ptid.pid ();
8020350c 9949 struct remote_state *rs = get_remote_state ();
0fdf84ca 9950
8020350c 9951 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9952 {
8020350c
DB
9953 /* If we're stopped while forking and we haven't followed yet,
9954 kill the child task. We need to do this before killing the
9955 parent task because if this is a vfork then the parent will
9956 be sleeping. */
6b8edb51 9957 kill_new_fork_children (pid);
8020350c 9958
6b8edb51 9959 res = remote_vkill (pid);
8020350c 9960 if (res == 0)
0fdf84ca 9961 {
bc1e6c81 9962 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
9963 return;
9964 }
8020350c 9965 }
0fdf84ca 9966
8020350c
DB
9967 /* If we are in 'target remote' mode and we are killing the only
9968 inferior, then we will tell gdbserver to exit and unpush the
9969 target. */
9970 if (res == -1 && !remote_multi_process_p (rs)
5b6d1e4f 9971 && number_of_live_inferiors (this) == 1)
8020350c
DB
9972 {
9973 remote_kill_k ();
9974
9975 /* We've killed the remote end, we get to mourn it. If we are
9976 not in extended mode, mourning the inferior also unpushes
9977 remote_ops from the target stack, which closes the remote
9978 connection. */
bc1e6c81 9979 target_mourn_inferior (inferior_ptid);
8020350c
DB
9980
9981 return;
0fdf84ca 9982 }
43ff13b4 9983
8020350c 9984 error (_("Can't kill process"));
43ff13b4
JM
9985}
9986
8020350c
DB
9987/* Send a kill request to the target using the 'vKill' packet. */
9988
6b8edb51
PA
9989int
9990remote_target::remote_vkill (int pid)
82f73884 9991{
4082afcc 9992 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
9993 return -1;
9994
6b8edb51
PA
9995 remote_state *rs = get_remote_state ();
9996
82f73884 9997 /* Tell the remote target to detach. */
8d64371b 9998 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
82f73884 9999 putpkt (rs->buf);
8d64371b 10000 getpkt (&rs->buf, 0);
82f73884 10001
4082afcc
PA
10002 switch (packet_ok (rs->buf,
10003 &remote_protocol_packets[PACKET_vKill]))
10004 {
10005 case PACKET_OK:
10006 return 0;
10007 case PACKET_ERROR:
10008 return 1;
10009 case PACKET_UNKNOWN:
10010 return -1;
10011 default:
10012 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
10013 }
82f73884
PA
10014}
10015
8020350c
DB
10016/* Send a kill request to the target using the 'k' packet. */
10017
6b8edb51
PA
10018void
10019remote_target::remote_kill_k ()
82f73884 10020{
8020350c
DB
10021 /* Catch errors so the user can quit from gdb even when we
10022 aren't on speaking terms with the remote system. */
a70b8144 10023 try
82f73884 10024 {
82f73884 10025 putpkt ("k");
82f73884 10026 }
230d2906 10027 catch (const gdb_exception_error &ex)
8020350c
DB
10028 {
10029 if (ex.error == TARGET_CLOSE_ERROR)
10030 {
10031 /* If we got an (EOF) error that caused the target
10032 to go away, then we're done, that's what we wanted.
10033 "k" is susceptible to cause a premature EOF, given
10034 that the remote server isn't actually required to
10035 reply to "k", and it can happen that it doesn't
10036 even get to reply ACK to the "k". */
10037 return;
10038 }
82f73884 10039
8020350c
DB
10040 /* Otherwise, something went wrong. We didn't actually kill
10041 the target. Just propagate the exception, and let the
10042 user or higher layers decide what to do. */
eedc3f4f 10043 throw;
8020350c 10044 }
82f73884
PA
10045}
10046
f6ac5f3d
PA
10047void
10048remote_target::mourn_inferior ()
c906108c 10049{
8020350c 10050 struct remote_state *rs = get_remote_state ();
ce5ce7ed 10051
9607784a
PA
10052 /* We're no longer interested in notification events of an inferior
10053 that exited or was killed/detached. */
10054 discard_pending_stop_replies (current_inferior ());
10055
8020350c 10056 /* In 'target remote' mode with one inferior, we close the connection. */
5b6d1e4f 10057 if (!rs->extended && number_of_live_inferiors (this) <= 1)
8020350c 10058 {
5b6d1e4f 10059 remote_unpush_target (this);
8020350c
DB
10060 return;
10061 }
c906108c 10062
e24a49d8
PA
10063 /* In case we got here due to an error, but we're going to stay
10064 connected. */
10065 rs->waiting_for_stop_reply = 0;
10066
dc1981d7
PA
10067 /* If the current general thread belonged to the process we just
10068 detached from or has exited, the remote side current general
10069 thread becomes undefined. Considering a case like this:
10070
10071 - We just got here due to a detach.
10072 - The process that we're detaching from happens to immediately
10073 report a global breakpoint being hit in non-stop mode, in the
10074 same thread we had selected before.
10075 - GDB attaches to this process again.
10076 - This event happens to be the next event we handle.
10077
10078 GDB would consider that the current general thread didn't need to
10079 be set on the stub side (with Hg), since for all it knew,
10080 GENERAL_THREAD hadn't changed.
10081
10082 Notice that although in all-stop mode, the remote server always
10083 sets the current thread to the thread reporting the stop event,
10084 that doesn't happen in non-stop mode; in non-stop, the stub *must
10085 not* change the current thread when reporting a breakpoint hit,
10086 due to the decoupling of event reporting and event handling.
10087
10088 To keep things simple, we always invalidate our notion of the
10089 current thread. */
47f8a51d 10090 record_currthread (rs, minus_one_ptid);
dc1981d7 10091
8020350c 10092 /* Call common code to mark the inferior as not running. */
48aa3c27 10093 generic_mourn_inferior ();
2d717e4f 10094}
c906108c 10095
57810aa7 10096bool
f6ac5f3d 10097extended_remote_target::supports_disable_randomization ()
03583c20 10098{
4082afcc 10099 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
10100}
10101
6b8edb51
PA
10102void
10103remote_target::extended_remote_disable_randomization (int val)
03583c20
UW
10104{
10105 struct remote_state *rs = get_remote_state ();
10106 char *reply;
10107
8d64371b
TT
10108 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10109 "QDisableRandomization:%x", val);
03583c20 10110 putpkt (rs->buf);
b6bb3468 10111 reply = remote_get_noisy_reply ();
03583c20
UW
10112 if (*reply == '\0')
10113 error (_("Target does not support QDisableRandomization."));
10114 if (strcmp (reply, "OK") != 0)
10115 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
10116}
10117
6b8edb51
PA
10118int
10119remote_target::extended_remote_run (const std::string &args)
2d717e4f
DJ
10120{
10121 struct remote_state *rs = get_remote_state ();
2d717e4f 10122 int len;
94585166 10123 const char *remote_exec_file = get_remote_exec_file ();
c906108c 10124
2d717e4f
DJ
10125 /* If the user has disabled vRun support, or we have detected that
10126 support is not available, do not try it. */
4082afcc 10127 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 10128 return -1;
424163ea 10129
8d64371b
TT
10130 strcpy (rs->buf.data (), "vRun;");
10131 len = strlen (rs->buf.data ());
c906108c 10132
2d717e4f
DJ
10133 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
10134 error (_("Remote file name too long for run packet"));
8d64371b 10135 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
9f1b45b0 10136 strlen (remote_exec_file));
2d717e4f 10137
7c5ded6a 10138 if (!args.empty ())
2d717e4f 10139 {
2d717e4f 10140 int i;
2d717e4f 10141
773a1edc 10142 gdb_argv argv (args.c_str ());
2d717e4f
DJ
10143 for (i = 0; argv[i] != NULL; i++)
10144 {
10145 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
10146 error (_("Argument list too long for run packet"));
10147 rs->buf[len++] = ';';
8d64371b 10148 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
9f1b45b0 10149 strlen (argv[i]));
2d717e4f 10150 }
2d717e4f
DJ
10151 }
10152
10153 rs->buf[len++] = '\0';
10154
10155 putpkt (rs->buf);
8d64371b 10156 getpkt (&rs->buf, 0);
2d717e4f 10157
4082afcc 10158 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 10159 {
4082afcc 10160 case PACKET_OK:
3405876a 10161 /* We have a wait response. All is well. */
2d717e4f 10162 return 0;
4082afcc
PA
10163 case PACKET_UNKNOWN:
10164 return -1;
10165 case PACKET_ERROR:
2d717e4f
DJ
10166 if (remote_exec_file[0] == '\0')
10167 error (_("Running the default executable on the remote target failed; "
10168 "try \"set remote exec-file\"?"));
10169 else
10170 error (_("Running \"%s\" on the remote target failed"),
10171 remote_exec_file);
4082afcc
PA
10172 default:
10173 gdb_assert_not_reached (_("bad switch"));
2d717e4f 10174 }
c906108c
SS
10175}
10176
0a2dde4a
SDJ
10177/* Helper function to send set/unset environment packets. ACTION is
10178 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
10179 or "QEnvironmentUnsetVariable". VALUE is the variable to be
10180 sent. */
10181
6b8edb51
PA
10182void
10183remote_target::send_environment_packet (const char *action,
10184 const char *packet,
10185 const char *value)
0a2dde4a 10186{
6b8edb51
PA
10187 remote_state *rs = get_remote_state ();
10188
0a2dde4a
SDJ
10189 /* Convert the environment variable to an hex string, which
10190 is the best format to be transmitted over the wire. */
10191 std::string encoded_value = bin2hex ((const gdb_byte *) value,
10192 strlen (value));
10193
8d64371b 10194 xsnprintf (rs->buf.data (), get_remote_packet_size (),
0a2dde4a
SDJ
10195 "%s:%s", packet, encoded_value.c_str ());
10196
10197 putpkt (rs->buf);
8d64371b
TT
10198 getpkt (&rs->buf, 0);
10199 if (strcmp (rs->buf.data (), "OK") != 0)
0a2dde4a
SDJ
10200 warning (_("Unable to %s environment variable '%s' on remote."),
10201 action, value);
10202}
10203
10204/* Helper function to handle the QEnvironment* packets. */
10205
6b8edb51
PA
10206void
10207remote_target::extended_remote_environment_support ()
0a2dde4a 10208{
6b8edb51
PA
10209 remote_state *rs = get_remote_state ();
10210
0a2dde4a
SDJ
10211 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10212 {
10213 putpkt ("QEnvironmentReset");
8d64371b
TT
10214 getpkt (&rs->buf, 0);
10215 if (strcmp (rs->buf.data (), "OK") != 0)
0a2dde4a
SDJ
10216 warning (_("Unable to reset environment on remote."));
10217 }
10218
10219 gdb_environ *e = &current_inferior ()->environment;
10220
10221 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10222 for (const std::string &el : e->user_set_env ())
6b8edb51 10223 send_environment_packet ("set", "QEnvironmentHexEncoded",
0a2dde4a
SDJ
10224 el.c_str ());
10225
10226 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10227 for (const std::string &el : e->user_unset_env ())
6b8edb51 10228 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
0a2dde4a
SDJ
10229}
10230
bc3b087d
SDJ
10231/* Helper function to set the current working directory for the
10232 inferior in the remote target. */
10233
6b8edb51
PA
10234void
10235remote_target::extended_remote_set_inferior_cwd ()
bc3b087d
SDJ
10236{
10237 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10238 {
10239 const char *inferior_cwd = get_inferior_cwd ();
6b8edb51 10240 remote_state *rs = get_remote_state ();
bc3b087d
SDJ
10241
10242 if (inferior_cwd != NULL)
10243 {
10244 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10245 strlen (inferior_cwd));
10246
8d64371b 10247 xsnprintf (rs->buf.data (), get_remote_packet_size (),
bc3b087d
SDJ
10248 "QSetWorkingDir:%s", hexpath.c_str ());
10249 }
10250 else
10251 {
10252 /* An empty inferior_cwd means that the user wants us to
10253 reset the remote server's inferior's cwd. */
8d64371b 10254 xsnprintf (rs->buf.data (), get_remote_packet_size (),
bc3b087d
SDJ
10255 "QSetWorkingDir:");
10256 }
10257
10258 putpkt (rs->buf);
8d64371b 10259 getpkt (&rs->buf, 0);
bc3b087d
SDJ
10260 if (packet_ok (rs->buf,
10261 &remote_protocol_packets[PACKET_QSetWorkingDir])
10262 != PACKET_OK)
10263 error (_("\
10264Remote replied unexpectedly while setting the inferior's working\n\
10265directory: %s"),
8d64371b 10266 rs->buf.data ());
bc3b087d
SDJ
10267
10268 }
10269}
10270
2d717e4f
DJ
10271/* In the extended protocol we want to be able to do things like
10272 "run" and have them basically work as expected. So we need
10273 a special create_inferior function. We support changing the
10274 executable file and the command line arguments, but not the
10275 environment. */
10276
f6ac5f3d
PA
10277void
10278extended_remote_target::create_inferior (const char *exec_file,
10279 const std::string &args,
10280 char **env, int from_tty)
43ff13b4 10281{
3405876a
PA
10282 int run_worked;
10283 char *stop_reply;
10284 struct remote_state *rs = get_remote_state ();
94585166 10285 const char *remote_exec_file = get_remote_exec_file ();
3405876a 10286
43ff13b4 10287 /* If running asynchronously, register the target file descriptor
23860348 10288 with the event loop. */
75c99385 10289 if (target_can_async_p ())
6a3753b3 10290 target_async (1);
43ff13b4 10291
03583c20 10292 /* Disable address space randomization if requested (and supported). */
f6ac5f3d 10293 if (supports_disable_randomization ())
03583c20
UW
10294 extended_remote_disable_randomization (disable_randomization);
10295
aefd8b33
SDJ
10296 /* If startup-with-shell is on, we inform gdbserver to start the
10297 remote inferior using a shell. */
10298 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10299 {
8d64371b 10300 xsnprintf (rs->buf.data (), get_remote_packet_size (),
aefd8b33
SDJ
10301 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10302 putpkt (rs->buf);
8d64371b
TT
10303 getpkt (&rs->buf, 0);
10304 if (strcmp (rs->buf.data (), "OK") != 0)
aefd8b33
SDJ
10305 error (_("\
10306Remote replied unexpectedly while setting startup-with-shell: %s"),
8d64371b 10307 rs->buf.data ());
aefd8b33
SDJ
10308 }
10309
6b8edb51 10310 extended_remote_environment_support ();
0a2dde4a 10311
6b8edb51 10312 extended_remote_set_inferior_cwd ();
bc3b087d 10313
43ff13b4 10314 /* Now restart the remote server. */
3405876a
PA
10315 run_worked = extended_remote_run (args) != -1;
10316 if (!run_worked)
2d717e4f
DJ
10317 {
10318 /* vRun was not supported. Fail if we need it to do what the
10319 user requested. */
10320 if (remote_exec_file[0])
10321 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 10322 if (!args.empty ())
65e65158 10323 error (_("Remote target does not support \"set args\" or run ARGS"));
43ff13b4 10324
2d717e4f
DJ
10325 /* Fall back to "R". */
10326 extended_remote_restart ();
10327 }
424163ea 10328
3405876a 10329 /* vRun's success return is a stop reply. */
8d64371b 10330 stop_reply = run_worked ? rs->buf.data () : NULL;
3405876a 10331 add_current_inferior_and_thread (stop_reply);
c0a2216e 10332
2d717e4f
DJ
10333 /* Get updated offsets, if the stub uses qOffsets. */
10334 get_offsets ();
2d717e4f 10335}
c906108c 10336\f
c5aa993b 10337
b775012e
LM
10338/* Given a location's target info BP_TGT and the packet buffer BUF, output
10339 the list of conditions (in agent expression bytecode format), if any, the
10340 target needs to evaluate. The output is placed into the packet buffer
bba74b36 10341 started from BUF and ended at BUF_END. */
b775012e
LM
10342
10343static int
10344remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
10345 struct bp_target_info *bp_tgt, char *buf,
10346 char *buf_end)
b775012e 10347{
3cde5c42 10348 if (bp_tgt->conditions.empty ())
b775012e
LM
10349 return 0;
10350
10351 buf += strlen (buf);
bba74b36 10352 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
10353 buf++;
10354
83621223 10355 /* Send conditions to the target. */
d538e36d 10356 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 10357 {
bba74b36 10358 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 10359 buf += strlen (buf);
3cde5c42 10360 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
10361 buf = pack_hex_byte (buf, aexpr->buf[i]);
10362 *buf = '\0';
10363 }
b775012e
LM
10364 return 0;
10365}
10366
d3ce09f5
SS
10367static void
10368remote_add_target_side_commands (struct gdbarch *gdbarch,
10369 struct bp_target_info *bp_tgt, char *buf)
10370{
3cde5c42 10371 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
10372 return;
10373
10374 buf += strlen (buf);
10375
10376 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10377 buf += strlen (buf);
10378
10379 /* Concatenate all the agent expressions that are commands into the
10380 cmds parameter. */
df97be55 10381 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
10382 {
10383 sprintf (buf, "X%x,", aexpr->len);
10384 buf += strlen (buf);
3cde5c42 10385 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
10386 buf = pack_hex_byte (buf, aexpr->buf[i]);
10387 *buf = '\0';
10388 }
d3ce09f5
SS
10389}
10390
8181d85f
DJ
10391/* Insert a breakpoint. On targets that have software breakpoint
10392 support, we ask the remote target to do the work; on targets
10393 which don't, we insert a traditional memory breakpoint. */
c906108c 10394
f6ac5f3d
PA
10395int
10396remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10397 struct bp_target_info *bp_tgt)
c906108c 10398{
d471ea57
AC
10399 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10400 If it succeeds, then set the support to PACKET_ENABLE. If it
10401 fails, and the user has explicitly requested the Z support then
23860348 10402 report an error, otherwise, mark it disabled and go on. */
802188a7 10403
4082afcc 10404 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10405 {
0d5ed153 10406 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10407 struct remote_state *rs;
bba74b36 10408 char *p, *endbuf;
4fff2411 10409
28439a30
PA
10410 /* Make sure the remote is pointing at the right process, if
10411 necessary. */
10412 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10413 set_general_process ();
10414
4fff2411 10415 rs = get_remote_state ();
8d64371b
TT
10416 p = rs->buf.data ();
10417 endbuf = p + get_remote_packet_size ();
802188a7 10418
96baa820
JM
10419 *(p++) = 'Z';
10420 *(p++) = '0';
10421 *(p++) = ',';
7c0f6dcc 10422 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 10423 p += hexnumstr (p, addr);
579c6ad9 10424 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10425
f6ac5f3d 10426 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10427 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10428
f6ac5f3d 10429 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10430 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10431
6d820c5c 10432 putpkt (rs->buf);
8d64371b 10433 getpkt (&rs->buf, 0);
96baa820 10434
6d820c5c 10435 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 10436 {
d471ea57
AC
10437 case PACKET_ERROR:
10438 return -1;
10439 case PACKET_OK:
10440 return 0;
10441 case PACKET_UNKNOWN:
10442 break;
96baa820
JM
10443 }
10444 }
c906108c 10445
0000e5cc
PA
10446 /* If this breakpoint has target-side commands but this stub doesn't
10447 support Z0 packets, throw error. */
3cde5c42 10448 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
10449 throw_error (NOT_SUPPORTED_ERROR, _("\
10450Target doesn't support breakpoints that have target side commands."));
10451
f6ac5f3d 10452 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
c906108c
SS
10453}
10454
f6ac5f3d
PA
10455int
10456remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10457 struct bp_target_info *bp_tgt,
10458 enum remove_bp_reason reason)
c906108c 10459{
8181d85f 10460 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 10461 struct remote_state *rs = get_remote_state ();
96baa820 10462
4082afcc 10463 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10464 {
8d64371b
TT
10465 char *p = rs->buf.data ();
10466 char *endbuf = p + get_remote_packet_size ();
802188a7 10467
28439a30
PA
10468 /* Make sure the remote is pointing at the right process, if
10469 necessary. */
10470 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10471 set_general_process ();
10472
96baa820
JM
10473 *(p++) = 'z';
10474 *(p++) = '0';
10475 *(p++) = ',';
10476
8181d85f
DJ
10477 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10478 p += hexnumstr (p, addr);
579c6ad9 10479 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10480
6d820c5c 10481 putpkt (rs->buf);
8d64371b 10482 getpkt (&rs->buf, 0);
96baa820 10483
6d820c5c 10484 return (rs->buf[0] == 'E');
96baa820
JM
10485 }
10486
f6ac5f3d 10487 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
c906108c
SS
10488}
10489
f486487f 10490static enum Z_packet_type
d471ea57
AC
10491watchpoint_to_Z_packet (int type)
10492{
10493 switch (type)
10494 {
10495 case hw_write:
bb858e6a 10496 return Z_PACKET_WRITE_WP;
d471ea57
AC
10497 break;
10498 case hw_read:
bb858e6a 10499 return Z_PACKET_READ_WP;
d471ea57
AC
10500 break;
10501 case hw_access:
bb858e6a 10502 return Z_PACKET_ACCESS_WP;
d471ea57
AC
10503 break;
10504 default:
8e65ff28 10505 internal_error (__FILE__, __LINE__,
e2e0b3e5 10506 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
10507 }
10508}
10509
f6ac5f3d
PA
10510int
10511remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10512 enum target_hw_bp_type type, struct expression *cond)
96baa820 10513{
d01949b6 10514 struct remote_state *rs = get_remote_state ();
8d64371b 10515 char *endbuf = rs->buf.data () + get_remote_packet_size ();
e514a9d6 10516 char *p;
d471ea57 10517 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 10518
4082afcc 10519 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 10520 return 1;
802188a7 10521
28439a30
PA
10522 /* Make sure the remote is pointing at the right process, if
10523 necessary. */
10524 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10525 set_general_process ();
10526
8d64371b
TT
10527 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10528 p = strchr (rs->buf.data (), '\0');
96baa820
JM
10529 addr = remote_address_masked (addr);
10530 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10531 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 10532
6d820c5c 10533 putpkt (rs->buf);
8d64371b 10534 getpkt (&rs->buf, 0);
96baa820 10535
6d820c5c 10536 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10537 {
10538 case PACKET_ERROR:
d471ea57 10539 return -1;
85d721b8
PA
10540 case PACKET_UNKNOWN:
10541 return 1;
d471ea57
AC
10542 case PACKET_OK:
10543 return 0;
10544 }
8e65ff28 10545 internal_error (__FILE__, __LINE__,
e2e0b3e5 10546 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
10547}
10548
57810aa7 10549bool
f6ac5f3d
PA
10550remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10551 CORE_ADDR start, int length)
283002cf
MR
10552{
10553 CORE_ADDR diff = remote_address_masked (addr - start);
10554
10555 return diff < length;
10556}
10557
d471ea57 10558
f6ac5f3d
PA
10559int
10560remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10561 enum target_hw_bp_type type, struct expression *cond)
96baa820 10562{
d01949b6 10563 struct remote_state *rs = get_remote_state ();
8d64371b 10564 char *endbuf = rs->buf.data () + get_remote_packet_size ();
e514a9d6 10565 char *p;
d471ea57
AC
10566 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10567
4082afcc 10568 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 10569 return -1;
802188a7 10570
28439a30
PA
10571 /* Make sure the remote is pointing at the right process, if
10572 necessary. */
10573 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10574 set_general_process ();
10575
8d64371b
TT
10576 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10577 p = strchr (rs->buf.data (), '\0');
96baa820
JM
10578 addr = remote_address_masked (addr);
10579 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10580 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c 10581 putpkt (rs->buf);
8d64371b 10582 getpkt (&rs->buf, 0);
96baa820 10583
6d820c5c 10584 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10585 {
10586 case PACKET_ERROR:
10587 case PACKET_UNKNOWN:
10588 return -1;
10589 case PACKET_OK:
10590 return 0;
10591 }
8e65ff28 10592 internal_error (__FILE__, __LINE__,
e2e0b3e5 10593 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
10594}
10595
3c3bea1c 10596
60fcc1c3
TT
10597static int remote_hw_watchpoint_limit = -1;
10598static int remote_hw_watchpoint_length_limit = -1;
10599static int remote_hw_breakpoint_limit = -1;
d471ea57 10600
f6ac5f3d
PA
10601int
10602remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
480a3f21
PW
10603{
10604 if (remote_hw_watchpoint_length_limit == 0)
10605 return 0;
10606 else if (remote_hw_watchpoint_length_limit < 0)
10607 return 1;
10608 else if (len <= remote_hw_watchpoint_length_limit)
10609 return 1;
10610 else
10611 return 0;
10612}
10613
f6ac5f3d
PA
10614int
10615remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
96baa820 10616{
3c3bea1c
GS
10617 if (type == bp_hardware_breakpoint)
10618 {
10619 if (remote_hw_breakpoint_limit == 0)
10620 return 0;
501eef12
AC
10621 else if (remote_hw_breakpoint_limit < 0)
10622 return 1;
3c3bea1c
GS
10623 else if (cnt <= remote_hw_breakpoint_limit)
10624 return 1;
10625 }
10626 else
10627 {
10628 if (remote_hw_watchpoint_limit == 0)
10629 return 0;
501eef12
AC
10630 else if (remote_hw_watchpoint_limit < 0)
10631 return 1;
3c3bea1c
GS
10632 else if (ot)
10633 return -1;
10634 else if (cnt <= remote_hw_watchpoint_limit)
10635 return 1;
10636 }
10637 return -1;
10638}
10639
f7e6eed5
PA
10640/* The to_stopped_by_sw_breakpoint method of target remote. */
10641
57810aa7 10642bool
f6ac5f3d 10643remote_target::stopped_by_sw_breakpoint ()
f7e6eed5 10644{
799a2abe 10645 struct thread_info *thread = inferior_thread ();
f7e6eed5 10646
799a2abe 10647 return (thread->priv != NULL
7aabaf9d
SM
10648 && (get_remote_thread_info (thread)->stop_reason
10649 == TARGET_STOPPED_BY_SW_BREAKPOINT));
f7e6eed5
PA
10650}
10651
10652/* The to_supports_stopped_by_sw_breakpoint method of target
10653 remote. */
10654
57810aa7 10655bool
f6ac5f3d 10656remote_target::supports_stopped_by_sw_breakpoint ()
f7e6eed5 10657{
f7e6eed5
PA
10658 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10659}
10660
10661/* The to_stopped_by_hw_breakpoint method of target remote. */
10662
57810aa7 10663bool
f6ac5f3d 10664remote_target::stopped_by_hw_breakpoint ()
f7e6eed5 10665{
799a2abe 10666 struct thread_info *thread = inferior_thread ();
f7e6eed5 10667
799a2abe 10668 return (thread->priv != NULL
7aabaf9d
SM
10669 && (get_remote_thread_info (thread)->stop_reason
10670 == TARGET_STOPPED_BY_HW_BREAKPOINT));
f7e6eed5
PA
10671}
10672
10673/* The to_supports_stopped_by_hw_breakpoint method of target
10674 remote. */
10675
57810aa7 10676bool
f6ac5f3d 10677remote_target::supports_stopped_by_hw_breakpoint ()
f7e6eed5 10678{
f7e6eed5
PA
10679 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10680}
10681
57810aa7 10682bool
f6ac5f3d 10683remote_target::stopped_by_watchpoint ()
3c3bea1c 10684{
799a2abe 10685 struct thread_info *thread = inferior_thread ();
ee154bee 10686
799a2abe 10687 return (thread->priv != NULL
7aabaf9d
SM
10688 && (get_remote_thread_info (thread)->stop_reason
10689 == TARGET_STOPPED_BY_WATCHPOINT));
3c3bea1c
GS
10690}
10691
57810aa7 10692bool
f6ac5f3d 10693remote_target::stopped_data_address (CORE_ADDR *addr_p)
3c3bea1c 10694{
799a2abe 10695 struct thread_info *thread = inferior_thread ();
a744cf53 10696
799a2abe 10697 if (thread->priv != NULL
7aabaf9d
SM
10698 && (get_remote_thread_info (thread)->stop_reason
10699 == TARGET_STOPPED_BY_WATCHPOINT))
4aa7a7f5 10700 {
7aabaf9d 10701 *addr_p = get_remote_thread_info (thread)->watch_data_address;
57810aa7 10702 return true;
4aa7a7f5
JJ
10703 }
10704
57810aa7 10705 return false;
3c3bea1c
GS
10706}
10707
10708
f6ac5f3d
PA
10709int
10710remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10711 struct bp_target_info *bp_tgt)
3c3bea1c 10712{
0d5ed153 10713 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10714 struct remote_state *rs;
bba74b36 10715 char *p, *endbuf;
dd61ec5c 10716 char *message;
3c3bea1c 10717
4082afcc 10718 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10719 return -1;
2bc416ba 10720
28439a30
PA
10721 /* Make sure the remote is pointing at the right process, if
10722 necessary. */
10723 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10724 set_general_process ();
10725
4fff2411 10726 rs = get_remote_state ();
8d64371b
TT
10727 p = rs->buf.data ();
10728 endbuf = p + get_remote_packet_size ();
4fff2411 10729
96baa820
JM
10730 *(p++) = 'Z';
10731 *(p++) = '1';
10732 *(p++) = ',';
802188a7 10733
0d5ed153 10734 addr = remote_address_masked (addr);
96baa820 10735 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10736 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10737
f6ac5f3d 10738 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10739 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10740
f6ac5f3d 10741 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10742 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10743
6d820c5c 10744 putpkt (rs->buf);
8d64371b 10745 getpkt (&rs->buf, 0);
96baa820 10746
6d820c5c 10747 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10748 {
10749 case PACKET_ERROR:
dd61ec5c 10750 if (rs->buf[1] == '.')
dda83cd7
SM
10751 {
10752 message = strchr (&rs->buf[2], '.');
10753 if (message)
10754 error (_("Remote failure reply: %s"), message + 1);
10755 }
dd61ec5c 10756 return -1;
d471ea57
AC
10757 case PACKET_UNKNOWN:
10758 return -1;
10759 case PACKET_OK:
10760 return 0;
10761 }
8e65ff28 10762 internal_error (__FILE__, __LINE__,
e2e0b3e5 10763 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10764}
10765
d471ea57 10766
f6ac5f3d
PA
10767int
10768remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10769 struct bp_target_info *bp_tgt)
96baa820 10770{
8181d85f 10771 CORE_ADDR addr;
d01949b6 10772 struct remote_state *rs = get_remote_state ();
8d64371b
TT
10773 char *p = rs->buf.data ();
10774 char *endbuf = p + get_remote_packet_size ();
c8189ed1 10775
4082afcc 10776 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10777 return -1;
802188a7 10778
28439a30
PA
10779 /* Make sure the remote is pointing at the right process, if
10780 necessary. */
10781 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10782 set_general_process ();
10783
96baa820
JM
10784 *(p++) = 'z';
10785 *(p++) = '1';
10786 *(p++) = ',';
802188a7 10787
8181d85f 10788 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10789 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10790 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10791
6d820c5c 10792 putpkt (rs->buf);
8d64371b 10793 getpkt (&rs->buf, 0);
802188a7 10794
6d820c5c 10795 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10796 {
10797 case PACKET_ERROR:
10798 case PACKET_UNKNOWN:
10799 return -1;
10800 case PACKET_OK:
10801 return 0;
10802 }
8e65ff28 10803 internal_error (__FILE__, __LINE__,
e2e0b3e5 10804 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10805}
96baa820 10806
4a5e7a5b
PA
10807/* Verify memory using the "qCRC:" request. */
10808
f6ac5f3d
PA
10809int
10810remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
4a5e7a5b
PA
10811{
10812 struct remote_state *rs = get_remote_state ();
10813 unsigned long host_crc, target_crc;
10814 char *tmp;
10815
936d2992
PA
10816 /* It doesn't make sense to use qCRC if the remote target is
10817 connected but not running. */
55f6301a
TT
10818 if (target_has_execution ()
10819 && packet_support (PACKET_qCRC) != PACKET_DISABLE)
936d2992
PA
10820 {
10821 enum packet_result result;
28439a30 10822
936d2992
PA
10823 /* Make sure the remote is pointing at the right process. */
10824 set_general_process ();
4a5e7a5b 10825
936d2992 10826 /* FIXME: assumes lma can fit into long. */
8d64371b 10827 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
936d2992
PA
10828 (long) lma, (long) size);
10829 putpkt (rs->buf);
4a5e7a5b 10830
936d2992
PA
10831 /* Be clever; compute the host_crc before waiting for target
10832 reply. */
10833 host_crc = xcrc32 (data, size, 0xffffffff);
10834
8d64371b 10835 getpkt (&rs->buf, 0);
4a5e7a5b 10836
936d2992
PA
10837 result = packet_ok (rs->buf,
10838 &remote_protocol_packets[PACKET_qCRC]);
10839 if (result == PACKET_ERROR)
10840 return -1;
10841 else if (result == PACKET_OK)
10842 {
10843 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10844 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10845
936d2992
PA
10846 return (host_crc == target_crc);
10847 }
10848 }
4a5e7a5b 10849
f6ac5f3d 10850 return simple_verify_memory (this, data, lma, size);
4a5e7a5b
PA
10851}
10852
c906108c
SS
10853/* compare-sections command
10854
10855 With no arguments, compares each loadable section in the exec bfd
10856 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10857 Useful for verifying the image on the target against the exec file. */
e514a9d6 10858
c906108c 10859static void
ac88e2de 10860compare_sections_command (const char *args, int from_tty)
c906108c
SS
10861{
10862 asection *s;
ce359b09 10863 const char *sectname;
c906108c
SS
10864 bfd_size_type size;
10865 bfd_vma lma;
10866 int matched = 0;
10867 int mismatched = 0;
4a5e7a5b 10868 int res;
95cf3b38 10869 int read_only = 0;
c906108c 10870
7e10abd1 10871 if (!current_program_space->exec_bfd ())
8a3fe4f8 10872 error (_("command cannot be used without an exec file"));
c906108c 10873
95cf3b38
DT
10874 if (args != NULL && strcmp (args, "-r") == 0)
10875 {
10876 read_only = 1;
10877 args = NULL;
10878 }
10879
7e10abd1 10880 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
c906108c
SS
10881 {
10882 if (!(s->flags & SEC_LOAD))
0df8b418 10883 continue; /* Skip non-loadable section. */
c906108c 10884
95cf3b38
DT
10885 if (read_only && (s->flags & SEC_READONLY) == 0)
10886 continue; /* Skip writeable sections */
10887
fd361982 10888 size = bfd_section_size (s);
c906108c 10889 if (size == 0)
0df8b418 10890 continue; /* Skip zero-length section. */
c906108c 10891
fd361982 10892 sectname = bfd_section_name (s);
c906108c 10893 if (args && strcmp (args, sectname) != 0)
0df8b418 10894 continue; /* Not the section selected by user. */
c906108c 10895
0df8b418 10896 matched = 1; /* Do this section. */
c906108c 10897 lma = s->lma;
c906108c 10898
b80406ac 10899 gdb::byte_vector sectdata (size);
7e10abd1
TT
10900 bfd_get_section_contents (current_program_space->exec_bfd (), s,
10901 sectdata.data (), 0, size);
c906108c 10902
b80406ac 10903 res = target_verify_memory (sectdata.data (), lma, size);
4a5e7a5b
PA
10904
10905 if (res == -1)
5af949e3 10906 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10907 paddress (target_gdbarch (), lma),
10908 paddress (target_gdbarch (), lma + size));
c906108c 10909
5af949e3 10910 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10911 paddress (target_gdbarch (), lma),
10912 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10913 if (res)
c906108c
SS
10914 printf_filtered ("matched.\n");
10915 else
c5aa993b
JM
10916 {
10917 printf_filtered ("MIS-MATCHED!\n");
10918 mismatched++;
10919 }
c906108c
SS
10920 }
10921 if (mismatched > 0)
936d2992 10922 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10923the loaded file\n"));
c906108c 10924 if (args && !matched)
a3f17187 10925 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10926}
10927
0e7f50da
UW
10928/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10929 into remote target. The number of bytes written to the remote
10930 target is returned, or -1 for error. */
10931
6b8edb51
PA
10932target_xfer_status
10933remote_target::remote_write_qxfer (const char *object_name,
10934 const char *annex, const gdb_byte *writebuf,
10935 ULONGEST offset, LONGEST len,
10936 ULONGEST *xfered_len,
10937 struct packet_config *packet)
0e7f50da
UW
10938{
10939 int i, buf_len;
10940 ULONGEST n;
0e7f50da
UW
10941 struct remote_state *rs = get_remote_state ();
10942 int max_size = get_memory_write_packet_size ();
10943
7cc244de 10944 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10945 return TARGET_XFER_E_IO;
0e7f50da
UW
10946
10947 /* Insert header. */
8d64371b 10948 i = snprintf (rs->buf.data (), max_size,
0e7f50da
UW
10949 "qXfer:%s:write:%s:%s:",
10950 object_name, annex ? annex : "",
10951 phex_nz (offset, sizeof offset));
10952 max_size -= (i + 1);
10953
10954 /* Escape as much data as fits into rs->buf. */
10955 buf_len = remote_escape_output
8d64371b 10956 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
0e7f50da 10957
8d64371b
TT
10958 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
10959 || getpkt_sane (&rs->buf, 0) < 0
0e7f50da 10960 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10961 return TARGET_XFER_E_IO;
0e7f50da 10962
8d64371b 10963 unpack_varlen_hex (rs->buf.data (), &n);
9b409511
YQ
10964
10965 *xfered_len = n;
92ffd475 10966 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
0e7f50da
UW
10967}
10968
0876f84a
DJ
10969/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10970 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10971 number of bytes read is returned, or 0 for EOF, or -1 for error.
10972 The number of bytes read may be less than LEN without indicating an
10973 EOF. PACKET is checked and updated to indicate whether the remote
10974 target supports this object. */
10975
6b8edb51
PA
10976target_xfer_status
10977remote_target::remote_read_qxfer (const char *object_name,
10978 const char *annex,
10979 gdb_byte *readbuf, ULONGEST offset,
10980 LONGEST len,
10981 ULONGEST *xfered_len,
10982 struct packet_config *packet)
0876f84a 10983{
0876f84a 10984 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
10985 LONGEST i, n, packet_len;
10986
7cc244de 10987 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10988 return TARGET_XFER_E_IO;
0876f84a
DJ
10989
10990 /* Check whether we've cached an end-of-object packet that matches
10991 this request. */
8e88304f 10992 if (rs->finished_object)
0876f84a 10993 {
8e88304f
TT
10994 if (strcmp (object_name, rs->finished_object) == 0
10995 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10996 && offset == rs->finished_offset)
9b409511
YQ
10997 return TARGET_XFER_EOF;
10998
0876f84a
DJ
10999
11000 /* Otherwise, we're now reading something different. Discard
11001 the cache. */
8e88304f
TT
11002 xfree (rs->finished_object);
11003 xfree (rs->finished_annex);
11004 rs->finished_object = NULL;
11005 rs->finished_annex = NULL;
0876f84a
DJ
11006 }
11007
11008 /* Request only enough to fit in a single packet. The actual data
11009 may not, since we don't know how much of it will need to be escaped;
11010 the target is free to respond with slightly less data. We subtract
11011 five to account for the response type and the protocol frame. */
768adc05 11012 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
8d64371b
TT
11013 snprintf (rs->buf.data (), get_remote_packet_size () - 4,
11014 "qXfer:%s:read:%s:%s,%s",
0876f84a
DJ
11015 object_name, annex ? annex : "",
11016 phex_nz (offset, sizeof offset),
11017 phex_nz (n, sizeof n));
11018 i = putpkt (rs->buf);
11019 if (i < 0)
2ed4b548 11020 return TARGET_XFER_E_IO;
0876f84a
DJ
11021
11022 rs->buf[0] = '\0';
8d64371b 11023 packet_len = getpkt_sane (&rs->buf, 0);
0876f84a 11024 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 11025 return TARGET_XFER_E_IO;
0876f84a
DJ
11026
11027 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
8d64371b 11028 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
0876f84a
DJ
11029
11030 /* 'm' means there is (or at least might be) more data after this
11031 batch. That does not make sense unless there's at least one byte
11032 of data in this reply. */
11033 if (rs->buf[0] == 'm' && packet_len == 1)
11034 error (_("Remote qXfer reply contained no data."));
11035
11036 /* Got some data. */
8d64371b 11037 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
bc20a4af 11038 packet_len - 1, readbuf, n);
0876f84a
DJ
11039
11040 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
11041 or possibly empty. If we have the final block of a non-empty
11042 object, record this fact to bypass a subsequent partial read. */
11043 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 11044 {
8e88304f
TT
11045 rs->finished_object = xstrdup (object_name);
11046 rs->finished_annex = xstrdup (annex ? annex : "");
11047 rs->finished_offset = offset + i;
0876f84a
DJ
11048 }
11049
9b409511
YQ
11050 if (i == 0)
11051 return TARGET_XFER_EOF;
11052 else
11053 {
11054 *xfered_len = i;
11055 return TARGET_XFER_OK;
11056 }
0876f84a
DJ
11057}
11058
f6ac5f3d
PA
11059enum target_xfer_status
11060remote_target::xfer_partial (enum target_object object,
11061 const char *annex, gdb_byte *readbuf,
11062 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
11063 ULONGEST *xfered_len)
c906108c 11064{
82f73884 11065 struct remote_state *rs;
c906108c 11066 int i;
6d820c5c 11067 char *p2;
1e3ff5ad 11068 char query_type;
124e13d9 11069 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 11070
e6e4e701 11071 set_remote_traceframe ();
82f73884
PA
11072 set_general_thread (inferior_ptid);
11073
11074 rs = get_remote_state ();
11075
b2182ed2 11076 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
11077 if (object == TARGET_OBJECT_MEMORY)
11078 {
2d717e4f
DJ
11079 /* If the remote target is connected but not running, we should
11080 pass this request down to a lower stratum (e.g. the executable
11081 file). */
55f6301a 11082 if (!target_has_execution ())
9b409511 11083 return TARGET_XFER_EOF;
2d717e4f 11084
21e3b9b9 11085 if (writebuf != NULL)
124e13d9
SM
11086 return remote_write_bytes (offset, writebuf, len, unit_size,
11087 xfered_len);
21e3b9b9 11088 else
6b8edb51 11089 return remote_read_bytes (offset, readbuf, len, unit_size,
124e13d9 11090 xfered_len);
21e3b9b9
DJ
11091 }
11092
4aa995e1
PA
11093 /* Handle extra signal info using qxfer packets. */
11094 if (object == TARGET_OBJECT_SIGNAL_INFO)
11095 {
11096 if (readbuf)
f6ac5f3d 11097 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
9b409511 11098 xfered_len, &remote_protocol_packets
4aa995e1
PA
11099 [PACKET_qXfer_siginfo_read]);
11100 else
f6ac5f3d 11101 return remote_write_qxfer ("siginfo", annex,
9b409511 11102 writebuf, offset, len, xfered_len,
4aa995e1
PA
11103 &remote_protocol_packets
11104 [PACKET_qXfer_siginfo_write]);
11105 }
11106
0fb4aa4b
PA
11107 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
11108 {
11109 if (readbuf)
f6ac5f3d 11110 return remote_read_qxfer ("statictrace", annex,
9b409511 11111 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
11112 &remote_protocol_packets
11113 [PACKET_qXfer_statictrace_read]);
11114 else
2ed4b548 11115 return TARGET_XFER_E_IO;
0fb4aa4b
PA
11116 }
11117
a76d924d
DJ
11118 /* Only handle flash writes. */
11119 if (writebuf != NULL)
11120 {
a76d924d
DJ
11121 switch (object)
11122 {
11123 case TARGET_OBJECT_FLASH:
6b8edb51 11124 return remote_flash_write (offset, len, xfered_len,
9b409511 11125 writebuf);
a76d924d
DJ
11126
11127 default:
2ed4b548 11128 return TARGET_XFER_E_IO;
a76d924d
DJ
11129 }
11130 }
4b8a223f 11131
1e3ff5ad
AC
11132 /* Map pre-existing objects onto letters. DO NOT do this for new
11133 objects!!! Instead specify new query packets. */
11134 switch (object)
c906108c 11135 {
1e3ff5ad
AC
11136 case TARGET_OBJECT_AVR:
11137 query_type = 'R';
11138 break;
802188a7
RM
11139
11140 case TARGET_OBJECT_AUXV:
0876f84a 11141 gdb_assert (annex == NULL);
f6ac5f3d 11142 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
9b409511 11143 xfered_len,
0876f84a 11144 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 11145
23181151
DJ
11146 case TARGET_OBJECT_AVAILABLE_FEATURES:
11147 return remote_read_qxfer
f6ac5f3d 11148 ("features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
11149 &remote_protocol_packets[PACKET_qXfer_features]);
11150
cfa9d6d9
DJ
11151 case TARGET_OBJECT_LIBRARIES:
11152 return remote_read_qxfer
f6ac5f3d 11153 ("libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
11154 &remote_protocol_packets[PACKET_qXfer_libraries]);
11155
2268b414
JK
11156 case TARGET_OBJECT_LIBRARIES_SVR4:
11157 return remote_read_qxfer
f6ac5f3d 11158 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
11159 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
11160
fd79ecee
DJ
11161 case TARGET_OBJECT_MEMORY_MAP:
11162 gdb_assert (annex == NULL);
f6ac5f3d 11163 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
9b409511 11164 xfered_len,
fd79ecee
DJ
11165 &remote_protocol_packets[PACKET_qXfer_memory_map]);
11166
07e059b5
VP
11167 case TARGET_OBJECT_OSDATA:
11168 /* Should only get here if we're connected. */
5d93a237 11169 gdb_assert (rs->remote_desc);
07e059b5 11170 return remote_read_qxfer
f6ac5f3d 11171 ("osdata", annex, readbuf, offset, len, xfered_len,
dda83cd7 11172 &remote_protocol_packets[PACKET_qXfer_osdata]);
07e059b5 11173
dc146f7c
VP
11174 case TARGET_OBJECT_THREADS:
11175 gdb_assert (annex == NULL);
f6ac5f3d 11176 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
9b409511 11177 xfered_len,
dc146f7c
VP
11178 &remote_protocol_packets[PACKET_qXfer_threads]);
11179
b3b9301e
PA
11180 case TARGET_OBJECT_TRACEFRAME_INFO:
11181 gdb_assert (annex == NULL);
11182 return remote_read_qxfer
f6ac5f3d 11183 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 11184 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
11185
11186 case TARGET_OBJECT_FDPIC:
f6ac5f3d 11187 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
9b409511 11188 xfered_len,
78d85199 11189 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
11190
11191 case TARGET_OBJECT_OPENVMS_UIB:
f6ac5f3d 11192 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
9b409511 11193 xfered_len,
169081d0
TG
11194 &remote_protocol_packets[PACKET_qXfer_uib]);
11195
9accd112 11196 case TARGET_OBJECT_BTRACE:
f6ac5f3d 11197 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
9b409511 11198 xfered_len,
dda83cd7 11199 &remote_protocol_packets[PACKET_qXfer_btrace]);
9accd112 11200
f4abbc16 11201 case TARGET_OBJECT_BTRACE_CONF:
f6ac5f3d 11202 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
f4abbc16
MM
11203 len, xfered_len,
11204 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11205
c78fa86a 11206 case TARGET_OBJECT_EXEC_FILE:
f6ac5f3d 11207 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
c78fa86a
GB
11208 len, xfered_len,
11209 &remote_protocol_packets[PACKET_qXfer_exec_file]);
11210
1e3ff5ad 11211 default:
2ed4b548 11212 return TARGET_XFER_E_IO;
c906108c
SS
11213 }
11214
0df8b418 11215 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 11216 large enough let the caller deal with it. */
ea9c271d 11217 if (len < get_remote_packet_size ())
2ed4b548 11218 return TARGET_XFER_E_IO;
ea9c271d 11219 len = get_remote_packet_size ();
1e3ff5ad 11220
23860348 11221 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 11222 if (!rs->remote_desc)
8a3fe4f8 11223 error (_("remote query is only available after target open"));
c906108c 11224
1e3ff5ad 11225 gdb_assert (annex != NULL);
4b8a223f 11226 gdb_assert (readbuf != NULL);
c906108c 11227
8d64371b 11228 p2 = rs->buf.data ();
c906108c
SS
11229 *p2++ = 'q';
11230 *p2++ = query_type;
11231
23860348
MS
11232 /* We used one buffer char for the remote protocol q command and
11233 another for the query type. As the remote protocol encapsulation
11234 uses 4 chars plus one extra in case we are debugging
11235 (remote_debug), we have PBUFZIZ - 7 left to pack the query
11236 string. */
c906108c 11237 i = 0;
ea9c271d 11238 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 11239 {
1e3ff5ad
AC
11240 /* Bad caller may have sent forbidden characters. */
11241 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11242 *p2++ = annex[i];
c906108c
SS
11243 i++;
11244 }
1e3ff5ad
AC
11245 *p2 = '\0';
11246 gdb_assert (annex[i] == '\0');
c906108c 11247
6d820c5c 11248 i = putpkt (rs->buf);
c5aa993b 11249 if (i < 0)
2ed4b548 11250 return TARGET_XFER_E_IO;
c906108c 11251
8d64371b
TT
11252 getpkt (&rs->buf, 0);
11253 strcpy ((char *) readbuf, rs->buf.data ());
c906108c 11254
9b409511 11255 *xfered_len = strlen ((char *) readbuf);
92ffd475 11256 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
11257}
11258
09c98b44
DB
11259/* Implementation of to_get_memory_xfer_limit. */
11260
f6ac5f3d
PA
11261ULONGEST
11262remote_target::get_memory_xfer_limit ()
09c98b44
DB
11263{
11264 return get_memory_write_packet_size ();
11265}
11266
f6ac5f3d
PA
11267int
11268remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11269 const gdb_byte *pattern, ULONGEST pattern_len,
11270 CORE_ADDR *found_addrp)
08388c79 11271{
f5656ead 11272 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
11273 struct remote_state *rs = get_remote_state ();
11274 int max_size = get_memory_write_packet_size ();
11275 struct packet_config *packet =
11276 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
11277 /* Number of packet bytes used to encode the pattern;
11278 this could be more than PATTERN_LEN due to escape characters. */
08388c79 11279 int escaped_pattern_len;
0df8b418 11280 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
11281 int used_pattern_len;
11282 int i;
11283 int found;
11284 ULONGEST found_addr;
11285
4a72de73
TT
11286 auto read_memory = [=] (CORE_ADDR addr, gdb_byte *result, size_t len)
11287 {
11288 return (target_read (this, TARGET_OBJECT_MEMORY, NULL, result, addr, len)
11289 == len);
11290 };
11291
7cc244de
PA
11292 /* Don't go to the target if we don't have to. This is done before
11293 checking packet_config_support to avoid the possibility that a
11294 success for this edge case means the facility works in
11295 general. */
08388c79
DE
11296 if (pattern_len > search_space_len)
11297 return 0;
11298 if (pattern_len == 0)
11299 {
11300 *found_addrp = start_addr;
11301 return 1;
11302 }
11303
11304 /* If we already know the packet isn't supported, fall back to the simple
11305 way of searching memory. */
11306
4082afcc 11307 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
11308 {
11309 /* Target doesn't provided special support, fall back and use the
11310 standard support (copy memory and do the search here). */
4a72de73 11311 return simple_search_memory (read_memory, start_addr, search_space_len,
08388c79
DE
11312 pattern, pattern_len, found_addrp);
11313 }
11314
28439a30
PA
11315 /* Make sure the remote is pointing at the right process. */
11316 set_general_process ();
11317
08388c79 11318 /* Insert header. */
8d64371b 11319 i = snprintf (rs->buf.data (), max_size,
08388c79 11320 "qSearch:memory:%s;%s;",
5af949e3 11321 phex_nz (start_addr, addr_size),
08388c79
DE
11322 phex_nz (search_space_len, sizeof (search_space_len)));
11323 max_size -= (i + 1);
11324
11325 /* Escape as much data as fits into rs->buf. */
11326 escaped_pattern_len =
8d64371b
TT
11327 remote_escape_output (pattern, pattern_len, 1,
11328 (gdb_byte *) rs->buf.data () + i,
08388c79
DE
11329 &used_pattern_len, max_size);
11330
11331 /* Bail if the pattern is too large. */
11332 if (used_pattern_len != pattern_len)
9b20d036 11333 error (_("Pattern is too large to transmit to remote target."));
08388c79 11334
8d64371b
TT
11335 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11336 || getpkt_sane (&rs->buf, 0) < 0
08388c79
DE
11337 || packet_ok (rs->buf, packet) != PACKET_OK)
11338 {
11339 /* The request may not have worked because the command is not
11340 supported. If so, fall back to the simple way. */
7cc244de 11341 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79 11342 {
4a72de73 11343 return simple_search_memory (read_memory, start_addr, search_space_len,
08388c79
DE
11344 pattern, pattern_len, found_addrp);
11345 }
11346 return -1;
11347 }
11348
11349 if (rs->buf[0] == '0')
11350 found = 0;
11351 else if (rs->buf[0] == '1')
11352 {
11353 found = 1;
11354 if (rs->buf[1] != ',')
8d64371b
TT
11355 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11356 unpack_varlen_hex (&rs->buf[2], &found_addr);
08388c79
DE
11357 *found_addrp = found_addr;
11358 }
11359 else
8d64371b 11360 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
08388c79
DE
11361
11362 return found;
11363}
11364
f6ac5f3d
PA
11365void
11366remote_target::rcmd (const char *command, struct ui_file *outbuf)
96baa820 11367{
d01949b6 11368 struct remote_state *rs = get_remote_state ();
8d64371b 11369 char *p = rs->buf.data ();
96baa820 11370
5d93a237 11371 if (!rs->remote_desc)
8a3fe4f8 11372 error (_("remote rcmd is only available after target open"));
96baa820 11373
23860348 11374 /* Send a NULL command across as an empty command. */
7be570e7
JM
11375 if (command == NULL)
11376 command = "";
11377
23860348 11378 /* The query prefix. */
8d64371b
TT
11379 strcpy (rs->buf.data (), "qRcmd,");
11380 p = strchr (rs->buf.data (), '\0');
96baa820 11381
8d64371b 11382 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
3e43a32a 11383 > get_remote_packet_size ())
8a3fe4f8 11384 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 11385
23860348 11386 /* Encode the actual command. */
a30bf1f1 11387 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 11388
6d820c5c 11389 if (putpkt (rs->buf) < 0)
8a3fe4f8 11390 error (_("Communication problem with target."));
96baa820
JM
11391
11392 /* get/display the response */
11393 while (1)
11394 {
2e9f7625
DJ
11395 char *buf;
11396
00bf0b85 11397 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 11398 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 11399 rs->buf[0] = '\0';
8d64371b 11400 if (getpkt_sane (&rs->buf, 0) == -1)
dda83cd7
SM
11401 {
11402 /* Timeout. Continue to (try to) read responses.
11403 This is better than stopping with an error, assuming the stub
11404 is still executing the (long) monitor command.
11405 If needed, the user can interrupt gdb using C-c, obtaining
11406 an effect similar to stop on timeout. */
11407 continue;
11408 }
8d64371b 11409 buf = rs->buf.data ();
96baa820 11410 if (buf[0] == '\0')
8a3fe4f8 11411 error (_("Target does not support this command."));
96baa820
JM
11412 if (buf[0] == 'O' && buf[1] != 'K')
11413 {
23860348 11414 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
11415 continue;
11416 }
11417 if (strcmp (buf, "OK") == 0)
11418 break;
7be570e7
JM
11419 if (strlen (buf) == 3 && buf[0] == 'E'
11420 && isdigit (buf[1]) && isdigit (buf[2]))
11421 {
8a3fe4f8 11422 error (_("Protocol error with Rcmd"));
7be570e7 11423 }
96baa820
JM
11424 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11425 {
11426 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 11427
96baa820
JM
11428 fputc_unfiltered (c, outbuf);
11429 }
11430 break;
11431 }
11432}
11433
f6ac5f3d
PA
11434std::vector<mem_region>
11435remote_target::memory_map ()
fd79ecee 11436{
a664f67e 11437 std::vector<mem_region> result;
9018be22 11438 gdb::optional<gdb::char_vector> text
8b88a78e 11439 = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
fd79ecee
DJ
11440
11441 if (text)
9018be22 11442 result = parse_memory_map (text->data ());
fd79ecee
DJ
11443
11444 return result;
11445}
11446
c906108c 11447static void
ac88e2de 11448packet_command (const char *args, int from_tty)
c906108c 11449{
6b8edb51 11450 remote_target *remote = get_current_remote_target ();
c906108c 11451
6b8edb51 11452 if (remote == nullptr)
8a3fe4f8 11453 error (_("command can only be used with remote target"));
c906108c 11454
6b8edb51
PA
11455 remote->packet_command (args, from_tty);
11456}
11457
11458void
11459remote_target::packet_command (const char *args, int from_tty)
11460{
c5aa993b 11461 if (!args)
8a3fe4f8 11462 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
11463
11464 puts_filtered ("sending: ");
11465 print_packet (args);
11466 puts_filtered ("\n");
11467 putpkt (args);
11468
6b8edb51
PA
11469 remote_state *rs = get_remote_state ();
11470
8d64371b 11471 getpkt (&rs->buf, 0);
c906108c 11472 puts_filtered ("received: ");
8d64371b 11473 print_packet (rs->buf.data ());
c906108c
SS
11474 puts_filtered ("\n");
11475}
11476
11477#if 0
23860348 11478/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 11479
a14ed312 11480static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 11481
a14ed312 11482static void threadset_test_cmd (char *cmd, int tty);
c906108c 11483
a14ed312 11484static void threadalive_test (char *cmd, int tty);
c906108c 11485
a14ed312 11486static void threadlist_test_cmd (char *cmd, int tty);
c906108c 11487
23860348 11488int get_and_display_threadinfo (threadref *ref);
c906108c 11489
a14ed312 11490static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 11491
23860348 11492static int thread_display_step (threadref *ref, void *context);
c906108c 11493
a14ed312 11494static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 11495
a14ed312 11496static void init_remote_threadtests (void);
c906108c 11497
23860348 11498#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
11499
11500static void
0b39b52e 11501threadset_test_cmd (const char *cmd, int tty)
c906108c
SS
11502{
11503 int sample_thread = SAMPLE_THREAD;
11504
a3f17187 11505 printf_filtered (_("Remote threadset test\n"));
79d7f229 11506 set_general_thread (sample_thread);
c906108c
SS
11507}
11508
11509
11510static void
0b39b52e 11511threadalive_test (const char *cmd, int tty)
c906108c
SS
11512{
11513 int sample_thread = SAMPLE_THREAD;
e99b03dc 11514 int pid = inferior_ptid.pid ();
fd79271b 11515 ptid_t ptid = ptid_t (pid, sample_thread, 0);
c906108c 11516
79d7f229 11517 if (remote_thread_alive (ptid))
c906108c
SS
11518 printf_filtered ("PASS: Thread alive test\n");
11519 else
11520 printf_filtered ("FAIL: Thread alive test\n");
11521}
11522
23860348 11523void output_threadid (char *title, threadref *ref);
c906108c
SS
11524
11525void
fba45db2 11526output_threadid (char *title, threadref *ref)
c906108c
SS
11527{
11528 char hexid[20];
11529
405feb71 11530 pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */
c906108c
SS
11531 hexid[16] = 0;
11532 printf_filtered ("%s %s\n", title, (&hexid[0]));
11533}
11534
11535static void
0b39b52e 11536threadlist_test_cmd (const char *cmd, int tty)
c906108c
SS
11537{
11538 int startflag = 1;
11539 threadref nextthread;
11540 int done, result_count;
11541 threadref threadlist[3];
11542
11543 printf_filtered ("Remote Threadlist test\n");
11544 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11545 &result_count, &threadlist[0]))
11546 printf_filtered ("FAIL: threadlist test\n");
11547 else
11548 {
11549 threadref *scan = threadlist;
11550 threadref *limit = scan + result_count;
11551
11552 while (scan < limit)
11553 output_threadid (" thread ", scan++);
11554 }
11555}
11556
11557void
fba45db2 11558display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
11559{
11560 output_threadid ("Threadid: ", &info->threadid);
11561 printf_filtered ("Name: %s\n ", info->shortname);
11562 printf_filtered ("State: %s\n", info->display);
11563 printf_filtered ("other: %s\n\n", info->more_display);
11564}
11565
11566int
fba45db2 11567get_and_display_threadinfo (threadref *ref)
c906108c
SS
11568{
11569 int result;
11570 int set;
11571 struct gdb_ext_thread_info threadinfo;
11572
11573 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11574 | TAG_MOREDISPLAY | TAG_DISPLAY;
11575 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11576 display_thread_info (&threadinfo);
11577 return result;
11578}
11579
11580static void
0b39b52e 11581threadinfo_test_cmd (const char *cmd, int tty)
c906108c
SS
11582{
11583 int athread = SAMPLE_THREAD;
11584 threadref thread;
11585 int set;
11586
11587 int_to_threadref (&thread, athread);
11588 printf_filtered ("Remote Threadinfo test\n");
11589 if (!get_and_display_threadinfo (&thread))
11590 printf_filtered ("FAIL cannot get thread info\n");
11591}
11592
11593static int
fba45db2 11594thread_display_step (threadref *ref, void *context)
c906108c
SS
11595{
11596 /* output_threadid(" threadstep ",ref); *//* simple test */
11597 return get_and_display_threadinfo (ref);
11598}
11599
11600static void
0b39b52e 11601threadlist_update_test_cmd (const char *cmd, int tty)
c906108c
SS
11602{
11603 printf_filtered ("Remote Threadlist update test\n");
11604 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11605}
11606
11607static void
11608init_remote_threadtests (void)
11609{
3e43a32a
MS
11610 add_com ("tlist", class_obscure, threadlist_test_cmd,
11611 _("Fetch and print the remote list of "
590042fc 11612 "thread identifiers, one pkt only."));
c906108c 11613 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
590042fc 11614 _("Fetch and display info about one thread."));
c906108c 11615 add_com ("tset", class_obscure, threadset_test_cmd,
590042fc 11616 _("Test setting to a different thread."));
c906108c 11617 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
590042fc 11618 _("Iterate through updating all remote thread info."));
c906108c 11619 add_com ("talive", class_obscure, threadalive_test,
590042fc 11620 _("Remote thread alive test."));
c906108c
SS
11621}
11622
11623#endif /* 0 */
11624
a068643d 11625/* Convert a thread ID to a string. */
f3fb8c85 11626
a068643d 11627std::string
f6ac5f3d 11628remote_target::pid_to_str (ptid_t ptid)
f3fb8c85 11629{
82f73884 11630 struct remote_state *rs = get_remote_state ();
f3fb8c85 11631
d7e15655 11632 if (ptid == null_ptid)
7cee1e54 11633 return normal_pid_to_str (ptid);
0e998d96 11634 else if (ptid.is_pid ())
ecd0ada5
PA
11635 {
11636 /* Printing an inferior target id. */
11637
11638 /* When multi-process extensions are off, there's no way in the
11639 remote protocol to know the remote process id, if there's any
11640 at all. There's one exception --- when we're connected with
11641 target extended-remote, and we manually attached to a process
11642 with "attach PID". We don't record anywhere a flag that
11643 allows us to distinguish that case from the case of
11644 connecting with extended-remote and the stub already being
11645 attached to a process, and reporting yes to qAttached, hence
11646 no smart special casing here. */
11647 if (!remote_multi_process_p (rs))
a068643d 11648 return "Remote target";
ecd0ada5
PA
11649
11650 return normal_pid_to_str (ptid);
82f73884 11651 }
ecd0ada5 11652 else
79d7f229 11653 {
d7e15655 11654 if (magic_null_ptid == ptid)
a068643d 11655 return "Thread <main>";
8020350c 11656 else if (remote_multi_process_p (rs))
e38504b3 11657 if (ptid.lwp () == 0)
de0d863e
DB
11658 return normal_pid_to_str (ptid);
11659 else
a068643d
TT
11660 return string_printf ("Thread %d.%ld",
11661 ptid.pid (), ptid.lwp ());
ecd0ada5 11662 else
a068643d 11663 return string_printf ("Thread %ld", ptid.lwp ());
79d7f229 11664 }
f3fb8c85
MS
11665}
11666
38691318
KB
11667/* Get the address of the thread local variable in OBJFILE which is
11668 stored at OFFSET within the thread local storage for thread PTID. */
11669
f6ac5f3d
PA
11670CORE_ADDR
11671remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11672 CORE_ADDR offset)
38691318 11673{
4082afcc 11674 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
11675 {
11676 struct remote_state *rs = get_remote_state ();
8d64371b
TT
11677 char *p = rs->buf.data ();
11678 char *endp = p + get_remote_packet_size ();
571dd617 11679 enum packet_result result;
38691318
KB
11680
11681 strcpy (p, "qGetTLSAddr:");
11682 p += strlen (p);
82f73884 11683 p = write_ptid (p, endp, ptid);
38691318
KB
11684 *p++ = ',';
11685 p += hexnumstr (p, offset);
11686 *p++ = ',';
11687 p += hexnumstr (p, lm);
11688 *p++ = '\0';
11689
6d820c5c 11690 putpkt (rs->buf);
8d64371b 11691 getpkt (&rs->buf, 0);
3e43a32a
MS
11692 result = packet_ok (rs->buf,
11693 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11694 if (result == PACKET_OK)
38691318 11695 {
b926417a 11696 ULONGEST addr;
38691318 11697
8d64371b 11698 unpack_varlen_hex (rs->buf.data (), &addr);
b926417a 11699 return addr;
38691318 11700 }
571dd617 11701 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11702 throw_error (TLS_GENERIC_ERROR,
11703 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11704 else
109c3e39
AC
11705 throw_error (TLS_GENERIC_ERROR,
11706 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11707 }
11708 else
109c3e39
AC
11709 throw_error (TLS_GENERIC_ERROR,
11710 _("TLS not supported or disabled on this target"));
38691318
KB
11711 /* Not reached. */
11712 return 0;
11713}
11714
711e434b
PM
11715/* Provide thread local base, i.e. Thread Information Block address.
11716 Returns 1 if ptid is found and thread_local_base is non zero. */
11717
57810aa7 11718bool
f6ac5f3d 11719remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
711e434b 11720{
4082afcc 11721 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11722 {
11723 struct remote_state *rs = get_remote_state ();
8d64371b
TT
11724 char *p = rs->buf.data ();
11725 char *endp = p + get_remote_packet_size ();
711e434b
PM
11726 enum packet_result result;
11727
11728 strcpy (p, "qGetTIBAddr:");
11729 p += strlen (p);
11730 p = write_ptid (p, endp, ptid);
11731 *p++ = '\0';
11732
11733 putpkt (rs->buf);
8d64371b 11734 getpkt (&rs->buf, 0);
711e434b
PM
11735 result = packet_ok (rs->buf,
11736 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11737 if (result == PACKET_OK)
11738 {
b926417a 11739 ULONGEST val;
8d64371b 11740 unpack_varlen_hex (rs->buf.data (), &val);
711e434b 11741 if (addr)
b926417a 11742 *addr = (CORE_ADDR) val;
57810aa7 11743 return true;
711e434b
PM
11744 }
11745 else if (result == PACKET_UNKNOWN)
11746 error (_("Remote target doesn't support qGetTIBAddr packet"));
11747 else
11748 error (_("Remote target failed to process qGetTIBAddr request"));
11749 }
11750 else
11751 error (_("qGetTIBAddr not supported or disabled on this target"));
11752 /* Not reached. */
57810aa7 11753 return false;
711e434b
PM
11754}
11755
29709017
DJ
11756/* Support for inferring a target description based on the current
11757 architecture and the size of a 'g' packet. While the 'g' packet
11758 can have any size (since optional registers can be left off the
11759 end), some sizes are easily recognizable given knowledge of the
11760 approximate architecture. */
11761
11762struct remote_g_packet_guess
11763{
eefce37f
TT
11764 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11765 : bytes (bytes_),
11766 tdesc (tdesc_)
11767 {
11768 }
11769
29709017
DJ
11770 int bytes;
11771 const struct target_desc *tdesc;
11772};
29709017 11773
eefce37f 11774struct remote_g_packet_data : public allocate_on_obstack
29709017 11775{
eefce37f 11776 std::vector<remote_g_packet_guess> guesses;
29709017
DJ
11777};
11778
11779static struct gdbarch_data *remote_g_packet_data_handle;
11780
11781static void *
11782remote_g_packet_data_init (struct obstack *obstack)
11783{
eefce37f 11784 return new (obstack) remote_g_packet_data;
29709017
DJ
11785}
11786
11787void
11788register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11789 const struct target_desc *tdesc)
11790{
11791 struct remote_g_packet_data *data
19ba03f4
SM
11792 = ((struct remote_g_packet_data *)
11793 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11794
11795 gdb_assert (tdesc != NULL);
11796
eefce37f
TT
11797 for (const remote_g_packet_guess &guess : data->guesses)
11798 if (guess.bytes == bytes)
29709017 11799 internal_error (__FILE__, __LINE__,
9b20d036 11800 _("Duplicate g packet description added for size %d"),
29709017
DJ
11801 bytes);
11802
eefce37f 11803 data->guesses.emplace_back (bytes, tdesc);
29709017
DJ
11804}
11805
eefce37f
TT
11806/* Return true if remote_read_description would do anything on this target
11807 and architecture, false otherwise. */
d962ef82 11808
eefce37f 11809static bool
d962ef82
DJ
11810remote_read_description_p (struct target_ops *target)
11811{
11812 struct remote_g_packet_data *data
19ba03f4
SM
11813 = ((struct remote_g_packet_data *)
11814 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82 11815
eefce37f 11816 return !data->guesses.empty ();
d962ef82
DJ
11817}
11818
f6ac5f3d
PA
11819const struct target_desc *
11820remote_target::read_description ()
29709017
DJ
11821{
11822 struct remote_g_packet_data *data
19ba03f4
SM
11823 = ((struct remote_g_packet_data *)
11824 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11825
d962ef82
DJ
11826 /* Do not try this during initial connection, when we do not know
11827 whether there is a running but stopped thread. */
55f6301a 11828 if (!target_has_execution () || inferior_ptid == null_ptid)
b6a8c27b 11829 return beneath ()->read_description ();
d962ef82 11830
eefce37f 11831 if (!data->guesses.empty ())
29709017 11832 {
29709017
DJ
11833 int bytes = send_g_packet ();
11834
eefce37f
TT
11835 for (const remote_g_packet_guess &guess : data->guesses)
11836 if (guess.bytes == bytes)
11837 return guess.tdesc;
29709017
DJ
11838
11839 /* We discard the g packet. A minor optimization would be to
11840 hold on to it, and fill the register cache once we have selected
11841 an architecture, but it's too tricky to do safely. */
11842 }
11843
b6a8c27b 11844 return beneath ()->read_description ();
29709017
DJ
11845}
11846
a6b151f1
DJ
11847/* Remote file transfer support. This is host-initiated I/O, not
11848 target-initiated; for target-initiated, see remote-fileio.c. */
11849
11850/* If *LEFT is at least the length of STRING, copy STRING to
11851 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11852 decrease *LEFT. Otherwise raise an error. */
11853
11854static void
a121b7c1 11855remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11856{
11857 int len = strlen (string);
11858
11859 if (len > *left)
11860 error (_("Packet too long for target."));
11861
11862 memcpy (*buffer, string, len);
11863 *buffer += len;
11864 *left -= len;
11865
11866 /* NUL-terminate the buffer as a convenience, if there is
11867 room. */
11868 if (*left)
11869 **buffer = '\0';
11870}
11871
11872/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11873 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11874 decrease *LEFT. Otherwise raise an error. */
11875
11876static void
11877remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11878 int len)
11879{
11880 if (2 * len > *left)
11881 error (_("Packet too long for target."));
11882
11883 bin2hex (bytes, *buffer, len);
11884 *buffer += 2 * len;
11885 *left -= 2 * len;
11886
11887 /* NUL-terminate the buffer as a convenience, if there is
11888 room. */
11889 if (*left)
11890 **buffer = '\0';
11891}
11892
11893/* If *LEFT is large enough, convert VALUE to hex and add it to
11894 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11895 decrease *LEFT. Otherwise raise an error. */
11896
11897static void
11898remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11899{
11900 int len = hexnumlen (value);
11901
11902 if (len > *left)
11903 error (_("Packet too long for target."));
11904
11905 hexnumstr (*buffer, value);
11906 *buffer += len;
11907 *left -= len;
11908
11909 /* NUL-terminate the buffer as a convenience, if there is
11910 room. */
11911 if (*left)
11912 **buffer = '\0';
11913}
11914
11915/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11916 value, *REMOTE_ERRNO to the remote error number or zero if none
11917 was included, and *ATTACHMENT to point to the start of the annex
11918 if any. The length of the packet isn't needed here; there may
11919 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11920
11921 Return 0 if the packet could be parsed, -1 if it could not. If
11922 -1 is returned, the other variables may not be initialized. */
11923
11924static int
aa2838cc
SM
11925remote_hostio_parse_result (const char *buffer, int *retcode,
11926 int *remote_errno, const char **attachment)
a6b151f1
DJ
11927{
11928 char *p, *p2;
11929
11930 *remote_errno = 0;
11931 *attachment = NULL;
11932
11933 if (buffer[0] != 'F')
11934 return -1;
11935
11936 errno = 0;
11937 *retcode = strtol (&buffer[1], &p, 16);
11938 if (errno != 0 || p == &buffer[1])
11939 return -1;
11940
11941 /* Check for ",errno". */
11942 if (*p == ',')
11943 {
11944 errno = 0;
11945 *remote_errno = strtol (p + 1, &p2, 16);
11946 if (errno != 0 || p + 1 == p2)
11947 return -1;
11948 p = p2;
11949 }
11950
11951 /* Check for ";attachment". If there is no attachment, the
11952 packet should end here. */
11953 if (*p == ';')
11954 {
11955 *attachment = p + 1;
11956 return 0;
11957 }
11958 else if (*p == '\0')
11959 return 0;
11960 else
11961 return -1;
11962}
11963
11964/* Send a prepared I/O packet to the target and read its response.
11965 The prepared packet is in the global RS->BUF before this function
11966 is called, and the answer is there when we return.
11967
11968 COMMAND_BYTES is the length of the request to send, which may include
11969 binary data. WHICH_PACKET is the packet configuration to check
11970 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11971 is set to the error number and -1 is returned. Otherwise the value
11972 returned by the function is returned.
11973
11974 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11975 attachment is expected; an error will be reported if there's a
11976 mismatch. If one is found, *ATTACHMENT will be set to point into
11977 the packet buffer and *ATTACHMENT_LEN will be set to the
11978 attachment's length. */
11979
6b8edb51
PA
11980int
11981remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
aa2838cc 11982 int *remote_errno, const char **attachment,
6b8edb51 11983 int *attachment_len)
a6b151f1
DJ
11984{
11985 struct remote_state *rs = get_remote_state ();
11986 int ret, bytes_read;
aa2838cc 11987 const char *attachment_tmp;
a6b151f1 11988
20db9c52 11989 if (packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
11990 {
11991 *remote_errno = FILEIO_ENOSYS;
11992 return -1;
11993 }
11994
8d64371b
TT
11995 putpkt_binary (rs->buf.data (), command_bytes);
11996 bytes_read = getpkt_sane (&rs->buf, 0);
a6b151f1
DJ
11997
11998 /* If it timed out, something is wrong. Don't try to parse the
11999 buffer. */
12000 if (bytes_read < 0)
12001 {
12002 *remote_errno = FILEIO_EINVAL;
12003 return -1;
12004 }
12005
12006 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
12007 {
12008 case PACKET_ERROR:
12009 *remote_errno = FILEIO_EINVAL;
12010 return -1;
12011 case PACKET_UNKNOWN:
12012 *remote_errno = FILEIO_ENOSYS;
12013 return -1;
12014 case PACKET_OK:
12015 break;
12016 }
12017
8d64371b 12018 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
a6b151f1
DJ
12019 &attachment_tmp))
12020 {
12021 *remote_errno = FILEIO_EINVAL;
12022 return -1;
12023 }
12024
12025 /* Make sure we saw an attachment if and only if we expected one. */
12026 if ((attachment_tmp == NULL && attachment != NULL)
12027 || (attachment_tmp != NULL && attachment == NULL))
12028 {
12029 *remote_errno = FILEIO_EINVAL;
12030 return -1;
12031 }
12032
12033 /* If an attachment was found, it must point into the packet buffer;
12034 work out how many bytes there were. */
12035 if (attachment_tmp != NULL)
12036 {
12037 *attachment = attachment_tmp;
8d64371b 12038 *attachment_len = bytes_read - (*attachment - rs->buf.data ());
a6b151f1
DJ
12039 }
12040
12041 return ret;
12042}
12043
dd194f6b 12044/* See declaration.h. */
80152258 12045
dd194f6b
PA
12046void
12047readahead_cache::invalidate ()
80152258 12048{
dd194f6b 12049 this->fd = -1;
80152258
PA
12050}
12051
dd194f6b 12052/* See declaration.h. */
80152258 12053
dd194f6b
PA
12054void
12055readahead_cache::invalidate_fd (int fd)
80152258 12056{
dd194f6b
PA
12057 if (this->fd == fd)
12058 this->fd = -1;
80152258
PA
12059}
12060
15a201c8
GB
12061/* Set the filesystem remote_hostio functions that take FILENAME
12062 arguments will use. Return 0 on success, or -1 if an error
12063 occurs (and set *REMOTE_ERRNO). */
12064
6b8edb51
PA
12065int
12066remote_target::remote_hostio_set_filesystem (struct inferior *inf,
12067 int *remote_errno)
15a201c8
GB
12068{
12069 struct remote_state *rs = get_remote_state ();
12070 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
8d64371b 12071 char *p = rs->buf.data ();
15a201c8
GB
12072 int left = get_remote_packet_size () - 1;
12073 char arg[9];
12074 int ret;
12075
12076 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12077 return 0;
12078
12079 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
12080 return 0;
12081
12082 remote_buffer_add_string (&p, &left, "vFile:setfs:");
12083
12084 xsnprintf (arg, sizeof (arg), "%x", required_pid);
12085 remote_buffer_add_string (&p, &left, arg);
12086
8d64371b 12087 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
15a201c8
GB
12088 remote_errno, NULL, NULL);
12089
12090 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12091 return 0;
12092
12093 if (ret == 0)
12094 rs->fs_pid = required_pid;
12095
12096 return ret;
12097}
12098
12e2a5fd 12099/* Implementation of to_fileio_open. */
a6b151f1 12100
6b8edb51
PA
12101int
12102remote_target::remote_hostio_open (inferior *inf, const char *filename,
12103 int flags, int mode, int warn_if_slow,
12104 int *remote_errno)
a6b151f1
DJ
12105{
12106 struct remote_state *rs = get_remote_state ();
8d64371b 12107 char *p = rs->buf.data ();
a6b151f1
DJ
12108 int left = get_remote_packet_size () - 1;
12109
4313b8c0
GB
12110 if (warn_if_slow)
12111 {
12112 static int warning_issued = 0;
12113
12114 printf_unfiltered (_("Reading %s from remote target...\n"),
12115 filename);
12116
12117 if (!warning_issued)
12118 {
12119 warning (_("File transfers from remote targets can be slow."
12120 " Use \"set sysroot\" to access files locally"
12121 " instead."));
12122 warning_issued = 1;
12123 }
12124 }
12125
15a201c8
GB
12126 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12127 return -1;
12128
a6b151f1
DJ
12129 remote_buffer_add_string (&p, &left, "vFile:open:");
12130
12131 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12132 strlen (filename));
12133 remote_buffer_add_string (&p, &left, ",");
12134
12135 remote_buffer_add_int (&p, &left, flags);
12136 remote_buffer_add_string (&p, &left, ",");
12137
12138 remote_buffer_add_int (&p, &left, mode);
12139
8d64371b 12140 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
a6b151f1
DJ
12141 remote_errno, NULL, NULL);
12142}
12143
f6ac5f3d
PA
12144int
12145remote_target::fileio_open (struct inferior *inf, const char *filename,
12146 int flags, int mode, int warn_if_slow,
12147 int *remote_errno)
12148{
6b8edb51 12149 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
f6ac5f3d
PA
12150 remote_errno);
12151}
12152
12e2a5fd 12153/* Implementation of to_fileio_pwrite. */
a6b151f1 12154
6b8edb51
PA
12155int
12156remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
12157 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
12158{
12159 struct remote_state *rs = get_remote_state ();
8d64371b 12160 char *p = rs->buf.data ();
a6b151f1
DJ
12161 int left = get_remote_packet_size ();
12162 int out_len;
12163
dd194f6b 12164 rs->readahead_cache.invalidate_fd (fd);
80152258 12165
a6b151f1
DJ
12166 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
12167
12168 remote_buffer_add_int (&p, &left, fd);
12169 remote_buffer_add_string (&p, &left, ",");
12170
12171 remote_buffer_add_int (&p, &left, offset);
12172 remote_buffer_add_string (&p, &left, ",");
12173
124e13d9 12174 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
8d64371b
TT
12175 (get_remote_packet_size ()
12176 - (p - rs->buf.data ())));
a6b151f1 12177
8d64371b 12178 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
a6b151f1
DJ
12179 remote_errno, NULL, NULL);
12180}
12181
f6ac5f3d
PA
12182int
12183remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12184 ULONGEST offset, int *remote_errno)
12185{
6b8edb51 12186 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
f6ac5f3d
PA
12187}
12188
80152258
PA
12189/* Helper for the implementation of to_fileio_pread. Read the file
12190 from the remote side with vFile:pread. */
a6b151f1 12191
6b8edb51
PA
12192int
12193remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12194 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
12195{
12196 struct remote_state *rs = get_remote_state ();
8d64371b 12197 char *p = rs->buf.data ();
aa2838cc 12198 const char *attachment;
a6b151f1
DJ
12199 int left = get_remote_packet_size ();
12200 int ret, attachment_len;
12201 int read_len;
12202
12203 remote_buffer_add_string (&p, &left, "vFile:pread:");
12204
12205 remote_buffer_add_int (&p, &left, fd);
12206 remote_buffer_add_string (&p, &left, ",");
12207
12208 remote_buffer_add_int (&p, &left, len);
12209 remote_buffer_add_string (&p, &left, ",");
12210
12211 remote_buffer_add_int (&p, &left, offset);
12212
8d64371b 12213 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
a6b151f1
DJ
12214 remote_errno, &attachment,
12215 &attachment_len);
12216
12217 if (ret < 0)
12218 return ret;
12219
bc20a4af 12220 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
12221 read_buf, len);
12222 if (read_len != ret)
12223 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12224
12225 return ret;
12226}
12227
dd194f6b 12228/* See declaration.h. */
80152258 12229
dd194f6b
PA
12230int
12231readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12232 ULONGEST offset)
80152258 12233{
dd194f6b
PA
12234 if (this->fd == fd
12235 && this->offset <= offset
12236 && offset < this->offset + this->bufsize)
80152258 12237 {
dd194f6b 12238 ULONGEST max = this->offset + this->bufsize;
80152258
PA
12239
12240 if (offset + len > max)
12241 len = max - offset;
12242
dd194f6b 12243 memcpy (read_buf, this->buf + offset - this->offset, len);
80152258
PA
12244 return len;
12245 }
12246
12247 return 0;
12248}
12249
12250/* Implementation of to_fileio_pread. */
12251
6b8edb51
PA
12252int
12253remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12254 ULONGEST offset, int *remote_errno)
80152258
PA
12255{
12256 int ret;
12257 struct remote_state *rs = get_remote_state ();
dd194f6b 12258 readahead_cache *cache = &rs->readahead_cache;
80152258 12259
dd194f6b 12260 ret = cache->pread (fd, read_buf, len, offset);
80152258
PA
12261 if (ret > 0)
12262 {
12263 cache->hit_count++;
12264
2189c312
SM
12265 remote_debug_printf ("readahead cache hit %s",
12266 pulongest (cache->hit_count));
80152258
PA
12267 return ret;
12268 }
12269
12270 cache->miss_count++;
2189c312
SM
12271
12272 remote_debug_printf ("readahead cache miss %s",
12273 pulongest (cache->miss_count));
80152258
PA
12274
12275 cache->fd = fd;
12276 cache->offset = offset;
12277 cache->bufsize = get_remote_packet_size ();
224c3ddb 12278 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258 12279
6b8edb51 12280 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
80152258
PA
12281 cache->offset, remote_errno);
12282 if (ret <= 0)
12283 {
dd194f6b 12284 cache->invalidate_fd (fd);
80152258
PA
12285 return ret;
12286 }
12287
12288 cache->bufsize = ret;
dd194f6b 12289 return cache->pread (fd, read_buf, len, offset);
80152258
PA
12290}
12291
f6ac5f3d
PA
12292int
12293remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12294 ULONGEST offset, int *remote_errno)
12295{
6b8edb51 12296 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
f6ac5f3d
PA
12297}
12298
12e2a5fd 12299/* Implementation of to_fileio_close. */
a6b151f1 12300
6b8edb51
PA
12301int
12302remote_target::remote_hostio_close (int fd, int *remote_errno)
a6b151f1
DJ
12303{
12304 struct remote_state *rs = get_remote_state ();
8d64371b 12305 char *p = rs->buf.data ();
a6b151f1
DJ
12306 int left = get_remote_packet_size () - 1;
12307
dd194f6b 12308 rs->readahead_cache.invalidate_fd (fd);
80152258 12309
a6b151f1
DJ
12310 remote_buffer_add_string (&p, &left, "vFile:close:");
12311
12312 remote_buffer_add_int (&p, &left, fd);
12313
8d64371b 12314 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
a6b151f1
DJ
12315 remote_errno, NULL, NULL);
12316}
12317
f6ac5f3d
PA
12318int
12319remote_target::fileio_close (int fd, int *remote_errno)
12320{
6b8edb51 12321 return remote_hostio_close (fd, remote_errno);
f6ac5f3d
PA
12322}
12323
12e2a5fd 12324/* Implementation of to_fileio_unlink. */
a6b151f1 12325
6b8edb51
PA
12326int
12327remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12328 int *remote_errno)
a6b151f1
DJ
12329{
12330 struct remote_state *rs = get_remote_state ();
8d64371b 12331 char *p = rs->buf.data ();
a6b151f1
DJ
12332 int left = get_remote_packet_size () - 1;
12333
15a201c8
GB
12334 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12335 return -1;
12336
a6b151f1
DJ
12337 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12338
12339 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12340 strlen (filename));
12341
8d64371b 12342 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
a6b151f1
DJ
12343 remote_errno, NULL, NULL);
12344}
12345
f6ac5f3d
PA
12346int
12347remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12348 int *remote_errno)
12349{
6b8edb51 12350 return remote_hostio_unlink (inf, filename, remote_errno);
f6ac5f3d
PA
12351}
12352
12e2a5fd 12353/* Implementation of to_fileio_readlink. */
b9e7b9c3 12354
f6ac5f3d
PA
12355gdb::optional<std::string>
12356remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12357 int *remote_errno)
b9e7b9c3
UW
12358{
12359 struct remote_state *rs = get_remote_state ();
8d64371b 12360 char *p = rs->buf.data ();
aa2838cc 12361 const char *attachment;
b9e7b9c3
UW
12362 int left = get_remote_packet_size ();
12363 int len, attachment_len;
12364 int read_len;
b9e7b9c3 12365
15a201c8 12366 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
e0d3522b 12367 return {};
15a201c8 12368
b9e7b9c3
UW
12369 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12370
12371 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12372 strlen (filename));
12373
8d64371b 12374 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
b9e7b9c3
UW
12375 remote_errno, &attachment,
12376 &attachment_len);
12377
12378 if (len < 0)
e0d3522b 12379 return {};
b9e7b9c3 12380
e0d3522b 12381 std::string ret (len, '\0');
b9e7b9c3 12382
bc20a4af 12383 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
e0d3522b 12384 (gdb_byte *) &ret[0], len);
b9e7b9c3
UW
12385 if (read_len != len)
12386 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12387
b9e7b9c3
UW
12388 return ret;
12389}
12390
12e2a5fd 12391/* Implementation of to_fileio_fstat. */
0a93529c 12392
f6ac5f3d
PA
12393int
12394remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
0a93529c
GB
12395{
12396 struct remote_state *rs = get_remote_state ();
8d64371b 12397 char *p = rs->buf.data ();
0a93529c
GB
12398 int left = get_remote_packet_size ();
12399 int attachment_len, ret;
aa2838cc 12400 const char *attachment;
0a93529c
GB
12401 struct fio_stat fst;
12402 int read_len;
12403
464b0089
GB
12404 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12405
12406 remote_buffer_add_int (&p, &left, fd);
12407
8d64371b 12408 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
464b0089
GB
12409 remote_errno, &attachment,
12410 &attachment_len);
12411 if (ret < 0)
0a93529c 12412 {
464b0089
GB
12413 if (*remote_errno != FILEIO_ENOSYS)
12414 return ret;
12415
0a93529c
GB
12416 /* Strictly we should return -1, ENOSYS here, but when
12417 "set sysroot remote:" was implemented in August 2008
12418 BFD's need for a stat function was sidestepped with
12419 this hack. This was not remedied until March 2015
12420 so we retain the previous behavior to avoid breaking
12421 compatibility.
12422
12423 Note that the memset is a March 2015 addition; older
12424 GDBs set st_size *and nothing else* so the structure
12425 would have garbage in all other fields. This might
12426 break something but retaining the previous behavior
12427 here would be just too wrong. */
12428
12429 memset (st, 0, sizeof (struct stat));
12430 st->st_size = INT_MAX;
12431 return 0;
12432 }
12433
0a93529c
GB
12434 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12435 (gdb_byte *) &fst, sizeof (fst));
12436
12437 if (read_len != ret)
12438 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12439
12440 if (read_len != sizeof (fst))
12441 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12442 read_len, (int) sizeof (fst));
12443
12444 remote_fileio_to_host_stat (&fst, st);
12445
12446 return 0;
12447}
12448
12e2a5fd 12449/* Implementation of to_filesystem_is_local. */
e3dd7556 12450
57810aa7 12451bool
f6ac5f3d 12452remote_target::filesystem_is_local ()
e3dd7556
GB
12453{
12454 /* Valgrind GDB presents itself as a remote target but works
12455 on the local filesystem: it does not implement remote get
12456 and users are not expected to set a sysroot. To handle
12457 this case we treat the remote filesystem as local if the
12458 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12459 does not support vFile:open. */
a3be80c3 12460 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
12461 {
12462 enum packet_support ps = packet_support (PACKET_vFile_open);
12463
12464 if (ps == PACKET_SUPPORT_UNKNOWN)
12465 {
12466 int fd, remote_errno;
12467
12468 /* Try opening a file to probe support. The supplied
12469 filename is irrelevant, we only care about whether
12470 the stub recognizes the packet or not. */
6b8edb51 12471 fd = remote_hostio_open (NULL, "just probing",
4313b8c0 12472 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
12473 &remote_errno);
12474
12475 if (fd >= 0)
6b8edb51 12476 remote_hostio_close (fd, &remote_errno);
e3dd7556
GB
12477
12478 ps = packet_support (PACKET_vFile_open);
12479 }
12480
12481 if (ps == PACKET_DISABLE)
12482 {
12483 static int warning_issued = 0;
12484
12485 if (!warning_issued)
12486 {
12487 warning (_("remote target does not support file"
12488 " transfer, attempting to access files"
12489 " from local filesystem."));
12490 warning_issued = 1;
12491 }
12492
57810aa7 12493 return true;
e3dd7556
GB
12494 }
12495 }
12496
57810aa7 12497 return false;
e3dd7556
GB
12498}
12499
a6b151f1
DJ
12500static int
12501remote_fileio_errno_to_host (int errnum)
12502{
12503 switch (errnum)
12504 {
12505 case FILEIO_EPERM:
dda83cd7 12506 return EPERM;
a6b151f1 12507 case FILEIO_ENOENT:
dda83cd7 12508 return ENOENT;
a6b151f1 12509 case FILEIO_EINTR:
dda83cd7 12510 return EINTR;
a6b151f1 12511 case FILEIO_EIO:
dda83cd7 12512 return EIO;
a6b151f1 12513 case FILEIO_EBADF:
dda83cd7 12514 return EBADF;
a6b151f1 12515 case FILEIO_EACCES:
dda83cd7 12516 return EACCES;
a6b151f1 12517 case FILEIO_EFAULT:
dda83cd7 12518 return EFAULT;
a6b151f1 12519 case FILEIO_EBUSY:
dda83cd7 12520 return EBUSY;
a6b151f1 12521 case FILEIO_EEXIST:
dda83cd7 12522 return EEXIST;
a6b151f1 12523 case FILEIO_ENODEV:
dda83cd7 12524 return ENODEV;
a6b151f1 12525 case FILEIO_ENOTDIR:
dda83cd7 12526 return ENOTDIR;
a6b151f1 12527 case FILEIO_EISDIR:
dda83cd7 12528 return EISDIR;
a6b151f1 12529 case FILEIO_EINVAL:
dda83cd7 12530 return EINVAL;
a6b151f1 12531 case FILEIO_ENFILE:
dda83cd7 12532 return ENFILE;
a6b151f1 12533 case FILEIO_EMFILE:
dda83cd7 12534 return EMFILE;
a6b151f1 12535 case FILEIO_EFBIG:
dda83cd7 12536 return EFBIG;
a6b151f1 12537 case FILEIO_ENOSPC:
dda83cd7 12538 return ENOSPC;
a6b151f1 12539 case FILEIO_ESPIPE:
dda83cd7 12540 return ESPIPE;
a6b151f1 12541 case FILEIO_EROFS:
dda83cd7 12542 return EROFS;
a6b151f1 12543 case FILEIO_ENOSYS:
dda83cd7 12544 return ENOSYS;
a6b151f1 12545 case FILEIO_ENAMETOOLONG:
dda83cd7 12546 return ENAMETOOLONG;
a6b151f1
DJ
12547 }
12548 return -1;
12549}
12550
12551static char *
12552remote_hostio_error (int errnum)
12553{
12554 int host_error = remote_fileio_errno_to_host (errnum);
12555
12556 if (host_error == -1)
12557 error (_("Unknown remote I/O error %d"), errnum);
12558 else
12559 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12560}
12561
440b7aec
PA
12562/* A RAII wrapper around a remote file descriptor. */
12563
12564class scoped_remote_fd
a6b151f1 12565{
440b7aec 12566public:
6b8edb51
PA
12567 scoped_remote_fd (remote_target *remote, int fd)
12568 : m_remote (remote), m_fd (fd)
440b7aec
PA
12569 {
12570 }
a6b151f1 12571
440b7aec
PA
12572 ~scoped_remote_fd ()
12573 {
12574 if (m_fd != -1)
12575 {
12576 try
12577 {
12578 int remote_errno;
6b8edb51 12579 m_remote->remote_hostio_close (m_fd, &remote_errno);
440b7aec
PA
12580 }
12581 catch (...)
12582 {
12583 /* Swallow exception before it escapes the dtor. If
12584 something goes wrong, likely the connection is gone,
12585 and there's nothing else that can be done. */
12586 }
12587 }
12588 }
12589
12590 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12591
12592 /* Release ownership of the file descriptor, and return it. */
88a774b9 12593 ATTRIBUTE_UNUSED_RESULT int release () noexcept
440b7aec
PA
12594 {
12595 int fd = m_fd;
12596 m_fd = -1;
12597 return fd;
12598 }
12599
12600 /* Return the owned file descriptor. */
12601 int get () const noexcept
12602 {
12603 return m_fd;
12604 }
12605
12606private:
6b8edb51
PA
12607 /* The remote target. */
12608 remote_target *m_remote;
12609
440b7aec
PA
12610 /* The owned remote I/O file descriptor. */
12611 int m_fd;
12612};
a6b151f1
DJ
12613
12614void
12615remote_file_put (const char *local_file, const char *remote_file, int from_tty)
6b8edb51
PA
12616{
12617 remote_target *remote = get_current_remote_target ();
12618
12619 if (remote == nullptr)
12620 error (_("command can only be used with remote target"));
12621
12622 remote->remote_file_put (local_file, remote_file, from_tty);
12623}
12624
12625void
12626remote_target::remote_file_put (const char *local_file, const char *remote_file,
12627 int from_tty)
a6b151f1 12628{
440b7aec 12629 int retcode, remote_errno, bytes, io_size;
a6b151f1
DJ
12630 int bytes_in_buffer;
12631 int saw_eof;
12632 ULONGEST offset;
a6b151f1 12633
d419f42d 12634 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
12635 if (file == NULL)
12636 perror_with_name (local_file);
a6b151f1 12637
440b7aec 12638 scoped_remote_fd fd
6b8edb51
PA
12639 (this, remote_hostio_open (NULL,
12640 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12641 | FILEIO_O_TRUNC),
12642 0700, 0, &remote_errno));
440b7aec 12643 if (fd.get () == -1)
a6b151f1
DJ
12644 remote_hostio_error (remote_errno);
12645
12646 /* Send up to this many bytes at once. They won't all fit in the
12647 remote packet limit, so we'll transfer slightly fewer. */
12648 io_size = get_remote_packet_size ();
5ca3b260 12649 gdb::byte_vector buffer (io_size);
a6b151f1 12650
a6b151f1
DJ
12651 bytes_in_buffer = 0;
12652 saw_eof = 0;
12653 offset = 0;
12654 while (bytes_in_buffer || !saw_eof)
12655 {
12656 if (!saw_eof)
12657 {
5ca3b260 12658 bytes = fread (buffer.data () + bytes_in_buffer, 1,
3e43a32a 12659 io_size - bytes_in_buffer,
d419f42d 12660 file.get ());
a6b151f1
DJ
12661 if (bytes == 0)
12662 {
d419f42d 12663 if (ferror (file.get ()))
a6b151f1
DJ
12664 error (_("Error reading %s."), local_file);
12665 else
12666 {
12667 /* EOF. Unless there is something still in the
12668 buffer from the last iteration, we are done. */
12669 saw_eof = 1;
12670 if (bytes_in_buffer == 0)
12671 break;
12672 }
12673 }
12674 }
12675 else
12676 bytes = 0;
12677
12678 bytes += bytes_in_buffer;
12679 bytes_in_buffer = 0;
12680
5ca3b260 12681 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
3e43a32a 12682 offset, &remote_errno);
a6b151f1
DJ
12683
12684 if (retcode < 0)
12685 remote_hostio_error (remote_errno);
12686 else if (retcode == 0)
12687 error (_("Remote write of %d bytes returned 0!"), bytes);
12688 else if (retcode < bytes)
12689 {
12690 /* Short write. Save the rest of the read data for the next
12691 write. */
12692 bytes_in_buffer = bytes - retcode;
5ca3b260 12693 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
a6b151f1
DJ
12694 }
12695
12696 offset += retcode;
12697 }
12698
6b8edb51 12699 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12700 remote_hostio_error (remote_errno);
12701
12702 if (from_tty)
12703 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
a6b151f1
DJ
12704}
12705
12706void
12707remote_file_get (const char *remote_file, const char *local_file, int from_tty)
6b8edb51
PA
12708{
12709 remote_target *remote = get_current_remote_target ();
12710
12711 if (remote == nullptr)
12712 error (_("command can only be used with remote target"));
12713
12714 remote->remote_file_get (remote_file, local_file, from_tty);
12715}
12716
12717void
12718remote_target::remote_file_get (const char *remote_file, const char *local_file,
12719 int from_tty)
a6b151f1 12720{
440b7aec 12721 int remote_errno, bytes, io_size;
a6b151f1 12722 ULONGEST offset;
a6b151f1 12723
440b7aec 12724 scoped_remote_fd fd
6b8edb51
PA
12725 (this, remote_hostio_open (NULL,
12726 remote_file, FILEIO_O_RDONLY, 0, 0,
12727 &remote_errno));
440b7aec 12728 if (fd.get () == -1)
a6b151f1
DJ
12729 remote_hostio_error (remote_errno);
12730
d419f42d 12731 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12732 if (file == NULL)
12733 perror_with_name (local_file);
a6b151f1
DJ
12734
12735 /* Send up to this many bytes at once. They won't all fit in the
12736 remote packet limit, so we'll transfer slightly fewer. */
12737 io_size = get_remote_packet_size ();
5ca3b260 12738 gdb::byte_vector buffer (io_size);
a6b151f1 12739
a6b151f1
DJ
12740 offset = 0;
12741 while (1)
12742 {
5ca3b260 12743 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
440b7aec 12744 &remote_errno);
a6b151f1
DJ
12745 if (bytes == 0)
12746 /* Success, but no bytes, means end-of-file. */
12747 break;
12748 if (bytes == -1)
12749 remote_hostio_error (remote_errno);
12750
12751 offset += bytes;
12752
5ca3b260 12753 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
a6b151f1
DJ
12754 if (bytes == 0)
12755 perror_with_name (local_file);
12756 }
12757
6b8edb51 12758 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12759 remote_hostio_error (remote_errno);
12760
12761 if (from_tty)
12762 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
a6b151f1
DJ
12763}
12764
12765void
12766remote_file_delete (const char *remote_file, int from_tty)
12767{
6b8edb51 12768 remote_target *remote = get_current_remote_target ();
a6b151f1 12769
6b8edb51 12770 if (remote == nullptr)
a6b151f1
DJ
12771 error (_("command can only be used with remote target"));
12772
6b8edb51
PA
12773 remote->remote_file_delete (remote_file, from_tty);
12774}
12775
12776void
12777remote_target::remote_file_delete (const char *remote_file, int from_tty)
12778{
12779 int retcode, remote_errno;
12780
12781 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
a6b151f1
DJ
12782 if (retcode == -1)
12783 remote_hostio_error (remote_errno);
12784
12785 if (from_tty)
12786 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12787}
12788
12789static void
ac88e2de 12790remote_put_command (const char *args, int from_tty)
a6b151f1 12791{
d1a41061
PP
12792 if (args == NULL)
12793 error_no_arg (_("file to put"));
12794
773a1edc 12795 gdb_argv argv (args);
a6b151f1
DJ
12796 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12797 error (_("Invalid parameters to remote put"));
12798
12799 remote_file_put (argv[0], argv[1], from_tty);
a6b151f1
DJ
12800}
12801
12802static void
ac88e2de 12803remote_get_command (const char *args, int from_tty)
a6b151f1 12804{
d1a41061
PP
12805 if (args == NULL)
12806 error_no_arg (_("file to get"));
12807
773a1edc 12808 gdb_argv argv (args);
a6b151f1
DJ
12809 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12810 error (_("Invalid parameters to remote get"));
12811
12812 remote_file_get (argv[0], argv[1], from_tty);
a6b151f1
DJ
12813}
12814
12815static void
ac88e2de 12816remote_delete_command (const char *args, int from_tty)
a6b151f1 12817{
d1a41061
PP
12818 if (args == NULL)
12819 error_no_arg (_("file to delete"));
12820
773a1edc 12821 gdb_argv argv (args);
a6b151f1
DJ
12822 if (argv[0] == NULL || argv[1] != NULL)
12823 error (_("Invalid parameters to remote delete"));
12824
12825 remote_file_delete (argv[0], from_tty);
a6b151f1
DJ
12826}
12827
57810aa7 12828bool
f6ac5f3d 12829remote_target::can_execute_reverse ()
b2175913 12830{
4082afcc
PA
12831 if (packet_support (PACKET_bs) == PACKET_ENABLE
12832 || packet_support (PACKET_bc) == PACKET_ENABLE)
57810aa7 12833 return true;
40ab02ce 12834 else
57810aa7 12835 return false;
b2175913
MS
12836}
12837
57810aa7 12838bool
f6ac5f3d 12839remote_target::supports_non_stop ()
74531fed 12840{
57810aa7 12841 return true;
74531fed
PA
12842}
12843
57810aa7 12844bool
f6ac5f3d 12845remote_target::supports_disable_randomization ()
03583c20
UW
12846{
12847 /* Only supported in extended mode. */
57810aa7 12848 return false;
03583c20
UW
12849}
12850
57810aa7 12851bool
f6ac5f3d 12852remote_target::supports_multi_process ()
8a305172
PA
12853{
12854 struct remote_state *rs = get_remote_state ();
a744cf53 12855
8020350c 12856 return remote_multi_process_p (rs);
8a305172
PA
12857}
12858
70221824 12859static int
f6ac5f3d 12860remote_supports_cond_tracepoints ()
782b2b07 12861{
4082afcc 12862 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12863}
12864
57810aa7 12865bool
f6ac5f3d 12866remote_target::supports_evaluation_of_breakpoint_conditions ()
3788aec7 12867{
4082afcc 12868 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12869}
12870
70221824 12871static int
f6ac5f3d 12872remote_supports_fast_tracepoints ()
7a697b8d 12873{
4082afcc 12874 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12875}
12876
0fb4aa4b 12877static int
f6ac5f3d 12878remote_supports_static_tracepoints ()
0fb4aa4b 12879{
4082afcc 12880 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12881}
12882
1e4d1764 12883static int
f6ac5f3d 12884remote_supports_install_in_trace ()
1e4d1764 12885{
4082afcc 12886 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12887}
12888
57810aa7 12889bool
f6ac5f3d 12890remote_target::supports_enable_disable_tracepoint ()
d248b706 12891{
4082afcc
PA
12892 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12893 == PACKET_ENABLE);
d248b706
KY
12894}
12895
57810aa7 12896bool
f6ac5f3d 12897remote_target::supports_string_tracing ()
3065dfb6 12898{
4082afcc 12899 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12900}
12901
57810aa7 12902bool
f6ac5f3d 12903remote_target::can_run_breakpoint_commands ()
d3ce09f5 12904{
4082afcc 12905 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12906}
12907
f6ac5f3d
PA
12908void
12909remote_target::trace_init ()
35b1e5cc 12910{
b6bb3468
PA
12911 struct remote_state *rs = get_remote_state ();
12912
35b1e5cc 12913 putpkt ("QTinit");
b6bb3468 12914 remote_get_noisy_reply ();
8d64371b 12915 if (strcmp (rs->buf.data (), "OK") != 0)
35b1e5cc
SS
12916 error (_("Target does not support this command."));
12917}
12918
409873ef
SS
12919/* Recursive routine to walk through command list including loops, and
12920 download packets for each command. */
12921
6b8edb51
PA
12922void
12923remote_target::remote_download_command_source (int num, ULONGEST addr,
12924 struct command_line *cmds)
409873ef
SS
12925{
12926 struct remote_state *rs = get_remote_state ();
12927 struct command_line *cmd;
12928
12929 for (cmd = cmds; cmd; cmd = cmd->next)
12930 {
0df8b418 12931 QUIT; /* Allow user to bail out with ^C. */
8d64371b 12932 strcpy (rs->buf.data (), "QTDPsrc:");
409873ef 12933 encode_source_string (num, addr, "cmd", cmd->line,
8d64371b
TT
12934 rs->buf.data () + strlen (rs->buf.data ()),
12935 rs->buf.size () - strlen (rs->buf.data ()));
409873ef 12936 putpkt (rs->buf);
b6bb3468 12937 remote_get_noisy_reply ();
8d64371b 12938 if (strcmp (rs->buf.data (), "OK"))
409873ef
SS
12939 warning (_("Target does not support source download."));
12940
12941 if (cmd->control_type == while_control
12942 || cmd->control_type == while_stepping_control)
12943 {
12973681 12944 remote_download_command_source (num, addr, cmd->body_list_0.get ());
409873ef 12945
0df8b418 12946 QUIT; /* Allow user to bail out with ^C. */
8d64371b 12947 strcpy (rs->buf.data (), "QTDPsrc:");
409873ef 12948 encode_source_string (num, addr, "cmd", "end",
8d64371b
TT
12949 rs->buf.data () + strlen (rs->buf.data ()),
12950 rs->buf.size () - strlen (rs->buf.data ()));
409873ef 12951 putpkt (rs->buf);
b6bb3468 12952 remote_get_noisy_reply ();
8d64371b 12953 if (strcmp (rs->buf.data (), "OK"))
409873ef
SS
12954 warning (_("Target does not support source download."));
12955 }
12956 }
12957}
12958
f6ac5f3d
PA
12959void
12960remote_target::download_tracepoint (struct bp_location *loc)
35b1e5cc
SS
12961{
12962 CORE_ADDR tpaddr;
409873ef 12963 char addrbuf[40];
b44ec619
SM
12964 std::vector<std::string> tdp_actions;
12965 std::vector<std::string> stepping_actions;
35b1e5cc 12966 char *pkt;
e8ba3115 12967 struct breakpoint *b = loc->owner;
d9b3f62e 12968 struct tracepoint *t = (struct tracepoint *) b;
b6bb3468 12969 struct remote_state *rs = get_remote_state ();
3df3a985 12970 int ret;
ff36536c 12971 const char *err_msg = _("Tracepoint packet too large for target.");
3df3a985
PFC
12972 size_t size_left;
12973
12974 /* We use a buffer other than rs->buf because we'll build strings
12975 across multiple statements, and other statements in between could
12976 modify rs->buf. */
12977 gdb::char_vector buf (get_remote_packet_size ());
35b1e5cc 12978
dc673c81 12979 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
12980
12981 tpaddr = loc->address;
53807e9f 12982 strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR)));
3df3a985
PFC
12983 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
12984 b->number, addrbuf, /* address */
12985 (b->enable_state == bp_enabled ? 'E' : 'D'),
12986 t->step_count, t->pass_count);
12987
12988 if (ret < 0 || ret >= buf.size ())
a7f25a84 12989 error ("%s", err_msg);
3df3a985 12990
e8ba3115
YQ
12991 /* Fast tracepoints are mostly handled by the target, but we can
12992 tell the target how big of an instruction block should be moved
12993 around. */
12994 if (b->type == bp_fast_tracepoint)
12995 {
12996 /* Only test for support at download time; we may not know
12997 target capabilities at definition time. */
12998 if (remote_supports_fast_tracepoints ())
35b1e5cc 12999 {
6b940e6a
PL
13000 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
13001 NULL))
3df3a985
PFC
13002 {
13003 size_left = buf.size () - strlen (buf.data ());
13004 ret = snprintf (buf.data () + strlen (buf.data ()),
13005 size_left, ":F%x",
13006 gdb_insn_length (loc->gdbarch, tpaddr));
13007
13008 if (ret < 0 || ret >= size_left)
a7f25a84 13009 error ("%s", err_msg);
3df3a985 13010 }
35b1e5cc 13011 else
e8ba3115
YQ
13012 /* If it passed validation at definition but fails now,
13013 something is very wrong. */
13014 internal_error (__FILE__, __LINE__,
13015 _("Fast tracepoint not "
13016 "valid during download"));
35b1e5cc 13017 }
e8ba3115
YQ
13018 else
13019 /* Fast tracepoints are functionally identical to regular
13020 tracepoints, so don't take lack of support as a reason to
13021 give up on the trace run. */
13022 warning (_("Target does not support fast tracepoints, "
13023 "downloading %d as regular tracepoint"), b->number);
13024 }
13025 else if (b->type == bp_static_tracepoint)
13026 {
13027 /* Only test for support at download time; we may not know
13028 target capabilities at definition time. */
13029 if (remote_supports_static_tracepoints ())
0fb4aa4b 13030 {
e8ba3115 13031 struct static_tracepoint_marker marker;
0fb4aa4b 13032
e8ba3115 13033 if (target_static_tracepoint_marker_at (tpaddr, &marker))
3df3a985
PFC
13034 {
13035 size_left = buf.size () - strlen (buf.data ());
13036 ret = snprintf (buf.data () + strlen (buf.data ()),
13037 size_left, ":S");
13038
13039 if (ret < 0 || ret >= size_left)
a7f25a84 13040 error ("%s", err_msg);
3df3a985 13041 }
0fb4aa4b 13042 else
e8ba3115 13043 error (_("Static tracepoint not valid during download"));
0fb4aa4b 13044 }
e8ba3115
YQ
13045 else
13046 /* Fast tracepoints are functionally identical to regular
13047 tracepoints, so don't take lack of support as a reason
13048 to give up on the trace run. */
13049 error (_("Target does not support static tracepoints"));
13050 }
13051 /* If the tracepoint has a conditional, make it into an agent
13052 expression and append to the definition. */
13053 if (loc->cond)
13054 {
13055 /* Only test support at download time, we may not know target
13056 capabilities at definition time. */
13057 if (remote_supports_cond_tracepoints ())
35b1e5cc 13058 {
3df3a985
PFC
13059 agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
13060 loc->cond.get ());
13061
13062 size_left = buf.size () - strlen (buf.data ());
13063
13064 ret = snprintf (buf.data () + strlen (buf.data ()),
13065 size_left, ":X%x,", aexpr->len);
13066
13067 if (ret < 0 || ret >= size_left)
a7f25a84 13068 error ("%s", err_msg);
3df3a985
PFC
13069
13070 size_left = buf.size () - strlen (buf.data ());
13071
13072 /* Two bytes to encode each aexpr byte, plus the terminating
13073 null byte. */
13074 if (aexpr->len * 2 + 1 > size_left)
a7f25a84 13075 error ("%s", err_msg);
3df3a985
PFC
13076
13077 pkt = buf.data () + strlen (buf.data ());
13078
b44ec619 13079 for (int ndx = 0; ndx < aexpr->len; ++ndx)
e8ba3115
YQ
13080 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
13081 *pkt = '\0';
35b1e5cc 13082 }
e8ba3115
YQ
13083 else
13084 warning (_("Target does not support conditional tracepoints, "
13085 "ignoring tp %d cond"), b->number);
13086 }
35b1e5cc 13087
d9b3f62e 13088 if (b->commands || *default_collect)
3df3a985
PFC
13089 {
13090 size_left = buf.size () - strlen (buf.data ());
13091
13092 ret = snprintf (buf.data () + strlen (buf.data ()),
13093 size_left, "-");
13094
13095 if (ret < 0 || ret >= size_left)
a7f25a84 13096 error ("%s", err_msg);
3df3a985
PFC
13097 }
13098
13099 putpkt (buf.data ());
b6bb3468 13100 remote_get_noisy_reply ();
8d64371b 13101 if (strcmp (rs->buf.data (), "OK"))
e8ba3115 13102 error (_("Target does not support tracepoints."));
35b1e5cc 13103
e8ba3115 13104 /* do_single_steps (t); */
b44ec619
SM
13105 for (auto action_it = tdp_actions.begin ();
13106 action_it != tdp_actions.end (); action_it++)
e8ba3115 13107 {
b44ec619
SM
13108 QUIT; /* Allow user to bail out with ^C. */
13109
aa6f3694 13110 bool has_more = ((action_it + 1) != tdp_actions.end ()
b44ec619
SM
13111 || !stepping_actions.empty ());
13112
3df3a985
PFC
13113 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
13114 b->number, addrbuf, /* address */
13115 action_it->c_str (),
13116 has_more ? '-' : 0);
13117
13118 if (ret < 0 || ret >= buf.size ())
a7f25a84 13119 error ("%s", err_msg);
3df3a985
PFC
13120
13121 putpkt (buf.data ());
b44ec619 13122 remote_get_noisy_reply ();
8d64371b 13123 if (strcmp (rs->buf.data (), "OK"))
b44ec619 13124 error (_("Error on target while setting tracepoints."));
e8ba3115 13125 }
409873ef 13126
05abfc39
PFC
13127 for (auto action_it = stepping_actions.begin ();
13128 action_it != stepping_actions.end (); action_it++)
13129 {
13130 QUIT; /* Allow user to bail out with ^C. */
13131
13132 bool is_first = action_it == stepping_actions.begin ();
aa6f3694 13133 bool has_more = (action_it + 1) != stepping_actions.end ();
05abfc39 13134
3df3a985
PFC
13135 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
13136 b->number, addrbuf, /* address */
13137 is_first ? "S" : "",
13138 action_it->c_str (),
13139 has_more ? "-" : "");
13140
13141 if (ret < 0 || ret >= buf.size ())
a7f25a84 13142 error ("%s", err_msg);
3df3a985
PFC
13143
13144 putpkt (buf.data ());
05abfc39 13145 remote_get_noisy_reply ();
8d64371b 13146 if (strcmp (rs->buf.data (), "OK"))
05abfc39
PFC
13147 error (_("Error on target while setting tracepoints."));
13148 }
b44ec619 13149
4082afcc 13150 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 13151 {
f00aae0f 13152 if (b->location != NULL)
409873ef 13153 {
3df3a985
PFC
13154 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13155
13156 if (ret < 0 || ret >= buf.size ())
a7f25a84 13157 error ("%s", err_msg);
3df3a985 13158
f00aae0f 13159 encode_source_string (b->number, loc->address, "at",
d28cd78a 13160 event_location_to_string (b->location.get ()),
3df3a985
PFC
13161 buf.data () + strlen (buf.data ()),
13162 buf.size () - strlen (buf.data ()));
13163 putpkt (buf.data ());
b6bb3468 13164 remote_get_noisy_reply ();
8d64371b 13165 if (strcmp (rs->buf.data (), "OK"))
e8ba3115 13166 warning (_("Target does not support source download."));
409873ef 13167 }
e8ba3115
YQ
13168 if (b->cond_string)
13169 {
3df3a985
PFC
13170 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13171
13172 if (ret < 0 || ret >= buf.size ())
a7f25a84 13173 error ("%s", err_msg);
3df3a985 13174
e8ba3115 13175 encode_source_string (b->number, loc->address,
3df3a985
PFC
13176 "cond", b->cond_string,
13177 buf.data () + strlen (buf.data ()),
13178 buf.size () - strlen (buf.data ()));
13179 putpkt (buf.data ());
b6bb3468 13180 remote_get_noisy_reply ();
8d64371b 13181 if (strcmp (rs->buf.data (), "OK"))
e8ba3115
YQ
13182 warning (_("Target does not support source download."));
13183 }
13184 remote_download_command_source (b->number, loc->address,
13185 breakpoint_commands (b));
35b1e5cc 13186 }
35b1e5cc
SS
13187}
13188
57810aa7 13189bool
f6ac5f3d 13190remote_target::can_download_tracepoint ()
1e4d1764 13191{
1e51243a
PA
13192 struct remote_state *rs = get_remote_state ();
13193 struct trace_status *ts;
13194 int status;
13195
13196 /* Don't try to install tracepoints until we've relocated our
13197 symbols, and fetched and merged the target's tracepoint list with
13198 ours. */
13199 if (rs->starting_up)
57810aa7 13200 return false;
1e51243a
PA
13201
13202 ts = current_trace_status ();
f6ac5f3d 13203 status = get_trace_status (ts);
1e4d1764
YQ
13204
13205 if (status == -1 || !ts->running_known || !ts->running)
57810aa7 13206 return false;
1e4d1764
YQ
13207
13208 /* If we are in a tracing experiment, but remote stub doesn't support
13209 installing tracepoint in trace, we have to return. */
13210 if (!remote_supports_install_in_trace ())
57810aa7 13211 return false;
1e4d1764 13212
57810aa7 13213 return true;
1e4d1764
YQ
13214}
13215
13216
f6ac5f3d
PA
13217void
13218remote_target::download_trace_state_variable (const trace_state_variable &tsv)
35b1e5cc
SS
13219{
13220 struct remote_state *rs = get_remote_state ();
00bf0b85 13221 char *p;
35b1e5cc 13222
8d64371b 13223 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
c252925c
SM
13224 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
13225 tsv.builtin);
8d64371b
TT
13226 p = rs->buf.data () + strlen (rs->buf.data ());
13227 if ((p - rs->buf.data ()) + tsv.name.length () * 2
13228 >= get_remote_packet_size ())
00bf0b85 13229 error (_("Trace state variable name too long for tsv definition packet"));
c252925c 13230 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
00bf0b85 13231 *p++ = '\0';
35b1e5cc 13232 putpkt (rs->buf);
b6bb3468 13233 remote_get_noisy_reply ();
8d64371b 13234 if (rs->buf[0] == '\0')
ad91cd99 13235 error (_("Target does not support this command."));
8d64371b 13236 if (strcmp (rs->buf.data (), "OK") != 0)
ad91cd99 13237 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
13238}
13239
f6ac5f3d
PA
13240void
13241remote_target::enable_tracepoint (struct bp_location *location)
d248b706
KY
13242{
13243 struct remote_state *rs = get_remote_state ();
d248b706 13244
8d64371b 13245 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
53807e9f
TT
13246 location->owner->number,
13247 phex (location->address, sizeof (CORE_ADDR)));
d248b706 13248 putpkt (rs->buf);
b6bb3468 13249 remote_get_noisy_reply ();
8d64371b 13250 if (rs->buf[0] == '\0')
d248b706 13251 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
8d64371b 13252 if (strcmp (rs->buf.data (), "OK") != 0)
d248b706
KY
13253 error (_("Error on target while enabling tracepoint."));
13254}
13255
f6ac5f3d
PA
13256void
13257remote_target::disable_tracepoint (struct bp_location *location)
d248b706
KY
13258{
13259 struct remote_state *rs = get_remote_state ();
d248b706 13260
8d64371b 13261 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
53807e9f
TT
13262 location->owner->number,
13263 phex (location->address, sizeof (CORE_ADDR)));
d248b706 13264 putpkt (rs->buf);
b6bb3468 13265 remote_get_noisy_reply ();
8d64371b 13266 if (rs->buf[0] == '\0')
d248b706 13267 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
8d64371b 13268 if (strcmp (rs->buf.data (), "OK") != 0)
d248b706
KY
13269 error (_("Error on target while disabling tracepoint."));
13270}
13271
f6ac5f3d
PA
13272void
13273remote_target::trace_set_readonly_regions ()
35b1e5cc
SS
13274{
13275 asection *s;
13276 bfd_size_type size;
608bcef2 13277 bfd_vma vma;
35b1e5cc 13278 int anysecs = 0;
c2fa21f1 13279 int offset = 0;
35b1e5cc 13280
7e10abd1 13281 if (!current_program_space->exec_bfd ())
35b1e5cc
SS
13282 return; /* No information to give. */
13283
b6bb3468
PA
13284 struct remote_state *rs = get_remote_state ();
13285
8d64371b
TT
13286 strcpy (rs->buf.data (), "QTro");
13287 offset = strlen (rs->buf.data ());
7e10abd1 13288 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
35b1e5cc
SS
13289 {
13290 char tmp1[40], tmp2[40];
c2fa21f1 13291 int sec_length;
35b1e5cc
SS
13292
13293 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 13294 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
13295 (s->flags & SEC_READONLY) == 0)
13296 continue;
13297
13298 anysecs = 1;
fd361982
AM
13299 vma = bfd_section_vma (s);
13300 size = bfd_section_size (s);
608bcef2
HZ
13301 sprintf_vma (tmp1, vma);
13302 sprintf_vma (tmp2, vma + size);
c2fa21f1 13303 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
8d64371b 13304 if (offset + sec_length + 1 > rs->buf.size ())
c2fa21f1 13305 {
4082afcc 13306 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 13307 warning (_("\
c2fa21f1
HZ
13308Too many sections for read-only sections definition packet."));
13309 break;
13310 }
8d64371b 13311 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
bba74b36 13312 tmp1, tmp2);
c2fa21f1 13313 offset += sec_length;
35b1e5cc
SS
13314 }
13315 if (anysecs)
13316 {
b6bb3468 13317 putpkt (rs->buf);
8d64371b 13318 getpkt (&rs->buf, 0);
35b1e5cc
SS
13319 }
13320}
13321
f6ac5f3d
PA
13322void
13323remote_target::trace_start ()
35b1e5cc 13324{
b6bb3468
PA
13325 struct remote_state *rs = get_remote_state ();
13326
35b1e5cc 13327 putpkt ("QTStart");
b6bb3468 13328 remote_get_noisy_reply ();
8d64371b 13329 if (rs->buf[0] == '\0')
ad91cd99 13330 error (_("Target does not support this command."));
8d64371b
TT
13331 if (strcmp (rs->buf.data (), "OK") != 0)
13332 error (_("Bogus reply from target: %s"), rs->buf.data ());
35b1e5cc
SS
13333}
13334
f6ac5f3d
PA
13335int
13336remote_target::get_trace_status (struct trace_status *ts)
35b1e5cc 13337{
953b98d1 13338 /* Initialize it just to avoid a GCC false warning. */
f652de6f 13339 char *p = NULL;
bd3eecc3 13340 enum packet_result result;
b6bb3468 13341 struct remote_state *rs = get_remote_state ();
bd3eecc3 13342
4082afcc 13343 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 13344 return -1;
a744cf53 13345
7b9a15e1 13346 /* FIXME we need to get register block size some other way. */
5cd63fda 13347 trace_regblock_size
9d6eea31 13348 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
00bf0b85 13349
049dc89b
JK
13350 putpkt ("qTStatus");
13351
a70b8144 13352 try
67f41397 13353 {
b6bb3468 13354 p = remote_get_noisy_reply ();
67f41397 13355 }
230d2906 13356 catch (const gdb_exception_error &ex)
67f41397 13357 {
598d3636
JK
13358 if (ex.error != TARGET_CLOSE_ERROR)
13359 {
13360 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13361 return -1;
13362 }
eedc3f4f 13363 throw;
67f41397 13364 }
00bf0b85 13365
bd3eecc3
PA
13366 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13367
00bf0b85 13368 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 13369 if (result == PACKET_UNKNOWN)
00bf0b85 13370 return -1;
35b1e5cc 13371
00bf0b85 13372 /* We're working with a live target. */
f5911ea1 13373 ts->filename = NULL;
00bf0b85 13374
00bf0b85 13375 if (*p++ != 'T')
8d64371b 13376 error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
35b1e5cc 13377
84cebc4a
YQ
13378 /* Function 'parse_trace_status' sets default value of each field of
13379 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
13380 parse_trace_status (p, ts);
13381
13382 return ts->running;
35b1e5cc
SS
13383}
13384
f6ac5f3d
PA
13385void
13386remote_target::get_tracepoint_status (struct breakpoint *bp,
13387 struct uploaded_tp *utp)
f196051f
SS
13388{
13389 struct remote_state *rs = get_remote_state ();
f196051f
SS
13390 char *reply;
13391 struct bp_location *loc;
13392 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 13393 size_t size = get_remote_packet_size ();
f196051f
SS
13394
13395 if (tp)
13396 {
c1fc2657 13397 tp->hit_count = 0;
f196051f 13398 tp->traceframe_usage = 0;
c1fc2657 13399 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
13400 {
13401 /* If the tracepoint was never downloaded, don't go asking for
13402 any status. */
13403 if (tp->number_on_target == 0)
13404 continue;
8d64371b 13405 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
bba74b36 13406 phex_nz (loc->address, 0));
f196051f 13407 putpkt (rs->buf);
b6bb3468 13408 reply = remote_get_noisy_reply ();
f196051f
SS
13409 if (reply && *reply)
13410 {
13411 if (*reply == 'V')
13412 parse_tracepoint_status (reply + 1, bp, utp);
13413 }
13414 }
13415 }
13416 else if (utp)
13417 {
13418 utp->hit_count = 0;
13419 utp->traceframe_usage = 0;
8d64371b 13420 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
bba74b36 13421 phex_nz (utp->addr, 0));
f196051f 13422 putpkt (rs->buf);
b6bb3468 13423 reply = remote_get_noisy_reply ();
f196051f
SS
13424 if (reply && *reply)
13425 {
13426 if (*reply == 'V')
13427 parse_tracepoint_status (reply + 1, bp, utp);
13428 }
13429 }
13430}
13431
f6ac5f3d
PA
13432void
13433remote_target::trace_stop ()
35b1e5cc 13434{
b6bb3468
PA
13435 struct remote_state *rs = get_remote_state ();
13436
35b1e5cc 13437 putpkt ("QTStop");
b6bb3468 13438 remote_get_noisy_reply ();
8d64371b 13439 if (rs->buf[0] == '\0')
ad91cd99 13440 error (_("Target does not support this command."));
8d64371b
TT
13441 if (strcmp (rs->buf.data (), "OK") != 0)
13442 error (_("Bogus reply from target: %s"), rs->buf.data ());
35b1e5cc
SS
13443}
13444
f6ac5f3d
PA
13445int
13446remote_target::trace_find (enum trace_find_type type, int num,
13447 CORE_ADDR addr1, CORE_ADDR addr2,
13448 int *tpp)
35b1e5cc
SS
13449{
13450 struct remote_state *rs = get_remote_state ();
8d64371b 13451 char *endbuf = rs->buf.data () + get_remote_packet_size ();
35b1e5cc
SS
13452 char *p, *reply;
13453 int target_frameno = -1, target_tracept = -1;
13454
e6e4e701
PA
13455 /* Lookups other than by absolute frame number depend on the current
13456 trace selected, so make sure it is correct on the remote end
13457 first. */
13458 if (type != tfind_number)
13459 set_remote_traceframe ();
13460
8d64371b 13461 p = rs->buf.data ();
35b1e5cc
SS
13462 strcpy (p, "QTFrame:");
13463 p = strchr (p, '\0');
13464 switch (type)
13465 {
13466 case tfind_number:
bba74b36 13467 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
13468 break;
13469 case tfind_pc:
bba74b36 13470 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
13471 break;
13472 case tfind_tp:
bba74b36 13473 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
13474 break;
13475 case tfind_range:
bba74b36
YQ
13476 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13477 phex_nz (addr2, 0));
35b1e5cc
SS
13478 break;
13479 case tfind_outside:
bba74b36
YQ
13480 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13481 phex_nz (addr2, 0));
35b1e5cc
SS
13482 break;
13483 default:
9b20d036 13484 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
13485 }
13486
13487 putpkt (rs->buf);
b6bb3468 13488 reply = remote_get_noisy_reply ();
ad91cd99
PA
13489 if (*reply == '\0')
13490 error (_("Target does not support this command."));
35b1e5cc
SS
13491
13492 while (reply && *reply)
13493 switch (*reply)
13494 {
13495 case 'F':
f197e0f1
VP
13496 p = ++reply;
13497 target_frameno = (int) strtol (p, &reply, 16);
13498 if (reply == p)
13499 error (_("Unable to parse trace frame number"));
e6e4e701
PA
13500 /* Don't update our remote traceframe number cache on failure
13501 to select a remote traceframe. */
f197e0f1
VP
13502 if (target_frameno == -1)
13503 return -1;
35b1e5cc
SS
13504 break;
13505 case 'T':
f197e0f1
VP
13506 p = ++reply;
13507 target_tracept = (int) strtol (p, &reply, 16);
13508 if (reply == p)
13509 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
13510 break;
13511 case 'O': /* "OK"? */
13512 if (reply[1] == 'K' && reply[2] == '\0')
13513 reply += 2;
13514 else
13515 error (_("Bogus reply from target: %s"), reply);
13516 break;
13517 default:
13518 error (_("Bogus reply from target: %s"), reply);
13519 }
13520 if (tpp)
13521 *tpp = target_tracept;
e6e4e701 13522
262e1174 13523 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
13524 return target_frameno;
13525}
13526
57810aa7 13527bool
f6ac5f3d 13528remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
35b1e5cc
SS
13529{
13530 struct remote_state *rs = get_remote_state ();
13531 char *reply;
13532 ULONGEST uval;
13533
e6e4e701
PA
13534 set_remote_traceframe ();
13535
8d64371b 13536 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc 13537 putpkt (rs->buf);
b6bb3468 13538 reply = remote_get_noisy_reply ();
35b1e5cc
SS
13539 if (reply && *reply)
13540 {
13541 if (*reply == 'V')
13542 {
13543 unpack_varlen_hex (reply + 1, &uval);
13544 *val = (LONGEST) uval;
57810aa7 13545 return true;
35b1e5cc
SS
13546 }
13547 }
57810aa7 13548 return false;
35b1e5cc
SS
13549}
13550
f6ac5f3d
PA
13551int
13552remote_target::save_trace_data (const char *filename)
00bf0b85
SS
13553{
13554 struct remote_state *rs = get_remote_state ();
13555 char *p, *reply;
13556
8d64371b 13557 p = rs->buf.data ();
00bf0b85
SS
13558 strcpy (p, "QTSave:");
13559 p += strlen (p);
8d64371b
TT
13560 if ((p - rs->buf.data ()) + strlen (filename) * 2
13561 >= get_remote_packet_size ())
00bf0b85 13562 error (_("Remote file name too long for trace save packet"));
9f1b45b0 13563 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
13564 *p++ = '\0';
13565 putpkt (rs->buf);
b6bb3468 13566 reply = remote_get_noisy_reply ();
d6c5869f 13567 if (*reply == '\0')
ad91cd99
PA
13568 error (_("Target does not support this command."));
13569 if (strcmp (reply, "OK") != 0)
13570 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
13571 return 0;
13572}
13573
13574/* This is basically a memory transfer, but needs to be its own packet
13575 because we don't know how the target actually organizes its trace
13576 memory, plus we want to be able to ask for as much as possible, but
13577 not be unhappy if we don't get as much as we ask for. */
13578
f6ac5f3d
PA
13579LONGEST
13580remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
13581{
13582 struct remote_state *rs = get_remote_state ();
13583 char *reply;
13584 char *p;
13585 int rslt;
13586
8d64371b 13587 p = rs->buf.data ();
00bf0b85
SS
13588 strcpy (p, "qTBuffer:");
13589 p += strlen (p);
13590 p += hexnumstr (p, offset);
13591 *p++ = ',';
13592 p += hexnumstr (p, len);
13593 *p++ = '\0';
13594
13595 putpkt (rs->buf);
b6bb3468 13596 reply = remote_get_noisy_reply ();
00bf0b85
SS
13597 if (reply && *reply)
13598 {
13599 /* 'l' by itself means we're at the end of the buffer and
13600 there is nothing more to get. */
13601 if (*reply == 'l')
13602 return 0;
13603
13604 /* Convert the reply into binary. Limit the number of bytes to
13605 convert according to our passed-in buffer size, rather than
13606 what was returned in the packet; if the target is
13607 unexpectedly generous and gives us a bigger reply than we
13608 asked for, we don't want to crash. */
b6bb3468 13609 rslt = hex2bin (reply, buf, len);
00bf0b85
SS
13610 return rslt;
13611 }
13612
13613 /* Something went wrong, flag as an error. */
13614 return -1;
13615}
13616
f6ac5f3d
PA
13617void
13618remote_target::set_disconnected_tracing (int val)
35b1e5cc
SS
13619{
13620 struct remote_state *rs = get_remote_state ();
13621
4082afcc 13622 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 13623 {
ad91cd99
PA
13624 char *reply;
13625
8d64371b
TT
13626 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13627 "QTDisconnected:%x", val);
33da3f1c 13628 putpkt (rs->buf);
b6bb3468 13629 reply = remote_get_noisy_reply ();
ad91cd99 13630 if (*reply == '\0')
33da3f1c 13631 error (_("Target does not support this command."));
ad91cd99 13632 if (strcmp (reply, "OK") != 0)
dda83cd7 13633 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
13634 }
13635 else if (val)
13636 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
13637}
13638
f6ac5f3d
PA
13639int
13640remote_target::core_of_thread (ptid_t ptid)
dc146f7c 13641{
5b6d1e4f 13642 thread_info *info = find_thread_ptid (this, ptid);
a744cf53 13643
7aabaf9d
SM
13644 if (info != NULL && info->priv != NULL)
13645 return get_remote_thread_info (info)->core;
13646
dc146f7c
VP
13647 return -1;
13648}
13649
f6ac5f3d
PA
13650void
13651remote_target::set_circular_trace_buffer (int val)
4daf5ac0
SS
13652{
13653 struct remote_state *rs = get_remote_state ();
ad91cd99 13654 char *reply;
4daf5ac0 13655
8d64371b
TT
13656 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13657 "QTBuffer:circular:%x", val);
4daf5ac0 13658 putpkt (rs->buf);
b6bb3468 13659 reply = remote_get_noisy_reply ();
ad91cd99 13660 if (*reply == '\0')
4daf5ac0 13661 error (_("Target does not support this command."));
ad91cd99
PA
13662 if (strcmp (reply, "OK") != 0)
13663 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
13664}
13665
f6ac5f3d
PA
13666traceframe_info_up
13667remote_target::traceframe_info ()
b3b9301e 13668{
9018be22 13669 gdb::optional<gdb::char_vector> text
8b88a78e 13670 = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
b7b030ad 13671 NULL);
9018be22
SM
13672 if (text)
13673 return parse_traceframe_info (text->data ());
b3b9301e
PA
13674
13675 return NULL;
13676}
13677
405f8e94
SS
13678/* Handle the qTMinFTPILen packet. Returns the minimum length of
13679 instruction on which a fast tracepoint may be placed. Returns -1
13680 if the packet is not supported, and 0 if the minimum instruction
13681 length is unknown. */
13682
f6ac5f3d
PA
13683int
13684remote_target::get_min_fast_tracepoint_insn_len ()
405f8e94
SS
13685{
13686 struct remote_state *rs = get_remote_state ();
13687 char *reply;
13688
e886a173
PA
13689 /* If we're not debugging a process yet, the IPA can't be
13690 loaded. */
55f6301a 13691 if (!target_has_execution ())
e886a173
PA
13692 return 0;
13693
13694 /* Make sure the remote is pointing at the right process. */
13695 set_general_process ();
13696
8d64371b 13697 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
405f8e94 13698 putpkt (rs->buf);
b6bb3468 13699 reply = remote_get_noisy_reply ();
405f8e94
SS
13700 if (*reply == '\0')
13701 return -1;
13702 else
13703 {
13704 ULONGEST min_insn_len;
13705
13706 unpack_varlen_hex (reply, &min_insn_len);
13707
13708 return (int) min_insn_len;
13709 }
13710}
13711
f6ac5f3d
PA
13712void
13713remote_target::set_trace_buffer_size (LONGEST val)
f6f899bf 13714{
4082afcc 13715 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
13716 {
13717 struct remote_state *rs = get_remote_state ();
8d64371b
TT
13718 char *buf = rs->buf.data ();
13719 char *endbuf = buf + get_remote_packet_size ();
f6f899bf
HAQ
13720 enum packet_result result;
13721
13722 gdb_assert (val >= 0 || val == -1);
13723 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13724 /* Send -1 as literal "-1" to avoid host size dependency. */
13725 if (val < 0)
13726 {
13727 *buf++ = '-';
dda83cd7 13728 buf += hexnumstr (buf, (ULONGEST) -val);
f6f899bf
HAQ
13729 }
13730 else
13731 buf += hexnumstr (buf, (ULONGEST) val);
13732
13733 putpkt (rs->buf);
b6bb3468 13734 remote_get_noisy_reply ();
f6f899bf
HAQ
13735 result = packet_ok (rs->buf,
13736 &remote_protocol_packets[PACKET_QTBuffer_size]);
13737
13738 if (result != PACKET_OK)
8d64371b 13739 warning (_("Bogus reply from target: %s"), rs->buf.data ());
f6f899bf
HAQ
13740 }
13741}
13742
57810aa7 13743bool
f6ac5f3d
PA
13744remote_target::set_trace_notes (const char *user, const char *notes,
13745 const char *stop_notes)
f196051f
SS
13746{
13747 struct remote_state *rs = get_remote_state ();
13748 char *reply;
8d64371b
TT
13749 char *buf = rs->buf.data ();
13750 char *endbuf = buf + get_remote_packet_size ();
f196051f
SS
13751 int nbytes;
13752
13753 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13754 if (user)
13755 {
13756 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13757 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13758 buf += 2 * nbytes;
13759 *buf++ = ';';
13760 }
13761 if (notes)
13762 {
13763 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13764 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13765 buf += 2 * nbytes;
13766 *buf++ = ';';
13767 }
13768 if (stop_notes)
13769 {
13770 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13771 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13772 buf += 2 * nbytes;
13773 *buf++ = ';';
13774 }
13775 /* Ensure the buffer is terminated. */
13776 *buf = '\0';
13777
13778 putpkt (rs->buf);
b6bb3468 13779 reply = remote_get_noisy_reply ();
f196051f 13780 if (*reply == '\0')
57810aa7 13781 return false;
f196051f
SS
13782
13783 if (strcmp (reply, "OK") != 0)
13784 error (_("Bogus reply from target: %s"), reply);
13785
57810aa7 13786 return true;
f196051f
SS
13787}
13788
57810aa7
PA
13789bool
13790remote_target::use_agent (bool use)
d1feda86 13791{
4082afcc 13792 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13793 {
13794 struct remote_state *rs = get_remote_state ();
13795
13796 /* If the stub supports QAgent. */
8d64371b 13797 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
d1feda86 13798 putpkt (rs->buf);
8d64371b 13799 getpkt (&rs->buf, 0);
d1feda86 13800
8d64371b 13801 if (strcmp (rs->buf.data (), "OK") == 0)
d1feda86 13802 {
f6ac5f3d 13803 ::use_agent = use;
57810aa7 13804 return true;
d1feda86
YQ
13805 }
13806 }
13807
57810aa7 13808 return false;
d1feda86
YQ
13809}
13810
57810aa7 13811bool
f6ac5f3d 13812remote_target::can_use_agent ()
d1feda86 13813{
4082afcc 13814 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13815}
13816
9accd112
MM
13817struct btrace_target_info
13818{
13819 /* The ptid of the traced thread. */
13820 ptid_t ptid;
f4abbc16
MM
13821
13822 /* The obtained branch trace configuration. */
13823 struct btrace_config conf;
9accd112
MM
13824};
13825
f4abbc16
MM
13826/* Reset our idea of our target's btrace configuration. */
13827
13828static void
6b8edb51 13829remote_btrace_reset (remote_state *rs)
f4abbc16 13830{
f4abbc16
MM
13831 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13832}
13833
f4abbc16
MM
13834/* Synchronize the configuration with the target. */
13835
6b8edb51
PA
13836void
13837remote_target::btrace_sync_conf (const btrace_config *conf)
f4abbc16 13838{
d33501a5
MM
13839 struct packet_config *packet;
13840 struct remote_state *rs;
13841 char *buf, *pos, *endbuf;
13842
13843 rs = get_remote_state ();
8d64371b 13844 buf = rs->buf.data ();
d33501a5
MM
13845 endbuf = buf + get_remote_packet_size ();
13846
13847 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13848 if (packet_config_support (packet) == PACKET_ENABLE
13849 && conf->bts.size != rs->btrace_config.bts.size)
13850 {
13851 pos = buf;
13852 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
dda83cd7 13853 conf->bts.size);
d33501a5
MM
13854
13855 putpkt (buf);
8d64371b 13856 getpkt (&rs->buf, 0);
d33501a5
MM
13857
13858 if (packet_ok (buf, packet) == PACKET_ERROR)
13859 {
13860 if (buf[0] == 'E' && buf[1] == '.')
13861 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13862 else
13863 error (_("Failed to configure the BTS buffer size."));
13864 }
13865
13866 rs->btrace_config.bts.size = conf->bts.size;
13867 }
b20a6524
MM
13868
13869 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13870 if (packet_config_support (packet) == PACKET_ENABLE
13871 && conf->pt.size != rs->btrace_config.pt.size)
13872 {
13873 pos = buf;
13874 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
dda83cd7 13875 conf->pt.size);
b20a6524
MM
13876
13877 putpkt (buf);
8d64371b 13878 getpkt (&rs->buf, 0);
b20a6524
MM
13879
13880 if (packet_ok (buf, packet) == PACKET_ERROR)
13881 {
13882 if (buf[0] == 'E' && buf[1] == '.')
13883 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13884 else
13885 error (_("Failed to configure the trace buffer size."));
13886 }
13887
13888 rs->btrace_config.pt.size = conf->pt.size;
13889 }
f4abbc16
MM
13890}
13891
13892/* Read the current thread's btrace configuration from the target and
13893 store it into CONF. */
13894
13895static void
13896btrace_read_config (struct btrace_config *conf)
13897{
9018be22 13898 gdb::optional<gdb::char_vector> xml
8b88a78e 13899 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
9018be22
SM
13900 if (xml)
13901 parse_xml_btrace_conf (conf, xml->data ());
f4abbc16
MM
13902}
13903
c0272db5
TW
13904/* Maybe reopen target btrace. */
13905
6b8edb51
PA
13906void
13907remote_target::remote_btrace_maybe_reopen ()
c0272db5
TW
13908{
13909 struct remote_state *rs = get_remote_state ();
c0272db5 13910 int btrace_target_pushed = 0;
15766370 13911#if !defined (HAVE_LIBIPT)
c0272db5 13912 int warned = 0;
15766370 13913#endif
c0272db5 13914
aedbe3bb
CM
13915 /* Don't bother walking the entirety of the remote thread list when
13916 we know the feature isn't supported by the remote. */
13917 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
13918 return;
13919
5ed8105e
PA
13920 scoped_restore_current_thread restore_thread;
13921
5b6d1e4f 13922 for (thread_info *tp : all_non_exited_threads (this))
c0272db5
TW
13923 {
13924 set_general_thread (tp->ptid);
13925
13926 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13927 btrace_read_config (&rs->btrace_config);
13928
13929 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13930 continue;
13931
13932#if !defined (HAVE_LIBIPT)
13933 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13934 {
13935 if (!warned)
13936 {
13937 warned = 1;
c4e12631
MM
13938 warning (_("Target is recording using Intel Processor Trace "
13939 "but support was disabled at compile time."));
c0272db5
TW
13940 }
13941
13942 continue;
13943 }
13944#endif /* !defined (HAVE_LIBIPT) */
13945
13946 /* Push target, once, but before anything else happens. This way our
13947 changes to the threads will be cleaned up by unpushing the target
13948 in case btrace_read_config () throws. */
13949 if (!btrace_target_pushed)
13950 {
13951 btrace_target_pushed = 1;
13952 record_btrace_push_target ();
13953 printf_filtered (_("Target is recording using %s.\n"),
13954 btrace_format_string (rs->btrace_config.format));
13955 }
13956
13957 tp->btrace.target = XCNEW (struct btrace_target_info);
13958 tp->btrace.target->ptid = tp->ptid;
13959 tp->btrace.target->conf = rs->btrace_config;
13960 }
c0272db5
TW
13961}
13962
9accd112
MM
13963/* Enable branch tracing. */
13964
f6ac5f3d
PA
13965struct btrace_target_info *
13966remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
9accd112
MM
13967{
13968 struct btrace_target_info *tinfo = NULL;
b20a6524 13969 struct packet_config *packet = NULL;
9accd112 13970 struct remote_state *rs = get_remote_state ();
8d64371b
TT
13971 char *buf = rs->buf.data ();
13972 char *endbuf = buf + get_remote_packet_size ();
9accd112 13973
b20a6524
MM
13974 switch (conf->format)
13975 {
13976 case BTRACE_FORMAT_BTS:
13977 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13978 break;
13979
13980 case BTRACE_FORMAT_PT:
13981 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13982 break;
13983 }
13984
13985 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13986 error (_("Target does not support branch tracing."));
13987
f4abbc16
MM
13988 btrace_sync_conf (conf);
13989
9accd112
MM
13990 set_general_thread (ptid);
13991
13992 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13993 putpkt (rs->buf);
8d64371b 13994 getpkt (&rs->buf, 0);
9accd112
MM
13995
13996 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13997 {
13998 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13999 error (_("Could not enable branch tracing for %s: %s"),
a068643d 14000 target_pid_to_str (ptid).c_str (), &rs->buf[2]);
9accd112
MM
14001 else
14002 error (_("Could not enable branch tracing for %s."),
a068643d 14003 target_pid_to_str (ptid).c_str ());
9accd112
MM
14004 }
14005
8d749320 14006 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
14007 tinfo->ptid = ptid;
14008
f4abbc16
MM
14009 /* If we fail to read the configuration, we lose some information, but the
14010 tracing itself is not impacted. */
a70b8144 14011 try
492d29ea
PA
14012 {
14013 btrace_read_config (&tinfo->conf);
14014 }
230d2906 14015 catch (const gdb_exception_error &err)
492d29ea
PA
14016 {
14017 if (err.message != NULL)
3d6e9d23 14018 warning ("%s", err.what ());
492d29ea 14019 }
f4abbc16 14020
9accd112
MM
14021 return tinfo;
14022}
14023
14024/* Disable branch tracing. */
14025
f6ac5f3d
PA
14026void
14027remote_target::disable_btrace (struct btrace_target_info *tinfo)
9accd112
MM
14028{
14029 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
14030 struct remote_state *rs = get_remote_state ();
8d64371b
TT
14031 char *buf = rs->buf.data ();
14032 char *endbuf = buf + get_remote_packet_size ();
9accd112 14033
4082afcc 14034 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
14035 error (_("Target does not support branch tracing."));
14036
14037 set_general_thread (tinfo->ptid);
14038
14039 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14040 putpkt (rs->buf);
8d64371b 14041 getpkt (&rs->buf, 0);
9accd112
MM
14042
14043 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14044 {
14045 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14046 error (_("Could not disable branch tracing for %s: %s"),
a068643d 14047 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
9accd112
MM
14048 else
14049 error (_("Could not disable branch tracing for %s."),
a068643d 14050 target_pid_to_str (tinfo->ptid).c_str ());
9accd112
MM
14051 }
14052
14053 xfree (tinfo);
14054}
14055
14056/* Teardown branch tracing. */
14057
f6ac5f3d
PA
14058void
14059remote_target::teardown_btrace (struct btrace_target_info *tinfo)
9accd112
MM
14060{
14061 /* We must not talk to the target during teardown. */
14062 xfree (tinfo);
14063}
14064
14065/* Read the branch trace. */
14066
f6ac5f3d
PA
14067enum btrace_error
14068remote_target::read_btrace (struct btrace_data *btrace,
14069 struct btrace_target_info *tinfo,
14070 enum btrace_read_type type)
9accd112
MM
14071{
14072 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
9accd112 14073 const char *annex;
9accd112 14074
4082afcc 14075 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
14076 error (_("Target does not support branch tracing."));
14077
14078#if !defined(HAVE_LIBEXPAT)
14079 error (_("Cannot process branch tracing result. XML parsing not supported."));
14080#endif
14081
14082 switch (type)
14083 {
864089d2 14084 case BTRACE_READ_ALL:
9accd112
MM
14085 annex = "all";
14086 break;
864089d2 14087 case BTRACE_READ_NEW:
9accd112
MM
14088 annex = "new";
14089 break;
969c39fb
MM
14090 case BTRACE_READ_DELTA:
14091 annex = "delta";
14092 break;
9accd112
MM
14093 default:
14094 internal_error (__FILE__, __LINE__,
14095 _("Bad branch tracing read type: %u."),
14096 (unsigned int) type);
14097 }
14098
9018be22 14099 gdb::optional<gdb::char_vector> xml
8b88a78e 14100 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
9018be22 14101 if (!xml)
969c39fb 14102 return BTRACE_ERR_UNKNOWN;
9accd112 14103
9018be22 14104 parse_xml_btrace (btrace, xml->data ());
9accd112 14105
969c39fb 14106 return BTRACE_ERR_NONE;
9accd112
MM
14107}
14108
f6ac5f3d
PA
14109const struct btrace_config *
14110remote_target::btrace_conf (const struct btrace_target_info *tinfo)
f4abbc16
MM
14111{
14112 return &tinfo->conf;
14113}
14114
57810aa7 14115bool
f6ac5f3d 14116remote_target::augmented_libraries_svr4_read ()
ced63ec0 14117{
4082afcc
PA
14118 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
14119 == PACKET_ENABLE);
ced63ec0
GB
14120}
14121
9dd130a0
TT
14122/* Implementation of to_load. */
14123
f6ac5f3d
PA
14124void
14125remote_target::load (const char *name, int from_tty)
9dd130a0
TT
14126{
14127 generic_load (name, from_tty);
14128}
14129
c78fa86a
GB
14130/* Accepts an integer PID; returns a string representing a file that
14131 can be opened on the remote side to get the symbols for the child
14132 process. Returns NULL if the operation is not supported. */
14133
f6ac5f3d
PA
14134char *
14135remote_target::pid_to_exec_file (int pid)
c78fa86a 14136{
9018be22 14137 static gdb::optional<gdb::char_vector> filename;
835205d0 14138 char *annex = NULL;
c78fa86a
GB
14139
14140 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
14141 return NULL;
14142
5b6d1e4f 14143 inferior *inf = find_inferior_pid (this, pid);
835205d0
GB
14144 if (inf == NULL)
14145 internal_error (__FILE__, __LINE__,
14146 _("not currently attached to process %d"), pid);
14147
14148 if (!inf->fake_pid_p)
14149 {
14150 const int annex_size = 9;
14151
224c3ddb 14152 annex = (char *) alloca (annex_size);
835205d0
GB
14153 xsnprintf (annex, annex_size, "%x", pid);
14154 }
14155
8b88a78e 14156 filename = target_read_stralloc (current_top_target (),
c78fa86a
GB
14157 TARGET_OBJECT_EXEC_FILE, annex);
14158
9018be22 14159 return filename ? filename->data () : nullptr;
c78fa86a
GB
14160}
14161
750ce8d1
YQ
14162/* Implement the to_can_do_single_step target_ops method. */
14163
f6ac5f3d
PA
14164int
14165remote_target::can_do_single_step ()
750ce8d1
YQ
14166{
14167 /* We can only tell whether target supports single step or not by
14168 supported s and S vCont actions if the stub supports vContSupported
14169 feature. If the stub doesn't support vContSupported feature,
14170 we have conservatively to think target doesn't supports single
14171 step. */
14172 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
14173 {
14174 struct remote_state *rs = get_remote_state ();
14175
14176 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 14177 remote_vcont_probe ();
750ce8d1
YQ
14178
14179 return rs->supports_vCont.s && rs->supports_vCont.S;
14180 }
14181 else
14182 return 0;
14183}
14184
3a00c802
PA
14185/* Implementation of the to_execution_direction method for the remote
14186 target. */
14187
f6ac5f3d
PA
14188enum exec_direction_kind
14189remote_target::execution_direction ()
3a00c802
PA
14190{
14191 struct remote_state *rs = get_remote_state ();
14192
14193 return rs->last_resume_exec_dir;
14194}
14195
f6327dcb
KB
14196/* Return pointer to the thread_info struct which corresponds to
14197 THREAD_HANDLE (having length HANDLE_LEN). */
14198
f6ac5f3d
PA
14199thread_info *
14200remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
14201 int handle_len,
14202 inferior *inf)
f6327dcb 14203{
5b6d1e4f 14204 for (thread_info *tp : all_non_exited_threads (this))
f6327dcb 14205 {
7aabaf9d 14206 remote_thread_info *priv = get_remote_thread_info (tp);
f6327dcb
KB
14207
14208 if (tp->inf == inf && priv != NULL)
dda83cd7 14209 {
7aabaf9d 14210 if (handle_len != priv->thread_handle.size ())
f6327dcb 14211 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
dda83cd7 14212 handle_len, priv->thread_handle.size ());
7aabaf9d 14213 if (memcmp (thread_handle, priv->thread_handle.data (),
dda83cd7 14214 handle_len) == 0)
f6327dcb
KB
14215 return tp;
14216 }
14217 }
14218
14219 return NULL;
14220}
14221
3d6c6204
KB
14222gdb::byte_vector
14223remote_target::thread_info_to_thread_handle (struct thread_info *tp)
14224{
14225 remote_thread_info *priv = get_remote_thread_info (tp);
14226 return priv->thread_handle;
14227}
14228
57810aa7 14229bool
f6ac5f3d 14230remote_target::can_async_p ()
6426a772 14231{
5d93a237
TT
14232 struct remote_state *rs = get_remote_state ();
14233
3015c064
SM
14234 /* We don't go async if the user has explicitly prevented it with the
14235 "maint set target-async" command. */
c6ebd6cf 14236 if (!target_async_permitted)
57810aa7 14237 return false;
75c99385 14238
23860348 14239 /* We're async whenever the serial device is. */
5d93a237 14240 return serial_can_async_p (rs->remote_desc);
6426a772
JM
14241}
14242
57810aa7 14243bool
f6ac5f3d 14244remote_target::is_async_p ()
6426a772 14245{
5d93a237
TT
14246 struct remote_state *rs = get_remote_state ();
14247
c6ebd6cf 14248 if (!target_async_permitted)
75c99385 14249 /* We only enable async when the user specifically asks for it. */
57810aa7 14250 return false;
75c99385 14251
23860348 14252 /* We're async whenever the serial device is. */
5d93a237 14253 return serial_is_async_p (rs->remote_desc);
6426a772
JM
14254}
14255
2acceee2
JM
14256/* Pass the SERIAL event on and up to the client. One day this code
14257 will be able to delay notifying the client of an event until the
23860348 14258 point where an entire packet has been received. */
2acceee2 14259
2acceee2
JM
14260static serial_event_ftype remote_async_serial_handler;
14261
6426a772 14262static void
819cc324 14263remote_async_serial_handler (struct serial *scb, void *context)
6426a772 14264{
2acceee2
JM
14265 /* Don't propogate error information up to the client. Instead let
14266 the client find out about the error by querying the target. */
b1a35af2 14267 inferior_event_handler (INF_REG_EVENT);
2acceee2
JM
14268}
14269
74531fed
PA
14270static void
14271remote_async_inferior_event_handler (gdb_client_data data)
14272{
6b36ddeb 14273 inferior_event_handler (INF_REG_EVENT);
74531fed
PA
14274}
14275
5b6d1e4f
PA
14276int
14277remote_target::async_wait_fd ()
14278{
14279 struct remote_state *rs = get_remote_state ();
14280 return rs->remote_desc->fd;
14281}
14282
f6ac5f3d
PA
14283void
14284remote_target::async (int enable)
2acceee2 14285{
5d93a237
TT
14286 struct remote_state *rs = get_remote_state ();
14287
6a3753b3 14288 if (enable)
2acceee2 14289 {
88b496c3 14290 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
14291
14292 /* If there are pending events in the stop reply queue tell the
14293 event loop to process them. */
953edf2b 14294 if (!rs->stop_reply_queue.empty ())
6b8edb51 14295 mark_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14296 /* For simplicity, below we clear the pending events token
14297 without remembering whether it is marked, so here we always
14298 mark it. If there's actually no pending notification to
14299 process, this ends up being a no-op (other than a spurious
14300 event-loop wakeup). */
14301 if (target_is_non_stop_p ())
14302 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
14303 }
14304 else
b7d2e916
PA
14305 {
14306 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
14307 /* If the core is disabling async, it doesn't want to be
14308 disturbed with target events. Clear all async event sources
14309 too. */
6b8edb51 14310 clear_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14311 if (target_is_non_stop_p ())
14312 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 14313 }
6426a772
JM
14314}
14315
65706a29
PA
14316/* Implementation of the to_thread_events method. */
14317
f6ac5f3d
PA
14318void
14319remote_target::thread_events (int enable)
65706a29
PA
14320{
14321 struct remote_state *rs = get_remote_state ();
14322 size_t size = get_remote_packet_size ();
65706a29
PA
14323
14324 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14325 return;
14326
8d64371b 14327 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
65706a29 14328 putpkt (rs->buf);
8d64371b 14329 getpkt (&rs->buf, 0);
65706a29
PA
14330
14331 switch (packet_ok (rs->buf,
14332 &remote_protocol_packets[PACKET_QThreadEvents]))
14333 {
14334 case PACKET_OK:
8d64371b
TT
14335 if (strcmp (rs->buf.data (), "OK") != 0)
14336 error (_("Remote refused setting thread events: %s"), rs->buf.data ());
65706a29
PA
14337 break;
14338 case PACKET_ERROR:
8d64371b 14339 warning (_("Remote failure reply: %s"), rs->buf.data ());
65706a29
PA
14340 break;
14341 case PACKET_UNKNOWN:
14342 break;
14343 }
14344}
14345
d471ea57 14346static void
981a3fb3 14347show_remote_cmd (const char *args, int from_tty)
d471ea57 14348{
37a105a1 14349 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 14350 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 14351 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 14352 struct ui_out *uiout = current_uiout;
37a105a1 14353
2e783024 14354 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
14355 for (; list != NULL; list = list->next)
14356 if (strcmp (list->name, "Z-packet") == 0)
14357 continue;
427c3a89
DJ
14358 else if (list->type == not_set_cmd)
14359 /* Alias commands are exactly like the original, except they
14360 don't have the normal type. */
14361 continue;
14362 else
37a105a1 14363 {
2e783024 14364 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 14365
112e8700
SM
14366 uiout->field_string ("name", list->name);
14367 uiout->text (": ");
427c3a89 14368 if (list->type == show_cmd)
f5c4fcd9 14369 do_show_command (NULL, from_tty, list);
427c3a89
DJ
14370 else
14371 cmd_func (list, NULL, from_tty);
37a105a1 14372 }
d471ea57 14373}
5a2468f5 14374
0f71a2f6 14375
23860348 14376/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
14377static void
14378remote_new_objfile (struct objfile *objfile)
14379{
6b8edb51 14380 remote_target *remote = get_current_remote_target ();
5d93a237 14381
6b8edb51
PA
14382 if (remote != NULL) /* Have a remote connection. */
14383 remote->remote_check_symbols ();
dc8acb97
MS
14384}
14385
00bf0b85
SS
14386/* Pull all the tracepoints defined on the target and create local
14387 data structures representing them. We don't want to create real
14388 tracepoints yet, we don't want to mess up the user's existing
14389 collection. */
14390
f6ac5f3d
PA
14391int
14392remote_target::upload_tracepoints (struct uploaded_tp **utpp)
d5551862 14393{
00bf0b85
SS
14394 struct remote_state *rs = get_remote_state ();
14395 char *p;
d5551862 14396
00bf0b85
SS
14397 /* Ask for a first packet of tracepoint definition. */
14398 putpkt ("qTfP");
8d64371b
TT
14399 getpkt (&rs->buf, 0);
14400 p = rs->buf.data ();
00bf0b85 14401 while (*p && *p != 'l')
d5551862 14402 {
00bf0b85
SS
14403 parse_tracepoint_definition (p, utpp);
14404 /* Ask for another packet of tracepoint definition. */
14405 putpkt ("qTsP");
8d64371b
TT
14406 getpkt (&rs->buf, 0);
14407 p = rs->buf.data ();
d5551862 14408 }
00bf0b85 14409 return 0;
d5551862
SS
14410}
14411
f6ac5f3d
PA
14412int
14413remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
d5551862 14414{
00bf0b85 14415 struct remote_state *rs = get_remote_state ();
d5551862 14416 char *p;
d5551862 14417
00bf0b85
SS
14418 /* Ask for a first packet of variable definition. */
14419 putpkt ("qTfV");
8d64371b
TT
14420 getpkt (&rs->buf, 0);
14421 p = rs->buf.data ();
00bf0b85 14422 while (*p && *p != 'l')
d5551862 14423 {
00bf0b85
SS
14424 parse_tsv_definition (p, utsvp);
14425 /* Ask for another packet of variable definition. */
14426 putpkt ("qTsV");
8d64371b
TT
14427 getpkt (&rs->buf, 0);
14428 p = rs->buf.data ();
d5551862 14429 }
00bf0b85 14430 return 0;
d5551862
SS
14431}
14432
c1e36e3e
PA
14433/* The "set/show range-stepping" show hook. */
14434
14435static void
14436show_range_stepping (struct ui_file *file, int from_tty,
14437 struct cmd_list_element *c,
14438 const char *value)
14439{
14440 fprintf_filtered (file,
14441 _("Debugger's willingness to use range stepping "
14442 "is %s.\n"), value);
14443}
14444
6b8edb51
PA
14445/* Return true if the vCont;r action is supported by the remote
14446 stub. */
14447
14448bool
14449remote_target::vcont_r_supported ()
14450{
14451 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14452 remote_vcont_probe ();
14453
14454 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14455 && get_remote_state ()->supports_vCont.r);
14456}
14457
c1e36e3e
PA
14458/* The "set/show range-stepping" set hook. */
14459
14460static void
eb4c3f4a 14461set_range_stepping (const char *ignore_args, int from_tty,
c1e36e3e
PA
14462 struct cmd_list_element *c)
14463{
6b8edb51
PA
14464 /* When enabling, check whether range stepping is actually supported
14465 by the target, and warn if not. */
c1e36e3e
PA
14466 if (use_range_stepping)
14467 {
6b8edb51
PA
14468 remote_target *remote = get_current_remote_target ();
14469 if (remote == NULL
14470 || !remote->vcont_r_supported ())
14471 warning (_("Range stepping is not supported by the current target"));
c1e36e3e
PA
14472 }
14473}
14474
baf2b57f
SM
14475static void
14476show_remote_debug (struct ui_file *file, int from_tty,
14477 struct cmd_list_element *c, const char *value)
14478{
14479 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"),
14480 value);
14481}
14482
14483static void
14484show_remote_timeout (struct ui_file *file, int from_tty,
14485 struct cmd_list_element *c, const char *value)
14486{
14487 fprintf_filtered (file,
14488 _("Timeout limit to wait for target to respond is %s.\n"),
14489 value);
14490}
14491
6c265988 14492void _initialize_remote ();
c906108c 14493void
6c265988 14494_initialize_remote ()
c906108c 14495{
9a7071a8 14496 struct cmd_list_element *cmd;
6f937416 14497 const char *cmd_name;
ea9c271d 14498
0f71a2f6 14499 /* architecture specific data */
29709017
DJ
14500 remote_g_packet_data_handle =
14501 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 14502
d9f719f1
PA
14503 add_target (remote_target_info, remote_target::open);
14504 add_target (extended_remote_target_info, extended_remote_target::open);
cce74817 14505
dc8acb97 14506 /* Hook into new objfile notification. */
76727919 14507 gdb::observers::new_objfile.attach (remote_new_objfile);
dc8acb97 14508
c906108c
SS
14509#if 0
14510 init_remote_threadtests ();
14511#endif
14512
23860348 14513 /* set/show remote ... */
d471ea57 14514
0743fc83 14515 add_basic_prefix_cmd ("remote", class_maintenance, _("\
590042fc 14516Remote protocol specific variables.\n\
5a2468f5 14517Configure various remote-protocol specific variables such as\n\
590042fc 14518the packets being used."),
0743fc83
TT
14519 &remote_set_cmdlist, "set remote ",
14520 0 /* allow-unknown */, &setlist);
1bedd215 14521 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
590042fc 14522Remote protocol specific variables.\n\
5a2468f5 14523Configure various remote-protocol specific variables such as\n\
590042fc 14524the packets being used."),
cff3e48b 14525 &remote_show_cmdlist, "show remote ",
23860348 14526 0 /* allow-unknown */, &showlist);
5a2468f5 14527
1a966eab
AC
14528 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14529Compare section data on target to the exec file.\n\
95cf3b38
DT
14530Argument is a single section name (default: all loaded sections).\n\
14531To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
14532 &cmdlist);
14533
1a966eab
AC
14534 add_cmd ("packet", class_maintenance, packet_command, _("\
14535Send an arbitrary packet to a remote target.\n\
c906108c
SS
14536 maintenance packet TEXT\n\
14537If GDB is talking to an inferior via the GDB serial protocol, then\n\
14538this command sends the string TEXT to the inferior, and displays the\n\
14539response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 14540terminating `#' character and checksum."),
c906108c
SS
14541 &maintenancelist);
14542
7915a72c
AC
14543 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14544Set whether to send break if interrupted."), _("\
14545Show whether to send break if interrupted."), _("\
14546If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14547 set_remotebreak, show_remotebreak,
e707bbc2 14548 &setlist, &showlist);
9a7071a8 14549 cmd_name = "remotebreak";
cf00cd6f 14550 cmd = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1);
9a7071a8
JB
14551 deprecate_cmd (cmd, "set remote interrupt-sequence");
14552 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
cf00cd6f 14553 cmd = lookup_cmd (&cmd_name, showlist, "", NULL, -1, 1);
9a7071a8
JB
14554 deprecate_cmd (cmd, "show remote interrupt-sequence");
14555
14556 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14557 interrupt_sequence_modes, &interrupt_sequence_mode,
14558 _("\
9a7071a8
JB
14559Set interrupt sequence to remote target."), _("\
14560Show interrupt sequence to remote target."), _("\
14561Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14562 NULL, show_interrupt_sequence,
14563 &remote_set_cmdlist,
14564 &remote_show_cmdlist);
14565
14566 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14567 &interrupt_on_connect, _("\
590042fc
PW
14568Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14569Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
9a7071a8
JB
14570If set, interrupt sequence is sent to remote target."),
14571 NULL, NULL,
14572 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14573
23860348 14574 /* Install commands for configuring memory read/write packets. */
11cf8741 14575
1a966eab
AC
14576 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14577Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14578 &setlist);
1a966eab
AC
14579 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14580Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14581 &showlist);
14582 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14583 set_memory_write_packet_size, _("\
14584Set the maximum number of bytes per memory-write packet.\n\
14585Specify the number of bytes in a packet or 0 (zero) for the\n\
14586default packet size. The actual limit is further reduced\n\
14587dependent on the target. Specify ``fixed'' to disable the\n\
14588further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14589 &remote_set_cmdlist);
14590 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14591 set_memory_read_packet_size, _("\
14592Set the maximum number of bytes per memory-read packet.\n\
14593Specify the number of bytes in a packet or 0 (zero) for the\n\
14594default packet size. The actual limit is further reduced\n\
14595dependent on the target. Specify ``fixed'' to disable the\n\
14596further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14597 &remote_set_cmdlist);
14598 add_cmd ("memory-write-packet-size", no_class,
14599 show_memory_write_packet_size,
1a966eab 14600 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14601 &remote_show_cmdlist);
14602 add_cmd ("memory-read-packet-size", no_class,
14603 show_memory_read_packet_size,
1a966eab 14604 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14605 &remote_show_cmdlist);
c906108c 14606
055303e2 14607 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14608 &remote_hw_watchpoint_limit, _("\
14609Set the maximum number of target hardware watchpoints."), _("\
14610Show the maximum number of target hardware watchpoints."), _("\
055303e2
AB
14611Specify \"unlimited\" for unlimited hardware watchpoints."),
14612 NULL, show_hardware_watchpoint_limit,
14613 &remote_set_cmdlist,
14614 &remote_show_cmdlist);
14615 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
14616 no_class,
480a3f21
PW
14617 &remote_hw_watchpoint_length_limit, _("\
14618Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14619Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
055303e2
AB
14620Specify \"unlimited\" to allow watchpoints of unlimited size."),
14621 NULL, show_hardware_watchpoint_length_limit,
480a3f21 14622 &remote_set_cmdlist, &remote_show_cmdlist);
055303e2 14623 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14624 &remote_hw_breakpoint_limit, _("\
14625Set the maximum number of target hardware breakpoints."), _("\
14626Show the maximum number of target hardware breakpoints."), _("\
055303e2
AB
14627Specify \"unlimited\" for unlimited hardware breakpoints."),
14628 NULL, show_hardware_breakpoint_limit,
b3f42336 14629 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 14630
1b493192
PA
14631 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14632 &remote_address_size, _("\
4d28ad1e
AC
14633Set the maximum size of the address (in bits) in a memory packet."), _("\
14634Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
14635 NULL,
14636 NULL, /* FIXME: i18n: */
14637 &setlist, &showlist);
c906108c 14638
ca4f7f8b
PA
14639 init_all_packet_configs ();
14640
444abaca 14641 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 14642 "X", "binary-download", 1);
0f71a2f6 14643
444abaca 14644 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 14645 "vCont", "verbose-resume", 0);
506fb367 14646
89be2091
DJ
14647 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14648 "QPassSignals", "pass-signals", 0);
14649
82075af2
JS
14650 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14651 "QCatchSyscalls", "catch-syscalls", 0);
14652
9b224c5e
PA
14653 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14654 "QProgramSignals", "program-signals", 0);
14655
bc3b087d
SDJ
14656 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14657 "QSetWorkingDir", "set-working-dir", 0);
14658
aefd8b33
SDJ
14659 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14660 "QStartupWithShell", "startup-with-shell", 0);
14661
0a2dde4a
SDJ
14662 add_packet_config_cmd (&remote_protocol_packets
14663 [PACKET_QEnvironmentHexEncoded],
14664 "QEnvironmentHexEncoded", "environment-hex-encoded",
14665 0);
14666
14667 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14668 "QEnvironmentReset", "environment-reset",
14669 0);
14670
14671 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14672 "QEnvironmentUnset", "environment-unset",
14673 0);
14674
444abaca 14675 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 14676 "qSymbol", "symbol-lookup", 0);
dc8acb97 14677
444abaca 14678 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 14679 "P", "set-register", 1);
d471ea57 14680
444abaca 14681 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 14682 "p", "fetch-register", 1);
b96ec7ac 14683
444abaca 14684 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 14685 "Z0", "software-breakpoint", 0);
d471ea57 14686
444abaca 14687 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 14688 "Z1", "hardware-breakpoint", 0);
d471ea57 14689
444abaca 14690 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 14691 "Z2", "write-watchpoint", 0);
d471ea57 14692
444abaca 14693 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 14694 "Z3", "read-watchpoint", 0);
d471ea57 14695
444abaca 14696 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 14697 "Z4", "access-watchpoint", 0);
d471ea57 14698
0876f84a
DJ
14699 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14700 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 14701
c78fa86a
GB
14702 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14703 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14704
23181151
DJ
14705 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14706 "qXfer:features:read", "target-features", 0);
14707
cfa9d6d9
DJ
14708 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14709 "qXfer:libraries:read", "library-info", 0);
14710
2268b414
JK
14711 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14712 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14713
fd79ecee
DJ
14714 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14715 "qXfer:memory-map:read", "memory-map", 0);
14716
07e059b5 14717 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
dda83cd7 14718 "qXfer:osdata:read", "osdata", 0);
07e059b5 14719
dc146f7c
VP
14720 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14721 "qXfer:threads:read", "threads", 0);
14722
4aa995e1 14723 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
dda83cd7 14724 "qXfer:siginfo:read", "read-siginfo-object", 0);
4aa995e1
PA
14725
14726 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
dda83cd7 14727 "qXfer:siginfo:write", "write-siginfo-object", 0);
4aa995e1 14728
b3b9301e
PA
14729 add_packet_config_cmd
14730 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14731 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14732
169081d0
TG
14733 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14734 "qXfer:uib:read", "unwind-info-block", 0);
14735
444abaca 14736 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14737 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14738 0);
14739
711e434b
PM
14740 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14741 "qGetTIBAddr", "get-thread-information-block-address",
14742 0);
14743
40ab02ce
MS
14744 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14745 "bc", "reverse-continue", 0);
14746
14747 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14748 "bs", "reverse-step", 0);
14749
be2a5f71
DJ
14750 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14751 "qSupported", "supported-packets", 0);
14752
08388c79
DE
14753 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14754 "qSearch:memory", "search-memory", 0);
14755
bd3eecc3
PA
14756 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14757 "qTStatus", "trace-status", 0);
14758
15a201c8
GB
14759 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14760 "vFile:setfs", "hostio-setfs", 0);
14761
a6b151f1
DJ
14762 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14763 "vFile:open", "hostio-open", 0);
14764
14765 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14766 "vFile:pread", "hostio-pread", 0);
14767
14768 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14769 "vFile:pwrite", "hostio-pwrite", 0);
14770
14771 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14772 "vFile:close", "hostio-close", 0);
14773
14774 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14775 "vFile:unlink", "hostio-unlink", 0);
14776
b9e7b9c3
UW
14777 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14778 "vFile:readlink", "hostio-readlink", 0);
14779
0a93529c
GB
14780 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14781 "vFile:fstat", "hostio-fstat", 0);
14782
2d717e4f
DJ
14783 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14784 "vAttach", "attach", 0);
14785
14786 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14787 "vRun", "run", 0);
14788
a6f3e723
SL
14789 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14790 "QStartNoAckMode", "noack", 0);
14791
82f73884
PA
14792 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14793 "vKill", "kill", 0);
14794
0b16c5cf
PA
14795 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14796 "qAttached", "query-attached", 0);
14797
782b2b07 14798 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14799 "ConditionalTracepoints",
14800 "conditional-tracepoints", 0);
3788aec7
LM
14801
14802 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14803 "ConditionalBreakpoints",
14804 "conditional-breakpoints", 0);
14805
d3ce09f5
SS
14806 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14807 "BreakpointCommands",
14808 "breakpoint-commands", 0);
14809
7a697b8d
SS
14810 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14811 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14812
409873ef
SS
14813 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14814 "TracepointSource", "TracepointSource", 0);
14815
d914c394
SS
14816 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14817 "QAllow", "allow", 0);
14818
0fb4aa4b
PA
14819 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14820 "StaticTracepoints", "static-tracepoints", 0);
14821
1e4d1764
YQ
14822 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14823 "InstallInTrace", "install-in-trace", 0);
14824
0fb4aa4b 14825 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
dda83cd7 14826 "qXfer:statictrace:read", "read-sdata-object", 0);
0fb4aa4b 14827
78d85199
YQ
14828 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14829 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14830
03583c20
UW
14831 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14832 "QDisableRandomization", "disable-randomization", 0);
14833
d1feda86
YQ
14834 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14835 "QAgent", "agent", 0);
14836
f6f899bf
HAQ
14837 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14838 "QTBuffer:size", "trace-buffer-size", 0);
14839
9accd112
MM
14840 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14841 "Qbtrace:off", "disable-btrace", 0);
14842
14843 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14844 "Qbtrace:bts", "enable-btrace-bts", 0);
14845
14846 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14847 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14848
14849 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14850 "qXfer:btrace", "read-btrace", 0);
14851
f4abbc16
MM
14852 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14853 "qXfer:btrace-conf", "read-btrace-conf", 0);
14854
d33501a5
MM
14855 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14856 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14857
73b8c1fd
PA
14858 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14859 "multiprocess-feature", "multiprocess-feature", 0);
14860
f7e6eed5 14861 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
dda83cd7 14862 "swbreak-feature", "swbreak-feature", 0);
f7e6eed5
PA
14863
14864 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
dda83cd7 14865 "hwbreak-feature", "hwbreak-feature", 0);
f7e6eed5 14866
89245bc0
DB
14867 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14868 "fork-event-feature", "fork-event-feature", 0);
14869
14870 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14871 "vfork-event-feature", "vfork-event-feature", 0);
14872
b20a6524
MM
14873 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14874 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14875
750ce8d1
YQ
14876 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14877 "vContSupported", "verbose-resume-supported", 0);
14878
94585166
DB
14879 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14880 "exec-event-feature", "exec-event-feature", 0);
14881
de979965
PA
14882 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14883 "vCtrlC", "ctrl-c", 0);
14884
65706a29
PA
14885 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14886 "QThreadEvents", "thread-events", 0);
14887
f2faf941
PA
14888 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14889 "N stop reply", "no-resumed-stop-reply", 0);
14890
0b736949
DB
14891 /* Assert that we've registered "set remote foo-packet" commands
14892 for all packet configs. */
ca4f7f8b
PA
14893 {
14894 int i;
14895
14896 for (i = 0; i < PACKET_MAX; i++)
14897 {
14898 /* Ideally all configs would have a command associated. Some
14899 still don't though. */
14900 int excepted;
14901
14902 switch (i)
14903 {
14904 case PACKET_QNonStop:
ca4f7f8b
PA
14905 case PACKET_EnableDisableTracepoints_feature:
14906 case PACKET_tracenz_feature:
14907 case PACKET_DisconnectedTracing_feature:
14908 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14909 case PACKET_qCRC:
14910 /* Additions to this list need to be well justified:
14911 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14912 excepted = 1;
14913 break;
14914 default:
14915 excepted = 0;
14916 break;
14917 }
14918
14919 /* This catches both forgetting to add a config command, and
14920 forgetting to remove a packet from the exception list. */
14921 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14922 }
14923 }
14924
37a105a1
DJ
14925 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14926 Z sub-packet has its own set and show commands, but users may
14927 have sets to this variable in their .gdbinit files (or in their
14928 documentation). */
e9e68a56 14929 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c 14930 &remote_Z_packet_detect, _("\
590042fc
PW
14931Set use of remote protocol `Z' packets."), _("\
14932Show use of remote protocol `Z' packets."), _("\
3b64bf98 14933When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14934packets."),
e9e68a56 14935 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14936 show_remote_protocol_Z_packet_cmd,
14937 /* FIXME: i18n: Use of remote protocol
14938 `Z' packets is %s. */
e9e68a56 14939 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14940
0743fc83 14941 add_basic_prefix_cmd ("remote", class_files, _("\
590042fc 14942Manipulate files on the remote system.\n\
a6b151f1 14943Transfer files to and from the remote target system."),
0743fc83
TT
14944 &remote_cmdlist, "remote ",
14945 0 /* allow-unknown */, &cmdlist);
a6b151f1
DJ
14946
14947 add_cmd ("put", class_files, remote_put_command,
14948 _("Copy a local file to the remote system."),
14949 &remote_cmdlist);
14950
14951 add_cmd ("get", class_files, remote_get_command,
14952 _("Copy a remote file to the local system."),
14953 &remote_cmdlist);
14954
14955 add_cmd ("delete", class_files, remote_delete_command,
14956 _("Delete a remote file."),
14957 &remote_cmdlist);
14958
2d717e4f 14959 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 14960 &remote_exec_file_var, _("\
590042fc
PW
14961Set the remote pathname for \"run\"."), _("\
14962Show the remote pathname for \"run\"."), NULL,
94585166
DB
14963 set_remote_exec_file,
14964 show_remote_exec_file,
14965 &remote_set_cmdlist,
14966 &remote_show_cmdlist);
2d717e4f 14967
c1e36e3e
PA
14968 add_setshow_boolean_cmd ("range-stepping", class_run,
14969 &use_range_stepping, _("\
14970Enable or disable range stepping."), _("\
14971Show whether target-assisted range stepping is enabled."), _("\
14972If on, and the target supports it, when stepping a source line, GDB\n\
14973tells the target to step the corresponding range of addresses itself instead\n\
14974of issuing multiple single-steps. This speeds up source level\n\
14975stepping. If off, GDB always issues single-steps, even if range\n\
14976stepping is supported by the target. The default is on."),
14977 set_range_stepping,
14978 show_range_stepping,
14979 &setlist,
14980 &showlist);
14981
ed2b7c17
TT
14982 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
14983Set watchdog timer."), _("\
14984Show watchdog timer."), _("\
14985When non-zero, this timeout is used instead of waiting forever for a target\n\
14986to finish a low-level step or continue operation. If the specified amount\n\
14987of time passes without a response from the target, an error occurs."),
14988 NULL,
14989 show_watchdog,
14990 &setlist, &showlist);
14991
6cc8564b
LM
14992 add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class,
14993 &remote_packet_max_chars, _("\
14994Set the maximum number of characters to display for each remote packet."), _("\
14995Show the maximum number of characters to display for each remote packet."), _("\
14996Specify \"unlimited\" to display all the characters."),
14997 NULL, show_remote_packet_max_chars,
14998 &setdebuglist, &showdebuglist);
14999
02349803
SM
15000 add_setshow_boolean_cmd ("remote", no_class, &remote_debug,
15001 _("Set debugging of remote protocol."),
15002 _("Show debugging of remote protocol."),
15003 _("\
baf2b57f
SM
15004When enabled, each packet sent or received with the remote target\n\
15005is displayed."),
02349803
SM
15006 NULL,
15007 show_remote_debug,
15008 &setdebuglist, &showdebuglist);
baf2b57f
SM
15009
15010 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
15011 &remote_timeout, _("\
15012Set timeout limit to wait for target to respond."), _("\
15013Show timeout limit to wait for target to respond."), _("\
15014This value is used to set the time limit for gdb to wait for a response\n\
15015from the target."),
15016 NULL,
15017 show_remote_timeout,
15018 &setlist, &showlist);
15019
449092f6 15020 /* Eventually initialize fileio. See fileio.c */
3f4d92eb 15021 initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist);
c906108c 15022}
This page took 5.029569 seconds and 4 git commands to generate.