gdb: move remote_target::start_remote variable to narrower scope
[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
6b8edb51
PA
90#define OPAQUETHREADBYTES 8
91
92/* a 64 bit opaque identifier */
93typedef unsigned char threadref[OPAQUETHREADBYTES];
94
95struct gdb_ext_thread_info;
96struct threads_listing_context;
97typedef int (*rmt_thread_action) (threadref *ref, void *context);
98struct protocol_feature;
99struct packet_reg;
100
101struct stop_reply;
32603266 102typedef std::unique_ptr<stop_reply> stop_reply_up;
6b8edb51
PA
103
104/* Generic configuration support for packets the stub optionally
105 supports. Allows the user to specify the use of the packet as well
106 as allowing GDB to auto-detect support in the remote stub. */
107
108enum packet_support
109 {
110 PACKET_SUPPORT_UNKNOWN = 0,
111 PACKET_ENABLE,
112 PACKET_DISABLE
113 };
114
115/* Analyze a packet's return value and update the packet config
116 accordingly. */
117
118enum packet_result
119{
120 PACKET_ERROR,
121 PACKET_OK,
122 PACKET_UNKNOWN
123};
124
125struct threads_listing_context;
3c69da40
PA
126
127/* Stub vCont actions support.
128
129 Each field is a boolean flag indicating whether the stub reports
130 support for the corresponding action. */
131
132struct vCont_action_support
133{
134 /* vCont;t */
135 bool t = false;
136
137 /* vCont;r */
138 bool r = false;
139
140 /* vCont;s */
141 bool s = false;
142
143 /* vCont;S */
144 bool S = false;
145};
146
405feb71 147/* About this many threadids fit in a packet. */
3c69da40
PA
148
149#define MAXTHREADLISTRESULTS 32
150
151/* Data for the vFile:pread readahead cache. */
152
153struct readahead_cache
154{
155 /* Invalidate the readahead cache. */
156 void invalidate ();
157
158 /* Invalidate the readahead cache if it is holding data for FD. */
159 void invalidate_fd (int fd);
160
161 /* Serve pread from the readahead cache. Returns number of bytes
162 read, or 0 if the request can't be served from the cache. */
163 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
164
165 /* The file descriptor for the file that is being cached. -1 if the
166 cache is invalid. */
167 int fd = -1;
168
169 /* The offset into the file that the cache buffer corresponds
170 to. */
171 ULONGEST offset = 0;
172
173 /* The buffer holding the cache contents. */
174 gdb_byte *buf = nullptr;
175 /* The buffer's size. We try to read as much as fits into a packet
176 at a time. */
177 size_t bufsize = 0;
178
179 /* Cache hit and miss counters. */
180 ULONGEST hit_count = 0;
181 ULONGEST miss_count = 0;
182};
183
184/* Description of the remote protocol for a given architecture. */
185
186struct packet_reg
187{
188 long offset; /* Offset into G packet. */
189 long regnum; /* GDB's internal register number. */
190 LONGEST pnum; /* Remote protocol register number. */
191 int in_g_packet; /* Always part of G packet. */
192 /* long size in bytes; == register_size (target_gdbarch (), regnum);
193 at present. */
194 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
195 at present. */
196};
197
198struct remote_arch_state
199{
200 explicit remote_arch_state (struct gdbarch *gdbarch);
201
202 /* Description of the remote protocol registers. */
203 long sizeof_g_packet;
204
205 /* Description of the remote protocol registers indexed by REGNUM
206 (making an array gdbarch_num_regs in size). */
207 std::unique_ptr<packet_reg[]> regs;
208
209 /* This is the size (in chars) of the first response to the ``g''
210 packet. It is used as a heuristic when determining the maximum
211 size of memory-read and memory-write packets. A target will
212 typically only reserve a buffer large enough to hold the ``g''
213 packet. The size does not include packet overhead (headers and
214 trailers). */
215 long actual_register_packet_size;
216
217 /* This is the maximum size (in chars) of a non read/write packet.
218 It is also used as a cap on the size of read/write packets. */
219 long remote_packet_size;
220};
221
222/* Description of the remote protocol state for the currently
223 connected target. This is per-target state, and independent of the
224 selected architecture. */
225
226class remote_state
227{
228public:
229
230 remote_state ();
231 ~remote_state ();
232
233 /* Get the remote arch state for GDBARCH. */
234 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
235
236public: /* data */
237
238 /* A buffer to use for incoming packets, and its current size. The
239 buffer is grown dynamically for larger incoming packets.
240 Outgoing packets may also be constructed in this buffer.
8d64371b 241 The size of the buffer is always at least REMOTE_PACKET_SIZE;
3c69da40
PA
242 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
243 packets. */
8d64371b 244 gdb::char_vector buf;
3c69da40
PA
245
246 /* True if we're going through initial connection setup (finding out
247 about the remote side's threads, relocating symbols, etc.). */
248 bool starting_up = false;
249
250 /* If we negotiated packet size explicitly (and thus can bypass
251 heuristics for the largest packet size that will not overflow
252 a buffer in the stub), this will be set to that packet size.
253 Otherwise zero, meaning to use the guessed size. */
254 long explicit_packet_size = 0;
255
256 /* remote_wait is normally called when the target is running and
257 waits for a stop reply packet. But sometimes we need to call it
258 when the target is already stopped. We can send a "?" packet
259 and have remote_wait read the response. Or, if we already have
260 the response, we can stash it in BUF and tell remote_wait to
261 skip calling getpkt. This flag is set when BUF contains a
262 stop reply packet and the target is not waiting. */
263 int cached_wait_status = 0;
264
265 /* True, if in no ack mode. That is, neither GDB nor the stub will
266 expect acks from each other. The connection is assumed to be
267 reliable. */
268 bool noack_mode = false;
269
270 /* True if we're connected in extended remote mode. */
271 bool extended = false;
272
273 /* True if we resumed the target and we're waiting for the target to
274 stop. In the mean time, we can't start another command/query.
275 The remote server wouldn't be ready to process it, so we'd
276 timeout waiting for a reply that would never come and eventually
277 we'd close the connection. This can happen in asynchronous mode
278 because we allow GDB commands while the target is running. */
279 bool waiting_for_stop_reply = false;
280
281 /* The status of the stub support for the various vCont actions. */
282 vCont_action_support supports_vCont;
5b6d1e4f
PA
283 /* Whether vCont support was probed already. This is a workaround
284 until packet_support is per-connection. */
285 bool supports_vCont_probed;
3c69da40
PA
286
287 /* True if the user has pressed Ctrl-C, but the target hasn't
288 responded to that. */
289 bool ctrlc_pending_p = false;
290
291 /* True if we saw a Ctrl-C while reading or writing from/to the
292 remote descriptor. At that point it is not safe to send a remote
293 interrupt packet, so we instead remember we saw the Ctrl-C and
294 process it once we're done with sending/receiving the current
295 packet, which should be shortly. If however that takes too long,
296 and the user presses Ctrl-C again, we offer to disconnect. */
297 bool got_ctrlc_during_io = false;
298
299 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
300 remote_open knows that we don't have a file open when the program
301 starts. */
302 struct serial *remote_desc = nullptr;
303
304 /* These are the threads which we last sent to the remote system. The
305 TID member will be -1 for all or -2 for not sent yet. */
306 ptid_t general_thread = null_ptid;
307 ptid_t continue_thread = null_ptid;
308
309 /* This is the traceframe which we last selected on the remote system.
310 It will be -1 if no traceframe is selected. */
311 int remote_traceframe_number = -1;
312
313 char *last_pass_packet = nullptr;
314
315 /* The last QProgramSignals packet sent to the target. We bypass
316 sending a new program signals list down to the target if the new
317 packet is exactly the same as the last we sent. IOW, we only let
318 the target know about program signals list changes. */
319 char *last_program_signals_packet = nullptr;
320
321 gdb_signal last_sent_signal = GDB_SIGNAL_0;
322
323 bool last_sent_step = false;
324
325 /* The execution direction of the last resume we got. */
326 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
327
328 char *finished_object = nullptr;
329 char *finished_annex = nullptr;
330 ULONGEST finished_offset = 0;
331
332 /* Should we try the 'ThreadInfo' query packet?
333
334 This variable (NOT available to the user: auto-detect only!)
335 determines whether GDB will use the new, simpler "ThreadInfo"
336 query or the older, more complex syntax for thread queries.
337 This is an auto-detect variable (set to true at each connect,
338 and set to false when the target fails to recognize it). */
339 bool use_threadinfo_query = false;
340 bool use_threadextra_query = false;
341
342 threadref echo_nextthread {};
343 threadref nextthread {};
344 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
345
346 /* The state of remote notification. */
347 struct remote_notif_state *notif_state = nullptr;
348
349 /* The branch trace configuration. */
350 struct btrace_config btrace_config {};
351
352 /* The argument to the last "vFile:setfs:" packet we sent, used
353 to avoid sending repeated unnecessary "vFile:setfs:" packets.
354 Initialized to -1 to indicate that no "vFile:setfs:" packet
355 has yet been sent. */
356 int fs_pid = -1;
357
358 /* A readahead cache for vFile:pread. Often, reading a binary
359 involves a sequence of small reads. E.g., when parsing an ELF
360 file. A readahead cache helps mostly the case of remote
361 debugging on a connection with higher latency, due to the
362 request/reply nature of the RSP. We only cache data for a single
363 file descriptor at a time. */
364 struct readahead_cache readahead_cache;
365
366 /* The list of already fetched and acknowledged stop events. This
367 queue is used for notification Stop, and other notifications
368 don't need queue for their events, because the notification
369 events of Stop can't be consumed immediately, so that events
370 should be queued first, and be consumed by remote_wait_{ns,as}
371 one per time. Other notifications can consume their events
372 immediately, so queue is not needed for them. */
953edf2b 373 std::vector<stop_reply_up> stop_reply_queue;
3c69da40
PA
374
375 /* Asynchronous signal handle registered as event loop source for
376 when we have pending events ready to be passed to the core. */
377 struct async_event_handler *remote_async_inferior_event_token = nullptr;
378
379 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
380 ``forever'' still use the normal timeout mechanism. This is
381 currently used by the ASYNC code to guarentee that target reads
382 during the initial connect always time-out. Once getpkt has been
383 modified to return a timeout indication and, in turn
384 remote_wait()/wait_for_inferior() have gained a timeout parameter
385 this can go away. */
386 int wait_forever_enabled_p = 1;
387
388private:
389 /* Mapping of remote protocol data for each gdbarch. Usually there
390 is only one entry here, though we may see more with stubs that
391 support multi-process. */
392 std::unordered_map<struct gdbarch *, remote_arch_state>
393 m_arch_states;
394};
6b8edb51 395
d9f719f1
PA
396static const target_info remote_target_info = {
397 "remote",
398 N_("Remote serial target in gdb-specific protocol"),
399 remote_doc
400};
401
3b3dac9b 402class remote_target : public process_stratum_target
f6ac5f3d
PA
403{
404public:
3b3dac9b 405 remote_target () = default;
6b8edb51 406 ~remote_target () override;
f6ac5f3d 407
d9f719f1
PA
408 const target_info &info () const override
409 { return remote_target_info; }
f6ac5f3d 410
121b3efd
PA
411 const char *connection_string () override;
412
f6ac5f3d
PA
413 thread_control_capabilities get_thread_control_capabilities () override
414 { return tc_schedlock; }
415
d9f719f1
PA
416 /* Open a remote connection. */
417 static void open (const char *, int);
418
f6ac5f3d
PA
419 void close () override;
420
421 void detach (inferior *, int) override;
422 void disconnect (const char *, int) override;
423
424 void commit_resume () override;
425 void resume (ptid_t, int, enum gdb_signal) override;
b60cea74 426 ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
f6ac5f3d
PA
427
428 void fetch_registers (struct regcache *, int) override;
429 void store_registers (struct regcache *, int) override;
430 void prepare_to_store (struct regcache *) override;
431
432 void files_info () override;
433
434 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
435
436 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
437 enum remove_bp_reason) override;
438
439
57810aa7
PA
440 bool stopped_by_sw_breakpoint () override;
441 bool supports_stopped_by_sw_breakpoint () override;
f6ac5f3d 442
57810aa7 443 bool stopped_by_hw_breakpoint () override;
f6ac5f3d 444
57810aa7 445 bool supports_stopped_by_hw_breakpoint () override;
f6ac5f3d 446
57810aa7 447 bool stopped_by_watchpoint () override;
f6ac5f3d 448
57810aa7 449 bool stopped_data_address (CORE_ADDR *) override;
f6ac5f3d 450
57810aa7 451 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
f6ac5f3d
PA
452
453 int can_use_hw_breakpoint (enum bptype, int, int) override;
454
455 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
456
457 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
458
459 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
460
461 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
462 struct expression *) override;
463
464 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
465 struct expression *) override;
466
467 void kill () override;
468
469 void load (const char *, int) override;
470
471 void mourn_inferior () override;
472
adc6a863 473 void pass_signals (gdb::array_view<const unsigned char>) override;
f6ac5f3d
PA
474
475 int set_syscall_catchpoint (int, bool, int,
476 gdb::array_view<const int>) override;
477
adc6a863 478 void program_signals (gdb::array_view<const unsigned char>) override;
f6ac5f3d 479
57810aa7 480 bool thread_alive (ptid_t ptid) override;
f6ac5f3d
PA
481
482 const char *thread_name (struct thread_info *) override;
483
484 void update_thread_list () override;
485
a068643d 486 std::string pid_to_str (ptid_t) override;
f6ac5f3d
PA
487
488 const char *extra_thread_info (struct thread_info *) override;
489
490 ptid_t get_ada_task_ptid (long lwp, long thread) override;
491
492 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
493 int handle_len,
494 inferior *inf) override;
495
3d6c6204
KB
496 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
497 override;
498
f6ac5f3d
PA
499 void stop (ptid_t) override;
500
501 void interrupt () override;
502
503 void pass_ctrlc () override;
504
505 enum target_xfer_status xfer_partial (enum target_object object,
506 const char *annex,
507 gdb_byte *readbuf,
508 const gdb_byte *writebuf,
509 ULONGEST offset, ULONGEST len,
510 ULONGEST *xfered_len) override;
511
512 ULONGEST get_memory_xfer_limit () override;
513
514 void rcmd (const char *command, struct ui_file *output) override;
515
516 char *pid_to_exec_file (int pid) override;
517
518 void log_command (const char *cmd) override
519 {
520 serial_log_command (this, cmd);
521 }
522
523 CORE_ADDR get_thread_local_address (ptid_t ptid,
524 CORE_ADDR load_module_addr,
525 CORE_ADDR offset) override;
526
57810aa7 527 bool can_execute_reverse () override;
f6ac5f3d
PA
528
529 std::vector<mem_region> memory_map () override;
530
531 void flash_erase (ULONGEST address, LONGEST length) override;
532
533 void flash_done () override;
534
535 const struct target_desc *read_description () override;
536
537 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
538 const gdb_byte *pattern, ULONGEST pattern_len,
539 CORE_ADDR *found_addrp) override;
540
57810aa7 541 bool can_async_p () override;
f6ac5f3d 542
57810aa7 543 bool is_async_p () override;
f6ac5f3d
PA
544
545 void async (int) override;
546
5b6d1e4f
PA
547 int async_wait_fd () override;
548
f6ac5f3d
PA
549 void thread_events (int) override;
550
551 int can_do_single_step () override;
552
553 void terminal_inferior () override;
554
555 void terminal_ours () override;
556
57810aa7 557 bool supports_non_stop () override;
f6ac5f3d 558
57810aa7 559 bool supports_multi_process () override;
f6ac5f3d 560
57810aa7 561 bool supports_disable_randomization () override;
f6ac5f3d 562
57810aa7 563 bool filesystem_is_local () override;
f6ac5f3d
PA
564
565
566 int fileio_open (struct inferior *inf, const char *filename,
567 int flags, int mode, int warn_if_slow,
568 int *target_errno) override;
569
570 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
571 ULONGEST offset, int *target_errno) override;
572
573 int fileio_pread (int fd, gdb_byte *read_buf, int len,
574 ULONGEST offset, int *target_errno) override;
575
576 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
577
578 int fileio_close (int fd, int *target_errno) override;
579
580 int fileio_unlink (struct inferior *inf,
581 const char *filename,
582 int *target_errno) override;
583
584 gdb::optional<std::string>
585 fileio_readlink (struct inferior *inf,
586 const char *filename,
587 int *target_errno) override;
588
57810aa7 589 bool supports_enable_disable_tracepoint () override;
f6ac5f3d 590
57810aa7 591 bool supports_string_tracing () override;
f6ac5f3d 592
57810aa7 593 bool supports_evaluation_of_breakpoint_conditions () override;
f6ac5f3d 594
57810aa7 595 bool can_run_breakpoint_commands () override;
f6ac5f3d
PA
596
597 void trace_init () override;
598
599 void download_tracepoint (struct bp_location *location) override;
600
57810aa7 601 bool can_download_tracepoint () override;
f6ac5f3d
PA
602
603 void download_trace_state_variable (const trace_state_variable &tsv) override;
604
605 void enable_tracepoint (struct bp_location *location) override;
606
607 void disable_tracepoint (struct bp_location *location) override;
608
609 void trace_set_readonly_regions () override;
610
611 void trace_start () override;
612
613 int get_trace_status (struct trace_status *ts) override;
614
615 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
616 override;
617
618 void trace_stop () override;
619
620 int trace_find (enum trace_find_type type, int num,
621 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
622
57810aa7 623 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
f6ac5f3d
PA
624
625 int save_trace_data (const char *filename) override;
626
627 int upload_tracepoints (struct uploaded_tp **utpp) override;
628
629 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
630
631 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
632
633 int get_min_fast_tracepoint_insn_len () override;
634
635 void set_disconnected_tracing (int val) override;
636
637 void set_circular_trace_buffer (int val) override;
638
639 void set_trace_buffer_size (LONGEST val) override;
640
57810aa7
PA
641 bool set_trace_notes (const char *user, const char *notes,
642 const char *stopnotes) override;
f6ac5f3d
PA
643
644 int core_of_thread (ptid_t ptid) override;
645
646 int verify_memory (const gdb_byte *data,
647 CORE_ADDR memaddr, ULONGEST size) override;
648
649
57810aa7 650 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
f6ac5f3d
PA
651
652 void set_permissions () override;
653
654 bool static_tracepoint_marker_at (CORE_ADDR,
655 struct static_tracepoint_marker *marker)
656 override;
657
658 std::vector<static_tracepoint_marker>
659 static_tracepoint_markers_by_strid (const char *id) override;
660
661 traceframe_info_up traceframe_info () override;
662
57810aa7
PA
663 bool use_agent (bool use) override;
664 bool can_use_agent () override;
f6ac5f3d
PA
665
666 struct btrace_target_info *enable_btrace (ptid_t ptid,
667 const struct btrace_config *conf) override;
668
669 void disable_btrace (struct btrace_target_info *tinfo) override;
670
671 void teardown_btrace (struct btrace_target_info *tinfo) override;
672
673 enum btrace_error read_btrace (struct btrace_data *data,
674 struct btrace_target_info *btinfo,
675 enum btrace_read_type type) override;
676
677 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
57810aa7 678 bool augmented_libraries_svr4_read () override;
5ab2fbf1 679 bool follow_fork (bool, bool) override;
4ca51187 680 void follow_exec (struct inferior *, const char *) override;
f6ac5f3d
PA
681 int insert_fork_catchpoint (int) override;
682 int remove_fork_catchpoint (int) override;
683 int insert_vfork_catchpoint (int) override;
684 int remove_vfork_catchpoint (int) override;
685 int insert_exec_catchpoint (int) override;
686 int remove_exec_catchpoint (int) override;
687 enum exec_direction_kind execution_direction () override;
688
6b8edb51
PA
689public: /* Remote specific methods. */
690
691 void remote_download_command_source (int num, ULONGEST addr,
692 struct command_line *cmds);
693
694 void remote_file_put (const char *local_file, const char *remote_file,
695 int from_tty);
696 void remote_file_get (const char *remote_file, const char *local_file,
697 int from_tty);
698 void remote_file_delete (const char *remote_file, int from_tty);
699
700 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
701 ULONGEST offset, int *remote_errno);
702 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
703 ULONGEST offset, int *remote_errno);
704 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
705 ULONGEST offset, int *remote_errno);
706
707 int remote_hostio_send_command (int command_bytes, int which_packet,
708 int *remote_errno, char **attachment,
709 int *attachment_len);
710 int remote_hostio_set_filesystem (struct inferior *inf,
711 int *remote_errno);
712 /* We should get rid of this and use fileio_open directly. */
713 int remote_hostio_open (struct inferior *inf, const char *filename,
714 int flags, int mode, int warn_if_slow,
715 int *remote_errno);
716 int remote_hostio_close (int fd, int *remote_errno);
717
718 int remote_hostio_unlink (inferior *inf, const char *filename,
719 int *remote_errno);
720
721 struct remote_state *get_remote_state ();
722
723 long get_remote_packet_size (void);
724 long get_memory_packet_size (struct memory_packet_config *config);
725
726 long get_memory_write_packet_size ();
727 long get_memory_read_packet_size ();
728
729 char *append_pending_thread_resumptions (char *p, char *endp,
730 ptid_t ptid);
d9f719f1 731 static void open_1 (const char *name, int from_tty, int extended_p);
f6ac5f3d 732 void start_remote (int from_tty, int extended_p);
00431a78 733 void remote_detach_1 (struct inferior *inf, int from_tty);
6b8edb51
PA
734
735 char *append_resumption (char *p, char *endp,
736 ptid_t ptid, int step, gdb_signal siggnal);
737 int remote_resume_with_vcont (ptid_t ptid, int step,
738 gdb_signal siggnal);
739
e3b2741b 740 void add_current_inferior_and_thread (const char *wait_status);
6b8edb51
PA
741
742 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
b60cea74 743 target_wait_flags options);
6b8edb51 744 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
b60cea74 745 target_wait_flags options);
6b8edb51
PA
746
747 ptid_t process_stop_reply (struct stop_reply *stop_reply,
748 target_waitstatus *status);
749
8f66807b
AB
750 ptid_t select_thread_for_ambiguous_stop_reply
751 (const struct target_waitstatus *status);
752
6b8edb51
PA
753 void remote_notice_new_inferior (ptid_t currthread, int executing);
754
755 void process_initial_stop_replies (int from_tty);
756
00431a78 757 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
6b8edb51
PA
758
759 void btrace_sync_conf (const btrace_config *conf);
760
761 void remote_btrace_maybe_reopen ();
762
763 void remove_new_fork_children (threads_listing_context *context);
764 void kill_new_fork_children (int pid);
765 void discard_pending_stop_replies (struct inferior *inf);
766 int stop_reply_queue_length ();
767
768 void check_pending_events_prevent_wildcard_vcont
769 (int *may_global_wildcard_vcont);
770
771 void discard_pending_stop_replies_in_queue ();
772 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
773 struct stop_reply *queued_stop_reply (ptid_t ptid);
774 int peek_stop_reply (ptid_t ptid);
bb277751 775 void remote_parse_stop_reply (const char *buf, stop_reply *event);
6b8edb51
PA
776
777 void remote_stop_ns (ptid_t ptid);
778 void remote_interrupt_as ();
779 void remote_interrupt_ns ();
780
781 char *remote_get_noisy_reply ();
782 int remote_query_attached (int pid);
9ab8741a 783 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
6b8edb51
PA
784 int try_open_exec);
785
786 ptid_t remote_current_thread (ptid_t oldpid);
e3b2741b 787 ptid_t get_current_thread (const char *wait_status);
6b8edb51
PA
788
789 void set_thread (ptid_t ptid, int gen);
790 void set_general_thread (ptid_t ptid);
791 void set_continue_thread (ptid_t ptid);
792 void set_general_process ();
793
794 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
795
cecb1912 796 int remote_unpack_thread_info_response (const char *pkt, threadref *expectedref,
6b8edb51
PA
797 gdb_ext_thread_info *info);
798 int remote_get_threadinfo (threadref *threadid, int fieldset,
799 gdb_ext_thread_info *info);
800
cecb1912 801 int parse_threadlist_response (const char *pkt, int result_limit,
6b8edb51
PA
802 threadref *original_echo,
803 threadref *resultlist,
804 int *doneflag);
805 int remote_get_threadlist (int startflag, threadref *nextthread,
806 int result_limit, int *done, int *result_count,
807 threadref *threadlist);
808
809 int remote_threadlist_iterator (rmt_thread_action stepfunction,
810 void *context, int looplimit);
811
812 int remote_get_threads_with_ql (threads_listing_context *context);
813 int remote_get_threads_with_qxfer (threads_listing_context *context);
814 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
815
816 void extended_remote_restart ();
817
818 void get_offsets ();
819
820 void remote_check_symbols ();
821
822 void remote_supported_packet (const struct protocol_feature *feature,
823 enum packet_support support,
824 const char *argument);
825
826 void remote_query_supported ();
827
828 void remote_packet_size (const protocol_feature *feature,
829 packet_support support, const char *value);
830
831 void remote_serial_quit_handler ();
832
833 void remote_detach_pid (int pid);
834
835 void remote_vcont_probe ();
836
837 void remote_resume_with_hc (ptid_t ptid, int step,
838 gdb_signal siggnal);
839
840 void send_interrupt_sequence ();
841 void interrupt_query ();
842
843 void remote_notif_get_pending_events (notif_client *nc);
844
845 int fetch_register_using_p (struct regcache *regcache,
846 packet_reg *reg);
847 int send_g_packet ();
848 void process_g_packet (struct regcache *regcache);
849 void fetch_registers_using_g (struct regcache *regcache);
850 int store_register_using_P (const struct regcache *regcache,
851 packet_reg *reg);
852 void store_registers_using_G (const struct regcache *regcache);
853
854 void set_remote_traceframe ();
855
856 void check_binary_download (CORE_ADDR addr);
857
858 target_xfer_status remote_write_bytes_aux (const char *header,
859 CORE_ADDR memaddr,
860 const gdb_byte *myaddr,
861 ULONGEST len_units,
862 int unit_size,
863 ULONGEST *xfered_len_units,
864 char packet_format,
865 int use_length);
866
867 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
868 const gdb_byte *myaddr, ULONGEST len,
869 int unit_size, ULONGEST *xfered_len);
870
871 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
872 ULONGEST len_units,
873 int unit_size, ULONGEST *xfered_len_units);
874
875 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
876 ULONGEST memaddr,
877 ULONGEST len,
878 int unit_size,
879 ULONGEST *xfered_len);
880
881 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
882 gdb_byte *myaddr, ULONGEST len,
883 int unit_size,
884 ULONGEST *xfered_len);
885
886 packet_result remote_send_printf (const char *format, ...)
887 ATTRIBUTE_PRINTF (2, 3);
888
889 target_xfer_status remote_flash_write (ULONGEST address,
890 ULONGEST length, ULONGEST *xfered_len,
891 const gdb_byte *data);
892
893 int readchar (int timeout);
894
895 void remote_serial_write (const char *str, int len);
896
897 int putpkt (const char *buf);
898 int putpkt_binary (const char *buf, int cnt);
899
8d64371b
TT
900 int putpkt (const gdb::char_vector &buf)
901 {
902 return putpkt (buf.data ());
903 }
904
6b8edb51 905 void skip_frame ();
8d64371b
TT
906 long read_frame (gdb::char_vector *buf_p);
907 void getpkt (gdb::char_vector *buf, int forever);
908 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
6b8edb51 909 int expecting_notif, int *is_notif);
8d64371b
TT
910 int getpkt_sane (gdb::char_vector *buf, int forever);
911 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
6b8edb51
PA
912 int *is_notif);
913 int remote_vkill (int pid);
914 void remote_kill_k ();
915
916 void extended_remote_disable_randomization (int val);
917 int extended_remote_run (const std::string &args);
918
919 void send_environment_packet (const char *action,
920 const char *packet,
921 const char *value);
922
923 void extended_remote_environment_support ();
3c69da40 924 void extended_remote_set_inferior_cwd ();
80152258 925
3c69da40
PA
926 target_xfer_status remote_write_qxfer (const char *object_name,
927 const char *annex,
928 const gdb_byte *writebuf,
929 ULONGEST offset, LONGEST len,
930 ULONGEST *xfered_len,
931 struct packet_config *packet);
43c3a0e4 932
3c69da40
PA
933 target_xfer_status remote_read_qxfer (const char *object_name,
934 const char *annex,
935 gdb_byte *readbuf, ULONGEST offset,
936 LONGEST len,
937 ULONGEST *xfered_len,
938 struct packet_config *packet);
43c3a0e4 939
3c69da40 940 void push_stop_reply (struct stop_reply *new_event);
43c3a0e4 941
3c69da40 942 bool vcont_r_supported ();
43c3a0e4 943
3c69da40 944 void packet_command (const char *args, int from_tty);
43c3a0e4 945
3c69da40 946private: /* data fields */
43c3a0e4 947
3c69da40
PA
948 /* The remote state. Don't reference this directly. Use the
949 get_remote_state method instead. */
950 remote_state m_remote_state;
43c3a0e4
PA
951};
952
3c69da40
PA
953static const target_info extended_remote_target_info = {
954 "extended-remote",
955 N_("Extended remote serial target in gdb-specific protocol"),
956 remote_doc
957};
ea9c271d 958
3c69da40
PA
959/* Set up the extended remote target by extending the standard remote
960 target and adding to it. */
961
962class extended_remote_target final : public remote_target
ea9c271d 963{
9d6eea31 964public:
3c69da40
PA
965 const target_info &info () const override
966 { return extended_remote_target_info; }
9d6eea31 967
3c69da40
PA
968 /* Open an extended-remote connection. */
969 static void open (const char *, int);
de44f5a7 970
3c69da40
PA
971 bool can_create_inferior () override { return true; }
972 void create_inferior (const char *, const std::string &,
973 char **, int) override;
9d6eea31 974
3c69da40 975 void detach (inferior *, int) override;
9d6eea31 976
3c69da40
PA
977 bool can_attach () override { return true; }
978 void attach (const char *, int) override;
be2a5f71 979
3c69da40
PA
980 void post_attach (int) override;
981 bool supports_disable_randomization () override;
982};
1e51243a 983
3c69da40 984/* Per-program-space data key. */
7b4a314f
TT
985static const struct program_space_key<char, gdb::xfree_deleter<char>>
986 remote_pspace_data;
2d717e4f 987
3c69da40
PA
988/* The variable registered as the control variable used by the
989 remote exec-file commands. While the remote exec-file setting is
990 per-program-space, the set/show machinery uses this as the
991 location of the remote exec-file value. */
992static char *remote_exec_file_var;
a6f3e723 993
3c69da40
PA
994/* The size to align memory write packets, when practical. The protocol
995 does not guarantee any alignment, and gdb will generate short
996 writes and unaligned writes, but even as a best-effort attempt this
997 can improve bulk transfers. For instance, if a write is misaligned
998 relative to the target's data bus, the stub may need to make an extra
999 round trip fetching data from the target. This doesn't make a
1000 huge difference, but it's easy to do, so we try to be helpful.
82f73884 1001
3c69da40
PA
1002 The alignment chosen is arbitrary; usually data bus width is
1003 important here, not the possibly larger cache line size. */
1004enum { REMOTE_ALIGN_WRITES = 16 };
82f73884 1005
3c69da40 1006/* Prototypes for local functions. */
74531fed 1007
3c69da40 1008static int hexnumlen (ULONGEST num);
782b2b07 1009
3c69da40 1010static int stubhex (int ch);
5d93a237 1011
3c69da40 1012static int hexnumstr (char *, ULONGEST);
048094ac 1013
3c69da40 1014static int hexnumnstr (char *, ULONGEST, int);
47f8a51d 1015
3c69da40 1016static CORE_ADDR remote_address_masked (CORE_ADDR);
262e1174 1017
3c69da40 1018static void print_packet (const char *);
747dc59d 1019
cecb1912 1020static int stub_unpack_int (const char *buff, int fieldlength);
5e4a05c4 1021
3c69da40 1022struct packet_config;
b73be471 1023
3c69da40 1024static void show_packet_config_cmd (struct packet_config *config);
280ceea3 1025
3c69da40
PA
1026static void show_remote_protocol_packet_cmd (struct ui_file *file,
1027 int from_tty,
1028 struct cmd_list_element *c,
1029 const char *value);
8e88304f 1030
3c69da40 1031static ptid_t read_ptid (const char *buf, const char **obuf);
3a00c802 1032
3c69da40 1033static void remote_async_inferior_event_handler (gdb_client_data);
b80fafe3 1034
eefce37f 1035static bool remote_read_description_p (struct target_ops *target);
88b496c3 1036
05be00a8 1037static void remote_console_output (const char *msg);
5965e028 1038
3c69da40 1039static void remote_btrace_reset (remote_state *rs);
f4abbc16 1040
5b6d1e4f 1041static void remote_unpush_and_throw (remote_target *target);
15a201c8 1042
3c69da40 1043/* For "remote". */
80152258 1044
3c69da40 1045static struct cmd_list_element *remote_cmdlist;
9d6eea31 1046
3c69da40 1047/* For "set remote" and "show remote". */
6b8edb51 1048
3c69da40
PA
1049static struct cmd_list_element *remote_set_cmdlist;
1050static struct cmd_list_element *remote_show_cmdlist;
6b8edb51 1051
3c69da40 1052/* Controls whether GDB is willing to use range stepping. */
6b8edb51 1053
491144b5 1054static bool use_range_stepping = true;
3c69da40 1055
c9d22089
SM
1056/* From the remote target's point of view, each thread is in one of these three
1057 states. */
1058enum class resume_state
1059{
1060 /* Not resumed - we haven't been asked to resume this thread. */
1061 NOT_RESUMED,
1062
1063 /* We have been asked to resume this thread, but haven't sent a vCont action
1064 for it yet. We'll need to consider it next time commit_resume is
1065 called. */
1066 RESUMED_PENDING_VCONT,
1067
1068 /* We have been asked to resume this thread, and we have sent a vCont action
1069 for it. */
1070 RESUMED,
1071};
1072
1073/* Information about a thread's pending vCont-resume. Used when a thread is in
1074 the remote_resume_state::RESUMED_PENDING_VCONT state. remote_target::resume
1075 stores this information which is then picked up by
1076 remote_target::commit_resume to know which is the proper action for this
1077 thread to include in the vCont packet. */
1078struct resumed_pending_vcont_info
1079{
1080 /* True if the last resume call for this thread was a step request, false
1081 if a continue request. */
1082 bool step;
1083
1084 /* The signal specified in the last resume call for this thread. */
1085 gdb_signal sig;
1086};
1087
7aabaf9d
SM
1088/* Private data that we'll store in (struct thread_info)->priv. */
1089struct remote_thread_info : public private_thread_info
dc146f7c 1090{
7aabaf9d
SM
1091 std::string extra;
1092 std::string name;
1093 int core = -1;
799a2abe 1094
f6327dcb
KB
1095 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1096 sequence of bytes. */
7aabaf9d 1097 gdb::byte_vector thread_handle;
f6327dcb 1098
799a2abe 1099 /* Whether the target stopped for a breakpoint/watchpoint. */
7aabaf9d 1100 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
799a2abe
PA
1101
1102 /* This is set to the data address of the access causing the target
1103 to stop for a watchpoint. */
7aabaf9d 1104 CORE_ADDR watch_data_address = 0;
85ad3aaf 1105
c9d22089
SM
1106 /* Get the thread's resume state. */
1107 enum resume_state resume_state () const
1108 {
1109 return m_resume_state;
1110 }
1111
1112 /* Put the thread in the NOT_RESUMED state. */
1113 void set_not_resumed ()
1114 {
1115 m_resume_state = resume_state::NOT_RESUMED;
1116 }
85ad3aaf 1117
c9d22089
SM
1118 /* Put the thread in the RESUMED_PENDING_VCONT state. */
1119 void set_resumed_pending_vcont (bool step, gdb_signal sig)
1120 {
1121 m_resume_state = resume_state::RESUMED_PENDING_VCONT;
1122 m_resumed_pending_vcont_info.step = step;
1123 m_resumed_pending_vcont_info.sig = sig;
1124 }
85ad3aaf 1125
c9d22089 1126 /* Get the information this thread's pending vCont-resumption.
85ad3aaf 1127
c9d22089
SM
1128 Must only be called if the thread is in the RESUMED_PENDING_VCONT resume
1129 state. */
1130 const struct resumed_pending_vcont_info &resumed_pending_vcont_info () const
1131 {
1132 gdb_assert (m_resume_state == resume_state::RESUMED_PENDING_VCONT);
1133
1134 return m_resumed_pending_vcont_info;
1135 }
1136
1137 /* Put the thread in the VCONT_RESUMED state. */
1138 void set_resumed ()
1139 {
1140 m_resume_state = resume_state::RESUMED;
1141 }
1142
1143private:
1144 /* Resume state for this thread. This is used to implement vCont action
1145 coalescing (only when the target operates in non-stop mode).
1146
1147 remote_target::resume moves the thread to the RESUMED_PENDING_VCONT state,
1148 which notes that this thread must be considered in the next commit_resume
1149 call.
1150
1151 remote_target::commit_resume sends a vCont packet with actions for the
1152 threads in the RESUMED_PENDING_VCONT state and moves them to the
1153 VCONT_RESUMED state.
1154
1155 When reporting a stop to the core for a thread, that thread is moved back
1156 to the NOT_RESUMED state. */
1157 enum resume_state m_resume_state = resume_state::NOT_RESUMED;
1158
1159 /* Extra info used if the thread is in the RESUMED_PENDING_VCONT state. */
1160 struct resumed_pending_vcont_info m_resumed_pending_vcont_info;
dc146f7c
VP
1161};
1162
de44f5a7 1163remote_state::remote_state ()
8d64371b 1164 : buf (400)
de44f5a7 1165{
de44f5a7
PA
1166}
1167
1168remote_state::~remote_state ()
1169{
1170 xfree (this->last_pass_packet);
1171 xfree (this->last_program_signals_packet);
de44f5a7
PA
1172 xfree (this->finished_object);
1173 xfree (this->finished_annex);
cf792862
TT
1174}
1175
35b1e5cc
SS
1176/* Utility: generate error from an incoming stub packet. */
1177static void
1178trace_error (char *buf)
1179{
1180 if (*buf++ != 'E')
1181 return; /* not an error msg */
1182 switch (*buf)
1183 {
1184 case '1': /* malformed packet error */
1185 if (*++buf == '0') /* general case: */
1186 error (_("remote.c: error in outgoing packet."));
1187 else
1188 error (_("remote.c: error in outgoing packet at field #%ld."),
1189 strtol (buf, NULL, 16));
35b1e5cc
SS
1190 default:
1191 error (_("Target returns error code '%s'."), buf);
1192 }
1193}
1194
1195/* Utility: wait for reply from stub, while accepting "O" packets. */
b6bb3468 1196
6b8edb51
PA
1197char *
1198remote_target::remote_get_noisy_reply ()
35b1e5cc 1199{
b6bb3468
PA
1200 struct remote_state *rs = get_remote_state ();
1201
35b1e5cc
SS
1202 do /* Loop on reply from remote stub. */
1203 {
1204 char *buf;
a744cf53 1205
0df8b418 1206 QUIT; /* Allow user to bail out with ^C. */
8d64371b
TT
1207 getpkt (&rs->buf, 0);
1208 buf = rs->buf.data ();
ad91cd99 1209 if (buf[0] == 'E')
35b1e5cc 1210 trace_error (buf);
61012eef 1211 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
1212 {
1213 ULONGEST ul;
1214 CORE_ADDR from, to, org_to;
256642e8 1215 const char *p, *pp;
dde08ee1 1216 int adjusted_size = 0;
7556d4a4 1217 int relocated = 0;
dde08ee1
PA
1218
1219 p = buf + strlen ("qRelocInsn:");
1220 pp = unpack_varlen_hex (p, &ul);
1221 if (*pp != ';')
cb91c06a 1222 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
1223 from = ul;
1224
1225 p = pp + 1;
a9cbf802 1226 unpack_varlen_hex (p, &ul);
dde08ee1
PA
1227 to = ul;
1228
1229 org_to = to;
1230
a70b8144 1231 try
dde08ee1 1232 {
f5656ead 1233 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 1234 relocated = 1;
dde08ee1 1235 }
230d2906 1236 catch (const gdb_exception &ex)
7556d4a4
PA
1237 {
1238 if (ex.error == MEMORY_ERROR)
1239 {
1240 /* Propagate memory errors silently back to the
1241 target. The stub may have limited the range of
1242 addresses we can write to, for example. */
1243 }
1244 else
1245 {
1246 /* Something unexpectedly bad happened. Be verbose
1247 so we can tell what, and propagate the error back
1248 to the stub, so it doesn't get stuck waiting for
1249 a response. */
1250 exception_fprintf (gdb_stderr, ex,
1251 _("warning: relocating instruction: "));
1252 }
1253 putpkt ("E01");
1254 }
1255
1256 if (relocated)
dde08ee1
PA
1257 {
1258 adjusted_size = to - org_to;
1259
8d64371b 1260 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
1261 putpkt (buf);
1262 }
dde08ee1 1263 }
ad91cd99 1264 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
1265 remote_console_output (buf + 1); /* 'O' message from stub */
1266 else
0df8b418 1267 return buf; /* Here's the actual reply. */
35b1e5cc
SS
1268 }
1269 while (1);
1270}
3c3bea1c 1271
9d6eea31
PA
1272struct remote_arch_state *
1273remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
d01949b6 1274{
43c3a0e4
PA
1275 remote_arch_state *rsa;
1276
1277 auto it = this->m_arch_states.find (gdbarch);
1278 if (it == this->m_arch_states.end ())
9d6eea31 1279 {
43c3a0e4
PA
1280 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1281 std::forward_as_tuple (gdbarch),
1282 std::forward_as_tuple (gdbarch));
1283 rsa = &p.first->second;
9d6eea31
PA
1284
1285 /* Make sure that the packet buffer is plenty big enough for
1286 this architecture. */
8d64371b
TT
1287 if (this->buf.size () < rsa->remote_packet_size)
1288 this->buf.resize (2 * rsa->remote_packet_size);
9d6eea31 1289 }
43c3a0e4
PA
1290 else
1291 rsa = &it->second;
1292
1293 return rsa;
d01949b6
AC
1294}
1295
0b83947e
DJ
1296/* Fetch the global remote target state. */
1297
6b8edb51
PA
1298remote_state *
1299remote_target::get_remote_state ()
0b83947e
DJ
1300{
1301 /* Make sure that the remote architecture state has been
1302 initialized, because doing so might reallocate rs->buf. Any
1303 function which calls getpkt also needs to be mindful of changes
1304 to rs->buf, but this call limits the number of places which run
1305 into trouble. */
3c69da40 1306 m_remote_state.get_remote_arch_state (target_gdbarch ());
0b83947e 1307
3c69da40 1308 return &m_remote_state;
0b83947e
DJ
1309}
1310
94585166
DB
1311/* Fetch the remote exec-file from the current program space. */
1312
1313static const char *
1314get_remote_exec_file (void)
1315{
1316 char *remote_exec_file;
1317
7b4a314f 1318 remote_exec_file = remote_pspace_data.get (current_program_space);
94585166
DB
1319 if (remote_exec_file == NULL)
1320 return "";
1321
1322 return remote_exec_file;
1323}
1324
1325/* Set the remote exec file for PSPACE. */
1326
1327static void
1328set_pspace_remote_exec_file (struct program_space *pspace,
7b4a314f 1329 const char *remote_exec_file)
94585166 1330{
7b4a314f 1331 char *old_file = remote_pspace_data.get (pspace);
94585166
DB
1332
1333 xfree (old_file);
7b4a314f 1334 remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
94585166
DB
1335}
1336
1337/* The "set/show remote exec-file" set command hook. */
1338
1339static void
eb4c3f4a 1340set_remote_exec_file (const char *ignored, int from_tty,
94585166
DB
1341 struct cmd_list_element *c)
1342{
1343 gdb_assert (remote_exec_file_var != NULL);
1344 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1345}
1346
1347/* The "set/show remote exec-file" show command hook. */
1348
1349static void
1350show_remote_exec_file (struct ui_file *file, int from_tty,
1351 struct cmd_list_element *cmd, const char *value)
1352{
acdf84a6 1353 fprintf_filtered (file, "%s\n", get_remote_exec_file ());
94585166
DB
1354}
1355
c21236dc
PA
1356static int
1357map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 1358{
74ca34ce 1359 int regnum, num_remote_regs, offset;
74ca34ce 1360 struct packet_reg **remote_regs;
ea9c271d 1361
4a22f64d 1362 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 1363 {
c21236dc 1364 struct packet_reg *r = &regs[regnum];
baef701f 1365
4a22f64d 1366 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
1367 /* Do not try to fetch zero-sized (placeholder) registers. */
1368 r->pnum = -1;
1369 else
1370 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1371
b323314b 1372 r->regnum = regnum;
74ca34ce
DJ
1373 }
1374
1375 /* Define the g/G packet format as the contents of each register
1376 with a remote protocol number, in order of ascending protocol
1377 number. */
1378
224c3ddb 1379 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 1380 for (num_remote_regs = 0, regnum = 0;
4a22f64d 1381 regnum < gdbarch_num_regs (gdbarch);
f57d151a 1382 regnum++)
c21236dc
PA
1383 if (regs[regnum].pnum != -1)
1384 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 1385
39ef2f62
CB
1386 std::sort (remote_regs, remote_regs + num_remote_regs,
1387 [] (const packet_reg *a, const packet_reg *b)
1388 { return a->pnum < b->pnum; });
74ca34ce
DJ
1389
1390 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1391 {
1392 remote_regs[regnum]->in_g_packet = 1;
1393 remote_regs[regnum]->offset = offset;
4a22f64d 1394 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
1395 }
1396
c21236dc
PA
1397 return offset;
1398}
1399
1400/* Given the architecture described by GDBARCH, return the remote
1401 protocol register's number and the register's offset in the g/G
1402 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1403 If the target does not have a mapping for REGNUM, return false,
1404 otherwise, return true. */
1405
1406int
1407remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1408 int *pnum, int *poffset)
1409{
c21236dc
PA
1410 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1411
b80406ac 1412 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
c21236dc 1413
b80406ac 1414 map_regcache_remote_table (gdbarch, regs.data ());
c21236dc
PA
1415
1416 *pnum = regs[regnum].pnum;
1417 *poffset = regs[regnum].offset;
1418
c21236dc
PA
1419 return *pnum != -1;
1420}
1421
9d6eea31 1422remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
c21236dc 1423{
c21236dc
PA
1424 /* Use the architecture to build a regnum<->pnum table, which will be
1425 1:1 unless a feature set specifies otherwise. */
9d6eea31 1426 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
c21236dc 1427
74ca34ce
DJ
1428 /* Record the maximum possible size of the g packet - it may turn out
1429 to be smaller. */
9d6eea31
PA
1430 this->sizeof_g_packet
1431 = map_regcache_remote_table (gdbarch, this->regs.get ());
74ca34ce 1432
0df8b418 1433 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
1434 remote stubs have a hardwired buffer size of 400 bytes
1435 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1436 as the maximum packet-size to ensure that the packet and an extra
1437 NUL character can always fit in the buffer. This stops GDB
1438 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d 1439 already a full buffer (As of 1999-12-04 that was most stubs). */
9d6eea31 1440 this->remote_packet_size = 400 - 1;
d01949b6 1441
ea9c271d 1442 /* This one is filled in when a ``g'' packet is received. */
9d6eea31 1443 this->actual_register_packet_size = 0;
ea9c271d
DJ
1444
1445 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
1446 default, adjust the size accordingly. Remember that each byte is
1447 encoded as two characters. 32 is the overhead for the packet
1448 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 1449 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 1450 little. */
9d6eea31
PA
1451 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1452 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
ea9c271d
DJ
1453}
1454
6b8edb51
PA
1455/* Get a pointer to the current remote target. If not connected to a
1456 remote target, return NULL. */
1457
1458static remote_target *
1459get_current_remote_target ()
1460{
5b6d1e4f 1461 target_ops *proc_target = current_inferior ()->process_target ();
6b8edb51
PA
1462 return dynamic_cast<remote_target *> (proc_target);
1463}
1464
ea9c271d
DJ
1465/* Return the current allowed size of a remote packet. This is
1466 inferred from the current architecture, and should be used to
1467 limit the length of outgoing packets. */
6b8edb51
PA
1468long
1469remote_target::get_remote_packet_size ()
ea9c271d 1470{
be2a5f71 1471 struct remote_state *rs = get_remote_state ();
9d6eea31 1472 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1473
be2a5f71
DJ
1474 if (rs->explicit_packet_size)
1475 return rs->explicit_packet_size;
1476
ea9c271d 1477 return rsa->remote_packet_size;
d01949b6
AC
1478}
1479
ad10f812 1480static struct packet_reg *
5cd63fda
PA
1481packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1482 long regnum)
ad10f812 1483{
5cd63fda 1484 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
b323314b
AC
1485 return NULL;
1486 else
ad10f812 1487 {
ea9c271d 1488 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 1489
b323314b
AC
1490 gdb_assert (r->regnum == regnum);
1491 return r;
ad10f812 1492 }
ad10f812
AC
1493}
1494
1495static struct packet_reg *
5cd63fda
PA
1496packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1497 LONGEST pnum)
ad10f812 1498{
b323314b 1499 int i;
a744cf53 1500
5cd63fda 1501 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
ad10f812 1502 {
ea9c271d 1503 struct packet_reg *r = &rsa->regs[i];
a744cf53 1504
b323314b
AC
1505 if (r->pnum == pnum)
1506 return r;
ad10f812
AC
1507 }
1508 return NULL;
d01949b6
AC
1509}
1510
9a7071a8
JB
1511/* Allow the user to specify what sequence to send to the remote
1512 when he requests a program interruption: Although ^C is usually
1513 what remote systems expect (this is the default, here), it is
1514 sometimes preferable to send a break. On other systems such
1515 as the Linux kernel, a break followed by g, which is Magic SysRq g
1516 is required in order to interrupt the execution. */
1517const char interrupt_sequence_control_c[] = "Ctrl-C";
1518const char interrupt_sequence_break[] = "BREAK";
1519const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 1520static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
1521 {
1522 interrupt_sequence_control_c,
1523 interrupt_sequence_break,
1524 interrupt_sequence_break_g,
1525 NULL
1526 };
1527static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1528
1529static void
1530show_interrupt_sequence (struct ui_file *file, int from_tty,
1531 struct cmd_list_element *c,
1532 const char *value)
1533{
1534 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1535 fprintf_filtered (file,
1536 _("Send the ASCII ETX character (Ctrl-c) "
1537 "to the remote target to interrupt the "
1538 "execution of the program.\n"));
1539 else if (interrupt_sequence_mode == interrupt_sequence_break)
1540 fprintf_filtered (file,
1541 _("send a break signal to the remote target "
1542 "to interrupt the execution of the program.\n"));
1543 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1544 fprintf_filtered (file,
1545 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1546 "the remote target to interrupt the execution "
1547 "of Linux kernel.\n"));
1548 else
1549 internal_error (__FILE__, __LINE__,
1550 _("Invalid value for interrupt_sequence_mode: %s."),
1551 interrupt_sequence_mode);
1552}
6426a772 1553
9a7071a8
JB
1554/* This boolean variable specifies whether interrupt_sequence is sent
1555 to the remote target when gdb connects to it.
1556 This is mostly needed when you debug the Linux kernel: The Linux kernel
1557 expects BREAK g which is Magic SysRq g for connecting gdb. */
491144b5 1558static bool interrupt_on_connect = false;
c906108c 1559
9a7071a8
JB
1560/* This variable is used to implement the "set/show remotebreak" commands.
1561 Since these commands are now deprecated in favor of "set/show remote
1562 interrupt-sequence", it no longer has any effect on the code. */
491144b5 1563static bool remote_break;
c906108c 1564
9a7071a8 1565static void
eb4c3f4a 1566set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
9a7071a8
JB
1567{
1568 if (remote_break)
1569 interrupt_sequence_mode = interrupt_sequence_break;
1570 else
1571 interrupt_sequence_mode = interrupt_sequence_control_c;
1572}
1573
1574static void
1575show_remotebreak (struct ui_file *file, int from_tty,
1576 struct cmd_list_element *c,
1577 const char *value)
1578{
1579}
1580
c906108c
SS
1581/* This variable sets the number of bits in an address that are to be
1582 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 1583 leading zeros, the entire address would be sent. This variable
c906108c
SS
1584 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1585 initial implementation of remote.c restricted the address sent in
1586 memory packets to ``host::sizeof long'' bytes - (typically 32
1587 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1588 address was never sent. Since fixing this bug may cause a break in
85102364 1589 some remote targets this variable is principally provided to
23860348 1590 facilitate backward compatibility. */
c906108c 1591
883b9c6c 1592static unsigned int remote_address_size;
c906108c 1593
11cf8741 1594\f
11cf8741 1595/* User configurable variables for the number of characters in a
ea9c271d
DJ
1596 memory read/write packet. MIN (rsa->remote_packet_size,
1597 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 1598 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
1599 (speed up transfers). The variables ``preferred_*'' (the user
1600 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1601 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1602
1603struct memory_packet_config
1604{
a121b7c1 1605 const char *name;
11cf8741
JM
1606 long size;
1607 int fixed_p;
1608};
1609
cc0be08f
PA
1610/* The default max memory-write-packet-size, when the setting is
1611 "fixed". The 16k is historical. (It came from older GDB's using
1612 alloca for buffers and the knowledge (folklore?) that some hosts
1613 don't cope very well with large alloca calls.) */
1614#define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
a5c0808e
PA
1615
1616/* The minimum remote packet size for memory transfers. Ensures we
1617 can write at least one byte. */
1618#define MIN_MEMORY_PACKET_SIZE 20
1619
cc0be08f
PA
1620/* Get the memory packet size, assuming it is fixed. */
1621
1622static long
1623get_fixed_memory_packet_size (struct memory_packet_config *config)
1624{
1625 gdb_assert (config->fixed_p);
1626
1627 if (config->size <= 0)
1628 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1629 else
1630 return config->size;
1631}
1632
11cf8741
JM
1633/* Compute the current size of a read/write packet. Since this makes
1634 use of ``actual_register_packet_size'' the computation is dynamic. */
1635
6b8edb51
PA
1636long
1637remote_target::get_memory_packet_size (struct memory_packet_config *config)
11cf8741 1638{
d01949b6 1639 struct remote_state *rs = get_remote_state ();
9d6eea31 1640 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1641
11cf8741
JM
1642 long what_they_get;
1643 if (config->fixed_p)
cc0be08f 1644 what_they_get = get_fixed_memory_packet_size (config);
11cf8741
JM
1645 else
1646 {
ea9c271d 1647 what_they_get = get_remote_packet_size ();
23860348 1648 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1649 if (config->size > 0
1650 && what_they_get > config->size)
1651 what_they_get = config->size;
be2a5f71
DJ
1652
1653 /* Limit it to the size of the targets ``g'' response unless we have
1654 permission from the stub to use a larger packet size. */
1655 if (rs->explicit_packet_size == 0
1656 && rsa->actual_register_packet_size > 0
1657 && what_they_get > rsa->actual_register_packet_size)
1658 what_they_get = rsa->actual_register_packet_size;
11cf8741 1659 }
a5c0808e
PA
1660 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1661 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1662
1663 /* Make sure there is room in the global buffer for this packet
1664 (including its trailing NUL byte). */
8d64371b
TT
1665 if (rs->buf.size () < what_they_get + 1)
1666 rs->buf.resize (2 * what_they_get);
6d820c5c 1667
11cf8741
JM
1668 return what_they_get;
1669}
1670
0df8b418 1671/* Update the size of a read/write packet. If they user wants
23860348 1672 something really big then do a sanity check. */
11cf8741
JM
1673
1674static void
ac88e2de 1675set_memory_packet_size (const char *args, struct memory_packet_config *config)
11cf8741
JM
1676{
1677 int fixed_p = config->fixed_p;
1678 long size = config->size;
a744cf53 1679
11cf8741 1680 if (args == NULL)
8a3fe4f8 1681 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1682 else if (strcmp (args, "hard") == 0
1683 || strcmp (args, "fixed") == 0)
1684 fixed_p = 1;
1685 else if (strcmp (args, "soft") == 0
1686 || strcmp (args, "limit") == 0)
1687 fixed_p = 0;
1688 else
1689 {
1690 char *end;
a744cf53 1691
11cf8741
JM
1692 size = strtoul (args, &end, 0);
1693 if (args == end)
8a3fe4f8 1694 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1695
1696 /* Instead of explicitly capping the size of a packet to or
1697 disallowing it, the user is allowed to set the size to
1698 something arbitrarily large. */
11cf8741 1699 }
a5c0808e 1700
23860348 1701 /* Extra checks? */
11cf8741
JM
1702 if (fixed_p && !config->fixed_p)
1703 {
cc0be08f
PA
1704 /* So that the query shows the correct value. */
1705 long query_size = (size <= 0
1706 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1707 : size);
1708
e2e0b3e5
AC
1709 if (! query (_("The target may not be able to correctly handle a %s\n"
1710 "of %ld bytes. Change the packet size? "),
cc0be08f 1711 config->name, query_size))
8a3fe4f8 1712 error (_("Packet size not changed."));
11cf8741 1713 }
23860348 1714 /* Update the config. */
11cf8741
JM
1715 config->fixed_p = fixed_p;
1716 config->size = size;
1717}
1718
1719static void
1720show_memory_packet_size (struct memory_packet_config *config)
1721{
cc0be08f
PA
1722 if (config->size == 0)
1723 printf_filtered (_("The %s is 0 (default). "), config->name);
1724 else
1725 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1726 if (config->fixed_p)
a3f17187 1727 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
cc0be08f 1728 get_fixed_memory_packet_size (config));
11cf8741 1729 else
cc0be08f 1730 {
6b8edb51 1731 remote_target *remote = get_current_remote_target ();
cc0be08f 1732
6b8edb51 1733 if (remote != NULL)
cc0be08f 1734 printf_filtered (_("Packets are limited to %ld bytes.\n"),
6b8edb51 1735 remote->get_memory_packet_size (config));
cc0be08f
PA
1736 else
1737 puts_filtered ("The actual limit will be further reduced "
1738 "dependent on the target.\n");
1739 }
11cf8741
JM
1740}
1741
5b6d1e4f 1742/* FIXME: needs to be per-remote-target. */
11cf8741
JM
1743static struct memory_packet_config memory_write_packet_config =
1744{
1745 "memory-write-packet-size",
1746};
1747
1748static void
ac88e2de 1749set_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1750{
1751 set_memory_packet_size (args, &memory_write_packet_config);
1752}
1753
1754static void
ac88e2de 1755show_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1756{
1757 show_memory_packet_size (&memory_write_packet_config);
1758}
1759
055303e2
AB
1760/* Show the number of hardware watchpoints that can be used. */
1761
1762static void
1763show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1764 struct cmd_list_element *c,
1765 const char *value)
1766{
1767 fprintf_filtered (file, _("The maximum number of target hardware "
1768 "watchpoints is %s.\n"), value);
1769}
1770
1771/* Show the length limit (in bytes) for hardware watchpoints. */
1772
1773static void
1774show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1775 struct cmd_list_element *c,
1776 const char *value)
1777{
1778 fprintf_filtered (file, _("The maximum length (in bytes) of a target "
1779 "hardware watchpoint is %s.\n"), value);
1780}
1781
1782/* Show the number of hardware breakpoints that can be used. */
1783
1784static void
1785show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1786 struct cmd_list_element *c,
1787 const char *value)
1788{
1789 fprintf_filtered (file, _("The maximum number of target hardware "
1790 "breakpoints is %s.\n"), value);
1791}
1792
6cc8564b
LM
1793/* Controls the maximum number of characters to display in the debug output
1794 for each remote packet. The remaining characters are omitted. */
1795
1796static int remote_packet_max_chars = 512;
1797
1798/* Show the maximum number of characters to display for each remote packet
1799 when remote debugging is enabled. */
1800
1801static void
1802show_remote_packet_max_chars (struct ui_file *file, int from_tty,
1803 struct cmd_list_element *c,
1804 const char *value)
1805{
1806 fprintf_filtered (file, _("Number of remote packet characters to "
1807 "display is %s.\n"), value);
1808}
1809
6b8edb51
PA
1810long
1811remote_target::get_memory_write_packet_size ()
11cf8741
JM
1812{
1813 return get_memory_packet_size (&memory_write_packet_config);
1814}
1815
5b6d1e4f 1816/* FIXME: needs to be per-remote-target. */
11cf8741
JM
1817static struct memory_packet_config memory_read_packet_config =
1818{
1819 "memory-read-packet-size",
1820};
1821
1822static void
ac88e2de 1823set_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1824{
1825 set_memory_packet_size (args, &memory_read_packet_config);
1826}
1827
1828static void
ac88e2de 1829show_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1830{
1831 show_memory_packet_size (&memory_read_packet_config);
1832}
1833
6b8edb51
PA
1834long
1835remote_target::get_memory_read_packet_size ()
11cf8741
JM
1836{
1837 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1838
11cf8741
JM
1839 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1840 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1841 increased beyond this. */
1842 if (size > get_remote_packet_size ())
1843 size = get_remote_packet_size ();
11cf8741
JM
1844 return size;
1845}
1846
11cf8741 1847\f
5a2468f5 1848
5a2468f5
JM
1849struct packet_config
1850 {
bb572ddd
DJ
1851 const char *name;
1852 const char *title;
4082afcc
PA
1853
1854 /* If auto, GDB auto-detects support for this packet or feature,
1855 either through qSupported, or by trying the packet and looking
1856 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1857 packet. If false, the packet is disabled. Configs that don't
1858 have an associated command always have this set to auto. */
7f19b9a2 1859 enum auto_boolean detect;
4082afcc
PA
1860
1861 /* Does the target support this packet? */
5a2468f5
JM
1862 enum packet_support support;
1863 };
1864
4082afcc
PA
1865static enum packet_support packet_config_support (struct packet_config *config);
1866static enum packet_support packet_support (int packet);
5a2468f5
JM
1867
1868static void
fba45db2 1869show_packet_config_cmd (struct packet_config *config)
5a2468f5 1870{
a121b7c1 1871 const char *support = "internal-error";
a744cf53 1872
4082afcc 1873 switch (packet_config_support (config))
5a2468f5
JM
1874 {
1875 case PACKET_ENABLE:
1876 support = "enabled";
1877 break;
1878 case PACKET_DISABLE:
1879 support = "disabled";
1880 break;
1881 case PACKET_SUPPORT_UNKNOWN:
1882 support = "unknown";
1883 break;
1884 }
1885 switch (config->detect)
1886 {
7f19b9a2 1887 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1888 printf_filtered (_("Support for the `%s' packet "
1889 "is auto-detected, currently %s.\n"),
37a105a1 1890 config->name, support);
5a2468f5 1891 break;
7f19b9a2
AC
1892 case AUTO_BOOLEAN_TRUE:
1893 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1894 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1895 config->name, support);
8e248173 1896 break;
5a2468f5
JM
1897 }
1898}
1899
1900static void
bb572ddd
DJ
1901add_packet_config_cmd (struct packet_config *config, const char *name,
1902 const char *title, int legacy)
d471ea57 1903{
5a2468f5
JM
1904 char *set_doc;
1905 char *show_doc;
d471ea57 1906 char *cmd_name;
3ed07be4 1907
5a2468f5
JM
1908 config->name = name;
1909 config->title = title;
590042fc 1910 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
b435e160 1911 name, title);
3e43a32a 1912 show_doc = xstrprintf ("Show current use of remote "
590042fc 1913 "protocol `%s' (%s) packet.",
b435e160 1914 name, title);
d471ea57 1915 /* set/show TITLE-packet {auto,on,off} */
b435e160 1916 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1917 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1918 &config->detect, set_doc,
1919 show_doc, NULL, /* help_doc */
4082afcc 1920 NULL,
bb572ddd
DJ
1921 show_remote_protocol_packet_cmd,
1922 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1923 /* The command code copies the documentation strings. */
1924 xfree (set_doc);
1925 xfree (show_doc);
23860348 1926 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1927 if (legacy)
1928 {
1929 char *legacy_name;
a744cf53 1930
b435e160 1931 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1932 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1933 &remote_set_cmdlist);
d471ea57 1934 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1935 &remote_show_cmdlist);
d471ea57 1936 }
5a2468f5
JM
1937}
1938
d471ea57 1939static enum packet_result
a76d924d 1940packet_check_result (const char *buf)
5a2468f5 1941{
d471ea57 1942 if (buf[0] != '\0')
5a2468f5 1943 {
d471ea57 1944 /* The stub recognized the packet request. Check that the
23860348 1945 operation succeeded. */
a76d924d
DJ
1946 if (buf[0] == 'E'
1947 && isxdigit (buf[1]) && isxdigit (buf[2])
1948 && buf[3] == '\0')
85102364 1949 /* "Enn" - definitely an error. */
a76d924d
DJ
1950 return PACKET_ERROR;
1951
1952 /* Always treat "E." as an error. This will be used for
1953 more verbose error messages, such as E.memtypes. */
1954 if (buf[0] == 'E' && buf[1] == '.')
1955 return PACKET_ERROR;
1956
1957 /* The packet may or may not be OK. Just assume it is. */
1958 return PACKET_OK;
1959 }
1960 else
1961 /* The stub does not support the packet. */
1962 return PACKET_UNKNOWN;
1963}
1964
8d64371b
TT
1965static enum packet_result
1966packet_check_result (const gdb::char_vector &buf)
1967{
1968 return packet_check_result (buf.data ());
1969}
1970
a76d924d
DJ
1971static enum packet_result
1972packet_ok (const char *buf, struct packet_config *config)
1973{
1974 enum packet_result result;
1975
4082afcc
PA
1976 if (config->detect != AUTO_BOOLEAN_TRUE
1977 && config->support == PACKET_DISABLE)
1978 internal_error (__FILE__, __LINE__,
1979 _("packet_ok: attempt to use a disabled packet"));
1980
a76d924d
DJ
1981 result = packet_check_result (buf);
1982 switch (result)
1983 {
1984 case PACKET_OK:
1985 case PACKET_ERROR:
1986 /* The stub recognized the packet request. */
4082afcc 1987 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1988 {
d471ea57
AC
1989 if (remote_debug)
1990 fprintf_unfiltered (gdb_stdlog,
4082afcc
PA
1991 "Packet %s (%s) is supported\n",
1992 config->name, config->title);
d471ea57 1993 config->support = PACKET_ENABLE;
d471ea57 1994 }
a76d924d
DJ
1995 break;
1996 case PACKET_UNKNOWN:
23860348 1997 /* The stub does not support the packet. */
4082afcc
PA
1998 if (config->detect == AUTO_BOOLEAN_AUTO
1999 && config->support == PACKET_ENABLE)
d471ea57 2000 {
4082afcc
PA
2001 /* If the stub previously indicated that the packet was
2002 supported then there is a protocol error. */
2003 error (_("Protocol error: %s (%s) conflicting enabled responses."),
2004 config->name, config->title);
2005 }
2006 else if (config->detect == AUTO_BOOLEAN_TRUE)
2007 {
2008 /* The user set it wrong. */
2009 error (_("Enabled packet %s (%s) not recognized by stub"),
2010 config->name, config->title);
d471ea57 2011 }
4082afcc
PA
2012
2013 if (remote_debug)
2014 fprintf_unfiltered (gdb_stdlog,
2015 "Packet %s (%s) is NOT supported\n",
2016 config->name, config->title);
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
2731 if (remote_debug)
2732 {
2733 fprintf_unfiltered (gdb_stdlog,
2734 "remote_set_syscall_catchpoint "
2735 "pid %d needed %d any_count %d n_sysno %d\n",
2736 pid, needed, any_count, n_sysno);
2737 }
2738
1b81856f 2739 std::string built_packet;
82075af2
JS
2740 if (needed)
2741 {
2742 /* Prepare a packet with the sysno list, assuming max 8+1
2743 characters for a sysno. If the resulting packet size is too
2744 big, fallback on the non-selective packet. */
2745 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
1b81856f
PA
2746 built_packet.reserve (maxpktsz);
2747 built_packet = "QCatchSyscalls:1";
649a140c 2748 if (any_count == 0)
82075af2 2749 {
649a140c
PA
2750 /* Add in each syscall to be caught. */
2751 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2752 {
649a140c
PA
2753 if (syscall_counts[i] != 0)
2754 string_appendf (built_packet, ";%zx", i);
82075af2
JS
2755 }
2756 }
1b81856f 2757 if (built_packet.size () > get_remote_packet_size ())
82075af2
JS
2758 {
2759 /* catch_packet too big. Fallback to less efficient
2760 non selective mode, with GDB doing the filtering. */
b80406ac 2761 catch_packet = "QCatchSyscalls:1";
82075af2 2762 }
b80406ac 2763 else
1b81856f 2764 catch_packet = built_packet.c_str ();
82075af2
JS
2765 }
2766 else
b80406ac 2767 catch_packet = "QCatchSyscalls:0";
82075af2 2768
b80406ac 2769 struct remote_state *rs = get_remote_state ();
82075af2 2770
b80406ac 2771 putpkt (catch_packet);
8d64371b 2772 getpkt (&rs->buf, 0);
b80406ac
TT
2773 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2774 if (result == PACKET_OK)
2775 return 0;
2776 else
2777 return -1;
82075af2
JS
2778}
2779
9b224c5e
PA
2780/* If 'QProgramSignals' is supported, tell the remote stub what
2781 signals it should pass through to the inferior when detaching. */
2782
f6ac5f3d 2783void
adc6a863 2784remote_target::program_signals (gdb::array_view<const unsigned char> signals)
9b224c5e 2785{
4082afcc 2786 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2787 {
2788 char *packet, *p;
adc6a863 2789 int count = 0;
5e4a05c4 2790 struct remote_state *rs = get_remote_state ();
9b224c5e 2791
adc6a863
PA
2792 gdb_assert (signals.size () < 256);
2793 for (size_t i = 0; i < signals.size (); i++)
9b224c5e
PA
2794 {
2795 if (signals[i])
2796 count++;
2797 }
224c3ddb 2798 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2799 strcpy (packet, "QProgramSignals:");
2800 p = packet + strlen (packet);
adc6a863 2801 for (size_t i = 0; i < signals.size (); i++)
9b224c5e
PA
2802 {
2803 if (signal_pass_state (i))
2804 {
2805 if (i >= 16)
2806 *p++ = tohex (i >> 4);
2807 *p++ = tohex (i & 15);
2808 if (count)
2809 *p++ = ';';
2810 else
2811 break;
2812 count--;
2813 }
2814 }
2815 *p = 0;
5e4a05c4
TT
2816 if (!rs->last_program_signals_packet
2817 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2818 {
9b224c5e 2819 putpkt (packet);
8d64371b 2820 getpkt (&rs->buf, 0);
8dc5b319 2821 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2822 xfree (rs->last_program_signals_packet);
2823 rs->last_program_signals_packet = packet;
9b224c5e
PA
2824 }
2825 else
2826 xfree (packet);
2827 }
2828}
2829
79d7f229
PA
2830/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2831 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2832 thread. If GEN is set, set the general thread, if not, then set
2833 the step/continue thread. */
6b8edb51
PA
2834void
2835remote_target::set_thread (ptid_t ptid, int gen)
c906108c 2836{
d01949b6 2837 struct remote_state *rs = get_remote_state ();
47f8a51d 2838 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
8d64371b
TT
2839 char *buf = rs->buf.data ();
2840 char *endbuf = buf + get_remote_packet_size ();
c906108c 2841
d7e15655 2842 if (state == ptid)
c906108c
SS
2843 return;
2844
79d7f229
PA
2845 *buf++ = 'H';
2846 *buf++ = gen ? 'g' : 'c';
d7e15655 2847 if (ptid == magic_null_ptid)
79d7f229 2848 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2849 else if (ptid == any_thread_ptid)
79d7f229 2850 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2851 else if (ptid == minus_one_ptid)
79d7f229
PA
2852 xsnprintf (buf, endbuf - buf, "-1");
2853 else
82f73884 2854 write_ptid (buf, endbuf, ptid);
79d7f229 2855 putpkt (rs->buf);
8d64371b 2856 getpkt (&rs->buf, 0);
c906108c 2857 if (gen)
47f8a51d 2858 rs->general_thread = ptid;
c906108c 2859 else
47f8a51d 2860 rs->continue_thread = ptid;
c906108c 2861}
79d7f229 2862
6b8edb51
PA
2863void
2864remote_target::set_general_thread (ptid_t ptid)
79d7f229
PA
2865{
2866 set_thread (ptid, 1);
2867}
2868
6b8edb51
PA
2869void
2870remote_target::set_continue_thread (ptid_t ptid)
79d7f229
PA
2871{
2872 set_thread (ptid, 0);
2873}
2874
3c9c4b83
PA
2875/* Change the remote current process. Which thread within the process
2876 ends up selected isn't important, as long as it is the same process
2877 as what INFERIOR_PTID points to.
2878
2879 This comes from that fact that there is no explicit notion of
2880 "selected process" in the protocol. The selected process for
2881 general operations is the process the selected general thread
2882 belongs to. */
2883
6b8edb51
PA
2884void
2885remote_target::set_general_process ()
3c9c4b83
PA
2886{
2887 struct remote_state *rs = get_remote_state ();
2888
2889 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2890 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2891 return;
2892
2893 /* We only need to change the remote current thread if it's pointing
2894 at some other process. */
e99b03dc 2895 if (rs->general_thread.pid () != inferior_ptid.pid ())
3c9c4b83
PA
2896 set_general_thread (inferior_ptid);
2897}
2898
c906108c 2899\f
7d1a114c
PA
2900/* Return nonzero if this is the main thread that we made up ourselves
2901 to model non-threaded targets as single-threaded. */
c906108c
SS
2902
2903static int
f6ac5f3d 2904remote_thread_always_alive (ptid_t ptid)
c906108c 2905{
d7e15655 2906 if (ptid == magic_null_ptid)
c0a2216e
PA
2907 /* The main thread is always alive. */
2908 return 1;
2909
e38504b3 2910 if (ptid.pid () != 0 && ptid.lwp () == 0)
c0a2216e
PA
2911 /* The main thread is always alive. This can happen after a
2912 vAttach, if the remote side doesn't support
2913 multi-threading. */
2914 return 1;
2915
7d1a114c
PA
2916 return 0;
2917}
2918
2919/* Return nonzero if the thread PTID is still alive on the remote
2920 system. */
2921
57810aa7 2922bool
f6ac5f3d 2923remote_target::thread_alive (ptid_t ptid)
7d1a114c
PA
2924{
2925 struct remote_state *rs = get_remote_state ();
2926 char *p, *endp;
2927
2928 /* Check if this is a thread that we made up ourselves to model
2929 non-threaded targets as single-threaded. */
f6ac5f3d 2930 if (remote_thread_always_alive (ptid))
7d1a114c
PA
2931 return 1;
2932
8d64371b
TT
2933 p = rs->buf.data ();
2934 endp = p + get_remote_packet_size ();
82f73884
PA
2935
2936 *p++ = 'T';
2937 write_ptid (p, endp, ptid);
2938
2e9f7625 2939 putpkt (rs->buf);
8d64371b 2940 getpkt (&rs->buf, 0);
2e9f7625 2941 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2942}
2943
79efa585
SM
2944/* Return a pointer to a thread name if we know it and NULL otherwise.
2945 The thread_info object owns the memory for the name. */
2946
f6ac5f3d
PA
2947const char *
2948remote_target::thread_name (struct thread_info *info)
79efa585
SM
2949{
2950 if (info->priv != NULL)
a9334058
SM
2951 {
2952 const std::string &name = get_remote_thread_info (info)->name;
2953 return !name.empty () ? name.c_str () : NULL;
2954 }
79efa585
SM
2955
2956 return NULL;
2957}
2958
c906108c
SS
2959/* About these extended threadlist and threadinfo packets. They are
2960 variable length packets but, the fields within them are often fixed
30baf67b 2961 length. They are redundant enough to send over UDP as is the
c906108c
SS
2962 remote protocol in general. There is a matching unit test module
2963 in libstub. */
2964
23860348 2965/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2966 libstub protocol encoding, and remote.c. It is not particularly
23860348 2967 changable. */
cce74817
JM
2968
2969/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2970 Plan to fix this. */
cce74817 2971
23860348 2972typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2973
9d1f7ab2 2974/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2975 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2976
2977struct gdb_ext_thread_info
c5aa993b 2978 {
23860348 2979 threadref threadid; /* External form of thread reference. */
2bc416ba 2980 int active; /* Has state interesting to GDB?
23860348 2981 regs, stack. */
2bc416ba 2982 char display[256]; /* Brief state display, name,
cedea757 2983 blocked/suspended. */
23860348 2984 char shortname[32]; /* To be used to name threads. */
2bc416ba 2985 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2986 whatever. */
c5aa993b 2987 };
cce74817
JM
2988
2989/* The volume of remote transfers can be limited by submitting
2990 a mask containing bits specifying the desired information.
2991 Use a union of these values as the 'selection' parameter to
0df8b418 2992 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2993
2994#define TAG_THREADID 1
2995#define TAG_EXISTS 2
2996#define TAG_DISPLAY 4
2997#define TAG_THREADNAME 8
c5aa993b 2998#define TAG_MOREDISPLAY 16
cce74817 2999
23860348 3000#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 3001
cecb1912 3002static const char *unpack_nibble (const char *buf, int *val);
cce74817 3003
cecb1912 3004static const char *unpack_byte (const char *buf, int *value);
cce74817 3005
a14ed312 3006static char *pack_int (char *buf, int value);
cce74817 3007
cecb1912 3008static const char *unpack_int (const char *buf, int *value);
cce74817 3009
cecb1912 3010static const char *unpack_string (const char *src, char *dest, int length);
cce74817 3011
23860348 3012static char *pack_threadid (char *pkt, threadref *id);
cce74817 3013
cecb1912 3014static const char *unpack_threadid (const char *inbuf, threadref *id);
cce74817 3015
23860348 3016void int_to_threadref (threadref *id, int value);
cce74817 3017
23860348 3018static int threadref_to_int (threadref *ref);
cce74817 3019
23860348 3020static void copy_threadref (threadref *dest, threadref *src);
cce74817 3021
23860348 3022static int threadmatch (threadref *dest, threadref *src);
cce74817 3023
2bc416ba 3024static char *pack_threadinfo_request (char *pkt, int mode,
23860348 3025 threadref *id);
cce74817 3026
a14ed312
KB
3027static char *pack_threadlist_request (char *pkt, int startflag,
3028 int threadcount,
23860348 3029 threadref *nextthread);
cce74817 3030
23860348 3031static int remote_newthread_step (threadref *ref, void *context);
cce74817 3032
82f73884
PA
3033
3034/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
3035 buffer we're allowed to write to. Returns
3036 BUF+CHARACTERS_WRITTEN. */
3037
6b8edb51
PA
3038char *
3039remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
82f73884
PA
3040{
3041 int pid, tid;
3042 struct remote_state *rs = get_remote_state ();
3043
3044 if (remote_multi_process_p (rs))
3045 {
e99b03dc 3046 pid = ptid.pid ();
82f73884
PA
3047 if (pid < 0)
3048 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
3049 else
3050 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
3051 }
e38504b3 3052 tid = ptid.lwp ();
82f73884
PA
3053 if (tid < 0)
3054 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
3055 else
3056 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
3057
3058 return buf;
3059}
3060
256642e8
PA
3061/* Extract a PTID from BUF. If non-null, OBUF is set to one past the
3062 last parsed char. Returns null_ptid if no thread id is found, and
3063 throws an error if the thread id has an invalid format. */
82f73884
PA
3064
3065static ptid_t
256642e8 3066read_ptid (const char *buf, const char **obuf)
82f73884 3067{
256642e8
PA
3068 const char *p = buf;
3069 const char *pp;
82f73884 3070 ULONGEST pid = 0, tid = 0;
82f73884
PA
3071
3072 if (*p == 'p')
3073 {
3074 /* Multi-process ptid. */
3075 pp = unpack_varlen_hex (p + 1, &pid);
3076 if (*pp != '.')
b37520b6 3077 error (_("invalid remote ptid: %s"), p);
82f73884
PA
3078
3079 p = pp;
3080 pp = unpack_varlen_hex (p + 1, &tid);
3081 if (obuf)
3082 *obuf = pp;
fd79271b 3083 return ptid_t (pid, tid, 0);
82f73884
PA
3084 }
3085
3086 /* No multi-process. Just a tid. */
3087 pp = unpack_varlen_hex (p, &tid);
3088
c9f35b34
KB
3089 /* Return null_ptid when no thread id is found. */
3090 if (p == pp)
3091 {
3092 if (obuf)
3093 *obuf = pp;
3094 return null_ptid;
3095 }
3096
82f73884 3097 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
3098 what's in inferior_ptid, unless it's null at this point. If so,
3099 then since there's no way to know the pid of the reported
3100 threads, use the magic number. */
d7e15655 3101 if (inferior_ptid == null_ptid)
e99b03dc 3102 pid = magic_null_ptid.pid ();
ca19bf23 3103 else
e99b03dc 3104 pid = inferior_ptid.pid ();
82f73884
PA
3105
3106 if (obuf)
3107 *obuf = pp;
fd79271b 3108 return ptid_t (pid, tid, 0);
82f73884
PA
3109}
3110
c906108c 3111static int
fba45db2 3112stubhex (int ch)
c906108c
SS
3113{
3114 if (ch >= 'a' && ch <= 'f')
3115 return ch - 'a' + 10;
3116 if (ch >= '0' && ch <= '9')
3117 return ch - '0';
3118 if (ch >= 'A' && ch <= 'F')
3119 return ch - 'A' + 10;
3120 return -1;
3121}
3122
3123static int
cecb1912 3124stub_unpack_int (const char *buff, int fieldlength)
c906108c
SS
3125{
3126 int nibble;
3127 int retval = 0;
3128
3129 while (fieldlength)
3130 {
3131 nibble = stubhex (*buff++);
3132 retval |= nibble;
3133 fieldlength--;
3134 if (fieldlength)
3135 retval = retval << 4;
3136 }
3137 return retval;
3138}
3139
cecb1912
SM
3140static const char *
3141unpack_nibble (const char *buf, int *val)
c906108c 3142{
b7589f7d 3143 *val = fromhex (*buf++);
c906108c
SS
3144 return buf;
3145}
3146
cecb1912
SM
3147static const char *
3148unpack_byte (const char *buf, int *value)
c906108c
SS
3149{
3150 *value = stub_unpack_int (buf, 2);
3151 return buf + 2;
3152}
3153
3154static char *
fba45db2 3155pack_int (char *buf, int value)
c906108c
SS
3156{
3157 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3158 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3159 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3160 buf = pack_hex_byte (buf, (value & 0xff));
3161 return buf;
3162}
3163
cecb1912
SM
3164static const char *
3165unpack_int (const char *buf, int *value)
c906108c
SS
3166{
3167 *value = stub_unpack_int (buf, 8);
3168 return buf + 8;
3169}
3170
23860348 3171#if 0 /* Currently unused, uncomment when needed. */
a14ed312 3172static char *pack_string (char *pkt, char *string);
c906108c
SS
3173
3174static char *
fba45db2 3175pack_string (char *pkt, char *string)
c906108c
SS
3176{
3177 char ch;
3178 int len;
3179
3180 len = strlen (string);
3181 if (len > 200)
23860348 3182 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
3183 pkt = pack_hex_byte (pkt, len);
3184 while (len-- > 0)
3185 {
3186 ch = *string++;
3187 if ((ch == '\0') || (ch == '#'))
23860348 3188 ch = '*'; /* Protect encapsulation. */
c906108c
SS
3189 *pkt++ = ch;
3190 }
3191 return pkt;
3192}
3193#endif /* 0 (unused) */
3194
cecb1912
SM
3195static const char *
3196unpack_string (const char *src, char *dest, int length)
c906108c
SS
3197{
3198 while (length--)
3199 *dest++ = *src++;
3200 *dest = '\0';
3201 return src;
3202}
3203
3204static char *
fba45db2 3205pack_threadid (char *pkt, threadref *id)
c906108c
SS
3206{
3207 char *limit;
3208 unsigned char *altid;
3209
3210 altid = (unsigned char *) id;
3211 limit = pkt + BUF_THREAD_ID_SIZE;
3212 while (pkt < limit)
3213 pkt = pack_hex_byte (pkt, *altid++);
3214 return pkt;
3215}
3216
3217
cecb1912
SM
3218static const char *
3219unpack_threadid (const char *inbuf, threadref *id)
c906108c
SS
3220{
3221 char *altref;
cecb1912 3222 const char *limit = inbuf + BUF_THREAD_ID_SIZE;
c906108c
SS
3223 int x, y;
3224
3225 altref = (char *) id;
3226
3227 while (inbuf < limit)
3228 {
3229 x = stubhex (*inbuf++);
3230 y = stubhex (*inbuf++);
3231 *altref++ = (x << 4) | y;
3232 }
3233 return inbuf;
3234}
3235
3236/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 3237 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
3238 to use 64bit thread references internally. This is an adapter
3239 function. */
3240
3241void
fba45db2 3242int_to_threadref (threadref *id, int value)
c906108c
SS
3243{
3244 unsigned char *scan;
3245
3246 scan = (unsigned char *) id;
3247 {
3248 int i = 4;
3249 while (i--)
3250 *scan++ = 0;
3251 }
3252 *scan++ = (value >> 24) & 0xff;
3253 *scan++ = (value >> 16) & 0xff;
3254 *scan++ = (value >> 8) & 0xff;
3255 *scan++ = (value & 0xff);
3256}
3257
3258static int
fba45db2 3259threadref_to_int (threadref *ref)
c906108c
SS
3260{
3261 int i, value = 0;
3262 unsigned char *scan;
3263
cfd77fa1 3264 scan = *ref;
c906108c
SS
3265 scan += 4;
3266 i = 4;
3267 while (i-- > 0)
3268 value = (value << 8) | ((*scan++) & 0xff);
3269 return value;
3270}
3271
3272static void
fba45db2 3273copy_threadref (threadref *dest, threadref *src)
c906108c
SS
3274{
3275 int i;
3276 unsigned char *csrc, *cdest;
3277
3278 csrc = (unsigned char *) src;
3279 cdest = (unsigned char *) dest;
3280 i = 8;
3281 while (i--)
3282 *cdest++ = *csrc++;
3283}
3284
3285static int
fba45db2 3286threadmatch (threadref *dest, threadref *src)
c906108c 3287{
23860348 3288 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
3289#if 0
3290 unsigned char *srcp, *destp;
3291 int i, result;
3292 srcp = (char *) src;
3293 destp = (char *) dest;
3294
3295 result = 1;
3296 while (i-- > 0)
3297 result &= (*srcp++ == *destp++) ? 1 : 0;
3298 return result;
3299#endif
3300 return 1;
3301}
3302
3303/*
c5aa993b
JM
3304 threadid:1, # always request threadid
3305 context_exists:2,
3306 display:4,
3307 unique_name:8,
3308 more_display:16
3309 */
c906108c
SS
3310
3311/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3312
3313static char *
fba45db2 3314pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 3315{
23860348
MS
3316 *pkt++ = 'q'; /* Info Query */
3317 *pkt++ = 'P'; /* process or thread info */
3318 pkt = pack_int (pkt, mode); /* mode */
c906108c 3319 pkt = pack_threadid (pkt, id); /* threadid */
23860348 3320 *pkt = '\0'; /* terminate */
c906108c
SS
3321 return pkt;
3322}
3323
23860348 3324/* These values tag the fields in a thread info response packet. */
c906108c 3325/* Tagging the fields allows us to request specific fields and to
23860348 3326 add more fields as time goes by. */
c906108c 3327
23860348 3328#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 3329#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 3330 fetch registers and its stack? */
c5aa993b 3331#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 3332#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 3333#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 3334 the process. */
c906108c 3335
6b8edb51 3336int
cecb1912 3337remote_target::remote_unpack_thread_info_response (const char *pkt,
6b8edb51
PA
3338 threadref *expectedref,
3339 gdb_ext_thread_info *info)
c906108c 3340{
d01949b6 3341 struct remote_state *rs = get_remote_state ();
c906108c 3342 int mask, length;
cfd77fa1 3343 int tag;
c906108c 3344 threadref ref;
cecb1912 3345 const char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */
c906108c
SS
3346 int retval = 1;
3347
23860348 3348 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
3349 info->active = 0;
3350 info->display[0] = '\0';
3351 info->shortname[0] = '\0';
3352 info->more_display[0] = '\0';
3353
23860348
MS
3354 /* Assume the characters indicating the packet type have been
3355 stripped. */
c906108c
SS
3356 pkt = unpack_int (pkt, &mask); /* arg mask */
3357 pkt = unpack_threadid (pkt, &ref);
3358
3359 if (mask == 0)
8a3fe4f8 3360 warning (_("Incomplete response to threadinfo request."));
c906108c 3361 if (!threadmatch (&ref, expectedref))
23860348 3362 { /* This is an answer to a different request. */
8a3fe4f8 3363 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
3364 return 0;
3365 }
3366 copy_threadref (&info->threadid, &ref);
3367
405feb71 3368 /* Loop on tagged fields , try to bail if something goes wrong. */
c906108c 3369
23860348
MS
3370 /* Packets are terminated with nulls. */
3371 while ((pkt < limit) && mask && *pkt)
c906108c
SS
3372 {
3373 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
3374 pkt = unpack_byte (pkt, &length); /* length */
3375 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 3376 {
8a3fe4f8 3377 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
3378 retval = 0;
3379 break;
3380 }
3381 if (tag == TAG_THREADID)
3382 {
3383 if (length != 16)
3384 {
8a3fe4f8 3385 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
3386 retval = 0;
3387 break;
3388 }
3389 pkt = unpack_threadid (pkt, &ref);
3390 mask = mask & ~TAG_THREADID;
3391 continue;
3392 }
3393 if (tag == TAG_EXISTS)
3394 {
3395 info->active = stub_unpack_int (pkt, length);
3396 pkt += length;
3397 mask = mask & ~(TAG_EXISTS);
3398 if (length > 8)
3399 {
8a3fe4f8 3400 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
3401 retval = 0;
3402 break;
3403 }
3404 continue;
3405 }
3406 if (tag == TAG_THREADNAME)
3407 {
3408 pkt = unpack_string (pkt, &info->shortname[0], length);
3409 mask = mask & ~TAG_THREADNAME;
3410 continue;
3411 }
3412 if (tag == TAG_DISPLAY)
3413 {
3414 pkt = unpack_string (pkt, &info->display[0], length);
3415 mask = mask & ~TAG_DISPLAY;
3416 continue;
3417 }
3418 if (tag == TAG_MOREDISPLAY)
3419 {
3420 pkt = unpack_string (pkt, &info->more_display[0], length);
3421 mask = mask & ~TAG_MOREDISPLAY;
3422 continue;
3423 }
8a3fe4f8 3424 warning (_("ERROR RMT: unknown thread info tag."));
23860348 3425 break; /* Not a tag we know about. */
c906108c
SS
3426 }
3427 return retval;
3428}
3429
6b8edb51
PA
3430int
3431remote_target::remote_get_threadinfo (threadref *threadid,
3432 int fieldset,
3433 gdb_ext_thread_info *info)
c906108c 3434{
d01949b6 3435 struct remote_state *rs = get_remote_state ();
c906108c 3436 int result;
c906108c 3437
8d64371b 3438 pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
2e9f7625 3439 putpkt (rs->buf);
8d64371b 3440 getpkt (&rs->buf, 0);
3084dd77
PA
3441
3442 if (rs->buf[0] == '\0')
3443 return 0;
3444
8d64371b 3445 result = remote_unpack_thread_info_response (&rs->buf[2],
23860348 3446 threadid, info);
c906108c
SS
3447 return result;
3448}
3449
c906108c
SS
3450/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3451
3452static char *
fba45db2
KB
3453pack_threadlist_request (char *pkt, int startflag, int threadcount,
3454 threadref *nextthread)
c906108c
SS
3455{
3456 *pkt++ = 'q'; /* info query packet */
3457 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 3458 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
3459 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3460 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3461 *pkt = '\0';
3462 return pkt;
3463}
3464
3465/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3466
6b8edb51 3467int
cecb1912 3468remote_target::parse_threadlist_response (const char *pkt, int result_limit,
6b8edb51
PA
3469 threadref *original_echo,
3470 threadref *resultlist,
3471 int *doneflag)
c906108c 3472{
d01949b6 3473 struct remote_state *rs = get_remote_state ();
c906108c
SS
3474 int count, resultcount, done;
3475
3476 resultcount = 0;
3477 /* Assume the 'q' and 'M chars have been stripped. */
cecb1912 3478 const char *limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
23860348 3479 /* done parse past here */
c906108c
SS
3480 pkt = unpack_byte (pkt, &count); /* count field */
3481 pkt = unpack_nibble (pkt, &done);
3482 /* The first threadid is the argument threadid. */
3483 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3484 while ((count-- > 0) && (pkt < limit))
3485 {
3486 pkt = unpack_threadid (pkt, resultlist++);
3487 if (resultcount++ >= result_limit)
3488 break;
3489 }
3490 if (doneflag)
3491 *doneflag = done;
3492 return resultcount;
3493}
3494
6dc54d91
PA
3495/* Fetch the next batch of threads from the remote. Returns -1 if the
3496 qL packet is not supported, 0 on error and 1 on success. */
3497
6b8edb51
PA
3498int
3499remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3500 int result_limit, int *done, int *result_count,
3501 threadref *threadlist)
c906108c 3502{
d01949b6 3503 struct remote_state *rs = get_remote_state ();
c906108c
SS
3504 int result = 1;
3505
405feb71 3506 /* Truncate result limit to be smaller than the packet size. */
3e43a32a
MS
3507 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3508 >= get_remote_packet_size ())
ea9c271d 3509 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 3510
8d64371b
TT
3511 pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3512 nextthread);
6d820c5c 3513 putpkt (rs->buf);
8d64371b
TT
3514 getpkt (&rs->buf, 0);
3515 if (rs->buf[0] == '\0')
6dc54d91
PA
3516 {
3517 /* Packet not supported. */
3518 return -1;
3519 }
3520
3521 *result_count =
8d64371b 3522 parse_threadlist_response (&rs->buf[2], result_limit,
6dc54d91 3523 &rs->echo_nextthread, threadlist, done);
c906108c 3524
0d031856 3525 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 3526 {
23860348 3527 /* FIXME: This is a good reason to drop the packet. */
405feb71
TV
3528 /* Possibly, there is a duplicate response. */
3529 /* Possibilities :
dda83cd7
SM
3530 retransmit immediatly - race conditions
3531 retransmit after timeout - yes
3532 exit
3533 wait for packet, then exit
c906108c 3534 */
8a3fe4f8 3535 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 3536 return 0; /* I choose simply exiting. */
c906108c
SS
3537 }
3538 if (*result_count <= 0)
3539 {
3540 if (*done != 1)
3541 {
8a3fe4f8 3542 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
3543 result = 0;
3544 }
3545 return result; /* break; */
3546 }
3547 if (*result_count > result_limit)
3548 {
3549 *result_count = 0;
8a3fe4f8 3550 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
3551 return 0;
3552 }
3553 return result;
3554}
3555
6dc54d91
PA
3556/* Fetch the list of remote threads, with the qL packet, and call
3557 STEPFUNCTION for each thread found. Stops iterating and returns 1
3558 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3559 STEPFUNCTION returns false. If the packet is not supported,
3560 returns -1. */
c906108c 3561
6b8edb51
PA
3562int
3563remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3564 void *context, int looplimit)
c906108c 3565{
0d031856 3566 struct remote_state *rs = get_remote_state ();
c906108c
SS
3567 int done, i, result_count;
3568 int startflag = 1;
3569 int result = 1;
3570 int loopcount = 0;
c906108c
SS
3571
3572 done = 0;
3573 while (!done)
3574 {
3575 if (loopcount++ > looplimit)
3576 {
3577 result = 0;
8a3fe4f8 3578 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
3579 break;
3580 }
6dc54d91
PA
3581 result = remote_get_threadlist (startflag, &rs->nextthread,
3582 MAXTHREADLISTRESULTS,
3583 &done, &result_count,
3584 rs->resultthreadlist);
3585 if (result <= 0)
3586 break;
23860348 3587 /* Clear for later iterations. */
c906108c
SS
3588 startflag = 0;
3589 /* Setup to resume next batch of thread references, set nextthread. */
3590 if (result_count >= 1)
0d031856
TT
3591 copy_threadref (&rs->nextthread,
3592 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
3593 i = 0;
3594 while (result_count--)
6dc54d91
PA
3595 {
3596 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3597 {
3598 result = 0;
3599 break;
3600 }
3601 }
c906108c
SS
3602 }
3603 return result;
3604}
3605
6dc54d91
PA
3606/* A thread found on the remote target. */
3607
21fe1c75 3608struct thread_item
6dc54d91 3609{
21fe1c75
SM
3610 explicit thread_item (ptid_t ptid_)
3611 : ptid (ptid_)
3612 {}
3613
3614 thread_item (thread_item &&other) = default;
3615 thread_item &operator= (thread_item &&other) = default;
3616
3617 DISABLE_COPY_AND_ASSIGN (thread_item);
3618
6dc54d91
PA
3619 /* The thread's PTID. */
3620 ptid_t ptid;
3621
21fe1c75
SM
3622 /* The thread's extra info. */
3623 std::string extra;
6dc54d91 3624
21fe1c75
SM
3625 /* The thread's name. */
3626 std::string name;
79efa585 3627
6dc54d91 3628 /* The core the thread was running on. -1 if not known. */
21fe1c75 3629 int core = -1;
f6327dcb
KB
3630
3631 /* The thread handle associated with the thread. */
21fe1c75 3632 gdb::byte_vector thread_handle;
21fe1c75 3633};
6dc54d91
PA
3634
3635/* Context passed around to the various methods listing remote
3636 threads. As new threads are found, they're added to the ITEMS
3637 vector. */
3638
3639struct threads_listing_context
3640{
21fe1c75
SM
3641 /* Return true if this object contains an entry for a thread with ptid
3642 PTID. */
6dc54d91 3643
21fe1c75
SM
3644 bool contains_thread (ptid_t ptid) const
3645 {
3646 auto match_ptid = [&] (const thread_item &item)
3647 {
3648 return item.ptid == ptid;
3649 };
80134cf5 3650
21fe1c75
SM
3651 auto it = std::find_if (this->items.begin (),
3652 this->items.end (),
3653 match_ptid);
80134cf5 3654
21fe1c75
SM
3655 return it != this->items.end ();
3656 }
80134cf5 3657
21fe1c75 3658 /* Remove the thread with ptid PTID. */
80134cf5 3659
21fe1c75
SM
3660 void remove_thread (ptid_t ptid)
3661 {
3662 auto match_ptid = [&] (const thread_item &item)
3663 {
dda83cd7 3664 return item.ptid == ptid;
21fe1c75 3665 };
cbb8991c 3666
21fe1c75
SM
3667 auto it = std::remove_if (this->items.begin (),
3668 this->items.end (),
3669 match_ptid);
cbb8991c 3670
21fe1c75
SM
3671 if (it != this->items.end ())
3672 this->items.erase (it);
3673 }
3674
3675 /* The threads found on the remote target. */
3676 std::vector<thread_item> items;
3677};
cbb8991c 3678
c906108c 3679static int
6dc54d91 3680remote_newthread_step (threadref *ref, void *data)
c906108c 3681{
19ba03f4
SM
3682 struct threads_listing_context *context
3683 = (struct threads_listing_context *) data;
21fe1c75
SM
3684 int pid = inferior_ptid.pid ();
3685 int lwp = threadref_to_int (ref);
3686 ptid_t ptid (pid, lwp);
6dc54d91 3687
21fe1c75 3688 context->items.emplace_back (ptid);
6dc54d91 3689
c906108c
SS
3690 return 1; /* continue iterator */
3691}
3692
3693#define CRAZY_MAX_THREADS 1000
3694
6b8edb51
PA
3695ptid_t
3696remote_target::remote_current_thread (ptid_t oldpid)
c906108c 3697{
d01949b6 3698 struct remote_state *rs = get_remote_state ();
c906108c
SS
3699
3700 putpkt ("qC");
8d64371b 3701 getpkt (&rs->buf, 0);
2e9f7625 3702 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34 3703 {
256642e8 3704 const char *obuf;
c9f35b34
KB
3705 ptid_t result;
3706
3707 result = read_ptid (&rs->buf[2], &obuf);
3708 if (*obuf != '\0' && remote_debug)
dda83cd7
SM
3709 fprintf_unfiltered (gdb_stdlog,
3710 "warning: garbage in qC reply\n");
c9f35b34
KB
3711
3712 return result;
3713 }
c906108c
SS
3714 else
3715 return oldpid;
3716}
3717
6dc54d91 3718/* List remote threads using the deprecated qL packet. */
cce74817 3719
6b8edb51
PA
3720int
3721remote_target::remote_get_threads_with_ql (threads_listing_context *context)
c906108c 3722{
6dc54d91
PA
3723 if (remote_threadlist_iterator (remote_newthread_step, context,
3724 CRAZY_MAX_THREADS) >= 0)
3725 return 1;
3726
3727 return 0;
c906108c
SS
3728}
3729
dc146f7c
VP
3730#if defined(HAVE_LIBEXPAT)
3731
dc146f7c
VP
3732static void
3733start_thread (struct gdb_xml_parser *parser,
3734 const struct gdb_xml_element *element,
4d0fdd9b
SM
3735 void *user_data,
3736 std::vector<gdb_xml_value> &attributes)
dc146f7c 3737{
19ba03f4
SM
3738 struct threads_listing_context *data
3739 = (struct threads_listing_context *) user_data;
3d2c1d41 3740 struct gdb_xml_value *attr;
dc146f7c 3741
4d0fdd9b 3742 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
21fe1c75
SM
3743 ptid_t ptid = read_ptid (id, NULL);
3744
3745 data->items.emplace_back (ptid);
3746 thread_item &item = data->items.back ();
dc146f7c 3747
3d2c1d41
PA
3748 attr = xml_find_attribute (attributes, "core");
3749 if (attr != NULL)
4d0fdd9b 3750 item.core = *(ULONGEST *) attr->value.get ();
dc146f7c 3751
79efa585 3752 attr = xml_find_attribute (attributes, "name");
21fe1c75 3753 if (attr != NULL)
4d0fdd9b 3754 item.name = (const char *) attr->value.get ();
79efa585 3755
f6327dcb
KB
3756 attr = xml_find_attribute (attributes, "handle");
3757 if (attr != NULL)
4d0fdd9b 3758 item.thread_handle = hex2bin ((const char *) attr->value.get ());
dc146f7c
VP
3759}
3760
3761static void
3762end_thread (struct gdb_xml_parser *parser,
3763 const struct gdb_xml_element *element,
3764 void *user_data, const char *body_text)
3765{
19ba03f4
SM
3766 struct threads_listing_context *data
3767 = (struct threads_listing_context *) user_data;
dc146f7c 3768
21fe1c75
SM
3769 if (body_text != NULL && *body_text != '\0')
3770 data->items.back ().extra = body_text;
dc146f7c
VP
3771}
3772
3773const struct gdb_xml_attribute thread_attributes[] = {
3774 { "id", GDB_XML_AF_NONE, NULL, NULL },
3775 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3776 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
f6327dcb 3777 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3778 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3779};
3780
3781const struct gdb_xml_element thread_children[] = {
3782 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3783};
3784
3785const struct gdb_xml_element threads_children[] = {
3786 { "thread", thread_attributes, thread_children,
3787 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3788 start_thread, end_thread },
3789 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3790};
3791
3792const struct gdb_xml_element threads_elements[] = {
3793 { "threads", NULL, threads_children,
3794 GDB_XML_EF_NONE, NULL, NULL },
3795 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3796};
3797
3798#endif
3799
6dc54d91 3800/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3801
6b8edb51
PA
3802int
3803remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
0f71a2f6 3804{
dc146f7c 3805#if defined(HAVE_LIBEXPAT)
4082afcc 3806 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3807 {
9018be22 3808 gdb::optional<gdb::char_vector> xml
6b8edb51 3809 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
efc0eabd 3810
9018be22 3811 if (xml && (*xml)[0] != '\0')
dc146f7c 3812 {
6dc54d91 3813 gdb_xml_parse_quick (_("threads"), "threads.dtd",
9018be22 3814 threads_elements, xml->data (), context);
dc146f7c
VP
3815 }
3816
6dc54d91 3817 return 1;
dc146f7c
VP
3818 }
3819#endif
3820
6dc54d91
PA
3821 return 0;
3822}
3823
3824/* List remote threads using qfThreadInfo/qsThreadInfo. */
3825
6b8edb51
PA
3826int
3827remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
6dc54d91
PA
3828{
3829 struct remote_state *rs = get_remote_state ();
3830
b80fafe3 3831 if (rs->use_threadinfo_query)
9d1f7ab2 3832 {
256642e8 3833 const char *bufp;
6dc54d91 3834
9d1f7ab2 3835 putpkt ("qfThreadInfo");
8d64371b
TT
3836 getpkt (&rs->buf, 0);
3837 bufp = rs->buf.data ();
9d1f7ab2 3838 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3839 {
9d1f7ab2
MS
3840 while (*bufp++ == 'm') /* reply contains one or more TID */
3841 {
3842 do
3843 {
21fe1c75
SM
3844 ptid_t ptid = read_ptid (bufp, &bufp);
3845 context->items.emplace_back (ptid);
9d1f7ab2
MS
3846 }
3847 while (*bufp++ == ','); /* comma-separated list */
3848 putpkt ("qsThreadInfo");
8d64371b
TT
3849 getpkt (&rs->buf, 0);
3850 bufp = rs->buf.data ();
9d1f7ab2 3851 }
6dc54d91
PA
3852 return 1;
3853 }
3854 else
3855 {
3856 /* Packet not recognized. */
3857 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3858 }
3859 }
3860
6dc54d91
PA
3861 return 0;
3862}
3863
a05575d3
TBA
3864/* Return true if INF only has one non-exited thread. */
3865
3866static bool
3867has_single_non_exited_thread (inferior *inf)
3868{
3869 int count = 0;
3870 for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
3871 if (++count > 1)
3872 break;
3873 return count == 1;
3874}
3875
e8032dde 3876/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3877 targets. */
3878
f6ac5f3d
PA
3879void
3880remote_target::update_thread_list ()
6dc54d91 3881{
6dc54d91 3882 struct threads_listing_context context;
ab970af1 3883 int got_list = 0;
e8032dde 3884
6dc54d91
PA
3885 /* We have a few different mechanisms to fetch the thread list. Try
3886 them all, starting with the most preferred one first, falling
3887 back to older methods. */
6b8edb51
PA
3888 if (remote_get_threads_with_qxfer (&context)
3889 || remote_get_threads_with_qthreadinfo (&context)
3890 || remote_get_threads_with_ql (&context))
6dc54d91 3891 {
ab970af1
PA
3892 got_list = 1;
3893
21fe1c75 3894 if (context.items.empty ()
f6ac5f3d 3895 && remote_thread_always_alive (inferior_ptid))
7d1a114c
PA
3896 {
3897 /* Some targets don't really support threads, but still
3898 reply an (empty) thread list in response to the thread
3899 listing packets, instead of replying "packet not
3900 supported". Exit early so we don't delete the main
3901 thread. */
7d1a114c
PA
3902 return;
3903 }
3904
ab970af1
PA
3905 /* CONTEXT now holds the current thread list on the remote
3906 target end. Delete GDB-side threads no longer found on the
3907 target. */
08036331 3908 for (thread_info *tp : all_threads_safe ())
cbb8991c 3909 {
5b6d1e4f
PA
3910 if (tp->inf->process_target () != this)
3911 continue;
3912
21fe1c75 3913 if (!context.contains_thread (tp->ptid))
ab970af1 3914 {
a05575d3
TBA
3915 /* Do not remove the thread if it is the last thread in
3916 the inferior. This situation happens when we have a
3917 pending exit process status to process. Otherwise we
3918 may end up with a seemingly live inferior (i.e. pid
3919 != 0) that has no threads. */
3920 if (has_single_non_exited_thread (tp->inf))
3921 continue;
3922
ab970af1 3923 /* Not found. */
00431a78 3924 delete_thread (tp);
ab970af1 3925 }
cbb8991c
DB
3926 }
3927
3928 /* Remove any unreported fork child threads from CONTEXT so
3929 that we don't interfere with follow fork, which is where
3930 creation of such threads is handled. */
3931 remove_new_fork_children (&context);
74531fed 3932
ab970af1 3933 /* And now add threads we don't know about yet to our list. */
21fe1c75 3934 for (thread_item &item : context.items)
6dc54d91 3935 {
21fe1c75 3936 if (item.ptid != null_ptid)
6dc54d91 3937 {
6dc54d91 3938 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3939 executing until proven otherwise with a stop reply.
3940 In all-stop, we can only get here if all threads are
6dc54d91 3941 stopped. */
0d5b594f 3942 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3943
21fe1c75 3944 remote_notice_new_inferior (item.ptid, executing);
6dc54d91 3945
5b6d1e4f 3946 thread_info *tp = find_thread_ptid (this, item.ptid);
00431a78 3947 remote_thread_info *info = get_remote_thread_info (tp);
21fe1c75 3948 info->core = item.core;
7aabaf9d
SM
3949 info->extra = std::move (item.extra);
3950 info->name = std::move (item.name);
3951 info->thread_handle = std::move (item.thread_handle);
6dc54d91
PA
3952 }
3953 }
3954 }
3955
ab970af1
PA
3956 if (!got_list)
3957 {
3958 /* If no thread listing method is supported, then query whether
3959 each known thread is alive, one by one, with the T packet.
3960 If the target doesn't support threads at all, then this is a
3961 no-op. See remote_thread_alive. */
3962 prune_threads ();
3963 }
9d1f7ab2
MS
3964}
3965
802188a7 3966/*
9d1f7ab2
MS
3967 * Collect a descriptive string about the given thread.
3968 * The target may say anything it wants to about the thread
3969 * (typically info about its blocked / runnable state, name, etc.).
3970 * This string will appear in the info threads display.
802188a7 3971 *
9d1f7ab2
MS
3972 * Optional: targets are not required to implement this function.
3973 */
3974
f6ac5f3d
PA
3975const char *
3976remote_target::extra_thread_info (thread_info *tp)
9d1f7ab2 3977{
d01949b6 3978 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3979 int set;
3980 threadref id;
3981 struct gdb_ext_thread_info threadinfo;
9d1f7ab2 3982
5d93a237 3983 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3984 internal_error (__FILE__, __LINE__,
e2e0b3e5 3985 _("remote_threads_extra_info"));
9d1f7ab2 3986
d7e15655 3987 if (tp->ptid == magic_null_ptid
e38504b3 3988 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
60e569b9
PA
3989 /* This is the main thread which was added by GDB. The remote
3990 server doesn't know about it. */
3991 return NULL;
3992
c76a8ea3
PA
3993 std::string &extra = get_remote_thread_info (tp)->extra;
3994
3995 /* If already have cached info, use it. */
3996 if (!extra.empty ())
3997 return extra.c_str ();
3998
4082afcc 3999 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 4000 {
c76a8ea3
PA
4001 /* If we're using qXfer:threads:read, then the extra info is
4002 included in the XML. So if we didn't have anything cached,
4003 it's because there's really no extra info. */
4004 return NULL;
dc146f7c
VP
4005 }
4006
b80fafe3 4007 if (rs->use_threadextra_query)
9d1f7ab2 4008 {
8d64371b
TT
4009 char *b = rs->buf.data ();
4010 char *endb = b + get_remote_packet_size ();
82f73884
PA
4011
4012 xsnprintf (b, endb - b, "qThreadExtraInfo,");
4013 b += strlen (b);
4014 write_ptid (b, endb, tp->ptid);
4015
2e9f7625 4016 putpkt (rs->buf);
8d64371b 4017 getpkt (&rs->buf, 0);
2e9f7625 4018 if (rs->buf[0] != 0)
9d1f7ab2 4019 {
8d64371b
TT
4020 extra.resize (strlen (rs->buf.data ()) / 2);
4021 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
c76a8ea3 4022 return extra.c_str ();
9d1f7ab2 4023 }
0f71a2f6 4024 }
9d1f7ab2
MS
4025
4026 /* If the above query fails, fall back to the old method. */
b80fafe3 4027 rs->use_threadextra_query = 0;
9d1f7ab2
MS
4028 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
4029 | TAG_MOREDISPLAY | TAG_DISPLAY;
e38504b3 4030 int_to_threadref (&id, tp->ptid.lwp ());
9d1f7ab2
MS
4031 if (remote_get_threadinfo (&id, set, &threadinfo))
4032 if (threadinfo.active)
0f71a2f6 4033 {
9d1f7ab2 4034 if (*threadinfo.shortname)
c76a8ea3 4035 string_appendf (extra, " Name: %s", threadinfo.shortname);
9d1f7ab2 4036 if (*threadinfo.display)
c76a8ea3
PA
4037 {
4038 if (!extra.empty ())
4039 extra += ',';
4040 string_appendf (extra, " State: %s", threadinfo.display);
4041 }
9d1f7ab2 4042 if (*threadinfo.more_display)
c5aa993b 4043 {
c76a8ea3
PA
4044 if (!extra.empty ())
4045 extra += ',';
4046 string_appendf (extra, " Priority: %s", threadinfo.more_display);
c5aa993b 4047 }
c76a8ea3 4048 return extra.c_str ();
0f71a2f6 4049 }
9d1f7ab2 4050 return NULL;
0f71a2f6 4051}
c906108c 4052\f
c5aa993b 4053
f6ac5f3d
PA
4054bool
4055remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
4056 struct static_tracepoint_marker *marker)
0fb4aa4b
PA
4057{
4058 struct remote_state *rs = get_remote_state ();
8d64371b 4059 char *p = rs->buf.data ();
0fb4aa4b 4060
bba74b36 4061 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
4062 p += strlen (p);
4063 p += hexnumstr (p, addr);
4064 putpkt (rs->buf);
8d64371b
TT
4065 getpkt (&rs->buf, 0);
4066 p = rs->buf.data ();
0fb4aa4b
PA
4067
4068 if (*p == 'E')
4069 error (_("Remote failure reply: %s"), p);
4070
4071 if (*p++ == 'm')
4072 {
256642e8 4073 parse_static_tracepoint_marker_definition (p, NULL, marker);
5d9310c4 4074 return true;
0fb4aa4b
PA
4075 }
4076
5d9310c4 4077 return false;
0fb4aa4b
PA
4078}
4079
f6ac5f3d
PA
4080std::vector<static_tracepoint_marker>
4081remote_target::static_tracepoint_markers_by_strid (const char *strid)
0fb4aa4b
PA
4082{
4083 struct remote_state *rs = get_remote_state ();
5d9310c4 4084 std::vector<static_tracepoint_marker> markers;
256642e8 4085 const char *p;
5d9310c4 4086 static_tracepoint_marker marker;
0fb4aa4b
PA
4087
4088 /* Ask for a first packet of static tracepoint marker
4089 definition. */
4090 putpkt ("qTfSTM");
8d64371b
TT
4091 getpkt (&rs->buf, 0);
4092 p = rs->buf.data ();
0fb4aa4b
PA
4093 if (*p == 'E')
4094 error (_("Remote failure reply: %s"), p);
4095
0fb4aa4b
PA
4096 while (*p++ == 'm')
4097 {
0fb4aa4b
PA
4098 do
4099 {
5d9310c4 4100 parse_static_tracepoint_marker_definition (p, &p, &marker);
0fb4aa4b 4101
5d9310c4
SM
4102 if (strid == NULL || marker.str_id == strid)
4103 markers.push_back (std::move (marker));
0fb4aa4b
PA
4104 }
4105 while (*p++ == ','); /* comma-separated list */
4106 /* Ask for another packet of static tracepoint definition. */
4107 putpkt ("qTsSTM");
8d64371b
TT
4108 getpkt (&rs->buf, 0);
4109 p = rs->buf.data ();
0fb4aa4b
PA
4110 }
4111
0fb4aa4b
PA
4112 return markers;
4113}
4114
4115\f
10760264
JB
4116/* Implement the to_get_ada_task_ptid function for the remote targets. */
4117
f6ac5f3d
PA
4118ptid_t
4119remote_target::get_ada_task_ptid (long lwp, long thread)
10760264 4120{
e99b03dc 4121 return ptid_t (inferior_ptid.pid (), lwp, 0);
10760264
JB
4122}
4123\f
4124
24b06219 4125/* Restart the remote side; this is an extended protocol operation. */
c906108c 4126
6b8edb51
PA
4127void
4128remote_target::extended_remote_restart ()
c906108c 4129{
d01949b6 4130 struct remote_state *rs = get_remote_state ();
c906108c
SS
4131
4132 /* Send the restart command; for reasons I don't understand the
4133 remote side really expects a number after the "R". */
8d64371b 4134 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
6d820c5c 4135 putpkt (rs->buf);
c906108c 4136
ad9a8f3f 4137 remote_fileio_reset ();
c906108c
SS
4138}
4139\f
4140/* Clean up connection to a remote debugger. */
4141
f6ac5f3d
PA
4142void
4143remote_target::close ()
c906108c 4144{
048094ac 4145 /* Make sure we leave stdin registered in the event loop. */
f6ac5f3d 4146 terminal_ours ();
ce5ce7ed 4147
6b8edb51
PA
4148 trace_reset_local_state ();
4149
4150 delete this;
4151}
4152
4153remote_target::~remote_target ()
4154{
4155 struct remote_state *rs = get_remote_state ();
4156
4157 /* Check for NULL because we may get here with a partially
4158 constructed target/connection. */
4159 if (rs->remote_desc == nullptr)
4160 return;
4161
4162 serial_close (rs->remote_desc);
4163
4164 /* We are destroying the remote target, so we should discard
f48ff2a7 4165 everything of this target. */
6b8edb51 4166 discard_pending_stop_replies_in_queue ();
74531fed 4167
6b8edb51
PA
4168 if (rs->remote_async_inferior_event_token)
4169 delete_async_event_handler (&rs->remote_async_inferior_event_token);
722247f1 4170
97dfbadd 4171 delete rs->notif_state;
c906108c
SS
4172}
4173
23860348 4174/* Query the remote side for the text, data and bss offsets. */
c906108c 4175
6b8edb51
PA
4176void
4177remote_target::get_offsets ()
c906108c 4178{
d01949b6 4179 struct remote_state *rs = get_remote_state ();
2e9f7625 4180 char *buf;
085dd6e6 4181 char *ptr;
31d99776
DJ
4182 int lose, num_segments = 0, do_sections, do_segments;
4183 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
31d99776 4184
a42d7dd8 4185 if (current_program_space->symfile_object_file == NULL)
31d99776 4186 return;
c906108c
SS
4187
4188 putpkt ("qOffsets");
8d64371b
TT
4189 getpkt (&rs->buf, 0);
4190 buf = rs->buf.data ();
c906108c
SS
4191
4192 if (buf[0] == '\000')
4193 return; /* Return silently. Stub doesn't support
23860348 4194 this command. */
c906108c
SS
4195 if (buf[0] == 'E')
4196 {
8a3fe4f8 4197 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
4198 return;
4199 }
4200
4201 /* Pick up each field in turn. This used to be done with scanf, but
4202 scanf will make trouble if CORE_ADDR size doesn't match
4203 conversion directives correctly. The following code will work
4204 with any size of CORE_ADDR. */
4205 text_addr = data_addr = bss_addr = 0;
4206 ptr = buf;
4207 lose = 0;
4208
61012eef 4209 if (startswith (ptr, "Text="))
c906108c
SS
4210 {
4211 ptr += 5;
4212 /* Don't use strtol, could lose on big values. */
4213 while (*ptr && *ptr != ';')
4214 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 4215
61012eef 4216 if (startswith (ptr, ";Data="))
31d99776
DJ
4217 {
4218 ptr += 6;
4219 while (*ptr && *ptr != ';')
4220 data_addr = (data_addr << 4) + fromhex (*ptr++);
4221 }
4222 else
4223 lose = 1;
4224
61012eef 4225 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
4226 {
4227 ptr += 5;
4228 while (*ptr && *ptr != ';')
4229 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 4230
31d99776
DJ
4231 if (bss_addr != data_addr)
4232 warning (_("Target reported unsupported offsets: %s"), buf);
4233 }
4234 else
4235 lose = 1;
4236 }
61012eef 4237 else if (startswith (ptr, "TextSeg="))
c906108c 4238 {
31d99776
DJ
4239 ptr += 8;
4240 /* Don't use strtol, could lose on big values. */
c906108c 4241 while (*ptr && *ptr != ';')
31d99776
DJ
4242 text_addr = (text_addr << 4) + fromhex (*ptr++);
4243 num_segments = 1;
4244
61012eef 4245 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
4246 {
4247 ptr += 9;
4248 while (*ptr && *ptr != ';')
4249 data_addr = (data_addr << 4) + fromhex (*ptr++);
4250 num_segments++;
4251 }
c906108c
SS
4252 }
4253 else
4254 lose = 1;
4255
4256 if (lose)
8a3fe4f8 4257 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
4258 else if (*ptr != '\0')
4259 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 4260
a42d7dd8
TT
4261 objfile *objf = current_program_space->symfile_object_file;
4262 section_offsets offs = objf->section_offsets;
c906108c 4263
a42d7dd8 4264 symfile_segment_data_up data = get_symfile_segment_data (objf->obfd);
31d99776
DJ
4265 do_segments = (data != NULL);
4266 do_sections = num_segments == 0;
c906108c 4267
28c32713 4268 if (num_segments > 0)
31d99776 4269 {
31d99776
DJ
4270 segments[0] = text_addr;
4271 segments[1] = data_addr;
4272 }
28c32713
JB
4273 /* If we have two segments, we can still try to relocate everything
4274 by assuming that the .text and .data offsets apply to the whole
4275 text and data segments. Convert the offsets given in the packet
4276 to base addresses for symfile_map_offsets_to_segments. */
68b888ff 4277 else if (data != nullptr && data->segments.size () == 2)
28c32713 4278 {
68b888ff
SM
4279 segments[0] = data->segments[0].base + text_addr;
4280 segments[1] = data->segments[1].base + data_addr;
28c32713
JB
4281 num_segments = 2;
4282 }
8d385431
DJ
4283 /* If the object file has only one segment, assume that it is text
4284 rather than data; main programs with no writable data are rare,
4285 but programs with no code are useless. Of course the code might
4286 have ended up in the data segment... to detect that we would need
4287 the permissions here. */
68b888ff 4288 else if (data && data->segments.size () == 1)
8d385431 4289 {
68b888ff 4290 segments[0] = data->segments[0].base + text_addr;
8d385431
DJ
4291 num_segments = 1;
4292 }
28c32713
JB
4293 /* There's no way to relocate by segment. */
4294 else
4295 do_segments = 0;
31d99776
DJ
4296
4297 if (do_segments)
4298 {
a42d7dd8 4299 int ret = symfile_map_offsets_to_segments (objf->obfd,
62982abd
SM
4300 data.get (), offs,
4301 num_segments, segments);
31d99776
DJ
4302
4303 if (ret == 0 && !do_sections)
3e43a32a
MS
4304 error (_("Can not handle qOffsets TextSeg "
4305 "response with this symbol file"));
31d99776
DJ
4306
4307 if (ret > 0)
4308 do_sections = 0;
4309 }
c906108c 4310
31d99776
DJ
4311 if (do_sections)
4312 {
a42d7dd8 4313 offs[SECT_OFF_TEXT (objf)] = text_addr;
31d99776 4314
3e43a32a
MS
4315 /* This is a temporary kludge to force data and bss to use the
4316 same offsets because that's what nlmconv does now. The real
4317 solution requires changes to the stub and remote.c that I
4318 don't have time to do right now. */
31d99776 4319
a42d7dd8
TT
4320 offs[SECT_OFF_DATA (objf)] = data_addr;
4321 offs[SECT_OFF_BSS (objf)] = data_addr;
31d99776 4322 }
c906108c 4323
a42d7dd8 4324 objfile_relocate (objf, offs);
c906108c
SS
4325}
4326
9a7071a8 4327/* Send interrupt_sequence to remote target. */
6b8edb51
PA
4328
4329void
4330remote_target::send_interrupt_sequence ()
9a7071a8 4331{
5d93a237
TT
4332 struct remote_state *rs = get_remote_state ();
4333
9a7071a8 4334 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 4335 remote_serial_write ("\x03", 1);
9a7071a8 4336 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 4337 serial_send_break (rs->remote_desc);
9a7071a8
JB
4338 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4339 {
5d93a237 4340 serial_send_break (rs->remote_desc);
c33e31fd 4341 remote_serial_write ("g", 1);
9a7071a8
JB
4342 }
4343 else
4344 internal_error (__FILE__, __LINE__,
4345 _("Invalid value for interrupt_sequence_mode: %s."),
4346 interrupt_sequence_mode);
4347}
4348
3405876a
PA
4349
4350/* If STOP_REPLY is a T stop reply, look for the "thread" register,
4351 and extract the PTID. Returns NULL_PTID if not found. */
4352
4353static ptid_t
e3b2741b 4354stop_reply_extract_thread (const char *stop_reply)
3405876a
PA
4355{
4356 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4357 {
256642e8 4358 const char *p;
3405876a
PA
4359
4360 /* Txx r:val ; r:val (...) */
4361 p = &stop_reply[3];
4362
4363 /* Look for "register" named "thread". */
4364 while (*p != '\0')
4365 {
256642e8 4366 const char *p1;
3405876a
PA
4367
4368 p1 = strchr (p, ':');
4369 if (p1 == NULL)
4370 return null_ptid;
4371
4372 if (strncmp (p, "thread", p1 - p) == 0)
4373 return read_ptid (++p1, &p);
4374
4375 p1 = strchr (p, ';');
4376 if (p1 == NULL)
4377 return null_ptid;
4378 p1++;
4379
4380 p = p1;
4381 }
4382 }
4383
4384 return null_ptid;
4385}
4386
b7ea362b
PA
4387/* Determine the remote side's current thread. If we have a stop
4388 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4389 "thread" register we can extract the current thread from. If not,
4390 ask the remote which is the current thread with qC. The former
4391 method avoids a roundtrip. */
4392
6b8edb51 4393ptid_t
e3b2741b 4394remote_target::get_current_thread (const char *wait_status)
b7ea362b 4395{
6a49a997 4396 ptid_t ptid = null_ptid;
b7ea362b
PA
4397
4398 /* Note we don't use remote_parse_stop_reply as that makes use of
4399 the target architecture, which we haven't yet fully determined at
4400 this point. */
4401 if (wait_status != NULL)
4402 ptid = stop_reply_extract_thread (wait_status);
d7e15655 4403 if (ptid == null_ptid)
b7ea362b
PA
4404 ptid = remote_current_thread (inferior_ptid);
4405
4406 return ptid;
4407}
4408
49c62f2e
PA
4409/* Query the remote target for which is the current thread/process,
4410 add it to our tables, and update INFERIOR_PTID. The caller is
4411 responsible for setting the state such that the remote end is ready
3405876a
PA
4412 to return the current thread.
4413
4414 This function is called after handling the '?' or 'vRun' packets,
4415 whose response is a stop reply from which we can also try
4416 extracting the thread. If the target doesn't support the explicit
4417 qC query, we infer the current thread from that stop reply, passed
4418 in in WAIT_STATUS, which may be NULL. */
49c62f2e 4419
6b8edb51 4420void
e3b2741b 4421remote_target::add_current_inferior_and_thread (const char *wait_status)
49c62f2e
PA
4422{
4423 struct remote_state *rs = get_remote_state ();
9ab8741a 4424 bool fake_pid_p = false;
49c62f2e 4425
0ac55310 4426 switch_to_no_thread ();
49c62f2e 4427
0ac55310
PA
4428 /* Now, if we have thread information, update the current thread's
4429 ptid. */
87215ad1 4430 ptid_t curr_ptid = get_current_thread (wait_status);
3405876a 4431
87215ad1 4432 if (curr_ptid != null_ptid)
49c62f2e
PA
4433 {
4434 if (!remote_multi_process_p (rs))
9ab8741a 4435 fake_pid_p = true;
49c62f2e
PA
4436 }
4437 else
4438 {
4439 /* Without this, some commands which require an active target
4440 (such as kill) won't work. This variable serves (at least)
4441 double duty as both the pid of the target process (if it has
4442 such), and as a flag indicating that a target is active. */
87215ad1 4443 curr_ptid = magic_null_ptid;
9ab8741a 4444 fake_pid_p = true;
49c62f2e
PA
4445 }
4446
e99b03dc 4447 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
49c62f2e 4448
87215ad1
SDJ
4449 /* Add the main thread and switch to it. Don't try reading
4450 registers yet, since we haven't fetched the target description
4451 yet. */
5b6d1e4f 4452 thread_info *tp = add_thread_silent (this, curr_ptid);
87215ad1 4453 switch_to_thread_no_regs (tp);
49c62f2e
PA
4454}
4455
6efcd9a8
PA
4456/* Print info about a thread that was found already stopped on
4457 connection. */
4458
4459static void
4460print_one_stopped_thread (struct thread_info *thread)
4461{
4462 struct target_waitstatus *ws = &thread->suspend.waitstatus;
4463
00431a78 4464 switch_to_thread (thread);
f2ffa92b 4465 thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
6efcd9a8
PA
4466 set_current_sal_from_frame (get_current_frame ());
4467
4468 thread->suspend.waitstatus_pending_p = 0;
4469
4470 if (ws->kind == TARGET_WAITKIND_STOPPED)
4471 {
4472 enum gdb_signal sig = ws->value.sig;
4473
4474 if (signal_print_state (sig))
76727919 4475 gdb::observers::signal_received.notify (sig);
6efcd9a8 4476 }
76727919 4477 gdb::observers::normal_stop.notify (NULL, 1);
6efcd9a8
PA
4478}
4479
221e1a37
PA
4480/* Process all initial stop replies the remote side sent in response
4481 to the ? packet. These indicate threads that were already stopped
4482 on initial connection. We mark these threads as stopped and print
4483 their current frame before giving the user the prompt. */
4484
6b8edb51
PA
4485void
4486remote_target::process_initial_stop_replies (int from_tty)
221e1a37
PA
4487{
4488 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
4489 struct thread_info *selected = NULL;
4490 struct thread_info *lowest_stopped = NULL;
4491 struct thread_info *first = NULL;
221e1a37
PA
4492
4493 /* Consume the initial pending events. */
4494 while (pending_stop_replies-- > 0)
4495 {
4496 ptid_t waiton_ptid = minus_one_ptid;
4497 ptid_t event_ptid;
4498 struct target_waitstatus ws;
4499 int ignore_event = 0;
4500
4501 memset (&ws, 0, sizeof (ws));
4502 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4503 if (remote_debug)
4504 print_target_wait_results (waiton_ptid, event_ptid, &ws);
4505
4506 switch (ws.kind)
4507 {
4508 case TARGET_WAITKIND_IGNORE:
4509 case TARGET_WAITKIND_NO_RESUMED:
4510 case TARGET_WAITKIND_SIGNALLED:
4511 case TARGET_WAITKIND_EXITED:
4512 /* We shouldn't see these, but if we do, just ignore. */
4513 if (remote_debug)
4514 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
4515 ignore_event = 1;
4516 break;
4517
4518 case TARGET_WAITKIND_EXECD:
4519 xfree (ws.value.execd_pathname);
4520 break;
4521 default:
4522 break;
4523 }
4524
4525 if (ignore_event)
4526 continue;
4527
5b6d1e4f 4528 thread_info *evthread = find_thread_ptid (this, event_ptid);
221e1a37
PA
4529
4530 if (ws.kind == TARGET_WAITKIND_STOPPED)
4531 {
4532 enum gdb_signal sig = ws.value.sig;
4533
4534 /* Stubs traditionally report SIGTRAP as initial signal,
4535 instead of signal 0. Suppress it. */
4536 if (sig == GDB_SIGNAL_TRAP)
4537 sig = GDB_SIGNAL_0;
b926417a 4538 evthread->suspend.stop_signal = sig;
6efcd9a8
PA
4539 ws.value.sig = sig;
4540 }
221e1a37 4541
b926417a 4542 evthread->suspend.waitstatus = ws;
6efcd9a8
PA
4543
4544 if (ws.kind != TARGET_WAITKIND_STOPPED
4545 || ws.value.sig != GDB_SIGNAL_0)
b926417a 4546 evthread->suspend.waitstatus_pending_p = 1;
6efcd9a8 4547
719546c4
SM
4548 set_executing (this, event_ptid, false);
4549 set_running (this, event_ptid, false);
c9d22089 4550 get_remote_thread_info (evthread)->set_not_resumed ();
6efcd9a8
PA
4551 }
4552
4553 /* "Notice" the new inferiors before anything related to
4554 registers/memory. */
5b6d1e4f 4555 for (inferior *inf : all_non_exited_inferiors (this))
6efcd9a8 4556 {
6efcd9a8
PA
4557 inf->needs_setup = 1;
4558
4559 if (non_stop)
4560 {
08036331 4561 thread_info *thread = any_live_thread_of_inferior (inf);
00431a78 4562 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
6efcd9a8
PA
4563 from_tty);
4564 }
4565 }
4566
4567 /* If all-stop on top of non-stop, pause all threads. Note this
4568 records the threads' stop pc, so must be done after "noticing"
4569 the inferiors. */
4570 if (!non_stop)
4571 {
4572 stop_all_threads ();
4573
4574 /* If all threads of an inferior were already stopped, we
4575 haven't setup the inferior yet. */
5b6d1e4f 4576 for (inferior *inf : all_non_exited_inferiors (this))
6efcd9a8 4577 {
6efcd9a8
PA
4578 if (inf->needs_setup)
4579 {
08036331 4580 thread_info *thread = any_live_thread_of_inferior (inf);
6efcd9a8
PA
4581 switch_to_thread_no_regs (thread);
4582 setup_inferior (0);
4583 }
4584 }
221e1a37 4585 }
6efcd9a8
PA
4586
4587 /* Now go over all threads that are stopped, and print their current
4588 frame. If all-stop, then if there's a signalled thread, pick
4589 that as current. */
5b6d1e4f 4590 for (thread_info *thread : all_non_exited_threads (this))
6efcd9a8 4591 {
6efcd9a8
PA
4592 if (first == NULL)
4593 first = thread;
4594
4595 if (!non_stop)
00431a78 4596 thread->set_running (false);
6efcd9a8
PA
4597 else if (thread->state != THREAD_STOPPED)
4598 continue;
4599
6efcd9a8
PA
4600 if (selected == NULL
4601 && thread->suspend.waitstatus_pending_p)
4602 selected = thread;
4603
5d5658a1
PA
4604 if (lowest_stopped == NULL
4605 || thread->inf->num < lowest_stopped->inf->num
4606 || thread->per_inf_num < lowest_stopped->per_inf_num)
6efcd9a8
PA
4607 lowest_stopped = thread;
4608
4609 if (non_stop)
4610 print_one_stopped_thread (thread);
4611 }
4612
4613 /* In all-stop, we only print the status of one thread, and leave
4614 others with their status pending. */
4615 if (!non_stop)
4616 {
08036331 4617 thread_info *thread = selected;
6efcd9a8
PA
4618 if (thread == NULL)
4619 thread = lowest_stopped;
4620 if (thread == NULL)
4621 thread = first;
4622
4623 print_one_stopped_thread (thread);
4624 }
4625
4626 /* For "info program". */
08036331 4627 thread_info *thread = inferior_thread ();
6efcd9a8 4628 if (thread->state == THREAD_STOPPED)
5b6d1e4f 4629 set_last_target_status (this, inferior_ptid, thread->suspend.waitstatus);
221e1a37
PA
4630}
4631
048094ac
PA
4632/* Start the remote connection and sync state. */
4633
f6ac5f3d
PA
4634void
4635remote_target::start_remote (int from_tty, int extended_p)
c906108c 4636{
c8d104ad
PA
4637 struct remote_state *rs = get_remote_state ();
4638 struct packet_config *noack_config;
8621d6a9 4639
048094ac
PA
4640 /* Signal other parts that we're going through the initial setup,
4641 and so things may not be stable yet. E.g., we don't try to
4642 install tracepoints until we've relocated symbols. Also, a
4643 Ctrl-C before we're connected and synced up can't interrupt the
4644 target. Instead, it offers to drop the (potentially wedged)
4645 connection. */
4646 rs->starting_up = 1;
4647
522002f9 4648 QUIT;
c906108c 4649
9a7071a8
JB
4650 if (interrupt_on_connect)
4651 send_interrupt_sequence ();
4652
57e12211 4653 /* Ack any packet which the remote side has already sent. */
048094ac 4654 remote_serial_write ("+", 1);
1e51243a 4655
c8d104ad
PA
4656 /* The first packet we send to the target is the optional "supported
4657 packets" request. If the target can answer this, it will tell us
4658 which later probes to skip. */
4659 remote_query_supported ();
4660
d914c394 4661 /* If the stub wants to get a QAllow, compose one and send it. */
4082afcc 4662 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
f6ac5f3d 4663 set_permissions ();
d914c394 4664
57809e5e
JK
4665 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4666 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4667 as a reply to known packet. For packet "vFile:setfs:" it is an
4668 invalid reply and GDB would return error in
4669 remote_hostio_set_filesystem, making remote files access impossible.
4670 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4671 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4672 {
4673 const char v_mustreplyempty[] = "vMustReplyEmpty";
4674
4675 putpkt (v_mustreplyempty);
8d64371b
TT
4676 getpkt (&rs->buf, 0);
4677 if (strcmp (rs->buf.data (), "OK") == 0)
57809e5e 4678 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
8d64371b 4679 else if (strcmp (rs->buf.data (), "") != 0)
57809e5e 4680 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
8d64371b 4681 rs->buf.data ());
57809e5e
JK
4682 }
4683
c8d104ad
PA
4684 /* Next, we possibly activate noack mode.
4685
4686 If the QStartNoAckMode packet configuration is set to AUTO,
4687 enable noack mode if the stub reported a wish for it with
4688 qSupported.
4689
4690 If set to TRUE, then enable noack mode even if the stub didn't
4691 report it in qSupported. If the stub doesn't reply OK, the
4692 session ends with an error.
4693
4694 If FALSE, then don't activate noack mode, regardless of what the
4695 stub claimed should be the default with qSupported. */
4696
4697 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4082afcc 4698 if (packet_config_support (noack_config) != PACKET_DISABLE)
c8d104ad
PA
4699 {
4700 putpkt ("QStartNoAckMode");
8d64371b 4701 getpkt (&rs->buf, 0);
c8d104ad
PA
4702 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4703 rs->noack_mode = 1;
4704 }
4705
04bd08de 4706 if (extended_p)
5fe04517
PA
4707 {
4708 /* Tell the remote that we are using the extended protocol. */
4709 putpkt ("!");
8d64371b 4710 getpkt (&rs->buf, 0);
5fe04517
PA
4711 }
4712
9b224c5e
PA
4713 /* Let the target know which signals it is allowed to pass down to
4714 the program. */
4715 update_signals_program_target ();
4716
d962ef82
DJ
4717 /* Next, if the target can specify a description, read it. We do
4718 this before anything involving memory or registers. */
4719 target_find_description ();
4720
6c95b8df
PA
4721 /* Next, now that we know something about the target, update the
4722 address spaces in the program spaces. */
4723 update_address_spaces ();
4724
50c71eaf
PA
4725 /* On OSs where the list of libraries is global to all
4726 processes, we fetch them early. */
f5656ead 4727 if (gdbarch_has_global_solist (target_gdbarch ()))
e696b3ad 4728 solib_add (NULL, from_tty, auto_solib_add);
50c71eaf 4729
6efcd9a8 4730 if (target_is_non_stop_p ())
74531fed 4731 {
4082afcc 4732 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3e43a32a
MS
4733 error (_("Non-stop mode requested, but remote "
4734 "does not support non-stop"));
74531fed
PA
4735
4736 putpkt ("QNonStop:1");
8d64371b 4737 getpkt (&rs->buf, 0);
74531fed 4738
8d64371b
TT
4739 if (strcmp (rs->buf.data (), "OK") != 0)
4740 error (_("Remote refused setting non-stop mode with: %s"),
4741 rs->buf.data ());
74531fed
PA
4742
4743 /* Find about threads and processes the stub is already
4744 controlling. We default to adding them in the running state.
4745 The '?' query below will then tell us about which threads are
4746 stopped. */
f6ac5f3d 4747 this->update_thread_list ();
74531fed 4748 }
4082afcc 4749 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4750 {
4751 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4752 Request it explicitly. */
74531fed 4753 putpkt ("QNonStop:0");
8d64371b 4754 getpkt (&rs->buf, 0);
74531fed 4755
8d64371b
TT
4756 if (strcmp (rs->buf.data (), "OK") != 0)
4757 error (_("Remote refused setting all-stop mode with: %s"),
4758 rs->buf.data ());
74531fed
PA
4759 }
4760
a0743c90
YQ
4761 /* Upload TSVs regardless of whether the target is running or not. The
4762 remote stub, such as GDBserver, may have some predefined or builtin
4763 TSVs, even if the target is not running. */
f6ac5f3d 4764 if (get_trace_status (current_trace_status ()) != -1)
a0743c90
YQ
4765 {
4766 struct uploaded_tsv *uploaded_tsvs = NULL;
4767
f6ac5f3d 4768 upload_trace_state_variables (&uploaded_tsvs);
a0743c90
YQ
4769 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4770 }
4771
2d717e4f
DJ
4772 /* Check whether the target is running now. */
4773 putpkt ("?");
8d64371b 4774 getpkt (&rs->buf, 0);
2d717e4f 4775
6efcd9a8 4776 if (!target_is_non_stop_p ())
2d717e4f 4777 {
b5c8f22d
SM
4778 char *wait_status = NULL;
4779
74531fed 4780 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4781 {
04bd08de 4782 if (!extended_p)
74531fed 4783 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4784
4785 /* We're connected, but not running. Drop out before we
4786 call start_remote. */
e278ad5b 4787 rs->starting_up = 0;
c35b1492 4788 return;
2d717e4f
DJ
4789 }
4790 else
74531fed 4791 {
74531fed 4792 /* Save the reply for later. */
8d64371b
TT
4793 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4794 strcpy (wait_status, rs->buf.data ());
74531fed
PA
4795 }
4796
b7ea362b 4797 /* Fetch thread list. */
e8032dde 4798 target_update_thread_list ();
b7ea362b 4799
74531fed
PA
4800 /* Let the stub know that we want it to return the thread. */
4801 set_continue_thread (minus_one_ptid);
4802
5b6d1e4f 4803 if (thread_count (this) == 0)
b7ea362b
PA
4804 {
4805 /* Target has no concept of threads at all. GDB treats
4806 non-threaded target as single-threaded; add a main
4807 thread. */
4808 add_current_inferior_and_thread (wait_status);
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. */
c9f35b34
KB
4823
4824 if (remote_debug)
4825 fprintf_unfiltered (gdb_stdlog,
dda83cd7 4826 "warning: couldn't determine remote "
c9f35b34
KB
4827 "current thread; picking first in list.\n");
4828
5b6d1e4f
PA
4829 for (thread_info *tp : all_non_exited_threads (this,
4830 minus_one_ptid))
75c6c844
PA
4831 {
4832 switch_to_thread (tp);
4833 break;
4834 }
b7ea362b 4835 }
75c6c844 4836 else
5b6d1e4f 4837 switch_to_thread (find_thread_ptid (this, curr_thread));
b7ea362b 4838 }
74531fed 4839
6e586cc5
YQ
4840 /* init_wait_for_inferior should be called before get_offsets in order
4841 to manage `inserted' flag in bp loc in a correct state.
4842 breakpoint_init_inferior, called from init_wait_for_inferior, set
4843 `inserted' flag to 0, while before breakpoint_re_set, called from
4844 start_remote, set `inserted' flag to 1. In the initialization of
4845 inferior, breakpoint_init_inferior should be called first, and then
4846 breakpoint_re_set can be called. If this order is broken, state of
4847 `inserted' flag is wrong, and cause some problems on breakpoint
4848 manipulation. */
4849 init_wait_for_inferior ();
4850
74531fed
PA
4851 get_offsets (); /* Get text, data & bss offsets. */
4852
d962ef82
DJ
4853 /* If we could not find a description using qXfer, and we know
4854 how to do it some other way, try again. This is not
4855 supported for non-stop; it could be, but it is tricky if
4856 there are no stopped threads when we connect. */
f6ac5f3d 4857 if (remote_read_description_p (this)
f5656ead 4858 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4859 {
4860 target_clear_description ();
4861 target_find_description ();
4862 }
4863
74531fed
PA
4864 /* Use the previously fetched status. */
4865 gdb_assert (wait_status != NULL);
8d64371b 4866 strcpy (rs->buf.data (), wait_status);
74531fed
PA
4867 rs->cached_wait_status = 1;
4868
f6ac5f3d 4869 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4870 }
4871 else
4872 {
68c97600
PA
4873 /* Clear WFI global state. Do this before finding about new
4874 threads and inferiors, and setting the current inferior.
4875 Otherwise we would clear the proceed status of the current
4876 inferior when we want its stop_soon state to be preserved
4877 (see notice_new_inferior). */
4878 init_wait_for_inferior ();
4879
74531fed
PA
4880 /* In non-stop, we will either get an "OK", meaning that there
4881 are no stopped threads at this time; or, a regular stop
4882 reply. In the latter case, there may be more than one thread
4883 stopped --- we pull them all out using the vStopped
4884 mechanism. */
8d64371b 4885 if (strcmp (rs->buf.data (), "OK") != 0)
74531fed 4886 {
722247f1 4887 struct notif_client *notif = &notif_client_stop;
2d717e4f 4888
722247f1
YQ
4889 /* remote_notif_get_pending_replies acks this one, and gets
4890 the rest out. */
f48ff2a7 4891 rs->notif_state->pending_event[notif_client_stop.id]
8d64371b 4892 = remote_notif_parse (this, notif, rs->buf.data ());
722247f1 4893 remote_notif_get_pending_events (notif);
74531fed 4894 }
2d717e4f 4895
5b6d1e4f 4896 if (thread_count (this) == 0)
74531fed 4897 {
04bd08de 4898 if (!extended_p)
74531fed 4899 error (_("The target is not running (try extended-remote?)"));
82f73884 4900
c35b1492
PA
4901 /* We're connected, but not running. Drop out before we
4902 call start_remote. */
e278ad5b 4903 rs->starting_up = 0;
c35b1492
PA
4904 return;
4905 }
74531fed 4906
2455069d 4907 /* Report all signals during attach/startup. */
adc6a863 4908 pass_signals ({});
221e1a37
PA
4909
4910 /* If there are already stopped threads, mark them stopped and
4911 report their stops before giving the prompt to the user. */
6efcd9a8 4912 process_initial_stop_replies (from_tty);
221e1a37
PA
4913
4914 if (target_can_async_p ())
4915 target_async (1);
74531fed 4916 }
c8d104ad 4917
c8d104ad 4918 /* If we connected to a live target, do some additional setup. */
55f6301a 4919 if (target_has_execution ())
c8d104ad 4920 {
a42d7dd8
TT
4921 /* No use without a symbol-file. */
4922 if (current_program_space->symfile_object_file)
36d25514 4923 remote_check_symbols ();
c8d104ad 4924 }
50c71eaf 4925
d5551862
SS
4926 /* Possibly the target has been engaged in a trace run started
4927 previously; find out where things are at. */
f6ac5f3d 4928 if (get_trace_status (current_trace_status ()) != -1)
d5551862 4929 {
00bf0b85 4930 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4931
00bf0b85
SS
4932 if (current_trace_status ()->running)
4933 printf_filtered (_("Trace is already running on the target.\n"));
4934
f6ac5f3d 4935 upload_tracepoints (&uploaded_tps);
00bf0b85
SS
4936
4937 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4938 }
4939
c0272db5
TW
4940 /* Possibly the target has been engaged in a btrace record started
4941 previously; find out where things are at. */
4942 remote_btrace_maybe_reopen ();
4943
1e51243a
PA
4944 /* The thread and inferior lists are now synchronized with the
4945 target, our symbols have been relocated, and we're merged the
4946 target's tracepoints with ours. We're done with basic start
4947 up. */
4948 rs->starting_up = 0;
4949
a25a5a45
PA
4950 /* Maybe breakpoints are global and need to be inserted now. */
4951 if (breakpoints_should_be_inserted_now ())
50c71eaf 4952 insert_breakpoints ();
c906108c
SS
4953}
4954
121b3efd
PA
4955const char *
4956remote_target::connection_string ()
4957{
4958 remote_state *rs = get_remote_state ();
4959
4960 if (rs->remote_desc->name != NULL)
4961 return rs->remote_desc->name;
4962 else
4963 return NULL;
4964}
4965
c906108c
SS
4966/* Open a connection to a remote debugger.
4967 NAME is the filename used for communication. */
4968
f6ac5f3d
PA
4969void
4970remote_target::open (const char *name, int from_tty)
c906108c 4971{
f6ac5f3d 4972 open_1 (name, from_tty, 0);
43ff13b4
JM
4973}
4974
c906108c
SS
4975/* Open a connection to a remote debugger using the extended
4976 remote gdb protocol. NAME is the filename used for communication. */
4977
f6ac5f3d
PA
4978void
4979extended_remote_target::open (const char *name, int from_tty)
c906108c 4980{
f6ac5f3d 4981 open_1 (name, from_tty, 1 /*extended_p */);
43ff13b4
JM
4982}
4983
ca4f7f8b
PA
4984/* Reset all packets back to "unknown support". Called when opening a
4985 new connection to a remote target. */
c906108c 4986
d471ea57 4987static void
ca4f7f8b 4988reset_all_packet_configs_support (void)
d471ea57
AC
4989{
4990 int i;
a744cf53 4991
444abaca 4992 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4993 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4994}
4995
ca4f7f8b
PA
4996/* Initialize all packet configs. */
4997
4998static void
4999init_all_packet_configs (void)
5000{
5001 int i;
5002
5003 for (i = 0; i < PACKET_MAX; i++)
5004 {
5005 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
5006 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
5007 }
5008}
5009
23860348 5010/* Symbol look-up. */
dc8acb97 5011
6b8edb51
PA
5012void
5013remote_target::remote_check_symbols ()
dc8acb97 5014{
8d64371b 5015 char *tmp;
dc8acb97
MS
5016 int end;
5017
63154eca
PA
5018 /* The remote side has no concept of inferiors that aren't running
5019 yet, it only knows about running processes. If we're connected
5020 but our current inferior is not running, we should not invite the
5021 remote target to request symbol lookups related to its
5022 (unrelated) current process. */
55f6301a 5023 if (!target_has_execution ())
63154eca
PA
5024 return;
5025
4082afcc 5026 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
dc8acb97
MS
5027 return;
5028
63154eca
PA
5029 /* Make sure the remote is pointing at the right process. Note
5030 there's no way to select "no process". */
3c9c4b83
PA
5031 set_general_process ();
5032
6d820c5c
DJ
5033 /* Allocate a message buffer. We can't reuse the input buffer in RS,
5034 because we need both at the same time. */
66644cd3 5035 gdb::char_vector msg (get_remote_packet_size ());
8d64371b 5036 gdb::char_vector reply (get_remote_packet_size ());
6d820c5c 5037
23860348 5038 /* Invite target to request symbol lookups. */
dc8acb97
MS
5039
5040 putpkt ("qSymbol::");
8d64371b 5041 getpkt (&reply, 0);
28170b88 5042 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 5043
8d64371b 5044 while (startswith (reply.data (), "qSymbol:"))
dc8acb97 5045 {
77e371c0
TT
5046 struct bound_minimal_symbol sym;
5047
dc8acb97 5048 tmp = &reply[8];
66644cd3
AB
5049 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
5050 strlen (tmp) / 2);
dc8acb97 5051 msg[end] = '\0';
66644cd3 5052 sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
3b7344d5 5053 if (sym.minsym == NULL)
66644cd3
AB
5054 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
5055 &reply[8]);
dc8acb97 5056 else
2bbe3cc1 5057 {
f5656ead 5058 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 5059 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
5060
5061 /* If this is a function address, return the start of code
5062 instead of any data function descriptor. */
f5656ead 5063 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1 5064 sym_addr,
8b88a78e 5065 current_top_target ());
2bbe3cc1 5066
66644cd3 5067 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 5068 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1 5069 }
66644cd3
AB
5070
5071 putpkt (msg.data ());
8d64371b 5072 getpkt (&reply, 0);
dc8acb97
MS
5073 }
5074}
5075
9db8d71f 5076static struct serial *
baa336ce 5077remote_serial_open (const char *name)
9db8d71f
DJ
5078{
5079 static int udp_warning = 0;
5080
5081 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
5082 of in ser-tcp.c, because it is the remote protocol assuming that the
5083 serial connection is reliable and not the serial connection promising
5084 to be. */
61012eef 5085 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 5086 {
3e43a32a
MS
5087 warning (_("The remote protocol may be unreliable over UDP.\n"
5088 "Some events may be lost, rendering further debugging "
5089 "impossible."));
9db8d71f
DJ
5090 udp_warning = 1;
5091 }
5092
5093 return serial_open (name);
5094}
5095
d914c394
SS
5096/* Inform the target of our permission settings. The permission flags
5097 work without this, but if the target knows the settings, it can do
5098 a couple things. First, it can add its own check, to catch cases
5099 that somehow manage to get by the permissions checks in target
5100 methods. Second, if the target is wired to disallow particular
5101 settings (for instance, a system in the field that is not set up to
5102 be able to stop at a breakpoint), it can object to any unavailable
5103 permissions. */
5104
5105void
f6ac5f3d 5106remote_target::set_permissions ()
d914c394
SS
5107{
5108 struct remote_state *rs = get_remote_state ();
5109
8d64371b 5110 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
bba74b36
YQ
5111 "WriteReg:%x;WriteMem:%x;"
5112 "InsertBreak:%x;InsertTrace:%x;"
5113 "InsertFastTrace:%x;Stop:%x",
5114 may_write_registers, may_write_memory,
5115 may_insert_breakpoints, may_insert_tracepoints,
5116 may_insert_fast_tracepoints, may_stop);
d914c394 5117 putpkt (rs->buf);
8d64371b 5118 getpkt (&rs->buf, 0);
d914c394
SS
5119
5120 /* If the target didn't like the packet, warn the user. Do not try
5121 to undo the user's settings, that would just be maddening. */
8d64371b
TT
5122 if (strcmp (rs->buf.data (), "OK") != 0)
5123 warning (_("Remote refused setting permissions with: %s"),
5124 rs->buf.data ());
d914c394
SS
5125}
5126
be2a5f71
DJ
5127/* This type describes each known response to the qSupported
5128 packet. */
5129struct protocol_feature
5130{
5131 /* The name of this protocol feature. */
5132 const char *name;
5133
5134 /* The default for this protocol feature. */
5135 enum packet_support default_support;
5136
5137 /* The function to call when this feature is reported, or after
5138 qSupported processing if the feature is not supported.
5139 The first argument points to this structure. The second
5140 argument indicates whether the packet requested support be
5141 enabled, disabled, or probed (or the default, if this function
5142 is being called at the end of processing and this feature was
5143 not reported). The third argument may be NULL; if not NULL, it
5144 is a NUL-terminated string taken from the packet following
5145 this feature's name and an equals sign. */
6b8edb51
PA
5146 void (*func) (remote_target *remote, const struct protocol_feature *,
5147 enum packet_support, const char *);
be2a5f71
DJ
5148
5149 /* The corresponding packet for this feature. Only used if
5150 FUNC is remote_supported_packet. */
5151 int packet;
5152};
5153
be2a5f71 5154static void
6b8edb51
PA
5155remote_supported_packet (remote_target *remote,
5156 const struct protocol_feature *feature,
be2a5f71
DJ
5157 enum packet_support support,
5158 const char *argument)
5159{
5160 if (argument)
5161 {
5162 warning (_("Remote qSupported response supplied an unexpected value for"
5163 " \"%s\"."), feature->name);
5164 return;
5165 }
5166
4082afcc 5167 remote_protocol_packets[feature->packet].support = support;
be2a5f71 5168}
be2a5f71 5169
6b8edb51
PA
5170void
5171remote_target::remote_packet_size (const protocol_feature *feature,
5172 enum packet_support support, const char *value)
be2a5f71
DJ
5173{
5174 struct remote_state *rs = get_remote_state ();
5175
5176 int packet_size;
5177 char *value_end;
5178
5179 if (support != PACKET_ENABLE)
5180 return;
5181
5182 if (value == NULL || *value == '\0')
5183 {
5184 warning (_("Remote target reported \"%s\" without a size."),
5185 feature->name);
5186 return;
5187 }
5188
5189 errno = 0;
5190 packet_size = strtol (value, &value_end, 16);
5191 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5192 {
5193 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5194 feature->name, value);
5195 return;
5196 }
5197
be2a5f71
DJ
5198 /* Record the new maximum packet size. */
5199 rs->explicit_packet_size = packet_size;
5200}
5201
cb8c24b6 5202static void
6b8edb51
PA
5203remote_packet_size (remote_target *remote, const protocol_feature *feature,
5204 enum packet_support support, const char *value)
5205{
5206 remote->remote_packet_size (feature, support, value);
5207}
5208
dc473cfb 5209static const struct protocol_feature remote_protocol_features[] = {
0876f84a 5210 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 5211 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 5212 PACKET_qXfer_auxv },
c78fa86a
GB
5213 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5214 PACKET_qXfer_exec_file },
23181151
DJ
5215 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5216 PACKET_qXfer_features },
cfa9d6d9
DJ
5217 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5218 PACKET_qXfer_libraries },
2268b414
JK
5219 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5220 PACKET_qXfer_libraries_svr4 },
ced63ec0 5221 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 5222 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 5223 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 5224 PACKET_qXfer_memory_map },
07e059b5
VP
5225 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5226 PACKET_qXfer_osdata },
dc146f7c
VP
5227 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5228 PACKET_qXfer_threads },
b3b9301e
PA
5229 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5230 PACKET_qXfer_traceframe_info },
89be2091
DJ
5231 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5232 PACKET_QPassSignals },
82075af2
JS
5233 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5234 PACKET_QCatchSyscalls },
9b224c5e
PA
5235 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5236 PACKET_QProgramSignals },
bc3b087d
SDJ
5237 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5238 PACKET_QSetWorkingDir },
aefd8b33
SDJ
5239 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5240 PACKET_QStartupWithShell },
0a2dde4a
SDJ
5241 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5242 PACKET_QEnvironmentHexEncoded },
5243 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5244 PACKET_QEnvironmentReset },
5245 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5246 PACKET_QEnvironmentUnset },
a6f3e723
SL
5247 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5248 PACKET_QStartNoAckMode },
4082afcc
PA
5249 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5250 PACKET_multiprocess_feature },
5251 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
5252 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5253 PACKET_qXfer_siginfo_read },
5254 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5255 PACKET_qXfer_siginfo_write },
4082afcc 5256 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 5257 PACKET_ConditionalTracepoints },
4082afcc 5258 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 5259 PACKET_ConditionalBreakpoints },
4082afcc 5260 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 5261 PACKET_BreakpointCommands },
4082afcc 5262 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 5263 PACKET_FastTracepoints },
4082afcc 5264 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 5265 PACKET_StaticTracepoints },
4082afcc 5266 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 5267 PACKET_InstallInTrace},
4082afcc
PA
5268 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5269 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
5270 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5271 PACKET_bc },
5272 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5273 PACKET_bs },
409873ef
SS
5274 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5275 PACKET_TracepointSource },
d914c394
SS
5276 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5277 PACKET_QAllow },
4082afcc
PA
5278 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5279 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
5280 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5281 PACKET_qXfer_fdpic },
169081d0
TG
5282 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5283 PACKET_qXfer_uib },
03583c20
UW
5284 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5285 PACKET_QDisableRandomization },
d1feda86 5286 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
5287 { "QTBuffer:size", PACKET_DISABLE,
5288 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 5289 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
5290 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5291 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 5292 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 5293 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
5294 PACKET_qXfer_btrace },
5295 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
5296 PACKET_qXfer_btrace_conf },
5297 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
5298 PACKET_Qbtrace_conf_bts_size },
5299 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 5300 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
5301 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5302 PACKET_fork_event_feature },
5303 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5304 PACKET_vfork_event_feature },
94585166
DB
5305 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5306 PACKET_exec_event_feature },
b20a6524 5307 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 5308 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
5309 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5310 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 5311 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
5312};
5313
c8d5aac9
L
5314static char *remote_support_xml;
5315
5316/* Register string appended to "xmlRegisters=" in qSupported query. */
5317
5318void
6e39997a 5319register_remote_support_xml (const char *xml)
c8d5aac9
L
5320{
5321#if defined(HAVE_LIBEXPAT)
5322 if (remote_support_xml == NULL)
c4f7c687 5323 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
5324 else
5325 {
5326 char *copy = xstrdup (remote_support_xml + 13);
ca3a04f6
CB
5327 char *saveptr;
5328 char *p = strtok_r (copy, ",", &saveptr);
c8d5aac9
L
5329
5330 do
5331 {
5332 if (strcmp (p, xml) == 0)
5333 {
5334 /* already there */
5335 xfree (copy);
5336 return;
5337 }
5338 }
ca3a04f6 5339 while ((p = strtok_r (NULL, ",", &saveptr)) != NULL);
c8d5aac9
L
5340 xfree (copy);
5341
94b0dee1
PA
5342 remote_support_xml = reconcat (remote_support_xml,
5343 remote_support_xml, ",", xml,
5344 (char *) NULL);
c8d5aac9
L
5345 }
5346#endif
5347}
5348
69b6ecb0
TT
5349static void
5350remote_query_supported_append (std::string *msg, const char *append)
c8d5aac9 5351{
69b6ecb0
TT
5352 if (!msg->empty ())
5353 msg->append (";");
5354 msg->append (append);
c8d5aac9
L
5355}
5356
6b8edb51
PA
5357void
5358remote_target::remote_query_supported ()
be2a5f71
DJ
5359{
5360 struct remote_state *rs = get_remote_state ();
5361 char *next;
5362 int i;
5363 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5364
5365 /* The packet support flags are handled differently for this packet
5366 than for most others. We treat an error, a disabled packet, and
5367 an empty response identically: any features which must be reported
5368 to be used will be automatically disabled. An empty buffer
5369 accomplishes this, since that is also the representation for a list
5370 containing no features. */
5371
5372 rs->buf[0] = 0;
4082afcc 5373 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 5374 {
69b6ecb0 5375 std::string q;
c8d5aac9 5376
73b8c1fd 5377 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5378 remote_query_supported_append (&q, "multiprocess+");
c8d5aac9 5379
f7e6eed5 5380 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5381 remote_query_supported_append (&q, "swbreak+");
f7e6eed5 5382 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5383 remote_query_supported_append (&q, "hwbreak+");
f7e6eed5 5384
69b6ecb0 5385 remote_query_supported_append (&q, "qRelocInsn+");
dde08ee1 5386
8020350c
DB
5387 if (packet_set_cmd_state (PACKET_fork_event_feature)
5388 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5389 remote_query_supported_append (&q, "fork-events+");
8020350c
DB
5390 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5391 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5392 remote_query_supported_append (&q, "vfork-events+");
8020350c
DB
5393 if (packet_set_cmd_state (PACKET_exec_event_feature)
5394 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5395 remote_query_supported_append (&q, "exec-events+");
89245bc0 5396
750ce8d1 5397 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5398 remote_query_supported_append (&q, "vContSupported+");
750ce8d1 5399
65706a29 5400 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5401 remote_query_supported_append (&q, "QThreadEvents+");
65706a29 5402
f2faf941 5403 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5404 remote_query_supported_append (&q, "no-resumed+");
f2faf941 5405
b35d5edb
PA
5406 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5407 the qSupported:xmlRegisters=i386 handling. */
7cc244de
PA
5408 if (remote_support_xml != NULL
5409 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
69b6ecb0 5410 remote_query_supported_append (&q, remote_support_xml);
82f73884 5411
69b6ecb0
TT
5412 q = "qSupported:" + q;
5413 putpkt (q.c_str ());
94b0dee1 5414
8d64371b 5415 getpkt (&rs->buf, 0);
be2a5f71
DJ
5416
5417 /* If an error occured, warn, but do not return - just reset the
5418 buffer to empty and go on to disable features. */
5419 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5420 == PACKET_ERROR)
5421 {
8d64371b 5422 warning (_("Remote failure reply: %s"), rs->buf.data ());
be2a5f71
DJ
5423 rs->buf[0] = 0;
5424 }
5425 }
5426
5427 memset (seen, 0, sizeof (seen));
5428
8d64371b 5429 next = rs->buf.data ();
be2a5f71
DJ
5430 while (*next)
5431 {
5432 enum packet_support is_supported;
5433 char *p, *end, *name_end, *value;
5434
5435 /* First separate out this item from the rest of the packet. If
5436 there's another item after this, we overwrite the separator
5437 (terminated strings are much easier to work with). */
5438 p = next;
5439 end = strchr (p, ';');
5440 if (end == NULL)
5441 {
5442 end = p + strlen (p);
5443 next = end;
5444 }
5445 else
5446 {
89be2091
DJ
5447 *end = '\0';
5448 next = end + 1;
5449
be2a5f71
DJ
5450 if (end == p)
5451 {
5452 warning (_("empty item in \"qSupported\" response"));
5453 continue;
5454 }
be2a5f71
DJ
5455 }
5456
5457 name_end = strchr (p, '=');
5458 if (name_end)
5459 {
5460 /* This is a name=value entry. */
5461 is_supported = PACKET_ENABLE;
5462 value = name_end + 1;
5463 *name_end = '\0';
5464 }
5465 else
5466 {
5467 value = NULL;
5468 switch (end[-1])
5469 {
5470 case '+':
5471 is_supported = PACKET_ENABLE;
5472 break;
5473
5474 case '-':
5475 is_supported = PACKET_DISABLE;
5476 break;
5477
5478 case '?':
5479 is_supported = PACKET_SUPPORT_UNKNOWN;
5480 break;
5481
5482 default:
3e43a32a
MS
5483 warning (_("unrecognized item \"%s\" "
5484 "in \"qSupported\" response"), p);
be2a5f71
DJ
5485 continue;
5486 }
5487 end[-1] = '\0';
5488 }
5489
5490 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5491 if (strcmp (remote_protocol_features[i].name, p) == 0)
5492 {
5493 const struct protocol_feature *feature;
5494
5495 seen[i] = 1;
5496 feature = &remote_protocol_features[i];
6b8edb51 5497 feature->func (this, feature, is_supported, value);
be2a5f71
DJ
5498 break;
5499 }
5500 }
5501
5502 /* If we increased the packet size, make sure to increase the global
5503 buffer size also. We delay this until after parsing the entire
5504 qSupported packet, because this is the same buffer we were
5505 parsing. */
8d64371b
TT
5506 if (rs->buf.size () < rs->explicit_packet_size)
5507 rs->buf.resize (rs->explicit_packet_size);
be2a5f71
DJ
5508
5509 /* Handle the defaults for unmentioned features. */
5510 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5511 if (!seen[i])
5512 {
5513 const struct protocol_feature *feature;
5514
5515 feature = &remote_protocol_features[i];
6b8edb51 5516 feature->func (this, feature, feature->default_support, NULL);
be2a5f71
DJ
5517 }
5518}
5519
048094ac
PA
5520/* Serial QUIT handler for the remote serial descriptor.
5521
5522 Defers handling a Ctrl-C until we're done with the current
5523 command/response packet sequence, unless:
5524
5525 - We're setting up the connection. Don't send a remote interrupt
5526 request, as we're not fully synced yet. Quit immediately
5527 instead.
5528
5529 - The target has been resumed in the foreground
223ffa71 5530 (target_terminal::is_ours is false) with a synchronous resume
048094ac
PA
5531 packet, and we're blocked waiting for the stop reply, thus a
5532 Ctrl-C should be immediately sent to the target.
5533
5534 - We get a second Ctrl-C while still within the same serial read or
5535 write. In that case the serial is seemingly wedged --- offer to
5536 quit/disconnect.
5537
5538 - We see a second Ctrl-C without target response, after having
5539 previously interrupted the target. In that case the target/stub
5540 is probably wedged --- offer to quit/disconnect.
5541*/
5542
6b8edb51
PA
5543void
5544remote_target::remote_serial_quit_handler ()
048094ac
PA
5545{
5546 struct remote_state *rs = get_remote_state ();
5547
5548 if (check_quit_flag ())
5549 {
5550 /* If we're starting up, we're not fully synced yet. Quit
5551 immediately. */
5552 if (rs->starting_up)
5553 quit ();
5554 else if (rs->got_ctrlc_during_io)
5555 {
5556 if (query (_("The target is not responding to GDB commands.\n"
5557 "Stop debugging it? ")))
5b6d1e4f 5558 remote_unpush_and_throw (this);
048094ac
PA
5559 }
5560 /* If ^C has already been sent once, offer to disconnect. */
223ffa71 5561 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
048094ac
PA
5562 interrupt_query ();
5563 /* All-stop protocol, and blocked waiting for stop reply. Send
5564 an interrupt request. */
223ffa71 5565 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
e671cd59 5566 target_interrupt ();
048094ac
PA
5567 else
5568 rs->got_ctrlc_during_io = 1;
5569 }
5570}
5571
6b8edb51
PA
5572/* The remote_target that is current while the quit handler is
5573 overridden with remote_serial_quit_handler. */
5574static remote_target *curr_quit_handler_target;
5575
5576static void
5577remote_serial_quit_handler ()
5578{
5579 curr_quit_handler_target->remote_serial_quit_handler ();
5580}
5581
5b6d1e4f
PA
5582/* Remove the remote target from the target stack of each inferior
5583 that is using it. Upper targets depend on it so remove them
5584 first. */
78a095c3
JK
5585
5586static void
5b6d1e4f 5587remote_unpush_target (remote_target *target)
78a095c3 5588{
5b6d1e4f
PA
5589 /* We have to unpush the target from all inferiors, even those that
5590 aren't running. */
5591 scoped_restore_current_inferior restore_current_inferior;
5592
5593 for (inferior *inf : all_inferiors (target))
5594 {
5595 switch_to_inferior_no_thread (inf);
5596 pop_all_targets_at_and_above (process_stratum);
5597 generic_mourn_inferior ();
5598 }
78a095c3 5599}
be2a5f71 5600
048094ac 5601static void
5b6d1e4f 5602remote_unpush_and_throw (remote_target *target)
048094ac 5603{
5b6d1e4f 5604 remote_unpush_target (target);
048094ac
PA
5605 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5606}
5607
f6ac5f3d
PA
5608void
5609remote_target::open_1 (const char *name, int from_tty, int extended_p)
c906108c 5610{
6b8edb51 5611 remote_target *curr_remote = get_current_remote_target ();
a6f3e723 5612
c906108c 5613 if (name == 0)
8a3fe4f8 5614 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 5615 "serial device is attached to the remote system\n"
8a3fe4f8 5616 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 5617
2d717e4f 5618 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
5619 Ask this question first, before target_preopen has a chance to kill
5620 anything. */
55f6301a 5621 if (curr_remote != NULL && !target_has_execution ())
2d717e4f 5622 {
78a095c3
JK
5623 if (from_tty
5624 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
5625 error (_("Still connected."));
5626 }
5627
78a095c3 5628 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
5629 target_preopen (from_tty);
5630
ad9a8f3f 5631 remote_fileio_reset ();
1dd41f16
NS
5632 reopen_exec_file ();
5633 reread_symbols ();
5634
6b8edb51
PA
5635 remote_target *remote
5636 = (extended_p ? new extended_remote_target () : new remote_target ());
5637 target_ops_up target_holder (remote);
5638
5639 remote_state *rs = remote->get_remote_state ();
5640
5641 /* See FIXME above. */
5642 if (!target_async_permitted)
5643 rs->wait_forever_enabled_p = 1;
5644
5d93a237
TT
5645 rs->remote_desc = remote_serial_open (name);
5646 if (!rs->remote_desc)
c906108c
SS
5647 perror_with_name (name);
5648
5649 if (baud_rate != -1)
5650 {
5d93a237 5651 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 5652 {
9b74d5d3
KB
5653 /* The requested speed could not be set. Error out to
5654 top level after closing remote_desc. Take care to
5655 set remote_desc to NULL to avoid closing remote_desc
5656 more than once. */
5d93a237
TT
5657 serial_close (rs->remote_desc);
5658 rs->remote_desc = NULL;
c906108c
SS
5659 perror_with_name (name);
5660 }
5661 }
5662
236af5e3 5663 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 5664 serial_raw (rs->remote_desc);
c906108c
SS
5665
5666 /* If there is something sitting in the buffer we might take it as a
5667 response to a command, which would be bad. */
5d93a237 5668 serial_flush_input (rs->remote_desc);
c906108c
SS
5669
5670 if (from_tty)
5671 {
5672 puts_filtered ("Remote debugging using ");
5673 puts_filtered (name);
5674 puts_filtered ("\n");
5675 }
d9f719f1 5676
6b8edb51 5677 /* Switch to using the remote target now. */
dea57a62 5678 push_target (std::move (target_holder));
c906108c 5679
74531fed 5680 /* Register extra event sources in the event loop. */
6b8edb51 5681 rs->remote_async_inferior_event_token
db20ebdf
SM
5682 = create_async_event_handler (remote_async_inferior_event_handler, remote,
5683 "remote");
6b8edb51 5684 rs->notif_state = remote_notif_state_allocate (remote);
74531fed 5685
be2a5f71
DJ
5686 /* Reset the target state; these things will be queried either by
5687 remote_query_supported or as they are needed. */
ca4f7f8b 5688 reset_all_packet_configs_support ();
74531fed 5689 rs->cached_wait_status = 0;
be2a5f71 5690 rs->explicit_packet_size = 0;
a6f3e723 5691 rs->noack_mode = 0;
82f73884 5692 rs->extended = extended_p;
e24a49d8 5693 rs->waiting_for_stop_reply = 0;
3a29589a 5694 rs->ctrlc_pending_p = 0;
048094ac 5695 rs->got_ctrlc_during_io = 0;
802188a7 5696
47f8a51d
TT
5697 rs->general_thread = not_sent_ptid;
5698 rs->continue_thread = not_sent_ptid;
262e1174 5699 rs->remote_traceframe_number = -1;
c906108c 5700
3a00c802
PA
5701 rs->last_resume_exec_dir = EXEC_FORWARD;
5702
9d1f7ab2 5703 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5704 rs->use_threadinfo_query = 1;
5705 rs->use_threadextra_query = 1;
9d1f7ab2 5706
dd194f6b 5707 rs->readahead_cache.invalidate ();
80152258 5708
c6ebd6cf 5709 if (target_async_permitted)
92d1e331 5710 {
92d1e331
DJ
5711 /* FIXME: cagney/1999-09-23: During the initial connection it is
5712 assumed that the target is already ready and able to respond to
0df8b418 5713 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5714 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5715 around this. Eventually a mechanism that allows
92d1e331 5716 wait_for_inferior() to expect/get timeouts will be
23860348 5717 implemented. */
6b8edb51 5718 rs->wait_forever_enabled_p = 0;
92d1e331
DJ
5719 }
5720
23860348 5721 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5722 no_shared_libraries (NULL, 0);
f78f6cf1 5723
36918e70 5724 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5725 target (we'd otherwise be in an inconsistent state) and then
5726 propogate the error on up the exception chain. This ensures that
5727 the caller doesn't stumble along blindly assuming that the
5728 function succeeded. The CLI doesn't have this problem but other
5729 UI's, such as MI do.
36918e70
AC
5730
5731 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5732 this function should return an error indication letting the
ce2826aa 5733 caller restore the previous state. Unfortunately the command
36918e70
AC
5734 ``target remote'' is directly wired to this function making that
5735 impossible. On a positive note, the CLI side of this problem has
5736 been fixed - the function set_cmd_context() makes it possible for
5737 all the ``target ....'' commands to share a common callback
5738 function. See cli-dump.c. */
109c3e39 5739 {
2d717e4f 5740
a70b8144 5741 try
04bd08de 5742 {
6b8edb51 5743 remote->start_remote (from_tty, extended_p);
04bd08de 5744 }
230d2906 5745 catch (const gdb_exception &ex)
109c3e39 5746 {
c8d104ad
PA
5747 /* Pop the partially set up target - unless something else did
5748 already before throwing the exception. */
6b8edb51 5749 if (ex.error != TARGET_CLOSE_ERROR)
5b6d1e4f 5750 remote_unpush_target (remote);
eedc3f4f 5751 throw;
109c3e39
AC
5752 }
5753 }
c906108c 5754
6b8edb51 5755 remote_btrace_reset (rs);
f4abbc16 5756
c6ebd6cf 5757 if (target_async_permitted)
6b8edb51 5758 rs->wait_forever_enabled_p = 1;
43ff13b4
JM
5759}
5760
de0d863e
DB
5761/* Detach the specified process. */
5762
6b8edb51
PA
5763void
5764remote_target::remote_detach_pid (int pid)
de0d863e
DB
5765{
5766 struct remote_state *rs = get_remote_state ();
5767
4c7333b3
PA
5768 /* This should not be necessary, but the handling for D;PID in
5769 GDBserver versions prior to 8.2 incorrectly assumes that the
5770 selected process points to the same process we're detaching,
5771 leading to misbehavior (and possibly GDBserver crashing) when it
5772 does not. Since it's easy and cheap, work around it by forcing
5773 GDBserver to select GDB's current process. */
5774 set_general_process ();
5775
de0d863e 5776 if (remote_multi_process_p (rs))
8d64371b 5777 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
de0d863e 5778 else
8d64371b 5779 strcpy (rs->buf.data (), "D");
de0d863e
DB
5780
5781 putpkt (rs->buf);
8d64371b 5782 getpkt (&rs->buf, 0);
de0d863e
DB
5783
5784 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5785 ;
5786 else if (rs->buf[0] == '\0')
5787 error (_("Remote doesn't know how to detach"));
5788 else
5789 error (_("Can't detach process."));
5790}
5791
5792/* This detaches a program to which we previously attached, using
5793 inferior_ptid to identify the process. After this is done, GDB
5794 can be used to debug some other program. We better not have left
5795 any breakpoints in the target program or it'll die when it hits
5796 one. */
c906108c 5797
6b8edb51 5798void
00431a78 5799remote_target::remote_detach_1 (inferior *inf, int from_tty)
c906108c 5800{
e99b03dc 5801 int pid = inferior_ptid.pid ();
d01949b6 5802 struct remote_state *rs = get_remote_state ();
de0d863e 5803 int is_fork_parent;
c906108c 5804
55f6301a 5805 if (!target_has_execution ())
2d717e4f
DJ
5806 error (_("No process to detach from."));
5807
0f48b757 5808 target_announce_detach (from_tty);
7cee1e54 5809
c906108c 5810 /* Tell the remote target to detach. */
de0d863e 5811 remote_detach_pid (pid);
82f73884 5812
8020350c 5813 /* Exit only if this is the only active inferior. */
5b6d1e4f 5814 if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1)
7cee1e54 5815 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5816
5b6d1e4f 5817 thread_info *tp = find_thread_ptid (this, inferior_ptid);
00431a78 5818
de0d863e
DB
5819 /* Check to see if we are detaching a fork parent. Note that if we
5820 are detaching a fork child, tp == NULL. */
5821 is_fork_parent = (tp != NULL
5822 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5823
5824 /* If doing detach-on-fork, we don't mourn, because that will delete
5825 breakpoints that should be available for the followed inferior. */
5826 if (!is_fork_parent)
f67c0c91 5827 {
249b5733
PA
5828 /* Save the pid as a string before mourning, since that will
5829 unpush the remote target, and we need the string after. */
f2907e49 5830 std::string infpid = target_pid_to_str (ptid_t (pid));
f67c0c91
SDJ
5831
5832 target_mourn_inferior (inferior_ptid);
5833 if (print_inferior_events)
5834 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5835 inf->num, infpid.c_str ());
5836 }
de0d863e
DB
5837 else
5838 {
0ac55310 5839 switch_to_no_thread ();
00431a78 5840 detach_inferior (current_inferior ());
de0d863e 5841 }
2d717e4f
DJ
5842}
5843
f6ac5f3d
PA
5844void
5845remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5846{
00431a78 5847 remote_detach_1 (inf, from_tty);
2d717e4f
DJ
5848}
5849
f6ac5f3d
PA
5850void
5851extended_remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5852{
00431a78 5853 remote_detach_1 (inf, from_tty);
de0d863e
DB
5854}
5855
5856/* Target follow-fork function for remote targets. On entry, and
5857 at return, the current inferior is the fork parent.
5858
5859 Note that although this is currently only used for extended-remote,
5860 it is named remote_follow_fork in anticipation of using it for the
5861 remote target as well. */
5862
5ab2fbf1
SM
5863bool
5864remote_target::follow_fork (bool follow_child, bool detach_fork)
de0d863e
DB
5865{
5866 struct remote_state *rs = get_remote_state ();
c269dbdb 5867 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5868
c269dbdb
DB
5869 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5870 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5871 {
5872 /* When following the parent and detaching the child, we detach
5873 the child here. For the case of following the child and
5874 detaching the parent, the detach is done in the target-
5875 independent follow fork code in infrun.c. We can't use
5876 target_detach when detaching an unfollowed child because
5877 the client side doesn't know anything about the child. */
5878 if (detach_fork && !follow_child)
5879 {
5880 /* Detach the fork child. */
5881 ptid_t child_ptid;
5882 pid_t child_pid;
5883
5884 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
e99b03dc 5885 child_pid = child_ptid.pid ();
de0d863e
DB
5886
5887 remote_detach_pid (child_pid);
de0d863e
DB
5888 }
5889 }
5ab2fbf1
SM
5890
5891 return false;
c906108c
SS
5892}
5893
94585166
DB
5894/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5895 in the program space of the new inferior. On entry and at return the
5896 current inferior is the exec'ing inferior. INF is the new exec'd
5897 inferior, which may be the same as the exec'ing inferior unless
5898 follow-exec-mode is "new". */
5899
f6ac5f3d 5900void
4ca51187 5901remote_target::follow_exec (struct inferior *inf, const char *execd_pathname)
94585166
DB
5902{
5903 /* We know that this is a target file name, so if it has the "target:"
5904 prefix we strip it off before saving it in the program space. */
5905 if (is_target_filename (execd_pathname))
5906 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5907
5908 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5909}
5910
6ad8ae5c
DJ
5911/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5912
f6ac5f3d
PA
5913void
5914remote_target::disconnect (const char *args, int from_tty)
43ff13b4 5915{
43ff13b4 5916 if (args)
2d717e4f 5917 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5918
8020350c 5919 /* Make sure we unpush even the extended remote targets. Calling
5b6d1e4f
PA
5920 target_mourn_inferior won't unpush, and
5921 remote_target::mourn_inferior won't unpush if there is more than
5922 one inferior left. */
5923 remote_unpush_target (this);
2d717e4f 5924
43ff13b4
JM
5925 if (from_tty)
5926 puts_filtered ("Ending remote debugging.\n");
5927}
5928
2d717e4f
DJ
5929/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5930 be chatty about it. */
5931
f6ac5f3d
PA
5932void
5933extended_remote_target::attach (const char *args, int from_tty)
2d717e4f
DJ
5934{
5935 struct remote_state *rs = get_remote_state ();
be86555c 5936 int pid;
96ef3384 5937 char *wait_status = NULL;
2d717e4f 5938
74164c56 5939 pid = parse_pid_to_attach (args);
2d717e4f 5940
74164c56
JK
5941 /* Remote PID can be freely equal to getpid, do not check it here the same
5942 way as in other targets. */
2d717e4f 5943
4082afcc 5944 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5945 error (_("This target does not support attaching to a process"));
5946
7cee1e54
PA
5947 if (from_tty)
5948 {
d9fa87f4 5949 const char *exec_file = get_exec_file (0);
7cee1e54
PA
5950
5951 if (exec_file)
5952 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
a068643d 5953 target_pid_to_str (ptid_t (pid)).c_str ());
7cee1e54
PA
5954 else
5955 printf_unfiltered (_("Attaching to %s\n"),
a068643d 5956 target_pid_to_str (ptid_t (pid)).c_str ());
7cee1e54
PA
5957 }
5958
8d64371b 5959 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f 5960 putpkt (rs->buf);
8d64371b 5961 getpkt (&rs->buf, 0);
2d717e4f 5962
4082afcc
PA
5963 switch (packet_ok (rs->buf,
5964 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5965 {
4082afcc 5966 case PACKET_OK:
6efcd9a8 5967 if (!target_is_non_stop_p ())
74531fed
PA
5968 {
5969 /* Save the reply for later. */
8d64371b
TT
5970 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
5971 strcpy (wait_status, rs->buf.data ());
74531fed 5972 }
8d64371b 5973 else if (strcmp (rs->buf.data (), "OK") != 0)
74531fed 5974 error (_("Attaching to %s failed with: %s"),
a068643d 5975 target_pid_to_str (ptid_t (pid)).c_str (),
8d64371b 5976 rs->buf.data ());
4082afcc
PA
5977 break;
5978 case PACKET_UNKNOWN:
5979 error (_("This target does not support attaching to a process"));
5980 default:
50fa3001
SDJ
5981 error (_("Attaching to %s failed"),
5982 target_pid_to_str (ptid_t (pid)).c_str ());
2d717e4f 5983 }
2d717e4f 5984
0ac55310 5985 switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0));
bad34192 5986
f2907e49 5987 inferior_ptid = ptid_t (pid);
79d7f229 5988
6efcd9a8 5989 if (target_is_non_stop_p ())
bad34192 5990 {
bad34192 5991 /* Get list of threads. */
f6ac5f3d 5992 update_thread_list ();
82f73884 5993
0ac55310
PA
5994 thread_info *thread = first_thread_of_inferior (current_inferior ());
5995 if (thread != nullptr)
5996 switch_to_thread (thread);
bad34192
PA
5997
5998 /* Invalidate our notion of the remote current thread. */
47f8a51d 5999 record_currthread (rs, minus_one_ptid);
bad34192 6000 }
74531fed 6001 else
bad34192 6002 {
0ac55310
PA
6003 /* Now, if we have thread information, update the main thread's
6004 ptid. */
6005 ptid_t curr_ptid = remote_current_thread (ptid_t (pid));
bad34192
PA
6006
6007 /* Add the main thread to the thread list. */
0ac55310
PA
6008 thread_info *thr = add_thread_silent (this, curr_ptid);
6009
6010 switch_to_thread (thr);
6011
00aecdcf
PA
6012 /* Don't consider the thread stopped until we've processed the
6013 saved stop reply. */
5b6d1e4f 6014 set_executing (this, thr->ptid, true);
bad34192 6015 }
c0a2216e 6016
96ef3384
UW
6017 /* Next, if the target can specify a description, read it. We do
6018 this before anything involving memory or registers. */
6019 target_find_description ();
6020
6efcd9a8 6021 if (!target_is_non_stop_p ())
74531fed
PA
6022 {
6023 /* Use the previously fetched status. */
6024 gdb_assert (wait_status != NULL);
6025
6026 if (target_can_async_p ())
6027 {
722247f1 6028 struct notif_event *reply
6b8edb51 6029 = remote_notif_parse (this, &notif_client_stop, wait_status);
74531fed 6030
722247f1 6031 push_stop_reply ((struct stop_reply *) reply);
74531fed 6032
6a3753b3 6033 target_async (1);
74531fed
PA
6034 }
6035 else
6036 {
6037 gdb_assert (wait_status != NULL);
8d64371b 6038 strcpy (rs->buf.data (), wait_status);
74531fed
PA
6039 rs->cached_wait_status = 1;
6040 }
6041 }
6042 else
6043 gdb_assert (wait_status == NULL);
2d717e4f
DJ
6044}
6045
b9c1d481
AS
6046/* Implementation of the to_post_attach method. */
6047
f6ac5f3d
PA
6048void
6049extended_remote_target::post_attach (int pid)
b9c1d481 6050{
6efcd9a8
PA
6051 /* Get text, data & bss offsets. */
6052 get_offsets ();
6053
b9c1d481
AS
6054 /* In certain cases GDB might not have had the chance to start
6055 symbol lookup up until now. This could happen if the debugged
6056 binary is not using shared libraries, the vsyscall page is not
6057 present (on Linux) and the binary itself hadn't changed since the
6058 debugging process was started. */
a42d7dd8 6059 if (current_program_space->symfile_object_file != NULL)
b9c1d481
AS
6060 remote_check_symbols();
6061}
6062
c906108c 6063\f
506fb367
DJ
6064/* Check for the availability of vCont. This function should also check
6065 the response. */
c906108c 6066
6b8edb51
PA
6067void
6068remote_target::remote_vcont_probe ()
c906108c 6069{
6b8edb51 6070 remote_state *rs = get_remote_state ();
2e9f7625 6071 char *buf;
6d820c5c 6072
8d64371b 6073 strcpy (rs->buf.data (), "vCont?");
2e9f7625 6074 putpkt (rs->buf);
8d64371b
TT
6075 getpkt (&rs->buf, 0);
6076 buf = rs->buf.data ();
c906108c 6077
506fb367 6078 /* Make sure that the features we assume are supported. */
61012eef 6079 if (startswith (buf, "vCont"))
506fb367
DJ
6080 {
6081 char *p = &buf[5];
750ce8d1 6082 int support_c, support_C;
506fb367 6083
750ce8d1
YQ
6084 rs->supports_vCont.s = 0;
6085 rs->supports_vCont.S = 0;
506fb367
DJ
6086 support_c = 0;
6087 support_C = 0;
d458bd84 6088 rs->supports_vCont.t = 0;
c1e36e3e 6089 rs->supports_vCont.r = 0;
506fb367
DJ
6090 while (p && *p == ';')
6091 {
6092 p++;
6093 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 6094 rs->supports_vCont.s = 1;
506fb367 6095 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 6096 rs->supports_vCont.S = 1;
506fb367
DJ
6097 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
6098 support_c = 1;
6099 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
6100 support_C = 1;
74531fed 6101 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 6102 rs->supports_vCont.t = 1;
c1e36e3e
PA
6103 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
6104 rs->supports_vCont.r = 1;
506fb367
DJ
6105
6106 p = strchr (p, ';');
6107 }
c906108c 6108
750ce8d1
YQ
6109 /* If c, and C are not all supported, we can't use vCont. Clearing
6110 BUF will make packet_ok disable the packet. */
6111 if (!support_c || !support_C)
506fb367
DJ
6112 buf[0] = 0;
6113 }
c906108c 6114
8d64371b 6115 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
5b6d1e4f 6116 rs->supports_vCont_probed = true;
506fb367 6117}
c906108c 6118
0d8f58ca
PA
6119/* Helper function for building "vCont" resumptions. Write a
6120 resumption to P. ENDP points to one-passed-the-end of the buffer
6121 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
6122 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
6123 resumed thread should be single-stepped and/or signalled. If PTID
6124 equals minus_one_ptid, then all threads are resumed; if PTID
6125 represents a process, then all threads of the process are resumed;
6126 the thread to be stepped and/or signalled is given in the global
6127 INFERIOR_PTID. */
6128
6b8edb51
PA
6129char *
6130remote_target::append_resumption (char *p, char *endp,
6131 ptid_t ptid, int step, gdb_signal siggnal)
0d8f58ca
PA
6132{
6133 struct remote_state *rs = get_remote_state ();
6134
a493e3e2 6135 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 6136 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
6137 else if (step
6138 /* GDB is willing to range step. */
6139 && use_range_stepping
6140 /* Target supports range stepping. */
6141 && rs->supports_vCont.r
6142 /* We don't currently support range stepping multiple
6143 threads with a wildcard (though the protocol allows it,
6144 so stubs shouldn't make an active effort to forbid
6145 it). */
0e998d96 6146 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
c1e36e3e
PA
6147 {
6148 struct thread_info *tp;
6149
d7e15655 6150 if (ptid == minus_one_ptid)
c1e36e3e
PA
6151 {
6152 /* If we don't know about the target thread's tid, then
6153 we're resuming magic_null_ptid (see caller). */
5b6d1e4f 6154 tp = find_thread_ptid (this, magic_null_ptid);
c1e36e3e
PA
6155 }
6156 else
5b6d1e4f 6157 tp = find_thread_ptid (this, ptid);
c1e36e3e
PA
6158 gdb_assert (tp != NULL);
6159
6160 if (tp->control.may_range_step)
6161 {
6162 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6163
6164 p += xsnprintf (p, endp - p, ";r%s,%s",
6165 phex_nz (tp->control.step_range_start,
6166 addr_size),
6167 phex_nz (tp->control.step_range_end,
6168 addr_size));
6169 }
6170 else
6171 p += xsnprintf (p, endp - p, ";s");
6172 }
0d8f58ca
PA
6173 else if (step)
6174 p += xsnprintf (p, endp - p, ";s");
a493e3e2 6175 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
6176 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6177 else
6178 p += xsnprintf (p, endp - p, ";c");
6179
0e998d96 6180 if (remote_multi_process_p (rs) && ptid.is_pid ())
0d8f58ca
PA
6181 {
6182 ptid_t nptid;
6183
6184 /* All (-1) threads of process. */
e99b03dc 6185 nptid = ptid_t (ptid.pid (), -1, 0);
0d8f58ca
PA
6186
6187 p += xsnprintf (p, endp - p, ":");
6188 p = write_ptid (p, endp, nptid);
6189 }
d7e15655 6190 else if (ptid != minus_one_ptid)
0d8f58ca
PA
6191 {
6192 p += xsnprintf (p, endp - p, ":");
6193 p = write_ptid (p, endp, ptid);
6194 }
6195
6196 return p;
6197}
6198
799a2abe
PA
6199/* Clear the thread's private info on resume. */
6200
6201static void
6202resume_clear_thread_private_info (struct thread_info *thread)
6203{
6204 if (thread->priv != NULL)
6205 {
7aabaf9d
SM
6206 remote_thread_info *priv = get_remote_thread_info (thread);
6207
6208 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6209 priv->watch_data_address = 0;
799a2abe
PA
6210 }
6211}
6212
e5ef252a
PA
6213/* Append a vCont continue-with-signal action for threads that have a
6214 non-zero stop signal. */
6215
6b8edb51
PA
6216char *
6217remote_target::append_pending_thread_resumptions (char *p, char *endp,
6218 ptid_t ptid)
e5ef252a 6219{
5b6d1e4f 6220 for (thread_info *thread : all_non_exited_threads (this, ptid))
08036331 6221 if (inferior_ptid != thread->ptid
70509625 6222 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
6223 {
6224 p = append_resumption (p, endp, thread->ptid,
6225 0, thread->suspend.stop_signal);
6226 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 6227 resume_clear_thread_private_info (thread);
e5ef252a
PA
6228 }
6229
6230 return p;
6231}
6232
7b68ffbb
PA
6233/* Set the target running, using the packets that use Hc
6234 (c/s/C/S). */
6235
6b8edb51
PA
6236void
6237remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6238 gdb_signal siggnal)
7b68ffbb
PA
6239{
6240 struct remote_state *rs = get_remote_state ();
7b68ffbb
PA
6241 char *buf;
6242
6243 rs->last_sent_signal = siggnal;
6244 rs->last_sent_step = step;
6245
6246 /* The c/s/C/S resume packets use Hc, so set the continue
6247 thread. */
d7e15655 6248 if (ptid == minus_one_ptid)
7b68ffbb
PA
6249 set_continue_thread (any_thread_ptid);
6250 else
6251 set_continue_thread (ptid);
6252
5b6d1e4f 6253 for (thread_info *thread : all_non_exited_threads (this))
7b68ffbb
PA
6254 resume_clear_thread_private_info (thread);
6255
8d64371b 6256 buf = rs->buf.data ();
6b8edb51 6257 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6258 {
6259 /* We don't pass signals to the target in reverse exec mode. */
6260 if (info_verbose && siggnal != GDB_SIGNAL_0)
6261 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6262 siggnal);
6263
6264 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6265 error (_("Remote reverse-step not supported."));
6266 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6267 error (_("Remote reverse-continue not supported."));
6268
6269 strcpy (buf, step ? "bs" : "bc");
6270 }
6271 else if (siggnal != GDB_SIGNAL_0)
6272 {
6273 buf[0] = step ? 'S' : 'C';
6274 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6275 buf[2] = tohex (((int) siggnal) & 0xf);
6276 buf[3] = '\0';
6277 }
6278 else
6279 strcpy (buf, step ? "s" : "c");
6280
6281 putpkt (buf);
6282}
6283
506fb367
DJ
6284/* Resume the remote inferior by using a "vCont" packet. The thread
6285 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
6286 resumed thread should be single-stepped and/or signalled. If PTID
6287 equals minus_one_ptid, then all threads are resumed; the thread to
6288 be stepped and/or signalled is given in the global INFERIOR_PTID.
6289 This function returns non-zero iff it resumes the inferior.
44eaed12 6290
7b68ffbb
PA
6291 This function issues a strict subset of all possible vCont commands
6292 at the moment. */
44eaed12 6293
6b8edb51
PA
6294int
6295remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6296 enum gdb_signal siggnal)
506fb367
DJ
6297{
6298 struct remote_state *rs = get_remote_state ();
82f73884
PA
6299 char *p;
6300 char *endp;
44eaed12 6301
7b68ffbb 6302 /* No reverse execution actions defined for vCont. */
6b8edb51 6303 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6304 return 0;
6305
4082afcc 6306 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 6307 remote_vcont_probe ();
44eaed12 6308
4082afcc 6309 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 6310 return 0;
44eaed12 6311
8d64371b
TT
6312 p = rs->buf.data ();
6313 endp = p + get_remote_packet_size ();
82f73884 6314
506fb367
DJ
6315 /* If we could generate a wider range of packets, we'd have to worry
6316 about overflowing BUF. Should there be a generic
6317 "multi-part-packet" packet? */
6318
0d8f58ca
PA
6319 p += xsnprintf (p, endp - p, "vCont");
6320
d7e15655 6321 if (ptid == magic_null_ptid)
c906108c 6322 {
79d7f229
PA
6323 /* MAGIC_NULL_PTID means that we don't have any active threads,
6324 so we don't have any TID numbers the inferior will
6325 understand. Make sure to only send forms that do not specify
6326 a TID. */
a9cbf802 6327 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 6328 }
d7e15655 6329 else if (ptid == minus_one_ptid || ptid.is_pid ())
506fb367 6330 {
0d8f58ca
PA
6331 /* Resume all threads (of all processes, or of a single
6332 process), with preference for INFERIOR_PTID. This assumes
6333 inferior_ptid belongs to the set of all threads we are about
6334 to resume. */
a493e3e2 6335 if (step || siggnal != GDB_SIGNAL_0)
82f73884 6336 {
0d8f58ca
PA
6337 /* Step inferior_ptid, with or without signal. */
6338 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 6339 }
0d8f58ca 6340
e5ef252a
PA
6341 /* Also pass down any pending signaled resumption for other
6342 threads not the current. */
6343 p = append_pending_thread_resumptions (p, endp, ptid);
6344
0d8f58ca 6345 /* And continue others without a signal. */
a493e3e2 6346 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
6347 }
6348 else
506fb367
DJ
6349 {
6350 /* Scheduler locking; resume only PTID. */
a9cbf802 6351 append_resumption (p, endp, ptid, step, siggnal);
506fb367 6352 }
c906108c 6353
8d64371b 6354 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
82f73884 6355 putpkt (rs->buf);
506fb367 6356
6efcd9a8 6357 if (target_is_non_stop_p ())
74531fed
PA
6358 {
6359 /* In non-stop, the stub replies to vCont with "OK". The stop
6360 reply will be reported asynchronously by means of a `%Stop'
6361 notification. */
8d64371b
TT
6362 getpkt (&rs->buf, 0);
6363 if (strcmp (rs->buf.data (), "OK") != 0)
6364 error (_("Unexpected vCont reply in non-stop mode: %s"),
6365 rs->buf.data ());
74531fed
PA
6366 }
6367
506fb367 6368 return 1;
c906108c 6369}
43ff13b4 6370
506fb367
DJ
6371/* Tell the remote machine to resume. */
6372
f6ac5f3d
PA
6373void
6374remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 6375{
d01949b6 6376 struct remote_state *rs = get_remote_state ();
43ff13b4 6377
85ad3aaf
PA
6378 /* When connected in non-stop mode, the core resumes threads
6379 individually. Resuming remote threads directly in target_resume
6380 would thus result in sending one packet per thread. Instead, to
6381 minimize roundtrip latency, here we just store the resume
c9d22089
SM
6382 request (put the thread in RESUMED_PENDING_VCONT state); the actual remote
6383 resumption will be done in remote_target::commit_resume, where we'll be
6384 able to do vCont action coalescing. */
f6ac5f3d 6385 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
85ad3aaf 6386 {
7aabaf9d 6387 remote_thread_info *remote_thr;
85ad3aaf 6388
d7e15655 6389 if (minus_one_ptid == ptid || ptid.is_pid ())
5b6d1e4f 6390 remote_thr = get_remote_thread_info (this, inferior_ptid);
85ad3aaf 6391 else
5b6d1e4f 6392 remote_thr = get_remote_thread_info (this, ptid);
7aabaf9d 6393
c9d22089
SM
6394 /* We don't expect the core to ask to resume an already resumed (from
6395 its point of view) thread. */
6396 gdb_assert (remote_thr->resume_state () == resume_state::NOT_RESUMED);
6397
6398 remote_thr->set_resumed_pending_vcont (step, siggnal);
85ad3aaf
PA
6399 return;
6400 }
6401
722247f1
YQ
6402 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6403 (explained in remote-notif.c:handle_notification) so
6404 remote_notif_process is not called. We need find a place where
6405 it is safe to start a 'vNotif' sequence. It is good to do it
6406 before resuming inferior, because inferior was stopped and no RSP
6407 traffic at that moment. */
6efcd9a8 6408 if (!target_is_non_stop_p ())
5965e028 6409 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 6410
f6ac5f3d 6411 rs->last_resume_exec_dir = ::execution_direction;
3a00c802 6412
7b68ffbb
PA
6413 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6414 if (!remote_resume_with_vcont (ptid, step, siggnal))
6b8edb51 6415 remote_resume_with_hc (ptid, step, siggnal);
43ff13b4 6416
c9d22089
SM
6417 /* Update resumed state tracked by the remote target. */
6418 for (thread_info *tp : all_non_exited_threads (this, ptid))
6419 get_remote_thread_info (tp)->set_resumed ();
6420
2acceee2 6421 /* We are about to start executing the inferior, let's register it
0df8b418
MS
6422 with the event loop. NOTE: this is the one place where all the
6423 execution commands end up. We could alternatively do this in each
23860348 6424 of the execution commands in infcmd.c. */
2acceee2
JM
6425 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6426 into infcmd.c in order to allow inferior function calls to work
23860348 6427 NOT asynchronously. */
362646f5 6428 if (target_can_async_p ())
6a3753b3 6429 target_async (1);
e24a49d8
PA
6430
6431 /* We've just told the target to resume. The remote server will
6432 wait for the inferior to stop, and then send a stop reply. In
6433 the mean time, we can't start another command/query ourselves
74531fed
PA
6434 because the stub wouldn't be ready to process it. This applies
6435 only to the base all-stop protocol, however. In non-stop (which
6436 only supports vCont), the stub replies with an "OK", and is
6437 immediate able to process further serial input. */
6efcd9a8 6438 if (!target_is_non_stop_p ())
74531fed 6439 rs->waiting_for_stop_reply = 1;
43ff13b4 6440}
85ad3aaf 6441
85ad3aaf
PA
6442static int is_pending_fork_parent_thread (struct thread_info *thread);
6443
6444/* Private per-inferior info for target remote processes. */
6445
089354bb 6446struct remote_inferior : public private_inferior
85ad3aaf
PA
6447{
6448 /* Whether we can send a wildcard vCont for this process. */
089354bb 6449 bool may_wildcard_vcont = true;
85ad3aaf
PA
6450};
6451
089354bb
SM
6452/* Get the remote private inferior data associated to INF. */
6453
6454static remote_inferior *
6455get_remote_inferior (inferior *inf)
6456{
6457 if (inf->priv == NULL)
6458 inf->priv.reset (new remote_inferior);
6459
6460 return static_cast<remote_inferior *> (inf->priv.get ());
6461}
6462
f5db4863 6463/* Class used to track the construction of a vCont packet in the
85ad3aaf
PA
6464 outgoing packet buffer. This is used to send multiple vCont
6465 packets if we have more actions than would fit a single packet. */
6466
f5db4863 6467class vcont_builder
85ad3aaf 6468{
f5db4863 6469public:
6b8edb51
PA
6470 explicit vcont_builder (remote_target *remote)
6471 : m_remote (remote)
f5db4863
PA
6472 {
6473 restart ();
6474 }
6475
6476 void flush ();
6477 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6478
6479private:
6480 void restart ();
6481
6b8edb51
PA
6482 /* The remote target. */
6483 remote_target *m_remote;
6484
85ad3aaf
PA
6485 /* Pointer to the first action. P points here if no action has been
6486 appended yet. */
f5db4863 6487 char *m_first_action;
85ad3aaf
PA
6488
6489 /* Where the next action will be appended. */
f5db4863 6490 char *m_p;
85ad3aaf
PA
6491
6492 /* The end of the buffer. Must never write past this. */
f5db4863 6493 char *m_endp;
85ad3aaf
PA
6494};
6495
6496/* Prepare the outgoing buffer for a new vCont packet. */
6497
f5db4863
PA
6498void
6499vcont_builder::restart ()
85ad3aaf 6500{
6b8edb51 6501 struct remote_state *rs = m_remote->get_remote_state ();
85ad3aaf 6502
8d64371b
TT
6503 m_p = rs->buf.data ();
6504 m_endp = m_p + m_remote->get_remote_packet_size ();
f5db4863
PA
6505 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6506 m_first_action = m_p;
85ad3aaf
PA
6507}
6508
6509/* If the vCont packet being built has any action, send it to the
6510 remote end. */
6511
f5db4863
PA
6512void
6513vcont_builder::flush ()
85ad3aaf
PA
6514{
6515 struct remote_state *rs;
6516
f5db4863 6517 if (m_p == m_first_action)
85ad3aaf
PA
6518 return;
6519
6b8edb51
PA
6520 rs = m_remote->get_remote_state ();
6521 m_remote->putpkt (rs->buf);
8d64371b
TT
6522 m_remote->getpkt (&rs->buf, 0);
6523 if (strcmp (rs->buf.data (), "OK") != 0)
6524 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
85ad3aaf
PA
6525}
6526
6527/* The largest action is range-stepping, with its two addresses. This
6528 is more than sufficient. If a new, bigger action is created, it'll
6529 quickly trigger a failed assertion in append_resumption (and we'll
6530 just bump this). */
6531#define MAX_ACTION_SIZE 200
6532
6533/* Append a new vCont action in the outgoing packet being built. If
6534 the action doesn't fit the packet along with previous actions, push
6535 what we've got so far to the remote end and start over a new vCont
6536 packet (with the new action). */
6537
f5db4863
PA
6538void
6539vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
85ad3aaf
PA
6540{
6541 char buf[MAX_ACTION_SIZE + 1];
85ad3aaf 6542
6b8edb51
PA
6543 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6544 ptid, step, siggnal);
85ad3aaf
PA
6545
6546 /* Check whether this new action would fit in the vCont packet along
6547 with previous actions. If not, send what we've got so far and
6548 start a new vCont packet. */
f5db4863
PA
6549 size_t rsize = endp - buf;
6550 if (rsize > m_endp - m_p)
85ad3aaf 6551 {
f5db4863
PA
6552 flush ();
6553 restart ();
85ad3aaf
PA
6554
6555 /* Should now fit. */
f5db4863 6556 gdb_assert (rsize <= m_endp - m_p);
85ad3aaf
PA
6557 }
6558
f5db4863
PA
6559 memcpy (m_p, buf, rsize);
6560 m_p += rsize;
6561 *m_p = '\0';
85ad3aaf
PA
6562}
6563
6564/* to_commit_resume implementation. */
6565
f6ac5f3d
PA
6566void
6567remote_target::commit_resume ()
85ad3aaf 6568{
85ad3aaf
PA
6569 int any_process_wildcard;
6570 int may_global_wildcard_vcont;
85ad3aaf
PA
6571
6572 /* If connected in all-stop mode, we'd send the remote resume
6573 request directly from remote_resume. Likewise if
6574 reverse-debugging, as there are no defined vCont actions for
6575 reverse execution. */
f6ac5f3d 6576 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
85ad3aaf
PA
6577 return;
6578
6579 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6580 instead of resuming all threads of each process individually.
6581 However, if any thread of a process must remain halted, we can't
6582 send wildcard resumes and must send one action per thread.
6583
6584 Care must be taken to not resume threads/processes the server
6585 side already told us are stopped, but the core doesn't know about
6586 yet, because the events are still in the vStopped notification
6587 queue. For example:
6588
6589 #1 => vCont s:p1.1;c
6590 #2 <= OK
6591 #3 <= %Stopped T05 p1.1
6592 #4 => vStopped
6593 #5 <= T05 p1.2
6594 #6 => vStopped
6595 #7 <= OK
6596 #8 (infrun handles the stop for p1.1 and continues stepping)
6597 #9 => vCont s:p1.1;c
6598
6599 The last vCont above would resume thread p1.2 by mistake, because
6600 the server has no idea that the event for p1.2 had not been
6601 handled yet.
6602
6603 The server side must similarly ignore resume actions for the
6604 thread that has a pending %Stopped notification (and any other
6605 threads with events pending), until GDB acks the notification
6606 with vStopped. Otherwise, e.g., the following case is
6607 mishandled:
6608
6609 #1 => g (or any other packet)
6610 #2 <= [registers]
6611 #3 <= %Stopped T05 p1.2
6612 #4 => vCont s:p1.1;c
6613 #5 <= OK
6614
6615 Above, the server must not resume thread p1.2. GDB can't know
6616 that p1.2 stopped until it acks the %Stopped notification, and
6617 since from GDB's perspective all threads should be running, it
6618 sends a "c" action.
6619
6620 Finally, special care must also be given to handling fork/vfork
6621 events. A (v)fork event actually tells us that two processes
6622 stopped -- the parent and the child. Until we follow the fork,
6623 we must not resume the child. Therefore, if we have a pending
6624 fork follow, we must not send a global wildcard resume action
6625 (vCont;c). We can still send process-wide wildcards though. */
6626
6627 /* Start by assuming a global wildcard (vCont;c) is possible. */
6628 may_global_wildcard_vcont = 1;
6629
6630 /* And assume every process is individually wildcard-able too. */
5b6d1e4f 6631 for (inferior *inf : all_non_exited_inferiors (this))
85ad3aaf 6632 {
089354bb
SM
6633 remote_inferior *priv = get_remote_inferior (inf);
6634
6635 priv->may_wildcard_vcont = true;
85ad3aaf
PA
6636 }
6637
6638 /* Check for any pending events (not reported or processed yet) and
6639 disable process and global wildcard resumes appropriately. */
6640 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6641
5b6d1e4f 6642 for (thread_info *tp : all_non_exited_threads (this))
85ad3aaf 6643 {
c9d22089
SM
6644 remote_thread_info *priv = get_remote_thread_info (tp);
6645
85ad3aaf
PA
6646 /* If a thread of a process is not meant to be resumed, then we
6647 can't wildcard that process. */
c9d22089 6648 if (priv->resume_state () == resume_state::NOT_RESUMED)
85ad3aaf 6649 {
089354bb 6650 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
85ad3aaf
PA
6651
6652 /* And if we can't wildcard a process, we can't wildcard
6653 everything either. */
6654 may_global_wildcard_vcont = 0;
6655 continue;
6656 }
6657
6658 /* If a thread is the parent of an unfollowed fork, then we
6659 can't do a global wildcard, as that would resume the fork
6660 child. */
6661 if (is_pending_fork_parent_thread (tp))
6662 may_global_wildcard_vcont = 0;
6663 }
6664
6665 /* Now let's build the vCont packet(s). Actions must be appended
6666 from narrower to wider scopes (thread -> process -> global). If
6667 we end up with too many actions for a single packet vcont_builder
6668 flushes the current vCont packet to the remote side and starts a
6669 new one. */
6b8edb51 6670 struct vcont_builder vcont_builder (this);
85ad3aaf
PA
6671
6672 /* Threads first. */
5b6d1e4f 6673 for (thread_info *tp : all_non_exited_threads (this))
85ad3aaf 6674 {
7aabaf9d 6675 remote_thread_info *remote_thr = get_remote_thread_info (tp);
85ad3aaf 6676
c9d22089
SM
6677 /* If the thread was previously vCont-resumed, no need to send a specific
6678 action for it. If we didn't receive a resume request for it, don't
6679 send an action for it either. */
6680 if (remote_thr->resume_state () != resume_state::RESUMED_PENDING_VCONT)
85ad3aaf
PA
6681 continue;
6682
6683 gdb_assert (!thread_is_in_step_over_chain (tp));
6684
c9d22089
SM
6685 const resumed_pending_vcont_info &info
6686 = remote_thr->resumed_pending_vcont_info ();
85ad3aaf 6687
c9d22089
SM
6688 /* Check if we need to send a specific action for this thread. If not,
6689 it will be included in a wildcard resume instead. */
6690 if (info.step || info.sig != GDB_SIGNAL_0
6691 || !get_remote_inferior (tp->inf)->may_wildcard_vcont)
6692 vcont_builder.push_action (tp->ptid, info.step, info.sig);
6693
6694 remote_thr->set_resumed ();
85ad3aaf
PA
6695 }
6696
6697 /* Now check whether we can send any process-wide wildcard. This is
6698 to avoid sending a global wildcard in the case nothing is
6699 supposed to be resumed. */
6700 any_process_wildcard = 0;
6701
5b6d1e4f 6702 for (inferior *inf : all_non_exited_inferiors (this))
85ad3aaf 6703 {
089354bb 6704 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf
PA
6705 {
6706 any_process_wildcard = 1;
6707 break;
6708 }
6709 }
6710
6711 if (any_process_wildcard)
6712 {
6713 /* If all processes are wildcard-able, then send a single "c"
6714 action, otherwise, send an "all (-1) threads of process"
6715 continue action for each running process, if any. */
6716 if (may_global_wildcard_vcont)
6717 {
f5db4863
PA
6718 vcont_builder.push_action (minus_one_ptid,
6719 false, GDB_SIGNAL_0);
85ad3aaf
PA
6720 }
6721 else
6722 {
5b6d1e4f 6723 for (inferior *inf : all_non_exited_inferiors (this))
85ad3aaf 6724 {
089354bb 6725 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf 6726 {
f2907e49 6727 vcont_builder.push_action (ptid_t (inf->pid),
f5db4863 6728 false, GDB_SIGNAL_0);
85ad3aaf
PA
6729 }
6730 }
6731 }
6732 }
6733
f5db4863 6734 vcont_builder.flush ();
85ad3aaf
PA
6735}
6736
c906108c 6737\f
43ff13b4 6738
74531fed
PA
6739/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6740 thread, all threads of a remote process, or all threads of all
6741 processes. */
6742
6b8edb51
PA
6743void
6744remote_target::remote_stop_ns (ptid_t ptid)
74531fed
PA
6745{
6746 struct remote_state *rs = get_remote_state ();
8d64371b
TT
6747 char *p = rs->buf.data ();
6748 char *endp = p + get_remote_packet_size ();
74531fed 6749
5b6d1e4f
PA
6750 /* FIXME: This supports_vCont_probed check is a workaround until
6751 packet_support is per-connection. */
6752 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN
6753 || !rs->supports_vCont_probed)
6b8edb51 6754 remote_vcont_probe ();
74531fed 6755
d458bd84 6756 if (!rs->supports_vCont.t)
74531fed
PA
6757 error (_("Remote server does not support stopping threads"));
6758
d7e15655 6759 if (ptid == minus_one_ptid
0e998d96 6760 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
74531fed
PA
6761 p += xsnprintf (p, endp - p, "vCont;t");
6762 else
6763 {
6764 ptid_t nptid;
6765
74531fed
PA
6766 p += xsnprintf (p, endp - p, "vCont;t:");
6767
0e998d96 6768 if (ptid.is_pid ())
74531fed 6769 /* All (-1) threads of process. */
e99b03dc 6770 nptid = ptid_t (ptid.pid (), -1, 0);
74531fed
PA
6771 else
6772 {
6773 /* Small optimization: if we already have a stop reply for
6774 this thread, no use in telling the stub we want this
6775 stopped. */
6776 if (peek_stop_reply (ptid))
6777 return;
6778
6779 nptid = ptid;
6780 }
6781
a9cbf802 6782 write_ptid (p, endp, nptid);
74531fed
PA
6783 }
6784
6785 /* In non-stop, we get an immediate OK reply. The stop reply will
6786 come in asynchronously by notification. */
6787 putpkt (rs->buf);
8d64371b
TT
6788 getpkt (&rs->buf, 0);
6789 if (strcmp (rs->buf.data (), "OK") != 0)
a068643d 6790 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
8d64371b 6791 rs->buf.data ());
74531fed
PA
6792}
6793
bfedc46a
PA
6794/* All-stop version of target_interrupt. Sends a break or a ^C to
6795 interrupt the remote target. It is undefined which thread of which
6796 process reports the interrupt. */
74531fed 6797
6b8edb51
PA
6798void
6799remote_target::remote_interrupt_as ()
74531fed
PA
6800{
6801 struct remote_state *rs = get_remote_state ();
6802
3a29589a
DJ
6803 rs->ctrlc_pending_p = 1;
6804
74531fed
PA
6805 /* If the inferior is stopped already, but the core didn't know
6806 about it yet, just ignore the request. The cached wait status
6807 will be collected in remote_wait. */
6808 if (rs->cached_wait_status)
6809 return;
6810
9a7071a8
JB
6811 /* Send interrupt_sequence to remote target. */
6812 send_interrupt_sequence ();
74531fed
PA
6813}
6814
de979965
PA
6815/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6816 the remote target. It is undefined which thread of which process
e42de8c7
PA
6817 reports the interrupt. Throws an error if the packet is not
6818 supported by the server. */
de979965 6819
6b8edb51
PA
6820void
6821remote_target::remote_interrupt_ns ()
de979965
PA
6822{
6823 struct remote_state *rs = get_remote_state ();
8d64371b
TT
6824 char *p = rs->buf.data ();
6825 char *endp = p + get_remote_packet_size ();
de979965
PA
6826
6827 xsnprintf (p, endp - p, "vCtrlC");
6828
6829 /* In non-stop, we get an immediate OK reply. The stop reply will
6830 come in asynchronously by notification. */
6831 putpkt (rs->buf);
8d64371b 6832 getpkt (&rs->buf, 0);
de979965
PA
6833
6834 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6835 {
6836 case PACKET_OK:
6837 break;
6838 case PACKET_UNKNOWN:
e42de8c7 6839 error (_("No support for interrupting the remote target."));
de979965 6840 case PACKET_ERROR:
8d64371b 6841 error (_("Interrupting target failed: %s"), rs->buf.data ());
de979965 6842 }
de979965
PA
6843}
6844
bfedc46a 6845/* Implement the to_stop function for the remote targets. */
74531fed 6846
f6ac5f3d
PA
6847void
6848remote_target::stop (ptid_t ptid)
c906108c 6849{
7a292a7a 6850 if (remote_debug)
0f71a2f6 6851 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 6852
6efcd9a8 6853 if (target_is_non_stop_p ())
74531fed 6854 remote_stop_ns (ptid);
c906108c 6855 else
bfedc46a
PA
6856 {
6857 /* We don't currently have a way to transparently pause the
6858 remote target in all-stop mode. Interrupt it instead. */
de979965 6859 remote_interrupt_as ();
bfedc46a
PA
6860 }
6861}
6862
6863/* Implement the to_interrupt function for the remote targets. */
6864
f6ac5f3d
PA
6865void
6866remote_target::interrupt ()
bfedc46a
PA
6867{
6868 if (remote_debug)
6869 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6870
e42de8c7
PA
6871 if (target_is_non_stop_p ())
6872 remote_interrupt_ns ();
bfedc46a 6873 else
e42de8c7 6874 remote_interrupt_as ();
c906108c
SS
6875}
6876
93692b58
PA
6877/* Implement the to_pass_ctrlc function for the remote targets. */
6878
f6ac5f3d
PA
6879void
6880remote_target::pass_ctrlc ()
93692b58
PA
6881{
6882 struct remote_state *rs = get_remote_state ();
6883
6884 if (remote_debug)
6885 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6886
6887 /* If we're starting up, we're not fully synced yet. Quit
6888 immediately. */
6889 if (rs->starting_up)
6890 quit ();
6891 /* If ^C has already been sent once, offer to disconnect. */
6892 else if (rs->ctrlc_pending_p)
6893 interrupt_query ();
6894 else
e671cd59 6895 target_interrupt ();
93692b58
PA
6896}
6897
c906108c
SS
6898/* Ask the user what to do when an interrupt is received. */
6899
6b8edb51
PA
6900void
6901remote_target::interrupt_query ()
c906108c 6902{
abc56d60 6903 struct remote_state *rs = get_remote_state ();
c906108c 6904
abc56d60 6905 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 6906 {
abc56d60
PA
6907 if (query (_("The target is not responding to interrupt requests.\n"
6908 "Stop debugging it? ")))
74531fed 6909 {
5b6d1e4f 6910 remote_unpush_target (this);
abc56d60 6911 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
6912 }
6913 }
abc56d60
PA
6914 else
6915 {
6916 if (query (_("Interrupted while waiting for the program.\n"
6917 "Give up waiting? ")))
6918 quit ();
6919 }
c906108c
SS
6920}
6921
6426a772
JM
6922/* Enable/disable target terminal ownership. Most targets can use
6923 terminal groups to control terminal ownership. Remote targets are
6924 different in that explicit transfer of ownership to/from GDB/target
23860348 6925 is required. */
6426a772 6926
f6ac5f3d
PA
6927void
6928remote_target::terminal_inferior ()
6426a772 6929{
6426a772
JM
6930 /* NOTE: At this point we could also register our selves as the
6931 recipient of all input. Any characters typed could then be
23860348 6932 passed on down to the target. */
6426a772
JM
6933}
6934
f6ac5f3d
PA
6935void
6936remote_target::terminal_ours ()
6426a772 6937{
6426a772
JM
6938}
6939
176a6961 6940static void
05be00a8 6941remote_console_output (const char *msg)
c906108c 6942{
05be00a8 6943 const char *p;
c906108c 6944
c5aa993b 6945 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
6946 {
6947 char tb[2];
6948 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 6949
c906108c
SS
6950 tb[0] = c;
6951 tb[1] = 0;
da5bd37e 6952 gdb_stdtarg->puts (tb);
c906108c 6953 }
da5bd37e 6954 gdb_stdtarg->flush ();
00db5b94 6955}
74531fed 6956
32603266 6957struct stop_reply : public notif_event
74531fed 6958{
32603266 6959 ~stop_reply ();
74531fed 6960
722247f1 6961 /* The identifier of the thread about this event */
74531fed
PA
6962 ptid_t ptid;
6963
340e3c99 6964 /* The remote state this event is associated with. When the remote
bcc75809
YQ
6965 connection, represented by a remote_state object, is closed,
6966 all the associated stop_reply events should be released. */
6967 struct remote_state *rs;
6968
74531fed
PA
6969 struct target_waitstatus ws;
6970
5cd63fda
PA
6971 /* The architecture associated with the expedited registers. */
6972 gdbarch *arch;
6973
15148d6a
PA
6974 /* Expedited registers. This makes remote debugging a bit more
6975 efficient for those targets that provide critical registers as
6976 part of their normal status mechanism (as another roundtrip to
6977 fetch them is avoided). */
32603266 6978 std::vector<cached_reg_t> regcache;
74531fed 6979
f7e6eed5
PA
6980 enum target_stop_reason stop_reason;
6981
74531fed
PA
6982 CORE_ADDR watch_data_address;
6983
dc146f7c 6984 int core;
32603266 6985};
c906108c 6986
221e1a37
PA
6987/* Return the length of the stop reply queue. */
6988
6b8edb51
PA
6989int
6990remote_target::stop_reply_queue_length ()
221e1a37 6991{
6b8edb51 6992 remote_state *rs = get_remote_state ();
953edf2b 6993 return rs->stop_reply_queue.size ();
221e1a37
PA
6994}
6995
cb8c24b6 6996static void
6b8edb51 6997remote_notif_stop_parse (remote_target *remote,
bb277751 6998 struct notif_client *self, const char *buf,
722247f1
YQ
6999 struct notif_event *event)
7000{
6b8edb51 7001 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
722247f1
YQ
7002}
7003
7004static void
6b8edb51 7005remote_notif_stop_ack (remote_target *remote,
bb277751 7006 struct notif_client *self, const char *buf,
722247f1
YQ
7007 struct notif_event *event)
7008{
7009 struct stop_reply *stop_reply = (struct stop_reply *) event;
7010
7011 /* acknowledge */
6b8edb51 7012 putpkt (remote, self->ack_command);
722247f1
YQ
7013
7014 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6b8edb51 7015 {
722247f1
YQ
7016 /* We got an unknown stop reply. */
7017 error (_("Unknown stop reply"));
6b8edb51 7018 }
722247f1 7019
6b8edb51 7020 remote->push_stop_reply (stop_reply);
722247f1
YQ
7021}
7022
7023static int
6b8edb51
PA
7024remote_notif_stop_can_get_pending_events (remote_target *remote,
7025 struct notif_client *self)
722247f1
YQ
7026{
7027 /* We can't get pending events in remote_notif_process for
7028 notification stop, and we have to do this in remote_wait_ns
7029 instead. If we fetch all queued events from stub, remote stub
7030 may exit and we have no chance to process them back in
7031 remote_wait_ns. */
6b8edb51
PA
7032 remote_state *rs = remote->get_remote_state ();
7033 mark_async_event_handler (rs->remote_async_inferior_event_token);
722247f1
YQ
7034 return 0;
7035}
7036
32603266 7037stop_reply::~stop_reply ()
722247f1 7038{
32603266
TT
7039 for (cached_reg_t &reg : regcache)
7040 xfree (reg.data);
722247f1
YQ
7041}
7042
32603266
TT
7043static notif_event_up
7044remote_notif_stop_alloc_reply ()
722247f1 7045{
32603266 7046 return notif_event_up (new struct stop_reply ());
722247f1
YQ
7047}
7048
7049/* A client of notification Stop. */
7050
7051struct notif_client notif_client_stop =
7052{
7053 "Stop",
7054 "vStopped",
7055 remote_notif_stop_parse,
7056 remote_notif_stop_ack,
7057 remote_notif_stop_can_get_pending_events,
7058 remote_notif_stop_alloc_reply,
f48ff2a7 7059 REMOTE_NOTIF_STOP,
722247f1
YQ
7060};
7061
85ad3aaf 7062/* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
cbb8991c
DB
7063 the pid of the process that owns the threads we want to check, or
7064 -1 if we want to check all threads. */
7065
7066static int
7067is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
7068 ptid_t thread_ptid)
7069{
7070 if (ws->kind == TARGET_WAITKIND_FORKED
7071 || ws->kind == TARGET_WAITKIND_VFORKED)
7072 {
e99b03dc 7073 if (event_pid == -1 || event_pid == thread_ptid.pid ())
cbb8991c
DB
7074 return 1;
7075 }
7076
7077 return 0;
7078}
7079
85ad3aaf
PA
7080/* Return the thread's pending status used to determine whether the
7081 thread is a fork parent stopped at a fork event. */
7082
7083static struct target_waitstatus *
7084thread_pending_fork_status (struct thread_info *thread)
7085{
7086 if (thread->suspend.waitstatus_pending_p)
7087 return &thread->suspend.waitstatus;
7088 else
7089 return &thread->pending_follow;
7090}
7091
7092/* Determine if THREAD is a pending fork parent thread. */
7093
7094static int
7095is_pending_fork_parent_thread (struct thread_info *thread)
7096{
7097 struct target_waitstatus *ws = thread_pending_fork_status (thread);
7098 int pid = -1;
7099
7100 return is_pending_fork_parent (ws, pid, thread->ptid);
7101}
7102
cbb8991c
DB
7103/* If CONTEXT contains any fork child threads that have not been
7104 reported yet, remove them from the CONTEXT list. If such a
7105 thread exists it is because we are stopped at a fork catchpoint
7106 and have not yet called follow_fork, which will set up the
7107 host-side data structures for the new process. */
7108
6b8edb51
PA
7109void
7110remote_target::remove_new_fork_children (threads_listing_context *context)
cbb8991c 7111{
cbb8991c
DB
7112 int pid = -1;
7113 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
7114
7115 /* For any threads stopped at a fork event, remove the corresponding
7116 fork child threads from the CONTEXT list. */
5b6d1e4f 7117 for (thread_info *thread : all_non_exited_threads (this))
cbb8991c 7118 {
85ad3aaf 7119 struct target_waitstatus *ws = thread_pending_fork_status (thread);
cbb8991c
DB
7120
7121 if (is_pending_fork_parent (ws, pid, thread->ptid))
21fe1c75 7122 context->remove_thread (ws->value.related_pid);
cbb8991c
DB
7123 }
7124
7125 /* Check for any pending fork events (not reported or processed yet)
7126 in process PID and remove those fork child threads from the
7127 CONTEXT list as well. */
7128 remote_notif_get_pending_events (notif);
953edf2b
TT
7129 for (auto &event : get_remote_state ()->stop_reply_queue)
7130 if (event->ws.kind == TARGET_WAITKIND_FORKED
7131 || event->ws.kind == TARGET_WAITKIND_VFORKED
7132 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
7133 context->remove_thread (event->ws.value.related_pid);
85ad3aaf
PA
7134}
7135
7136/* Check whether any event pending in the vStopped queue would prevent
7137 a global or process wildcard vCont action. Clear
7138 *may_global_wildcard if we can't do a global wildcard (vCont;c),
7139 and clear the event inferior's may_wildcard_vcont flag if we can't
7140 do a process-wide wildcard resume (vCont;c:pPID.-1). */
7141
6b8edb51
PA
7142void
7143remote_target::check_pending_events_prevent_wildcard_vcont
7144 (int *may_global_wildcard)
85ad3aaf
PA
7145{
7146 struct notif_client *notif = &notif_client_stop;
7147
7148 remote_notif_get_pending_events (notif);
953edf2b
TT
7149 for (auto &event : get_remote_state ()->stop_reply_queue)
7150 {
7151 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
7152 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
7153 continue;
85ad3aaf 7154
953edf2b
TT
7155 if (event->ws.kind == TARGET_WAITKIND_FORKED
7156 || event->ws.kind == TARGET_WAITKIND_VFORKED)
7157 *may_global_wildcard = 0;
722247f1 7158
5b6d1e4f 7159 struct inferior *inf = find_inferior_ptid (this, event->ptid);
722247f1 7160
953edf2b
TT
7161 /* This may be the first time we heard about this process.
7162 Regardless, we must not do a global wildcard resume, otherwise
7163 we'd resume this process too. */
7164 *may_global_wildcard = 0;
7165 if (inf != NULL)
7166 get_remote_inferior (inf)->may_wildcard_vcont = false;
722247f1 7167 }
722247f1
YQ
7168}
7169
f48ff2a7 7170/* Discard all pending stop replies of inferior INF. */
c906108c 7171
6b8edb51
PA
7172void
7173remote_target::discard_pending_stop_replies (struct inferior *inf)
c906108c 7174{
f48ff2a7
YQ
7175 struct stop_reply *reply;
7176 struct remote_state *rs = get_remote_state ();
7177 struct remote_notif_state *rns = rs->notif_state;
7178
7179 /* This function can be notified when an inferior exists. When the
7180 target is not remote, the notification state is NULL. */
7181 if (rs->remote_desc == NULL)
7182 return;
7183
7184 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 7185
74531fed 7186 /* Discard the in-flight notification. */
e99b03dc 7187 if (reply != NULL && reply->ptid.pid () == inf->pid)
74531fed 7188 {
32603266 7189 delete reply;
f48ff2a7 7190 rns->pending_event[notif_client_stop.id] = NULL;
74531fed 7191 }
c906108c 7192
74531fed
PA
7193 /* Discard the stop replies we have already pulled with
7194 vStopped. */
953edf2b
TT
7195 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7196 rs->stop_reply_queue.end (),
7197 [=] (const stop_reply_up &event)
7198 {
7199 return event->ptid.pid () == inf->pid;
7200 });
7201 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
bcc75809
YQ
7202}
7203
7204/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7 7205
6b8edb51
PA
7206void
7207remote_target::discard_pending_stop_replies_in_queue ()
f48ff2a7 7208{
6b8edb51 7209 remote_state *rs = get_remote_state ();
f48ff2a7 7210
f48ff2a7
YQ
7211 /* Discard the stop replies we have already pulled with
7212 vStopped. */
953edf2b
TT
7213 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7214 rs->stop_reply_queue.end (),
7215 [=] (const stop_reply_up &event)
7216 {
7217 return event->rs == rs;
7218 });
7219 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
74531fed 7220}
43ff13b4 7221
722247f1
YQ
7222/* Remove the first reply in 'stop_reply_queue' which matches
7223 PTID. */
2e9f7625 7224
6b8edb51
PA
7225struct stop_reply *
7226remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 7227{
953edf2b 7228 remote_state *rs = get_remote_state ();
722247f1 7229
953edf2b
TT
7230 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7231 rs->stop_reply_queue.end (),
7232 [=] (const stop_reply_up &event)
7233 {
7234 return event->ptid.matches (ptid);
7235 });
7236 struct stop_reply *result;
7237 if (iter == rs->stop_reply_queue.end ())
7238 result = nullptr;
7239 else
7240 {
7241 result = iter->release ();
7242 rs->stop_reply_queue.erase (iter);
7243 }
722247f1 7244
722247f1
YQ
7245 if (notif_debug)
7246 fprintf_unfiltered (gdb_stdlog,
7247 "notif: discard queued event: 'Stop' in %s\n",
a068643d 7248 target_pid_to_str (ptid).c_str ());
a744cf53 7249
953edf2b 7250 return result;
74531fed 7251}
75c99385 7252
74531fed
PA
7253/* Look for a queued stop reply belonging to PTID. If one is found,
7254 remove it from the queue, and return it. Returns NULL if none is
7255 found. If there are still queued events left to process, tell the
7256 event loop to get back to target_wait soon. */
e24a49d8 7257
6b8edb51
PA
7258struct stop_reply *
7259remote_target::queued_stop_reply (ptid_t ptid)
74531fed 7260{
953edf2b 7261 remote_state *rs = get_remote_state ();
722247f1 7262 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 7263
953edf2b 7264 if (!rs->stop_reply_queue.empty ())
6b8edb51 7265 {
6b8edb51
PA
7266 /* There's still at least an event left. */
7267 mark_async_event_handler (rs->remote_async_inferior_event_token);
7268 }
74531fed 7269
722247f1 7270 return r;
74531fed
PA
7271}
7272
7273/* Push a fully parsed stop reply in the stop reply queue. Since we
7274 know that we now have at least one queued event left to pass to the
7275 core side, tell the event loop to get back to target_wait soon. */
7276
6b8edb51
PA
7277void
7278remote_target::push_stop_reply (struct stop_reply *new_event)
74531fed 7279{
6b8edb51 7280 remote_state *rs = get_remote_state ();
953edf2b 7281 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
74531fed 7282
722247f1
YQ
7283 if (notif_debug)
7284 fprintf_unfiltered (gdb_stdlog,
7285 "notif: push 'Stop' %s to queue %d\n",
a068643d 7286 target_pid_to_str (new_event->ptid).c_str (),
953edf2b 7287 int (rs->stop_reply_queue.size ()));
74531fed 7288
6b8edb51 7289 mark_async_event_handler (rs->remote_async_inferior_event_token);
74531fed
PA
7290}
7291
7292/* Returns true if we have a stop reply for PTID. */
7293
6b8edb51
PA
7294int
7295remote_target::peek_stop_reply (ptid_t ptid)
74531fed 7296{
6b8edb51 7297 remote_state *rs = get_remote_state ();
953edf2b
TT
7298 for (auto &event : rs->stop_reply_queue)
7299 if (ptid == event->ptid
7300 && event->ws.kind == TARGET_WAITKIND_STOPPED)
7301 return 1;
7302 return 0;
74531fed
PA
7303}
7304
26d56a93
SL
7305/* Helper for remote_parse_stop_reply. Return nonzero if the substring
7306 starting with P and ending with PEND matches PREFIX. */
7307
7308static int
7309strprefix (const char *p, const char *pend, const char *prefix)
7310{
7311 for ( ; p < pend; p++, prefix++)
7312 if (*p != *prefix)
7313 return 0;
7314 return *prefix == '\0';
7315}
7316
74531fed
PA
7317/* Parse the stop reply in BUF. Either the function succeeds, and the
7318 result is stored in EVENT, or throws an error. */
7319
6b8edb51 7320void
bb277751 7321remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
74531fed 7322{
5cd63fda 7323 remote_arch_state *rsa = NULL;
74531fed 7324 ULONGEST addr;
256642e8 7325 const char *p;
94585166 7326 int skipregs = 0;
74531fed
PA
7327
7328 event->ptid = null_ptid;
bcc75809 7329 event->rs = get_remote_state ();
74531fed
PA
7330 event->ws.kind = TARGET_WAITKIND_IGNORE;
7331 event->ws.value.integer = 0;
f7e6eed5 7332 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
32603266 7333 event->regcache.clear ();
dc146f7c 7334 event->core = -1;
74531fed
PA
7335
7336 switch (buf[0])
7337 {
7338 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
7339 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7340 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7341 ss = signal number
7342 n... = register number
7343 r... = register contents
7344 */
7345
7346 p = &buf[3]; /* after Txx */
7347 while (*p)
7348 {
256642e8 7349 const char *p1;
cea39f65 7350 int fieldsize;
43ff13b4 7351
1f10ba14
PA
7352 p1 = strchr (p, ':');
7353 if (p1 == NULL)
7354 error (_("Malformed packet(a) (missing colon): %s\n\
7355Packet: '%s'\n"),
7356 p, buf);
7357 if (p == p1)
7358 error (_("Malformed packet(a) (missing register number): %s\n\
7359Packet: '%s'\n"),
7360 p, buf);
3c3bea1c 7361
1f10ba14
PA
7362 /* Some "registers" are actually extended stop information.
7363 Note if you're adding a new entry here: GDB 7.9 and
7364 earlier assume that all register "numbers" that start
7365 with an hex digit are real register numbers. Make sure
7366 the server only sends such a packet if it knows the
7367 client understands it. */
c8e38a49 7368
26d56a93 7369 if (strprefix (p, p1, "thread"))
1f10ba14 7370 event->ptid = read_ptid (++p1, &p);
82075af2
JS
7371 else if (strprefix (p, p1, "syscall_entry"))
7372 {
7373 ULONGEST sysno;
7374
7375 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7376 p = unpack_varlen_hex (++p1, &sysno);
7377 event->ws.value.syscall_number = (int) sysno;
7378 }
7379 else if (strprefix (p, p1, "syscall_return"))
7380 {
7381 ULONGEST sysno;
7382
7383 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7384 p = unpack_varlen_hex (++p1, &sysno);
7385 event->ws.value.syscall_number = (int) sysno;
7386 }
26d56a93
SL
7387 else if (strprefix (p, p1, "watch")
7388 || strprefix (p, p1, "rwatch")
7389 || strprefix (p, p1, "awatch"))
cea39f65 7390 {
f7e6eed5 7391 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
7392 p = unpack_varlen_hex (++p1, &addr);
7393 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 7394 }
26d56a93 7395 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
7396 {
7397 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7398
7399 /* Make sure the stub doesn't forget to indicate support
7400 with qSupported. */
7401 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7402 error (_("Unexpected swbreak stop reason"));
7403
7404 /* The value part is documented as "must be empty",
7405 though we ignore it, in case we ever decide to make
7406 use of it in a backward compatible way. */
8424cc97 7407 p = strchrnul (p1 + 1, ';');
f7e6eed5 7408 }
26d56a93 7409 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
7410 {
7411 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7412
7413 /* Make sure the stub doesn't forget to indicate support
7414 with qSupported. */
7415 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7416 error (_("Unexpected hwbreak stop reason"));
7417
7418 /* See above. */
8424cc97 7419 p = strchrnul (p1 + 1, ';');
f7e6eed5 7420 }
26d56a93 7421 else if (strprefix (p, p1, "library"))
cea39f65 7422 {
1f10ba14 7423 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 7424 p = strchrnul (p1 + 1, ';');
1f10ba14 7425 }
26d56a93 7426 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
7427 {
7428 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7429 /* p1 will indicate "begin" or "end", but it makes
7430 no difference for now, so ignore it. */
8424cc97 7431 p = strchrnul (p1 + 1, ';');
1f10ba14 7432 }
26d56a93 7433 else if (strprefix (p, p1, "core"))
1f10ba14
PA
7434 {
7435 ULONGEST c;
a744cf53 7436
1f10ba14
PA
7437 p = unpack_varlen_hex (++p1, &c);
7438 event->core = c;
cea39f65 7439 }
26d56a93 7440 else if (strprefix (p, p1, "fork"))
de0d863e
DB
7441 {
7442 event->ws.value.related_pid = read_ptid (++p1, &p);
7443 event->ws.kind = TARGET_WAITKIND_FORKED;
7444 }
26d56a93 7445 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
7446 {
7447 event->ws.value.related_pid = read_ptid (++p1, &p);
7448 event->ws.kind = TARGET_WAITKIND_VFORKED;
7449 }
26d56a93 7450 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
7451 {
7452 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 7453 p = strchrnul (p1 + 1, ';');
c269dbdb 7454 }
6ab24463 7455 else if (strprefix (p, p1, "exec"))
94585166
DB
7456 {
7457 ULONGEST ignored;
94585166
DB
7458 int pathlen;
7459
7460 /* Determine the length of the execd pathname. */
7461 p = unpack_varlen_hex (++p1, &ignored);
7462 pathlen = (p - p1) / 2;
7463
7464 /* Save the pathname for event reporting and for
7465 the next run command. */
c6321f19
TT
7466 gdb::unique_xmalloc_ptr<char[]> pathname
7467 ((char *) xmalloc (pathlen + 1));
7468 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
94585166
DB
7469 pathname[pathlen] = '\0';
7470
7471 /* This is freed during event handling. */
c6321f19 7472 event->ws.value.execd_pathname = pathname.release ();
94585166
DB
7473 event->ws.kind = TARGET_WAITKIND_EXECD;
7474
7475 /* Skip the registers included in this packet, since
7476 they may be for an architecture different from the
7477 one used by the original program. */
7478 skipregs = 1;
7479 }
65706a29
PA
7480 else if (strprefix (p, p1, "create"))
7481 {
7482 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 7483 p = strchrnul (p1 + 1, ';');
65706a29 7484 }
cea39f65
MS
7485 else
7486 {
1f10ba14 7487 ULONGEST pnum;
256642e8 7488 const char *p_temp;
1f10ba14 7489
94585166
DB
7490 if (skipregs)
7491 {
8424cc97 7492 p = strchrnul (p1 + 1, ';');
94585166
DB
7493 p++;
7494 continue;
7495 }
7496
1f10ba14
PA
7497 /* Maybe a real ``P'' register number. */
7498 p_temp = unpack_varlen_hex (p, &pnum);
7499 /* If the first invalid character is the colon, we got a
7500 register number. Otherwise, it's an unknown stop
7501 reason. */
7502 if (p_temp == p1)
7503 {
5cd63fda
PA
7504 /* If we haven't parsed the event's thread yet, find
7505 it now, in order to find the architecture of the
7506 reported expedited registers. */
7507 if (event->ptid == null_ptid)
7508 {
24ed6739
AB
7509 /* If there is no thread-id information then leave
7510 the event->ptid as null_ptid. Later in
7511 process_stop_reply we will pick a suitable
7512 thread. */
5cd63fda
PA
7513 const char *thr = strstr (p1 + 1, ";thread:");
7514 if (thr != NULL)
7515 event->ptid = read_ptid (thr + strlen (";thread:"),
7516 NULL);
5cd63fda
PA
7517 }
7518
7519 if (rsa == NULL)
7520 {
5b6d1e4f
PA
7521 inferior *inf
7522 = (event->ptid == null_ptid
7523 ? NULL
7524 : find_inferior_ptid (this, event->ptid));
5cd63fda
PA
7525 /* If this is the first time we learn anything
7526 about this process, skip the registers
7527 included in this packet, since we don't yet
7528 know which architecture to use to parse them.
7529 We'll determine the architecture later when
7530 we process the stop reply and retrieve the
7531 target description, via
7532 remote_notice_new_inferior ->
7533 post_create_inferior. */
7534 if (inf == NULL)
7535 {
7536 p = strchrnul (p1 + 1, ';');
7537 p++;
7538 continue;
7539 }
7540
7541 event->arch = inf->gdbarch;
9d6eea31 7542 rsa = event->rs->get_remote_arch_state (event->arch);
5cd63fda
PA
7543 }
7544
7545 packet_reg *reg
7546 = packet_reg_from_pnum (event->arch, rsa, pnum);
1f10ba14 7547 cached_reg_t cached_reg;
43ff13b4 7548
1f10ba14
PA
7549 if (reg == NULL)
7550 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 7551Packet: '%s'\n"),
1f10ba14 7552 hex_string (pnum), p, buf);
c8e38a49 7553
1f10ba14 7554 cached_reg.num = reg->regnum;
d1dff226 7555 cached_reg.data = (gdb_byte *)
5cd63fda 7556 xmalloc (register_size (event->arch, reg->regnum));
4100683b 7557
1f10ba14
PA
7558 p = p1 + 1;
7559 fieldsize = hex2bin (p, cached_reg.data,
5cd63fda 7560 register_size (event->arch, reg->regnum));
1f10ba14 7561 p += 2 * fieldsize;
5cd63fda 7562 if (fieldsize < register_size (event->arch, reg->regnum))
1f10ba14 7563 warning (_("Remote reply is too short: %s"), buf);
74531fed 7564
32603266 7565 event->regcache.push_back (cached_reg);
1f10ba14
PA
7566 }
7567 else
7568 {
7569 /* Not a number. Silently skip unknown optional
7570 info. */
8424cc97 7571 p = strchrnul (p1 + 1, ';');
1f10ba14 7572 }
cea39f65 7573 }
c8e38a49 7574
cea39f65
MS
7575 if (*p != ';')
7576 error (_("Remote register badly formatted: %s\nhere: %s"),
7577 buf, p);
7578 ++p;
7579 }
5b5596ff
PA
7580
7581 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7582 break;
7583
c8e38a49
PA
7584 /* fall through */
7585 case 'S': /* Old style status, just signal only. */
3a09da41
PA
7586 {
7587 int sig;
7588
7589 event->ws.kind = TARGET_WAITKIND_STOPPED;
7590 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7591 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7592 event->ws.value.sig = (enum gdb_signal) sig;
7593 else
7594 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7595 }
c8e38a49 7596 break;
65706a29
PA
7597 case 'w': /* Thread exited. */
7598 {
65706a29
PA
7599 ULONGEST value;
7600
7601 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7602 p = unpack_varlen_hex (&buf[1], &value);
7603 event->ws.value.integer = value;
7604 if (*p != ';')
7605 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 7606 event->ptid = read_ptid (++p, NULL);
65706a29
PA
7607 break;
7608 }
c8e38a49
PA
7609 case 'W': /* Target exited. */
7610 case 'X':
7611 {
c8e38a49 7612 ULONGEST value;
82f73884 7613
c8e38a49
PA
7614 /* GDB used to accept only 2 hex chars here. Stubs should
7615 only send more if they detect GDB supports multi-process
7616 support. */
7617 p = unpack_varlen_hex (&buf[1], &value);
82f73884 7618
c8e38a49
PA
7619 if (buf[0] == 'W')
7620 {
7621 /* The remote process exited. */
74531fed
PA
7622 event->ws.kind = TARGET_WAITKIND_EXITED;
7623 event->ws.value.integer = value;
c8e38a49
PA
7624 }
7625 else
7626 {
7627 /* The remote process exited with a signal. */
74531fed 7628 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
7629 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7630 event->ws.value.sig = (enum gdb_signal) value;
7631 else
7632 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 7633 }
82f73884 7634
e7af6c70
TBA
7635 /* If no process is specified, return null_ptid, and let the
7636 caller figure out the right process to use. */
7637 int pid = 0;
c8e38a49
PA
7638 if (*p == '\0')
7639 ;
7640 else if (*p == ';')
7641 {
7642 p++;
7643
0b24eb2d 7644 if (*p == '\0')
82f73884 7645 ;
61012eef 7646 else if (startswith (p, "process:"))
82f73884 7647 {
c8e38a49 7648 ULONGEST upid;
a744cf53 7649
c8e38a49
PA
7650 p += sizeof ("process:") - 1;
7651 unpack_varlen_hex (p, &upid);
7652 pid = upid;
82f73884
PA
7653 }
7654 else
7655 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 7656 }
c8e38a49
PA
7657 else
7658 error (_("unknown stop reply packet: %s"), buf);
f2907e49 7659 event->ptid = ptid_t (pid);
74531fed
PA
7660 }
7661 break;
f2faf941
PA
7662 case 'N':
7663 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7664 event->ptid = minus_one_ptid;
7665 break;
74531fed 7666 }
74531fed
PA
7667}
7668
722247f1
YQ
7669/* When the stub wants to tell GDB about a new notification reply, it
7670 sends a notification (%Stop, for example). Those can come it at
7671 any time, hence, we have to make sure that any pending
7672 putpkt/getpkt sequence we're making is finished, before querying
7673 the stub for more events with the corresponding ack command
7674 (vStopped, for example). E.g., if we started a vStopped sequence
7675 immediately upon receiving the notification, something like this
7676 could happen:
74531fed
PA
7677
7678 1.1) --> Hg 1
7679 1.2) <-- OK
7680 1.3) --> g
7681 1.4) <-- %Stop
7682 1.5) --> vStopped
7683 1.6) <-- (registers reply to step #1.3)
7684
7685 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7686 query.
7687
796cb314 7688 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
7689 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7690 doing whatever we were doing:
7691
7692 2.1) --> Hg 1
7693 2.2) <-- OK
7694 2.3) --> g
7695 2.4) <-- %Stop
7696 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7697 2.5) <-- (registers reply to step #2.3)
7698
85102364 7699 Eventually after step #2.5, we return to the event loop, which
74531fed
PA
7700 notices there's an event on the
7701 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7702 associated callback --- the function below. At this point, we're
7703 always safe to start a vStopped sequence. :
7704
7705 2.6) --> vStopped
7706 2.7) <-- T05 thread:2
7707 2.8) --> vStopped
7708 2.9) --> OK
7709*/
7710
722247f1 7711void
6b8edb51 7712remote_target::remote_notif_get_pending_events (notif_client *nc)
74531fed
PA
7713{
7714 struct remote_state *rs = get_remote_state ();
74531fed 7715
f48ff2a7 7716 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 7717 {
722247f1
YQ
7718 if (notif_debug)
7719 fprintf_unfiltered (gdb_stdlog,
7720 "notif: process: '%s' ack pending event\n",
7721 nc->name);
74531fed 7722
722247f1 7723 /* acknowledge */
8d64371b
TT
7724 nc->ack (this, nc, rs->buf.data (),
7725 rs->notif_state->pending_event[nc->id]);
f48ff2a7 7726 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
7727
7728 while (1)
7729 {
8d64371b
TT
7730 getpkt (&rs->buf, 0);
7731 if (strcmp (rs->buf.data (), "OK") == 0)
74531fed
PA
7732 break;
7733 else
8d64371b 7734 remote_notif_ack (this, nc, rs->buf.data ());
74531fed
PA
7735 }
7736 }
722247f1
YQ
7737 else
7738 {
7739 if (notif_debug)
7740 fprintf_unfiltered (gdb_stdlog,
7741 "notif: process: '%s' no pending reply\n",
7742 nc->name);
7743 }
74531fed
PA
7744}
7745
6b8edb51
PA
7746/* Wrapper around remote_target::remote_notif_get_pending_events to
7747 avoid having to export the whole remote_target class. */
7748
7749void
7750remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7751{
7752 remote->remote_notif_get_pending_events (nc);
7753}
7754
8f66807b
AB
7755/* Called from process_stop_reply when the stop packet we are responding
7756 to didn't include a process-id or thread-id. STATUS is the stop event
7757 we are responding to.
7758
7759 It is the task of this function to select a suitable thread (or process)
7760 and return its ptid, this is the thread (or process) we will assume the
7761 stop event came from.
7762
7763 In some cases there isn't really any choice about which thread (or
7764 process) is selected, a basic remote with a single process containing a
7765 single thread might choose not to send any process-id or thread-id in
7766 its stop packets, this function will select and return the one and only
7767 thread.
7768
7769 However, if a target supports multiple threads (or processes) and still
7770 doesn't include a thread-id (or process-id) in its stop packet then
7771 first, this is a badly behaving target, and second, we're going to have
7772 to select a thread (or process) at random and use that. This function
7773 will print a warning to the user if it detects that there is the
7774 possibility that GDB is guessing which thread (or process) to
7775 report.
7776
7777 Note that this is called before GDB fetches the updated thread list from the
7778 target. So it's possible for the stop reply to be ambiguous and for GDB to
7779 not realize it. For example, if there's initially one thread, the target
7780 spawns a second thread, and then sends a stop reply without an id that
7781 concerns the first thread. GDB will assume the stop reply is about the
7782 first thread - the only thread it knows about - without printing a warning.
7783 Anyway, if the remote meant for the stop reply to be about the second thread,
7784 then it would be really broken, because GDB doesn't know about that thread
7785 yet. */
74531fed 7786
6b8edb51 7787ptid_t
8f66807b
AB
7788remote_target::select_thread_for_ambiguous_stop_reply
7789 (const struct target_waitstatus *status)
74531fed 7790{
8f66807b
AB
7791 /* Some stop events apply to all threads in an inferior, while others
7792 only apply to a single thread. */
7793 bool process_wide_stop
7794 = (status->kind == TARGET_WAITKIND_EXITED
7795 || status->kind == TARGET_WAITKIND_SIGNALLED);
74531fed 7796
8f66807b
AB
7797 thread_info *first_resumed_thread = nullptr;
7798 bool ambiguous = false;
74531fed 7799
8f66807b
AB
7800 /* Consider all non-exited threads of the target, find the first resumed
7801 one. */
7802 for (thread_info *thr : all_non_exited_threads (this))
24ed6739 7803 {
8f66807b 7804 remote_thread_info *remote_thr = get_remote_thread_info (thr);
cada5fc9 7805
8f66807b
AB
7806 if (remote_thr->resume_state () != resume_state::RESUMED)
7807 continue;
24ed6739 7808
8f66807b
AB
7809 if (first_resumed_thread == nullptr)
7810 first_resumed_thread = thr;
7811 else if (!process_wide_stop
7812 || first_resumed_thread->ptid.pid () != thr->ptid.pid ())
7813 ambiguous = true;
7814 }
7815
7816 gdb_assert (first_resumed_thread != nullptr);
cada5fc9 7817
8f66807b
AB
7818 /* Warn if the remote target is sending ambiguous stop replies. */
7819 if (ambiguous)
7820 {
7821 static bool warned = false;
7822
7823 if (!warned)
7824 {
7825 /* If you are seeing this warning then the remote target has
7826 stopped without specifying a thread-id, but the target
7827 does have multiple threads (or inferiors), and so GDB is
7828 having to guess which thread stopped.
7829
7830 Examples of what might cause this are the target sending
7831 and 'S' stop packet, or a 'T' stop packet and not
7832 including a thread-id.
7833
7834 Additionally, the target might send a 'W' or 'X packet
7835 without including a process-id, when the target has
7836 multiple running inferiors. */
7837 if (process_wide_stop)
7838 warning (_("multi-inferior target stopped without "
7839 "sending a process-id, using first "
7840 "non-exited inferior"));
cada5fc9 7841 else
8f66807b
AB
7842 warning (_("multi-threaded target stopped without "
7843 "sending a thread-id, using first "
7844 "non-exited thread"));
7845 warned = true;
24ed6739 7846 }
24ed6739 7847 }
74531fed 7848
8f66807b
AB
7849 /* If this is a stop for all threads then don't use a particular threads
7850 ptid, instead create a new ptid where only the pid field is set. */
7851 if (process_wide_stop)
7852 return ptid_t (first_resumed_thread->ptid.pid ());
7853 else
7854 return first_resumed_thread->ptid;
7855}
7856
7857/* Called when it is decided that STOP_REPLY holds the info of the
7858 event that is to be returned to the core. This function always
7859 destroys STOP_REPLY. */
7860
7861ptid_t
7862remote_target::process_stop_reply (struct stop_reply *stop_reply,
7863 struct target_waitstatus *status)
7864{
7865 *status = stop_reply->ws;
7866 ptid_t ptid = stop_reply->ptid;
7867
7868 /* If no thread/process was reported by the stub then select a suitable
7869 thread/process. */
7870 if (ptid == null_ptid)
7871 ptid = select_thread_for_ambiguous_stop_reply (status);
7872 gdb_assert (ptid != null_ptid);
7873
5f3563ea 7874 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
7875 && status->kind != TARGET_WAITKIND_SIGNALLED
7876 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 7877 {
5f3563ea 7878 /* Expedited registers. */
32603266 7879 if (!stop_reply->regcache.empty ())
5f3563ea 7880 {
217f1f79 7881 struct regcache *regcache
5b6d1e4f 7882 = get_thread_arch_regcache (this, ptid, stop_reply->arch);
5f3563ea 7883
32603266
TT
7884 for (cached_reg_t &reg : stop_reply->regcache)
7885 {
7886 regcache->raw_supply (reg.num, reg.data);
7887 xfree (reg.data);
7888 }
d1dff226 7889
32603266 7890 stop_reply->regcache.clear ();
5f3563ea 7891 }
74531fed 7892
1941c569 7893 remote_notice_new_inferior (ptid, 0);
5b6d1e4f 7894 remote_thread_info *remote_thr = get_remote_thread_info (this, ptid);
799a2abe
PA
7895 remote_thr->core = stop_reply->core;
7896 remote_thr->stop_reason = stop_reply->stop_reason;
7897 remote_thr->watch_data_address = stop_reply->watch_data_address;
c9d22089
SM
7898
7899 if (target_is_non_stop_p ())
7900 {
7901 /* If the target works in non-stop mode, a stop-reply indicates that
7902 only this thread stopped. */
7903 remote_thr->set_not_resumed ();
7904 }
7905 else
7906 {
7907 /* If the target works in all-stop mode, a stop-reply indicates that
7908 all the target's threads stopped. */
7909 for (thread_info *tp : all_non_exited_threads (this))
7910 get_remote_thread_info (tp)->set_not_resumed ();
7911 }
74531fed
PA
7912 }
7913
32603266 7914 delete stop_reply;
74531fed
PA
7915 return ptid;
7916}
7917
7918/* The non-stop mode version of target_wait. */
7919
6b8edb51 7920ptid_t
b60cea74
TT
7921remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status,
7922 target_wait_flags options)
74531fed
PA
7923{
7924 struct remote_state *rs = get_remote_state ();
74531fed
PA
7925 struct stop_reply *stop_reply;
7926 int ret;
fee9eda9 7927 int is_notif = 0;
74531fed
PA
7928
7929 /* If in non-stop mode, get out of getpkt even if a
7930 notification is received. */
7931
8d64371b 7932 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
74531fed
PA
7933 while (1)
7934 {
fee9eda9 7935 if (ret != -1 && !is_notif)
74531fed
PA
7936 switch (rs->buf[0])
7937 {
7938 case 'E': /* Error of some sort. */
7939 /* We're out of sync with the target now. Did it continue
7940 or not? We can't tell which thread it was in non-stop,
7941 so just ignore this. */
8d64371b 7942 warning (_("Remote failure reply: %s"), rs->buf.data ());
74531fed
PA
7943 break;
7944 case 'O': /* Console output. */
8d64371b 7945 remote_console_output (&rs->buf[1]);
74531fed
PA
7946 break;
7947 default:
8d64371b 7948 warning (_("Invalid remote reply: %s"), rs->buf.data ());
74531fed
PA
7949 break;
7950 }
7951
7952 /* Acknowledge a pending stop reply that may have arrived in the
7953 mean time. */
f48ff2a7 7954 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 7955 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
7956
7957 /* If indeed we noticed a stop reply, we're done. */
7958 stop_reply = queued_stop_reply (ptid);
7959 if (stop_reply != NULL)
7960 return process_stop_reply (stop_reply, status);
7961
47608cb1 7962 /* Still no event. If we're just polling for an event, then
74531fed 7963 return to the event loop. */
47608cb1 7964 if (options & TARGET_WNOHANG)
74531fed
PA
7965 {
7966 status->kind = TARGET_WAITKIND_IGNORE;
7967 return minus_one_ptid;
7968 }
7969
47608cb1 7970 /* Otherwise do a blocking wait. */
8d64371b 7971 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
74531fed
PA
7972 }
7973}
7974
31ba933e
PA
7975/* Return the first resumed thread. */
7976
7977static ptid_t
5b6d1e4f 7978first_remote_resumed_thread (remote_target *target)
31ba933e 7979{
5b6d1e4f 7980 for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid))
31ba933e
PA
7981 if (tp->resumed)
7982 return tp->ptid;
7983 return null_ptid;
7984}
7985
74531fed
PA
7986/* Wait until the remote machine stops, then return, storing status in
7987 STATUS just as `wait' would. */
7988
6b8edb51 7989ptid_t
b60cea74
TT
7990remote_target::wait_as (ptid_t ptid, target_waitstatus *status,
7991 target_wait_flags options)
74531fed
PA
7992{
7993 struct remote_state *rs = get_remote_state ();
74531fed 7994 ptid_t event_ptid = null_ptid;
cea39f65 7995 char *buf;
74531fed
PA
7996 struct stop_reply *stop_reply;
7997
47608cb1
PA
7998 again:
7999
74531fed
PA
8000 status->kind = TARGET_WAITKIND_IGNORE;
8001 status->value.integer = 0;
8002
8003 stop_reply = queued_stop_reply (ptid);
8004 if (stop_reply != NULL)
8005 return process_stop_reply (stop_reply, status);
8006
8007 if (rs->cached_wait_status)
8008 /* Use the cached wait status, but only once. */
8009 rs->cached_wait_status = 0;
8010 else
8011 {
8012 int ret;
722247f1 8013 int is_notif;
567420d1 8014 int forever = ((options & TARGET_WNOHANG) == 0
6b8edb51 8015 && rs->wait_forever_enabled_p);
567420d1
PA
8016
8017 if (!rs->waiting_for_stop_reply)
8018 {
8019 status->kind = TARGET_WAITKIND_NO_RESUMED;
8020 return minus_one_ptid;
8021 }
74531fed 8022
74531fed
PA
8023 /* FIXME: cagney/1999-09-27: If we're in async mode we should
8024 _never_ wait for ever -> test on target_is_async_p().
8025 However, before we do that we need to ensure that the caller
8026 knows how to take the target into/out of async mode. */
8d64371b 8027 ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
722247f1
YQ
8028
8029 /* GDB gets a notification. Return to core as this event is
8030 not interesting. */
8031 if (ret != -1 && is_notif)
8032 return minus_one_ptid;
567420d1
PA
8033
8034 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
8035 return minus_one_ptid;
74531fed
PA
8036 }
8037
8d64371b 8038 buf = rs->buf.data ();
74531fed 8039
3a29589a
DJ
8040 /* Assume that the target has acknowledged Ctrl-C unless we receive
8041 an 'F' or 'O' packet. */
8042 if (buf[0] != 'F' && buf[0] != 'O')
8043 rs->ctrlc_pending_p = 0;
8044
74531fed
PA
8045 switch (buf[0])
8046 {
8047 case 'E': /* Error of some sort. */
8048 /* We're out of sync with the target now. Did it continue or
8049 not? Not is more likely, so report a stop. */
29090fb6
LM
8050 rs->waiting_for_stop_reply = 0;
8051
74531fed
PA
8052 warning (_("Remote failure reply: %s"), buf);
8053 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 8054 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
8055 break;
8056 case 'F': /* File-I/O request. */
e42e5352
YQ
8057 /* GDB may access the inferior memory while handling the File-I/O
8058 request, but we don't want GDB accessing memory while waiting
8059 for a stop reply. See the comments in putpkt_binary. Set
8060 waiting_for_stop_reply to 0 temporarily. */
8061 rs->waiting_for_stop_reply = 0;
6b8edb51 8062 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
3a29589a 8063 rs->ctrlc_pending_p = 0;
e42e5352
YQ
8064 /* GDB handled the File-I/O request, and the target is running
8065 again. Keep waiting for events. */
8066 rs->waiting_for_stop_reply = 1;
74531fed 8067 break;
f2faf941 8068 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 8069 {
29090fb6
LM
8070 /* There is a stop reply to handle. */
8071 rs->waiting_for_stop_reply = 0;
8072
8073 stop_reply
6b8edb51
PA
8074 = (struct stop_reply *) remote_notif_parse (this,
8075 &notif_client_stop,
8d64371b 8076 rs->buf.data ());
74531fed 8077
74531fed 8078 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
8079 break;
8080 }
8081 case 'O': /* Console output. */
8082 remote_console_output (buf + 1);
c8e38a49
PA
8083 break;
8084 case '\0':
b73be471 8085 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
8086 {
8087 /* Zero length reply means that we tried 'S' or 'C' and the
8088 remote system doesn't support it. */
223ffa71 8089 target_terminal::ours_for_output ();
c8e38a49
PA
8090 printf_filtered
8091 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
8092 gdb_signal_to_name (rs->last_sent_signal));
8093 rs->last_sent_signal = GDB_SIGNAL_0;
223ffa71 8094 target_terminal::inferior ();
c8e38a49 8095
f5c4fcd9
TT
8096 strcpy (buf, rs->last_sent_step ? "s" : "c");
8097 putpkt (buf);
c8e38a49 8098 break;
43ff13b4 8099 }
86a73007 8100 /* fallthrough */
c8e38a49
PA
8101 default:
8102 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 8103 break;
43ff13b4 8104 }
c8e38a49 8105
f2faf941
PA
8106 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
8107 return minus_one_ptid;
8108 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
8109 {
8110 /* Nothing interesting happened. If we're doing a non-blocking
8111 poll, we're done. Otherwise, go back to waiting. */
8112 if (options & TARGET_WNOHANG)
8113 return minus_one_ptid;
8114 else
8115 goto again;
8116 }
74531fed
PA
8117 else if (status->kind != TARGET_WAITKIND_EXITED
8118 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884 8119 {
d7e15655 8120 if (event_ptid != null_ptid)
47f8a51d 8121 record_currthread (rs, event_ptid);
82f73884 8122 else
5b6d1e4f 8123 event_ptid = first_remote_resumed_thread (this);
43ff13b4 8124 }
74531fed 8125 else
e7af6c70
TBA
8126 {
8127 /* A process exit. Invalidate our notion of current thread. */
8128 record_currthread (rs, minus_one_ptid);
8129 /* It's possible that the packet did not include a pid. */
8130 if (event_ptid == null_ptid)
5b6d1e4f 8131 event_ptid = first_remote_resumed_thread (this);
e7af6c70
TBA
8132 /* EVENT_PTID could still be NULL_PTID. Double-check. */
8133 if (event_ptid == null_ptid)
8134 event_ptid = magic_null_ptid;
8135 }
79d7f229 8136
82f73884 8137 return event_ptid;
43ff13b4
JM
8138}
8139
74531fed
PA
8140/* Wait until the remote machine stops, then return, storing status in
8141 STATUS just as `wait' would. */
8142
f6ac5f3d 8143ptid_t
b60cea74
TT
8144remote_target::wait (ptid_t ptid, struct target_waitstatus *status,
8145 target_wait_flags options)
c8e38a49
PA
8146{
8147 ptid_t event_ptid;
8148
6efcd9a8 8149 if (target_is_non_stop_p ())
6b8edb51 8150 event_ptid = wait_ns (ptid, status, options);
74531fed 8151 else
6b8edb51 8152 event_ptid = wait_as (ptid, status, options);
c8e38a49 8153
d9d41e78 8154 if (target_is_async_p ())
c8e38a49 8155 {
6b8edb51
PA
8156 remote_state *rs = get_remote_state ();
8157
74531fed
PA
8158 /* If there are are events left in the queue tell the event loop
8159 to return here. */
953edf2b 8160 if (!rs->stop_reply_queue.empty ())
6b8edb51 8161 mark_async_event_handler (rs->remote_async_inferior_event_token);
c8e38a49 8162 }
c8e38a49
PA
8163
8164 return event_ptid;
8165}
8166
74ca34ce 8167/* Fetch a single register using a 'p' packet. */
c906108c 8168
6b8edb51
PA
8169int
8170remote_target::fetch_register_using_p (struct regcache *regcache,
8171 packet_reg *reg)
b96ec7ac 8172{
ac7936df 8173 struct gdbarch *gdbarch = regcache->arch ();
b96ec7ac 8174 struct remote_state *rs = get_remote_state ();
2e9f7625 8175 char *buf, *p;
9890e433 8176 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
b96ec7ac
AC
8177 int i;
8178
4082afcc 8179 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
8180 return 0;
8181
8182 if (reg->pnum == -1)
8183 return 0;
8184
8d64371b 8185 p = rs->buf.data ();
fcad0fa4 8186 *p++ = 'p';
74ca34ce 8187 p += hexnumstr (p, reg->pnum);
fcad0fa4 8188 *p++ = '\0';
1f4437a4 8189 putpkt (rs->buf);
8d64371b 8190 getpkt (&rs->buf, 0);
3f9a994c 8191
8d64371b 8192 buf = rs->buf.data ();
2e9f7625 8193
8d64371b 8194 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
74ca34ce
DJ
8195 {
8196 case PACKET_OK:
8197 break;
8198 case PACKET_UNKNOWN:
8199 return 0;
8200 case PACKET_ERROR:
27a9c0bf 8201 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
ac7936df 8202 gdbarch_register_name (regcache->arch (),
27a9c0bf
MS
8203 reg->regnum),
8204 buf);
74ca34ce 8205 }
3f9a994c
JB
8206
8207 /* If this register is unfetchable, tell the regcache. */
8208 if (buf[0] == 'x')
8480adf2 8209 {
73e1c03f 8210 regcache->raw_supply (reg->regnum, NULL);
8480adf2 8211 return 1;
b96ec7ac 8212 }
b96ec7ac 8213
3f9a994c
JB
8214 /* Otherwise, parse and supply the value. */
8215 p = buf;
8216 i = 0;
8217 while (p[0] != 0)
8218 {
8219 if (p[1] == 0)
74ca34ce 8220 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
8221
8222 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
8223 p += 2;
8224 }
73e1c03f 8225 regcache->raw_supply (reg->regnum, regp);
3f9a994c 8226 return 1;
b96ec7ac
AC
8227}
8228
74ca34ce
DJ
8229/* Fetch the registers included in the target's 'g' packet. */
8230
6b8edb51
PA
8231int
8232remote_target::send_g_packet ()
c906108c 8233{
d01949b6 8234 struct remote_state *rs = get_remote_state ();
cea39f65 8235 int buf_len;
c906108c 8236
8d64371b 8237 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
b75abf5b 8238 putpkt (rs->buf);
8d64371b 8239 getpkt (&rs->buf, 0);
b75abf5b
AK
8240 if (packet_check_result (rs->buf) == PACKET_ERROR)
8241 error (_("Could not read registers; remote failure reply '%s'"),
dda83cd7 8242 rs->buf.data ());
c906108c 8243
29709017
DJ
8244 /* We can get out of synch in various cases. If the first character
8245 in the buffer is not a hex character, assume that has happened
8246 and try to fetch another packet to read. */
8247 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
8248 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
8249 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
8250 && rs->buf[0] != 'x') /* New: unavailable register value. */
8251 {
8252 if (remote_debug)
8253 fprintf_unfiltered (gdb_stdlog,
8254 "Bad register packet; fetching a new packet\n");
8d64371b 8255 getpkt (&rs->buf, 0);
29709017
DJ
8256 }
8257
8d64371b 8258 buf_len = strlen (rs->buf.data ());
74ca34ce
DJ
8259
8260 /* Sanity check the received packet. */
8261 if (buf_len % 2 != 0)
8d64371b 8262 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
29709017
DJ
8263
8264 return buf_len / 2;
8265}
8266
6b8edb51
PA
8267void
8268remote_target::process_g_packet (struct regcache *regcache)
29709017 8269{
ac7936df 8270 struct gdbarch *gdbarch = regcache->arch ();
29709017 8271 struct remote_state *rs = get_remote_state ();
9d6eea31 8272 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
29709017
DJ
8273 int i, buf_len;
8274 char *p;
8275 char *regs;
8276
8d64371b 8277 buf_len = strlen (rs->buf.data ());
29709017
DJ
8278
8279 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce 8280 if (buf_len > 2 * rsa->sizeof_g_packet)
fc809827 8281 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8d64371b
TT
8282 "bytes): %s"),
8283 rsa->sizeof_g_packet, buf_len / 2,
8284 rs->buf.data ());
74ca34ce
DJ
8285
8286 /* Save the size of the packet sent to us by the target. It is used
8287 as a heuristic when determining the max size of packets that the
8288 target can safely receive. */
8289 if (rsa->actual_register_packet_size == 0)
8290 rsa->actual_register_packet_size = buf_len;
8291
8292 /* If this is smaller than we guessed the 'g' packet would be,
8293 update our records. A 'g' reply that doesn't include a register's
8294 value implies either that the register is not available, or that
8295 the 'p' packet must be used. */
8296 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 8297 {
9dc193c3 8298 long sizeof_g_packet = buf_len / 2;
74ca34ce 8299
4a22f64d 8300 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 8301 {
9dc193c3
LF
8302 long offset = rsa->regs[i].offset;
8303 long reg_size = register_size (gdbarch, i);
8304
74ca34ce
DJ
8305 if (rsa->regs[i].pnum == -1)
8306 continue;
8307
9dc193c3 8308 if (offset >= sizeof_g_packet)
74ca34ce 8309 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
8310 else if (offset + reg_size > sizeof_g_packet)
8311 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 8312 else
74ca34ce 8313 rsa->regs[i].in_g_packet = 1;
b96ec7ac 8314 }
9dc193c3
LF
8315
8316 /* Looks valid enough, we can assume this is the correct length
dda83cd7
SM
8317 for a 'g' packet. It's important not to adjust
8318 rsa->sizeof_g_packet if we have truncated registers otherwise
8319 this "if" won't be run the next time the method is called
8320 with a packet of the same size and one of the internal errors
8321 below will trigger instead. */
9dc193c3 8322 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 8323 }
b323314b 8324
224c3ddb 8325 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
8326
8327 /* Unimplemented registers read as all bits zero. */
ea9c271d 8328 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 8329
c906108c
SS
8330 /* Reply describes registers byte by byte, each byte encoded as two
8331 hex characters. Suck them all up, then supply them to the
8332 register cacheing/storage mechanism. */
8333
8d64371b 8334 p = rs->buf.data ();
ea9c271d 8335 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 8336 {
74ca34ce
DJ
8337 if (p[0] == 0 || p[1] == 0)
8338 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8339 internal_error (__FILE__, __LINE__,
9b20d036 8340 _("unexpected end of 'g' packet reply"));
74ca34ce 8341
c906108c 8342 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 8343 regs[i] = 0; /* 'x' */
c906108c
SS
8344 else
8345 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8346 p += 2;
8347 }
8348
a744cf53
MS
8349 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8350 {
8351 struct packet_reg *r = &rsa->regs[i];
9dc193c3 8352 long reg_size = register_size (gdbarch, i);
a744cf53
MS
8353
8354 if (r->in_g_packet)
8355 {
8d64371b 8356 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
a744cf53
MS
8357 /* This shouldn't happen - we adjusted in_g_packet above. */
8358 internal_error (__FILE__, __LINE__,
9b20d036 8359 _("unexpected end of 'g' packet reply"));
a744cf53
MS
8360 else if (rs->buf[r->offset * 2] == 'x')
8361 {
8d64371b 8362 gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
a744cf53
MS
8363 /* The register isn't available, mark it as such (at
8364 the same time setting the value to zero). */
73e1c03f 8365 regcache->raw_supply (r->regnum, NULL);
a744cf53
MS
8366 }
8367 else
73e1c03f 8368 regcache->raw_supply (r->regnum, regs + r->offset);
a744cf53
MS
8369 }
8370 }
c906108c
SS
8371}
8372
6b8edb51
PA
8373void
8374remote_target::fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
8375{
8376 send_g_packet ();
56be3814 8377 process_g_packet (regcache);
29709017
DJ
8378}
8379
e6e4e701
PA
8380/* Make the remote selected traceframe match GDB's selected
8381 traceframe. */
8382
6b8edb51
PA
8383void
8384remote_target::set_remote_traceframe ()
e6e4e701
PA
8385{
8386 int newnum;
262e1174 8387 struct remote_state *rs = get_remote_state ();
e6e4e701 8388
262e1174 8389 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
8390 return;
8391
8392 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 8393 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
8394
8395 newnum = target_trace_find (tfind_number,
8396 get_traceframe_number (), 0, 0, NULL);
8397
8398 /* Should not happen. If it does, all bets are off. */
8399 if (newnum != get_traceframe_number ())
8400 warning (_("could not set remote traceframe"));
8401}
8402
f6ac5f3d
PA
8403void
8404remote_target::fetch_registers (struct regcache *regcache, int regnum)
74ca34ce 8405{
ac7936df 8406 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8407 struct remote_state *rs = get_remote_state ();
8408 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8409 int i;
8410
e6e4e701 8411 set_remote_traceframe ();
222312d3 8412 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8413
8414 if (regnum >= 0)
8415 {
5cd63fda 8416 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8417
74ca34ce
DJ
8418 gdb_assert (reg != NULL);
8419
8420 /* If this register might be in the 'g' packet, try that first -
8421 we are likely to read more than one register. If this is the
8422 first 'g' packet, we might be overly optimistic about its
8423 contents, so fall back to 'p'. */
8424 if (reg->in_g_packet)
8425 {
56be3814 8426 fetch_registers_using_g (regcache);
74ca34ce
DJ
8427 if (reg->in_g_packet)
8428 return;
8429 }
8430
56be3814 8431 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
8432 return;
8433
8434 /* This register is not available. */
73e1c03f 8435 regcache->raw_supply (reg->regnum, NULL);
74ca34ce
DJ
8436
8437 return;
8438 }
8439
56be3814 8440 fetch_registers_using_g (regcache);
74ca34ce 8441
5cd63fda 8442 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8443 if (!rsa->regs[i].in_g_packet)
56be3814 8444 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
8445 {
8446 /* This register is not available. */
73e1c03f 8447 regcache->raw_supply (i, NULL);
74ca34ce
DJ
8448 }
8449}
8450
c906108c
SS
8451/* Prepare to store registers. Since we may send them all (using a
8452 'G' request), we have to read out the ones we don't want to change
8453 first. */
8454
f6ac5f3d
PA
8455void
8456remote_target::prepare_to_store (struct regcache *regcache)
c906108c 8457{
9d6eea31
PA
8458 struct remote_state *rs = get_remote_state ();
8459 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cf0e1e0d 8460 int i;
cf0e1e0d 8461
c906108c 8462 /* Make sure the entire registers array is valid. */
4082afcc 8463 switch (packet_support (PACKET_P))
5a2468f5
JM
8464 {
8465 case PACKET_DISABLE:
8466 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 8467 /* Make sure all the necessary registers are cached. */
ac7936df 8468 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
ea9c271d 8469 if (rsa->regs[i].in_g_packet)
0b47d985 8470 regcache->raw_update (rsa->regs[i].regnum);
5a2468f5
JM
8471 break;
8472 case PACKET_ENABLE:
8473 break;
8474 }
8475}
8476
ad10f812 8477/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 8478 packet was not recognized. */
5a2468f5 8479
6b8edb51
PA
8480int
8481remote_target::store_register_using_P (const struct regcache *regcache,
8482 packet_reg *reg)
5a2468f5 8483{
ac7936df 8484 struct gdbarch *gdbarch = regcache->arch ();
d01949b6 8485 struct remote_state *rs = get_remote_state ();
5a2468f5 8486 /* Try storing a single register. */
8d64371b 8487 char *buf = rs->buf.data ();
9890e433 8488 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 8489 char *p;
5a2468f5 8490
4082afcc 8491 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
8492 return 0;
8493
8494 if (reg->pnum == -1)
8495 return 0;
8496
ea9c271d 8497 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 8498 p = buf + strlen (buf);
34a79281 8499 regcache->raw_collect (reg->regnum, regp);
4a22f64d 8500 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4 8501 putpkt (rs->buf);
8d64371b 8502 getpkt (&rs->buf, 0);
5a2468f5 8503
74ca34ce
DJ
8504 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8505 {
8506 case PACKET_OK:
8507 return 1;
8508 case PACKET_ERROR:
27a9c0bf 8509 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8d64371b 8510 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
74ca34ce
DJ
8511 case PACKET_UNKNOWN:
8512 return 0;
8513 default:
8514 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8515 }
c906108c
SS
8516}
8517
23860348
MS
8518/* Store register REGNUM, or all registers if REGNUM == -1, from the
8519 contents of the register cache buffer. FIXME: ignores errors. */
c906108c 8520
6b8edb51
PA
8521void
8522remote_target::store_registers_using_G (const struct regcache *regcache)
c906108c 8523{
d01949b6 8524 struct remote_state *rs = get_remote_state ();
9d6eea31 8525 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cfd77fa1 8526 gdb_byte *regs;
c906108c
SS
8527 char *p;
8528
193cb69f
AC
8529 /* Extract all the registers in the regcache copying them into a
8530 local buffer. */
8531 {
b323314b 8532 int i;
a744cf53 8533
224c3ddb 8534 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 8535 memset (regs, 0, rsa->sizeof_g_packet);
ac7936df 8536 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
193cb69f 8537 {
ea9c271d 8538 struct packet_reg *r = &rsa->regs[i];
a744cf53 8539
b323314b 8540 if (r->in_g_packet)
34a79281 8541 regcache->raw_collect (r->regnum, regs + r->offset);
193cb69f
AC
8542 }
8543 }
c906108c
SS
8544
8545 /* Command describes registers byte by byte,
8546 each byte encoded as two hex characters. */
8d64371b 8547 p = rs->buf.data ();
193cb69f 8548 *p++ = 'G';
74ca34ce 8549 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4 8550 putpkt (rs->buf);
8d64371b 8551 getpkt (&rs->buf, 0);
1f4437a4 8552 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf 8553 error (_("Could not write registers; remote failure reply '%s'"),
8d64371b 8554 rs->buf.data ());
c906108c 8555}
74ca34ce
DJ
8556
8557/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8558 of the register cache buffer. FIXME: ignores errors. */
8559
f6ac5f3d
PA
8560void
8561remote_target::store_registers (struct regcache *regcache, int regnum)
74ca34ce 8562{
5cd63fda 8563 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8564 struct remote_state *rs = get_remote_state ();
8565 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8566 int i;
8567
e6e4e701 8568 set_remote_traceframe ();
222312d3 8569 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8570
8571 if (regnum >= 0)
8572 {
5cd63fda 8573 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8574
74ca34ce
DJ
8575 gdb_assert (reg != NULL);
8576
8577 /* Always prefer to store registers using the 'P' packet if
8578 possible; we often change only a small number of registers.
8579 Sometimes we change a larger number; we'd need help from a
8580 higher layer to know to use 'G'. */
56be3814 8581 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
8582 return;
8583
8584 /* For now, don't complain if we have no way to write the
8585 register. GDB loses track of unavailable registers too
8586 easily. Some day, this may be an error. We don't have
0df8b418 8587 any way to read the register, either... */
74ca34ce
DJ
8588 if (!reg->in_g_packet)
8589 return;
8590
56be3814 8591 store_registers_using_G (regcache);
74ca34ce
DJ
8592 return;
8593 }
8594
56be3814 8595 store_registers_using_G (regcache);
74ca34ce 8596
5cd63fda 8597 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8598 if (!rsa->regs[i].in_g_packet)
56be3814 8599 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
8600 /* See above for why we do not issue an error here. */
8601 continue;
8602}
c906108c
SS
8603\f
8604
8605/* Return the number of hex digits in num. */
8606
8607static int
fba45db2 8608hexnumlen (ULONGEST num)
c906108c
SS
8609{
8610 int i;
8611
8612 for (i = 0; num != 0; i++)
8613 num >>= 4;
8614
325fac50 8615 return std::max (i, 1);
c906108c
SS
8616}
8617
2df3850c 8618/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
8619
8620static int
fba45db2 8621hexnumstr (char *buf, ULONGEST num)
c906108c 8622{
c906108c 8623 int len = hexnumlen (num);
a744cf53 8624
2df3850c
JM
8625 return hexnumnstr (buf, num, len);
8626}
8627
c906108c 8628
2df3850c 8629/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 8630
2df3850c 8631static int
fba45db2 8632hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
8633{
8634 int i;
8635
8636 buf[width] = '\0';
8637
8638 for (i = width - 1; i >= 0; i--)
c906108c 8639 {
c5aa993b 8640 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
8641 num >>= 4;
8642 }
8643
2df3850c 8644 return width;
c906108c
SS
8645}
8646
23860348 8647/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
8648
8649static CORE_ADDR
fba45db2 8650remote_address_masked (CORE_ADDR addr)
c906108c 8651{
883b9c6c 8652 unsigned int address_size = remote_address_size;
a744cf53 8653
911c95a5
UW
8654 /* If "remoteaddresssize" was not set, default to target address size. */
8655 if (!address_size)
f5656ead 8656 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
8657
8658 if (address_size > 0
8659 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
8660 {
8661 /* Only create a mask when that mask can safely be constructed
dda83cd7 8662 in a ULONGEST variable. */
c906108c 8663 ULONGEST mask = 1;
a744cf53 8664
911c95a5 8665 mask = (mask << address_size) - 1;
c906108c
SS
8666 addr &= mask;
8667 }
8668 return addr;
8669}
8670
8671/* Determine whether the remote target supports binary downloading.
8672 This is accomplished by sending a no-op memory write of zero length
8673 to the target at the specified address. It does not suffice to send
23860348
MS
8674 the whole packet, since many stubs strip the eighth bit and
8675 subsequently compute a wrong checksum, which causes real havoc with
8676 remote_write_bytes.
7a292a7a 8677
96baa820 8678 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 8679 clean. In cases like this, the user should clear "remote
23860348 8680 X-packet". */
96baa820 8681
6b8edb51
PA
8682void
8683remote_target::check_binary_download (CORE_ADDR addr)
c906108c 8684{
d01949b6 8685 struct remote_state *rs = get_remote_state ();
24b06219 8686
4082afcc 8687 switch (packet_support (PACKET_X))
c906108c 8688 {
96baa820
JM
8689 case PACKET_DISABLE:
8690 break;
8691 case PACKET_ENABLE:
8692 break;
8693 case PACKET_SUPPORT_UNKNOWN:
8694 {
96baa820 8695 char *p;
802188a7 8696
8d64371b 8697 p = rs->buf.data ();
96baa820
JM
8698 *p++ = 'X';
8699 p += hexnumstr (p, (ULONGEST) addr);
8700 *p++ = ',';
8701 p += hexnumstr (p, (ULONGEST) 0);
8702 *p++ = ':';
8703 *p = '\0';
802188a7 8704
8d64371b
TT
8705 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8706 getpkt (&rs->buf, 0);
c906108c 8707
2e9f7625 8708 if (rs->buf[0] == '\0')
96baa820
JM
8709 {
8710 if (remote_debug)
8711 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8712 "binary downloading NOT "
8713 "supported by target\n");
444abaca 8714 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8715 }
8716 else
8717 {
8718 if (remote_debug)
8719 fprintf_unfiltered (gdb_stdlog,
64b9b334 8720 "binary downloading supported by target\n");
444abaca 8721 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8722 }
8723 break;
8724 }
c906108c
SS
8725 }
8726}
8727
124e13d9
SM
8728/* Helper function to resize the payload in order to try to get a good
8729 alignment. We try to write an amount of data such that the next write will
8730 start on an address aligned on REMOTE_ALIGN_WRITES. */
8731
8732static int
8733align_for_efficient_write (int todo, CORE_ADDR memaddr)
8734{
8735 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8736}
8737
c906108c
SS
8738/* Write memory data directly to the remote machine.
8739 This does not inform the data cache; the data cache uses this.
a76d924d 8740 HEADER is the starting part of the packet.
c906108c
SS
8741 MEMADDR is the address in the remote memory space.
8742 MYADDR is the address of the buffer in our space.
124e13d9
SM
8743 LEN_UNITS is the number of addressable units to write.
8744 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8745 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8746 should send data as binary ('X'), or hex-encoded ('M').
8747
8748 The function creates packet of the form
8749 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8750
124e13d9 8751 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8752
8753 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8754 are omitted.
8755
9b409511 8756 Return the transferred status, error or OK (an
124e13d9
SM
8757 'enum target_xfer_status' value). Save the number of addressable units
8758 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8759
8760 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8761 exchange between gdb and the stub could look like (?? in place of the
8762 checksum):
8763
8764 -> $m1000,4#??
8765 <- aaaabbbbccccdddd
8766
8767 -> $M1000,3:eeeeffffeeee#??
8768 <- OK
8769
8770 -> $m1000,4#??
8771 <- eeeeffffeeeedddd */
c906108c 8772
6b8edb51
PA
8773target_xfer_status
8774remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8775 const gdb_byte *myaddr,
8776 ULONGEST len_units,
8777 int unit_size,
8778 ULONGEST *xfered_len_units,
8779 char packet_format, int use_length)
c906108c 8780{
6d820c5c 8781 struct remote_state *rs = get_remote_state ();
cfd77fa1 8782 char *p;
a76d924d
DJ
8783 char *plen = NULL;
8784 int plenlen = 0;
124e13d9
SM
8785 int todo_units;
8786 int units_written;
8787 int payload_capacity_bytes;
8788 int payload_length_bytes;
a76d924d
DJ
8789
8790 if (packet_format != 'X' && packet_format != 'M')
8791 internal_error (__FILE__, __LINE__,
9b20d036 8792 _("remote_write_bytes_aux: bad packet format"));
c906108c 8793
124e13d9 8794 if (len_units == 0)
9b409511 8795 return TARGET_XFER_EOF;
b2182ed2 8796
124e13d9 8797 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8798
6d820c5c
DJ
8799 /* The packet buffer will be large enough for the payload;
8800 get_memory_packet_size ensures this. */
a76d924d 8801 rs->buf[0] = '\0';
c906108c 8802
a257b5bb 8803 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8804 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8805
124e13d9 8806 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8807 if (!use_length)
0df8b418 8808 /* The comma won't be used. */
124e13d9
SM
8809 payload_capacity_bytes += 1;
8810 payload_capacity_bytes -= strlen (header);
8811 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8812
a76d924d 8813 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8814
8d64371b
TT
8815 strcat (rs->buf.data (), header);
8816 p = rs->buf.data () + strlen (header);
a76d924d
DJ
8817
8818 /* Compute a best guess of the number of bytes actually transfered. */
8819 if (packet_format == 'X')
c906108c 8820 {
23860348 8821 /* Best guess at number of bytes that will fit. */
325fac50
PA
8822 todo_units = std::min (len_units,
8823 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8824 if (use_length)
124e13d9 8825 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8826 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8827 }
8828 else
8829 {
124e13d9 8830 /* Number of bytes that will fit. */
325fac50
PA
8831 todo_units
8832 = std::min (len_units,
8833 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8834 if (use_length)
124e13d9 8835 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8836 todo_units = std::min (todo_units,
8837 (payload_capacity_bytes / unit_size) / 2);
917317f4 8838 }
a76d924d 8839
124e13d9 8840 if (todo_units <= 0)
3de11b2e 8841 internal_error (__FILE__, __LINE__,
405f8e94 8842 _("minimum packet size too small to write data"));
802188a7 8843
6765f3e5
DJ
8844 /* If we already need another packet, then try to align the end
8845 of this packet to a useful boundary. */
124e13d9
SM
8846 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8847 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8848
a257b5bb 8849 /* Append "<memaddr>". */
917317f4
JM
8850 memaddr = remote_address_masked (memaddr);
8851 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8852
a76d924d
DJ
8853 if (use_length)
8854 {
8855 /* Append ",". */
8856 *p++ = ',';
802188a7 8857
124e13d9 8858 /* Append the length and retain its location and size. It may need to be
dda83cd7 8859 adjusted once the packet body has been created. */
a76d924d 8860 plen = p;
124e13d9 8861 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8862 p += plenlen;
8863 }
a257b5bb
AC
8864
8865 /* Append ":". */
917317f4
JM
8866 *p++ = ':';
8867 *p = '\0';
802188a7 8868
a257b5bb 8869 /* Append the packet body. */
a76d924d 8870 if (packet_format == 'X')
917317f4 8871 {
917317f4
JM
8872 /* Binary mode. Send target system values byte by byte, in
8873 increasing byte addresses. Only escape certain critical
8874 characters. */
124e13d9
SM
8875 payload_length_bytes =
8876 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8877 &units_written, payload_capacity_bytes);
6765f3e5 8878
124e13d9 8879 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8880 a second try to keep the end of the packet aligned. Don't do
8881 this if the packet is tiny. */
124e13d9 8882 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8883 {
124e13d9
SM
8884 int new_todo_units;
8885
8886 new_todo_units = align_for_efficient_write (units_written, memaddr);
8887
8888 if (new_todo_units != units_written)
8889 payload_length_bytes =
8890 remote_escape_output (myaddr, new_todo_units, unit_size,
8891 (gdb_byte *) p, &units_written,
8892 payload_capacity_bytes);
6765f3e5
DJ
8893 }
8894
124e13d9
SM
8895 p += payload_length_bytes;
8896 if (use_length && units_written < todo_units)
c906108c 8897 {
802188a7 8898 /* Escape chars have filled up the buffer prematurely,
124e13d9 8899 and we have actually sent fewer units than planned.
917317f4
JM
8900 Fix-up the length field of the packet. Use the same
8901 number of characters as before. */
124e13d9
SM
8902 plen += hexnumnstr (plen, (ULONGEST) units_written,
8903 plenlen);
917317f4 8904 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8905 }
a76d924d
DJ
8906 }
8907 else
8908 {
917317f4
JM
8909 /* Normal mode: Send target system values byte by byte, in
8910 increasing byte addresses. Each byte is encoded as a two hex
8911 value. */
124e13d9
SM
8912 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8913 units_written = todo_units;
c906108c 8914 }
802188a7 8915
8d64371b
TT
8916 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8917 getpkt (&rs->buf, 0);
802188a7 8918
2e9f7625 8919 if (rs->buf[0] == 'E')
00d84524 8920 return TARGET_XFER_E_IO;
802188a7 8921
124e13d9
SM
8922 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8923 send fewer units than we'd planned. */
8924 *xfered_len_units = (ULONGEST) units_written;
92ffd475 8925 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
8926}
8927
a76d924d
DJ
8928/* Write memory data directly to the remote machine.
8929 This does not inform the data cache; the data cache uses this.
8930 MEMADDR is the address in the remote memory space.
8931 MYADDR is the address of the buffer in our space.
8932 LEN is the number of bytes.
8933
9b409511
YQ
8934 Return the transferred status, error or OK (an
8935 'enum target_xfer_status' value). Save the number of bytes
8936 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8937
6b8edb51
PA
8938target_xfer_status
8939remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8940 ULONGEST len, int unit_size,
8941 ULONGEST *xfered_len)
a76d924d 8942{
a121b7c1 8943 const char *packet_format = NULL;
a76d924d
DJ
8944
8945 /* Check whether the target supports binary download. */
8946 check_binary_download (memaddr);
8947
4082afcc 8948 switch (packet_support (PACKET_X))
a76d924d
DJ
8949 {
8950 case PACKET_ENABLE:
8951 packet_format = "X";
8952 break;
8953 case PACKET_DISABLE:
8954 packet_format = "M";
8955 break;
8956 case PACKET_SUPPORT_UNKNOWN:
8957 internal_error (__FILE__, __LINE__,
8958 _("remote_write_bytes: bad internal state"));
8959 default:
8960 internal_error (__FILE__, __LINE__, _("bad switch"));
8961 }
8962
8963 return remote_write_bytes_aux (packet_format,
124e13d9 8964 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8965 packet_format[0], 1);
a76d924d
DJ
8966}
8967
9217e74e
YQ
8968/* Read memory data directly from the remote machine.
8969 This does not use the data cache; the data cache uses this.
8970 MEMADDR is the address in the remote memory space.
8971 MYADDR is the address of the buffer in our space.
124e13d9
SM
8972 LEN_UNITS is the number of addressable memory units to read..
8973 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8974
8975 Return the transferred status, error or OK (an
8976 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8977 transferred in *XFERED_LEN_UNITS.
8978
8979 See the comment of remote_write_bytes_aux for an example of
8980 memory read/write exchange between gdb and the stub. */
9217e74e 8981
6b8edb51
PA
8982target_xfer_status
8983remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8984 ULONGEST len_units,
8985 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
8986{
8987 struct remote_state *rs = get_remote_state ();
124e13d9 8988 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 8989 char *p;
124e13d9
SM
8990 int todo_units;
8991 int decoded_bytes;
9217e74e 8992
124e13d9 8993 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
8994 /* The packet buffer will be large enough for the payload;
8995 get_memory_packet_size ensures this. */
8996
124e13d9 8997 /* Number of units that will fit. */
325fac50
PA
8998 todo_units = std::min (len_units,
8999 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
9000
9001 /* Construct "m"<memaddr>","<len>". */
9002 memaddr = remote_address_masked (memaddr);
8d64371b 9003 p = rs->buf.data ();
9217e74e
YQ
9004 *p++ = 'm';
9005 p += hexnumstr (p, (ULONGEST) memaddr);
9006 *p++ = ',';
124e13d9 9007 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
9008 *p = '\0';
9009 putpkt (rs->buf);
8d64371b 9010 getpkt (&rs->buf, 0);
9217e74e
YQ
9011 if (rs->buf[0] == 'E'
9012 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
9013 && rs->buf[3] == '\0')
9014 return TARGET_XFER_E_IO;
9015 /* Reply describes memory byte by byte, each byte encoded as two hex
9016 characters. */
8d64371b 9017 p = rs->buf.data ();
124e13d9 9018 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 9019 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 9020 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
92ffd475 9021 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9217e74e
YQ
9022}
9023
b55fbac4
YQ
9024/* Using the set of read-only target sections of remote, read live
9025 read-only memory.
8acf9577
YQ
9026
9027 For interface/parameters/return description see target.h,
9028 to_xfer_partial. */
9029
6b8edb51
PA
9030target_xfer_status
9031remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
9032 ULONGEST memaddr,
9033 ULONGEST len,
9034 int unit_size,
9035 ULONGEST *xfered_len)
8acf9577
YQ
9036{
9037 struct target_section *secp;
8acf9577 9038
6b8edb51 9039 secp = target_section_by_addr (this, memaddr);
8acf9577 9040 if (secp != NULL
fd361982 9041 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
8acf9577 9042 {
8acf9577
YQ
9043 ULONGEST memend = memaddr + len;
9044
d7a78e5c
TT
9045 target_section_table *table = target_get_section_table (this);
9046 for (target_section &p : *table)
8acf9577 9047 {
bb2a6777 9048 if (memaddr >= p.addr)
8acf9577 9049 {
bb2a6777 9050 if (memend <= p.endaddr)
8acf9577
YQ
9051 {
9052 /* Entire transfer is within this section. */
124e13d9 9053 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 9054 xfered_len);
8acf9577 9055 }
bb2a6777 9056 else if (memaddr >= p.endaddr)
8acf9577
YQ
9057 {
9058 /* This section ends before the transfer starts. */
9059 continue;
9060 }
9061 else
9062 {
9063 /* This section overlaps the transfer. Just do half. */
bb2a6777 9064 len = p.endaddr - memaddr;
124e13d9 9065 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 9066 xfered_len);
8acf9577
YQ
9067 }
9068 }
9069 }
9070 }
9071
9072 return TARGET_XFER_EOF;
9073}
9074
9217e74e
YQ
9075/* Similar to remote_read_bytes_1, but it reads from the remote stub
9076 first if the requested memory is unavailable in traceframe.
9077 Otherwise, fall back to remote_read_bytes_1. */
c906108c 9078
6b8edb51
PA
9079target_xfer_status
9080remote_target::remote_read_bytes (CORE_ADDR memaddr,
9081 gdb_byte *myaddr, ULONGEST len, int unit_size,
9082 ULONGEST *xfered_len)
c906108c 9083{
6b6aa828 9084 if (len == 0)
96c4f946 9085 return TARGET_XFER_EOF;
b2182ed2 9086
8acf9577
YQ
9087 if (get_traceframe_number () != -1)
9088 {
a79b1bc6 9089 std::vector<mem_range> available;
8acf9577
YQ
9090
9091 /* If we fail to get the set of available memory, then the
9092 target does not support querying traceframe info, and so we
9093 attempt reading from the traceframe anyway (assuming the
9094 target implements the old QTro packet then). */
9095 if (traceframe_available_memory (&available, memaddr, len))
9096 {
a79b1bc6 9097 if (available.empty () || available[0].start != memaddr)
8acf9577
YQ
9098 {
9099 enum target_xfer_status res;
9100
9101 /* Don't read into the traceframe's available
9102 memory. */
a79b1bc6 9103 if (!available.empty ())
8acf9577
YQ
9104 {
9105 LONGEST oldlen = len;
9106
a79b1bc6 9107 len = available[0].start - memaddr;
8acf9577
YQ
9108 gdb_assert (len <= oldlen);
9109 }
9110
8acf9577 9111 /* This goes through the topmost target again. */
6b8edb51 9112 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
124e13d9 9113 len, unit_size, xfered_len);
8acf9577
YQ
9114 if (res == TARGET_XFER_OK)
9115 return TARGET_XFER_OK;
9116 else
9117 {
9118 /* No use trying further, we know some memory starting
9119 at MEMADDR isn't available. */
9120 *xfered_len = len;
92ffd475
PC
9121 return (*xfered_len != 0) ?
9122 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8acf9577
YQ
9123 }
9124 }
9125
9126 /* Don't try to read more than how much is available, in
9127 case the target implements the deprecated QTro packet to
9128 cater for older GDBs (the target's knowledge of read-only
9129 sections may be outdated by now). */
a79b1bc6 9130 len = available[0].length;
8acf9577
YQ
9131 }
9132 }
9133
124e13d9 9134 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 9135}
74531fed 9136
c906108c 9137\f
c906108c 9138
a76d924d
DJ
9139/* Sends a packet with content determined by the printf format string
9140 FORMAT and the remaining arguments, then gets the reply. Returns
9141 whether the packet was a success, a failure, or unknown. */
9142
6b8edb51
PA
9143packet_result
9144remote_target::remote_send_printf (const char *format, ...)
a76d924d
DJ
9145{
9146 struct remote_state *rs = get_remote_state ();
9147 int max_size = get_remote_packet_size ();
a76d924d 9148 va_list ap;
a744cf53 9149
a76d924d
DJ
9150 va_start (ap, format);
9151
9152 rs->buf[0] = '\0';
8d64371b 9153 int size = vsnprintf (rs->buf.data (), max_size, format, ap);
33b031ce
GB
9154
9155 va_end (ap);
9156
9157 if (size >= max_size)
9b20d036 9158 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
9159
9160 if (putpkt (rs->buf) < 0)
9161 error (_("Communication problem with target."));
9162
9163 rs->buf[0] = '\0';
8d64371b 9164 getpkt (&rs->buf, 0);
a76d924d
DJ
9165
9166 return packet_check_result (rs->buf);
9167}
9168
a76d924d
DJ
9169/* Flash writing can take quite some time. We'll set
9170 effectively infinite timeout for flash operations.
9171 In future, we'll need to decide on a better approach. */
9172static const int remote_flash_timeout = 1000;
9173
f6ac5f3d
PA
9174void
9175remote_target::flash_erase (ULONGEST address, LONGEST length)
a76d924d 9176{
f5656ead 9177 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d 9178 enum packet_result ret;
2ec845e7
TT
9179 scoped_restore restore_timeout
9180 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
a76d924d
DJ
9181
9182 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 9183 phex (address, addr_size),
a76d924d
DJ
9184 phex (length, 4));
9185 switch (ret)
9186 {
9187 case PACKET_UNKNOWN:
9188 error (_("Remote target does not support flash erase"));
9189 case PACKET_ERROR:
9190 error (_("Error erasing flash with vFlashErase packet"));
9191 default:
9192 break;
9193 }
a76d924d
DJ
9194}
9195
6b8edb51
PA
9196target_xfer_status
9197remote_target::remote_flash_write (ULONGEST address,
9198 ULONGEST length, ULONGEST *xfered_len,
9199 const gdb_byte *data)
a76d924d 9200{
2ec845e7
TT
9201 scoped_restore restore_timeout
9202 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9203 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9204 xfered_len,'X', 0);
a76d924d
DJ
9205}
9206
f6ac5f3d
PA
9207void
9208remote_target::flash_done ()
a76d924d 9209{
a76d924d 9210 int ret;
a76d924d 9211
2ec845e7
TT
9212 scoped_restore restore_timeout
9213 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9214
a76d924d 9215 ret = remote_send_printf ("vFlashDone");
a76d924d
DJ
9216
9217 switch (ret)
9218 {
9219 case PACKET_UNKNOWN:
9220 error (_("Remote target does not support vFlashDone"));
9221 case PACKET_ERROR:
9222 error (_("Error finishing flash operation"));
9223 default:
9224 break;
9225 }
9226}
9227
f6ac5f3d
PA
9228void
9229remote_target::files_info ()
c906108c
SS
9230{
9231 puts_filtered ("Debugging a target over a serial line.\n");
9232}
9233\f
9234/* Stuff for dealing with the packets which are part of this protocol.
9235 See comment at top of file for details. */
9236
1927e618
PA
9237/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
9238 error to higher layers. Called when a serial error is detected.
9239 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
9240 the system error message for errno at function entry and final dot
9241 for output compatibility with throw_perror_with_name. */
1927e618
PA
9242
9243static void
5b6d1e4f 9244unpush_and_perror (remote_target *target, const char *string)
1927e618 9245{
d6cb50a2 9246 int saved_errno = errno;
1927e618 9247
5b6d1e4f 9248 remote_unpush_target (target);
d6cb50a2
JK
9249 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
9250 safe_strerror (saved_errno));
1927e618
PA
9251}
9252
048094ac
PA
9253/* Read a single character from the remote end. The current quit
9254 handler is overridden to avoid quitting in the middle of packet
9255 sequence, as that would break communication with the remote server.
9256 See remote_serial_quit_handler for more detail. */
c906108c 9257
6b8edb51
PA
9258int
9259remote_target::readchar (int timeout)
c906108c
SS
9260{
9261 int ch;
5d93a237 9262 struct remote_state *rs = get_remote_state ();
048094ac 9263
2ec845e7 9264 {
6b8edb51
PA
9265 scoped_restore restore_quit_target
9266 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9267 scoped_restore restore_quit
6b8edb51 9268 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
c906108c 9269
2ec845e7 9270 rs->got_ctrlc_during_io = 0;
c906108c 9271
2ec845e7 9272 ch = serial_readchar (rs->remote_desc, timeout);
048094ac 9273
2ec845e7
TT
9274 if (rs->got_ctrlc_during_io)
9275 set_quit_flag ();
9276 }
048094ac 9277
2acceee2 9278 if (ch >= 0)
0876f84a 9279 return ch;
2acceee2
JM
9280
9281 switch ((enum serial_rc) ch)
c906108c
SS
9282 {
9283 case SERIAL_EOF:
5b6d1e4f 9284 remote_unpush_target (this);
598d3636 9285 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 9286 /* no return */
c906108c 9287 case SERIAL_ERROR:
5b6d1e4f
PA
9288 unpush_and_perror (this, _("Remote communication error. "
9289 "Target disconnected."));
2acceee2 9290 /* no return */
c906108c 9291 case SERIAL_TIMEOUT:
2acceee2 9292 break;
c906108c 9293 }
2acceee2 9294 return ch;
c906108c
SS
9295}
9296
c33e31fd 9297/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
9298 writing fails. The current quit handler is overridden to avoid
9299 quitting in the middle of packet sequence, as that would break
9300 communication with the remote server. See
9301 remote_serial_quit_handler for more detail. */
c33e31fd 9302
6b8edb51
PA
9303void
9304remote_target::remote_serial_write (const char *str, int len)
c33e31fd 9305{
5d93a237 9306 struct remote_state *rs = get_remote_state ();
048094ac 9307
6b8edb51
PA
9308 scoped_restore restore_quit_target
9309 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9310 scoped_restore restore_quit
6b8edb51 9311 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
048094ac
PA
9312
9313 rs->got_ctrlc_during_io = 0;
5d93a237
TT
9314
9315 if (serial_write (rs->remote_desc, str, len))
c33e31fd 9316 {
5b6d1e4f
PA
9317 unpush_and_perror (this, _("Remote communication error. "
9318 "Target disconnected."));
c33e31fd 9319 }
048094ac
PA
9320
9321 if (rs->got_ctrlc_during_io)
9322 set_quit_flag ();
c33e31fd
PA
9323}
9324
b3ced9ba
PA
9325/* Return a string representing an escaped version of BUF, of len N.
9326 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 9327
b3ced9ba 9328static std::string
6e5abd65
PA
9329escape_buffer (const char *buf, int n)
9330{
d7e74731 9331 string_file stb;
6e5abd65 9332
d7e74731
PA
9333 stb.putstrn (buf, n, '\\');
9334 return std::move (stb.string ());
6e5abd65
PA
9335}
9336
c906108c
SS
9337/* Display a null-terminated packet on stdout, for debugging, using C
9338 string notation. */
9339
9340static void
baa336ce 9341print_packet (const char *buf)
c906108c
SS
9342{
9343 puts_filtered ("\"");
43e526b9 9344 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
9345 puts_filtered ("\"");
9346}
9347
9348int
6b8edb51 9349remote_target::putpkt (const char *buf)
c906108c
SS
9350{
9351 return putpkt_binary (buf, strlen (buf));
9352}
9353
6b8edb51
PA
9354/* Wrapper around remote_target::putpkt to avoid exporting
9355 remote_target. */
9356
9357int
9358putpkt (remote_target *remote, const char *buf)
9359{
9360 return remote->putpkt (buf);
9361}
9362
c906108c 9363/* Send a packet to the remote machine, with error checking. The data
23860348 9364 of the packet is in BUF. The string in BUF can be at most
ea9c271d 9365 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
9366 and for a possible /0 if we are debugging (remote_debug) and want
9367 to print the sent packet as a string. */
c906108c 9368
6b8edb51
PA
9369int
9370remote_target::putpkt_binary (const char *buf, int cnt)
c906108c 9371{
2d717e4f 9372 struct remote_state *rs = get_remote_state ();
c906108c
SS
9373 int i;
9374 unsigned char csum = 0;
b80406ac
TT
9375 gdb::def_vector<char> data (cnt + 6);
9376 char *buf2 = data.data ();
085dd6e6 9377
c906108c
SS
9378 int ch;
9379 int tcount = 0;
9380 char *p;
9381
e24a49d8
PA
9382 /* Catch cases like trying to read memory or listing threads while
9383 we're waiting for a stop reply. The remote server wouldn't be
9384 ready to handle this request, so we'd hang and timeout. We don't
9385 have to worry about this in synchronous mode, because in that
9386 case it's not possible to issue a command while the target is
74531fed
PA
9387 running. This is not a problem in non-stop mode, because in that
9388 case, the stub is always ready to process serial input. */
6efcd9a8
PA
9389 if (!target_is_non_stop_p ()
9390 && target_is_async_p ()
9391 && rs->waiting_for_stop_reply)
9597b22a
DE
9392 {
9393 error (_("Cannot execute this command while the target is running.\n"
9394 "Use the \"interrupt\" command to stop the target\n"
9395 "and then try again."));
9396 }
e24a49d8 9397
2d717e4f
DJ
9398 /* We're sending out a new packet. Make sure we don't look at a
9399 stale cached response. */
9400 rs->cached_wait_status = 0;
9401
c906108c
SS
9402 /* Copy the packet into buffer BUF2, encapsulating it
9403 and giving it a checksum. */
9404
c906108c
SS
9405 p = buf2;
9406 *p++ = '$';
9407
9408 for (i = 0; i < cnt; i++)
9409 {
9410 csum += buf[i];
9411 *p++ = buf[i];
9412 }
9413 *p++ = '#';
9414 *p++ = tohex ((csum >> 4) & 0xf);
9415 *p++ = tohex (csum & 0xf);
9416
9417 /* Send it over and over until we get a positive ack. */
9418
9419 while (1)
9420 {
9421 int started_error_output = 0;
9422
9423 if (remote_debug)
9424 {
9425 *p = '\0';
b3ced9ba 9426
6f8976bf 9427 int len = (int) (p - buf2);
6cc8564b
LM
9428 int max_chars;
9429
9430 if (remote_packet_max_chars < 0)
9431 max_chars = len;
9432 else
9433 max_chars = remote_packet_max_chars;
6f8976bf
YQ
9434
9435 std::string str
6cc8564b 9436 = escape_buffer (buf2, std::min (len, max_chars));
6f8976bf
YQ
9437
9438 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
9439
6cc8564b 9440 if (len > max_chars)
567a3e54 9441 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
6cc8564b 9442 len - max_chars);
6f8976bf
YQ
9443
9444 fprintf_unfiltered (gdb_stdlog, "...");
b3ced9ba 9445
0f71a2f6 9446 gdb_flush (gdb_stdlog);
c906108c 9447 }
c33e31fd 9448 remote_serial_write (buf2, p - buf2);
c906108c 9449
a6f3e723
SL
9450 /* If this is a no acks version of the remote protocol, send the
9451 packet and move on. */
9452 if (rs->noack_mode)
dda83cd7 9453 break;
a6f3e723 9454
74531fed
PA
9455 /* Read until either a timeout occurs (-2) or '+' is read.
9456 Handle any notification that arrives in the mean time. */
c906108c
SS
9457 while (1)
9458 {
9459 ch = readchar (remote_timeout);
9460
c5aa993b 9461 if (remote_debug)
c906108c
SS
9462 {
9463 switch (ch)
9464 {
9465 case '+':
1216fa2c 9466 case '-':
c906108c
SS
9467 case SERIAL_TIMEOUT:
9468 case '$':
74531fed 9469 case '%':
c906108c
SS
9470 if (started_error_output)
9471 {
9472 putchar_unfiltered ('\n');
9473 started_error_output = 0;
9474 }
9475 }
9476 }
9477
9478 switch (ch)
9479 {
9480 case '+':
9481 if (remote_debug)
0f71a2f6 9482 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 9483 return 1;
1216fa2c
AC
9484 case '-':
9485 if (remote_debug)
9486 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 9487 /* FALLTHROUGH */
c906108c 9488 case SERIAL_TIMEOUT:
c5aa993b 9489 tcount++;
c906108c 9490 if (tcount > 3)
b80406ac 9491 return 0;
23860348 9492 break; /* Retransmit buffer. */
c906108c
SS
9493 case '$':
9494 {
dda83cd7 9495 if (remote_debug)
2bc416ba 9496 fprintf_unfiltered (gdb_stdlog,
23860348 9497 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
9498 /* It's probably an old response sent because an ACK
9499 was lost. Gobble up the packet and ack it so it
9500 doesn't get retransmitted when we resend this
9501 packet. */
6d820c5c 9502 skip_frame ();
c33e31fd 9503 remote_serial_write ("+", 1);
23860348 9504 continue; /* Now, go look for +. */
c906108c 9505 }
74531fed
PA
9506
9507 case '%':
9508 {
9509 int val;
9510
9511 /* If we got a notification, handle it, and go back to looking
9512 for an ack. */
9513 /* We've found the start of a notification. Now
9514 collect the data. */
8d64371b 9515 val = read_frame (&rs->buf);
74531fed
PA
9516 if (val >= 0)
9517 {
9518 if (remote_debug)
9519 {
8d64371b 9520 std::string str = escape_buffer (rs->buf.data (), val);
6e5abd65 9521
6e5abd65
PA
9522 fprintf_unfiltered (gdb_stdlog,
9523 " Notification received: %s\n",
b3ced9ba 9524 str.c_str ());
74531fed 9525 }
8d64371b 9526 handle_notification (rs->notif_state, rs->buf.data ());
74531fed
PA
9527 /* We're in sync now, rewait for the ack. */
9528 tcount = 0;
9529 }
9530 else
9531 {
9532 if (remote_debug)
9533 {
9534 if (!started_error_output)
9535 {
9536 started_error_output = 1;
9537 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9538 }
9539 fputc_unfiltered (ch & 0177, gdb_stdlog);
8d64371b 9540 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf.data ());
74531fed
PA
9541 }
9542 }
9543 continue;
9544 }
9545 /* fall-through */
c906108c
SS
9546 default:
9547 if (remote_debug)
9548 {
9549 if (!started_error_output)
9550 {
9551 started_error_output = 1;
0f71a2f6 9552 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 9553 }
0f71a2f6 9554 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
9555 }
9556 continue;
9557 }
23860348 9558 break; /* Here to retransmit. */
c906108c
SS
9559 }
9560
9561#if 0
9562 /* This is wrong. If doing a long backtrace, the user should be
dda83cd7
SM
9563 able to get out next time we call QUIT, without anything as
9564 violent as interrupt_query. If we want to provide a way out of
9565 here without getting to the next QUIT, it should be based on
9566 hitting ^C twice as in remote_wait. */
c906108c
SS
9567 if (quit_flag)
9568 {
9569 quit_flag = 0;
9570 interrupt_query ();
9571 }
9572#endif
9573 }
a5c0808e 9574
a6f3e723 9575 return 0;
c906108c
SS
9576}
9577
6d820c5c
DJ
9578/* Come here after finding the start of a frame when we expected an
9579 ack. Do our best to discard the rest of this packet. */
9580
6b8edb51
PA
9581void
9582remote_target::skip_frame ()
6d820c5c
DJ
9583{
9584 int c;
9585
9586 while (1)
9587 {
9588 c = readchar (remote_timeout);
9589 switch (c)
9590 {
9591 case SERIAL_TIMEOUT:
9592 /* Nothing we can do. */
9593 return;
9594 case '#':
9595 /* Discard the two bytes of checksum and stop. */
9596 c = readchar (remote_timeout);
9597 if (c >= 0)
9598 c = readchar (remote_timeout);
9599
9600 return;
9601 case '*': /* Run length encoding. */
9602 /* Discard the repeat count. */
9603 c = readchar (remote_timeout);
9604 if (c < 0)
9605 return;
9606 break;
9607 default:
9608 /* A regular character. */
9609 break;
9610 }
9611 }
9612}
9613
c906108c 9614/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
9615 into *BUF, verifying the checksum, length, and handling run-length
9616 compression. NUL terminate the buffer. If there is not enough room,
8d64371b 9617 expand *BUF.
c906108c 9618
c2d11a7d
JM
9619 Returns -1 on error, number of characters in buffer (ignoring the
9620 trailing NULL) on success. (could be extended to return one of the
23860348 9621 SERIAL status indications). */
c2d11a7d 9622
6b8edb51 9623long
8d64371b 9624remote_target::read_frame (gdb::char_vector *buf_p)
c906108c
SS
9625{
9626 unsigned char csum;
c2d11a7d 9627 long bc;
c906108c 9628 int c;
8d64371b 9629 char *buf = buf_p->data ();
a6f3e723 9630 struct remote_state *rs = get_remote_state ();
c906108c
SS
9631
9632 csum = 0;
c2d11a7d 9633 bc = 0;
c906108c
SS
9634
9635 while (1)
9636 {
9637 c = readchar (remote_timeout);
c906108c
SS
9638 switch (c)
9639 {
9640 case SERIAL_TIMEOUT:
9641 if (remote_debug)
0f71a2f6 9642 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 9643 return -1;
c906108c
SS
9644 case '$':
9645 if (remote_debug)
0f71a2f6
JM
9646 fputs_filtered ("Saw new packet start in middle of old one\n",
9647 gdb_stdlog);
23860348 9648 return -1; /* Start a new packet, count retries. */
c906108c
SS
9649 case '#':
9650 {
9651 unsigned char pktcsum;
e1b09194
AC
9652 int check_0 = 0;
9653 int check_1 = 0;
c906108c 9654
c2d11a7d 9655 buf[bc] = '\0';
c906108c 9656
e1b09194
AC
9657 check_0 = readchar (remote_timeout);
9658 if (check_0 >= 0)
9659 check_1 = readchar (remote_timeout);
802188a7 9660
e1b09194
AC
9661 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9662 {
9663 if (remote_debug)
2bc416ba 9664 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 9665 gdb_stdlog);
e1b09194
AC
9666 return -1;
9667 }
9668 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
9669 {
9670 if (remote_debug)
2bc416ba 9671 fputs_filtered ("Communication error in checksum\n",
23860348 9672 gdb_stdlog);
40e3f985
FN
9673 return -1;
9674 }
c906108c 9675
a6f3e723
SL
9676 /* Don't recompute the checksum; with no ack packets we
9677 don't have any way to indicate a packet retransmission
9678 is necessary. */
9679 if (rs->noack_mode)
9680 return bc;
9681
e1b09194 9682 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9683 if (csum == pktcsum)
dda83cd7 9684 return bc;
c906108c 9685
c5aa993b 9686 if (remote_debug)
c906108c 9687 {
b3ced9ba 9688 std::string str = escape_buffer (buf, bc);
6e5abd65 9689
6e5abd65 9690 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
9691 "Bad checksum, sentsum=0x%x, "
9692 "csum=0x%x, buf=%s\n",
b3ced9ba 9693 pktcsum, csum, str.c_str ());
c906108c 9694 }
c2d11a7d 9695 /* Number of characters in buffer ignoring trailing
dda83cd7 9696 NULL. */
c2d11a7d 9697 return -1;
c906108c 9698 }
23860348 9699 case '*': /* Run length encoding. */
dda83cd7 9700 {
c2c6d25f 9701 int repeat;
c906108c 9702
a744cf53 9703 csum += c;
b4501125
AC
9704 c = readchar (remote_timeout);
9705 csum += c;
23860348 9706 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9707
23860348 9708 /* The character before ``*'' is repeated. */
c2d11a7d 9709
6d820c5c 9710 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9711 {
8d64371b 9712 if (bc + repeat - 1 >= buf_p->size () - 1)
6d820c5c
DJ
9713 {
9714 /* Make some more room in the buffer. */
8d64371b
TT
9715 buf_p->resize (buf_p->size () + repeat);
9716 buf = buf_p->data ();
6d820c5c
DJ
9717 }
9718
c2d11a7d
JM
9719 memset (&buf[bc], buf[bc - 1], repeat);
9720 bc += repeat;
c2c6d25f
JM
9721 continue;
9722 }
9723
c2d11a7d 9724 buf[bc] = '\0';
6d820c5c 9725 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9726 return -1;
c2c6d25f 9727 }
c906108c 9728 default:
8d64371b 9729 if (bc >= buf_p->size () - 1)
c906108c 9730 {
6d820c5c 9731 /* Make some more room in the buffer. */
8d64371b
TT
9732 buf_p->resize (buf_p->size () * 2);
9733 buf = buf_p->data ();
c906108c
SS
9734 }
9735
6d820c5c
DJ
9736 buf[bc++] = c;
9737 csum += c;
9738 continue;
c906108c
SS
9739 }
9740 }
9741}
9742
ed2b7c17
TT
9743/* Set this to the maximum number of seconds to wait instead of waiting forever
9744 in target_wait(). If this timer times out, then it generates an error and
9745 the command is aborted. This replaces most of the need for timeouts in the
9746 GDB test suite, and makes it possible to distinguish between a hung target
9747 and one with slow communications. */
9748
9749static int watchdog = 0;
9750static void
9751show_watchdog (struct ui_file *file, int from_tty,
9752 struct cmd_list_element *c, const char *value)
9753{
9754 fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
9755}
9756
c906108c 9757/* Read a packet from the remote machine, with error checking, and
8d64371b
TT
9758 store it in *BUF. Resize *BUF if necessary to hold the result. If
9759 FOREVER, wait forever rather than timing out; this is used (in
9760 synchronous mode) to wait for a target that is is executing user
9761 code to stop. */
d9fcf2fb
JM
9762/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9763 don't have to change all the calls to getpkt to deal with the
9764 return value, because at the moment I don't know what the right
23860348 9765 thing to do it for those. */
6b8edb51 9766
c906108c 9767void
8d64371b 9768remote_target::getpkt (gdb::char_vector *buf, int forever)
d9fcf2fb 9769{
8d64371b 9770 getpkt_sane (buf, forever);
d9fcf2fb
JM
9771}
9772
9773
9774/* Read a packet from the remote machine, with error checking, and
8d64371b
TT
9775 store it in *BUF. Resize *BUF if necessary to hold the result. If
9776 FOREVER, wait forever rather than timing out; this is used (in
9777 synchronous mode) to wait for a target that is is executing user
9778 code to stop. If FOREVER == 0, this function is allowed to time
9779 out gracefully and return an indication of this to the caller.
9780 Otherwise return the number of bytes read. If EXPECTING_NOTIF,
9781 consider receiving a notification enough reason to return to the
9782 caller. *IS_NOTIF is an output boolean that indicates whether *BUF
9783 holds a notification or not (a regular packet). */
74531fed 9784
6b8edb51 9785int
8d64371b 9786remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
6b8edb51
PA
9787 int forever, int expecting_notif,
9788 int *is_notif)
c906108c 9789{
2d717e4f 9790 struct remote_state *rs = get_remote_state ();
c906108c
SS
9791 int c;
9792 int tries;
9793 int timeout;
df4b58fe 9794 int val = -1;
c906108c 9795
2d717e4f
DJ
9796 /* We're reading a new response. Make sure we don't look at a
9797 previously cached response. */
9798 rs->cached_wait_status = 0;
9799
8d64371b 9800 strcpy (buf->data (), "timeout");
c906108c
SS
9801
9802 if (forever)
74531fed
PA
9803 timeout = watchdog > 0 ? watchdog : -1;
9804 else if (expecting_notif)
9805 timeout = 0; /* There should already be a char in the buffer. If
9806 not, bail out. */
c906108c
SS
9807 else
9808 timeout = remote_timeout;
9809
9810#define MAX_TRIES 3
9811
74531fed
PA
9812 /* Process any number of notifications, and then return when
9813 we get a packet. */
9814 for (;;)
c906108c 9815 {
d9c43928 9816 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9817 times. */
9818 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9819 {
74531fed
PA
9820 /* This can loop forever if the remote side sends us
9821 characters continuously, but if it pauses, we'll get
9822 SERIAL_TIMEOUT from readchar because of timeout. Then
9823 we'll count that as a retry.
9824
9825 Note that even when forever is set, we will only wait
9826 forever prior to the start of a packet. After that, we
9827 expect characters to arrive at a brisk pace. They should
9828 show up within remote_timeout intervals. */
9829 do
9830 c = readchar (timeout);
9831 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9832
9833 if (c == SERIAL_TIMEOUT)
9834 {
74531fed
PA
9835 if (expecting_notif)
9836 return -1; /* Don't complain, it's normal to not get
9837 anything in this case. */
9838
23860348 9839 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9840 {
5b6d1e4f 9841 remote_unpush_target (this);
598d3636
JK
9842 throw_error (TARGET_CLOSE_ERROR,
9843 _("Watchdog timeout has expired. "
9844 "Target detached."));
c906108c 9845 }
c906108c 9846 if (remote_debug)
0f71a2f6 9847 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 9848 }
74531fed
PA
9849 else
9850 {
9851 /* We've found the start of a packet or notification.
9852 Now collect the data. */
8d64371b 9853 val = read_frame (buf);
74531fed
PA
9854 if (val >= 0)
9855 break;
9856 }
9857
c33e31fd 9858 remote_serial_write ("-", 1);
c906108c 9859 }
c906108c 9860
74531fed
PA
9861 if (tries > MAX_TRIES)
9862 {
9863 /* We have tried hard enough, and just can't receive the
9864 packet/notification. Give up. */
9865 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9866
74531fed
PA
9867 /* Skip the ack char if we're in no-ack mode. */
9868 if (!rs->noack_mode)
c33e31fd 9869 remote_serial_write ("+", 1);
74531fed
PA
9870 return -1;
9871 }
c906108c 9872
74531fed
PA
9873 /* If we got an ordinary packet, return that to our caller. */
9874 if (c == '$')
c906108c
SS
9875 {
9876 if (remote_debug)
43e526b9 9877 {
6cc8564b
LM
9878 int max_chars;
9879
9880 if (remote_packet_max_chars < 0)
9881 max_chars = val;
9882 else
9883 max_chars = remote_packet_max_chars;
9884
6f8976bf 9885 std::string str
8d64371b 9886 = escape_buffer (buf->data (),
6cc8564b 9887 std::min (val, max_chars));
6f8976bf
YQ
9888
9889 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9890 str.c_str ());
9891
6cc8564b 9892 if (val > max_chars)
567a3e54 9893 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
6cc8564b 9894 val - max_chars);
6e5abd65 9895
6f8976bf 9896 fprintf_unfiltered (gdb_stdlog, "\n");
43e526b9 9897 }
a6f3e723
SL
9898
9899 /* Skip the ack char if we're in no-ack mode. */
9900 if (!rs->noack_mode)
c33e31fd 9901 remote_serial_write ("+", 1);
fee9eda9
YQ
9902 if (is_notif != NULL)
9903 *is_notif = 0;
0876f84a 9904 return val;
c906108c
SS
9905 }
9906
74531fed
PA
9907 /* If we got a notification, handle it, and go back to looking
9908 for a packet. */
9909 else
9910 {
9911 gdb_assert (c == '%');
9912
9913 if (remote_debug)
9914 {
8d64371b 9915 std::string str = escape_buffer (buf->data (), val);
6e5abd65 9916
6e5abd65
PA
9917 fprintf_unfiltered (gdb_stdlog,
9918 " Notification received: %s\n",
b3ced9ba 9919 str.c_str ());
74531fed 9920 }
fee9eda9
YQ
9921 if (is_notif != NULL)
9922 *is_notif = 1;
c906108c 9923
8d64371b 9924 handle_notification (rs->notif_state, buf->data ());
c906108c 9925
74531fed 9926 /* Notifications require no acknowledgement. */
a6f3e723 9927
74531fed 9928 if (expecting_notif)
fee9eda9 9929 return val;
74531fed
PA
9930 }
9931 }
9932}
9933
6b8edb51 9934int
8d64371b 9935remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
74531fed 9936{
8d64371b 9937 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
74531fed
PA
9938}
9939
6b8edb51 9940int
8d64371b 9941remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
6b8edb51 9942 int *is_notif)
74531fed 9943{
8d64371b 9944 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
c906108c 9945}
74531fed 9946
cbb8991c
DB
9947/* Kill any new fork children of process PID that haven't been
9948 processed by follow_fork. */
9949
6b8edb51
PA
9950void
9951remote_target::kill_new_fork_children (int pid)
cbb8991c 9952{
6b8edb51 9953 remote_state *rs = get_remote_state ();
cbb8991c 9954 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
9955
9956 /* Kill the fork child threads of any threads in process PID
9957 that are stopped at a fork event. */
5b6d1e4f 9958 for (thread_info *thread : all_non_exited_threads (this))
cbb8991c
DB
9959 {
9960 struct target_waitstatus *ws = &thread->pending_follow;
9961
9962 if (is_pending_fork_parent (ws, pid, thread->ptid))
9963 {
953edf2b 9964 int child_pid = ws->value.related_pid.pid ();
cbb8991c
DB
9965 int res;
9966
6b8edb51 9967 res = remote_vkill (child_pid);
cbb8991c
DB
9968 if (res != 0)
9969 error (_("Can't kill fork child process %d"), child_pid);
9970 }
9971 }
9972
9973 /* Check for any pending fork events (not reported or processed yet)
9974 in process PID and kill those fork child threads as well. */
9975 remote_notif_get_pending_events (notif);
953edf2b
TT
9976 for (auto &event : rs->stop_reply_queue)
9977 if (is_pending_fork_parent (&event->ws, pid, event->ptid))
9978 {
9979 int child_pid = event->ws.value.related_pid.pid ();
9980 int res;
9981
9982 res = remote_vkill (child_pid);
9983 if (res != 0)
9984 error (_("Can't kill fork child process %d"), child_pid);
9985 }
cbb8991c
DB
9986}
9987
c906108c 9988\f
8020350c
DB
9989/* Target hook to kill the current inferior. */
9990
f6ac5f3d
PA
9991void
9992remote_target::kill ()
43ff13b4 9993{
8020350c 9994 int res = -1;
e99b03dc 9995 int pid = inferior_ptid.pid ();
8020350c 9996 struct remote_state *rs = get_remote_state ();
0fdf84ca 9997
8020350c 9998 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9999 {
8020350c
DB
10000 /* If we're stopped while forking and we haven't followed yet,
10001 kill the child task. We need to do this before killing the
10002 parent task because if this is a vfork then the parent will
10003 be sleeping. */
6b8edb51 10004 kill_new_fork_children (pid);
8020350c 10005
6b8edb51 10006 res = remote_vkill (pid);
8020350c 10007 if (res == 0)
0fdf84ca 10008 {
bc1e6c81 10009 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
10010 return;
10011 }
8020350c 10012 }
0fdf84ca 10013
8020350c
DB
10014 /* If we are in 'target remote' mode and we are killing the only
10015 inferior, then we will tell gdbserver to exit and unpush the
10016 target. */
10017 if (res == -1 && !remote_multi_process_p (rs)
5b6d1e4f 10018 && number_of_live_inferiors (this) == 1)
8020350c
DB
10019 {
10020 remote_kill_k ();
10021
10022 /* We've killed the remote end, we get to mourn it. If we are
10023 not in extended mode, mourning the inferior also unpushes
10024 remote_ops from the target stack, which closes the remote
10025 connection. */
bc1e6c81 10026 target_mourn_inferior (inferior_ptid);
8020350c
DB
10027
10028 return;
0fdf84ca 10029 }
43ff13b4 10030
8020350c 10031 error (_("Can't kill process"));
43ff13b4
JM
10032}
10033
8020350c
DB
10034/* Send a kill request to the target using the 'vKill' packet. */
10035
6b8edb51
PA
10036int
10037remote_target::remote_vkill (int pid)
82f73884 10038{
4082afcc 10039 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
10040 return -1;
10041
6b8edb51
PA
10042 remote_state *rs = get_remote_state ();
10043
82f73884 10044 /* Tell the remote target to detach. */
8d64371b 10045 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
82f73884 10046 putpkt (rs->buf);
8d64371b 10047 getpkt (&rs->buf, 0);
82f73884 10048
4082afcc
PA
10049 switch (packet_ok (rs->buf,
10050 &remote_protocol_packets[PACKET_vKill]))
10051 {
10052 case PACKET_OK:
10053 return 0;
10054 case PACKET_ERROR:
10055 return 1;
10056 case PACKET_UNKNOWN:
10057 return -1;
10058 default:
10059 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
10060 }
82f73884
PA
10061}
10062
8020350c
DB
10063/* Send a kill request to the target using the 'k' packet. */
10064
6b8edb51
PA
10065void
10066remote_target::remote_kill_k ()
82f73884 10067{
8020350c
DB
10068 /* Catch errors so the user can quit from gdb even when we
10069 aren't on speaking terms with the remote system. */
a70b8144 10070 try
82f73884 10071 {
82f73884 10072 putpkt ("k");
82f73884 10073 }
230d2906 10074 catch (const gdb_exception_error &ex)
8020350c
DB
10075 {
10076 if (ex.error == TARGET_CLOSE_ERROR)
10077 {
10078 /* If we got an (EOF) error that caused the target
10079 to go away, then we're done, that's what we wanted.
10080 "k" is susceptible to cause a premature EOF, given
10081 that the remote server isn't actually required to
10082 reply to "k", and it can happen that it doesn't
10083 even get to reply ACK to the "k". */
10084 return;
10085 }
82f73884 10086
8020350c
DB
10087 /* Otherwise, something went wrong. We didn't actually kill
10088 the target. Just propagate the exception, and let the
10089 user or higher layers decide what to do. */
eedc3f4f 10090 throw;
8020350c 10091 }
82f73884
PA
10092}
10093
f6ac5f3d
PA
10094void
10095remote_target::mourn_inferior ()
c906108c 10096{
8020350c 10097 struct remote_state *rs = get_remote_state ();
ce5ce7ed 10098
9607784a
PA
10099 /* We're no longer interested in notification events of an inferior
10100 that exited or was killed/detached. */
10101 discard_pending_stop_replies (current_inferior ());
10102
8020350c 10103 /* In 'target remote' mode with one inferior, we close the connection. */
5b6d1e4f 10104 if (!rs->extended && number_of_live_inferiors (this) <= 1)
8020350c 10105 {
5b6d1e4f 10106 remote_unpush_target (this);
8020350c
DB
10107 return;
10108 }
c906108c 10109
e24a49d8
PA
10110 /* In case we got here due to an error, but we're going to stay
10111 connected. */
10112 rs->waiting_for_stop_reply = 0;
10113
dc1981d7
PA
10114 /* If the current general thread belonged to the process we just
10115 detached from or has exited, the remote side current general
10116 thread becomes undefined. Considering a case like this:
10117
10118 - We just got here due to a detach.
10119 - The process that we're detaching from happens to immediately
10120 report a global breakpoint being hit in non-stop mode, in the
10121 same thread we had selected before.
10122 - GDB attaches to this process again.
10123 - This event happens to be the next event we handle.
10124
10125 GDB would consider that the current general thread didn't need to
10126 be set on the stub side (with Hg), since for all it knew,
10127 GENERAL_THREAD hadn't changed.
10128
10129 Notice that although in all-stop mode, the remote server always
10130 sets the current thread to the thread reporting the stop event,
10131 that doesn't happen in non-stop mode; in non-stop, the stub *must
10132 not* change the current thread when reporting a breakpoint hit,
10133 due to the decoupling of event reporting and event handling.
10134
10135 To keep things simple, we always invalidate our notion of the
10136 current thread. */
47f8a51d 10137 record_currthread (rs, minus_one_ptid);
dc1981d7 10138
8020350c 10139 /* Call common code to mark the inferior as not running. */
48aa3c27 10140 generic_mourn_inferior ();
2d717e4f 10141}
c906108c 10142
57810aa7 10143bool
f6ac5f3d 10144extended_remote_target::supports_disable_randomization ()
03583c20 10145{
4082afcc 10146 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
10147}
10148
6b8edb51
PA
10149void
10150remote_target::extended_remote_disable_randomization (int val)
03583c20
UW
10151{
10152 struct remote_state *rs = get_remote_state ();
10153 char *reply;
10154
8d64371b
TT
10155 xsnprintf (rs->buf.data (), get_remote_packet_size (),
10156 "QDisableRandomization:%x", val);
03583c20 10157 putpkt (rs->buf);
b6bb3468 10158 reply = remote_get_noisy_reply ();
03583c20
UW
10159 if (*reply == '\0')
10160 error (_("Target does not support QDisableRandomization."));
10161 if (strcmp (reply, "OK") != 0)
10162 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
10163}
10164
6b8edb51
PA
10165int
10166remote_target::extended_remote_run (const std::string &args)
2d717e4f
DJ
10167{
10168 struct remote_state *rs = get_remote_state ();
2d717e4f 10169 int len;
94585166 10170 const char *remote_exec_file = get_remote_exec_file ();
c906108c 10171
2d717e4f
DJ
10172 /* If the user has disabled vRun support, or we have detected that
10173 support is not available, do not try it. */
4082afcc 10174 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 10175 return -1;
424163ea 10176
8d64371b
TT
10177 strcpy (rs->buf.data (), "vRun;");
10178 len = strlen (rs->buf.data ());
c906108c 10179
2d717e4f
DJ
10180 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
10181 error (_("Remote file name too long for run packet"));
8d64371b 10182 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
9f1b45b0 10183 strlen (remote_exec_file));
2d717e4f 10184
7c5ded6a 10185 if (!args.empty ())
2d717e4f 10186 {
2d717e4f 10187 int i;
2d717e4f 10188
773a1edc 10189 gdb_argv argv (args.c_str ());
2d717e4f
DJ
10190 for (i = 0; argv[i] != NULL; i++)
10191 {
10192 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
10193 error (_("Argument list too long for run packet"));
10194 rs->buf[len++] = ';';
8d64371b 10195 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
9f1b45b0 10196 strlen (argv[i]));
2d717e4f 10197 }
2d717e4f
DJ
10198 }
10199
10200 rs->buf[len++] = '\0';
10201
10202 putpkt (rs->buf);
8d64371b 10203 getpkt (&rs->buf, 0);
2d717e4f 10204
4082afcc 10205 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 10206 {
4082afcc 10207 case PACKET_OK:
3405876a 10208 /* We have a wait response. All is well. */
2d717e4f 10209 return 0;
4082afcc
PA
10210 case PACKET_UNKNOWN:
10211 return -1;
10212 case PACKET_ERROR:
2d717e4f
DJ
10213 if (remote_exec_file[0] == '\0')
10214 error (_("Running the default executable on the remote target failed; "
10215 "try \"set remote exec-file\"?"));
10216 else
10217 error (_("Running \"%s\" on the remote target failed"),
10218 remote_exec_file);
4082afcc
PA
10219 default:
10220 gdb_assert_not_reached (_("bad switch"));
2d717e4f 10221 }
c906108c
SS
10222}
10223
0a2dde4a
SDJ
10224/* Helper function to send set/unset environment packets. ACTION is
10225 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
10226 or "QEnvironmentUnsetVariable". VALUE is the variable to be
10227 sent. */
10228
6b8edb51
PA
10229void
10230remote_target::send_environment_packet (const char *action,
10231 const char *packet,
10232 const char *value)
0a2dde4a 10233{
6b8edb51
PA
10234 remote_state *rs = get_remote_state ();
10235
0a2dde4a
SDJ
10236 /* Convert the environment variable to an hex string, which
10237 is the best format to be transmitted over the wire. */
10238 std::string encoded_value = bin2hex ((const gdb_byte *) value,
10239 strlen (value));
10240
8d64371b 10241 xsnprintf (rs->buf.data (), get_remote_packet_size (),
0a2dde4a
SDJ
10242 "%s:%s", packet, encoded_value.c_str ());
10243
10244 putpkt (rs->buf);
8d64371b
TT
10245 getpkt (&rs->buf, 0);
10246 if (strcmp (rs->buf.data (), "OK") != 0)
0a2dde4a
SDJ
10247 warning (_("Unable to %s environment variable '%s' on remote."),
10248 action, value);
10249}
10250
10251/* Helper function to handle the QEnvironment* packets. */
10252
6b8edb51
PA
10253void
10254remote_target::extended_remote_environment_support ()
0a2dde4a 10255{
6b8edb51
PA
10256 remote_state *rs = get_remote_state ();
10257
0a2dde4a
SDJ
10258 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10259 {
10260 putpkt ("QEnvironmentReset");
8d64371b
TT
10261 getpkt (&rs->buf, 0);
10262 if (strcmp (rs->buf.data (), "OK") != 0)
0a2dde4a
SDJ
10263 warning (_("Unable to reset environment on remote."));
10264 }
10265
10266 gdb_environ *e = &current_inferior ()->environment;
10267
10268 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10269 for (const std::string &el : e->user_set_env ())
6b8edb51 10270 send_environment_packet ("set", "QEnvironmentHexEncoded",
0a2dde4a
SDJ
10271 el.c_str ());
10272
10273 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10274 for (const std::string &el : e->user_unset_env ())
6b8edb51 10275 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
0a2dde4a
SDJ
10276}
10277
bc3b087d
SDJ
10278/* Helper function to set the current working directory for the
10279 inferior in the remote target. */
10280
6b8edb51
PA
10281void
10282remote_target::extended_remote_set_inferior_cwd ()
bc3b087d
SDJ
10283{
10284 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10285 {
10286 const char *inferior_cwd = get_inferior_cwd ();
6b8edb51 10287 remote_state *rs = get_remote_state ();
bc3b087d
SDJ
10288
10289 if (inferior_cwd != NULL)
10290 {
10291 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10292 strlen (inferior_cwd));
10293
8d64371b 10294 xsnprintf (rs->buf.data (), get_remote_packet_size (),
bc3b087d
SDJ
10295 "QSetWorkingDir:%s", hexpath.c_str ());
10296 }
10297 else
10298 {
10299 /* An empty inferior_cwd means that the user wants us to
10300 reset the remote server's inferior's cwd. */
8d64371b 10301 xsnprintf (rs->buf.data (), get_remote_packet_size (),
bc3b087d
SDJ
10302 "QSetWorkingDir:");
10303 }
10304
10305 putpkt (rs->buf);
8d64371b 10306 getpkt (&rs->buf, 0);
bc3b087d
SDJ
10307 if (packet_ok (rs->buf,
10308 &remote_protocol_packets[PACKET_QSetWorkingDir])
10309 != PACKET_OK)
10310 error (_("\
10311Remote replied unexpectedly while setting the inferior's working\n\
10312directory: %s"),
8d64371b 10313 rs->buf.data ());
bc3b087d
SDJ
10314
10315 }
10316}
10317
2d717e4f
DJ
10318/* In the extended protocol we want to be able to do things like
10319 "run" and have them basically work as expected. So we need
10320 a special create_inferior function. We support changing the
10321 executable file and the command line arguments, but not the
10322 environment. */
10323
f6ac5f3d
PA
10324void
10325extended_remote_target::create_inferior (const char *exec_file,
10326 const std::string &args,
10327 char **env, int from_tty)
43ff13b4 10328{
3405876a
PA
10329 int run_worked;
10330 char *stop_reply;
10331 struct remote_state *rs = get_remote_state ();
94585166 10332 const char *remote_exec_file = get_remote_exec_file ();
3405876a 10333
43ff13b4 10334 /* If running asynchronously, register the target file descriptor
23860348 10335 with the event loop. */
75c99385 10336 if (target_can_async_p ())
6a3753b3 10337 target_async (1);
43ff13b4 10338
03583c20 10339 /* Disable address space randomization if requested (and supported). */
f6ac5f3d 10340 if (supports_disable_randomization ())
03583c20
UW
10341 extended_remote_disable_randomization (disable_randomization);
10342
aefd8b33
SDJ
10343 /* If startup-with-shell is on, we inform gdbserver to start the
10344 remote inferior using a shell. */
10345 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10346 {
8d64371b 10347 xsnprintf (rs->buf.data (), get_remote_packet_size (),
aefd8b33
SDJ
10348 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10349 putpkt (rs->buf);
8d64371b
TT
10350 getpkt (&rs->buf, 0);
10351 if (strcmp (rs->buf.data (), "OK") != 0)
aefd8b33
SDJ
10352 error (_("\
10353Remote replied unexpectedly while setting startup-with-shell: %s"),
8d64371b 10354 rs->buf.data ());
aefd8b33
SDJ
10355 }
10356
6b8edb51 10357 extended_remote_environment_support ();
0a2dde4a 10358
6b8edb51 10359 extended_remote_set_inferior_cwd ();
bc3b087d 10360
43ff13b4 10361 /* Now restart the remote server. */
3405876a
PA
10362 run_worked = extended_remote_run (args) != -1;
10363 if (!run_worked)
2d717e4f
DJ
10364 {
10365 /* vRun was not supported. Fail if we need it to do what the
10366 user requested. */
10367 if (remote_exec_file[0])
10368 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 10369 if (!args.empty ())
65e65158 10370 error (_("Remote target does not support \"set args\" or run ARGS"));
43ff13b4 10371
2d717e4f
DJ
10372 /* Fall back to "R". */
10373 extended_remote_restart ();
10374 }
424163ea 10375
3405876a 10376 /* vRun's success return is a stop reply. */
8d64371b 10377 stop_reply = run_worked ? rs->buf.data () : NULL;
3405876a 10378 add_current_inferior_and_thread (stop_reply);
c0a2216e 10379
2d717e4f
DJ
10380 /* Get updated offsets, if the stub uses qOffsets. */
10381 get_offsets ();
2d717e4f 10382}
c906108c 10383\f
c5aa993b 10384
b775012e
LM
10385/* Given a location's target info BP_TGT and the packet buffer BUF, output
10386 the list of conditions (in agent expression bytecode format), if any, the
10387 target needs to evaluate. The output is placed into the packet buffer
bba74b36 10388 started from BUF and ended at BUF_END. */
b775012e
LM
10389
10390static int
10391remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
10392 struct bp_target_info *bp_tgt, char *buf,
10393 char *buf_end)
b775012e 10394{
3cde5c42 10395 if (bp_tgt->conditions.empty ())
b775012e
LM
10396 return 0;
10397
10398 buf += strlen (buf);
bba74b36 10399 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
10400 buf++;
10401
83621223 10402 /* Send conditions to the target. */
d538e36d 10403 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 10404 {
bba74b36 10405 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 10406 buf += strlen (buf);
3cde5c42 10407 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
10408 buf = pack_hex_byte (buf, aexpr->buf[i]);
10409 *buf = '\0';
10410 }
b775012e
LM
10411 return 0;
10412}
10413
d3ce09f5
SS
10414static void
10415remote_add_target_side_commands (struct gdbarch *gdbarch,
10416 struct bp_target_info *bp_tgt, char *buf)
10417{
3cde5c42 10418 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
10419 return;
10420
10421 buf += strlen (buf);
10422
10423 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10424 buf += strlen (buf);
10425
10426 /* Concatenate all the agent expressions that are commands into the
10427 cmds parameter. */
df97be55 10428 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
10429 {
10430 sprintf (buf, "X%x,", aexpr->len);
10431 buf += strlen (buf);
3cde5c42 10432 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
10433 buf = pack_hex_byte (buf, aexpr->buf[i]);
10434 *buf = '\0';
10435 }
d3ce09f5
SS
10436}
10437
8181d85f
DJ
10438/* Insert a breakpoint. On targets that have software breakpoint
10439 support, we ask the remote target to do the work; on targets
10440 which don't, we insert a traditional memory breakpoint. */
c906108c 10441
f6ac5f3d
PA
10442int
10443remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10444 struct bp_target_info *bp_tgt)
c906108c 10445{
d471ea57
AC
10446 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10447 If it succeeds, then set the support to PACKET_ENABLE. If it
10448 fails, and the user has explicitly requested the Z support then
23860348 10449 report an error, otherwise, mark it disabled and go on. */
802188a7 10450
4082afcc 10451 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10452 {
0d5ed153 10453 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10454 struct remote_state *rs;
bba74b36 10455 char *p, *endbuf;
4fff2411 10456
28439a30
PA
10457 /* Make sure the remote is pointing at the right process, if
10458 necessary. */
10459 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10460 set_general_process ();
10461
4fff2411 10462 rs = get_remote_state ();
8d64371b
TT
10463 p = rs->buf.data ();
10464 endbuf = p + get_remote_packet_size ();
802188a7 10465
96baa820
JM
10466 *(p++) = 'Z';
10467 *(p++) = '0';
10468 *(p++) = ',';
7c0f6dcc 10469 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 10470 p += hexnumstr (p, addr);
579c6ad9 10471 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10472
f6ac5f3d 10473 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10474 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10475
f6ac5f3d 10476 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10477 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10478
6d820c5c 10479 putpkt (rs->buf);
8d64371b 10480 getpkt (&rs->buf, 0);
96baa820 10481
6d820c5c 10482 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 10483 {
d471ea57
AC
10484 case PACKET_ERROR:
10485 return -1;
10486 case PACKET_OK:
10487 return 0;
10488 case PACKET_UNKNOWN:
10489 break;
96baa820
JM
10490 }
10491 }
c906108c 10492
0000e5cc
PA
10493 /* If this breakpoint has target-side commands but this stub doesn't
10494 support Z0 packets, throw error. */
3cde5c42 10495 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
10496 throw_error (NOT_SUPPORTED_ERROR, _("\
10497Target doesn't support breakpoints that have target side commands."));
10498
f6ac5f3d 10499 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
c906108c
SS
10500}
10501
f6ac5f3d
PA
10502int
10503remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10504 struct bp_target_info *bp_tgt,
10505 enum remove_bp_reason reason)
c906108c 10506{
8181d85f 10507 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 10508 struct remote_state *rs = get_remote_state ();
96baa820 10509
4082afcc 10510 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10511 {
8d64371b
TT
10512 char *p = rs->buf.data ();
10513 char *endbuf = p + get_remote_packet_size ();
802188a7 10514
28439a30
PA
10515 /* Make sure the remote is pointing at the right process, if
10516 necessary. */
10517 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10518 set_general_process ();
10519
96baa820
JM
10520 *(p++) = 'z';
10521 *(p++) = '0';
10522 *(p++) = ',';
10523
8181d85f
DJ
10524 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10525 p += hexnumstr (p, addr);
579c6ad9 10526 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10527
6d820c5c 10528 putpkt (rs->buf);
8d64371b 10529 getpkt (&rs->buf, 0);
96baa820 10530
6d820c5c 10531 return (rs->buf[0] == 'E');
96baa820
JM
10532 }
10533
f6ac5f3d 10534 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
c906108c
SS
10535}
10536
f486487f 10537static enum Z_packet_type
d471ea57
AC
10538watchpoint_to_Z_packet (int type)
10539{
10540 switch (type)
10541 {
10542 case hw_write:
bb858e6a 10543 return Z_PACKET_WRITE_WP;
d471ea57
AC
10544 break;
10545 case hw_read:
bb858e6a 10546 return Z_PACKET_READ_WP;
d471ea57
AC
10547 break;
10548 case hw_access:
bb858e6a 10549 return Z_PACKET_ACCESS_WP;
d471ea57
AC
10550 break;
10551 default:
8e65ff28 10552 internal_error (__FILE__, __LINE__,
e2e0b3e5 10553 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
10554 }
10555}
10556
f6ac5f3d
PA
10557int
10558remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10559 enum target_hw_bp_type type, struct expression *cond)
96baa820 10560{
d01949b6 10561 struct remote_state *rs = get_remote_state ();
8d64371b 10562 char *endbuf = rs->buf.data () + get_remote_packet_size ();
e514a9d6 10563 char *p;
d471ea57 10564 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 10565
4082afcc 10566 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 10567 return 1;
802188a7 10568
28439a30
PA
10569 /* Make sure the remote is pointing at the right process, if
10570 necessary. */
10571 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10572 set_general_process ();
10573
8d64371b
TT
10574 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10575 p = strchr (rs->buf.data (), '\0');
96baa820
JM
10576 addr = remote_address_masked (addr);
10577 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10578 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 10579
6d820c5c 10580 putpkt (rs->buf);
8d64371b 10581 getpkt (&rs->buf, 0);
96baa820 10582
6d820c5c 10583 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10584 {
10585 case PACKET_ERROR:
d471ea57 10586 return -1;
85d721b8
PA
10587 case PACKET_UNKNOWN:
10588 return 1;
d471ea57
AC
10589 case PACKET_OK:
10590 return 0;
10591 }
8e65ff28 10592 internal_error (__FILE__, __LINE__,
e2e0b3e5 10593 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
10594}
10595
57810aa7 10596bool
f6ac5f3d
PA
10597remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10598 CORE_ADDR start, int length)
283002cf
MR
10599{
10600 CORE_ADDR diff = remote_address_masked (addr - start);
10601
10602 return diff < length;
10603}
10604
d471ea57 10605
f6ac5f3d
PA
10606int
10607remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10608 enum target_hw_bp_type type, struct expression *cond)
96baa820 10609{
d01949b6 10610 struct remote_state *rs = get_remote_state ();
8d64371b 10611 char *endbuf = rs->buf.data () + get_remote_packet_size ();
e514a9d6 10612 char *p;
d471ea57
AC
10613 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10614
4082afcc 10615 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 10616 return -1;
802188a7 10617
28439a30
PA
10618 /* Make sure the remote is pointing at the right process, if
10619 necessary. */
10620 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10621 set_general_process ();
10622
8d64371b
TT
10623 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10624 p = strchr (rs->buf.data (), '\0');
96baa820
JM
10625 addr = remote_address_masked (addr);
10626 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10627 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c 10628 putpkt (rs->buf);
8d64371b 10629 getpkt (&rs->buf, 0);
96baa820 10630
6d820c5c 10631 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10632 {
10633 case PACKET_ERROR:
10634 case PACKET_UNKNOWN:
10635 return -1;
10636 case PACKET_OK:
10637 return 0;
10638 }
8e65ff28 10639 internal_error (__FILE__, __LINE__,
e2e0b3e5 10640 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
10641}
10642
3c3bea1c 10643
60fcc1c3
TT
10644static int remote_hw_watchpoint_limit = -1;
10645static int remote_hw_watchpoint_length_limit = -1;
10646static int remote_hw_breakpoint_limit = -1;
d471ea57 10647
f6ac5f3d
PA
10648int
10649remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
480a3f21
PW
10650{
10651 if (remote_hw_watchpoint_length_limit == 0)
10652 return 0;
10653 else if (remote_hw_watchpoint_length_limit < 0)
10654 return 1;
10655 else if (len <= remote_hw_watchpoint_length_limit)
10656 return 1;
10657 else
10658 return 0;
10659}
10660
f6ac5f3d
PA
10661int
10662remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
96baa820 10663{
3c3bea1c
GS
10664 if (type == bp_hardware_breakpoint)
10665 {
10666 if (remote_hw_breakpoint_limit == 0)
10667 return 0;
501eef12
AC
10668 else if (remote_hw_breakpoint_limit < 0)
10669 return 1;
3c3bea1c
GS
10670 else if (cnt <= remote_hw_breakpoint_limit)
10671 return 1;
10672 }
10673 else
10674 {
10675 if (remote_hw_watchpoint_limit == 0)
10676 return 0;
501eef12
AC
10677 else if (remote_hw_watchpoint_limit < 0)
10678 return 1;
3c3bea1c
GS
10679 else if (ot)
10680 return -1;
10681 else if (cnt <= remote_hw_watchpoint_limit)
10682 return 1;
10683 }
10684 return -1;
10685}
10686
f7e6eed5
PA
10687/* The to_stopped_by_sw_breakpoint method of target remote. */
10688
57810aa7 10689bool
f6ac5f3d 10690remote_target::stopped_by_sw_breakpoint ()
f7e6eed5 10691{
799a2abe 10692 struct thread_info *thread = inferior_thread ();
f7e6eed5 10693
799a2abe 10694 return (thread->priv != NULL
7aabaf9d
SM
10695 && (get_remote_thread_info (thread)->stop_reason
10696 == TARGET_STOPPED_BY_SW_BREAKPOINT));
f7e6eed5
PA
10697}
10698
10699/* The to_supports_stopped_by_sw_breakpoint method of target
10700 remote. */
10701
57810aa7 10702bool
f6ac5f3d 10703remote_target::supports_stopped_by_sw_breakpoint ()
f7e6eed5 10704{
f7e6eed5
PA
10705 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10706}
10707
10708/* The to_stopped_by_hw_breakpoint method of target remote. */
10709
57810aa7 10710bool
f6ac5f3d 10711remote_target::stopped_by_hw_breakpoint ()
f7e6eed5 10712{
799a2abe 10713 struct thread_info *thread = inferior_thread ();
f7e6eed5 10714
799a2abe 10715 return (thread->priv != NULL
7aabaf9d
SM
10716 && (get_remote_thread_info (thread)->stop_reason
10717 == TARGET_STOPPED_BY_HW_BREAKPOINT));
f7e6eed5
PA
10718}
10719
10720/* The to_supports_stopped_by_hw_breakpoint method of target
10721 remote. */
10722
57810aa7 10723bool
f6ac5f3d 10724remote_target::supports_stopped_by_hw_breakpoint ()
f7e6eed5 10725{
f7e6eed5
PA
10726 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10727}
10728
57810aa7 10729bool
f6ac5f3d 10730remote_target::stopped_by_watchpoint ()
3c3bea1c 10731{
799a2abe 10732 struct thread_info *thread = inferior_thread ();
ee154bee 10733
799a2abe 10734 return (thread->priv != NULL
7aabaf9d
SM
10735 && (get_remote_thread_info (thread)->stop_reason
10736 == TARGET_STOPPED_BY_WATCHPOINT));
3c3bea1c
GS
10737}
10738
57810aa7 10739bool
f6ac5f3d 10740remote_target::stopped_data_address (CORE_ADDR *addr_p)
3c3bea1c 10741{
799a2abe 10742 struct thread_info *thread = inferior_thread ();
a744cf53 10743
799a2abe 10744 if (thread->priv != NULL
7aabaf9d
SM
10745 && (get_remote_thread_info (thread)->stop_reason
10746 == TARGET_STOPPED_BY_WATCHPOINT))
4aa7a7f5 10747 {
7aabaf9d 10748 *addr_p = get_remote_thread_info (thread)->watch_data_address;
57810aa7 10749 return true;
4aa7a7f5
JJ
10750 }
10751
57810aa7 10752 return false;
3c3bea1c
GS
10753}
10754
10755
f6ac5f3d
PA
10756int
10757remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10758 struct bp_target_info *bp_tgt)
3c3bea1c 10759{
0d5ed153 10760 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10761 struct remote_state *rs;
bba74b36 10762 char *p, *endbuf;
dd61ec5c 10763 char *message;
3c3bea1c 10764
4082afcc 10765 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10766 return -1;
2bc416ba 10767
28439a30
PA
10768 /* Make sure the remote is pointing at the right process, if
10769 necessary. */
10770 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10771 set_general_process ();
10772
4fff2411 10773 rs = get_remote_state ();
8d64371b
TT
10774 p = rs->buf.data ();
10775 endbuf = p + get_remote_packet_size ();
4fff2411 10776
96baa820
JM
10777 *(p++) = 'Z';
10778 *(p++) = '1';
10779 *(p++) = ',';
802188a7 10780
0d5ed153 10781 addr = remote_address_masked (addr);
96baa820 10782 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10783 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10784
f6ac5f3d 10785 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10786 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10787
f6ac5f3d 10788 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10789 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10790
6d820c5c 10791 putpkt (rs->buf);
8d64371b 10792 getpkt (&rs->buf, 0);
96baa820 10793
6d820c5c 10794 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10795 {
10796 case PACKET_ERROR:
dd61ec5c 10797 if (rs->buf[1] == '.')
dda83cd7
SM
10798 {
10799 message = strchr (&rs->buf[2], '.');
10800 if (message)
10801 error (_("Remote failure reply: %s"), message + 1);
10802 }
dd61ec5c 10803 return -1;
d471ea57
AC
10804 case PACKET_UNKNOWN:
10805 return -1;
10806 case PACKET_OK:
10807 return 0;
10808 }
8e65ff28 10809 internal_error (__FILE__, __LINE__,
e2e0b3e5 10810 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10811}
10812
d471ea57 10813
f6ac5f3d
PA
10814int
10815remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10816 struct bp_target_info *bp_tgt)
96baa820 10817{
8181d85f 10818 CORE_ADDR addr;
d01949b6 10819 struct remote_state *rs = get_remote_state ();
8d64371b
TT
10820 char *p = rs->buf.data ();
10821 char *endbuf = p + get_remote_packet_size ();
c8189ed1 10822
4082afcc 10823 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10824 return -1;
802188a7 10825
28439a30
PA
10826 /* Make sure the remote is pointing at the right process, if
10827 necessary. */
10828 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10829 set_general_process ();
10830
96baa820
JM
10831 *(p++) = 'z';
10832 *(p++) = '1';
10833 *(p++) = ',';
802188a7 10834
8181d85f 10835 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10836 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10837 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10838
6d820c5c 10839 putpkt (rs->buf);
8d64371b 10840 getpkt (&rs->buf, 0);
802188a7 10841
6d820c5c 10842 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10843 {
10844 case PACKET_ERROR:
10845 case PACKET_UNKNOWN:
10846 return -1;
10847 case PACKET_OK:
10848 return 0;
10849 }
8e65ff28 10850 internal_error (__FILE__, __LINE__,
e2e0b3e5 10851 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10852}
96baa820 10853
4a5e7a5b
PA
10854/* Verify memory using the "qCRC:" request. */
10855
f6ac5f3d
PA
10856int
10857remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
4a5e7a5b
PA
10858{
10859 struct remote_state *rs = get_remote_state ();
10860 unsigned long host_crc, target_crc;
10861 char *tmp;
10862
936d2992
PA
10863 /* It doesn't make sense to use qCRC if the remote target is
10864 connected but not running. */
55f6301a
TT
10865 if (target_has_execution ()
10866 && packet_support (PACKET_qCRC) != PACKET_DISABLE)
936d2992
PA
10867 {
10868 enum packet_result result;
28439a30 10869
936d2992
PA
10870 /* Make sure the remote is pointing at the right process. */
10871 set_general_process ();
4a5e7a5b 10872
936d2992 10873 /* FIXME: assumes lma can fit into long. */
8d64371b 10874 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
936d2992
PA
10875 (long) lma, (long) size);
10876 putpkt (rs->buf);
4a5e7a5b 10877
936d2992
PA
10878 /* Be clever; compute the host_crc before waiting for target
10879 reply. */
10880 host_crc = xcrc32 (data, size, 0xffffffff);
10881
8d64371b 10882 getpkt (&rs->buf, 0);
4a5e7a5b 10883
936d2992
PA
10884 result = packet_ok (rs->buf,
10885 &remote_protocol_packets[PACKET_qCRC]);
10886 if (result == PACKET_ERROR)
10887 return -1;
10888 else if (result == PACKET_OK)
10889 {
10890 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10891 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10892
936d2992
PA
10893 return (host_crc == target_crc);
10894 }
10895 }
4a5e7a5b 10896
f6ac5f3d 10897 return simple_verify_memory (this, data, lma, size);
4a5e7a5b
PA
10898}
10899
c906108c
SS
10900/* compare-sections command
10901
10902 With no arguments, compares each loadable section in the exec bfd
10903 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10904 Useful for verifying the image on the target against the exec file. */
e514a9d6 10905
c906108c 10906static void
ac88e2de 10907compare_sections_command (const char *args, int from_tty)
c906108c
SS
10908{
10909 asection *s;
ce359b09 10910 const char *sectname;
c906108c
SS
10911 bfd_size_type size;
10912 bfd_vma lma;
10913 int matched = 0;
10914 int mismatched = 0;
4a5e7a5b 10915 int res;
95cf3b38 10916 int read_only = 0;
c906108c 10917
7e10abd1 10918 if (!current_program_space->exec_bfd ())
8a3fe4f8 10919 error (_("command cannot be used without an exec file"));
c906108c 10920
95cf3b38
DT
10921 if (args != NULL && strcmp (args, "-r") == 0)
10922 {
10923 read_only = 1;
10924 args = NULL;
10925 }
10926
7e10abd1 10927 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
c906108c
SS
10928 {
10929 if (!(s->flags & SEC_LOAD))
0df8b418 10930 continue; /* Skip non-loadable section. */
c906108c 10931
95cf3b38
DT
10932 if (read_only && (s->flags & SEC_READONLY) == 0)
10933 continue; /* Skip writeable sections */
10934
fd361982 10935 size = bfd_section_size (s);
c906108c 10936 if (size == 0)
0df8b418 10937 continue; /* Skip zero-length section. */
c906108c 10938
fd361982 10939 sectname = bfd_section_name (s);
c906108c 10940 if (args && strcmp (args, sectname) != 0)
0df8b418 10941 continue; /* Not the section selected by user. */
c906108c 10942
0df8b418 10943 matched = 1; /* Do this section. */
c906108c 10944 lma = s->lma;
c906108c 10945
b80406ac 10946 gdb::byte_vector sectdata (size);
7e10abd1
TT
10947 bfd_get_section_contents (current_program_space->exec_bfd (), s,
10948 sectdata.data (), 0, size);
c906108c 10949
b80406ac 10950 res = target_verify_memory (sectdata.data (), lma, size);
4a5e7a5b
PA
10951
10952 if (res == -1)
5af949e3 10953 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10954 paddress (target_gdbarch (), lma),
10955 paddress (target_gdbarch (), lma + size));
c906108c 10956
5af949e3 10957 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10958 paddress (target_gdbarch (), lma),
10959 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10960 if (res)
c906108c
SS
10961 printf_filtered ("matched.\n");
10962 else
c5aa993b
JM
10963 {
10964 printf_filtered ("MIS-MATCHED!\n");
10965 mismatched++;
10966 }
c906108c
SS
10967 }
10968 if (mismatched > 0)
936d2992 10969 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10970the loaded file\n"));
c906108c 10971 if (args && !matched)
a3f17187 10972 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10973}
10974
0e7f50da
UW
10975/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10976 into remote target. The number of bytes written to the remote
10977 target is returned, or -1 for error. */
10978
6b8edb51
PA
10979target_xfer_status
10980remote_target::remote_write_qxfer (const char *object_name,
10981 const char *annex, const gdb_byte *writebuf,
10982 ULONGEST offset, LONGEST len,
10983 ULONGEST *xfered_len,
10984 struct packet_config *packet)
0e7f50da
UW
10985{
10986 int i, buf_len;
10987 ULONGEST n;
0e7f50da
UW
10988 struct remote_state *rs = get_remote_state ();
10989 int max_size = get_memory_write_packet_size ();
10990
7cc244de 10991 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10992 return TARGET_XFER_E_IO;
0e7f50da
UW
10993
10994 /* Insert header. */
8d64371b 10995 i = snprintf (rs->buf.data (), max_size,
0e7f50da
UW
10996 "qXfer:%s:write:%s:%s:",
10997 object_name, annex ? annex : "",
10998 phex_nz (offset, sizeof offset));
10999 max_size -= (i + 1);
11000
11001 /* Escape as much data as fits into rs->buf. */
11002 buf_len = remote_escape_output
8d64371b 11003 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
0e7f50da 11004
8d64371b
TT
11005 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
11006 || getpkt_sane (&rs->buf, 0) < 0
0e7f50da 11007 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 11008 return TARGET_XFER_E_IO;
0e7f50da 11009
8d64371b 11010 unpack_varlen_hex (rs->buf.data (), &n);
9b409511
YQ
11011
11012 *xfered_len = n;
92ffd475 11013 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
0e7f50da
UW
11014}
11015
0876f84a
DJ
11016/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
11017 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
11018 number of bytes read is returned, or 0 for EOF, or -1 for error.
11019 The number of bytes read may be less than LEN without indicating an
11020 EOF. PACKET is checked and updated to indicate whether the remote
11021 target supports this object. */
11022
6b8edb51
PA
11023target_xfer_status
11024remote_target::remote_read_qxfer (const char *object_name,
11025 const char *annex,
11026 gdb_byte *readbuf, ULONGEST offset,
11027 LONGEST len,
11028 ULONGEST *xfered_len,
11029 struct packet_config *packet)
0876f84a 11030{
0876f84a 11031 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
11032 LONGEST i, n, packet_len;
11033
7cc244de 11034 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 11035 return TARGET_XFER_E_IO;
0876f84a
DJ
11036
11037 /* Check whether we've cached an end-of-object packet that matches
11038 this request. */
8e88304f 11039 if (rs->finished_object)
0876f84a 11040 {
8e88304f
TT
11041 if (strcmp (object_name, rs->finished_object) == 0
11042 && strcmp (annex ? annex : "", rs->finished_annex) == 0
11043 && offset == rs->finished_offset)
9b409511
YQ
11044 return TARGET_XFER_EOF;
11045
0876f84a
DJ
11046
11047 /* Otherwise, we're now reading something different. Discard
11048 the cache. */
8e88304f
TT
11049 xfree (rs->finished_object);
11050 xfree (rs->finished_annex);
11051 rs->finished_object = NULL;
11052 rs->finished_annex = NULL;
0876f84a
DJ
11053 }
11054
11055 /* Request only enough to fit in a single packet. The actual data
11056 may not, since we don't know how much of it will need to be escaped;
11057 the target is free to respond with slightly less data. We subtract
11058 five to account for the response type and the protocol frame. */
768adc05 11059 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
8d64371b
TT
11060 snprintf (rs->buf.data (), get_remote_packet_size () - 4,
11061 "qXfer:%s:read:%s:%s,%s",
0876f84a
DJ
11062 object_name, annex ? annex : "",
11063 phex_nz (offset, sizeof offset),
11064 phex_nz (n, sizeof n));
11065 i = putpkt (rs->buf);
11066 if (i < 0)
2ed4b548 11067 return TARGET_XFER_E_IO;
0876f84a
DJ
11068
11069 rs->buf[0] = '\0';
8d64371b 11070 packet_len = getpkt_sane (&rs->buf, 0);
0876f84a 11071 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 11072 return TARGET_XFER_E_IO;
0876f84a
DJ
11073
11074 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
8d64371b 11075 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
0876f84a
DJ
11076
11077 /* 'm' means there is (or at least might be) more data after this
11078 batch. That does not make sense unless there's at least one byte
11079 of data in this reply. */
11080 if (rs->buf[0] == 'm' && packet_len == 1)
11081 error (_("Remote qXfer reply contained no data."));
11082
11083 /* Got some data. */
8d64371b 11084 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
bc20a4af 11085 packet_len - 1, readbuf, n);
0876f84a
DJ
11086
11087 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
11088 or possibly empty. If we have the final block of a non-empty
11089 object, record this fact to bypass a subsequent partial read. */
11090 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 11091 {
8e88304f
TT
11092 rs->finished_object = xstrdup (object_name);
11093 rs->finished_annex = xstrdup (annex ? annex : "");
11094 rs->finished_offset = offset + i;
0876f84a
DJ
11095 }
11096
9b409511
YQ
11097 if (i == 0)
11098 return TARGET_XFER_EOF;
11099 else
11100 {
11101 *xfered_len = i;
11102 return TARGET_XFER_OK;
11103 }
0876f84a
DJ
11104}
11105
f6ac5f3d
PA
11106enum target_xfer_status
11107remote_target::xfer_partial (enum target_object object,
11108 const char *annex, gdb_byte *readbuf,
11109 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
11110 ULONGEST *xfered_len)
c906108c 11111{
82f73884 11112 struct remote_state *rs;
c906108c 11113 int i;
6d820c5c 11114 char *p2;
1e3ff5ad 11115 char query_type;
124e13d9 11116 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 11117
e6e4e701 11118 set_remote_traceframe ();
82f73884
PA
11119 set_general_thread (inferior_ptid);
11120
11121 rs = get_remote_state ();
11122
b2182ed2 11123 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
11124 if (object == TARGET_OBJECT_MEMORY)
11125 {
2d717e4f
DJ
11126 /* If the remote target is connected but not running, we should
11127 pass this request down to a lower stratum (e.g. the executable
11128 file). */
55f6301a 11129 if (!target_has_execution ())
9b409511 11130 return TARGET_XFER_EOF;
2d717e4f 11131
21e3b9b9 11132 if (writebuf != NULL)
124e13d9
SM
11133 return remote_write_bytes (offset, writebuf, len, unit_size,
11134 xfered_len);
21e3b9b9 11135 else
6b8edb51 11136 return remote_read_bytes (offset, readbuf, len, unit_size,
124e13d9 11137 xfered_len);
21e3b9b9
DJ
11138 }
11139
4aa995e1
PA
11140 /* Handle extra signal info using qxfer packets. */
11141 if (object == TARGET_OBJECT_SIGNAL_INFO)
11142 {
11143 if (readbuf)
f6ac5f3d 11144 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
9b409511 11145 xfered_len, &remote_protocol_packets
4aa995e1
PA
11146 [PACKET_qXfer_siginfo_read]);
11147 else
f6ac5f3d 11148 return remote_write_qxfer ("siginfo", annex,
9b409511 11149 writebuf, offset, len, xfered_len,
4aa995e1
PA
11150 &remote_protocol_packets
11151 [PACKET_qXfer_siginfo_write]);
11152 }
11153
0fb4aa4b
PA
11154 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
11155 {
11156 if (readbuf)
f6ac5f3d 11157 return remote_read_qxfer ("statictrace", annex,
9b409511 11158 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
11159 &remote_protocol_packets
11160 [PACKET_qXfer_statictrace_read]);
11161 else
2ed4b548 11162 return TARGET_XFER_E_IO;
0fb4aa4b
PA
11163 }
11164
a76d924d
DJ
11165 /* Only handle flash writes. */
11166 if (writebuf != NULL)
11167 {
a76d924d
DJ
11168 switch (object)
11169 {
11170 case TARGET_OBJECT_FLASH:
6b8edb51 11171 return remote_flash_write (offset, len, xfered_len,
9b409511 11172 writebuf);
a76d924d
DJ
11173
11174 default:
2ed4b548 11175 return TARGET_XFER_E_IO;
a76d924d
DJ
11176 }
11177 }
4b8a223f 11178
1e3ff5ad
AC
11179 /* Map pre-existing objects onto letters. DO NOT do this for new
11180 objects!!! Instead specify new query packets. */
11181 switch (object)
c906108c 11182 {
1e3ff5ad
AC
11183 case TARGET_OBJECT_AVR:
11184 query_type = 'R';
11185 break;
802188a7
RM
11186
11187 case TARGET_OBJECT_AUXV:
0876f84a 11188 gdb_assert (annex == NULL);
f6ac5f3d 11189 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
9b409511 11190 xfered_len,
0876f84a 11191 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 11192
23181151
DJ
11193 case TARGET_OBJECT_AVAILABLE_FEATURES:
11194 return remote_read_qxfer
f6ac5f3d 11195 ("features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
11196 &remote_protocol_packets[PACKET_qXfer_features]);
11197
cfa9d6d9
DJ
11198 case TARGET_OBJECT_LIBRARIES:
11199 return remote_read_qxfer
f6ac5f3d 11200 ("libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
11201 &remote_protocol_packets[PACKET_qXfer_libraries]);
11202
2268b414
JK
11203 case TARGET_OBJECT_LIBRARIES_SVR4:
11204 return remote_read_qxfer
f6ac5f3d 11205 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
11206 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
11207
fd79ecee
DJ
11208 case TARGET_OBJECT_MEMORY_MAP:
11209 gdb_assert (annex == NULL);
f6ac5f3d 11210 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
9b409511 11211 xfered_len,
fd79ecee
DJ
11212 &remote_protocol_packets[PACKET_qXfer_memory_map]);
11213
07e059b5
VP
11214 case TARGET_OBJECT_OSDATA:
11215 /* Should only get here if we're connected. */
5d93a237 11216 gdb_assert (rs->remote_desc);
07e059b5 11217 return remote_read_qxfer
f6ac5f3d 11218 ("osdata", annex, readbuf, offset, len, xfered_len,
dda83cd7 11219 &remote_protocol_packets[PACKET_qXfer_osdata]);
07e059b5 11220
dc146f7c
VP
11221 case TARGET_OBJECT_THREADS:
11222 gdb_assert (annex == NULL);
f6ac5f3d 11223 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
9b409511 11224 xfered_len,
dc146f7c
VP
11225 &remote_protocol_packets[PACKET_qXfer_threads]);
11226
b3b9301e
PA
11227 case TARGET_OBJECT_TRACEFRAME_INFO:
11228 gdb_assert (annex == NULL);
11229 return remote_read_qxfer
f6ac5f3d 11230 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 11231 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
11232
11233 case TARGET_OBJECT_FDPIC:
f6ac5f3d 11234 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
9b409511 11235 xfered_len,
78d85199 11236 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
11237
11238 case TARGET_OBJECT_OPENVMS_UIB:
f6ac5f3d 11239 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
9b409511 11240 xfered_len,
169081d0
TG
11241 &remote_protocol_packets[PACKET_qXfer_uib]);
11242
9accd112 11243 case TARGET_OBJECT_BTRACE:
f6ac5f3d 11244 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
9b409511 11245 xfered_len,
dda83cd7 11246 &remote_protocol_packets[PACKET_qXfer_btrace]);
9accd112 11247
f4abbc16 11248 case TARGET_OBJECT_BTRACE_CONF:
f6ac5f3d 11249 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
f4abbc16
MM
11250 len, xfered_len,
11251 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11252
c78fa86a 11253 case TARGET_OBJECT_EXEC_FILE:
f6ac5f3d 11254 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
c78fa86a
GB
11255 len, xfered_len,
11256 &remote_protocol_packets[PACKET_qXfer_exec_file]);
11257
1e3ff5ad 11258 default:
2ed4b548 11259 return TARGET_XFER_E_IO;
c906108c
SS
11260 }
11261
0df8b418 11262 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 11263 large enough let the caller deal with it. */
ea9c271d 11264 if (len < get_remote_packet_size ())
2ed4b548 11265 return TARGET_XFER_E_IO;
ea9c271d 11266 len = get_remote_packet_size ();
1e3ff5ad 11267
23860348 11268 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 11269 if (!rs->remote_desc)
8a3fe4f8 11270 error (_("remote query is only available after target open"));
c906108c 11271
1e3ff5ad 11272 gdb_assert (annex != NULL);
4b8a223f 11273 gdb_assert (readbuf != NULL);
c906108c 11274
8d64371b 11275 p2 = rs->buf.data ();
c906108c
SS
11276 *p2++ = 'q';
11277 *p2++ = query_type;
11278
23860348
MS
11279 /* We used one buffer char for the remote protocol q command and
11280 another for the query type. As the remote protocol encapsulation
11281 uses 4 chars plus one extra in case we are debugging
11282 (remote_debug), we have PBUFZIZ - 7 left to pack the query
11283 string. */
c906108c 11284 i = 0;
ea9c271d 11285 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 11286 {
1e3ff5ad
AC
11287 /* Bad caller may have sent forbidden characters. */
11288 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11289 *p2++ = annex[i];
c906108c
SS
11290 i++;
11291 }
1e3ff5ad
AC
11292 *p2 = '\0';
11293 gdb_assert (annex[i] == '\0');
c906108c 11294
6d820c5c 11295 i = putpkt (rs->buf);
c5aa993b 11296 if (i < 0)
2ed4b548 11297 return TARGET_XFER_E_IO;
c906108c 11298
8d64371b
TT
11299 getpkt (&rs->buf, 0);
11300 strcpy ((char *) readbuf, rs->buf.data ());
c906108c 11301
9b409511 11302 *xfered_len = strlen ((char *) readbuf);
92ffd475 11303 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
11304}
11305
09c98b44
DB
11306/* Implementation of to_get_memory_xfer_limit. */
11307
f6ac5f3d
PA
11308ULONGEST
11309remote_target::get_memory_xfer_limit ()
09c98b44
DB
11310{
11311 return get_memory_write_packet_size ();
11312}
11313
f6ac5f3d
PA
11314int
11315remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11316 const gdb_byte *pattern, ULONGEST pattern_len,
11317 CORE_ADDR *found_addrp)
08388c79 11318{
f5656ead 11319 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
11320 struct remote_state *rs = get_remote_state ();
11321 int max_size = get_memory_write_packet_size ();
11322 struct packet_config *packet =
11323 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
11324 /* Number of packet bytes used to encode the pattern;
11325 this could be more than PATTERN_LEN due to escape characters. */
08388c79 11326 int escaped_pattern_len;
0df8b418 11327 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
11328 int used_pattern_len;
11329 int i;
11330 int found;
11331 ULONGEST found_addr;
11332
4a72de73
TT
11333 auto read_memory = [=] (CORE_ADDR addr, gdb_byte *result, size_t len)
11334 {
11335 return (target_read (this, TARGET_OBJECT_MEMORY, NULL, result, addr, len)
11336 == len);
11337 };
11338
7cc244de
PA
11339 /* Don't go to the target if we don't have to. This is done before
11340 checking packet_config_support to avoid the possibility that a
11341 success for this edge case means the facility works in
11342 general. */
08388c79
DE
11343 if (pattern_len > search_space_len)
11344 return 0;
11345 if (pattern_len == 0)
11346 {
11347 *found_addrp = start_addr;
11348 return 1;
11349 }
11350
11351 /* If we already know the packet isn't supported, fall back to the simple
11352 way of searching memory. */
11353
4082afcc 11354 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
11355 {
11356 /* Target doesn't provided special support, fall back and use the
11357 standard support (copy memory and do the search here). */
4a72de73 11358 return simple_search_memory (read_memory, start_addr, search_space_len,
08388c79
DE
11359 pattern, pattern_len, found_addrp);
11360 }
11361
28439a30
PA
11362 /* Make sure the remote is pointing at the right process. */
11363 set_general_process ();
11364
08388c79 11365 /* Insert header. */
8d64371b 11366 i = snprintf (rs->buf.data (), max_size,
08388c79 11367 "qSearch:memory:%s;%s;",
5af949e3 11368 phex_nz (start_addr, addr_size),
08388c79
DE
11369 phex_nz (search_space_len, sizeof (search_space_len)));
11370 max_size -= (i + 1);
11371
11372 /* Escape as much data as fits into rs->buf. */
11373 escaped_pattern_len =
8d64371b
TT
11374 remote_escape_output (pattern, pattern_len, 1,
11375 (gdb_byte *) rs->buf.data () + i,
08388c79
DE
11376 &used_pattern_len, max_size);
11377
11378 /* Bail if the pattern is too large. */
11379 if (used_pattern_len != pattern_len)
9b20d036 11380 error (_("Pattern is too large to transmit to remote target."));
08388c79 11381
8d64371b
TT
11382 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11383 || getpkt_sane (&rs->buf, 0) < 0
08388c79
DE
11384 || packet_ok (rs->buf, packet) != PACKET_OK)
11385 {
11386 /* The request may not have worked because the command is not
11387 supported. If so, fall back to the simple way. */
7cc244de 11388 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79 11389 {
4a72de73 11390 return simple_search_memory (read_memory, start_addr, search_space_len,
08388c79
DE
11391 pattern, pattern_len, found_addrp);
11392 }
11393 return -1;
11394 }
11395
11396 if (rs->buf[0] == '0')
11397 found = 0;
11398 else if (rs->buf[0] == '1')
11399 {
11400 found = 1;
11401 if (rs->buf[1] != ',')
8d64371b
TT
11402 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11403 unpack_varlen_hex (&rs->buf[2], &found_addr);
08388c79
DE
11404 *found_addrp = found_addr;
11405 }
11406 else
8d64371b 11407 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
08388c79
DE
11408
11409 return found;
11410}
11411
f6ac5f3d
PA
11412void
11413remote_target::rcmd (const char *command, struct ui_file *outbuf)
96baa820 11414{
d01949b6 11415 struct remote_state *rs = get_remote_state ();
8d64371b 11416 char *p = rs->buf.data ();
96baa820 11417
5d93a237 11418 if (!rs->remote_desc)
8a3fe4f8 11419 error (_("remote rcmd is only available after target open"));
96baa820 11420
23860348 11421 /* Send a NULL command across as an empty command. */
7be570e7
JM
11422 if (command == NULL)
11423 command = "";
11424
23860348 11425 /* The query prefix. */
8d64371b
TT
11426 strcpy (rs->buf.data (), "qRcmd,");
11427 p = strchr (rs->buf.data (), '\0');
96baa820 11428
8d64371b 11429 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
3e43a32a 11430 > get_remote_packet_size ())
8a3fe4f8 11431 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 11432
23860348 11433 /* Encode the actual command. */
a30bf1f1 11434 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 11435
6d820c5c 11436 if (putpkt (rs->buf) < 0)
8a3fe4f8 11437 error (_("Communication problem with target."));
96baa820
JM
11438
11439 /* get/display the response */
11440 while (1)
11441 {
2e9f7625
DJ
11442 char *buf;
11443
00bf0b85 11444 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 11445 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 11446 rs->buf[0] = '\0';
8d64371b 11447 if (getpkt_sane (&rs->buf, 0) == -1)
dda83cd7
SM
11448 {
11449 /* Timeout. Continue to (try to) read responses.
11450 This is better than stopping with an error, assuming the stub
11451 is still executing the (long) monitor command.
11452 If needed, the user can interrupt gdb using C-c, obtaining
11453 an effect similar to stop on timeout. */
11454 continue;
11455 }
8d64371b 11456 buf = rs->buf.data ();
96baa820 11457 if (buf[0] == '\0')
8a3fe4f8 11458 error (_("Target does not support this command."));
96baa820
JM
11459 if (buf[0] == 'O' && buf[1] != 'K')
11460 {
23860348 11461 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
11462 continue;
11463 }
11464 if (strcmp (buf, "OK") == 0)
11465 break;
7be570e7
JM
11466 if (strlen (buf) == 3 && buf[0] == 'E'
11467 && isdigit (buf[1]) && isdigit (buf[2]))
11468 {
8a3fe4f8 11469 error (_("Protocol error with Rcmd"));
7be570e7 11470 }
96baa820
JM
11471 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11472 {
11473 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 11474
96baa820
JM
11475 fputc_unfiltered (c, outbuf);
11476 }
11477 break;
11478 }
11479}
11480
f6ac5f3d
PA
11481std::vector<mem_region>
11482remote_target::memory_map ()
fd79ecee 11483{
a664f67e 11484 std::vector<mem_region> result;
9018be22 11485 gdb::optional<gdb::char_vector> text
8b88a78e 11486 = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
fd79ecee
DJ
11487
11488 if (text)
9018be22 11489 result = parse_memory_map (text->data ());
fd79ecee
DJ
11490
11491 return result;
11492}
11493
c906108c 11494static void
ac88e2de 11495packet_command (const char *args, int from_tty)
c906108c 11496{
6b8edb51 11497 remote_target *remote = get_current_remote_target ();
c906108c 11498
6b8edb51 11499 if (remote == nullptr)
8a3fe4f8 11500 error (_("command can only be used with remote target"));
c906108c 11501
6b8edb51
PA
11502 remote->packet_command (args, from_tty);
11503}
11504
11505void
11506remote_target::packet_command (const char *args, int from_tty)
11507{
c5aa993b 11508 if (!args)
8a3fe4f8 11509 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
11510
11511 puts_filtered ("sending: ");
11512 print_packet (args);
11513 puts_filtered ("\n");
11514 putpkt (args);
11515
6b8edb51
PA
11516 remote_state *rs = get_remote_state ();
11517
8d64371b 11518 getpkt (&rs->buf, 0);
c906108c 11519 puts_filtered ("received: ");
8d64371b 11520 print_packet (rs->buf.data ());
c906108c
SS
11521 puts_filtered ("\n");
11522}
11523
11524#if 0
23860348 11525/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 11526
a14ed312 11527static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 11528
a14ed312 11529static void threadset_test_cmd (char *cmd, int tty);
c906108c 11530
a14ed312 11531static void threadalive_test (char *cmd, int tty);
c906108c 11532
a14ed312 11533static void threadlist_test_cmd (char *cmd, int tty);
c906108c 11534
23860348 11535int get_and_display_threadinfo (threadref *ref);
c906108c 11536
a14ed312 11537static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 11538
23860348 11539static int thread_display_step (threadref *ref, void *context);
c906108c 11540
a14ed312 11541static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 11542
a14ed312 11543static void init_remote_threadtests (void);
c906108c 11544
23860348 11545#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
11546
11547static void
0b39b52e 11548threadset_test_cmd (const char *cmd, int tty)
c906108c
SS
11549{
11550 int sample_thread = SAMPLE_THREAD;
11551
a3f17187 11552 printf_filtered (_("Remote threadset test\n"));
79d7f229 11553 set_general_thread (sample_thread);
c906108c
SS
11554}
11555
11556
11557static void
0b39b52e 11558threadalive_test (const char *cmd, int tty)
c906108c
SS
11559{
11560 int sample_thread = SAMPLE_THREAD;
e99b03dc 11561 int pid = inferior_ptid.pid ();
fd79271b 11562 ptid_t ptid = ptid_t (pid, sample_thread, 0);
c906108c 11563
79d7f229 11564 if (remote_thread_alive (ptid))
c906108c
SS
11565 printf_filtered ("PASS: Thread alive test\n");
11566 else
11567 printf_filtered ("FAIL: Thread alive test\n");
11568}
11569
23860348 11570void output_threadid (char *title, threadref *ref);
c906108c
SS
11571
11572void
fba45db2 11573output_threadid (char *title, threadref *ref)
c906108c
SS
11574{
11575 char hexid[20];
11576
405feb71 11577 pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */
c906108c
SS
11578 hexid[16] = 0;
11579 printf_filtered ("%s %s\n", title, (&hexid[0]));
11580}
11581
11582static void
0b39b52e 11583threadlist_test_cmd (const char *cmd, int tty)
c906108c
SS
11584{
11585 int startflag = 1;
11586 threadref nextthread;
11587 int done, result_count;
11588 threadref threadlist[3];
11589
11590 printf_filtered ("Remote Threadlist test\n");
11591 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11592 &result_count, &threadlist[0]))
11593 printf_filtered ("FAIL: threadlist test\n");
11594 else
11595 {
11596 threadref *scan = threadlist;
11597 threadref *limit = scan + result_count;
11598
11599 while (scan < limit)
11600 output_threadid (" thread ", scan++);
11601 }
11602}
11603
11604void
fba45db2 11605display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
11606{
11607 output_threadid ("Threadid: ", &info->threadid);
11608 printf_filtered ("Name: %s\n ", info->shortname);
11609 printf_filtered ("State: %s\n", info->display);
11610 printf_filtered ("other: %s\n\n", info->more_display);
11611}
11612
11613int
fba45db2 11614get_and_display_threadinfo (threadref *ref)
c906108c
SS
11615{
11616 int result;
11617 int set;
11618 struct gdb_ext_thread_info threadinfo;
11619
11620 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11621 | TAG_MOREDISPLAY | TAG_DISPLAY;
11622 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11623 display_thread_info (&threadinfo);
11624 return result;
11625}
11626
11627static void
0b39b52e 11628threadinfo_test_cmd (const char *cmd, int tty)
c906108c
SS
11629{
11630 int athread = SAMPLE_THREAD;
11631 threadref thread;
11632 int set;
11633
11634 int_to_threadref (&thread, athread);
11635 printf_filtered ("Remote Threadinfo test\n");
11636 if (!get_and_display_threadinfo (&thread))
11637 printf_filtered ("FAIL cannot get thread info\n");
11638}
11639
11640static int
fba45db2 11641thread_display_step (threadref *ref, void *context)
c906108c
SS
11642{
11643 /* output_threadid(" threadstep ",ref); *//* simple test */
11644 return get_and_display_threadinfo (ref);
11645}
11646
11647static void
0b39b52e 11648threadlist_update_test_cmd (const char *cmd, int tty)
c906108c
SS
11649{
11650 printf_filtered ("Remote Threadlist update test\n");
11651 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11652}
11653
11654static void
11655init_remote_threadtests (void)
11656{
3e43a32a
MS
11657 add_com ("tlist", class_obscure, threadlist_test_cmd,
11658 _("Fetch and print the remote list of "
590042fc 11659 "thread identifiers, one pkt only."));
c906108c 11660 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
590042fc 11661 _("Fetch and display info about one thread."));
c906108c 11662 add_com ("tset", class_obscure, threadset_test_cmd,
590042fc 11663 _("Test setting to a different thread."));
c906108c 11664 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
590042fc 11665 _("Iterate through updating all remote thread info."));
c906108c 11666 add_com ("talive", class_obscure, threadalive_test,
590042fc 11667 _("Remote thread alive test."));
c906108c
SS
11668}
11669
11670#endif /* 0 */
11671
a068643d 11672/* Convert a thread ID to a string. */
f3fb8c85 11673
a068643d 11674std::string
f6ac5f3d 11675remote_target::pid_to_str (ptid_t ptid)
f3fb8c85 11676{
82f73884 11677 struct remote_state *rs = get_remote_state ();
f3fb8c85 11678
d7e15655 11679 if (ptid == null_ptid)
7cee1e54 11680 return normal_pid_to_str (ptid);
0e998d96 11681 else if (ptid.is_pid ())
ecd0ada5
PA
11682 {
11683 /* Printing an inferior target id. */
11684
11685 /* When multi-process extensions are off, there's no way in the
11686 remote protocol to know the remote process id, if there's any
11687 at all. There's one exception --- when we're connected with
11688 target extended-remote, and we manually attached to a process
11689 with "attach PID". We don't record anywhere a flag that
11690 allows us to distinguish that case from the case of
11691 connecting with extended-remote and the stub already being
11692 attached to a process, and reporting yes to qAttached, hence
11693 no smart special casing here. */
11694 if (!remote_multi_process_p (rs))
a068643d 11695 return "Remote target";
ecd0ada5
PA
11696
11697 return normal_pid_to_str (ptid);
82f73884 11698 }
ecd0ada5 11699 else
79d7f229 11700 {
d7e15655 11701 if (magic_null_ptid == ptid)
a068643d 11702 return "Thread <main>";
8020350c 11703 else if (remote_multi_process_p (rs))
e38504b3 11704 if (ptid.lwp () == 0)
de0d863e
DB
11705 return normal_pid_to_str (ptid);
11706 else
a068643d
TT
11707 return string_printf ("Thread %d.%ld",
11708 ptid.pid (), ptid.lwp ());
ecd0ada5 11709 else
a068643d 11710 return string_printf ("Thread %ld", ptid.lwp ());
79d7f229 11711 }
f3fb8c85
MS
11712}
11713
38691318
KB
11714/* Get the address of the thread local variable in OBJFILE which is
11715 stored at OFFSET within the thread local storage for thread PTID. */
11716
f6ac5f3d
PA
11717CORE_ADDR
11718remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11719 CORE_ADDR offset)
38691318 11720{
4082afcc 11721 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
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 ();
571dd617 11726 enum packet_result result;
38691318
KB
11727
11728 strcpy (p, "qGetTLSAddr:");
11729 p += strlen (p);
82f73884 11730 p = write_ptid (p, endp, ptid);
38691318
KB
11731 *p++ = ',';
11732 p += hexnumstr (p, offset);
11733 *p++ = ',';
11734 p += hexnumstr (p, lm);
11735 *p++ = '\0';
11736
6d820c5c 11737 putpkt (rs->buf);
8d64371b 11738 getpkt (&rs->buf, 0);
3e43a32a
MS
11739 result = packet_ok (rs->buf,
11740 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11741 if (result == PACKET_OK)
38691318 11742 {
b926417a 11743 ULONGEST addr;
38691318 11744
8d64371b 11745 unpack_varlen_hex (rs->buf.data (), &addr);
b926417a 11746 return addr;
38691318 11747 }
571dd617 11748 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11749 throw_error (TLS_GENERIC_ERROR,
11750 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11751 else
109c3e39
AC
11752 throw_error (TLS_GENERIC_ERROR,
11753 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11754 }
11755 else
109c3e39
AC
11756 throw_error (TLS_GENERIC_ERROR,
11757 _("TLS not supported or disabled on this target"));
38691318
KB
11758 /* Not reached. */
11759 return 0;
11760}
11761
711e434b
PM
11762/* Provide thread local base, i.e. Thread Information Block address.
11763 Returns 1 if ptid is found and thread_local_base is non zero. */
11764
57810aa7 11765bool
f6ac5f3d 11766remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
711e434b 11767{
4082afcc 11768 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11769 {
11770 struct remote_state *rs = get_remote_state ();
8d64371b
TT
11771 char *p = rs->buf.data ();
11772 char *endp = p + get_remote_packet_size ();
711e434b
PM
11773 enum packet_result result;
11774
11775 strcpy (p, "qGetTIBAddr:");
11776 p += strlen (p);
11777 p = write_ptid (p, endp, ptid);
11778 *p++ = '\0';
11779
11780 putpkt (rs->buf);
8d64371b 11781 getpkt (&rs->buf, 0);
711e434b
PM
11782 result = packet_ok (rs->buf,
11783 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11784 if (result == PACKET_OK)
11785 {
b926417a 11786 ULONGEST val;
8d64371b 11787 unpack_varlen_hex (rs->buf.data (), &val);
711e434b 11788 if (addr)
b926417a 11789 *addr = (CORE_ADDR) val;
57810aa7 11790 return true;
711e434b
PM
11791 }
11792 else if (result == PACKET_UNKNOWN)
11793 error (_("Remote target doesn't support qGetTIBAddr packet"));
11794 else
11795 error (_("Remote target failed to process qGetTIBAddr request"));
11796 }
11797 else
11798 error (_("qGetTIBAddr not supported or disabled on this target"));
11799 /* Not reached. */
57810aa7 11800 return false;
711e434b
PM
11801}
11802
29709017
DJ
11803/* Support for inferring a target description based on the current
11804 architecture and the size of a 'g' packet. While the 'g' packet
11805 can have any size (since optional registers can be left off the
11806 end), some sizes are easily recognizable given knowledge of the
11807 approximate architecture. */
11808
11809struct remote_g_packet_guess
11810{
eefce37f
TT
11811 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11812 : bytes (bytes_),
11813 tdesc (tdesc_)
11814 {
11815 }
11816
29709017
DJ
11817 int bytes;
11818 const struct target_desc *tdesc;
11819};
29709017 11820
eefce37f 11821struct remote_g_packet_data : public allocate_on_obstack
29709017 11822{
eefce37f 11823 std::vector<remote_g_packet_guess> guesses;
29709017
DJ
11824};
11825
11826static struct gdbarch_data *remote_g_packet_data_handle;
11827
11828static void *
11829remote_g_packet_data_init (struct obstack *obstack)
11830{
eefce37f 11831 return new (obstack) remote_g_packet_data;
29709017
DJ
11832}
11833
11834void
11835register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11836 const struct target_desc *tdesc)
11837{
11838 struct remote_g_packet_data *data
19ba03f4
SM
11839 = ((struct remote_g_packet_data *)
11840 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11841
11842 gdb_assert (tdesc != NULL);
11843
eefce37f
TT
11844 for (const remote_g_packet_guess &guess : data->guesses)
11845 if (guess.bytes == bytes)
29709017 11846 internal_error (__FILE__, __LINE__,
9b20d036 11847 _("Duplicate g packet description added for size %d"),
29709017
DJ
11848 bytes);
11849
eefce37f 11850 data->guesses.emplace_back (bytes, tdesc);
29709017
DJ
11851}
11852
eefce37f
TT
11853/* Return true if remote_read_description would do anything on this target
11854 and architecture, false otherwise. */
d962ef82 11855
eefce37f 11856static bool
d962ef82
DJ
11857remote_read_description_p (struct target_ops *target)
11858{
11859 struct remote_g_packet_data *data
19ba03f4
SM
11860 = ((struct remote_g_packet_data *)
11861 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82 11862
eefce37f 11863 return !data->guesses.empty ();
d962ef82
DJ
11864}
11865
f6ac5f3d
PA
11866const struct target_desc *
11867remote_target::read_description ()
29709017
DJ
11868{
11869 struct remote_g_packet_data *data
19ba03f4
SM
11870 = ((struct remote_g_packet_data *)
11871 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11872
d962ef82
DJ
11873 /* Do not try this during initial connection, when we do not know
11874 whether there is a running but stopped thread. */
55f6301a 11875 if (!target_has_execution () || inferior_ptid == null_ptid)
b6a8c27b 11876 return beneath ()->read_description ();
d962ef82 11877
eefce37f 11878 if (!data->guesses.empty ())
29709017 11879 {
29709017
DJ
11880 int bytes = send_g_packet ();
11881
eefce37f
TT
11882 for (const remote_g_packet_guess &guess : data->guesses)
11883 if (guess.bytes == bytes)
11884 return guess.tdesc;
29709017
DJ
11885
11886 /* We discard the g packet. A minor optimization would be to
11887 hold on to it, and fill the register cache once we have selected
11888 an architecture, but it's too tricky to do safely. */
11889 }
11890
b6a8c27b 11891 return beneath ()->read_description ();
29709017
DJ
11892}
11893
a6b151f1
DJ
11894/* Remote file transfer support. This is host-initiated I/O, not
11895 target-initiated; for target-initiated, see remote-fileio.c. */
11896
11897/* If *LEFT is at least the length of STRING, copy STRING to
11898 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11899 decrease *LEFT. Otherwise raise an error. */
11900
11901static void
a121b7c1 11902remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11903{
11904 int len = strlen (string);
11905
11906 if (len > *left)
11907 error (_("Packet too long for target."));
11908
11909 memcpy (*buffer, string, len);
11910 *buffer += len;
11911 *left -= len;
11912
11913 /* NUL-terminate the buffer as a convenience, if there is
11914 room. */
11915 if (*left)
11916 **buffer = '\0';
11917}
11918
11919/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11920 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11921 decrease *LEFT. Otherwise raise an error. */
11922
11923static void
11924remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11925 int len)
11926{
11927 if (2 * len > *left)
11928 error (_("Packet too long for target."));
11929
11930 bin2hex (bytes, *buffer, len);
11931 *buffer += 2 * len;
11932 *left -= 2 * len;
11933
11934 /* NUL-terminate the buffer as a convenience, if there is
11935 room. */
11936 if (*left)
11937 **buffer = '\0';
11938}
11939
11940/* If *LEFT is large enough, convert VALUE to hex and add it to
11941 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11942 decrease *LEFT. Otherwise raise an error. */
11943
11944static void
11945remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11946{
11947 int len = hexnumlen (value);
11948
11949 if (len > *left)
11950 error (_("Packet too long for target."));
11951
11952 hexnumstr (*buffer, value);
11953 *buffer += len;
11954 *left -= len;
11955
11956 /* NUL-terminate the buffer as a convenience, if there is
11957 room. */
11958 if (*left)
11959 **buffer = '\0';
11960}
11961
11962/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11963 value, *REMOTE_ERRNO to the remote error number or zero if none
11964 was included, and *ATTACHMENT to point to the start of the annex
11965 if any. The length of the packet isn't needed here; there may
11966 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11967
11968 Return 0 if the packet could be parsed, -1 if it could not. If
11969 -1 is returned, the other variables may not be initialized. */
11970
11971static int
11972remote_hostio_parse_result (char *buffer, int *retcode,
11973 int *remote_errno, char **attachment)
11974{
11975 char *p, *p2;
11976
11977 *remote_errno = 0;
11978 *attachment = NULL;
11979
11980 if (buffer[0] != 'F')
11981 return -1;
11982
11983 errno = 0;
11984 *retcode = strtol (&buffer[1], &p, 16);
11985 if (errno != 0 || p == &buffer[1])
11986 return -1;
11987
11988 /* Check for ",errno". */
11989 if (*p == ',')
11990 {
11991 errno = 0;
11992 *remote_errno = strtol (p + 1, &p2, 16);
11993 if (errno != 0 || p + 1 == p2)
11994 return -1;
11995 p = p2;
11996 }
11997
11998 /* Check for ";attachment". If there is no attachment, the
11999 packet should end here. */
12000 if (*p == ';')
12001 {
12002 *attachment = p + 1;
12003 return 0;
12004 }
12005 else if (*p == '\0')
12006 return 0;
12007 else
12008 return -1;
12009}
12010
12011/* Send a prepared I/O packet to the target and read its response.
12012 The prepared packet is in the global RS->BUF before this function
12013 is called, and the answer is there when we return.
12014
12015 COMMAND_BYTES is the length of the request to send, which may include
12016 binary data. WHICH_PACKET is the packet configuration to check
12017 before attempting a packet. If an error occurs, *REMOTE_ERRNO
12018 is set to the error number and -1 is returned. Otherwise the value
12019 returned by the function is returned.
12020
12021 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
12022 attachment is expected; an error will be reported if there's a
12023 mismatch. If one is found, *ATTACHMENT will be set to point into
12024 the packet buffer and *ATTACHMENT_LEN will be set to the
12025 attachment's length. */
12026
6b8edb51
PA
12027int
12028remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
12029 int *remote_errno, char **attachment,
12030 int *attachment_len)
a6b151f1
DJ
12031{
12032 struct remote_state *rs = get_remote_state ();
12033 int ret, bytes_read;
12034 char *attachment_tmp;
12035
20db9c52 12036 if (packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
12037 {
12038 *remote_errno = FILEIO_ENOSYS;
12039 return -1;
12040 }
12041
8d64371b
TT
12042 putpkt_binary (rs->buf.data (), command_bytes);
12043 bytes_read = getpkt_sane (&rs->buf, 0);
a6b151f1
DJ
12044
12045 /* If it timed out, something is wrong. Don't try to parse the
12046 buffer. */
12047 if (bytes_read < 0)
12048 {
12049 *remote_errno = FILEIO_EINVAL;
12050 return -1;
12051 }
12052
12053 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
12054 {
12055 case PACKET_ERROR:
12056 *remote_errno = FILEIO_EINVAL;
12057 return -1;
12058 case PACKET_UNKNOWN:
12059 *remote_errno = FILEIO_ENOSYS;
12060 return -1;
12061 case PACKET_OK:
12062 break;
12063 }
12064
8d64371b 12065 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
a6b151f1
DJ
12066 &attachment_tmp))
12067 {
12068 *remote_errno = FILEIO_EINVAL;
12069 return -1;
12070 }
12071
12072 /* Make sure we saw an attachment if and only if we expected one. */
12073 if ((attachment_tmp == NULL && attachment != NULL)
12074 || (attachment_tmp != NULL && attachment == NULL))
12075 {
12076 *remote_errno = FILEIO_EINVAL;
12077 return -1;
12078 }
12079
12080 /* If an attachment was found, it must point into the packet buffer;
12081 work out how many bytes there were. */
12082 if (attachment_tmp != NULL)
12083 {
12084 *attachment = attachment_tmp;
8d64371b 12085 *attachment_len = bytes_read - (*attachment - rs->buf.data ());
a6b151f1
DJ
12086 }
12087
12088 return ret;
12089}
12090
dd194f6b 12091/* See declaration.h. */
80152258 12092
dd194f6b
PA
12093void
12094readahead_cache::invalidate ()
80152258 12095{
dd194f6b 12096 this->fd = -1;
80152258
PA
12097}
12098
dd194f6b 12099/* See declaration.h. */
80152258 12100
dd194f6b
PA
12101void
12102readahead_cache::invalidate_fd (int fd)
80152258 12103{
dd194f6b
PA
12104 if (this->fd == fd)
12105 this->fd = -1;
80152258
PA
12106}
12107
15a201c8
GB
12108/* Set the filesystem remote_hostio functions that take FILENAME
12109 arguments will use. Return 0 on success, or -1 if an error
12110 occurs (and set *REMOTE_ERRNO). */
12111
6b8edb51
PA
12112int
12113remote_target::remote_hostio_set_filesystem (struct inferior *inf,
12114 int *remote_errno)
15a201c8
GB
12115{
12116 struct remote_state *rs = get_remote_state ();
12117 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
8d64371b 12118 char *p = rs->buf.data ();
15a201c8
GB
12119 int left = get_remote_packet_size () - 1;
12120 char arg[9];
12121 int ret;
12122
12123 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12124 return 0;
12125
12126 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
12127 return 0;
12128
12129 remote_buffer_add_string (&p, &left, "vFile:setfs:");
12130
12131 xsnprintf (arg, sizeof (arg), "%x", required_pid);
12132 remote_buffer_add_string (&p, &left, arg);
12133
8d64371b 12134 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
15a201c8
GB
12135 remote_errno, NULL, NULL);
12136
12137 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12138 return 0;
12139
12140 if (ret == 0)
12141 rs->fs_pid = required_pid;
12142
12143 return ret;
12144}
12145
12e2a5fd 12146/* Implementation of to_fileio_open. */
a6b151f1 12147
6b8edb51
PA
12148int
12149remote_target::remote_hostio_open (inferior *inf, const char *filename,
12150 int flags, int mode, int warn_if_slow,
12151 int *remote_errno)
a6b151f1
DJ
12152{
12153 struct remote_state *rs = get_remote_state ();
8d64371b 12154 char *p = rs->buf.data ();
a6b151f1
DJ
12155 int left = get_remote_packet_size () - 1;
12156
4313b8c0
GB
12157 if (warn_if_slow)
12158 {
12159 static int warning_issued = 0;
12160
12161 printf_unfiltered (_("Reading %s from remote target...\n"),
12162 filename);
12163
12164 if (!warning_issued)
12165 {
12166 warning (_("File transfers from remote targets can be slow."
12167 " Use \"set sysroot\" to access files locally"
12168 " instead."));
12169 warning_issued = 1;
12170 }
12171 }
12172
15a201c8
GB
12173 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12174 return -1;
12175
a6b151f1
DJ
12176 remote_buffer_add_string (&p, &left, "vFile:open:");
12177
12178 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12179 strlen (filename));
12180 remote_buffer_add_string (&p, &left, ",");
12181
12182 remote_buffer_add_int (&p, &left, flags);
12183 remote_buffer_add_string (&p, &left, ",");
12184
12185 remote_buffer_add_int (&p, &left, mode);
12186
8d64371b 12187 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
a6b151f1
DJ
12188 remote_errno, NULL, NULL);
12189}
12190
f6ac5f3d
PA
12191int
12192remote_target::fileio_open (struct inferior *inf, const char *filename,
12193 int flags, int mode, int warn_if_slow,
12194 int *remote_errno)
12195{
6b8edb51 12196 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
f6ac5f3d
PA
12197 remote_errno);
12198}
12199
12e2a5fd 12200/* Implementation of to_fileio_pwrite. */
a6b151f1 12201
6b8edb51
PA
12202int
12203remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
12204 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
12205{
12206 struct remote_state *rs = get_remote_state ();
8d64371b 12207 char *p = rs->buf.data ();
a6b151f1
DJ
12208 int left = get_remote_packet_size ();
12209 int out_len;
12210
dd194f6b 12211 rs->readahead_cache.invalidate_fd (fd);
80152258 12212
a6b151f1
DJ
12213 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
12214
12215 remote_buffer_add_int (&p, &left, fd);
12216 remote_buffer_add_string (&p, &left, ",");
12217
12218 remote_buffer_add_int (&p, &left, offset);
12219 remote_buffer_add_string (&p, &left, ",");
12220
124e13d9 12221 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
8d64371b
TT
12222 (get_remote_packet_size ()
12223 - (p - rs->buf.data ())));
a6b151f1 12224
8d64371b 12225 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
a6b151f1
DJ
12226 remote_errno, NULL, NULL);
12227}
12228
f6ac5f3d
PA
12229int
12230remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12231 ULONGEST offset, int *remote_errno)
12232{
6b8edb51 12233 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
f6ac5f3d
PA
12234}
12235
80152258
PA
12236/* Helper for the implementation of to_fileio_pread. Read the file
12237 from the remote side with vFile:pread. */
a6b151f1 12238
6b8edb51
PA
12239int
12240remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12241 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
12242{
12243 struct remote_state *rs = get_remote_state ();
8d64371b 12244 char *p = rs->buf.data ();
a6b151f1
DJ
12245 char *attachment;
12246 int left = get_remote_packet_size ();
12247 int ret, attachment_len;
12248 int read_len;
12249
12250 remote_buffer_add_string (&p, &left, "vFile:pread:");
12251
12252 remote_buffer_add_int (&p, &left, fd);
12253 remote_buffer_add_string (&p, &left, ",");
12254
12255 remote_buffer_add_int (&p, &left, len);
12256 remote_buffer_add_string (&p, &left, ",");
12257
12258 remote_buffer_add_int (&p, &left, offset);
12259
8d64371b 12260 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
a6b151f1
DJ
12261 remote_errno, &attachment,
12262 &attachment_len);
12263
12264 if (ret < 0)
12265 return ret;
12266
bc20a4af 12267 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
12268 read_buf, len);
12269 if (read_len != ret)
12270 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12271
12272 return ret;
12273}
12274
dd194f6b 12275/* See declaration.h. */
80152258 12276
dd194f6b
PA
12277int
12278readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12279 ULONGEST offset)
80152258 12280{
dd194f6b
PA
12281 if (this->fd == fd
12282 && this->offset <= offset
12283 && offset < this->offset + this->bufsize)
80152258 12284 {
dd194f6b 12285 ULONGEST max = this->offset + this->bufsize;
80152258
PA
12286
12287 if (offset + len > max)
12288 len = max - offset;
12289
dd194f6b 12290 memcpy (read_buf, this->buf + offset - this->offset, len);
80152258
PA
12291 return len;
12292 }
12293
12294 return 0;
12295}
12296
12297/* Implementation of to_fileio_pread. */
12298
6b8edb51
PA
12299int
12300remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12301 ULONGEST offset, int *remote_errno)
80152258
PA
12302{
12303 int ret;
12304 struct remote_state *rs = get_remote_state ();
dd194f6b 12305 readahead_cache *cache = &rs->readahead_cache;
80152258 12306
dd194f6b 12307 ret = cache->pread (fd, read_buf, len, offset);
80152258
PA
12308 if (ret > 0)
12309 {
12310 cache->hit_count++;
12311
12312 if (remote_debug)
12313 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
12314 pulongest (cache->hit_count));
12315 return ret;
12316 }
12317
12318 cache->miss_count++;
12319 if (remote_debug)
12320 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
12321 pulongest (cache->miss_count));
12322
12323 cache->fd = fd;
12324 cache->offset = offset;
12325 cache->bufsize = get_remote_packet_size ();
224c3ddb 12326 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258 12327
6b8edb51 12328 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
80152258
PA
12329 cache->offset, remote_errno);
12330 if (ret <= 0)
12331 {
dd194f6b 12332 cache->invalidate_fd (fd);
80152258
PA
12333 return ret;
12334 }
12335
12336 cache->bufsize = ret;
dd194f6b 12337 return cache->pread (fd, read_buf, len, offset);
80152258
PA
12338}
12339
f6ac5f3d
PA
12340int
12341remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12342 ULONGEST offset, int *remote_errno)
12343{
6b8edb51 12344 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
f6ac5f3d
PA
12345}
12346
12e2a5fd 12347/* Implementation of to_fileio_close. */
a6b151f1 12348
6b8edb51
PA
12349int
12350remote_target::remote_hostio_close (int fd, int *remote_errno)
a6b151f1
DJ
12351{
12352 struct remote_state *rs = get_remote_state ();
8d64371b 12353 char *p = rs->buf.data ();
a6b151f1
DJ
12354 int left = get_remote_packet_size () - 1;
12355
dd194f6b 12356 rs->readahead_cache.invalidate_fd (fd);
80152258 12357
a6b151f1
DJ
12358 remote_buffer_add_string (&p, &left, "vFile:close:");
12359
12360 remote_buffer_add_int (&p, &left, fd);
12361
8d64371b 12362 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
a6b151f1
DJ
12363 remote_errno, NULL, NULL);
12364}
12365
f6ac5f3d
PA
12366int
12367remote_target::fileio_close (int fd, int *remote_errno)
12368{
6b8edb51 12369 return remote_hostio_close (fd, remote_errno);
f6ac5f3d
PA
12370}
12371
12e2a5fd 12372/* Implementation of to_fileio_unlink. */
a6b151f1 12373
6b8edb51
PA
12374int
12375remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12376 int *remote_errno)
a6b151f1
DJ
12377{
12378 struct remote_state *rs = get_remote_state ();
8d64371b 12379 char *p = rs->buf.data ();
a6b151f1
DJ
12380 int left = get_remote_packet_size () - 1;
12381
15a201c8
GB
12382 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12383 return -1;
12384
a6b151f1
DJ
12385 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12386
12387 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12388 strlen (filename));
12389
8d64371b 12390 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
a6b151f1
DJ
12391 remote_errno, NULL, NULL);
12392}
12393
f6ac5f3d
PA
12394int
12395remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12396 int *remote_errno)
12397{
6b8edb51 12398 return remote_hostio_unlink (inf, filename, remote_errno);
f6ac5f3d
PA
12399}
12400
12e2a5fd 12401/* Implementation of to_fileio_readlink. */
b9e7b9c3 12402
f6ac5f3d
PA
12403gdb::optional<std::string>
12404remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12405 int *remote_errno)
b9e7b9c3
UW
12406{
12407 struct remote_state *rs = get_remote_state ();
8d64371b 12408 char *p = rs->buf.data ();
b9e7b9c3
UW
12409 char *attachment;
12410 int left = get_remote_packet_size ();
12411 int len, attachment_len;
12412 int read_len;
b9e7b9c3 12413
15a201c8 12414 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
e0d3522b 12415 return {};
15a201c8 12416
b9e7b9c3
UW
12417 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12418
12419 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12420 strlen (filename));
12421
8d64371b 12422 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
b9e7b9c3
UW
12423 remote_errno, &attachment,
12424 &attachment_len);
12425
12426 if (len < 0)
e0d3522b 12427 return {};
b9e7b9c3 12428
e0d3522b 12429 std::string ret (len, '\0');
b9e7b9c3 12430
bc20a4af 12431 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
e0d3522b 12432 (gdb_byte *) &ret[0], len);
b9e7b9c3
UW
12433 if (read_len != len)
12434 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12435
b9e7b9c3
UW
12436 return ret;
12437}
12438
12e2a5fd 12439/* Implementation of to_fileio_fstat. */
0a93529c 12440
f6ac5f3d
PA
12441int
12442remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
0a93529c
GB
12443{
12444 struct remote_state *rs = get_remote_state ();
8d64371b 12445 char *p = rs->buf.data ();
0a93529c
GB
12446 int left = get_remote_packet_size ();
12447 int attachment_len, ret;
12448 char *attachment;
12449 struct fio_stat fst;
12450 int read_len;
12451
464b0089
GB
12452 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12453
12454 remote_buffer_add_int (&p, &left, fd);
12455
8d64371b 12456 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
464b0089
GB
12457 remote_errno, &attachment,
12458 &attachment_len);
12459 if (ret < 0)
0a93529c 12460 {
464b0089
GB
12461 if (*remote_errno != FILEIO_ENOSYS)
12462 return ret;
12463
0a93529c
GB
12464 /* Strictly we should return -1, ENOSYS here, but when
12465 "set sysroot remote:" was implemented in August 2008
12466 BFD's need for a stat function was sidestepped with
12467 this hack. This was not remedied until March 2015
12468 so we retain the previous behavior to avoid breaking
12469 compatibility.
12470
12471 Note that the memset is a March 2015 addition; older
12472 GDBs set st_size *and nothing else* so the structure
12473 would have garbage in all other fields. This might
12474 break something but retaining the previous behavior
12475 here would be just too wrong. */
12476
12477 memset (st, 0, sizeof (struct stat));
12478 st->st_size = INT_MAX;
12479 return 0;
12480 }
12481
0a93529c
GB
12482 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12483 (gdb_byte *) &fst, sizeof (fst));
12484
12485 if (read_len != ret)
12486 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12487
12488 if (read_len != sizeof (fst))
12489 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12490 read_len, (int) sizeof (fst));
12491
12492 remote_fileio_to_host_stat (&fst, st);
12493
12494 return 0;
12495}
12496
12e2a5fd 12497/* Implementation of to_filesystem_is_local. */
e3dd7556 12498
57810aa7 12499bool
f6ac5f3d 12500remote_target::filesystem_is_local ()
e3dd7556
GB
12501{
12502 /* Valgrind GDB presents itself as a remote target but works
12503 on the local filesystem: it does not implement remote get
12504 and users are not expected to set a sysroot. To handle
12505 this case we treat the remote filesystem as local if the
12506 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12507 does not support vFile:open. */
a3be80c3 12508 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
12509 {
12510 enum packet_support ps = packet_support (PACKET_vFile_open);
12511
12512 if (ps == PACKET_SUPPORT_UNKNOWN)
12513 {
12514 int fd, remote_errno;
12515
12516 /* Try opening a file to probe support. The supplied
12517 filename is irrelevant, we only care about whether
12518 the stub recognizes the packet or not. */
6b8edb51 12519 fd = remote_hostio_open (NULL, "just probing",
4313b8c0 12520 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
12521 &remote_errno);
12522
12523 if (fd >= 0)
6b8edb51 12524 remote_hostio_close (fd, &remote_errno);
e3dd7556
GB
12525
12526 ps = packet_support (PACKET_vFile_open);
12527 }
12528
12529 if (ps == PACKET_DISABLE)
12530 {
12531 static int warning_issued = 0;
12532
12533 if (!warning_issued)
12534 {
12535 warning (_("remote target does not support file"
12536 " transfer, attempting to access files"
12537 " from local filesystem."));
12538 warning_issued = 1;
12539 }
12540
57810aa7 12541 return true;
e3dd7556
GB
12542 }
12543 }
12544
57810aa7 12545 return false;
e3dd7556
GB
12546}
12547
a6b151f1
DJ
12548static int
12549remote_fileio_errno_to_host (int errnum)
12550{
12551 switch (errnum)
12552 {
12553 case FILEIO_EPERM:
dda83cd7 12554 return EPERM;
a6b151f1 12555 case FILEIO_ENOENT:
dda83cd7 12556 return ENOENT;
a6b151f1 12557 case FILEIO_EINTR:
dda83cd7 12558 return EINTR;
a6b151f1 12559 case FILEIO_EIO:
dda83cd7 12560 return EIO;
a6b151f1 12561 case FILEIO_EBADF:
dda83cd7 12562 return EBADF;
a6b151f1 12563 case FILEIO_EACCES:
dda83cd7 12564 return EACCES;
a6b151f1 12565 case FILEIO_EFAULT:
dda83cd7 12566 return EFAULT;
a6b151f1 12567 case FILEIO_EBUSY:
dda83cd7 12568 return EBUSY;
a6b151f1 12569 case FILEIO_EEXIST:
dda83cd7 12570 return EEXIST;
a6b151f1 12571 case FILEIO_ENODEV:
dda83cd7 12572 return ENODEV;
a6b151f1 12573 case FILEIO_ENOTDIR:
dda83cd7 12574 return ENOTDIR;
a6b151f1 12575 case FILEIO_EISDIR:
dda83cd7 12576 return EISDIR;
a6b151f1 12577 case FILEIO_EINVAL:
dda83cd7 12578 return EINVAL;
a6b151f1 12579 case FILEIO_ENFILE:
dda83cd7 12580 return ENFILE;
a6b151f1 12581 case FILEIO_EMFILE:
dda83cd7 12582 return EMFILE;
a6b151f1 12583 case FILEIO_EFBIG:
dda83cd7 12584 return EFBIG;
a6b151f1 12585 case FILEIO_ENOSPC:
dda83cd7 12586 return ENOSPC;
a6b151f1 12587 case FILEIO_ESPIPE:
dda83cd7 12588 return ESPIPE;
a6b151f1 12589 case FILEIO_EROFS:
dda83cd7 12590 return EROFS;
a6b151f1 12591 case FILEIO_ENOSYS:
dda83cd7 12592 return ENOSYS;
a6b151f1 12593 case FILEIO_ENAMETOOLONG:
dda83cd7 12594 return ENAMETOOLONG;
a6b151f1
DJ
12595 }
12596 return -1;
12597}
12598
12599static char *
12600remote_hostio_error (int errnum)
12601{
12602 int host_error = remote_fileio_errno_to_host (errnum);
12603
12604 if (host_error == -1)
12605 error (_("Unknown remote I/O error %d"), errnum);
12606 else
12607 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12608}
12609
440b7aec
PA
12610/* A RAII wrapper around a remote file descriptor. */
12611
12612class scoped_remote_fd
a6b151f1 12613{
440b7aec 12614public:
6b8edb51
PA
12615 scoped_remote_fd (remote_target *remote, int fd)
12616 : m_remote (remote), m_fd (fd)
440b7aec
PA
12617 {
12618 }
a6b151f1 12619
440b7aec
PA
12620 ~scoped_remote_fd ()
12621 {
12622 if (m_fd != -1)
12623 {
12624 try
12625 {
12626 int remote_errno;
6b8edb51 12627 m_remote->remote_hostio_close (m_fd, &remote_errno);
440b7aec
PA
12628 }
12629 catch (...)
12630 {
12631 /* Swallow exception before it escapes the dtor. If
12632 something goes wrong, likely the connection is gone,
12633 and there's nothing else that can be done. */
12634 }
12635 }
12636 }
12637
12638 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12639
12640 /* Release ownership of the file descriptor, and return it. */
88a774b9 12641 ATTRIBUTE_UNUSED_RESULT int release () noexcept
440b7aec
PA
12642 {
12643 int fd = m_fd;
12644 m_fd = -1;
12645 return fd;
12646 }
12647
12648 /* Return the owned file descriptor. */
12649 int get () const noexcept
12650 {
12651 return m_fd;
12652 }
12653
12654private:
6b8edb51
PA
12655 /* The remote target. */
12656 remote_target *m_remote;
12657
440b7aec
PA
12658 /* The owned remote I/O file descriptor. */
12659 int m_fd;
12660};
a6b151f1
DJ
12661
12662void
12663remote_file_put (const char *local_file, const char *remote_file, int from_tty)
6b8edb51
PA
12664{
12665 remote_target *remote = get_current_remote_target ();
12666
12667 if (remote == nullptr)
12668 error (_("command can only be used with remote target"));
12669
12670 remote->remote_file_put (local_file, remote_file, from_tty);
12671}
12672
12673void
12674remote_target::remote_file_put (const char *local_file, const char *remote_file,
12675 int from_tty)
a6b151f1 12676{
440b7aec 12677 int retcode, remote_errno, bytes, io_size;
a6b151f1
DJ
12678 int bytes_in_buffer;
12679 int saw_eof;
12680 ULONGEST offset;
a6b151f1 12681
d419f42d 12682 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
12683 if (file == NULL)
12684 perror_with_name (local_file);
a6b151f1 12685
440b7aec 12686 scoped_remote_fd fd
6b8edb51
PA
12687 (this, remote_hostio_open (NULL,
12688 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12689 | FILEIO_O_TRUNC),
12690 0700, 0, &remote_errno));
440b7aec 12691 if (fd.get () == -1)
a6b151f1
DJ
12692 remote_hostio_error (remote_errno);
12693
12694 /* Send up to this many bytes at once. They won't all fit in the
12695 remote packet limit, so we'll transfer slightly fewer. */
12696 io_size = get_remote_packet_size ();
5ca3b260 12697 gdb::byte_vector buffer (io_size);
a6b151f1 12698
a6b151f1
DJ
12699 bytes_in_buffer = 0;
12700 saw_eof = 0;
12701 offset = 0;
12702 while (bytes_in_buffer || !saw_eof)
12703 {
12704 if (!saw_eof)
12705 {
5ca3b260 12706 bytes = fread (buffer.data () + bytes_in_buffer, 1,
3e43a32a 12707 io_size - bytes_in_buffer,
d419f42d 12708 file.get ());
a6b151f1
DJ
12709 if (bytes == 0)
12710 {
d419f42d 12711 if (ferror (file.get ()))
a6b151f1
DJ
12712 error (_("Error reading %s."), local_file);
12713 else
12714 {
12715 /* EOF. Unless there is something still in the
12716 buffer from the last iteration, we are done. */
12717 saw_eof = 1;
12718 if (bytes_in_buffer == 0)
12719 break;
12720 }
12721 }
12722 }
12723 else
12724 bytes = 0;
12725
12726 bytes += bytes_in_buffer;
12727 bytes_in_buffer = 0;
12728
5ca3b260 12729 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
3e43a32a 12730 offset, &remote_errno);
a6b151f1
DJ
12731
12732 if (retcode < 0)
12733 remote_hostio_error (remote_errno);
12734 else if (retcode == 0)
12735 error (_("Remote write of %d bytes returned 0!"), bytes);
12736 else if (retcode < bytes)
12737 {
12738 /* Short write. Save the rest of the read data for the next
12739 write. */
12740 bytes_in_buffer = bytes - retcode;
5ca3b260 12741 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
a6b151f1
DJ
12742 }
12743
12744 offset += retcode;
12745 }
12746
6b8edb51 12747 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12748 remote_hostio_error (remote_errno);
12749
12750 if (from_tty)
12751 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
a6b151f1
DJ
12752}
12753
12754void
12755remote_file_get (const char *remote_file, const char *local_file, int from_tty)
6b8edb51
PA
12756{
12757 remote_target *remote = get_current_remote_target ();
12758
12759 if (remote == nullptr)
12760 error (_("command can only be used with remote target"));
12761
12762 remote->remote_file_get (remote_file, local_file, from_tty);
12763}
12764
12765void
12766remote_target::remote_file_get (const char *remote_file, const char *local_file,
12767 int from_tty)
a6b151f1 12768{
440b7aec 12769 int remote_errno, bytes, io_size;
a6b151f1 12770 ULONGEST offset;
a6b151f1 12771
440b7aec 12772 scoped_remote_fd fd
6b8edb51
PA
12773 (this, remote_hostio_open (NULL,
12774 remote_file, FILEIO_O_RDONLY, 0, 0,
12775 &remote_errno));
440b7aec 12776 if (fd.get () == -1)
a6b151f1
DJ
12777 remote_hostio_error (remote_errno);
12778
d419f42d 12779 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12780 if (file == NULL)
12781 perror_with_name (local_file);
a6b151f1
DJ
12782
12783 /* Send up to this many bytes at once. They won't all fit in the
12784 remote packet limit, so we'll transfer slightly fewer. */
12785 io_size = get_remote_packet_size ();
5ca3b260 12786 gdb::byte_vector buffer (io_size);
a6b151f1 12787
a6b151f1
DJ
12788 offset = 0;
12789 while (1)
12790 {
5ca3b260 12791 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
440b7aec 12792 &remote_errno);
a6b151f1
DJ
12793 if (bytes == 0)
12794 /* Success, but no bytes, means end-of-file. */
12795 break;
12796 if (bytes == -1)
12797 remote_hostio_error (remote_errno);
12798
12799 offset += bytes;
12800
5ca3b260 12801 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
a6b151f1
DJ
12802 if (bytes == 0)
12803 perror_with_name (local_file);
12804 }
12805
6b8edb51 12806 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12807 remote_hostio_error (remote_errno);
12808
12809 if (from_tty)
12810 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
a6b151f1
DJ
12811}
12812
12813void
12814remote_file_delete (const char *remote_file, int from_tty)
12815{
6b8edb51 12816 remote_target *remote = get_current_remote_target ();
a6b151f1 12817
6b8edb51 12818 if (remote == nullptr)
a6b151f1
DJ
12819 error (_("command can only be used with remote target"));
12820
6b8edb51
PA
12821 remote->remote_file_delete (remote_file, from_tty);
12822}
12823
12824void
12825remote_target::remote_file_delete (const char *remote_file, int from_tty)
12826{
12827 int retcode, remote_errno;
12828
12829 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
a6b151f1
DJ
12830 if (retcode == -1)
12831 remote_hostio_error (remote_errno);
12832
12833 if (from_tty)
12834 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12835}
12836
12837static void
ac88e2de 12838remote_put_command (const char *args, int from_tty)
a6b151f1 12839{
d1a41061
PP
12840 if (args == NULL)
12841 error_no_arg (_("file to put"));
12842
773a1edc 12843 gdb_argv argv (args);
a6b151f1
DJ
12844 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12845 error (_("Invalid parameters to remote put"));
12846
12847 remote_file_put (argv[0], argv[1], from_tty);
a6b151f1
DJ
12848}
12849
12850static void
ac88e2de 12851remote_get_command (const char *args, int from_tty)
a6b151f1 12852{
d1a41061
PP
12853 if (args == NULL)
12854 error_no_arg (_("file to get"));
12855
773a1edc 12856 gdb_argv argv (args);
a6b151f1
DJ
12857 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12858 error (_("Invalid parameters to remote get"));
12859
12860 remote_file_get (argv[0], argv[1], from_tty);
a6b151f1
DJ
12861}
12862
12863static void
ac88e2de 12864remote_delete_command (const char *args, int from_tty)
a6b151f1 12865{
d1a41061
PP
12866 if (args == NULL)
12867 error_no_arg (_("file to delete"));
12868
773a1edc 12869 gdb_argv argv (args);
a6b151f1
DJ
12870 if (argv[0] == NULL || argv[1] != NULL)
12871 error (_("Invalid parameters to remote delete"));
12872
12873 remote_file_delete (argv[0], from_tty);
a6b151f1
DJ
12874}
12875
57810aa7 12876bool
f6ac5f3d 12877remote_target::can_execute_reverse ()
b2175913 12878{
4082afcc
PA
12879 if (packet_support (PACKET_bs) == PACKET_ENABLE
12880 || packet_support (PACKET_bc) == PACKET_ENABLE)
57810aa7 12881 return true;
40ab02ce 12882 else
57810aa7 12883 return false;
b2175913
MS
12884}
12885
57810aa7 12886bool
f6ac5f3d 12887remote_target::supports_non_stop ()
74531fed 12888{
57810aa7 12889 return true;
74531fed
PA
12890}
12891
57810aa7 12892bool
f6ac5f3d 12893remote_target::supports_disable_randomization ()
03583c20
UW
12894{
12895 /* Only supported in extended mode. */
57810aa7 12896 return false;
03583c20
UW
12897}
12898
57810aa7 12899bool
f6ac5f3d 12900remote_target::supports_multi_process ()
8a305172
PA
12901{
12902 struct remote_state *rs = get_remote_state ();
a744cf53 12903
8020350c 12904 return remote_multi_process_p (rs);
8a305172
PA
12905}
12906
70221824 12907static int
f6ac5f3d 12908remote_supports_cond_tracepoints ()
782b2b07 12909{
4082afcc 12910 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12911}
12912
57810aa7 12913bool
f6ac5f3d 12914remote_target::supports_evaluation_of_breakpoint_conditions ()
3788aec7 12915{
4082afcc 12916 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12917}
12918
70221824 12919static int
f6ac5f3d 12920remote_supports_fast_tracepoints ()
7a697b8d 12921{
4082afcc 12922 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12923}
12924
0fb4aa4b 12925static int
f6ac5f3d 12926remote_supports_static_tracepoints ()
0fb4aa4b 12927{
4082afcc 12928 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12929}
12930
1e4d1764 12931static int
f6ac5f3d 12932remote_supports_install_in_trace ()
1e4d1764 12933{
4082afcc 12934 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12935}
12936
57810aa7 12937bool
f6ac5f3d 12938remote_target::supports_enable_disable_tracepoint ()
d248b706 12939{
4082afcc
PA
12940 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12941 == PACKET_ENABLE);
d248b706
KY
12942}
12943
57810aa7 12944bool
f6ac5f3d 12945remote_target::supports_string_tracing ()
3065dfb6 12946{
4082afcc 12947 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12948}
12949
57810aa7 12950bool
f6ac5f3d 12951remote_target::can_run_breakpoint_commands ()
d3ce09f5 12952{
4082afcc 12953 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12954}
12955
f6ac5f3d
PA
12956void
12957remote_target::trace_init ()
35b1e5cc 12958{
b6bb3468
PA
12959 struct remote_state *rs = get_remote_state ();
12960
35b1e5cc 12961 putpkt ("QTinit");
b6bb3468 12962 remote_get_noisy_reply ();
8d64371b 12963 if (strcmp (rs->buf.data (), "OK") != 0)
35b1e5cc
SS
12964 error (_("Target does not support this command."));
12965}
12966
409873ef
SS
12967/* Recursive routine to walk through command list including loops, and
12968 download packets for each command. */
12969
6b8edb51
PA
12970void
12971remote_target::remote_download_command_source (int num, ULONGEST addr,
12972 struct command_line *cmds)
409873ef
SS
12973{
12974 struct remote_state *rs = get_remote_state ();
12975 struct command_line *cmd;
12976
12977 for (cmd = cmds; cmd; cmd = cmd->next)
12978 {
0df8b418 12979 QUIT; /* Allow user to bail out with ^C. */
8d64371b 12980 strcpy (rs->buf.data (), "QTDPsrc:");
409873ef 12981 encode_source_string (num, addr, "cmd", cmd->line,
8d64371b
TT
12982 rs->buf.data () + strlen (rs->buf.data ()),
12983 rs->buf.size () - strlen (rs->buf.data ()));
409873ef 12984 putpkt (rs->buf);
b6bb3468 12985 remote_get_noisy_reply ();
8d64371b 12986 if (strcmp (rs->buf.data (), "OK"))
409873ef
SS
12987 warning (_("Target does not support source download."));
12988
12989 if (cmd->control_type == while_control
12990 || cmd->control_type == while_stepping_control)
12991 {
12973681 12992 remote_download_command_source (num, addr, cmd->body_list_0.get ());
409873ef 12993
0df8b418 12994 QUIT; /* Allow user to bail out with ^C. */
8d64371b 12995 strcpy (rs->buf.data (), "QTDPsrc:");
409873ef 12996 encode_source_string (num, addr, "cmd", "end",
8d64371b
TT
12997 rs->buf.data () + strlen (rs->buf.data ()),
12998 rs->buf.size () - strlen (rs->buf.data ()));
409873ef 12999 putpkt (rs->buf);
b6bb3468 13000 remote_get_noisy_reply ();
8d64371b 13001 if (strcmp (rs->buf.data (), "OK"))
409873ef
SS
13002 warning (_("Target does not support source download."));
13003 }
13004 }
13005}
13006
f6ac5f3d
PA
13007void
13008remote_target::download_tracepoint (struct bp_location *loc)
35b1e5cc
SS
13009{
13010 CORE_ADDR tpaddr;
409873ef 13011 char addrbuf[40];
b44ec619
SM
13012 std::vector<std::string> tdp_actions;
13013 std::vector<std::string> stepping_actions;
35b1e5cc 13014 char *pkt;
e8ba3115 13015 struct breakpoint *b = loc->owner;
d9b3f62e 13016 struct tracepoint *t = (struct tracepoint *) b;
b6bb3468 13017 struct remote_state *rs = get_remote_state ();
3df3a985 13018 int ret;
ff36536c 13019 const char *err_msg = _("Tracepoint packet too large for target.");
3df3a985
PFC
13020 size_t size_left;
13021
13022 /* We use a buffer other than rs->buf because we'll build strings
13023 across multiple statements, and other statements in between could
13024 modify rs->buf. */
13025 gdb::char_vector buf (get_remote_packet_size ());
35b1e5cc 13026
dc673c81 13027 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
13028
13029 tpaddr = loc->address;
53807e9f 13030 strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR)));
3df3a985
PFC
13031 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
13032 b->number, addrbuf, /* address */
13033 (b->enable_state == bp_enabled ? 'E' : 'D'),
13034 t->step_count, t->pass_count);
13035
13036 if (ret < 0 || ret >= buf.size ())
a7f25a84 13037 error ("%s", err_msg);
3df3a985 13038
e8ba3115
YQ
13039 /* Fast tracepoints are mostly handled by the target, but we can
13040 tell the target how big of an instruction block should be moved
13041 around. */
13042 if (b->type == bp_fast_tracepoint)
13043 {
13044 /* Only test for support at download time; we may not know
13045 target capabilities at definition time. */
13046 if (remote_supports_fast_tracepoints ())
35b1e5cc 13047 {
6b940e6a
PL
13048 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
13049 NULL))
3df3a985
PFC
13050 {
13051 size_left = buf.size () - strlen (buf.data ());
13052 ret = snprintf (buf.data () + strlen (buf.data ()),
13053 size_left, ":F%x",
13054 gdb_insn_length (loc->gdbarch, tpaddr));
13055
13056 if (ret < 0 || ret >= size_left)
a7f25a84 13057 error ("%s", err_msg);
3df3a985 13058 }
35b1e5cc 13059 else
e8ba3115
YQ
13060 /* If it passed validation at definition but fails now,
13061 something is very wrong. */
13062 internal_error (__FILE__, __LINE__,
13063 _("Fast tracepoint not "
13064 "valid during download"));
35b1e5cc 13065 }
e8ba3115
YQ
13066 else
13067 /* Fast tracepoints are functionally identical to regular
13068 tracepoints, so don't take lack of support as a reason to
13069 give up on the trace run. */
13070 warning (_("Target does not support fast tracepoints, "
13071 "downloading %d as regular tracepoint"), b->number);
13072 }
13073 else if (b->type == bp_static_tracepoint)
13074 {
13075 /* Only test for support at download time; we may not know
13076 target capabilities at definition time. */
13077 if (remote_supports_static_tracepoints ())
0fb4aa4b 13078 {
e8ba3115 13079 struct static_tracepoint_marker marker;
0fb4aa4b 13080
e8ba3115 13081 if (target_static_tracepoint_marker_at (tpaddr, &marker))
3df3a985
PFC
13082 {
13083 size_left = buf.size () - strlen (buf.data ());
13084 ret = snprintf (buf.data () + strlen (buf.data ()),
13085 size_left, ":S");
13086
13087 if (ret < 0 || ret >= size_left)
a7f25a84 13088 error ("%s", err_msg);
3df3a985 13089 }
0fb4aa4b 13090 else
e8ba3115 13091 error (_("Static tracepoint not valid during download"));
0fb4aa4b 13092 }
e8ba3115
YQ
13093 else
13094 /* Fast tracepoints are functionally identical to regular
13095 tracepoints, so don't take lack of support as a reason
13096 to give up on the trace run. */
13097 error (_("Target does not support static tracepoints"));
13098 }
13099 /* If the tracepoint has a conditional, make it into an agent
13100 expression and append to the definition. */
13101 if (loc->cond)
13102 {
13103 /* Only test support at download time, we may not know target
13104 capabilities at definition time. */
13105 if (remote_supports_cond_tracepoints ())
35b1e5cc 13106 {
3df3a985
PFC
13107 agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
13108 loc->cond.get ());
13109
13110 size_left = buf.size () - strlen (buf.data ());
13111
13112 ret = snprintf (buf.data () + strlen (buf.data ()),
13113 size_left, ":X%x,", aexpr->len);
13114
13115 if (ret < 0 || ret >= size_left)
a7f25a84 13116 error ("%s", err_msg);
3df3a985
PFC
13117
13118 size_left = buf.size () - strlen (buf.data ());
13119
13120 /* Two bytes to encode each aexpr byte, plus the terminating
13121 null byte. */
13122 if (aexpr->len * 2 + 1 > size_left)
a7f25a84 13123 error ("%s", err_msg);
3df3a985
PFC
13124
13125 pkt = buf.data () + strlen (buf.data ());
13126
b44ec619 13127 for (int ndx = 0; ndx < aexpr->len; ++ndx)
e8ba3115
YQ
13128 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
13129 *pkt = '\0';
35b1e5cc 13130 }
e8ba3115
YQ
13131 else
13132 warning (_("Target does not support conditional tracepoints, "
13133 "ignoring tp %d cond"), b->number);
13134 }
35b1e5cc 13135
d9b3f62e 13136 if (b->commands || *default_collect)
3df3a985
PFC
13137 {
13138 size_left = buf.size () - strlen (buf.data ());
13139
13140 ret = snprintf (buf.data () + strlen (buf.data ()),
13141 size_left, "-");
13142
13143 if (ret < 0 || ret >= size_left)
a7f25a84 13144 error ("%s", err_msg);
3df3a985
PFC
13145 }
13146
13147 putpkt (buf.data ());
b6bb3468 13148 remote_get_noisy_reply ();
8d64371b 13149 if (strcmp (rs->buf.data (), "OK"))
e8ba3115 13150 error (_("Target does not support tracepoints."));
35b1e5cc 13151
e8ba3115 13152 /* do_single_steps (t); */
b44ec619
SM
13153 for (auto action_it = tdp_actions.begin ();
13154 action_it != tdp_actions.end (); action_it++)
e8ba3115 13155 {
b44ec619
SM
13156 QUIT; /* Allow user to bail out with ^C. */
13157
aa6f3694 13158 bool has_more = ((action_it + 1) != tdp_actions.end ()
b44ec619
SM
13159 || !stepping_actions.empty ());
13160
3df3a985
PFC
13161 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
13162 b->number, addrbuf, /* address */
13163 action_it->c_str (),
13164 has_more ? '-' : 0);
13165
13166 if (ret < 0 || ret >= buf.size ())
a7f25a84 13167 error ("%s", err_msg);
3df3a985
PFC
13168
13169 putpkt (buf.data ());
b44ec619 13170 remote_get_noisy_reply ();
8d64371b 13171 if (strcmp (rs->buf.data (), "OK"))
b44ec619 13172 error (_("Error on target while setting tracepoints."));
e8ba3115 13173 }
409873ef 13174
05abfc39
PFC
13175 for (auto action_it = stepping_actions.begin ();
13176 action_it != stepping_actions.end (); action_it++)
13177 {
13178 QUIT; /* Allow user to bail out with ^C. */
13179
13180 bool is_first = action_it == stepping_actions.begin ();
aa6f3694 13181 bool has_more = (action_it + 1) != stepping_actions.end ();
05abfc39 13182
3df3a985
PFC
13183 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
13184 b->number, addrbuf, /* address */
13185 is_first ? "S" : "",
13186 action_it->c_str (),
13187 has_more ? "-" : "");
13188
13189 if (ret < 0 || ret >= buf.size ())
a7f25a84 13190 error ("%s", err_msg);
3df3a985
PFC
13191
13192 putpkt (buf.data ());
05abfc39 13193 remote_get_noisy_reply ();
8d64371b 13194 if (strcmp (rs->buf.data (), "OK"))
05abfc39
PFC
13195 error (_("Error on target while setting tracepoints."));
13196 }
b44ec619 13197
4082afcc 13198 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 13199 {
f00aae0f 13200 if (b->location != NULL)
409873ef 13201 {
3df3a985
PFC
13202 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13203
13204 if (ret < 0 || ret >= buf.size ())
a7f25a84 13205 error ("%s", err_msg);
3df3a985 13206
f00aae0f 13207 encode_source_string (b->number, loc->address, "at",
d28cd78a 13208 event_location_to_string (b->location.get ()),
3df3a985
PFC
13209 buf.data () + strlen (buf.data ()),
13210 buf.size () - strlen (buf.data ()));
13211 putpkt (buf.data ());
b6bb3468 13212 remote_get_noisy_reply ();
8d64371b 13213 if (strcmp (rs->buf.data (), "OK"))
e8ba3115 13214 warning (_("Target does not support source download."));
409873ef 13215 }
e8ba3115
YQ
13216 if (b->cond_string)
13217 {
3df3a985
PFC
13218 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
13219
13220 if (ret < 0 || ret >= buf.size ())
a7f25a84 13221 error ("%s", err_msg);
3df3a985 13222
e8ba3115 13223 encode_source_string (b->number, loc->address,
3df3a985
PFC
13224 "cond", b->cond_string,
13225 buf.data () + strlen (buf.data ()),
13226 buf.size () - strlen (buf.data ()));
13227 putpkt (buf.data ());
b6bb3468 13228 remote_get_noisy_reply ();
8d64371b 13229 if (strcmp (rs->buf.data (), "OK"))
e8ba3115
YQ
13230 warning (_("Target does not support source download."));
13231 }
13232 remote_download_command_source (b->number, loc->address,
13233 breakpoint_commands (b));
35b1e5cc 13234 }
35b1e5cc
SS
13235}
13236
57810aa7 13237bool
f6ac5f3d 13238remote_target::can_download_tracepoint ()
1e4d1764 13239{
1e51243a
PA
13240 struct remote_state *rs = get_remote_state ();
13241 struct trace_status *ts;
13242 int status;
13243
13244 /* Don't try to install tracepoints until we've relocated our
13245 symbols, and fetched and merged the target's tracepoint list with
13246 ours. */
13247 if (rs->starting_up)
57810aa7 13248 return false;
1e51243a
PA
13249
13250 ts = current_trace_status ();
f6ac5f3d 13251 status = get_trace_status (ts);
1e4d1764
YQ
13252
13253 if (status == -1 || !ts->running_known || !ts->running)
57810aa7 13254 return false;
1e4d1764
YQ
13255
13256 /* If we are in a tracing experiment, but remote stub doesn't support
13257 installing tracepoint in trace, we have to return. */
13258 if (!remote_supports_install_in_trace ())
57810aa7 13259 return false;
1e4d1764 13260
57810aa7 13261 return true;
1e4d1764
YQ
13262}
13263
13264
f6ac5f3d
PA
13265void
13266remote_target::download_trace_state_variable (const trace_state_variable &tsv)
35b1e5cc
SS
13267{
13268 struct remote_state *rs = get_remote_state ();
00bf0b85 13269 char *p;
35b1e5cc 13270
8d64371b 13271 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
c252925c
SM
13272 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
13273 tsv.builtin);
8d64371b
TT
13274 p = rs->buf.data () + strlen (rs->buf.data ());
13275 if ((p - rs->buf.data ()) + tsv.name.length () * 2
13276 >= get_remote_packet_size ())
00bf0b85 13277 error (_("Trace state variable name too long for tsv definition packet"));
c252925c 13278 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
00bf0b85 13279 *p++ = '\0';
35b1e5cc 13280 putpkt (rs->buf);
b6bb3468 13281 remote_get_noisy_reply ();
8d64371b 13282 if (rs->buf[0] == '\0')
ad91cd99 13283 error (_("Target does not support this command."));
8d64371b 13284 if (strcmp (rs->buf.data (), "OK") != 0)
ad91cd99 13285 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
13286}
13287
f6ac5f3d
PA
13288void
13289remote_target::enable_tracepoint (struct bp_location *location)
d248b706
KY
13290{
13291 struct remote_state *rs = get_remote_state ();
d248b706 13292
8d64371b 13293 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
53807e9f
TT
13294 location->owner->number,
13295 phex (location->address, sizeof (CORE_ADDR)));
d248b706 13296 putpkt (rs->buf);
b6bb3468 13297 remote_get_noisy_reply ();
8d64371b 13298 if (rs->buf[0] == '\0')
d248b706 13299 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
8d64371b 13300 if (strcmp (rs->buf.data (), "OK") != 0)
d248b706
KY
13301 error (_("Error on target while enabling tracepoint."));
13302}
13303
f6ac5f3d
PA
13304void
13305remote_target::disable_tracepoint (struct bp_location *location)
d248b706
KY
13306{
13307 struct remote_state *rs = get_remote_state ();
d248b706 13308
8d64371b 13309 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
53807e9f
TT
13310 location->owner->number,
13311 phex (location->address, sizeof (CORE_ADDR)));
d248b706 13312 putpkt (rs->buf);
b6bb3468 13313 remote_get_noisy_reply ();
8d64371b 13314 if (rs->buf[0] == '\0')
d248b706 13315 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
8d64371b 13316 if (strcmp (rs->buf.data (), "OK") != 0)
d248b706
KY
13317 error (_("Error on target while disabling tracepoint."));
13318}
13319
f6ac5f3d
PA
13320void
13321remote_target::trace_set_readonly_regions ()
35b1e5cc
SS
13322{
13323 asection *s;
13324 bfd_size_type size;
608bcef2 13325 bfd_vma vma;
35b1e5cc 13326 int anysecs = 0;
c2fa21f1 13327 int offset = 0;
35b1e5cc 13328
7e10abd1 13329 if (!current_program_space->exec_bfd ())
35b1e5cc
SS
13330 return; /* No information to give. */
13331
b6bb3468
PA
13332 struct remote_state *rs = get_remote_state ();
13333
8d64371b
TT
13334 strcpy (rs->buf.data (), "QTro");
13335 offset = strlen (rs->buf.data ());
7e10abd1 13336 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
35b1e5cc
SS
13337 {
13338 char tmp1[40], tmp2[40];
c2fa21f1 13339 int sec_length;
35b1e5cc
SS
13340
13341 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 13342 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
13343 (s->flags & SEC_READONLY) == 0)
13344 continue;
13345
13346 anysecs = 1;
fd361982
AM
13347 vma = bfd_section_vma (s);
13348 size = bfd_section_size (s);
608bcef2
HZ
13349 sprintf_vma (tmp1, vma);
13350 sprintf_vma (tmp2, vma + size);
c2fa21f1 13351 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
8d64371b 13352 if (offset + sec_length + 1 > rs->buf.size ())
c2fa21f1 13353 {
4082afcc 13354 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 13355 warning (_("\
c2fa21f1
HZ
13356Too many sections for read-only sections definition packet."));
13357 break;
13358 }
8d64371b 13359 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
bba74b36 13360 tmp1, tmp2);
c2fa21f1 13361 offset += sec_length;
35b1e5cc
SS
13362 }
13363 if (anysecs)
13364 {
b6bb3468 13365 putpkt (rs->buf);
8d64371b 13366 getpkt (&rs->buf, 0);
35b1e5cc
SS
13367 }
13368}
13369
f6ac5f3d
PA
13370void
13371remote_target::trace_start ()
35b1e5cc 13372{
b6bb3468
PA
13373 struct remote_state *rs = get_remote_state ();
13374
35b1e5cc 13375 putpkt ("QTStart");
b6bb3468 13376 remote_get_noisy_reply ();
8d64371b 13377 if (rs->buf[0] == '\0')
ad91cd99 13378 error (_("Target does not support this command."));
8d64371b
TT
13379 if (strcmp (rs->buf.data (), "OK") != 0)
13380 error (_("Bogus reply from target: %s"), rs->buf.data ());
35b1e5cc
SS
13381}
13382
f6ac5f3d
PA
13383int
13384remote_target::get_trace_status (struct trace_status *ts)
35b1e5cc 13385{
953b98d1 13386 /* Initialize it just to avoid a GCC false warning. */
f652de6f 13387 char *p = NULL;
bd3eecc3 13388 enum packet_result result;
b6bb3468 13389 struct remote_state *rs = get_remote_state ();
bd3eecc3 13390
4082afcc 13391 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 13392 return -1;
a744cf53 13393
7b9a15e1 13394 /* FIXME we need to get register block size some other way. */
5cd63fda 13395 trace_regblock_size
9d6eea31 13396 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
00bf0b85 13397
049dc89b
JK
13398 putpkt ("qTStatus");
13399
a70b8144 13400 try
67f41397 13401 {
b6bb3468 13402 p = remote_get_noisy_reply ();
67f41397 13403 }
230d2906 13404 catch (const gdb_exception_error &ex)
67f41397 13405 {
598d3636
JK
13406 if (ex.error != TARGET_CLOSE_ERROR)
13407 {
13408 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13409 return -1;
13410 }
eedc3f4f 13411 throw;
67f41397 13412 }
00bf0b85 13413
bd3eecc3
PA
13414 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13415
00bf0b85 13416 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 13417 if (result == PACKET_UNKNOWN)
00bf0b85 13418 return -1;
35b1e5cc 13419
00bf0b85 13420 /* We're working with a live target. */
f5911ea1 13421 ts->filename = NULL;
00bf0b85 13422
00bf0b85 13423 if (*p++ != 'T')
8d64371b 13424 error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
35b1e5cc 13425
84cebc4a
YQ
13426 /* Function 'parse_trace_status' sets default value of each field of
13427 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
13428 parse_trace_status (p, ts);
13429
13430 return ts->running;
35b1e5cc
SS
13431}
13432
f6ac5f3d
PA
13433void
13434remote_target::get_tracepoint_status (struct breakpoint *bp,
13435 struct uploaded_tp *utp)
f196051f
SS
13436{
13437 struct remote_state *rs = get_remote_state ();
f196051f
SS
13438 char *reply;
13439 struct bp_location *loc;
13440 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 13441 size_t size = get_remote_packet_size ();
f196051f
SS
13442
13443 if (tp)
13444 {
c1fc2657 13445 tp->hit_count = 0;
f196051f 13446 tp->traceframe_usage = 0;
c1fc2657 13447 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
13448 {
13449 /* If the tracepoint was never downloaded, don't go asking for
13450 any status. */
13451 if (tp->number_on_target == 0)
13452 continue;
8d64371b 13453 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
bba74b36 13454 phex_nz (loc->address, 0));
f196051f 13455 putpkt (rs->buf);
b6bb3468 13456 reply = remote_get_noisy_reply ();
f196051f
SS
13457 if (reply && *reply)
13458 {
13459 if (*reply == 'V')
13460 parse_tracepoint_status (reply + 1, bp, utp);
13461 }
13462 }
13463 }
13464 else if (utp)
13465 {
13466 utp->hit_count = 0;
13467 utp->traceframe_usage = 0;
8d64371b 13468 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
bba74b36 13469 phex_nz (utp->addr, 0));
f196051f 13470 putpkt (rs->buf);
b6bb3468 13471 reply = remote_get_noisy_reply ();
f196051f
SS
13472 if (reply && *reply)
13473 {
13474 if (*reply == 'V')
13475 parse_tracepoint_status (reply + 1, bp, utp);
13476 }
13477 }
13478}
13479
f6ac5f3d
PA
13480void
13481remote_target::trace_stop ()
35b1e5cc 13482{
b6bb3468
PA
13483 struct remote_state *rs = get_remote_state ();
13484
35b1e5cc 13485 putpkt ("QTStop");
b6bb3468 13486 remote_get_noisy_reply ();
8d64371b 13487 if (rs->buf[0] == '\0')
ad91cd99 13488 error (_("Target does not support this command."));
8d64371b
TT
13489 if (strcmp (rs->buf.data (), "OK") != 0)
13490 error (_("Bogus reply from target: %s"), rs->buf.data ());
35b1e5cc
SS
13491}
13492
f6ac5f3d
PA
13493int
13494remote_target::trace_find (enum trace_find_type type, int num,
13495 CORE_ADDR addr1, CORE_ADDR addr2,
13496 int *tpp)
35b1e5cc
SS
13497{
13498 struct remote_state *rs = get_remote_state ();
8d64371b 13499 char *endbuf = rs->buf.data () + get_remote_packet_size ();
35b1e5cc
SS
13500 char *p, *reply;
13501 int target_frameno = -1, target_tracept = -1;
13502
e6e4e701
PA
13503 /* Lookups other than by absolute frame number depend on the current
13504 trace selected, so make sure it is correct on the remote end
13505 first. */
13506 if (type != tfind_number)
13507 set_remote_traceframe ();
13508
8d64371b 13509 p = rs->buf.data ();
35b1e5cc
SS
13510 strcpy (p, "QTFrame:");
13511 p = strchr (p, '\0');
13512 switch (type)
13513 {
13514 case tfind_number:
bba74b36 13515 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
13516 break;
13517 case tfind_pc:
bba74b36 13518 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
13519 break;
13520 case tfind_tp:
bba74b36 13521 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
13522 break;
13523 case tfind_range:
bba74b36
YQ
13524 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13525 phex_nz (addr2, 0));
35b1e5cc
SS
13526 break;
13527 case tfind_outside:
bba74b36
YQ
13528 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13529 phex_nz (addr2, 0));
35b1e5cc
SS
13530 break;
13531 default:
9b20d036 13532 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
13533 }
13534
13535 putpkt (rs->buf);
b6bb3468 13536 reply = remote_get_noisy_reply ();
ad91cd99
PA
13537 if (*reply == '\0')
13538 error (_("Target does not support this command."));
35b1e5cc
SS
13539
13540 while (reply && *reply)
13541 switch (*reply)
13542 {
13543 case 'F':
f197e0f1
VP
13544 p = ++reply;
13545 target_frameno = (int) strtol (p, &reply, 16);
13546 if (reply == p)
13547 error (_("Unable to parse trace frame number"));
e6e4e701
PA
13548 /* Don't update our remote traceframe number cache on failure
13549 to select a remote traceframe. */
f197e0f1
VP
13550 if (target_frameno == -1)
13551 return -1;
35b1e5cc
SS
13552 break;
13553 case 'T':
f197e0f1
VP
13554 p = ++reply;
13555 target_tracept = (int) strtol (p, &reply, 16);
13556 if (reply == p)
13557 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
13558 break;
13559 case 'O': /* "OK"? */
13560 if (reply[1] == 'K' && reply[2] == '\0')
13561 reply += 2;
13562 else
13563 error (_("Bogus reply from target: %s"), reply);
13564 break;
13565 default:
13566 error (_("Bogus reply from target: %s"), reply);
13567 }
13568 if (tpp)
13569 *tpp = target_tracept;
e6e4e701 13570
262e1174 13571 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
13572 return target_frameno;
13573}
13574
57810aa7 13575bool
f6ac5f3d 13576remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
35b1e5cc
SS
13577{
13578 struct remote_state *rs = get_remote_state ();
13579 char *reply;
13580 ULONGEST uval;
13581
e6e4e701
PA
13582 set_remote_traceframe ();
13583
8d64371b 13584 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc 13585 putpkt (rs->buf);
b6bb3468 13586 reply = remote_get_noisy_reply ();
35b1e5cc
SS
13587 if (reply && *reply)
13588 {
13589 if (*reply == 'V')
13590 {
13591 unpack_varlen_hex (reply + 1, &uval);
13592 *val = (LONGEST) uval;
57810aa7 13593 return true;
35b1e5cc
SS
13594 }
13595 }
57810aa7 13596 return false;
35b1e5cc
SS
13597}
13598
f6ac5f3d
PA
13599int
13600remote_target::save_trace_data (const char *filename)
00bf0b85
SS
13601{
13602 struct remote_state *rs = get_remote_state ();
13603 char *p, *reply;
13604
8d64371b 13605 p = rs->buf.data ();
00bf0b85
SS
13606 strcpy (p, "QTSave:");
13607 p += strlen (p);
8d64371b
TT
13608 if ((p - rs->buf.data ()) + strlen (filename) * 2
13609 >= get_remote_packet_size ())
00bf0b85 13610 error (_("Remote file name too long for trace save packet"));
9f1b45b0 13611 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
13612 *p++ = '\0';
13613 putpkt (rs->buf);
b6bb3468 13614 reply = remote_get_noisy_reply ();
d6c5869f 13615 if (*reply == '\0')
ad91cd99
PA
13616 error (_("Target does not support this command."));
13617 if (strcmp (reply, "OK") != 0)
13618 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
13619 return 0;
13620}
13621
13622/* This is basically a memory transfer, but needs to be its own packet
13623 because we don't know how the target actually organizes its trace
13624 memory, plus we want to be able to ask for as much as possible, but
13625 not be unhappy if we don't get as much as we ask for. */
13626
f6ac5f3d
PA
13627LONGEST
13628remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
13629{
13630 struct remote_state *rs = get_remote_state ();
13631 char *reply;
13632 char *p;
13633 int rslt;
13634
8d64371b 13635 p = rs->buf.data ();
00bf0b85
SS
13636 strcpy (p, "qTBuffer:");
13637 p += strlen (p);
13638 p += hexnumstr (p, offset);
13639 *p++ = ',';
13640 p += hexnumstr (p, len);
13641 *p++ = '\0';
13642
13643 putpkt (rs->buf);
b6bb3468 13644 reply = remote_get_noisy_reply ();
00bf0b85
SS
13645 if (reply && *reply)
13646 {
13647 /* 'l' by itself means we're at the end of the buffer and
13648 there is nothing more to get. */
13649 if (*reply == 'l')
13650 return 0;
13651
13652 /* Convert the reply into binary. Limit the number of bytes to
13653 convert according to our passed-in buffer size, rather than
13654 what was returned in the packet; if the target is
13655 unexpectedly generous and gives us a bigger reply than we
13656 asked for, we don't want to crash. */
b6bb3468 13657 rslt = hex2bin (reply, buf, len);
00bf0b85
SS
13658 return rslt;
13659 }
13660
13661 /* Something went wrong, flag as an error. */
13662 return -1;
13663}
13664
f6ac5f3d
PA
13665void
13666remote_target::set_disconnected_tracing (int val)
35b1e5cc
SS
13667{
13668 struct remote_state *rs = get_remote_state ();
13669
4082afcc 13670 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 13671 {
ad91cd99
PA
13672 char *reply;
13673
8d64371b
TT
13674 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13675 "QTDisconnected:%x", val);
33da3f1c 13676 putpkt (rs->buf);
b6bb3468 13677 reply = remote_get_noisy_reply ();
ad91cd99 13678 if (*reply == '\0')
33da3f1c 13679 error (_("Target does not support this command."));
ad91cd99 13680 if (strcmp (reply, "OK") != 0)
dda83cd7 13681 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
13682 }
13683 else if (val)
13684 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
13685}
13686
f6ac5f3d
PA
13687int
13688remote_target::core_of_thread (ptid_t ptid)
dc146f7c 13689{
5b6d1e4f 13690 thread_info *info = find_thread_ptid (this, ptid);
a744cf53 13691
7aabaf9d
SM
13692 if (info != NULL && info->priv != NULL)
13693 return get_remote_thread_info (info)->core;
13694
dc146f7c
VP
13695 return -1;
13696}
13697
f6ac5f3d
PA
13698void
13699remote_target::set_circular_trace_buffer (int val)
4daf5ac0
SS
13700{
13701 struct remote_state *rs = get_remote_state ();
ad91cd99 13702 char *reply;
4daf5ac0 13703
8d64371b
TT
13704 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13705 "QTBuffer:circular:%x", val);
4daf5ac0 13706 putpkt (rs->buf);
b6bb3468 13707 reply = remote_get_noisy_reply ();
ad91cd99 13708 if (*reply == '\0')
4daf5ac0 13709 error (_("Target does not support this command."));
ad91cd99
PA
13710 if (strcmp (reply, "OK") != 0)
13711 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
13712}
13713
f6ac5f3d
PA
13714traceframe_info_up
13715remote_target::traceframe_info ()
b3b9301e 13716{
9018be22 13717 gdb::optional<gdb::char_vector> text
8b88a78e 13718 = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
b7b030ad 13719 NULL);
9018be22
SM
13720 if (text)
13721 return parse_traceframe_info (text->data ());
b3b9301e
PA
13722
13723 return NULL;
13724}
13725
405f8e94
SS
13726/* Handle the qTMinFTPILen packet. Returns the minimum length of
13727 instruction on which a fast tracepoint may be placed. Returns -1
13728 if the packet is not supported, and 0 if the minimum instruction
13729 length is unknown. */
13730
f6ac5f3d
PA
13731int
13732remote_target::get_min_fast_tracepoint_insn_len ()
405f8e94
SS
13733{
13734 struct remote_state *rs = get_remote_state ();
13735 char *reply;
13736
e886a173
PA
13737 /* If we're not debugging a process yet, the IPA can't be
13738 loaded. */
55f6301a 13739 if (!target_has_execution ())
e886a173
PA
13740 return 0;
13741
13742 /* Make sure the remote is pointing at the right process. */
13743 set_general_process ();
13744
8d64371b 13745 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
405f8e94 13746 putpkt (rs->buf);
b6bb3468 13747 reply = remote_get_noisy_reply ();
405f8e94
SS
13748 if (*reply == '\0')
13749 return -1;
13750 else
13751 {
13752 ULONGEST min_insn_len;
13753
13754 unpack_varlen_hex (reply, &min_insn_len);
13755
13756 return (int) min_insn_len;
13757 }
13758}
13759
f6ac5f3d
PA
13760void
13761remote_target::set_trace_buffer_size (LONGEST val)
f6f899bf 13762{
4082afcc 13763 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
13764 {
13765 struct remote_state *rs = get_remote_state ();
8d64371b
TT
13766 char *buf = rs->buf.data ();
13767 char *endbuf = buf + get_remote_packet_size ();
f6f899bf
HAQ
13768 enum packet_result result;
13769
13770 gdb_assert (val >= 0 || val == -1);
13771 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13772 /* Send -1 as literal "-1" to avoid host size dependency. */
13773 if (val < 0)
13774 {
13775 *buf++ = '-';
dda83cd7 13776 buf += hexnumstr (buf, (ULONGEST) -val);
f6f899bf
HAQ
13777 }
13778 else
13779 buf += hexnumstr (buf, (ULONGEST) val);
13780
13781 putpkt (rs->buf);
b6bb3468 13782 remote_get_noisy_reply ();
f6f899bf
HAQ
13783 result = packet_ok (rs->buf,
13784 &remote_protocol_packets[PACKET_QTBuffer_size]);
13785
13786 if (result != PACKET_OK)
8d64371b 13787 warning (_("Bogus reply from target: %s"), rs->buf.data ());
f6f899bf
HAQ
13788 }
13789}
13790
57810aa7 13791bool
f6ac5f3d
PA
13792remote_target::set_trace_notes (const char *user, const char *notes,
13793 const char *stop_notes)
f196051f
SS
13794{
13795 struct remote_state *rs = get_remote_state ();
13796 char *reply;
8d64371b
TT
13797 char *buf = rs->buf.data ();
13798 char *endbuf = buf + get_remote_packet_size ();
f196051f
SS
13799 int nbytes;
13800
13801 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13802 if (user)
13803 {
13804 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13805 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13806 buf += 2 * nbytes;
13807 *buf++ = ';';
13808 }
13809 if (notes)
13810 {
13811 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13812 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13813 buf += 2 * nbytes;
13814 *buf++ = ';';
13815 }
13816 if (stop_notes)
13817 {
13818 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13819 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13820 buf += 2 * nbytes;
13821 *buf++ = ';';
13822 }
13823 /* Ensure the buffer is terminated. */
13824 *buf = '\0';
13825
13826 putpkt (rs->buf);
b6bb3468 13827 reply = remote_get_noisy_reply ();
f196051f 13828 if (*reply == '\0')
57810aa7 13829 return false;
f196051f
SS
13830
13831 if (strcmp (reply, "OK") != 0)
13832 error (_("Bogus reply from target: %s"), reply);
13833
57810aa7 13834 return true;
f196051f
SS
13835}
13836
57810aa7
PA
13837bool
13838remote_target::use_agent (bool use)
d1feda86 13839{
4082afcc 13840 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13841 {
13842 struct remote_state *rs = get_remote_state ();
13843
13844 /* If the stub supports QAgent. */
8d64371b 13845 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
d1feda86 13846 putpkt (rs->buf);
8d64371b 13847 getpkt (&rs->buf, 0);
d1feda86 13848
8d64371b 13849 if (strcmp (rs->buf.data (), "OK") == 0)
d1feda86 13850 {
f6ac5f3d 13851 ::use_agent = use;
57810aa7 13852 return true;
d1feda86
YQ
13853 }
13854 }
13855
57810aa7 13856 return false;
d1feda86
YQ
13857}
13858
57810aa7 13859bool
f6ac5f3d 13860remote_target::can_use_agent ()
d1feda86 13861{
4082afcc 13862 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13863}
13864
9accd112
MM
13865struct btrace_target_info
13866{
13867 /* The ptid of the traced thread. */
13868 ptid_t ptid;
f4abbc16
MM
13869
13870 /* The obtained branch trace configuration. */
13871 struct btrace_config conf;
9accd112
MM
13872};
13873
f4abbc16
MM
13874/* Reset our idea of our target's btrace configuration. */
13875
13876static void
6b8edb51 13877remote_btrace_reset (remote_state *rs)
f4abbc16 13878{
f4abbc16
MM
13879 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13880}
13881
f4abbc16
MM
13882/* Synchronize the configuration with the target. */
13883
6b8edb51
PA
13884void
13885remote_target::btrace_sync_conf (const btrace_config *conf)
f4abbc16 13886{
d33501a5
MM
13887 struct packet_config *packet;
13888 struct remote_state *rs;
13889 char *buf, *pos, *endbuf;
13890
13891 rs = get_remote_state ();
8d64371b 13892 buf = rs->buf.data ();
d33501a5
MM
13893 endbuf = buf + get_remote_packet_size ();
13894
13895 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13896 if (packet_config_support (packet) == PACKET_ENABLE
13897 && conf->bts.size != rs->btrace_config.bts.size)
13898 {
13899 pos = buf;
13900 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
dda83cd7 13901 conf->bts.size);
d33501a5
MM
13902
13903 putpkt (buf);
8d64371b 13904 getpkt (&rs->buf, 0);
d33501a5
MM
13905
13906 if (packet_ok (buf, packet) == PACKET_ERROR)
13907 {
13908 if (buf[0] == 'E' && buf[1] == '.')
13909 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13910 else
13911 error (_("Failed to configure the BTS buffer size."));
13912 }
13913
13914 rs->btrace_config.bts.size = conf->bts.size;
13915 }
b20a6524
MM
13916
13917 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13918 if (packet_config_support (packet) == PACKET_ENABLE
13919 && conf->pt.size != rs->btrace_config.pt.size)
13920 {
13921 pos = buf;
13922 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
dda83cd7 13923 conf->pt.size);
b20a6524
MM
13924
13925 putpkt (buf);
8d64371b 13926 getpkt (&rs->buf, 0);
b20a6524
MM
13927
13928 if (packet_ok (buf, packet) == PACKET_ERROR)
13929 {
13930 if (buf[0] == 'E' && buf[1] == '.')
13931 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13932 else
13933 error (_("Failed to configure the trace buffer size."));
13934 }
13935
13936 rs->btrace_config.pt.size = conf->pt.size;
13937 }
f4abbc16
MM
13938}
13939
13940/* Read the current thread's btrace configuration from the target and
13941 store it into CONF. */
13942
13943static void
13944btrace_read_config (struct btrace_config *conf)
13945{
9018be22 13946 gdb::optional<gdb::char_vector> xml
8b88a78e 13947 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
9018be22
SM
13948 if (xml)
13949 parse_xml_btrace_conf (conf, xml->data ());
f4abbc16
MM
13950}
13951
c0272db5
TW
13952/* Maybe reopen target btrace. */
13953
6b8edb51
PA
13954void
13955remote_target::remote_btrace_maybe_reopen ()
c0272db5
TW
13956{
13957 struct remote_state *rs = get_remote_state ();
c0272db5 13958 int btrace_target_pushed = 0;
15766370 13959#if !defined (HAVE_LIBIPT)
c0272db5 13960 int warned = 0;
15766370 13961#endif
c0272db5 13962
aedbe3bb
CM
13963 /* Don't bother walking the entirety of the remote thread list when
13964 we know the feature isn't supported by the remote. */
13965 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
13966 return;
13967
5ed8105e
PA
13968 scoped_restore_current_thread restore_thread;
13969
5b6d1e4f 13970 for (thread_info *tp : all_non_exited_threads (this))
c0272db5
TW
13971 {
13972 set_general_thread (tp->ptid);
13973
13974 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13975 btrace_read_config (&rs->btrace_config);
13976
13977 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13978 continue;
13979
13980#if !defined (HAVE_LIBIPT)
13981 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13982 {
13983 if (!warned)
13984 {
13985 warned = 1;
c4e12631
MM
13986 warning (_("Target is recording using Intel Processor Trace "
13987 "but support was disabled at compile time."));
c0272db5
TW
13988 }
13989
13990 continue;
13991 }
13992#endif /* !defined (HAVE_LIBIPT) */
13993
13994 /* Push target, once, but before anything else happens. This way our
13995 changes to the threads will be cleaned up by unpushing the target
13996 in case btrace_read_config () throws. */
13997 if (!btrace_target_pushed)
13998 {
13999 btrace_target_pushed = 1;
14000 record_btrace_push_target ();
14001 printf_filtered (_("Target is recording using %s.\n"),
14002 btrace_format_string (rs->btrace_config.format));
14003 }
14004
14005 tp->btrace.target = XCNEW (struct btrace_target_info);
14006 tp->btrace.target->ptid = tp->ptid;
14007 tp->btrace.target->conf = rs->btrace_config;
14008 }
c0272db5
TW
14009}
14010
9accd112
MM
14011/* Enable branch tracing. */
14012
f6ac5f3d
PA
14013struct btrace_target_info *
14014remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
9accd112
MM
14015{
14016 struct btrace_target_info *tinfo = NULL;
b20a6524 14017 struct packet_config *packet = NULL;
9accd112 14018 struct remote_state *rs = get_remote_state ();
8d64371b
TT
14019 char *buf = rs->buf.data ();
14020 char *endbuf = buf + get_remote_packet_size ();
9accd112 14021
b20a6524
MM
14022 switch (conf->format)
14023 {
14024 case BTRACE_FORMAT_BTS:
14025 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
14026 break;
14027
14028 case BTRACE_FORMAT_PT:
14029 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
14030 break;
14031 }
14032
14033 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
14034 error (_("Target does not support branch tracing."));
14035
f4abbc16
MM
14036 btrace_sync_conf (conf);
14037
9accd112
MM
14038 set_general_thread (ptid);
14039
14040 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14041 putpkt (rs->buf);
8d64371b 14042 getpkt (&rs->buf, 0);
9accd112
MM
14043
14044 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14045 {
14046 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14047 error (_("Could not enable branch tracing for %s: %s"),
a068643d 14048 target_pid_to_str (ptid).c_str (), &rs->buf[2]);
9accd112
MM
14049 else
14050 error (_("Could not enable branch tracing for %s."),
a068643d 14051 target_pid_to_str (ptid).c_str ());
9accd112
MM
14052 }
14053
8d749320 14054 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
14055 tinfo->ptid = ptid;
14056
f4abbc16
MM
14057 /* If we fail to read the configuration, we lose some information, but the
14058 tracing itself is not impacted. */
a70b8144 14059 try
492d29ea
PA
14060 {
14061 btrace_read_config (&tinfo->conf);
14062 }
230d2906 14063 catch (const gdb_exception_error &err)
492d29ea
PA
14064 {
14065 if (err.message != NULL)
3d6e9d23 14066 warning ("%s", err.what ());
492d29ea 14067 }
f4abbc16 14068
9accd112
MM
14069 return tinfo;
14070}
14071
14072/* Disable branch tracing. */
14073
f6ac5f3d
PA
14074void
14075remote_target::disable_btrace (struct btrace_target_info *tinfo)
9accd112
MM
14076{
14077 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
14078 struct remote_state *rs = get_remote_state ();
8d64371b
TT
14079 char *buf = rs->buf.data ();
14080 char *endbuf = buf + get_remote_packet_size ();
9accd112 14081
4082afcc 14082 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
14083 error (_("Target does not support branch tracing."));
14084
14085 set_general_thread (tinfo->ptid);
14086
14087 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
14088 putpkt (rs->buf);
8d64371b 14089 getpkt (&rs->buf, 0);
9accd112
MM
14090
14091 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
14092 {
14093 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
14094 error (_("Could not disable branch tracing for %s: %s"),
a068643d 14095 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
9accd112
MM
14096 else
14097 error (_("Could not disable branch tracing for %s."),
a068643d 14098 target_pid_to_str (tinfo->ptid).c_str ());
9accd112
MM
14099 }
14100
14101 xfree (tinfo);
14102}
14103
14104/* Teardown branch tracing. */
14105
f6ac5f3d
PA
14106void
14107remote_target::teardown_btrace (struct btrace_target_info *tinfo)
9accd112
MM
14108{
14109 /* We must not talk to the target during teardown. */
14110 xfree (tinfo);
14111}
14112
14113/* Read the branch trace. */
14114
f6ac5f3d
PA
14115enum btrace_error
14116remote_target::read_btrace (struct btrace_data *btrace,
14117 struct btrace_target_info *tinfo,
14118 enum btrace_read_type type)
9accd112
MM
14119{
14120 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
9accd112 14121 const char *annex;
9accd112 14122
4082afcc 14123 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
14124 error (_("Target does not support branch tracing."));
14125
14126#if !defined(HAVE_LIBEXPAT)
14127 error (_("Cannot process branch tracing result. XML parsing not supported."));
14128#endif
14129
14130 switch (type)
14131 {
864089d2 14132 case BTRACE_READ_ALL:
9accd112
MM
14133 annex = "all";
14134 break;
864089d2 14135 case BTRACE_READ_NEW:
9accd112
MM
14136 annex = "new";
14137 break;
969c39fb
MM
14138 case BTRACE_READ_DELTA:
14139 annex = "delta";
14140 break;
9accd112
MM
14141 default:
14142 internal_error (__FILE__, __LINE__,
14143 _("Bad branch tracing read type: %u."),
14144 (unsigned int) type);
14145 }
14146
9018be22 14147 gdb::optional<gdb::char_vector> xml
8b88a78e 14148 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
9018be22 14149 if (!xml)
969c39fb 14150 return BTRACE_ERR_UNKNOWN;
9accd112 14151
9018be22 14152 parse_xml_btrace (btrace, xml->data ());
9accd112 14153
969c39fb 14154 return BTRACE_ERR_NONE;
9accd112
MM
14155}
14156
f6ac5f3d
PA
14157const struct btrace_config *
14158remote_target::btrace_conf (const struct btrace_target_info *tinfo)
f4abbc16
MM
14159{
14160 return &tinfo->conf;
14161}
14162
57810aa7 14163bool
f6ac5f3d 14164remote_target::augmented_libraries_svr4_read ()
ced63ec0 14165{
4082afcc
PA
14166 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
14167 == PACKET_ENABLE);
ced63ec0
GB
14168}
14169
9dd130a0
TT
14170/* Implementation of to_load. */
14171
f6ac5f3d
PA
14172void
14173remote_target::load (const char *name, int from_tty)
9dd130a0
TT
14174{
14175 generic_load (name, from_tty);
14176}
14177
c78fa86a
GB
14178/* Accepts an integer PID; returns a string representing a file that
14179 can be opened on the remote side to get the symbols for the child
14180 process. Returns NULL if the operation is not supported. */
14181
f6ac5f3d
PA
14182char *
14183remote_target::pid_to_exec_file (int pid)
c78fa86a 14184{
9018be22 14185 static gdb::optional<gdb::char_vector> filename;
835205d0 14186 char *annex = NULL;
c78fa86a
GB
14187
14188 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
14189 return NULL;
14190
5b6d1e4f 14191 inferior *inf = find_inferior_pid (this, pid);
835205d0
GB
14192 if (inf == NULL)
14193 internal_error (__FILE__, __LINE__,
14194 _("not currently attached to process %d"), pid);
14195
14196 if (!inf->fake_pid_p)
14197 {
14198 const int annex_size = 9;
14199
224c3ddb 14200 annex = (char *) alloca (annex_size);
835205d0
GB
14201 xsnprintf (annex, annex_size, "%x", pid);
14202 }
14203
8b88a78e 14204 filename = target_read_stralloc (current_top_target (),
c78fa86a
GB
14205 TARGET_OBJECT_EXEC_FILE, annex);
14206
9018be22 14207 return filename ? filename->data () : nullptr;
c78fa86a
GB
14208}
14209
750ce8d1
YQ
14210/* Implement the to_can_do_single_step target_ops method. */
14211
f6ac5f3d
PA
14212int
14213remote_target::can_do_single_step ()
750ce8d1
YQ
14214{
14215 /* We can only tell whether target supports single step or not by
14216 supported s and S vCont actions if the stub supports vContSupported
14217 feature. If the stub doesn't support vContSupported feature,
14218 we have conservatively to think target doesn't supports single
14219 step. */
14220 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
14221 {
14222 struct remote_state *rs = get_remote_state ();
14223
14224 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 14225 remote_vcont_probe ();
750ce8d1
YQ
14226
14227 return rs->supports_vCont.s && rs->supports_vCont.S;
14228 }
14229 else
14230 return 0;
14231}
14232
3a00c802
PA
14233/* Implementation of the to_execution_direction method for the remote
14234 target. */
14235
f6ac5f3d
PA
14236enum exec_direction_kind
14237remote_target::execution_direction ()
3a00c802
PA
14238{
14239 struct remote_state *rs = get_remote_state ();
14240
14241 return rs->last_resume_exec_dir;
14242}
14243
f6327dcb
KB
14244/* Return pointer to the thread_info struct which corresponds to
14245 THREAD_HANDLE (having length HANDLE_LEN). */
14246
f6ac5f3d
PA
14247thread_info *
14248remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
14249 int handle_len,
14250 inferior *inf)
f6327dcb 14251{
5b6d1e4f 14252 for (thread_info *tp : all_non_exited_threads (this))
f6327dcb 14253 {
7aabaf9d 14254 remote_thread_info *priv = get_remote_thread_info (tp);
f6327dcb
KB
14255
14256 if (tp->inf == inf && priv != NULL)
dda83cd7 14257 {
7aabaf9d 14258 if (handle_len != priv->thread_handle.size ())
f6327dcb 14259 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
dda83cd7 14260 handle_len, priv->thread_handle.size ());
7aabaf9d 14261 if (memcmp (thread_handle, priv->thread_handle.data (),
dda83cd7 14262 handle_len) == 0)
f6327dcb
KB
14263 return tp;
14264 }
14265 }
14266
14267 return NULL;
14268}
14269
3d6c6204
KB
14270gdb::byte_vector
14271remote_target::thread_info_to_thread_handle (struct thread_info *tp)
14272{
14273 remote_thread_info *priv = get_remote_thread_info (tp);
14274 return priv->thread_handle;
14275}
14276
57810aa7 14277bool
f6ac5f3d 14278remote_target::can_async_p ()
6426a772 14279{
5d93a237
TT
14280 struct remote_state *rs = get_remote_state ();
14281
3015c064
SM
14282 /* We don't go async if the user has explicitly prevented it with the
14283 "maint set target-async" command. */
c6ebd6cf 14284 if (!target_async_permitted)
57810aa7 14285 return false;
75c99385 14286
23860348 14287 /* We're async whenever the serial device is. */
5d93a237 14288 return serial_can_async_p (rs->remote_desc);
6426a772
JM
14289}
14290
57810aa7 14291bool
f6ac5f3d 14292remote_target::is_async_p ()
6426a772 14293{
5d93a237
TT
14294 struct remote_state *rs = get_remote_state ();
14295
c6ebd6cf 14296 if (!target_async_permitted)
75c99385 14297 /* We only enable async when the user specifically asks for it. */
57810aa7 14298 return false;
75c99385 14299
23860348 14300 /* We're async whenever the serial device is. */
5d93a237 14301 return serial_is_async_p (rs->remote_desc);
6426a772
JM
14302}
14303
2acceee2
JM
14304/* Pass the SERIAL event on and up to the client. One day this code
14305 will be able to delay notifying the client of an event until the
23860348 14306 point where an entire packet has been received. */
2acceee2 14307
2acceee2
JM
14308static serial_event_ftype remote_async_serial_handler;
14309
6426a772 14310static void
819cc324 14311remote_async_serial_handler (struct serial *scb, void *context)
6426a772 14312{
2acceee2
JM
14313 /* Don't propogate error information up to the client. Instead let
14314 the client find out about the error by querying the target. */
b1a35af2 14315 inferior_event_handler (INF_REG_EVENT);
2acceee2
JM
14316}
14317
74531fed
PA
14318static void
14319remote_async_inferior_event_handler (gdb_client_data data)
14320{
b1a35af2 14321 inferior_event_handler (INF_REG_EVENT);
96118d11
PA
14322
14323 remote_target *remote = (remote_target *) data;
14324 remote_state *rs = remote->get_remote_state ();
14325
14326 /* inferior_event_handler may have consumed an event pending on the
14327 infrun side without calling target_wait on the REMOTE target, or
14328 may have pulled an event out of a different target. Keep trying
14329 for this remote target as long it still has either pending events
14330 or unacknowledged notifications. */
14331
14332 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL
14333 || !rs->stop_reply_queue.empty ())
14334 mark_async_event_handler (rs->remote_async_inferior_event_token);
74531fed
PA
14335}
14336
5b6d1e4f
PA
14337int
14338remote_target::async_wait_fd ()
14339{
14340 struct remote_state *rs = get_remote_state ();
14341 return rs->remote_desc->fd;
14342}
14343
f6ac5f3d
PA
14344void
14345remote_target::async (int enable)
2acceee2 14346{
5d93a237
TT
14347 struct remote_state *rs = get_remote_state ();
14348
6a3753b3 14349 if (enable)
2acceee2 14350 {
88b496c3 14351 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
14352
14353 /* If there are pending events in the stop reply queue tell the
14354 event loop to process them. */
953edf2b 14355 if (!rs->stop_reply_queue.empty ())
6b8edb51 14356 mark_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14357 /* For simplicity, below we clear the pending events token
14358 without remembering whether it is marked, so here we always
14359 mark it. If there's actually no pending notification to
14360 process, this ends up being a no-op (other than a spurious
14361 event-loop wakeup). */
14362 if (target_is_non_stop_p ())
14363 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
14364 }
14365 else
b7d2e916
PA
14366 {
14367 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
14368 /* If the core is disabling async, it doesn't want to be
14369 disturbed with target events. Clear all async event sources
14370 too. */
6b8edb51 14371 clear_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14372 if (target_is_non_stop_p ())
14373 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 14374 }
6426a772
JM
14375}
14376
65706a29
PA
14377/* Implementation of the to_thread_events method. */
14378
f6ac5f3d
PA
14379void
14380remote_target::thread_events (int enable)
65706a29
PA
14381{
14382 struct remote_state *rs = get_remote_state ();
14383 size_t size = get_remote_packet_size ();
65706a29
PA
14384
14385 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14386 return;
14387
8d64371b 14388 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
65706a29 14389 putpkt (rs->buf);
8d64371b 14390 getpkt (&rs->buf, 0);
65706a29
PA
14391
14392 switch (packet_ok (rs->buf,
14393 &remote_protocol_packets[PACKET_QThreadEvents]))
14394 {
14395 case PACKET_OK:
8d64371b
TT
14396 if (strcmp (rs->buf.data (), "OK") != 0)
14397 error (_("Remote refused setting thread events: %s"), rs->buf.data ());
65706a29
PA
14398 break;
14399 case PACKET_ERROR:
8d64371b 14400 warning (_("Remote failure reply: %s"), rs->buf.data ());
65706a29
PA
14401 break;
14402 case PACKET_UNKNOWN:
14403 break;
14404 }
14405}
14406
d471ea57 14407static void
981a3fb3 14408show_remote_cmd (const char *args, int from_tty)
d471ea57 14409{
37a105a1 14410 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 14411 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 14412 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 14413 struct ui_out *uiout = current_uiout;
37a105a1 14414
2e783024 14415 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
14416 for (; list != NULL; list = list->next)
14417 if (strcmp (list->name, "Z-packet") == 0)
14418 continue;
427c3a89
DJ
14419 else if (list->type == not_set_cmd)
14420 /* Alias commands are exactly like the original, except they
14421 don't have the normal type. */
14422 continue;
14423 else
37a105a1 14424 {
2e783024 14425 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 14426
112e8700
SM
14427 uiout->field_string ("name", list->name);
14428 uiout->text (": ");
427c3a89 14429 if (list->type == show_cmd)
f5c4fcd9 14430 do_show_command (NULL, from_tty, list);
427c3a89
DJ
14431 else
14432 cmd_func (list, NULL, from_tty);
37a105a1 14433 }
d471ea57 14434}
5a2468f5 14435
0f71a2f6 14436
23860348 14437/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
14438static void
14439remote_new_objfile (struct objfile *objfile)
14440{
6b8edb51 14441 remote_target *remote = get_current_remote_target ();
5d93a237 14442
6b8edb51
PA
14443 if (remote != NULL) /* Have a remote connection. */
14444 remote->remote_check_symbols ();
dc8acb97
MS
14445}
14446
00bf0b85
SS
14447/* Pull all the tracepoints defined on the target and create local
14448 data structures representing them. We don't want to create real
14449 tracepoints yet, we don't want to mess up the user's existing
14450 collection. */
14451
f6ac5f3d
PA
14452int
14453remote_target::upload_tracepoints (struct uploaded_tp **utpp)
d5551862 14454{
00bf0b85
SS
14455 struct remote_state *rs = get_remote_state ();
14456 char *p;
d5551862 14457
00bf0b85
SS
14458 /* Ask for a first packet of tracepoint definition. */
14459 putpkt ("qTfP");
8d64371b
TT
14460 getpkt (&rs->buf, 0);
14461 p = rs->buf.data ();
00bf0b85 14462 while (*p && *p != 'l')
d5551862 14463 {
00bf0b85
SS
14464 parse_tracepoint_definition (p, utpp);
14465 /* Ask for another packet of tracepoint definition. */
14466 putpkt ("qTsP");
8d64371b
TT
14467 getpkt (&rs->buf, 0);
14468 p = rs->buf.data ();
d5551862 14469 }
00bf0b85 14470 return 0;
d5551862
SS
14471}
14472
f6ac5f3d
PA
14473int
14474remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
d5551862 14475{
00bf0b85 14476 struct remote_state *rs = get_remote_state ();
d5551862 14477 char *p;
d5551862 14478
00bf0b85
SS
14479 /* Ask for a first packet of variable definition. */
14480 putpkt ("qTfV");
8d64371b
TT
14481 getpkt (&rs->buf, 0);
14482 p = rs->buf.data ();
00bf0b85 14483 while (*p && *p != 'l')
d5551862 14484 {
00bf0b85
SS
14485 parse_tsv_definition (p, utsvp);
14486 /* Ask for another packet of variable definition. */
14487 putpkt ("qTsV");
8d64371b
TT
14488 getpkt (&rs->buf, 0);
14489 p = rs->buf.data ();
d5551862 14490 }
00bf0b85 14491 return 0;
d5551862
SS
14492}
14493
c1e36e3e
PA
14494/* The "set/show range-stepping" show hook. */
14495
14496static void
14497show_range_stepping (struct ui_file *file, int from_tty,
14498 struct cmd_list_element *c,
14499 const char *value)
14500{
14501 fprintf_filtered (file,
14502 _("Debugger's willingness to use range stepping "
14503 "is %s.\n"), value);
14504}
14505
6b8edb51
PA
14506/* Return true if the vCont;r action is supported by the remote
14507 stub. */
14508
14509bool
14510remote_target::vcont_r_supported ()
14511{
14512 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14513 remote_vcont_probe ();
14514
14515 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14516 && get_remote_state ()->supports_vCont.r);
14517}
14518
c1e36e3e
PA
14519/* The "set/show range-stepping" set hook. */
14520
14521static void
eb4c3f4a 14522set_range_stepping (const char *ignore_args, int from_tty,
c1e36e3e
PA
14523 struct cmd_list_element *c)
14524{
6b8edb51
PA
14525 /* When enabling, check whether range stepping is actually supported
14526 by the target, and warn if not. */
c1e36e3e
PA
14527 if (use_range_stepping)
14528 {
6b8edb51
PA
14529 remote_target *remote = get_current_remote_target ();
14530 if (remote == NULL
14531 || !remote->vcont_r_supported ())
14532 warning (_("Range stepping is not supported by the current target"));
c1e36e3e
PA
14533 }
14534}
14535
6c265988 14536void _initialize_remote ();
c906108c 14537void
6c265988 14538_initialize_remote ()
c906108c 14539{
9a7071a8 14540 struct cmd_list_element *cmd;
6f937416 14541 const char *cmd_name;
ea9c271d 14542
0f71a2f6 14543 /* architecture specific data */
29709017
DJ
14544 remote_g_packet_data_handle =
14545 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 14546
d9f719f1
PA
14547 add_target (remote_target_info, remote_target::open);
14548 add_target (extended_remote_target_info, extended_remote_target::open);
cce74817 14549
dc8acb97 14550 /* Hook into new objfile notification. */
76727919 14551 gdb::observers::new_objfile.attach (remote_new_objfile);
dc8acb97 14552
c906108c
SS
14553#if 0
14554 init_remote_threadtests ();
14555#endif
14556
23860348 14557 /* set/show remote ... */
d471ea57 14558
0743fc83 14559 add_basic_prefix_cmd ("remote", class_maintenance, _("\
590042fc 14560Remote protocol specific variables.\n\
5a2468f5 14561Configure various remote-protocol specific variables such as\n\
590042fc 14562the packets being used."),
0743fc83
TT
14563 &remote_set_cmdlist, "set remote ",
14564 0 /* allow-unknown */, &setlist);
1bedd215 14565 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
590042fc 14566Remote protocol specific variables.\n\
5a2468f5 14567Configure various remote-protocol specific variables such as\n\
590042fc 14568the packets being used."),
cff3e48b 14569 &remote_show_cmdlist, "show remote ",
23860348 14570 0 /* allow-unknown */, &showlist);
5a2468f5 14571
1a966eab
AC
14572 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14573Compare section data on target to the exec file.\n\
95cf3b38
DT
14574Argument is a single section name (default: all loaded sections).\n\
14575To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
14576 &cmdlist);
14577
1a966eab
AC
14578 add_cmd ("packet", class_maintenance, packet_command, _("\
14579Send an arbitrary packet to a remote target.\n\
c906108c
SS
14580 maintenance packet TEXT\n\
14581If GDB is talking to an inferior via the GDB serial protocol, then\n\
14582this command sends the string TEXT to the inferior, and displays the\n\
14583response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 14584terminating `#' character and checksum."),
c906108c
SS
14585 &maintenancelist);
14586
7915a72c
AC
14587 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14588Set whether to send break if interrupted."), _("\
14589Show whether to send break if interrupted."), _("\
14590If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14591 set_remotebreak, show_remotebreak,
e707bbc2 14592 &setlist, &showlist);
9a7071a8 14593 cmd_name = "remotebreak";
cf00cd6f 14594 cmd = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1);
9a7071a8
JB
14595 deprecate_cmd (cmd, "set remote interrupt-sequence");
14596 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
cf00cd6f 14597 cmd = lookup_cmd (&cmd_name, showlist, "", NULL, -1, 1);
9a7071a8
JB
14598 deprecate_cmd (cmd, "show remote interrupt-sequence");
14599
14600 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14601 interrupt_sequence_modes, &interrupt_sequence_mode,
14602 _("\
9a7071a8
JB
14603Set interrupt sequence to remote target."), _("\
14604Show interrupt sequence to remote target."), _("\
14605Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14606 NULL, show_interrupt_sequence,
14607 &remote_set_cmdlist,
14608 &remote_show_cmdlist);
14609
14610 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14611 &interrupt_on_connect, _("\
590042fc
PW
14612Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14613Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
9a7071a8
JB
14614If set, interrupt sequence is sent to remote target."),
14615 NULL, NULL,
14616 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14617
23860348 14618 /* Install commands for configuring memory read/write packets. */
11cf8741 14619
1a966eab
AC
14620 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14621Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14622 &setlist);
1a966eab
AC
14623 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14624Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14625 &showlist);
14626 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14627 set_memory_write_packet_size, _("\
14628Set the maximum number of bytes per memory-write packet.\n\
14629Specify the number of bytes in a packet or 0 (zero) for the\n\
14630default packet size. The actual limit is further reduced\n\
14631dependent on the target. Specify ``fixed'' to disable the\n\
14632further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14633 &remote_set_cmdlist);
14634 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14635 set_memory_read_packet_size, _("\
14636Set the maximum number of bytes per memory-read packet.\n\
14637Specify the number of bytes in a packet or 0 (zero) for the\n\
14638default packet size. The actual limit is further reduced\n\
14639dependent on the target. Specify ``fixed'' to disable the\n\
14640further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14641 &remote_set_cmdlist);
14642 add_cmd ("memory-write-packet-size", no_class,
14643 show_memory_write_packet_size,
1a966eab 14644 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14645 &remote_show_cmdlist);
14646 add_cmd ("memory-read-packet-size", no_class,
14647 show_memory_read_packet_size,
1a966eab 14648 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14649 &remote_show_cmdlist);
c906108c 14650
055303e2 14651 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14652 &remote_hw_watchpoint_limit, _("\
14653Set the maximum number of target hardware watchpoints."), _("\
14654Show the maximum number of target hardware watchpoints."), _("\
055303e2
AB
14655Specify \"unlimited\" for unlimited hardware watchpoints."),
14656 NULL, show_hardware_watchpoint_limit,
14657 &remote_set_cmdlist,
14658 &remote_show_cmdlist);
14659 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
14660 no_class,
480a3f21
PW
14661 &remote_hw_watchpoint_length_limit, _("\
14662Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14663Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
055303e2
AB
14664Specify \"unlimited\" to allow watchpoints of unlimited size."),
14665 NULL, show_hardware_watchpoint_length_limit,
480a3f21 14666 &remote_set_cmdlist, &remote_show_cmdlist);
055303e2 14667 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14668 &remote_hw_breakpoint_limit, _("\
14669Set the maximum number of target hardware breakpoints."), _("\
14670Show the maximum number of target hardware breakpoints."), _("\
055303e2
AB
14671Specify \"unlimited\" for unlimited hardware breakpoints."),
14672 NULL, show_hardware_breakpoint_limit,
b3f42336 14673 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 14674
1b493192
PA
14675 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14676 &remote_address_size, _("\
4d28ad1e
AC
14677Set the maximum size of the address (in bits) in a memory packet."), _("\
14678Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
14679 NULL,
14680 NULL, /* FIXME: i18n: */
14681 &setlist, &showlist);
c906108c 14682
ca4f7f8b
PA
14683 init_all_packet_configs ();
14684
444abaca 14685 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 14686 "X", "binary-download", 1);
0f71a2f6 14687
444abaca 14688 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 14689 "vCont", "verbose-resume", 0);
506fb367 14690
89be2091
DJ
14691 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14692 "QPassSignals", "pass-signals", 0);
14693
82075af2
JS
14694 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14695 "QCatchSyscalls", "catch-syscalls", 0);
14696
9b224c5e
PA
14697 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14698 "QProgramSignals", "program-signals", 0);
14699
bc3b087d
SDJ
14700 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14701 "QSetWorkingDir", "set-working-dir", 0);
14702
aefd8b33
SDJ
14703 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14704 "QStartupWithShell", "startup-with-shell", 0);
14705
0a2dde4a
SDJ
14706 add_packet_config_cmd (&remote_protocol_packets
14707 [PACKET_QEnvironmentHexEncoded],
14708 "QEnvironmentHexEncoded", "environment-hex-encoded",
14709 0);
14710
14711 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14712 "QEnvironmentReset", "environment-reset",
14713 0);
14714
14715 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14716 "QEnvironmentUnset", "environment-unset",
14717 0);
14718
444abaca 14719 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 14720 "qSymbol", "symbol-lookup", 0);
dc8acb97 14721
444abaca 14722 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 14723 "P", "set-register", 1);
d471ea57 14724
444abaca 14725 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 14726 "p", "fetch-register", 1);
b96ec7ac 14727
444abaca 14728 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 14729 "Z0", "software-breakpoint", 0);
d471ea57 14730
444abaca 14731 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 14732 "Z1", "hardware-breakpoint", 0);
d471ea57 14733
444abaca 14734 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 14735 "Z2", "write-watchpoint", 0);
d471ea57 14736
444abaca 14737 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 14738 "Z3", "read-watchpoint", 0);
d471ea57 14739
444abaca 14740 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 14741 "Z4", "access-watchpoint", 0);
d471ea57 14742
0876f84a
DJ
14743 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14744 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 14745
c78fa86a
GB
14746 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14747 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14748
23181151
DJ
14749 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14750 "qXfer:features:read", "target-features", 0);
14751
cfa9d6d9
DJ
14752 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14753 "qXfer:libraries:read", "library-info", 0);
14754
2268b414
JK
14755 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14756 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14757
fd79ecee
DJ
14758 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14759 "qXfer:memory-map:read", "memory-map", 0);
14760
07e059b5 14761 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
dda83cd7 14762 "qXfer:osdata:read", "osdata", 0);
07e059b5 14763
dc146f7c
VP
14764 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14765 "qXfer:threads:read", "threads", 0);
14766
4aa995e1 14767 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
dda83cd7 14768 "qXfer:siginfo:read", "read-siginfo-object", 0);
4aa995e1
PA
14769
14770 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
dda83cd7 14771 "qXfer:siginfo:write", "write-siginfo-object", 0);
4aa995e1 14772
b3b9301e
PA
14773 add_packet_config_cmd
14774 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14775 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14776
169081d0
TG
14777 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14778 "qXfer:uib:read", "unwind-info-block", 0);
14779
444abaca 14780 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14781 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14782 0);
14783
711e434b
PM
14784 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14785 "qGetTIBAddr", "get-thread-information-block-address",
14786 0);
14787
40ab02ce
MS
14788 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14789 "bc", "reverse-continue", 0);
14790
14791 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14792 "bs", "reverse-step", 0);
14793
be2a5f71
DJ
14794 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14795 "qSupported", "supported-packets", 0);
14796
08388c79
DE
14797 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14798 "qSearch:memory", "search-memory", 0);
14799
bd3eecc3
PA
14800 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14801 "qTStatus", "trace-status", 0);
14802
15a201c8
GB
14803 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14804 "vFile:setfs", "hostio-setfs", 0);
14805
a6b151f1
DJ
14806 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14807 "vFile:open", "hostio-open", 0);
14808
14809 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14810 "vFile:pread", "hostio-pread", 0);
14811
14812 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14813 "vFile:pwrite", "hostio-pwrite", 0);
14814
14815 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14816 "vFile:close", "hostio-close", 0);
14817
14818 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14819 "vFile:unlink", "hostio-unlink", 0);
14820
b9e7b9c3
UW
14821 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14822 "vFile:readlink", "hostio-readlink", 0);
14823
0a93529c
GB
14824 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14825 "vFile:fstat", "hostio-fstat", 0);
14826
2d717e4f
DJ
14827 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14828 "vAttach", "attach", 0);
14829
14830 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14831 "vRun", "run", 0);
14832
a6f3e723
SL
14833 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14834 "QStartNoAckMode", "noack", 0);
14835
82f73884
PA
14836 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14837 "vKill", "kill", 0);
14838
0b16c5cf
PA
14839 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14840 "qAttached", "query-attached", 0);
14841
782b2b07 14842 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14843 "ConditionalTracepoints",
14844 "conditional-tracepoints", 0);
3788aec7
LM
14845
14846 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14847 "ConditionalBreakpoints",
14848 "conditional-breakpoints", 0);
14849
d3ce09f5
SS
14850 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14851 "BreakpointCommands",
14852 "breakpoint-commands", 0);
14853
7a697b8d
SS
14854 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14855 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14856
409873ef
SS
14857 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14858 "TracepointSource", "TracepointSource", 0);
14859
d914c394
SS
14860 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14861 "QAllow", "allow", 0);
14862
0fb4aa4b
PA
14863 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14864 "StaticTracepoints", "static-tracepoints", 0);
14865
1e4d1764
YQ
14866 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14867 "InstallInTrace", "install-in-trace", 0);
14868
0fb4aa4b 14869 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
dda83cd7 14870 "qXfer:statictrace:read", "read-sdata-object", 0);
0fb4aa4b 14871
78d85199
YQ
14872 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14873 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14874
03583c20
UW
14875 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14876 "QDisableRandomization", "disable-randomization", 0);
14877
d1feda86
YQ
14878 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14879 "QAgent", "agent", 0);
14880
f6f899bf
HAQ
14881 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14882 "QTBuffer:size", "trace-buffer-size", 0);
14883
9accd112
MM
14884 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14885 "Qbtrace:off", "disable-btrace", 0);
14886
14887 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14888 "Qbtrace:bts", "enable-btrace-bts", 0);
14889
14890 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14891 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14892
14893 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14894 "qXfer:btrace", "read-btrace", 0);
14895
f4abbc16
MM
14896 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14897 "qXfer:btrace-conf", "read-btrace-conf", 0);
14898
d33501a5
MM
14899 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14900 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14901
73b8c1fd
PA
14902 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14903 "multiprocess-feature", "multiprocess-feature", 0);
14904
f7e6eed5 14905 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
dda83cd7 14906 "swbreak-feature", "swbreak-feature", 0);
f7e6eed5
PA
14907
14908 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
dda83cd7 14909 "hwbreak-feature", "hwbreak-feature", 0);
f7e6eed5 14910
89245bc0
DB
14911 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14912 "fork-event-feature", "fork-event-feature", 0);
14913
14914 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14915 "vfork-event-feature", "vfork-event-feature", 0);
14916
b20a6524
MM
14917 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14918 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14919
750ce8d1
YQ
14920 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14921 "vContSupported", "verbose-resume-supported", 0);
14922
94585166
DB
14923 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14924 "exec-event-feature", "exec-event-feature", 0);
14925
de979965
PA
14926 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14927 "vCtrlC", "ctrl-c", 0);
14928
65706a29
PA
14929 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14930 "QThreadEvents", "thread-events", 0);
14931
f2faf941
PA
14932 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14933 "N stop reply", "no-resumed-stop-reply", 0);
14934
0b736949
DB
14935 /* Assert that we've registered "set remote foo-packet" commands
14936 for all packet configs. */
ca4f7f8b
PA
14937 {
14938 int i;
14939
14940 for (i = 0; i < PACKET_MAX; i++)
14941 {
14942 /* Ideally all configs would have a command associated. Some
14943 still don't though. */
14944 int excepted;
14945
14946 switch (i)
14947 {
14948 case PACKET_QNonStop:
ca4f7f8b
PA
14949 case PACKET_EnableDisableTracepoints_feature:
14950 case PACKET_tracenz_feature:
14951 case PACKET_DisconnectedTracing_feature:
14952 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14953 case PACKET_qCRC:
14954 /* Additions to this list need to be well justified:
14955 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14956 excepted = 1;
14957 break;
14958 default:
14959 excepted = 0;
14960 break;
14961 }
14962
14963 /* This catches both forgetting to add a config command, and
14964 forgetting to remove a packet from the exception list. */
14965 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14966 }
14967 }
14968
37a105a1
DJ
14969 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14970 Z sub-packet has its own set and show commands, but users may
14971 have sets to this variable in their .gdbinit files (or in their
14972 documentation). */
e9e68a56 14973 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c 14974 &remote_Z_packet_detect, _("\
590042fc
PW
14975Set use of remote protocol `Z' packets."), _("\
14976Show use of remote protocol `Z' packets."), _("\
3b64bf98 14977When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14978packets."),
e9e68a56 14979 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14980 show_remote_protocol_Z_packet_cmd,
14981 /* FIXME: i18n: Use of remote protocol
14982 `Z' packets is %s. */
e9e68a56 14983 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14984
0743fc83 14985 add_basic_prefix_cmd ("remote", class_files, _("\
590042fc 14986Manipulate files on the remote system.\n\
a6b151f1 14987Transfer files to and from the remote target system."),
0743fc83
TT
14988 &remote_cmdlist, "remote ",
14989 0 /* allow-unknown */, &cmdlist);
a6b151f1
DJ
14990
14991 add_cmd ("put", class_files, remote_put_command,
14992 _("Copy a local file to the remote system."),
14993 &remote_cmdlist);
14994
14995 add_cmd ("get", class_files, remote_get_command,
14996 _("Copy a remote file to the local system."),
14997 &remote_cmdlist);
14998
14999 add_cmd ("delete", class_files, remote_delete_command,
15000 _("Delete a remote file."),
15001 &remote_cmdlist);
15002
2d717e4f 15003 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 15004 &remote_exec_file_var, _("\
590042fc
PW
15005Set the remote pathname for \"run\"."), _("\
15006Show the remote pathname for \"run\"."), NULL,
94585166
DB
15007 set_remote_exec_file,
15008 show_remote_exec_file,
15009 &remote_set_cmdlist,
15010 &remote_show_cmdlist);
2d717e4f 15011
c1e36e3e
PA
15012 add_setshow_boolean_cmd ("range-stepping", class_run,
15013 &use_range_stepping, _("\
15014Enable or disable range stepping."), _("\
15015Show whether target-assisted range stepping is enabled."), _("\
15016If on, and the target supports it, when stepping a source line, GDB\n\
15017tells the target to step the corresponding range of addresses itself instead\n\
15018of issuing multiple single-steps. This speeds up source level\n\
15019stepping. If off, GDB always issues single-steps, even if range\n\
15020stepping is supported by the target. The default is on."),
15021 set_range_stepping,
15022 show_range_stepping,
15023 &setlist,
15024 &showlist);
15025
ed2b7c17
TT
15026 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
15027Set watchdog timer."), _("\
15028Show watchdog timer."), _("\
15029When non-zero, this timeout is used instead of waiting forever for a target\n\
15030to finish a low-level step or continue operation. If the specified amount\n\
15031of time passes without a response from the target, an error occurs."),
15032 NULL,
15033 show_watchdog,
15034 &setlist, &showlist);
15035
6cc8564b
LM
15036 add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class,
15037 &remote_packet_max_chars, _("\
15038Set the maximum number of characters to display for each remote packet."), _("\
15039Show the maximum number of characters to display for each remote packet."), _("\
15040Specify \"unlimited\" to display all the characters."),
15041 NULL, show_remote_packet_max_chars,
15042 &setdebuglist, &showdebuglist);
15043
449092f6 15044 /* Eventually initialize fileio. See fileio.c */
3f4d92eb 15045 initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist);
c906108c 15046}
This page took 3.873908 seconds and 4 git commands to generate.