Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
42a4f53d 3 Copyright (C) 1988-2019 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
43ff13b4 52#include "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
6240bebf
MS
59#include "gdbcore.h" /* for exec_bfd */
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"
9d6eea31 78#include <unordered_map>
35b1e5cc 79
f6ac5f3d
PA
80/* The remote target. */
81
d9f719f1
PA
82static const char remote_doc[] = N_("\
83Use a remote computer via a serial line, using a gdb-specific protocol.\n\
84Specify the serial device it is connected to\n\
85(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
86
6b8edb51
PA
87#define OPAQUETHREADBYTES 8
88
89/* a 64 bit opaque identifier */
90typedef unsigned char threadref[OPAQUETHREADBYTES];
91
92struct gdb_ext_thread_info;
93struct threads_listing_context;
94typedef int (*rmt_thread_action) (threadref *ref, void *context);
95struct protocol_feature;
96struct packet_reg;
97
98struct stop_reply;
32603266 99typedef std::unique_ptr<stop_reply> stop_reply_up;
6b8edb51
PA
100
101/* Generic configuration support for packets the stub optionally
102 supports. Allows the user to specify the use of the packet as well
103 as allowing GDB to auto-detect support in the remote stub. */
104
105enum packet_support
106 {
107 PACKET_SUPPORT_UNKNOWN = 0,
108 PACKET_ENABLE,
109 PACKET_DISABLE
110 };
111
112/* Analyze a packet's return value and update the packet config
113 accordingly. */
114
115enum packet_result
116{
117 PACKET_ERROR,
118 PACKET_OK,
119 PACKET_UNKNOWN
120};
121
122struct threads_listing_context;
3c69da40
PA
123
124/* Stub vCont actions support.
125
126 Each field is a boolean flag indicating whether the stub reports
127 support for the corresponding action. */
128
129struct vCont_action_support
130{
131 /* vCont;t */
132 bool t = false;
133
134 /* vCont;r */
135 bool r = false;
136
137 /* vCont;s */
138 bool s = false;
139
140 /* vCont;S */
141 bool S = false;
142};
143
405feb71 144/* About this many threadids fit in a packet. */
3c69da40
PA
145
146#define MAXTHREADLISTRESULTS 32
147
148/* Data for the vFile:pread readahead cache. */
149
150struct readahead_cache
151{
152 /* Invalidate the readahead cache. */
153 void invalidate ();
154
155 /* Invalidate the readahead cache if it is holding data for FD. */
156 void invalidate_fd (int fd);
157
158 /* Serve pread from the readahead cache. Returns number of bytes
159 read, or 0 if the request can't be served from the cache. */
160 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
161
162 /* The file descriptor for the file that is being cached. -1 if the
163 cache is invalid. */
164 int fd = -1;
165
166 /* The offset into the file that the cache buffer corresponds
167 to. */
168 ULONGEST offset = 0;
169
170 /* The buffer holding the cache contents. */
171 gdb_byte *buf = nullptr;
172 /* The buffer's size. We try to read as much as fits into a packet
173 at a time. */
174 size_t bufsize = 0;
175
176 /* Cache hit and miss counters. */
177 ULONGEST hit_count = 0;
178 ULONGEST miss_count = 0;
179};
180
181/* Description of the remote protocol for a given architecture. */
182
183struct packet_reg
184{
185 long offset; /* Offset into G packet. */
186 long regnum; /* GDB's internal register number. */
187 LONGEST pnum; /* Remote protocol register number. */
188 int in_g_packet; /* Always part of G packet. */
189 /* long size in bytes; == register_size (target_gdbarch (), regnum);
190 at present. */
191 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
192 at present. */
193};
194
195struct remote_arch_state
196{
197 explicit remote_arch_state (struct gdbarch *gdbarch);
198
199 /* Description of the remote protocol registers. */
200 long sizeof_g_packet;
201
202 /* Description of the remote protocol registers indexed by REGNUM
203 (making an array gdbarch_num_regs in size). */
204 std::unique_ptr<packet_reg[]> regs;
205
206 /* This is the size (in chars) of the first response to the ``g''
207 packet. It is used as a heuristic when determining the maximum
208 size of memory-read and memory-write packets. A target will
209 typically only reserve a buffer large enough to hold the ``g''
210 packet. The size does not include packet overhead (headers and
211 trailers). */
212 long actual_register_packet_size;
213
214 /* This is the maximum size (in chars) of a non read/write packet.
215 It is also used as a cap on the size of read/write packets. */
216 long remote_packet_size;
217};
218
219/* Description of the remote protocol state for the currently
220 connected target. This is per-target state, and independent of the
221 selected architecture. */
222
223class remote_state
224{
225public:
226
227 remote_state ();
228 ~remote_state ();
229
230 /* Get the remote arch state for GDBARCH. */
231 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
232
233public: /* data */
234
235 /* A buffer to use for incoming packets, and its current size. The
236 buffer is grown dynamically for larger incoming packets.
237 Outgoing packets may also be constructed in this buffer.
8d64371b 238 The size of the buffer is always at least REMOTE_PACKET_SIZE;
3c69da40
PA
239 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
240 packets. */
8d64371b 241 gdb::char_vector buf;
3c69da40
PA
242
243 /* True if we're going through initial connection setup (finding out
244 about the remote side's threads, relocating symbols, etc.). */
245 bool starting_up = false;
246
247 /* If we negotiated packet size explicitly (and thus can bypass
248 heuristics for the largest packet size that will not overflow
249 a buffer in the stub), this will be set to that packet size.
250 Otherwise zero, meaning to use the guessed size. */
251 long explicit_packet_size = 0;
252
253 /* remote_wait is normally called when the target is running and
254 waits for a stop reply packet. But sometimes we need to call it
255 when the target is already stopped. We can send a "?" packet
256 and have remote_wait read the response. Or, if we already have
257 the response, we can stash it in BUF and tell remote_wait to
258 skip calling getpkt. This flag is set when BUF contains a
259 stop reply packet and the target is not waiting. */
260 int cached_wait_status = 0;
261
262 /* True, if in no ack mode. That is, neither GDB nor the stub will
263 expect acks from each other. The connection is assumed to be
264 reliable. */
265 bool noack_mode = false;
266
267 /* True if we're connected in extended remote mode. */
268 bool extended = false;
269
270 /* True if we resumed the target and we're waiting for the target to
271 stop. In the mean time, we can't start another command/query.
272 The remote server wouldn't be ready to process it, so we'd
273 timeout waiting for a reply that would never come and eventually
274 we'd close the connection. This can happen in asynchronous mode
275 because we allow GDB commands while the target is running. */
276 bool waiting_for_stop_reply = false;
277
278 /* The status of the stub support for the various vCont actions. */
279 vCont_action_support supports_vCont;
280
281 /* True if the user has pressed Ctrl-C, but the target hasn't
282 responded to that. */
283 bool ctrlc_pending_p = false;
284
285 /* True if we saw a Ctrl-C while reading or writing from/to the
286 remote descriptor. At that point it is not safe to send a remote
287 interrupt packet, so we instead remember we saw the Ctrl-C and
288 process it once we're done with sending/receiving the current
289 packet, which should be shortly. If however that takes too long,
290 and the user presses Ctrl-C again, we offer to disconnect. */
291 bool got_ctrlc_during_io = false;
292
293 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
294 remote_open knows that we don't have a file open when the program
295 starts. */
296 struct serial *remote_desc = nullptr;
297
298 /* These are the threads which we last sent to the remote system. The
299 TID member will be -1 for all or -2 for not sent yet. */
300 ptid_t general_thread = null_ptid;
301 ptid_t continue_thread = null_ptid;
302
303 /* This is the traceframe which we last selected on the remote system.
304 It will be -1 if no traceframe is selected. */
305 int remote_traceframe_number = -1;
306
307 char *last_pass_packet = nullptr;
308
309 /* The last QProgramSignals packet sent to the target. We bypass
310 sending a new program signals list down to the target if the new
311 packet is exactly the same as the last we sent. IOW, we only let
312 the target know about program signals list changes. */
313 char *last_program_signals_packet = nullptr;
314
315 gdb_signal last_sent_signal = GDB_SIGNAL_0;
316
317 bool last_sent_step = false;
318
319 /* The execution direction of the last resume we got. */
320 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
321
322 char *finished_object = nullptr;
323 char *finished_annex = nullptr;
324 ULONGEST finished_offset = 0;
325
326 /* Should we try the 'ThreadInfo' query packet?
327
328 This variable (NOT available to the user: auto-detect only!)
329 determines whether GDB will use the new, simpler "ThreadInfo"
330 query or the older, more complex syntax for thread queries.
331 This is an auto-detect variable (set to true at each connect,
332 and set to false when the target fails to recognize it). */
333 bool use_threadinfo_query = false;
334 bool use_threadextra_query = false;
335
336 threadref echo_nextthread {};
337 threadref nextthread {};
338 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
339
340 /* The state of remote notification. */
341 struct remote_notif_state *notif_state = nullptr;
342
343 /* The branch trace configuration. */
344 struct btrace_config btrace_config {};
345
346 /* The argument to the last "vFile:setfs:" packet we sent, used
347 to avoid sending repeated unnecessary "vFile:setfs:" packets.
348 Initialized to -1 to indicate that no "vFile:setfs:" packet
349 has yet been sent. */
350 int fs_pid = -1;
351
352 /* A readahead cache for vFile:pread. Often, reading a binary
353 involves a sequence of small reads. E.g., when parsing an ELF
354 file. A readahead cache helps mostly the case of remote
355 debugging on a connection with higher latency, due to the
356 request/reply nature of the RSP. We only cache data for a single
357 file descriptor at a time. */
358 struct readahead_cache readahead_cache;
359
360 /* The list of already fetched and acknowledged stop events. This
361 queue is used for notification Stop, and other notifications
362 don't need queue for their events, because the notification
363 events of Stop can't be consumed immediately, so that events
364 should be queued first, and be consumed by remote_wait_{ns,as}
365 one per time. Other notifications can consume their events
366 immediately, so queue is not needed for them. */
953edf2b 367 std::vector<stop_reply_up> stop_reply_queue;
3c69da40
PA
368
369 /* Asynchronous signal handle registered as event loop source for
370 when we have pending events ready to be passed to the core. */
371 struct async_event_handler *remote_async_inferior_event_token = nullptr;
372
373 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
374 ``forever'' still use the normal timeout mechanism. This is
375 currently used by the ASYNC code to guarentee that target reads
376 during the initial connect always time-out. Once getpkt has been
377 modified to return a timeout indication and, in turn
378 remote_wait()/wait_for_inferior() have gained a timeout parameter
379 this can go away. */
380 int wait_forever_enabled_p = 1;
381
382private:
383 /* Mapping of remote protocol data for each gdbarch. Usually there
384 is only one entry here, though we may see more with stubs that
385 support multi-process. */
386 std::unordered_map<struct gdbarch *, remote_arch_state>
387 m_arch_states;
388};
6b8edb51 389
d9f719f1
PA
390static const target_info remote_target_info = {
391 "remote",
392 N_("Remote serial target in gdb-specific protocol"),
393 remote_doc
394};
395
3b3dac9b 396class remote_target : public process_stratum_target
f6ac5f3d
PA
397{
398public:
3b3dac9b 399 remote_target () = default;
6b8edb51 400 ~remote_target () override;
f6ac5f3d 401
d9f719f1
PA
402 const target_info &info () const override
403 { return remote_target_info; }
f6ac5f3d
PA
404
405 thread_control_capabilities get_thread_control_capabilities () override
406 { return tc_schedlock; }
407
d9f719f1
PA
408 /* Open a remote connection. */
409 static void open (const char *, int);
410
f6ac5f3d
PA
411 void close () override;
412
413 void detach (inferior *, int) override;
414 void disconnect (const char *, int) override;
415
416 void commit_resume () override;
417 void resume (ptid_t, int, enum gdb_signal) override;
418 ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
419
420 void fetch_registers (struct regcache *, int) override;
421 void store_registers (struct regcache *, int) override;
422 void prepare_to_store (struct regcache *) override;
423
424 void files_info () override;
425
426 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
427
428 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
429 enum remove_bp_reason) override;
430
431
57810aa7
PA
432 bool stopped_by_sw_breakpoint () override;
433 bool supports_stopped_by_sw_breakpoint () override;
f6ac5f3d 434
57810aa7 435 bool stopped_by_hw_breakpoint () override;
f6ac5f3d 436
57810aa7 437 bool supports_stopped_by_hw_breakpoint () override;
f6ac5f3d 438
57810aa7 439 bool stopped_by_watchpoint () override;
f6ac5f3d 440
57810aa7 441 bool stopped_data_address (CORE_ADDR *) override;
f6ac5f3d 442
57810aa7 443 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
f6ac5f3d
PA
444
445 int can_use_hw_breakpoint (enum bptype, int, int) override;
446
447 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
448
449 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
450
451 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
452
453 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
454 struct expression *) override;
455
456 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
457 struct expression *) override;
458
459 void kill () override;
460
461 void load (const char *, int) override;
462
463 void mourn_inferior () override;
464
adc6a863 465 void pass_signals (gdb::array_view<const unsigned char>) override;
f6ac5f3d
PA
466
467 int set_syscall_catchpoint (int, bool, int,
468 gdb::array_view<const int>) override;
469
adc6a863 470 void program_signals (gdb::array_view<const unsigned char>) override;
f6ac5f3d 471
57810aa7 472 bool thread_alive (ptid_t ptid) override;
f6ac5f3d
PA
473
474 const char *thread_name (struct thread_info *) override;
475
476 void update_thread_list () override;
477
a068643d 478 std::string pid_to_str (ptid_t) override;
f6ac5f3d
PA
479
480 const char *extra_thread_info (struct thread_info *) override;
481
482 ptid_t get_ada_task_ptid (long lwp, long thread) override;
483
484 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
485 int handle_len,
486 inferior *inf) override;
487
3d6c6204
KB
488 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp)
489 override;
490
f6ac5f3d
PA
491 void stop (ptid_t) override;
492
493 void interrupt () override;
494
495 void pass_ctrlc () override;
496
497 enum target_xfer_status xfer_partial (enum target_object object,
498 const char *annex,
499 gdb_byte *readbuf,
500 const gdb_byte *writebuf,
501 ULONGEST offset, ULONGEST len,
502 ULONGEST *xfered_len) override;
503
504 ULONGEST get_memory_xfer_limit () override;
505
506 void rcmd (const char *command, struct ui_file *output) override;
507
508 char *pid_to_exec_file (int pid) override;
509
510 void log_command (const char *cmd) override
511 {
512 serial_log_command (this, cmd);
513 }
514
515 CORE_ADDR get_thread_local_address (ptid_t ptid,
516 CORE_ADDR load_module_addr,
517 CORE_ADDR offset) override;
518
57810aa7 519 bool can_execute_reverse () override;
f6ac5f3d
PA
520
521 std::vector<mem_region> memory_map () override;
522
523 void flash_erase (ULONGEST address, LONGEST length) override;
524
525 void flash_done () override;
526
527 const struct target_desc *read_description () override;
528
529 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
530 const gdb_byte *pattern, ULONGEST pattern_len,
531 CORE_ADDR *found_addrp) override;
532
57810aa7 533 bool can_async_p () override;
f6ac5f3d 534
57810aa7 535 bool is_async_p () override;
f6ac5f3d
PA
536
537 void async (int) override;
538
539 void thread_events (int) override;
540
541 int can_do_single_step () override;
542
543 void terminal_inferior () override;
544
545 void terminal_ours () override;
546
57810aa7 547 bool supports_non_stop () override;
f6ac5f3d 548
57810aa7 549 bool supports_multi_process () override;
f6ac5f3d 550
57810aa7 551 bool supports_disable_randomization () override;
f6ac5f3d 552
57810aa7 553 bool filesystem_is_local () override;
f6ac5f3d
PA
554
555
556 int fileio_open (struct inferior *inf, const char *filename,
557 int flags, int mode, int warn_if_slow,
558 int *target_errno) override;
559
560 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
561 ULONGEST offset, int *target_errno) override;
562
563 int fileio_pread (int fd, gdb_byte *read_buf, int len,
564 ULONGEST offset, int *target_errno) override;
565
566 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
567
568 int fileio_close (int fd, int *target_errno) override;
569
570 int fileio_unlink (struct inferior *inf,
571 const char *filename,
572 int *target_errno) override;
573
574 gdb::optional<std::string>
575 fileio_readlink (struct inferior *inf,
576 const char *filename,
577 int *target_errno) override;
578
57810aa7 579 bool supports_enable_disable_tracepoint () override;
f6ac5f3d 580
57810aa7 581 bool supports_string_tracing () override;
f6ac5f3d 582
57810aa7 583 bool supports_evaluation_of_breakpoint_conditions () override;
f6ac5f3d 584
57810aa7 585 bool can_run_breakpoint_commands () override;
f6ac5f3d
PA
586
587 void trace_init () override;
588
589 void download_tracepoint (struct bp_location *location) override;
590
57810aa7 591 bool can_download_tracepoint () override;
f6ac5f3d
PA
592
593 void download_trace_state_variable (const trace_state_variable &tsv) override;
594
595 void enable_tracepoint (struct bp_location *location) override;
596
597 void disable_tracepoint (struct bp_location *location) override;
598
599 void trace_set_readonly_regions () override;
600
601 void trace_start () override;
602
603 int get_trace_status (struct trace_status *ts) override;
604
605 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
606 override;
607
608 void trace_stop () override;
609
610 int trace_find (enum trace_find_type type, int num,
611 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
612
57810aa7 613 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
f6ac5f3d
PA
614
615 int save_trace_data (const char *filename) override;
616
617 int upload_tracepoints (struct uploaded_tp **utpp) override;
618
619 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
620
621 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
622
623 int get_min_fast_tracepoint_insn_len () override;
624
625 void set_disconnected_tracing (int val) override;
626
627 void set_circular_trace_buffer (int val) override;
628
629 void set_trace_buffer_size (LONGEST val) override;
630
57810aa7
PA
631 bool set_trace_notes (const char *user, const char *notes,
632 const char *stopnotes) override;
f6ac5f3d
PA
633
634 int core_of_thread (ptid_t ptid) override;
635
636 int verify_memory (const gdb_byte *data,
637 CORE_ADDR memaddr, ULONGEST size) override;
638
639
57810aa7 640 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
f6ac5f3d
PA
641
642 void set_permissions () override;
643
644 bool static_tracepoint_marker_at (CORE_ADDR,
645 struct static_tracepoint_marker *marker)
646 override;
647
648 std::vector<static_tracepoint_marker>
649 static_tracepoint_markers_by_strid (const char *id) override;
650
651 traceframe_info_up traceframe_info () override;
652
57810aa7
PA
653 bool use_agent (bool use) override;
654 bool can_use_agent () override;
f6ac5f3d
PA
655
656 struct btrace_target_info *enable_btrace (ptid_t ptid,
657 const struct btrace_config *conf) override;
658
659 void disable_btrace (struct btrace_target_info *tinfo) override;
660
661 void teardown_btrace (struct btrace_target_info *tinfo) override;
662
663 enum btrace_error read_btrace (struct btrace_data *data,
664 struct btrace_target_info *btinfo,
665 enum btrace_read_type type) override;
666
667 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
57810aa7 668 bool augmented_libraries_svr4_read () override;
f6ac5f3d 669 int follow_fork (int, int) override;
4ca51187 670 void follow_exec (struct inferior *, const char *) override;
f6ac5f3d
PA
671 int insert_fork_catchpoint (int) override;
672 int remove_fork_catchpoint (int) override;
673 int insert_vfork_catchpoint (int) override;
674 int remove_vfork_catchpoint (int) override;
675 int insert_exec_catchpoint (int) override;
676 int remove_exec_catchpoint (int) override;
677 enum exec_direction_kind execution_direction () override;
678
6b8edb51
PA
679public: /* Remote specific methods. */
680
681 void remote_download_command_source (int num, ULONGEST addr,
682 struct command_line *cmds);
683
684 void remote_file_put (const char *local_file, const char *remote_file,
685 int from_tty);
686 void remote_file_get (const char *remote_file, const char *local_file,
687 int from_tty);
688 void remote_file_delete (const char *remote_file, int from_tty);
689
690 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
691 ULONGEST offset, int *remote_errno);
692 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
693 ULONGEST offset, int *remote_errno);
694 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
695 ULONGEST offset, int *remote_errno);
696
697 int remote_hostio_send_command (int command_bytes, int which_packet,
698 int *remote_errno, char **attachment,
699 int *attachment_len);
700 int remote_hostio_set_filesystem (struct inferior *inf,
701 int *remote_errno);
702 /* We should get rid of this and use fileio_open directly. */
703 int remote_hostio_open (struct inferior *inf, const char *filename,
704 int flags, int mode, int warn_if_slow,
705 int *remote_errno);
706 int remote_hostio_close (int fd, int *remote_errno);
707
708 int remote_hostio_unlink (inferior *inf, const char *filename,
709 int *remote_errno);
710
711 struct remote_state *get_remote_state ();
712
713 long get_remote_packet_size (void);
714 long get_memory_packet_size (struct memory_packet_config *config);
715
716 long get_memory_write_packet_size ();
717 long get_memory_read_packet_size ();
718
719 char *append_pending_thread_resumptions (char *p, char *endp,
720 ptid_t ptid);
d9f719f1 721 static void open_1 (const char *name, int from_tty, int extended_p);
f6ac5f3d 722 void start_remote (int from_tty, int extended_p);
00431a78 723 void remote_detach_1 (struct inferior *inf, int from_tty);
6b8edb51
PA
724
725 char *append_resumption (char *p, char *endp,
726 ptid_t ptid, int step, gdb_signal siggnal);
727 int remote_resume_with_vcont (ptid_t ptid, int step,
728 gdb_signal siggnal);
729
730 void add_current_inferior_and_thread (char *wait_status);
731
732 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
733 int options);
734 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
735 int options);
736
737 ptid_t process_stop_reply (struct stop_reply *stop_reply,
738 target_waitstatus *status);
739
740 void remote_notice_new_inferior (ptid_t currthread, int executing);
741
742 void process_initial_stop_replies (int from_tty);
743
00431a78 744 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
6b8edb51
PA
745
746 void btrace_sync_conf (const btrace_config *conf);
747
748 void remote_btrace_maybe_reopen ();
749
750 void remove_new_fork_children (threads_listing_context *context);
751 void kill_new_fork_children (int pid);
752 void discard_pending_stop_replies (struct inferior *inf);
753 int stop_reply_queue_length ();
754
755 void check_pending_events_prevent_wildcard_vcont
756 (int *may_global_wildcard_vcont);
757
758 void discard_pending_stop_replies_in_queue ();
759 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
760 struct stop_reply *queued_stop_reply (ptid_t ptid);
761 int peek_stop_reply (ptid_t ptid);
bb277751 762 void remote_parse_stop_reply (const char *buf, stop_reply *event);
6b8edb51
PA
763
764 void remote_stop_ns (ptid_t ptid);
765 void remote_interrupt_as ();
766 void remote_interrupt_ns ();
767
768 char *remote_get_noisy_reply ();
769 int remote_query_attached (int pid);
9ab8741a 770 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached,
6b8edb51
PA
771 int try_open_exec);
772
773 ptid_t remote_current_thread (ptid_t oldpid);
774 ptid_t get_current_thread (char *wait_status);
775
776 void set_thread (ptid_t ptid, int gen);
777 void set_general_thread (ptid_t ptid);
778 void set_continue_thread (ptid_t ptid);
779 void set_general_process ();
780
781 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
782
783 int remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
784 gdb_ext_thread_info *info);
785 int remote_get_threadinfo (threadref *threadid, int fieldset,
786 gdb_ext_thread_info *info);
787
788 int parse_threadlist_response (char *pkt, int result_limit,
789 threadref *original_echo,
790 threadref *resultlist,
791 int *doneflag);
792 int remote_get_threadlist (int startflag, threadref *nextthread,
793 int result_limit, int *done, int *result_count,
794 threadref *threadlist);
795
796 int remote_threadlist_iterator (rmt_thread_action stepfunction,
797 void *context, int looplimit);
798
799 int remote_get_threads_with_ql (threads_listing_context *context);
800 int remote_get_threads_with_qxfer (threads_listing_context *context);
801 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
802
803 void extended_remote_restart ();
804
805 void get_offsets ();
806
807 void remote_check_symbols ();
808
809 void remote_supported_packet (const struct protocol_feature *feature,
810 enum packet_support support,
811 const char *argument);
812
813 void remote_query_supported ();
814
815 void remote_packet_size (const protocol_feature *feature,
816 packet_support support, const char *value);
817
818 void remote_serial_quit_handler ();
819
820 void remote_detach_pid (int pid);
821
822 void remote_vcont_probe ();
823
824 void remote_resume_with_hc (ptid_t ptid, int step,
825 gdb_signal siggnal);
826
827 void send_interrupt_sequence ();
828 void interrupt_query ();
829
830 void remote_notif_get_pending_events (notif_client *nc);
831
832 int fetch_register_using_p (struct regcache *regcache,
833 packet_reg *reg);
834 int send_g_packet ();
835 void process_g_packet (struct regcache *regcache);
836 void fetch_registers_using_g (struct regcache *regcache);
837 int store_register_using_P (const struct regcache *regcache,
838 packet_reg *reg);
839 void store_registers_using_G (const struct regcache *regcache);
840
841 void set_remote_traceframe ();
842
843 void check_binary_download (CORE_ADDR addr);
844
845 target_xfer_status remote_write_bytes_aux (const char *header,
846 CORE_ADDR memaddr,
847 const gdb_byte *myaddr,
848 ULONGEST len_units,
849 int unit_size,
850 ULONGEST *xfered_len_units,
851 char packet_format,
852 int use_length);
853
854 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
855 const gdb_byte *myaddr, ULONGEST len,
856 int unit_size, ULONGEST *xfered_len);
857
858 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
859 ULONGEST len_units,
860 int unit_size, ULONGEST *xfered_len_units);
861
862 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
863 ULONGEST memaddr,
864 ULONGEST len,
865 int unit_size,
866 ULONGEST *xfered_len);
867
868 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
869 gdb_byte *myaddr, ULONGEST len,
870 int unit_size,
871 ULONGEST *xfered_len);
872
873 packet_result remote_send_printf (const char *format, ...)
874 ATTRIBUTE_PRINTF (2, 3);
875
876 target_xfer_status remote_flash_write (ULONGEST address,
877 ULONGEST length, ULONGEST *xfered_len,
878 const gdb_byte *data);
879
880 int readchar (int timeout);
881
882 void remote_serial_write (const char *str, int len);
883
884 int putpkt (const char *buf);
885 int putpkt_binary (const char *buf, int cnt);
886
8d64371b
TT
887 int putpkt (const gdb::char_vector &buf)
888 {
889 return putpkt (buf.data ());
890 }
891
6b8edb51 892 void skip_frame ();
8d64371b
TT
893 long read_frame (gdb::char_vector *buf_p);
894 void getpkt (gdb::char_vector *buf, int forever);
895 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever,
6b8edb51 896 int expecting_notif, int *is_notif);
8d64371b
TT
897 int getpkt_sane (gdb::char_vector *buf, int forever);
898 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
6b8edb51
PA
899 int *is_notif);
900 int remote_vkill (int pid);
901 void remote_kill_k ();
902
903 void extended_remote_disable_randomization (int val);
904 int extended_remote_run (const std::string &args);
905
906 void send_environment_packet (const char *action,
907 const char *packet,
908 const char *value);
909
910 void extended_remote_environment_support ();
3c69da40 911 void extended_remote_set_inferior_cwd ();
80152258 912
3c69da40
PA
913 target_xfer_status remote_write_qxfer (const char *object_name,
914 const char *annex,
915 const gdb_byte *writebuf,
916 ULONGEST offset, LONGEST len,
917 ULONGEST *xfered_len,
918 struct packet_config *packet);
43c3a0e4 919
3c69da40
PA
920 target_xfer_status remote_read_qxfer (const char *object_name,
921 const char *annex,
922 gdb_byte *readbuf, ULONGEST offset,
923 LONGEST len,
924 ULONGEST *xfered_len,
925 struct packet_config *packet);
43c3a0e4 926
3c69da40 927 void push_stop_reply (struct stop_reply *new_event);
43c3a0e4 928
3c69da40 929 bool vcont_r_supported ();
43c3a0e4 930
3c69da40 931 void packet_command (const char *args, int from_tty);
43c3a0e4 932
3c69da40 933private: /* data fields */
43c3a0e4 934
3c69da40
PA
935 /* The remote state. Don't reference this directly. Use the
936 get_remote_state method instead. */
937 remote_state m_remote_state;
43c3a0e4
PA
938};
939
3c69da40
PA
940static const target_info extended_remote_target_info = {
941 "extended-remote",
942 N_("Extended remote serial target in gdb-specific protocol"),
943 remote_doc
944};
ea9c271d 945
3c69da40
PA
946/* Set up the extended remote target by extending the standard remote
947 target and adding to it. */
948
949class extended_remote_target final : public remote_target
ea9c271d 950{
9d6eea31 951public:
3c69da40
PA
952 const target_info &info () const override
953 { return extended_remote_target_info; }
9d6eea31 954
3c69da40
PA
955 /* Open an extended-remote connection. */
956 static void open (const char *, int);
de44f5a7 957
3c69da40
PA
958 bool can_create_inferior () override { return true; }
959 void create_inferior (const char *, const std::string &,
960 char **, int) override;
9d6eea31 961
3c69da40 962 void detach (inferior *, int) override;
9d6eea31 963
3c69da40
PA
964 bool can_attach () override { return true; }
965 void attach (const char *, int) override;
be2a5f71 966
3c69da40
PA
967 void post_attach (int) override;
968 bool supports_disable_randomization () override;
969};
1e51243a 970
3c69da40 971/* Per-program-space data key. */
7b4a314f
TT
972static const struct program_space_key<char, gdb::xfree_deleter<char>>
973 remote_pspace_data;
2d717e4f 974
3c69da40
PA
975/* The variable registered as the control variable used by the
976 remote exec-file commands. While the remote exec-file setting is
977 per-program-space, the set/show machinery uses this as the
978 location of the remote exec-file value. */
979static char *remote_exec_file_var;
a6f3e723 980
3c69da40
PA
981/* The size to align memory write packets, when practical. The protocol
982 does not guarantee any alignment, and gdb will generate short
983 writes and unaligned writes, but even as a best-effort attempt this
984 can improve bulk transfers. For instance, if a write is misaligned
985 relative to the target's data bus, the stub may need to make an extra
986 round trip fetching data from the target. This doesn't make a
987 huge difference, but it's easy to do, so we try to be helpful.
82f73884 988
3c69da40
PA
989 The alignment chosen is arbitrary; usually data bus width is
990 important here, not the possibly larger cache line size. */
991enum { REMOTE_ALIGN_WRITES = 16 };
82f73884 992
3c69da40 993/* Prototypes for local functions. */
74531fed 994
3c69da40 995static int hexnumlen (ULONGEST num);
782b2b07 996
3c69da40 997static int stubhex (int ch);
5d93a237 998
3c69da40 999static int hexnumstr (char *, ULONGEST);
048094ac 1000
3c69da40 1001static int hexnumnstr (char *, ULONGEST, int);
47f8a51d 1002
3c69da40 1003static CORE_ADDR remote_address_masked (CORE_ADDR);
262e1174 1004
3c69da40 1005static void print_packet (const char *);
747dc59d 1006
3c69da40 1007static int stub_unpack_int (char *buff, int fieldlength);
5e4a05c4 1008
3c69da40 1009struct packet_config;
b73be471 1010
3c69da40 1011static void show_packet_config_cmd (struct packet_config *config);
280ceea3 1012
3c69da40
PA
1013static void show_remote_protocol_packet_cmd (struct ui_file *file,
1014 int from_tty,
1015 struct cmd_list_element *c,
1016 const char *value);
8e88304f 1017
3c69da40 1018static ptid_t read_ptid (const char *buf, const char **obuf);
3a00c802 1019
3c69da40 1020static void remote_async_inferior_event_handler (gdb_client_data);
b80fafe3 1021
eefce37f 1022static bool remote_read_description_p (struct target_ops *target);
88b496c3 1023
05be00a8 1024static void remote_console_output (const char *msg);
5965e028 1025
3c69da40 1026static void remote_btrace_reset (remote_state *rs);
f4abbc16 1027
3c69da40 1028static void remote_unpush_and_throw (void);
15a201c8 1029
3c69da40 1030/* For "remote". */
80152258 1031
3c69da40 1032static struct cmd_list_element *remote_cmdlist;
9d6eea31 1033
3c69da40 1034/* For "set remote" and "show remote". */
6b8edb51 1035
3c69da40
PA
1036static struct cmd_list_element *remote_set_cmdlist;
1037static struct cmd_list_element *remote_show_cmdlist;
6b8edb51 1038
3c69da40 1039/* Controls whether GDB is willing to use range stepping. */
6b8edb51 1040
491144b5 1041static bool use_range_stepping = true;
3c69da40
PA
1042
1043/* The max number of chars in debug output. The rest of chars are
1044 omitted. */
1045
1046#define REMOTE_DEBUG_MAX_CHAR 512
ea9c271d 1047
7aabaf9d
SM
1048/* Private data that we'll store in (struct thread_info)->priv. */
1049struct remote_thread_info : public private_thread_info
dc146f7c 1050{
7aabaf9d
SM
1051 std::string extra;
1052 std::string name;
1053 int core = -1;
799a2abe 1054
f6327dcb
KB
1055 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1056 sequence of bytes. */
7aabaf9d 1057 gdb::byte_vector thread_handle;
f6327dcb 1058
799a2abe 1059 /* Whether the target stopped for a breakpoint/watchpoint. */
7aabaf9d 1060 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
799a2abe
PA
1061
1062 /* This is set to the data address of the access causing the target
1063 to stop for a watchpoint. */
7aabaf9d 1064 CORE_ADDR watch_data_address = 0;
85ad3aaf
PA
1065
1066 /* Fields used by the vCont action coalescing implemented in
1067 remote_resume / remote_commit_resume. remote_resume stores each
1068 thread's last resume request in these fields, so that a later
1069 remote_commit_resume knows which is the proper action for this
1070 thread to include in the vCont packet. */
1071
1072 /* True if the last target_resume call for this thread was a step
1073 request, false if a continue request. */
7aabaf9d 1074 int last_resume_step = 0;
85ad3aaf
PA
1075
1076 /* The signal specified in the last target_resume call for this
1077 thread. */
7aabaf9d 1078 gdb_signal last_resume_sig = GDB_SIGNAL_0;
85ad3aaf
PA
1079
1080 /* Whether this thread was already vCont-resumed on the remote
1081 side. */
7aabaf9d 1082 int vcont_resumed = 0;
dc146f7c
VP
1083};
1084
de44f5a7 1085remote_state::remote_state ()
8d64371b 1086 : buf (400)
de44f5a7 1087{
de44f5a7
PA
1088}
1089
1090remote_state::~remote_state ()
1091{
1092 xfree (this->last_pass_packet);
1093 xfree (this->last_program_signals_packet);
de44f5a7
PA
1094 xfree (this->finished_object);
1095 xfree (this->finished_annex);
cf792862
TT
1096}
1097
35b1e5cc
SS
1098/* Utility: generate error from an incoming stub packet. */
1099static void
1100trace_error (char *buf)
1101{
1102 if (*buf++ != 'E')
1103 return; /* not an error msg */
1104 switch (*buf)
1105 {
1106 case '1': /* malformed packet error */
1107 if (*++buf == '0') /* general case: */
1108 error (_("remote.c: error in outgoing packet."));
1109 else
1110 error (_("remote.c: error in outgoing packet at field #%ld."),
1111 strtol (buf, NULL, 16));
35b1e5cc
SS
1112 default:
1113 error (_("Target returns error code '%s'."), buf);
1114 }
1115}
1116
1117/* Utility: wait for reply from stub, while accepting "O" packets. */
b6bb3468 1118
6b8edb51
PA
1119char *
1120remote_target::remote_get_noisy_reply ()
35b1e5cc 1121{
b6bb3468
PA
1122 struct remote_state *rs = get_remote_state ();
1123
35b1e5cc
SS
1124 do /* Loop on reply from remote stub. */
1125 {
1126 char *buf;
a744cf53 1127
0df8b418 1128 QUIT; /* Allow user to bail out with ^C. */
8d64371b
TT
1129 getpkt (&rs->buf, 0);
1130 buf = rs->buf.data ();
ad91cd99 1131 if (buf[0] == 'E')
35b1e5cc 1132 trace_error (buf);
61012eef 1133 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
1134 {
1135 ULONGEST ul;
1136 CORE_ADDR from, to, org_to;
256642e8 1137 const char *p, *pp;
dde08ee1 1138 int adjusted_size = 0;
7556d4a4 1139 int relocated = 0;
dde08ee1
PA
1140
1141 p = buf + strlen ("qRelocInsn:");
1142 pp = unpack_varlen_hex (p, &ul);
1143 if (*pp != ';')
cb91c06a 1144 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
1145 from = ul;
1146
1147 p = pp + 1;
a9cbf802 1148 unpack_varlen_hex (p, &ul);
dde08ee1
PA
1149 to = ul;
1150
1151 org_to = to;
1152
a70b8144 1153 try
dde08ee1 1154 {
f5656ead 1155 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 1156 relocated = 1;
dde08ee1 1157 }
230d2906 1158 catch (const gdb_exception &ex)
7556d4a4
PA
1159 {
1160 if (ex.error == MEMORY_ERROR)
1161 {
1162 /* Propagate memory errors silently back to the
1163 target. The stub may have limited the range of
1164 addresses we can write to, for example. */
1165 }
1166 else
1167 {
1168 /* Something unexpectedly bad happened. Be verbose
1169 so we can tell what, and propagate the error back
1170 to the stub, so it doesn't get stuck waiting for
1171 a response. */
1172 exception_fprintf (gdb_stderr, ex,
1173 _("warning: relocating instruction: "));
1174 }
1175 putpkt ("E01");
1176 }
1177
1178 if (relocated)
dde08ee1
PA
1179 {
1180 adjusted_size = to - org_to;
1181
8d64371b 1182 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
1183 putpkt (buf);
1184 }
dde08ee1 1185 }
ad91cd99 1186 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
1187 remote_console_output (buf + 1); /* 'O' message from stub */
1188 else
0df8b418 1189 return buf; /* Here's the actual reply. */
35b1e5cc
SS
1190 }
1191 while (1);
1192}
3c3bea1c 1193
9d6eea31
PA
1194struct remote_arch_state *
1195remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
d01949b6 1196{
43c3a0e4
PA
1197 remote_arch_state *rsa;
1198
1199 auto it = this->m_arch_states.find (gdbarch);
1200 if (it == this->m_arch_states.end ())
9d6eea31 1201 {
43c3a0e4
PA
1202 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1203 std::forward_as_tuple (gdbarch),
1204 std::forward_as_tuple (gdbarch));
1205 rsa = &p.first->second;
9d6eea31
PA
1206
1207 /* Make sure that the packet buffer is plenty big enough for
1208 this architecture. */
8d64371b
TT
1209 if (this->buf.size () < rsa->remote_packet_size)
1210 this->buf.resize (2 * rsa->remote_packet_size);
9d6eea31 1211 }
43c3a0e4
PA
1212 else
1213 rsa = &it->second;
1214
1215 return rsa;
d01949b6
AC
1216}
1217
0b83947e
DJ
1218/* Fetch the global remote target state. */
1219
6b8edb51
PA
1220remote_state *
1221remote_target::get_remote_state ()
0b83947e
DJ
1222{
1223 /* Make sure that the remote architecture state has been
1224 initialized, because doing so might reallocate rs->buf. Any
1225 function which calls getpkt also needs to be mindful of changes
1226 to rs->buf, but this call limits the number of places which run
1227 into trouble. */
3c69da40 1228 m_remote_state.get_remote_arch_state (target_gdbarch ());
0b83947e 1229
3c69da40 1230 return &m_remote_state;
0b83947e
DJ
1231}
1232
94585166
DB
1233/* Fetch the remote exec-file from the current program space. */
1234
1235static const char *
1236get_remote_exec_file (void)
1237{
1238 char *remote_exec_file;
1239
7b4a314f 1240 remote_exec_file = remote_pspace_data.get (current_program_space);
94585166
DB
1241 if (remote_exec_file == NULL)
1242 return "";
1243
1244 return remote_exec_file;
1245}
1246
1247/* Set the remote exec file for PSPACE. */
1248
1249static void
1250set_pspace_remote_exec_file (struct program_space *pspace,
7b4a314f 1251 const char *remote_exec_file)
94585166 1252{
7b4a314f 1253 char *old_file = remote_pspace_data.get (pspace);
94585166
DB
1254
1255 xfree (old_file);
7b4a314f 1256 remote_pspace_data.set (pspace, xstrdup (remote_exec_file));
94585166
DB
1257}
1258
1259/* The "set/show remote exec-file" set command hook. */
1260
1261static void
eb4c3f4a 1262set_remote_exec_file (const char *ignored, int from_tty,
94585166
DB
1263 struct cmd_list_element *c)
1264{
1265 gdb_assert (remote_exec_file_var != NULL);
1266 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1267}
1268
1269/* The "set/show remote exec-file" show command hook. */
1270
1271static void
1272show_remote_exec_file (struct ui_file *file, int from_tty,
1273 struct cmd_list_element *cmd, const char *value)
1274{
1275 fprintf_filtered (file, "%s\n", remote_exec_file_var);
1276}
1277
74ca34ce
DJ
1278static int
1279compare_pnums (const void *lhs_, const void *rhs_)
1280{
19ba03f4
SM
1281 const struct packet_reg * const *lhs
1282 = (const struct packet_reg * const *) lhs_;
1283 const struct packet_reg * const *rhs
1284 = (const struct packet_reg * const *) rhs_;
74ca34ce
DJ
1285
1286 if ((*lhs)->pnum < (*rhs)->pnum)
1287 return -1;
1288 else if ((*lhs)->pnum == (*rhs)->pnum)
1289 return 0;
1290 else
1291 return 1;
1292}
1293
c21236dc
PA
1294static int
1295map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 1296{
74ca34ce 1297 int regnum, num_remote_regs, offset;
74ca34ce 1298 struct packet_reg **remote_regs;
ea9c271d 1299
4a22f64d 1300 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 1301 {
c21236dc 1302 struct packet_reg *r = &regs[regnum];
baef701f 1303
4a22f64d 1304 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
1305 /* Do not try to fetch zero-sized (placeholder) registers. */
1306 r->pnum = -1;
1307 else
1308 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1309
b323314b 1310 r->regnum = regnum;
74ca34ce
DJ
1311 }
1312
1313 /* Define the g/G packet format as the contents of each register
1314 with a remote protocol number, in order of ascending protocol
1315 number. */
1316
224c3ddb 1317 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 1318 for (num_remote_regs = 0, regnum = 0;
4a22f64d 1319 regnum < gdbarch_num_regs (gdbarch);
f57d151a 1320 regnum++)
c21236dc
PA
1321 if (regs[regnum].pnum != -1)
1322 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 1323
74ca34ce
DJ
1324 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
1325 compare_pnums);
1326
1327 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1328 {
1329 remote_regs[regnum]->in_g_packet = 1;
1330 remote_regs[regnum]->offset = offset;
4a22f64d 1331 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
1332 }
1333
c21236dc
PA
1334 return offset;
1335}
1336
1337/* Given the architecture described by GDBARCH, return the remote
1338 protocol register's number and the register's offset in the g/G
1339 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1340 If the target does not have a mapping for REGNUM, return false,
1341 otherwise, return true. */
1342
1343int
1344remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1345 int *pnum, int *poffset)
1346{
c21236dc
PA
1347 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1348
b80406ac 1349 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
c21236dc 1350
b80406ac 1351 map_regcache_remote_table (gdbarch, regs.data ());
c21236dc
PA
1352
1353 *pnum = regs[regnum].pnum;
1354 *poffset = regs[regnum].offset;
1355
c21236dc
PA
1356 return *pnum != -1;
1357}
1358
9d6eea31 1359remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
c21236dc 1360{
c21236dc
PA
1361 /* Use the architecture to build a regnum<->pnum table, which will be
1362 1:1 unless a feature set specifies otherwise. */
9d6eea31 1363 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
c21236dc 1364
74ca34ce
DJ
1365 /* Record the maximum possible size of the g packet - it may turn out
1366 to be smaller. */
9d6eea31
PA
1367 this->sizeof_g_packet
1368 = map_regcache_remote_table (gdbarch, this->regs.get ());
74ca34ce 1369
0df8b418 1370 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
1371 remote stubs have a hardwired buffer size of 400 bytes
1372 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1373 as the maximum packet-size to ensure that the packet and an extra
1374 NUL character can always fit in the buffer. This stops GDB
1375 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d 1376 already a full buffer (As of 1999-12-04 that was most stubs). */
9d6eea31 1377 this->remote_packet_size = 400 - 1;
d01949b6 1378
ea9c271d 1379 /* This one is filled in when a ``g'' packet is received. */
9d6eea31 1380 this->actual_register_packet_size = 0;
ea9c271d
DJ
1381
1382 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
1383 default, adjust the size accordingly. Remember that each byte is
1384 encoded as two characters. 32 is the overhead for the packet
1385 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 1386 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 1387 little. */
9d6eea31
PA
1388 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1389 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
ea9c271d
DJ
1390}
1391
6b8edb51
PA
1392/* Get a pointer to the current remote target. If not connected to a
1393 remote target, return NULL. */
1394
1395static remote_target *
1396get_current_remote_target ()
1397{
1398 target_ops *proc_target = find_target_at (process_stratum);
1399 return dynamic_cast<remote_target *> (proc_target);
1400}
1401
ea9c271d
DJ
1402/* Return the current allowed size of a remote packet. This is
1403 inferred from the current architecture, and should be used to
1404 limit the length of outgoing packets. */
6b8edb51
PA
1405long
1406remote_target::get_remote_packet_size ()
ea9c271d 1407{
be2a5f71 1408 struct remote_state *rs = get_remote_state ();
9d6eea31 1409 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1410
be2a5f71
DJ
1411 if (rs->explicit_packet_size)
1412 return rs->explicit_packet_size;
1413
ea9c271d 1414 return rsa->remote_packet_size;
d01949b6
AC
1415}
1416
ad10f812 1417static struct packet_reg *
5cd63fda
PA
1418packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1419 long regnum)
ad10f812 1420{
5cd63fda 1421 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
b323314b
AC
1422 return NULL;
1423 else
ad10f812 1424 {
ea9c271d 1425 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 1426
b323314b
AC
1427 gdb_assert (r->regnum == regnum);
1428 return r;
ad10f812 1429 }
ad10f812
AC
1430}
1431
1432static struct packet_reg *
5cd63fda
PA
1433packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1434 LONGEST pnum)
ad10f812 1435{
b323314b 1436 int i;
a744cf53 1437
5cd63fda 1438 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
ad10f812 1439 {
ea9c271d 1440 struct packet_reg *r = &rsa->regs[i];
a744cf53 1441
b323314b
AC
1442 if (r->pnum == pnum)
1443 return r;
ad10f812
AC
1444 }
1445 return NULL;
d01949b6
AC
1446}
1447
9a7071a8
JB
1448/* Allow the user to specify what sequence to send to the remote
1449 when he requests a program interruption: Although ^C is usually
1450 what remote systems expect (this is the default, here), it is
1451 sometimes preferable to send a break. On other systems such
1452 as the Linux kernel, a break followed by g, which is Magic SysRq g
1453 is required in order to interrupt the execution. */
1454const char interrupt_sequence_control_c[] = "Ctrl-C";
1455const char interrupt_sequence_break[] = "BREAK";
1456const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 1457static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
1458 {
1459 interrupt_sequence_control_c,
1460 interrupt_sequence_break,
1461 interrupt_sequence_break_g,
1462 NULL
1463 };
1464static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1465
1466static void
1467show_interrupt_sequence (struct ui_file *file, int from_tty,
1468 struct cmd_list_element *c,
1469 const char *value)
1470{
1471 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1472 fprintf_filtered (file,
1473 _("Send the ASCII ETX character (Ctrl-c) "
1474 "to the remote target to interrupt the "
1475 "execution of the program.\n"));
1476 else if (interrupt_sequence_mode == interrupt_sequence_break)
1477 fprintf_filtered (file,
1478 _("send a break signal to the remote target "
1479 "to interrupt the execution of the program.\n"));
1480 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1481 fprintf_filtered (file,
1482 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1483 "the remote target to interrupt the execution "
1484 "of Linux kernel.\n"));
1485 else
1486 internal_error (__FILE__, __LINE__,
1487 _("Invalid value for interrupt_sequence_mode: %s."),
1488 interrupt_sequence_mode);
1489}
6426a772 1490
9a7071a8
JB
1491/* This boolean variable specifies whether interrupt_sequence is sent
1492 to the remote target when gdb connects to it.
1493 This is mostly needed when you debug the Linux kernel: The Linux kernel
1494 expects BREAK g which is Magic SysRq g for connecting gdb. */
491144b5 1495static bool interrupt_on_connect = false;
c906108c 1496
9a7071a8
JB
1497/* This variable is used to implement the "set/show remotebreak" commands.
1498 Since these commands are now deprecated in favor of "set/show remote
1499 interrupt-sequence", it no longer has any effect on the code. */
491144b5 1500static bool remote_break;
c906108c 1501
9a7071a8 1502static void
eb4c3f4a 1503set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
9a7071a8
JB
1504{
1505 if (remote_break)
1506 interrupt_sequence_mode = interrupt_sequence_break;
1507 else
1508 interrupt_sequence_mode = interrupt_sequence_control_c;
1509}
1510
1511static void
1512show_remotebreak (struct ui_file *file, int from_tty,
1513 struct cmd_list_element *c,
1514 const char *value)
1515{
1516}
1517
c906108c
SS
1518/* This variable sets the number of bits in an address that are to be
1519 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 1520 leading zeros, the entire address would be sent. This variable
c906108c
SS
1521 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1522 initial implementation of remote.c restricted the address sent in
1523 memory packets to ``host::sizeof long'' bytes - (typically 32
1524 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1525 address was never sent. Since fixing this bug may cause a break in
1526 some remote targets this variable is principly provided to
23860348 1527 facilitate backward compatibility. */
c906108c 1528
883b9c6c 1529static unsigned int remote_address_size;
c906108c 1530
11cf8741 1531\f
11cf8741 1532/* User configurable variables for the number of characters in a
ea9c271d
DJ
1533 memory read/write packet. MIN (rsa->remote_packet_size,
1534 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 1535 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
1536 (speed up transfers). The variables ``preferred_*'' (the user
1537 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1538 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1539
1540struct memory_packet_config
1541{
a121b7c1 1542 const char *name;
11cf8741
JM
1543 long size;
1544 int fixed_p;
1545};
1546
cc0be08f
PA
1547/* The default max memory-write-packet-size, when the setting is
1548 "fixed". The 16k is historical. (It came from older GDB's using
1549 alloca for buffers and the knowledge (folklore?) that some hosts
1550 don't cope very well with large alloca calls.) */
1551#define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
a5c0808e
PA
1552
1553/* The minimum remote packet size for memory transfers. Ensures we
1554 can write at least one byte. */
1555#define MIN_MEMORY_PACKET_SIZE 20
1556
cc0be08f
PA
1557/* Get the memory packet size, assuming it is fixed. */
1558
1559static long
1560get_fixed_memory_packet_size (struct memory_packet_config *config)
1561{
1562 gdb_assert (config->fixed_p);
1563
1564 if (config->size <= 0)
1565 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1566 else
1567 return config->size;
1568}
1569
11cf8741
JM
1570/* Compute the current size of a read/write packet. Since this makes
1571 use of ``actual_register_packet_size'' the computation is dynamic. */
1572
6b8edb51
PA
1573long
1574remote_target::get_memory_packet_size (struct memory_packet_config *config)
11cf8741 1575{
d01949b6 1576 struct remote_state *rs = get_remote_state ();
9d6eea31 1577 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1578
11cf8741
JM
1579 long what_they_get;
1580 if (config->fixed_p)
cc0be08f 1581 what_they_get = get_fixed_memory_packet_size (config);
11cf8741
JM
1582 else
1583 {
ea9c271d 1584 what_they_get = get_remote_packet_size ();
23860348 1585 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1586 if (config->size > 0
1587 && what_they_get > config->size)
1588 what_they_get = config->size;
be2a5f71
DJ
1589
1590 /* Limit it to the size of the targets ``g'' response unless we have
1591 permission from the stub to use a larger packet size. */
1592 if (rs->explicit_packet_size == 0
1593 && rsa->actual_register_packet_size > 0
1594 && what_they_get > rsa->actual_register_packet_size)
1595 what_they_get = rsa->actual_register_packet_size;
11cf8741 1596 }
a5c0808e
PA
1597 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1598 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1599
1600 /* Make sure there is room in the global buffer for this packet
1601 (including its trailing NUL byte). */
8d64371b
TT
1602 if (rs->buf.size () < what_they_get + 1)
1603 rs->buf.resize (2 * what_they_get);
6d820c5c 1604
11cf8741
JM
1605 return what_they_get;
1606}
1607
0df8b418 1608/* Update the size of a read/write packet. If they user wants
23860348 1609 something really big then do a sanity check. */
11cf8741
JM
1610
1611static void
ac88e2de 1612set_memory_packet_size (const char *args, struct memory_packet_config *config)
11cf8741
JM
1613{
1614 int fixed_p = config->fixed_p;
1615 long size = config->size;
a744cf53 1616
11cf8741 1617 if (args == NULL)
8a3fe4f8 1618 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1619 else if (strcmp (args, "hard") == 0
1620 || strcmp (args, "fixed") == 0)
1621 fixed_p = 1;
1622 else if (strcmp (args, "soft") == 0
1623 || strcmp (args, "limit") == 0)
1624 fixed_p = 0;
1625 else
1626 {
1627 char *end;
a744cf53 1628
11cf8741
JM
1629 size = strtoul (args, &end, 0);
1630 if (args == end)
8a3fe4f8 1631 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1632
1633 /* Instead of explicitly capping the size of a packet to or
1634 disallowing it, the user is allowed to set the size to
1635 something arbitrarily large. */
11cf8741 1636 }
a5c0808e 1637
23860348 1638 /* Extra checks? */
11cf8741
JM
1639 if (fixed_p && !config->fixed_p)
1640 {
cc0be08f
PA
1641 /* So that the query shows the correct value. */
1642 long query_size = (size <= 0
1643 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1644 : size);
1645
e2e0b3e5
AC
1646 if (! query (_("The target may not be able to correctly handle a %s\n"
1647 "of %ld bytes. Change the packet size? "),
cc0be08f 1648 config->name, query_size))
8a3fe4f8 1649 error (_("Packet size not changed."));
11cf8741 1650 }
23860348 1651 /* Update the config. */
11cf8741
JM
1652 config->fixed_p = fixed_p;
1653 config->size = size;
1654}
1655
1656static void
1657show_memory_packet_size (struct memory_packet_config *config)
1658{
cc0be08f
PA
1659 if (config->size == 0)
1660 printf_filtered (_("The %s is 0 (default). "), config->name);
1661 else
1662 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1663 if (config->fixed_p)
a3f17187 1664 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
cc0be08f 1665 get_fixed_memory_packet_size (config));
11cf8741 1666 else
cc0be08f 1667 {
6b8edb51 1668 remote_target *remote = get_current_remote_target ();
cc0be08f 1669
6b8edb51 1670 if (remote != NULL)
cc0be08f 1671 printf_filtered (_("Packets are limited to %ld bytes.\n"),
6b8edb51 1672 remote->get_memory_packet_size (config));
cc0be08f
PA
1673 else
1674 puts_filtered ("The actual limit will be further reduced "
1675 "dependent on the target.\n");
1676 }
11cf8741
JM
1677}
1678
1679static struct memory_packet_config memory_write_packet_config =
1680{
1681 "memory-write-packet-size",
1682};
1683
1684static void
ac88e2de 1685set_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1686{
1687 set_memory_packet_size (args, &memory_write_packet_config);
1688}
1689
1690static void
ac88e2de 1691show_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1692{
1693 show_memory_packet_size (&memory_write_packet_config);
1694}
1695
055303e2
AB
1696/* Show the number of hardware watchpoints that can be used. */
1697
1698static void
1699show_hardware_watchpoint_limit (struct ui_file *file, int from_tty,
1700 struct cmd_list_element *c,
1701 const char *value)
1702{
1703 fprintf_filtered (file, _("The maximum number of target hardware "
1704 "watchpoints is %s.\n"), value);
1705}
1706
1707/* Show the length limit (in bytes) for hardware watchpoints. */
1708
1709static void
1710show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty,
1711 struct cmd_list_element *c,
1712 const char *value)
1713{
1714 fprintf_filtered (file, _("The maximum length (in bytes) of a target "
1715 "hardware watchpoint is %s.\n"), value);
1716}
1717
1718/* Show the number of hardware breakpoints that can be used. */
1719
1720static void
1721show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
1722 struct cmd_list_element *c,
1723 const char *value)
1724{
1725 fprintf_filtered (file, _("The maximum number of target hardware "
1726 "breakpoints is %s.\n"), value);
1727}
1728
6b8edb51
PA
1729long
1730remote_target::get_memory_write_packet_size ()
11cf8741
JM
1731{
1732 return get_memory_packet_size (&memory_write_packet_config);
1733}
1734
1735static struct memory_packet_config memory_read_packet_config =
1736{
1737 "memory-read-packet-size",
1738};
1739
1740static void
ac88e2de 1741set_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1742{
1743 set_memory_packet_size (args, &memory_read_packet_config);
1744}
1745
1746static void
ac88e2de 1747show_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1748{
1749 show_memory_packet_size (&memory_read_packet_config);
1750}
1751
6b8edb51
PA
1752long
1753remote_target::get_memory_read_packet_size ()
11cf8741
JM
1754{
1755 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1756
11cf8741
JM
1757 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1758 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1759 increased beyond this. */
1760 if (size > get_remote_packet_size ())
1761 size = get_remote_packet_size ();
11cf8741
JM
1762 return size;
1763}
1764
11cf8741 1765\f
5a2468f5 1766
5a2468f5
JM
1767struct packet_config
1768 {
bb572ddd
DJ
1769 const char *name;
1770 const char *title;
4082afcc
PA
1771
1772 /* If auto, GDB auto-detects support for this packet or feature,
1773 either through qSupported, or by trying the packet and looking
1774 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1775 packet. If false, the packet is disabled. Configs that don't
1776 have an associated command always have this set to auto. */
7f19b9a2 1777 enum auto_boolean detect;
4082afcc
PA
1778
1779 /* Does the target support this packet? */
5a2468f5
JM
1780 enum packet_support support;
1781 };
1782
4082afcc
PA
1783static enum packet_support packet_config_support (struct packet_config *config);
1784static enum packet_support packet_support (int packet);
5a2468f5
JM
1785
1786static void
fba45db2 1787show_packet_config_cmd (struct packet_config *config)
5a2468f5 1788{
a121b7c1 1789 const char *support = "internal-error";
a744cf53 1790
4082afcc 1791 switch (packet_config_support (config))
5a2468f5
JM
1792 {
1793 case PACKET_ENABLE:
1794 support = "enabled";
1795 break;
1796 case PACKET_DISABLE:
1797 support = "disabled";
1798 break;
1799 case PACKET_SUPPORT_UNKNOWN:
1800 support = "unknown";
1801 break;
1802 }
1803 switch (config->detect)
1804 {
7f19b9a2 1805 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1806 printf_filtered (_("Support for the `%s' packet "
1807 "is auto-detected, currently %s.\n"),
37a105a1 1808 config->name, support);
5a2468f5 1809 break;
7f19b9a2
AC
1810 case AUTO_BOOLEAN_TRUE:
1811 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1812 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1813 config->name, support);
8e248173 1814 break;
5a2468f5
JM
1815 }
1816}
1817
1818static void
bb572ddd
DJ
1819add_packet_config_cmd (struct packet_config *config, const char *name,
1820 const char *title, int legacy)
d471ea57 1821{
5a2468f5
JM
1822 char *set_doc;
1823 char *show_doc;
d471ea57 1824 char *cmd_name;
3ed07be4 1825
5a2468f5
JM
1826 config->name = name;
1827 config->title = title;
590042fc 1828 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
b435e160 1829 name, title);
3e43a32a 1830 show_doc = xstrprintf ("Show current use of remote "
590042fc 1831 "protocol `%s' (%s) packet.",
b435e160 1832 name, title);
d471ea57 1833 /* set/show TITLE-packet {auto,on,off} */
b435e160 1834 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1835 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1836 &config->detect, set_doc,
1837 show_doc, NULL, /* help_doc */
4082afcc 1838 NULL,
bb572ddd
DJ
1839 show_remote_protocol_packet_cmd,
1840 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1841 /* The command code copies the documentation strings. */
1842 xfree (set_doc);
1843 xfree (show_doc);
23860348 1844 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1845 if (legacy)
1846 {
1847 char *legacy_name;
a744cf53 1848
b435e160 1849 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1850 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1851 &remote_set_cmdlist);
d471ea57 1852 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1853 &remote_show_cmdlist);
d471ea57 1854 }
5a2468f5
JM
1855}
1856
d471ea57 1857static enum packet_result
a76d924d 1858packet_check_result (const char *buf)
5a2468f5 1859{
d471ea57 1860 if (buf[0] != '\0')
5a2468f5 1861 {
d471ea57 1862 /* The stub recognized the packet request. Check that the
23860348 1863 operation succeeded. */
a76d924d
DJ
1864 if (buf[0] == 'E'
1865 && isxdigit (buf[1]) && isxdigit (buf[2])
1866 && buf[3] == '\0')
1867 /* "Enn" - definitly an error. */
1868 return PACKET_ERROR;
1869
1870 /* Always treat "E." as an error. This will be used for
1871 more verbose error messages, such as E.memtypes. */
1872 if (buf[0] == 'E' && buf[1] == '.')
1873 return PACKET_ERROR;
1874
1875 /* The packet may or may not be OK. Just assume it is. */
1876 return PACKET_OK;
1877 }
1878 else
1879 /* The stub does not support the packet. */
1880 return PACKET_UNKNOWN;
1881}
1882
8d64371b
TT
1883static enum packet_result
1884packet_check_result (const gdb::char_vector &buf)
1885{
1886 return packet_check_result (buf.data ());
1887}
1888
a76d924d
DJ
1889static enum packet_result
1890packet_ok (const char *buf, struct packet_config *config)
1891{
1892 enum packet_result result;
1893
4082afcc
PA
1894 if (config->detect != AUTO_BOOLEAN_TRUE
1895 && config->support == PACKET_DISABLE)
1896 internal_error (__FILE__, __LINE__,
1897 _("packet_ok: attempt to use a disabled packet"));
1898
a76d924d
DJ
1899 result = packet_check_result (buf);
1900 switch (result)
1901 {
1902 case PACKET_OK:
1903 case PACKET_ERROR:
1904 /* The stub recognized the packet request. */
4082afcc 1905 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1906 {
d471ea57
AC
1907 if (remote_debug)
1908 fprintf_unfiltered (gdb_stdlog,
4082afcc
PA
1909 "Packet %s (%s) is supported\n",
1910 config->name, config->title);
d471ea57 1911 config->support = PACKET_ENABLE;
d471ea57 1912 }
a76d924d
DJ
1913 break;
1914 case PACKET_UNKNOWN:
23860348 1915 /* The stub does not support the packet. */
4082afcc
PA
1916 if (config->detect == AUTO_BOOLEAN_AUTO
1917 && config->support == PACKET_ENABLE)
d471ea57 1918 {
4082afcc
PA
1919 /* If the stub previously indicated that the packet was
1920 supported then there is a protocol error. */
1921 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1922 config->name, config->title);
1923 }
1924 else if (config->detect == AUTO_BOOLEAN_TRUE)
1925 {
1926 /* The user set it wrong. */
1927 error (_("Enabled packet %s (%s) not recognized by stub"),
1928 config->name, config->title);
d471ea57 1929 }
4082afcc
PA
1930
1931 if (remote_debug)
1932 fprintf_unfiltered (gdb_stdlog,
1933 "Packet %s (%s) is NOT supported\n",
1934 config->name, config->title);
1935 config->support = PACKET_DISABLE;
a76d924d 1936 break;
5a2468f5 1937 }
a76d924d
DJ
1938
1939 return result;
5a2468f5
JM
1940}
1941
8d64371b
TT
1942static enum packet_result
1943packet_ok (const gdb::char_vector &buf, struct packet_config *config)
1944{
1945 return packet_ok (buf.data (), config);
1946}
1947
444abaca
DJ
1948enum {
1949 PACKET_vCont = 0,
1950 PACKET_X,
1951 PACKET_qSymbol,
1952 PACKET_P,
1953 PACKET_p,
1954 PACKET_Z0,
1955 PACKET_Z1,
1956 PACKET_Z2,
1957 PACKET_Z3,
1958 PACKET_Z4,
15a201c8 1959 PACKET_vFile_setfs,
a6b151f1
DJ
1960 PACKET_vFile_open,
1961 PACKET_vFile_pread,
1962 PACKET_vFile_pwrite,
1963 PACKET_vFile_close,
1964 PACKET_vFile_unlink,
b9e7b9c3 1965 PACKET_vFile_readlink,
0a93529c 1966 PACKET_vFile_fstat,
0876f84a 1967 PACKET_qXfer_auxv,
23181151 1968 PACKET_qXfer_features,
c78fa86a 1969 PACKET_qXfer_exec_file,
cfa9d6d9 1970 PACKET_qXfer_libraries,
2268b414 1971 PACKET_qXfer_libraries_svr4,
fd79ecee 1972 PACKET_qXfer_memory_map,
07e059b5 1973 PACKET_qXfer_osdata,
dc146f7c 1974 PACKET_qXfer_threads,
0fb4aa4b 1975 PACKET_qXfer_statictrace_read,
b3b9301e 1976 PACKET_qXfer_traceframe_info,
169081d0 1977 PACKET_qXfer_uib,
711e434b 1978 PACKET_qGetTIBAddr,
444abaca 1979 PACKET_qGetTLSAddr,
be2a5f71 1980 PACKET_qSupported,
bd3eecc3 1981 PACKET_qTStatus,
89be2091 1982 PACKET_QPassSignals,
82075af2 1983 PACKET_QCatchSyscalls,
9b224c5e 1984 PACKET_QProgramSignals,
bc3b087d 1985 PACKET_QSetWorkingDir,
aefd8b33 1986 PACKET_QStartupWithShell,
0a2dde4a
SDJ
1987 PACKET_QEnvironmentHexEncoded,
1988 PACKET_QEnvironmentReset,
1989 PACKET_QEnvironmentUnset,
936d2992 1990 PACKET_qCRC,
08388c79 1991 PACKET_qSearch_memory,
2d717e4f
DJ
1992 PACKET_vAttach,
1993 PACKET_vRun,
a6f3e723 1994 PACKET_QStartNoAckMode,
82f73884 1995 PACKET_vKill,
4aa995e1
PA
1996 PACKET_qXfer_siginfo_read,
1997 PACKET_qXfer_siginfo_write,
0b16c5cf 1998 PACKET_qAttached,
4082afcc
PA
1999
2000 /* Support for conditional tracepoints. */
782b2b07 2001 PACKET_ConditionalTracepoints,
4082afcc
PA
2002
2003 /* Support for target-side breakpoint conditions. */
3788aec7 2004 PACKET_ConditionalBreakpoints,
4082afcc
PA
2005
2006 /* Support for target-side breakpoint commands. */
d3ce09f5 2007 PACKET_BreakpointCommands,
4082afcc
PA
2008
2009 /* Support for fast tracepoints. */
7a697b8d 2010 PACKET_FastTracepoints,
4082afcc
PA
2011
2012 /* Support for static tracepoints. */
0fb4aa4b 2013 PACKET_StaticTracepoints,
4082afcc
PA
2014
2015 /* Support for installing tracepoints while a trace experiment is
2016 running. */
1e4d1764 2017 PACKET_InstallInTrace,
4082afcc 2018
40ab02ce
MS
2019 PACKET_bc,
2020 PACKET_bs,
409873ef 2021 PACKET_TracepointSource,
d914c394 2022 PACKET_QAllow,
78d85199 2023 PACKET_qXfer_fdpic,
03583c20 2024 PACKET_QDisableRandomization,
d1feda86 2025 PACKET_QAgent,
f6f899bf 2026 PACKET_QTBuffer_size,
9accd112
MM
2027 PACKET_Qbtrace_off,
2028 PACKET_Qbtrace_bts,
b20a6524 2029 PACKET_Qbtrace_pt,
9accd112 2030 PACKET_qXfer_btrace,
4082afcc
PA
2031
2032 /* Support for the QNonStop packet. */
2033 PACKET_QNonStop,
2034
65706a29
PA
2035 /* Support for the QThreadEvents packet. */
2036 PACKET_QThreadEvents,
2037
4082afcc
PA
2038 /* Support for multi-process extensions. */
2039 PACKET_multiprocess_feature,
2040
2041 /* Support for enabling and disabling tracepoints while a trace
2042 experiment is running. */
2043 PACKET_EnableDisableTracepoints_feature,
2044
2045 /* Support for collecting strings using the tracenz bytecode. */
2046 PACKET_tracenz_feature,
2047
2048 /* Support for continuing to run a trace experiment while GDB is
2049 disconnected. */
2050 PACKET_DisconnectedTracing_feature,
2051
2052 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
2053 PACKET_augmented_libraries_svr4_read_feature,
2054
f4abbc16
MM
2055 /* Support for the qXfer:btrace-conf:read packet. */
2056 PACKET_qXfer_btrace_conf,
2057
d33501a5
MM
2058 /* Support for the Qbtrace-conf:bts:size packet. */
2059 PACKET_Qbtrace_conf_bts_size,
2060
f7e6eed5
PA
2061 /* Support for swbreak+ feature. */
2062 PACKET_swbreak_feature,
2063
2064 /* Support for hwbreak+ feature. */
2065 PACKET_hwbreak_feature,
2066
89245bc0
DB
2067 /* Support for fork events. */
2068 PACKET_fork_event_feature,
2069
2070 /* Support for vfork events. */
2071 PACKET_vfork_event_feature,
2072
b20a6524
MM
2073 /* Support for the Qbtrace-conf:pt:size packet. */
2074 PACKET_Qbtrace_conf_pt_size,
2075
94585166
DB
2076 /* Support for exec events. */
2077 PACKET_exec_event_feature,
2078
750ce8d1
YQ
2079 /* Support for query supported vCont actions. */
2080 PACKET_vContSupported,
2081
de979965
PA
2082 /* Support remote CTRL-C. */
2083 PACKET_vCtrlC,
2084
f2faf941
PA
2085 /* Support TARGET_WAITKIND_NO_RESUMED. */
2086 PACKET_no_resumed,
2087
444abaca
DJ
2088 PACKET_MAX
2089};
506fb367 2090
444abaca 2091static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97 2092
f7e6eed5
PA
2093/* Returns the packet's corresponding "set remote foo-packet" command
2094 state. See struct packet_config for more details. */
2095
2096static enum auto_boolean
2097packet_set_cmd_state (int packet)
2098{
2099 return remote_protocol_packets[packet].detect;
2100}
2101
4082afcc
PA
2102/* Returns whether a given packet or feature is supported. This takes
2103 into account the state of the corresponding "set remote foo-packet"
2104 command, which may be used to bypass auto-detection. */
dc8acb97 2105
4082afcc
PA
2106static enum packet_support
2107packet_config_support (struct packet_config *config)
2108{
2109 switch (config->detect)
444abaca 2110 {
4082afcc
PA
2111 case AUTO_BOOLEAN_TRUE:
2112 return PACKET_ENABLE;
2113 case AUTO_BOOLEAN_FALSE:
2114 return PACKET_DISABLE;
2115 case AUTO_BOOLEAN_AUTO:
2116 return config->support;
2117 default:
2118 gdb_assert_not_reached (_("bad switch"));
444abaca 2119 }
4082afcc
PA
2120}
2121
2122/* Same as packet_config_support, but takes the packet's enum value as
2123 argument. */
2124
2125static enum packet_support
2126packet_support (int packet)
2127{
2128 struct packet_config *config = &remote_protocol_packets[packet];
2129
2130 return packet_config_support (config);
dc8acb97
MS
2131}
2132
5a2468f5 2133static void
444abaca
DJ
2134show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2135 struct cmd_list_element *c,
2136 const char *value)
5a2468f5 2137{
444abaca 2138 struct packet_config *packet;
5a2468f5 2139
444abaca
DJ
2140 for (packet = remote_protocol_packets;
2141 packet < &remote_protocol_packets[PACKET_MAX];
2142 packet++)
2143 {
2144 if (&packet->detect == c->var)
2145 {
2146 show_packet_config_cmd (packet);
2147 return;
2148 }
2149 }
9b20d036 2150 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 2151 c->name);
5a2468f5
JM
2152}
2153
d471ea57
AC
2154/* Should we try one of the 'Z' requests? */
2155
2156enum Z_packet_type
2157{
2158 Z_PACKET_SOFTWARE_BP,
2159 Z_PACKET_HARDWARE_BP,
2160 Z_PACKET_WRITE_WP,
2161 Z_PACKET_READ_WP,
2162 Z_PACKET_ACCESS_WP,
2163 NR_Z_PACKET_TYPES
2164};
96baa820 2165
d471ea57 2166/* For compatibility with older distributions. Provide a ``set remote
23860348 2167 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 2168
7f19b9a2 2169static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
2170
2171static void
eb4c3f4a 2172set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
fba45db2 2173 struct cmd_list_element *c)
96baa820 2174{
d471ea57 2175 int i;
a744cf53 2176
d471ea57 2177 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
4082afcc 2178 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
96baa820
JM
2179}
2180
2181static void
08546159
AC
2182show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2183 struct cmd_list_element *c,
2184 const char *value)
96baa820 2185{
d471ea57 2186 int i;
a744cf53 2187
d471ea57
AC
2188 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2189 {
444abaca 2190 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 2191 }
96baa820
JM
2192}
2193
4082afcc
PA
2194/* Returns true if the multi-process extensions are in effect. */
2195
2196static int
2197remote_multi_process_p (struct remote_state *rs)
2198{
2199 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2200}
2201
de0d863e
DB
2202/* Returns true if fork events are supported. */
2203
2204static int
2205remote_fork_event_p (struct remote_state *rs)
2206{
2207 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2208}
2209
c269dbdb
DB
2210/* Returns true if vfork events are supported. */
2211
2212static int
2213remote_vfork_event_p (struct remote_state *rs)
2214{
2215 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2216}
2217
d46addbb
DB
2218/* Returns true if exec events are supported. */
2219
2220static int
2221remote_exec_event_p (struct remote_state *rs)
2222{
2223 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2224}
2225
cbb8991c
DB
2226/* Insert fork catchpoint target routine. If fork events are enabled
2227 then return success, nothing more to do. */
2228
f6ac5f3d
PA
2229int
2230remote_target::insert_fork_catchpoint (int pid)
cbb8991c
DB
2231{
2232 struct remote_state *rs = get_remote_state ();
2233
2234 return !remote_fork_event_p (rs);
2235}
2236
2237/* Remove fork catchpoint target routine. Nothing to do, just
2238 return success. */
2239
f6ac5f3d
PA
2240int
2241remote_target::remove_fork_catchpoint (int pid)
cbb8991c
DB
2242{
2243 return 0;
2244}
2245
2246/* Insert vfork catchpoint target routine. If vfork events are enabled
2247 then return success, nothing more to do. */
2248
f6ac5f3d
PA
2249int
2250remote_target::insert_vfork_catchpoint (int pid)
cbb8991c
DB
2251{
2252 struct remote_state *rs = get_remote_state ();
2253
2254 return !remote_vfork_event_p (rs);
2255}
2256
2257/* Remove vfork catchpoint target routine. Nothing to do, just
2258 return success. */
2259
f6ac5f3d
PA
2260int
2261remote_target::remove_vfork_catchpoint (int pid)
cbb8991c
DB
2262{
2263 return 0;
2264}
2265
d46addbb
DB
2266/* Insert exec catchpoint target routine. If exec events are
2267 enabled, just return success. */
2268
f6ac5f3d
PA
2269int
2270remote_target::insert_exec_catchpoint (int pid)
d46addbb
DB
2271{
2272 struct remote_state *rs = get_remote_state ();
2273
2274 return !remote_exec_event_p (rs);
2275}
2276
2277/* Remove exec catchpoint target routine. Nothing to do, just
2278 return success. */
2279
f6ac5f3d
PA
2280int
2281remote_target::remove_exec_catchpoint (int pid)
d46addbb
DB
2282{
2283 return 0;
2284}
2285
c906108c
SS
2286\f
2287
ffdd69cf
TT
2288/* Take advantage of the fact that the TID field is not used, to tag
2289 special ptids with it set to != 0. */
2290static const ptid_t magic_null_ptid (42000, -1, 1);
2291static const ptid_t not_sent_ptid (42000, -2, 1);
2292static const ptid_t any_thread_ptid (42000, 0, 1);
79d7f229 2293
0b16c5cf
PA
2294/* Find out if the stub attached to PID (and hence GDB should offer to
2295 detach instead of killing it when bailing out). */
2296
6b8edb51
PA
2297int
2298remote_target::remote_query_attached (int pid)
0b16c5cf
PA
2299{
2300 struct remote_state *rs = get_remote_state ();
bba74b36 2301 size_t size = get_remote_packet_size ();
0b16c5cf 2302
4082afcc 2303 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
0b16c5cf
PA
2304 return 0;
2305
2306 if (remote_multi_process_p (rs))
8d64371b 2307 xsnprintf (rs->buf.data (), size, "qAttached:%x", pid);
0b16c5cf 2308 else
8d64371b 2309 xsnprintf (rs->buf.data (), size, "qAttached");
0b16c5cf
PA
2310
2311 putpkt (rs->buf);
8d64371b 2312 getpkt (&rs->buf, 0);
0b16c5cf
PA
2313
2314 switch (packet_ok (rs->buf,
1554e9be 2315 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
2316 {
2317 case PACKET_OK:
8d64371b 2318 if (strcmp (rs->buf.data (), "1") == 0)
0b16c5cf
PA
2319 return 1;
2320 break;
2321 case PACKET_ERROR:
8d64371b 2322 warning (_("Remote failure reply: %s"), rs->buf.data ());
0b16c5cf
PA
2323 break;
2324 case PACKET_UNKNOWN:
2325 break;
2326 }
2327
2328 return 0;
2329}
2330
49c62f2e
PA
2331/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2332 has been invented by GDB, instead of reported by the target. Since
2333 we can be connected to a remote system before before knowing about
2334 any inferior, mark the target with execution when we find the first
2335 inferior. If ATTACHED is 1, then we had just attached to this
2336 inferior. If it is 0, then we just created this inferior. If it
2337 is -1, then try querying the remote stub to find out if it had
1b6e6f5c
GB
2338 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2339 attempt to open this inferior's executable as the main executable
2340 if no main executable is open already. */
1941c569 2341
6b8edb51 2342inferior *
9ab8741a 2343remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached,
6b8edb51 2344 int try_open_exec)
1941c569 2345{
1941c569
PA
2346 struct inferior *inf;
2347
0b16c5cf
PA
2348 /* Check whether this process we're learning about is to be
2349 considered attached, or if is to be considered to have been
2350 spawned by the stub. */
2351 if (attached == -1)
2352 attached = remote_query_attached (pid);
2353
f5656ead 2354 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
2355 {
2356 /* If the target shares code across all inferiors, then every
2357 attach adds a new inferior. */
2358 inf = add_inferior (pid);
2359
2360 /* ... and every inferior is bound to the same program space.
2361 However, each inferior may still have its own address
2362 space. */
2363 inf->aspace = maybe_new_address_space ();
2364 inf->pspace = current_program_space;
2365 }
2366 else
2367 {
2368 /* In the traditional debugging scenario, there's a 1-1 match
2369 between program/address spaces. We simply bind the inferior
2370 to the program space's address space. */
2371 inf = current_inferior ();
2372 inferior_appeared (inf, pid);
2373 }
1941c569 2374
0b16c5cf 2375 inf->attach_flag = attached;
49c62f2e 2376 inf->fake_pid_p = fake_pid_p;
0b16c5cf 2377
1b6e6f5c
GB
2378 /* If no main executable is currently open then attempt to
2379 open the file that was executed to create this inferior. */
835205d0 2380 if (try_open_exec && get_exec_file (0) == NULL)
bb805577 2381 exec_file_locate_attach (pid, 0, 1);
1b6e6f5c 2382
1941c569
PA
2383 return inf;
2384}
2385
7aabaf9d 2386static remote_thread_info *get_remote_thread_info (thread_info *thread);
00431a78 2387static remote_thread_info *get_remote_thread_info (ptid_t ptid);
85ad3aaf 2388
1941c569
PA
2389/* Add thread PTID to GDB's thread list. Tag it as executing/running
2390 according to RUNNING. */
2391
00431a78 2392thread_info *
6b8edb51 2393remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
c906108c 2394{
b7ea362b 2395 struct remote_state *rs = get_remote_state ();
85ad3aaf 2396 struct thread_info *thread;
b7ea362b
PA
2397
2398 /* GDB historically didn't pull threads in the initial connection
2399 setup. If the remote target doesn't even have a concept of
2400 threads (e.g., a bare-metal target), even if internally we
2401 consider that a single-threaded target, mentioning a new thread
2402 might be confusing to the user. Be silent then, preserving the
2403 age old behavior. */
2404 if (rs->starting_up)
85ad3aaf 2405 thread = add_thread_silent (ptid);
b7ea362b 2406 else
85ad3aaf 2407 thread = add_thread (ptid);
1941c569 2408
7aabaf9d 2409 get_remote_thread_info (thread)->vcont_resumed = executing;
0d5b594f 2410 set_executing (ptid, executing);
1941c569 2411 set_running (ptid, running);
00431a78
PA
2412
2413 return thread;
1941c569
PA
2414}
2415
2416/* Come here when we learn about a thread id from the remote target.
2417 It may be the first time we hear about such thread, so take the
2418 opportunity to add it to GDB's thread list. In case this is the
2419 first time we're noticing its corresponding inferior, add it to
0d5b594f
PA
2420 GDB's inferior list as well. EXECUTING indicates whether the
2421 thread is (internally) executing or stopped. */
1941c569 2422
6b8edb51
PA
2423void
2424remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
1941c569 2425{
0d5b594f
PA
2426 /* In non-stop mode, we assume new found threads are (externally)
2427 running until proven otherwise with a stop reply. In all-stop,
2428 we can only get here if all threads are stopped. */
2429 int running = target_is_non_stop_p () ? 1 : 0;
2430
c906108c
SS
2431 /* If this is a new thread, add it to GDB's thread list.
2432 If we leave it up to WFI to do this, bad things will happen. */
82f73884 2433
00431a78
PA
2434 thread_info *tp = find_thread_ptid (currthread);
2435 if (tp != NULL && tp->state == THREAD_EXITED)
82f73884
PA
2436 {
2437 /* We're seeing an event on a thread id we knew had exited.
2438 This has to be a new thread reusing the old id. Add it. */
0d5b594f 2439 remote_add_thread (currthread, running, executing);
82f73884
PA
2440 return;
2441 }
2442
79d7f229 2443 if (!in_thread_list (currthread))
c0a2216e 2444 {
1941c569 2445 struct inferior *inf = NULL;
e99b03dc 2446 int pid = currthread.pid ();
1941c569 2447
0e998d96 2448 if (inferior_ptid.is_pid ()
e99b03dc 2449 && pid == inferior_ptid.pid ())
c0a2216e
PA
2450 {
2451 /* inferior_ptid has no thread member yet. This can happen
2452 with the vAttach -> remote_wait,"TAAthread:" path if the
2453 stub doesn't support qC. This is the first stop reported
2454 after an attach, so this is the main thread. Update the
2455 ptid in the thread list. */
f2907e49 2456 if (in_thread_list (ptid_t (pid)))
bad34192
PA
2457 thread_change_ptid (inferior_ptid, currthread);
2458 else
2459 {
0d5b594f 2460 remote_add_thread (currthread, running, executing);
bad34192
PA
2461 inferior_ptid = currthread;
2462 }
dc146f7c 2463 return;
c0a2216e 2464 }
82f73884 2465
d7e15655 2466 if (magic_null_ptid == inferior_ptid)
c0a2216e
PA
2467 {
2468 /* inferior_ptid is not set yet. This can happen with the
2469 vRun -> remote_wait,"TAAthread:" path if the stub
2470 doesn't support qC. This is the first stop reported
2471 after an attach, so this is the main thread. Update the
2472 ptid in the thread list. */
dc146f7c 2473 thread_change_ptid (inferior_ptid, currthread);
82f73884 2474 return;
c0a2216e 2475 }
82f73884 2476
29c87f7f
PA
2477 /* When connecting to a target remote, or to a target
2478 extended-remote which already was debugging an inferior, we
2479 may not know about it yet. Add it before adding its child
2480 thread, so notifications are emitted in a sensible order. */
e99b03dc 2481 if (find_inferior_pid (currthread.pid ()) == NULL)
49c62f2e
PA
2482 {
2483 struct remote_state *rs = get_remote_state ();
9ab8741a 2484 bool fake_pid_p = !remote_multi_process_p (rs);
49c62f2e
PA
2485
2486 inf = remote_add_inferior (fake_pid_p,
e99b03dc 2487 currthread.pid (), -1, 1);
49c62f2e 2488 }
29c87f7f 2489
82f73884 2490 /* This is really a new thread. Add it. */
00431a78
PA
2491 thread_info *new_thr
2492 = remote_add_thread (currthread, running, executing);
1941c569
PA
2493
2494 /* If we found a new inferior, let the common code do whatever
2495 it needs to with it (e.g., read shared libraries, insert
b7ea362b
PA
2496 breakpoints), unless we're just setting up an all-stop
2497 connection. */
1941c569 2498 if (inf != NULL)
b7ea362b
PA
2499 {
2500 struct remote_state *rs = get_remote_state ();
2501
6efcd9a8 2502 if (!rs->starting_up)
00431a78 2503 notice_new_inferior (new_thr, executing, 0);
b7ea362b 2504 }
c0a2216e 2505 }
c906108c
SS
2506}
2507
85ad3aaf 2508/* Return THREAD's private thread data, creating it if necessary. */
dc146f7c 2509
7aabaf9d
SM
2510static remote_thread_info *
2511get_remote_thread_info (thread_info *thread)
dc146f7c 2512{
85ad3aaf 2513 gdb_assert (thread != NULL);
dc146f7c 2514
85ad3aaf 2515 if (thread->priv == NULL)
7aabaf9d 2516 thread->priv.reset (new remote_thread_info);
dc146f7c 2517
7aabaf9d 2518 return static_cast<remote_thread_info *> (thread->priv.get ());
85ad3aaf
PA
2519}
2520
7aabaf9d
SM
2521static remote_thread_info *
2522get_remote_thread_info (ptid_t ptid)
85ad3aaf 2523{
00431a78
PA
2524 thread_info *thr = find_thread_ptid (ptid);
2525 return get_remote_thread_info (thr);
dc146f7c
VP
2526}
2527
74531fed
PA
2528/* Call this function as a result of
2529 1) A halt indication (T packet) containing a thread id
2530 2) A direct query of currthread
0df8b418 2531 3) Successful execution of set thread */
74531fed
PA
2532
2533static void
47f8a51d 2534record_currthread (struct remote_state *rs, ptid_t currthread)
74531fed 2535{
47f8a51d 2536 rs->general_thread = currthread;
74531fed
PA
2537}
2538
89be2091
DJ
2539/* If 'QPassSignals' is supported, tell the remote stub what signals
2540 it can simply pass through to the inferior without reporting. */
2541
f6ac5f3d 2542void
adc6a863 2543remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
89be2091 2544{
4082afcc 2545 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
89be2091
DJ
2546 {
2547 char *pass_packet, *p;
adc6a863 2548 int count = 0;
747dc59d 2549 struct remote_state *rs = get_remote_state ();
89be2091 2550
adc6a863
PA
2551 gdb_assert (pass_signals.size () < 256);
2552 for (size_t i = 0; i < pass_signals.size (); i++)
89be2091 2553 {
2455069d 2554 if (pass_signals[i])
89be2091
DJ
2555 count++;
2556 }
224c3ddb 2557 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
89be2091
DJ
2558 strcpy (pass_packet, "QPassSignals:");
2559 p = pass_packet + strlen (pass_packet);
adc6a863 2560 for (size_t i = 0; i < pass_signals.size (); i++)
89be2091 2561 {
2455069d 2562 if (pass_signals[i])
89be2091
DJ
2563 {
2564 if (i >= 16)
2565 *p++ = tohex (i >> 4);
2566 *p++ = tohex (i & 15);
2567 if (count)
2568 *p++ = ';';
2569 else
2570 break;
2571 count--;
2572 }
2573 }
2574 *p = 0;
747dc59d 2575 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
89be2091 2576 {
89be2091 2577 putpkt (pass_packet);
8d64371b 2578 getpkt (&rs->buf, 0);
8dc5b319 2579 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
747dc59d
TT
2580 if (rs->last_pass_packet)
2581 xfree (rs->last_pass_packet);
2582 rs->last_pass_packet = pass_packet;
89be2091
DJ
2583 }
2584 else
2585 xfree (pass_packet);
2586 }
2587}
2588
82075af2
JS
2589/* If 'QCatchSyscalls' is supported, tell the remote stub
2590 to report syscalls to GDB. */
2591
f6ac5f3d
PA
2592int
2593remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2594 gdb::array_view<const int> syscall_counts)
82075af2 2595{
b80406ac 2596 const char *catch_packet;
82075af2
JS
2597 enum packet_result result;
2598 int n_sysno = 0;
2599
2600 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2601 {
2602 /* Not supported. */
2603 return 1;
2604 }
2605
649a140c 2606 if (needed && any_count == 0)
82075af2 2607 {
649a140c
PA
2608 /* Count how many syscalls are to be caught. */
2609 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2610 {
649a140c 2611 if (syscall_counts[i] != 0)
82075af2
JS
2612 n_sysno++;
2613 }
2614 }
2615
2616 if (remote_debug)
2617 {
2618 fprintf_unfiltered (gdb_stdlog,
2619 "remote_set_syscall_catchpoint "
2620 "pid %d needed %d any_count %d n_sysno %d\n",
2621 pid, needed, any_count, n_sysno);
2622 }
2623
1b81856f 2624 std::string built_packet;
82075af2
JS
2625 if (needed)
2626 {
2627 /* Prepare a packet with the sysno list, assuming max 8+1
2628 characters for a sysno. If the resulting packet size is too
2629 big, fallback on the non-selective packet. */
2630 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
1b81856f
PA
2631 built_packet.reserve (maxpktsz);
2632 built_packet = "QCatchSyscalls:1";
649a140c 2633 if (any_count == 0)
82075af2 2634 {
649a140c
PA
2635 /* Add in each syscall to be caught. */
2636 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2637 {
649a140c
PA
2638 if (syscall_counts[i] != 0)
2639 string_appendf (built_packet, ";%zx", i);
82075af2
JS
2640 }
2641 }
1b81856f 2642 if (built_packet.size () > get_remote_packet_size ())
82075af2
JS
2643 {
2644 /* catch_packet too big. Fallback to less efficient
2645 non selective mode, with GDB doing the filtering. */
b80406ac 2646 catch_packet = "QCatchSyscalls:1";
82075af2 2647 }
b80406ac 2648 else
1b81856f 2649 catch_packet = built_packet.c_str ();
82075af2
JS
2650 }
2651 else
b80406ac 2652 catch_packet = "QCatchSyscalls:0";
82075af2 2653
b80406ac 2654 struct remote_state *rs = get_remote_state ();
82075af2 2655
b80406ac 2656 putpkt (catch_packet);
8d64371b 2657 getpkt (&rs->buf, 0);
b80406ac
TT
2658 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2659 if (result == PACKET_OK)
2660 return 0;
2661 else
2662 return -1;
82075af2
JS
2663}
2664
9b224c5e
PA
2665/* If 'QProgramSignals' is supported, tell the remote stub what
2666 signals it should pass through to the inferior when detaching. */
2667
f6ac5f3d 2668void
adc6a863 2669remote_target::program_signals (gdb::array_view<const unsigned char> signals)
9b224c5e 2670{
4082afcc 2671 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2672 {
2673 char *packet, *p;
adc6a863 2674 int count = 0;
5e4a05c4 2675 struct remote_state *rs = get_remote_state ();
9b224c5e 2676
adc6a863
PA
2677 gdb_assert (signals.size () < 256);
2678 for (size_t i = 0; i < signals.size (); i++)
9b224c5e
PA
2679 {
2680 if (signals[i])
2681 count++;
2682 }
224c3ddb 2683 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2684 strcpy (packet, "QProgramSignals:");
2685 p = packet + strlen (packet);
adc6a863 2686 for (size_t i = 0; i < signals.size (); i++)
9b224c5e
PA
2687 {
2688 if (signal_pass_state (i))
2689 {
2690 if (i >= 16)
2691 *p++ = tohex (i >> 4);
2692 *p++ = tohex (i & 15);
2693 if (count)
2694 *p++ = ';';
2695 else
2696 break;
2697 count--;
2698 }
2699 }
2700 *p = 0;
5e4a05c4
TT
2701 if (!rs->last_program_signals_packet
2702 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2703 {
9b224c5e 2704 putpkt (packet);
8d64371b 2705 getpkt (&rs->buf, 0);
8dc5b319 2706 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2707 xfree (rs->last_program_signals_packet);
2708 rs->last_program_signals_packet = packet;
9b224c5e
PA
2709 }
2710 else
2711 xfree (packet);
2712 }
2713}
2714
79d7f229
PA
2715/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2716 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2717 thread. If GEN is set, set the general thread, if not, then set
2718 the step/continue thread. */
6b8edb51
PA
2719void
2720remote_target::set_thread (ptid_t ptid, int gen)
c906108c 2721{
d01949b6 2722 struct remote_state *rs = get_remote_state ();
47f8a51d 2723 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
8d64371b
TT
2724 char *buf = rs->buf.data ();
2725 char *endbuf = buf + get_remote_packet_size ();
c906108c 2726
d7e15655 2727 if (state == ptid)
c906108c
SS
2728 return;
2729
79d7f229
PA
2730 *buf++ = 'H';
2731 *buf++ = gen ? 'g' : 'c';
d7e15655 2732 if (ptid == magic_null_ptid)
79d7f229 2733 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2734 else if (ptid == any_thread_ptid)
79d7f229 2735 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2736 else if (ptid == minus_one_ptid)
79d7f229
PA
2737 xsnprintf (buf, endbuf - buf, "-1");
2738 else
82f73884 2739 write_ptid (buf, endbuf, ptid);
79d7f229 2740 putpkt (rs->buf);
8d64371b 2741 getpkt (&rs->buf, 0);
c906108c 2742 if (gen)
47f8a51d 2743 rs->general_thread = ptid;
c906108c 2744 else
47f8a51d 2745 rs->continue_thread = ptid;
c906108c 2746}
79d7f229 2747
6b8edb51
PA
2748void
2749remote_target::set_general_thread (ptid_t ptid)
79d7f229
PA
2750{
2751 set_thread (ptid, 1);
2752}
2753
6b8edb51
PA
2754void
2755remote_target::set_continue_thread (ptid_t ptid)
79d7f229
PA
2756{
2757 set_thread (ptid, 0);
2758}
2759
3c9c4b83
PA
2760/* Change the remote current process. Which thread within the process
2761 ends up selected isn't important, as long as it is the same process
2762 as what INFERIOR_PTID points to.
2763
2764 This comes from that fact that there is no explicit notion of
2765 "selected process" in the protocol. The selected process for
2766 general operations is the process the selected general thread
2767 belongs to. */
2768
6b8edb51
PA
2769void
2770remote_target::set_general_process ()
3c9c4b83
PA
2771{
2772 struct remote_state *rs = get_remote_state ();
2773
2774 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2775 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2776 return;
2777
2778 /* We only need to change the remote current thread if it's pointing
2779 at some other process. */
e99b03dc 2780 if (rs->general_thread.pid () != inferior_ptid.pid ())
3c9c4b83
PA
2781 set_general_thread (inferior_ptid);
2782}
2783
c906108c 2784\f
7d1a114c
PA
2785/* Return nonzero if this is the main thread that we made up ourselves
2786 to model non-threaded targets as single-threaded. */
c906108c
SS
2787
2788static int
f6ac5f3d 2789remote_thread_always_alive (ptid_t ptid)
c906108c 2790{
d7e15655 2791 if (ptid == magic_null_ptid)
c0a2216e
PA
2792 /* The main thread is always alive. */
2793 return 1;
2794
e38504b3 2795 if (ptid.pid () != 0 && ptid.lwp () == 0)
c0a2216e
PA
2796 /* The main thread is always alive. This can happen after a
2797 vAttach, if the remote side doesn't support
2798 multi-threading. */
2799 return 1;
2800
7d1a114c
PA
2801 return 0;
2802}
2803
2804/* Return nonzero if the thread PTID is still alive on the remote
2805 system. */
2806
57810aa7 2807bool
f6ac5f3d 2808remote_target::thread_alive (ptid_t ptid)
7d1a114c
PA
2809{
2810 struct remote_state *rs = get_remote_state ();
2811 char *p, *endp;
2812
2813 /* Check if this is a thread that we made up ourselves to model
2814 non-threaded targets as single-threaded. */
f6ac5f3d 2815 if (remote_thread_always_alive (ptid))
7d1a114c
PA
2816 return 1;
2817
8d64371b
TT
2818 p = rs->buf.data ();
2819 endp = p + get_remote_packet_size ();
82f73884
PA
2820
2821 *p++ = 'T';
2822 write_ptid (p, endp, ptid);
2823
2e9f7625 2824 putpkt (rs->buf);
8d64371b 2825 getpkt (&rs->buf, 0);
2e9f7625 2826 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2827}
2828
79efa585
SM
2829/* Return a pointer to a thread name if we know it and NULL otherwise.
2830 The thread_info object owns the memory for the name. */
2831
f6ac5f3d
PA
2832const char *
2833remote_target::thread_name (struct thread_info *info)
79efa585
SM
2834{
2835 if (info->priv != NULL)
a9334058
SM
2836 {
2837 const std::string &name = get_remote_thread_info (info)->name;
2838 return !name.empty () ? name.c_str () : NULL;
2839 }
79efa585
SM
2840
2841 return NULL;
2842}
2843
c906108c
SS
2844/* About these extended threadlist and threadinfo packets. They are
2845 variable length packets but, the fields within them are often fixed
2846 length. They are redundent enough to send over UDP as is the
2847 remote protocol in general. There is a matching unit test module
2848 in libstub. */
2849
23860348 2850/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2851 libstub protocol encoding, and remote.c. It is not particularly
23860348 2852 changable. */
cce74817
JM
2853
2854/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2855 Plan to fix this. */
cce74817 2856
23860348 2857typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2858
9d1f7ab2 2859/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2860 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2861
2862struct gdb_ext_thread_info
c5aa993b 2863 {
23860348 2864 threadref threadid; /* External form of thread reference. */
2bc416ba 2865 int active; /* Has state interesting to GDB?
23860348 2866 regs, stack. */
2bc416ba 2867 char display[256]; /* Brief state display, name,
cedea757 2868 blocked/suspended. */
23860348 2869 char shortname[32]; /* To be used to name threads. */
2bc416ba 2870 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2871 whatever. */
c5aa993b 2872 };
cce74817
JM
2873
2874/* The volume of remote transfers can be limited by submitting
2875 a mask containing bits specifying the desired information.
2876 Use a union of these values as the 'selection' parameter to
0df8b418 2877 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2878
2879#define TAG_THREADID 1
2880#define TAG_EXISTS 2
2881#define TAG_DISPLAY 4
2882#define TAG_THREADNAME 8
c5aa993b 2883#define TAG_MOREDISPLAY 16
cce74817 2884
23860348 2885#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 2886
a14ed312 2887static char *unpack_nibble (char *buf, int *val);
cce74817 2888
a14ed312 2889static char *unpack_byte (char *buf, int *value);
cce74817 2890
a14ed312 2891static char *pack_int (char *buf, int value);
cce74817 2892
a14ed312 2893static char *unpack_int (char *buf, int *value);
cce74817 2894
a14ed312 2895static char *unpack_string (char *src, char *dest, int length);
cce74817 2896
23860348 2897static char *pack_threadid (char *pkt, threadref *id);
cce74817 2898
23860348 2899static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 2900
23860348 2901void int_to_threadref (threadref *id, int value);
cce74817 2902
23860348 2903static int threadref_to_int (threadref *ref);
cce74817 2904
23860348 2905static void copy_threadref (threadref *dest, threadref *src);
cce74817 2906
23860348 2907static int threadmatch (threadref *dest, threadref *src);
cce74817 2908
2bc416ba 2909static char *pack_threadinfo_request (char *pkt, int mode,
23860348 2910 threadref *id);
cce74817 2911
a14ed312
KB
2912static char *pack_threadlist_request (char *pkt, int startflag,
2913 int threadcount,
23860348 2914 threadref *nextthread);
cce74817 2915
23860348 2916static int remote_newthread_step (threadref *ref, void *context);
cce74817 2917
82f73884
PA
2918
2919/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2920 buffer we're allowed to write to. Returns
2921 BUF+CHARACTERS_WRITTEN. */
2922
6b8edb51
PA
2923char *
2924remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
82f73884
PA
2925{
2926 int pid, tid;
2927 struct remote_state *rs = get_remote_state ();
2928
2929 if (remote_multi_process_p (rs))
2930 {
e99b03dc 2931 pid = ptid.pid ();
82f73884
PA
2932 if (pid < 0)
2933 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2934 else
2935 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2936 }
e38504b3 2937 tid = ptid.lwp ();
82f73884
PA
2938 if (tid < 0)
2939 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2940 else
2941 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2942
2943 return buf;
2944}
2945
256642e8
PA
2946/* Extract a PTID from BUF. If non-null, OBUF is set to one past the
2947 last parsed char. Returns null_ptid if no thread id is found, and
2948 throws an error if the thread id has an invalid format. */
82f73884
PA
2949
2950static ptid_t
256642e8 2951read_ptid (const char *buf, const char **obuf)
82f73884 2952{
256642e8
PA
2953 const char *p = buf;
2954 const char *pp;
82f73884 2955 ULONGEST pid = 0, tid = 0;
82f73884
PA
2956
2957 if (*p == 'p')
2958 {
2959 /* Multi-process ptid. */
2960 pp = unpack_varlen_hex (p + 1, &pid);
2961 if (*pp != '.')
b37520b6 2962 error (_("invalid remote ptid: %s"), p);
82f73884
PA
2963
2964 p = pp;
2965 pp = unpack_varlen_hex (p + 1, &tid);
2966 if (obuf)
2967 *obuf = pp;
fd79271b 2968 return ptid_t (pid, tid, 0);
82f73884
PA
2969 }
2970
2971 /* No multi-process. Just a tid. */
2972 pp = unpack_varlen_hex (p, &tid);
2973
c9f35b34
KB
2974 /* Return null_ptid when no thread id is found. */
2975 if (p == pp)
2976 {
2977 if (obuf)
2978 *obuf = pp;
2979 return null_ptid;
2980 }
2981
82f73884 2982 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
2983 what's in inferior_ptid, unless it's null at this point. If so,
2984 then since there's no way to know the pid of the reported
2985 threads, use the magic number. */
d7e15655 2986 if (inferior_ptid == null_ptid)
e99b03dc 2987 pid = magic_null_ptid.pid ();
ca19bf23 2988 else
e99b03dc 2989 pid = inferior_ptid.pid ();
82f73884
PA
2990
2991 if (obuf)
2992 *obuf = pp;
fd79271b 2993 return ptid_t (pid, tid, 0);
82f73884
PA
2994}
2995
c906108c 2996static int
fba45db2 2997stubhex (int ch)
c906108c
SS
2998{
2999 if (ch >= 'a' && ch <= 'f')
3000 return ch - 'a' + 10;
3001 if (ch >= '0' && ch <= '9')
3002 return ch - '0';
3003 if (ch >= 'A' && ch <= 'F')
3004 return ch - 'A' + 10;
3005 return -1;
3006}
3007
3008static int
fba45db2 3009stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
3010{
3011 int nibble;
3012 int retval = 0;
3013
3014 while (fieldlength)
3015 {
3016 nibble = stubhex (*buff++);
3017 retval |= nibble;
3018 fieldlength--;
3019 if (fieldlength)
3020 retval = retval << 4;
3021 }
3022 return retval;
3023}
3024
c906108c 3025static char *
fba45db2 3026unpack_nibble (char *buf, int *val)
c906108c 3027{
b7589f7d 3028 *val = fromhex (*buf++);
c906108c
SS
3029 return buf;
3030}
3031
c906108c 3032static char *
fba45db2 3033unpack_byte (char *buf, int *value)
c906108c
SS
3034{
3035 *value = stub_unpack_int (buf, 2);
3036 return buf + 2;
3037}
3038
3039static char *
fba45db2 3040pack_int (char *buf, int value)
c906108c
SS
3041{
3042 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3043 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3044 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3045 buf = pack_hex_byte (buf, (value & 0xff));
3046 return buf;
3047}
3048
3049static char *
fba45db2 3050unpack_int (char *buf, int *value)
c906108c
SS
3051{
3052 *value = stub_unpack_int (buf, 8);
3053 return buf + 8;
3054}
3055
23860348 3056#if 0 /* Currently unused, uncomment when needed. */
a14ed312 3057static char *pack_string (char *pkt, char *string);
c906108c
SS
3058
3059static char *
fba45db2 3060pack_string (char *pkt, char *string)
c906108c
SS
3061{
3062 char ch;
3063 int len;
3064
3065 len = strlen (string);
3066 if (len > 200)
23860348 3067 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
3068 pkt = pack_hex_byte (pkt, len);
3069 while (len-- > 0)
3070 {
3071 ch = *string++;
3072 if ((ch == '\0') || (ch == '#'))
23860348 3073 ch = '*'; /* Protect encapsulation. */
c906108c
SS
3074 *pkt++ = ch;
3075 }
3076 return pkt;
3077}
3078#endif /* 0 (unused) */
3079
3080static char *
fba45db2 3081unpack_string (char *src, char *dest, int length)
c906108c
SS
3082{
3083 while (length--)
3084 *dest++ = *src++;
3085 *dest = '\0';
3086 return src;
3087}
3088
3089static char *
fba45db2 3090pack_threadid (char *pkt, threadref *id)
c906108c
SS
3091{
3092 char *limit;
3093 unsigned char *altid;
3094
3095 altid = (unsigned char *) id;
3096 limit = pkt + BUF_THREAD_ID_SIZE;
3097 while (pkt < limit)
3098 pkt = pack_hex_byte (pkt, *altid++);
3099 return pkt;
3100}
3101
3102
3103static char *
fba45db2 3104unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
3105{
3106 char *altref;
3107 char *limit = inbuf + BUF_THREAD_ID_SIZE;
3108 int x, y;
3109
3110 altref = (char *) id;
3111
3112 while (inbuf < limit)
3113 {
3114 x = stubhex (*inbuf++);
3115 y = stubhex (*inbuf++);
3116 *altref++ = (x << 4) | y;
3117 }
3118 return inbuf;
3119}
3120
3121/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 3122 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
3123 to use 64bit thread references internally. This is an adapter
3124 function. */
3125
3126void
fba45db2 3127int_to_threadref (threadref *id, int value)
c906108c
SS
3128{
3129 unsigned char *scan;
3130
3131 scan = (unsigned char *) id;
3132 {
3133 int i = 4;
3134 while (i--)
3135 *scan++ = 0;
3136 }
3137 *scan++ = (value >> 24) & 0xff;
3138 *scan++ = (value >> 16) & 0xff;
3139 *scan++ = (value >> 8) & 0xff;
3140 *scan++ = (value & 0xff);
3141}
3142
3143static int
fba45db2 3144threadref_to_int (threadref *ref)
c906108c
SS
3145{
3146 int i, value = 0;
3147 unsigned char *scan;
3148
cfd77fa1 3149 scan = *ref;
c906108c
SS
3150 scan += 4;
3151 i = 4;
3152 while (i-- > 0)
3153 value = (value << 8) | ((*scan++) & 0xff);
3154 return value;
3155}
3156
3157static void
fba45db2 3158copy_threadref (threadref *dest, threadref *src)
c906108c
SS
3159{
3160 int i;
3161 unsigned char *csrc, *cdest;
3162
3163 csrc = (unsigned char *) src;
3164 cdest = (unsigned char *) dest;
3165 i = 8;
3166 while (i--)
3167 *cdest++ = *csrc++;
3168}
3169
3170static int
fba45db2 3171threadmatch (threadref *dest, threadref *src)
c906108c 3172{
23860348 3173 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
3174#if 0
3175 unsigned char *srcp, *destp;
3176 int i, result;
3177 srcp = (char *) src;
3178 destp = (char *) dest;
3179
3180 result = 1;
3181 while (i-- > 0)
3182 result &= (*srcp++ == *destp++) ? 1 : 0;
3183 return result;
3184#endif
3185 return 1;
3186}
3187
3188/*
c5aa993b
JM
3189 threadid:1, # always request threadid
3190 context_exists:2,
3191 display:4,
3192 unique_name:8,
3193 more_display:16
3194 */
c906108c
SS
3195
3196/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3197
3198static char *
fba45db2 3199pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 3200{
23860348
MS
3201 *pkt++ = 'q'; /* Info Query */
3202 *pkt++ = 'P'; /* process or thread info */
3203 pkt = pack_int (pkt, mode); /* mode */
c906108c 3204 pkt = pack_threadid (pkt, id); /* threadid */
23860348 3205 *pkt = '\0'; /* terminate */
c906108c
SS
3206 return pkt;
3207}
3208
23860348 3209/* These values tag the fields in a thread info response packet. */
c906108c 3210/* Tagging the fields allows us to request specific fields and to
23860348 3211 add more fields as time goes by. */
c906108c 3212
23860348 3213#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 3214#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 3215 fetch registers and its stack? */
c5aa993b 3216#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 3217#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 3218#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 3219 the process. */
c906108c 3220
6b8edb51
PA
3221int
3222remote_target::remote_unpack_thread_info_response (char *pkt,
3223 threadref *expectedref,
3224 gdb_ext_thread_info *info)
c906108c 3225{
d01949b6 3226 struct remote_state *rs = get_remote_state ();
c906108c 3227 int mask, length;
cfd77fa1 3228 int tag;
c906108c 3229 threadref ref;
8d64371b 3230 char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */
c906108c
SS
3231 int retval = 1;
3232
23860348 3233 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
3234 info->active = 0;
3235 info->display[0] = '\0';
3236 info->shortname[0] = '\0';
3237 info->more_display[0] = '\0';
3238
23860348
MS
3239 /* Assume the characters indicating the packet type have been
3240 stripped. */
c906108c
SS
3241 pkt = unpack_int (pkt, &mask); /* arg mask */
3242 pkt = unpack_threadid (pkt, &ref);
3243
3244 if (mask == 0)
8a3fe4f8 3245 warning (_("Incomplete response to threadinfo request."));
c906108c 3246 if (!threadmatch (&ref, expectedref))
23860348 3247 { /* This is an answer to a different request. */
8a3fe4f8 3248 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
3249 return 0;
3250 }
3251 copy_threadref (&info->threadid, &ref);
3252
405feb71 3253 /* Loop on tagged fields , try to bail if something goes wrong. */
c906108c 3254
23860348
MS
3255 /* Packets are terminated with nulls. */
3256 while ((pkt < limit) && mask && *pkt)
c906108c
SS
3257 {
3258 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
3259 pkt = unpack_byte (pkt, &length); /* length */
3260 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 3261 {
8a3fe4f8 3262 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
3263 retval = 0;
3264 break;
3265 }
3266 if (tag == TAG_THREADID)
3267 {
3268 if (length != 16)
3269 {
8a3fe4f8 3270 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
3271 retval = 0;
3272 break;
3273 }
3274 pkt = unpack_threadid (pkt, &ref);
3275 mask = mask & ~TAG_THREADID;
3276 continue;
3277 }
3278 if (tag == TAG_EXISTS)
3279 {
3280 info->active = stub_unpack_int (pkt, length);
3281 pkt += length;
3282 mask = mask & ~(TAG_EXISTS);
3283 if (length > 8)
3284 {
8a3fe4f8 3285 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
3286 retval = 0;
3287 break;
3288 }
3289 continue;
3290 }
3291 if (tag == TAG_THREADNAME)
3292 {
3293 pkt = unpack_string (pkt, &info->shortname[0], length);
3294 mask = mask & ~TAG_THREADNAME;
3295 continue;
3296 }
3297 if (tag == TAG_DISPLAY)
3298 {
3299 pkt = unpack_string (pkt, &info->display[0], length);
3300 mask = mask & ~TAG_DISPLAY;
3301 continue;
3302 }
3303 if (tag == TAG_MOREDISPLAY)
3304 {
3305 pkt = unpack_string (pkt, &info->more_display[0], length);
3306 mask = mask & ~TAG_MOREDISPLAY;
3307 continue;
3308 }
8a3fe4f8 3309 warning (_("ERROR RMT: unknown thread info tag."));
23860348 3310 break; /* Not a tag we know about. */
c906108c
SS
3311 }
3312 return retval;
3313}
3314
6b8edb51
PA
3315int
3316remote_target::remote_get_threadinfo (threadref *threadid,
3317 int fieldset,
3318 gdb_ext_thread_info *info)
c906108c 3319{
d01949b6 3320 struct remote_state *rs = get_remote_state ();
c906108c 3321 int result;
c906108c 3322
8d64371b 3323 pack_threadinfo_request (rs->buf.data (), fieldset, threadid);
2e9f7625 3324 putpkt (rs->buf);
8d64371b 3325 getpkt (&rs->buf, 0);
3084dd77
PA
3326
3327 if (rs->buf[0] == '\0')
3328 return 0;
3329
8d64371b 3330 result = remote_unpack_thread_info_response (&rs->buf[2],
23860348 3331 threadid, info);
c906108c
SS
3332 return result;
3333}
3334
c906108c
SS
3335/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3336
3337static char *
fba45db2
KB
3338pack_threadlist_request (char *pkt, int startflag, int threadcount,
3339 threadref *nextthread)
c906108c
SS
3340{
3341 *pkt++ = 'q'; /* info query packet */
3342 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 3343 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
3344 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3345 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3346 *pkt = '\0';
3347 return pkt;
3348}
3349
3350/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3351
6b8edb51
PA
3352int
3353remote_target::parse_threadlist_response (char *pkt, int result_limit,
3354 threadref *original_echo,
3355 threadref *resultlist,
3356 int *doneflag)
c906108c 3357{
d01949b6 3358 struct remote_state *rs = get_remote_state ();
c906108c
SS
3359 char *limit;
3360 int count, resultcount, done;
3361
3362 resultcount = 0;
3363 /* Assume the 'q' and 'M chars have been stripped. */
8d64371b 3364 limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE);
23860348 3365 /* done parse past here */
c906108c
SS
3366 pkt = unpack_byte (pkt, &count); /* count field */
3367 pkt = unpack_nibble (pkt, &done);
3368 /* The first threadid is the argument threadid. */
3369 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3370 while ((count-- > 0) && (pkt < limit))
3371 {
3372 pkt = unpack_threadid (pkt, resultlist++);
3373 if (resultcount++ >= result_limit)
3374 break;
3375 }
3376 if (doneflag)
3377 *doneflag = done;
3378 return resultcount;
3379}
3380
6dc54d91
PA
3381/* Fetch the next batch of threads from the remote. Returns -1 if the
3382 qL packet is not supported, 0 on error and 1 on success. */
3383
6b8edb51
PA
3384int
3385remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3386 int result_limit, int *done, int *result_count,
3387 threadref *threadlist)
c906108c 3388{
d01949b6 3389 struct remote_state *rs = get_remote_state ();
c906108c
SS
3390 int result = 1;
3391
405feb71 3392 /* Truncate result limit to be smaller than the packet size. */
3e43a32a
MS
3393 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3394 >= get_remote_packet_size ())
ea9c271d 3395 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 3396
8d64371b
TT
3397 pack_threadlist_request (rs->buf.data (), startflag, result_limit,
3398 nextthread);
6d820c5c 3399 putpkt (rs->buf);
8d64371b
TT
3400 getpkt (&rs->buf, 0);
3401 if (rs->buf[0] == '\0')
6dc54d91
PA
3402 {
3403 /* Packet not supported. */
3404 return -1;
3405 }
3406
3407 *result_count =
8d64371b 3408 parse_threadlist_response (&rs->buf[2], result_limit,
6dc54d91 3409 &rs->echo_nextthread, threadlist, done);
c906108c 3410
0d031856 3411 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 3412 {
23860348 3413 /* FIXME: This is a good reason to drop the packet. */
405feb71
TV
3414 /* Possibly, there is a duplicate response. */
3415 /* Possibilities :
c906108c
SS
3416 retransmit immediatly - race conditions
3417 retransmit after timeout - yes
3418 exit
3419 wait for packet, then exit
3420 */
8a3fe4f8 3421 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 3422 return 0; /* I choose simply exiting. */
c906108c
SS
3423 }
3424 if (*result_count <= 0)
3425 {
3426 if (*done != 1)
3427 {
8a3fe4f8 3428 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
3429 result = 0;
3430 }
3431 return result; /* break; */
3432 }
3433 if (*result_count > result_limit)
3434 {
3435 *result_count = 0;
8a3fe4f8 3436 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
3437 return 0;
3438 }
3439 return result;
3440}
3441
6dc54d91
PA
3442/* Fetch the list of remote threads, with the qL packet, and call
3443 STEPFUNCTION for each thread found. Stops iterating and returns 1
3444 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3445 STEPFUNCTION returns false. If the packet is not supported,
3446 returns -1. */
c906108c 3447
6b8edb51
PA
3448int
3449remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3450 void *context, int looplimit)
c906108c 3451{
0d031856 3452 struct remote_state *rs = get_remote_state ();
c906108c
SS
3453 int done, i, result_count;
3454 int startflag = 1;
3455 int result = 1;
3456 int loopcount = 0;
c906108c
SS
3457
3458 done = 0;
3459 while (!done)
3460 {
3461 if (loopcount++ > looplimit)
3462 {
3463 result = 0;
8a3fe4f8 3464 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
3465 break;
3466 }
6dc54d91
PA
3467 result = remote_get_threadlist (startflag, &rs->nextthread,
3468 MAXTHREADLISTRESULTS,
3469 &done, &result_count,
3470 rs->resultthreadlist);
3471 if (result <= 0)
3472 break;
23860348 3473 /* Clear for later iterations. */
c906108c
SS
3474 startflag = 0;
3475 /* Setup to resume next batch of thread references, set nextthread. */
3476 if (result_count >= 1)
0d031856
TT
3477 copy_threadref (&rs->nextthread,
3478 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
3479 i = 0;
3480 while (result_count--)
6dc54d91
PA
3481 {
3482 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3483 {
3484 result = 0;
3485 break;
3486 }
3487 }
c906108c
SS
3488 }
3489 return result;
3490}
3491
6dc54d91
PA
3492/* A thread found on the remote target. */
3493
21fe1c75 3494struct thread_item
6dc54d91 3495{
21fe1c75
SM
3496 explicit thread_item (ptid_t ptid_)
3497 : ptid (ptid_)
3498 {}
3499
3500 thread_item (thread_item &&other) = default;
3501 thread_item &operator= (thread_item &&other) = default;
3502
3503 DISABLE_COPY_AND_ASSIGN (thread_item);
3504
6dc54d91
PA
3505 /* The thread's PTID. */
3506 ptid_t ptid;
3507
21fe1c75
SM
3508 /* The thread's extra info. */
3509 std::string extra;
6dc54d91 3510
21fe1c75
SM
3511 /* The thread's name. */
3512 std::string name;
79efa585 3513
6dc54d91 3514 /* The core the thread was running on. -1 if not known. */
21fe1c75 3515 int core = -1;
f6327dcb
KB
3516
3517 /* The thread handle associated with the thread. */
21fe1c75 3518 gdb::byte_vector thread_handle;
21fe1c75 3519};
6dc54d91
PA
3520
3521/* Context passed around to the various methods listing remote
3522 threads. As new threads are found, they're added to the ITEMS
3523 vector. */
3524
3525struct threads_listing_context
3526{
21fe1c75
SM
3527 /* Return true if this object contains an entry for a thread with ptid
3528 PTID. */
6dc54d91 3529
21fe1c75
SM
3530 bool contains_thread (ptid_t ptid) const
3531 {
3532 auto match_ptid = [&] (const thread_item &item)
3533 {
3534 return item.ptid == ptid;
3535 };
80134cf5 3536
21fe1c75
SM
3537 auto it = std::find_if (this->items.begin (),
3538 this->items.end (),
3539 match_ptid);
80134cf5 3540
21fe1c75
SM
3541 return it != this->items.end ();
3542 }
80134cf5 3543
21fe1c75 3544 /* Remove the thread with ptid PTID. */
80134cf5 3545
21fe1c75
SM
3546 void remove_thread (ptid_t ptid)
3547 {
3548 auto match_ptid = [&] (const thread_item &item)
3549 {
3550 return item.ptid == ptid;
3551 };
cbb8991c 3552
21fe1c75
SM
3553 auto it = std::remove_if (this->items.begin (),
3554 this->items.end (),
3555 match_ptid);
cbb8991c 3556
21fe1c75
SM
3557 if (it != this->items.end ())
3558 this->items.erase (it);
3559 }
3560
3561 /* The threads found on the remote target. */
3562 std::vector<thread_item> items;
3563};
cbb8991c 3564
c906108c 3565static int
6dc54d91 3566remote_newthread_step (threadref *ref, void *data)
c906108c 3567{
19ba03f4
SM
3568 struct threads_listing_context *context
3569 = (struct threads_listing_context *) data;
21fe1c75
SM
3570 int pid = inferior_ptid.pid ();
3571 int lwp = threadref_to_int (ref);
3572 ptid_t ptid (pid, lwp);
6dc54d91 3573
21fe1c75 3574 context->items.emplace_back (ptid);
6dc54d91 3575
c906108c
SS
3576 return 1; /* continue iterator */
3577}
3578
3579#define CRAZY_MAX_THREADS 1000
3580
6b8edb51
PA
3581ptid_t
3582remote_target::remote_current_thread (ptid_t oldpid)
c906108c 3583{
d01949b6 3584 struct remote_state *rs = get_remote_state ();
c906108c
SS
3585
3586 putpkt ("qC");
8d64371b 3587 getpkt (&rs->buf, 0);
2e9f7625 3588 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34 3589 {
256642e8 3590 const char *obuf;
c9f35b34
KB
3591 ptid_t result;
3592
3593 result = read_ptid (&rs->buf[2], &obuf);
3594 if (*obuf != '\0' && remote_debug)
3595 fprintf_unfiltered (gdb_stdlog,
3596 "warning: garbage in qC reply\n");
3597
3598 return result;
3599 }
c906108c
SS
3600 else
3601 return oldpid;
3602}
3603
6dc54d91 3604/* List remote threads using the deprecated qL packet. */
cce74817 3605
6b8edb51
PA
3606int
3607remote_target::remote_get_threads_with_ql (threads_listing_context *context)
c906108c 3608{
6dc54d91
PA
3609 if (remote_threadlist_iterator (remote_newthread_step, context,
3610 CRAZY_MAX_THREADS) >= 0)
3611 return 1;
3612
3613 return 0;
c906108c
SS
3614}
3615
dc146f7c
VP
3616#if defined(HAVE_LIBEXPAT)
3617
dc146f7c
VP
3618static void
3619start_thread (struct gdb_xml_parser *parser,
3620 const struct gdb_xml_element *element,
4d0fdd9b
SM
3621 void *user_data,
3622 std::vector<gdb_xml_value> &attributes)
dc146f7c 3623{
19ba03f4
SM
3624 struct threads_listing_context *data
3625 = (struct threads_listing_context *) user_data;
3d2c1d41 3626 struct gdb_xml_value *attr;
dc146f7c 3627
4d0fdd9b 3628 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
21fe1c75
SM
3629 ptid_t ptid = read_ptid (id, NULL);
3630
3631 data->items.emplace_back (ptid);
3632 thread_item &item = data->items.back ();
dc146f7c 3633
3d2c1d41
PA
3634 attr = xml_find_attribute (attributes, "core");
3635 if (attr != NULL)
4d0fdd9b 3636 item.core = *(ULONGEST *) attr->value.get ();
dc146f7c 3637
79efa585 3638 attr = xml_find_attribute (attributes, "name");
21fe1c75 3639 if (attr != NULL)
4d0fdd9b 3640 item.name = (const char *) attr->value.get ();
79efa585 3641
f6327dcb
KB
3642 attr = xml_find_attribute (attributes, "handle");
3643 if (attr != NULL)
4d0fdd9b 3644 item.thread_handle = hex2bin ((const char *) attr->value.get ());
dc146f7c
VP
3645}
3646
3647static void
3648end_thread (struct gdb_xml_parser *parser,
3649 const struct gdb_xml_element *element,
3650 void *user_data, const char *body_text)
3651{
19ba03f4
SM
3652 struct threads_listing_context *data
3653 = (struct threads_listing_context *) user_data;
dc146f7c 3654
21fe1c75
SM
3655 if (body_text != NULL && *body_text != '\0')
3656 data->items.back ().extra = body_text;
dc146f7c
VP
3657}
3658
3659const struct gdb_xml_attribute thread_attributes[] = {
3660 { "id", GDB_XML_AF_NONE, NULL, NULL },
3661 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3662 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
f6327dcb 3663 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3664 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3665};
3666
3667const struct gdb_xml_element thread_children[] = {
3668 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3669};
3670
3671const struct gdb_xml_element threads_children[] = {
3672 { "thread", thread_attributes, thread_children,
3673 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3674 start_thread, end_thread },
3675 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3676};
3677
3678const struct gdb_xml_element threads_elements[] = {
3679 { "threads", NULL, threads_children,
3680 GDB_XML_EF_NONE, NULL, NULL },
3681 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3682};
3683
3684#endif
3685
6dc54d91 3686/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3687
6b8edb51
PA
3688int
3689remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
0f71a2f6 3690{
dc146f7c 3691#if defined(HAVE_LIBEXPAT)
4082afcc 3692 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3693 {
9018be22 3694 gdb::optional<gdb::char_vector> xml
6b8edb51 3695 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
efc0eabd 3696
9018be22 3697 if (xml && (*xml)[0] != '\0')
dc146f7c 3698 {
6dc54d91 3699 gdb_xml_parse_quick (_("threads"), "threads.dtd",
9018be22 3700 threads_elements, xml->data (), context);
dc146f7c
VP
3701 }
3702
6dc54d91 3703 return 1;
dc146f7c
VP
3704 }
3705#endif
3706
6dc54d91
PA
3707 return 0;
3708}
3709
3710/* List remote threads using qfThreadInfo/qsThreadInfo. */
3711
6b8edb51
PA
3712int
3713remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
6dc54d91
PA
3714{
3715 struct remote_state *rs = get_remote_state ();
3716
b80fafe3 3717 if (rs->use_threadinfo_query)
9d1f7ab2 3718 {
256642e8 3719 const char *bufp;
6dc54d91 3720
9d1f7ab2 3721 putpkt ("qfThreadInfo");
8d64371b
TT
3722 getpkt (&rs->buf, 0);
3723 bufp = rs->buf.data ();
9d1f7ab2 3724 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3725 {
9d1f7ab2
MS
3726 while (*bufp++ == 'm') /* reply contains one or more TID */
3727 {
3728 do
3729 {
21fe1c75
SM
3730 ptid_t ptid = read_ptid (bufp, &bufp);
3731 context->items.emplace_back (ptid);
9d1f7ab2
MS
3732 }
3733 while (*bufp++ == ','); /* comma-separated list */
3734 putpkt ("qsThreadInfo");
8d64371b
TT
3735 getpkt (&rs->buf, 0);
3736 bufp = rs->buf.data ();
9d1f7ab2 3737 }
6dc54d91
PA
3738 return 1;
3739 }
3740 else
3741 {
3742 /* Packet not recognized. */
3743 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3744 }
3745 }
3746
6dc54d91
PA
3747 return 0;
3748}
3749
e8032dde 3750/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3751 targets. */
3752
f6ac5f3d
PA
3753void
3754remote_target::update_thread_list ()
6dc54d91 3755{
6dc54d91 3756 struct threads_listing_context context;
ab970af1 3757 int got_list = 0;
e8032dde 3758
6dc54d91
PA
3759 /* We have a few different mechanisms to fetch the thread list. Try
3760 them all, starting with the most preferred one first, falling
3761 back to older methods. */
6b8edb51
PA
3762 if (remote_get_threads_with_qxfer (&context)
3763 || remote_get_threads_with_qthreadinfo (&context)
3764 || remote_get_threads_with_ql (&context))
6dc54d91 3765 {
ab970af1
PA
3766 got_list = 1;
3767
21fe1c75 3768 if (context.items.empty ()
f6ac5f3d 3769 && remote_thread_always_alive (inferior_ptid))
7d1a114c
PA
3770 {
3771 /* Some targets don't really support threads, but still
3772 reply an (empty) thread list in response to the thread
3773 listing packets, instead of replying "packet not
3774 supported". Exit early so we don't delete the main
3775 thread. */
7d1a114c
PA
3776 return;
3777 }
3778
ab970af1
PA
3779 /* CONTEXT now holds the current thread list on the remote
3780 target end. Delete GDB-side threads no longer found on the
3781 target. */
08036331 3782 for (thread_info *tp : all_threads_safe ())
cbb8991c 3783 {
21fe1c75 3784 if (!context.contains_thread (tp->ptid))
ab970af1
PA
3785 {
3786 /* Not found. */
00431a78 3787 delete_thread (tp);
ab970af1 3788 }
cbb8991c
DB
3789 }
3790
3791 /* Remove any unreported fork child threads from CONTEXT so
3792 that we don't interfere with follow fork, which is where
3793 creation of such threads is handled. */
3794 remove_new_fork_children (&context);
74531fed 3795
ab970af1 3796 /* And now add threads we don't know about yet to our list. */
21fe1c75 3797 for (thread_item &item : context.items)
6dc54d91 3798 {
21fe1c75 3799 if (item.ptid != null_ptid)
6dc54d91 3800 {
6dc54d91 3801 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3802 executing until proven otherwise with a stop reply.
3803 In all-stop, we can only get here if all threads are
6dc54d91 3804 stopped. */
0d5b594f 3805 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3806
21fe1c75 3807 remote_notice_new_inferior (item.ptid, executing);
6dc54d91 3808
08036331 3809 thread_info *tp = find_thread_ptid (item.ptid);
00431a78 3810 remote_thread_info *info = get_remote_thread_info (tp);
21fe1c75 3811 info->core = item.core;
7aabaf9d
SM
3812 info->extra = std::move (item.extra);
3813 info->name = std::move (item.name);
3814 info->thread_handle = std::move (item.thread_handle);
6dc54d91
PA
3815 }
3816 }
3817 }
3818
ab970af1
PA
3819 if (!got_list)
3820 {
3821 /* If no thread listing method is supported, then query whether
3822 each known thread is alive, one by one, with the T packet.
3823 If the target doesn't support threads at all, then this is a
3824 no-op. See remote_thread_alive. */
3825 prune_threads ();
3826 }
9d1f7ab2
MS
3827}
3828
802188a7 3829/*
9d1f7ab2
MS
3830 * Collect a descriptive string about the given thread.
3831 * The target may say anything it wants to about the thread
3832 * (typically info about its blocked / runnable state, name, etc.).
3833 * This string will appear in the info threads display.
802188a7 3834 *
9d1f7ab2
MS
3835 * Optional: targets are not required to implement this function.
3836 */
3837
f6ac5f3d
PA
3838const char *
3839remote_target::extra_thread_info (thread_info *tp)
9d1f7ab2 3840{
d01949b6 3841 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3842 int set;
3843 threadref id;
3844 struct gdb_ext_thread_info threadinfo;
9d1f7ab2 3845
5d93a237 3846 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3847 internal_error (__FILE__, __LINE__,
e2e0b3e5 3848 _("remote_threads_extra_info"));
9d1f7ab2 3849
d7e15655 3850 if (tp->ptid == magic_null_ptid
e38504b3 3851 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
60e569b9
PA
3852 /* This is the main thread which was added by GDB. The remote
3853 server doesn't know about it. */
3854 return NULL;
3855
c76a8ea3
PA
3856 std::string &extra = get_remote_thread_info (tp)->extra;
3857
3858 /* If already have cached info, use it. */
3859 if (!extra.empty ())
3860 return extra.c_str ();
3861
4082afcc 3862 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3863 {
c76a8ea3
PA
3864 /* If we're using qXfer:threads:read, then the extra info is
3865 included in the XML. So if we didn't have anything cached,
3866 it's because there's really no extra info. */
3867 return NULL;
dc146f7c
VP
3868 }
3869
b80fafe3 3870 if (rs->use_threadextra_query)
9d1f7ab2 3871 {
8d64371b
TT
3872 char *b = rs->buf.data ();
3873 char *endb = b + get_remote_packet_size ();
82f73884
PA
3874
3875 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3876 b += strlen (b);
3877 write_ptid (b, endb, tp->ptid);
3878
2e9f7625 3879 putpkt (rs->buf);
8d64371b 3880 getpkt (&rs->buf, 0);
2e9f7625 3881 if (rs->buf[0] != 0)
9d1f7ab2 3882 {
8d64371b
TT
3883 extra.resize (strlen (rs->buf.data ()) / 2);
3884 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ());
c76a8ea3 3885 return extra.c_str ();
9d1f7ab2 3886 }
0f71a2f6 3887 }
9d1f7ab2
MS
3888
3889 /* If the above query fails, fall back to the old method. */
b80fafe3 3890 rs->use_threadextra_query = 0;
9d1f7ab2
MS
3891 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3892 | TAG_MOREDISPLAY | TAG_DISPLAY;
e38504b3 3893 int_to_threadref (&id, tp->ptid.lwp ());
9d1f7ab2
MS
3894 if (remote_get_threadinfo (&id, set, &threadinfo))
3895 if (threadinfo.active)
0f71a2f6 3896 {
9d1f7ab2 3897 if (*threadinfo.shortname)
c76a8ea3 3898 string_appendf (extra, " Name: %s", threadinfo.shortname);
9d1f7ab2 3899 if (*threadinfo.display)
c76a8ea3
PA
3900 {
3901 if (!extra.empty ())
3902 extra += ',';
3903 string_appendf (extra, " State: %s", threadinfo.display);
3904 }
9d1f7ab2 3905 if (*threadinfo.more_display)
c5aa993b 3906 {
c76a8ea3
PA
3907 if (!extra.empty ())
3908 extra += ',';
3909 string_appendf (extra, " Priority: %s", threadinfo.more_display);
c5aa993b 3910 }
c76a8ea3 3911 return extra.c_str ();
0f71a2f6 3912 }
9d1f7ab2 3913 return NULL;
0f71a2f6 3914}
c906108c 3915\f
c5aa993b 3916
f6ac5f3d
PA
3917bool
3918remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
3919 struct static_tracepoint_marker *marker)
0fb4aa4b
PA
3920{
3921 struct remote_state *rs = get_remote_state ();
8d64371b 3922 char *p = rs->buf.data ();
0fb4aa4b 3923
bba74b36 3924 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
3925 p += strlen (p);
3926 p += hexnumstr (p, addr);
3927 putpkt (rs->buf);
8d64371b
TT
3928 getpkt (&rs->buf, 0);
3929 p = rs->buf.data ();
0fb4aa4b
PA
3930
3931 if (*p == 'E')
3932 error (_("Remote failure reply: %s"), p);
3933
3934 if (*p++ == 'm')
3935 {
256642e8 3936 parse_static_tracepoint_marker_definition (p, NULL, marker);
5d9310c4 3937 return true;
0fb4aa4b
PA
3938 }
3939
5d9310c4 3940 return false;
0fb4aa4b
PA
3941}
3942
f6ac5f3d
PA
3943std::vector<static_tracepoint_marker>
3944remote_target::static_tracepoint_markers_by_strid (const char *strid)
0fb4aa4b
PA
3945{
3946 struct remote_state *rs = get_remote_state ();
5d9310c4 3947 std::vector<static_tracepoint_marker> markers;
256642e8 3948 const char *p;
5d9310c4 3949 static_tracepoint_marker marker;
0fb4aa4b
PA
3950
3951 /* Ask for a first packet of static tracepoint marker
3952 definition. */
3953 putpkt ("qTfSTM");
8d64371b
TT
3954 getpkt (&rs->buf, 0);
3955 p = rs->buf.data ();
0fb4aa4b
PA
3956 if (*p == 'E')
3957 error (_("Remote failure reply: %s"), p);
3958
0fb4aa4b
PA
3959 while (*p++ == 'm')
3960 {
0fb4aa4b
PA
3961 do
3962 {
5d9310c4 3963 parse_static_tracepoint_marker_definition (p, &p, &marker);
0fb4aa4b 3964
5d9310c4
SM
3965 if (strid == NULL || marker.str_id == strid)
3966 markers.push_back (std::move (marker));
0fb4aa4b
PA
3967 }
3968 while (*p++ == ','); /* comma-separated list */
3969 /* Ask for another packet of static tracepoint definition. */
3970 putpkt ("qTsSTM");
8d64371b
TT
3971 getpkt (&rs->buf, 0);
3972 p = rs->buf.data ();
0fb4aa4b
PA
3973 }
3974
0fb4aa4b
PA
3975 return markers;
3976}
3977
3978\f
10760264
JB
3979/* Implement the to_get_ada_task_ptid function for the remote targets. */
3980
f6ac5f3d
PA
3981ptid_t
3982remote_target::get_ada_task_ptid (long lwp, long thread)
10760264 3983{
e99b03dc 3984 return ptid_t (inferior_ptid.pid (), lwp, 0);
10760264
JB
3985}
3986\f
3987
24b06219 3988/* Restart the remote side; this is an extended protocol operation. */
c906108c 3989
6b8edb51
PA
3990void
3991remote_target::extended_remote_restart ()
c906108c 3992{
d01949b6 3993 struct remote_state *rs = get_remote_state ();
c906108c
SS
3994
3995 /* Send the restart command; for reasons I don't understand the
3996 remote side really expects a number after the "R". */
8d64371b 3997 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0);
6d820c5c 3998 putpkt (rs->buf);
c906108c 3999
ad9a8f3f 4000 remote_fileio_reset ();
c906108c
SS
4001}
4002\f
4003/* Clean up connection to a remote debugger. */
4004
f6ac5f3d
PA
4005void
4006remote_target::close ()
c906108c 4007{
048094ac 4008 /* Make sure we leave stdin registered in the event loop. */
f6ac5f3d 4009 terminal_ours ();
ce5ce7ed 4010
ce5ce7ed 4011 /* We don't have a connection to the remote stub anymore. Get rid
f67fd822
PM
4012 of all the inferiors and their threads we were controlling.
4013 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
4014 will be unable to find the thread corresponding to (pid, 0, 0). */
0f2caa1b 4015 inferior_ptid = null_ptid;
f67fd822 4016 discard_all_inferiors ();
ce5ce7ed 4017
6b8edb51
PA
4018 trace_reset_local_state ();
4019
4020 delete this;
4021}
4022
4023remote_target::~remote_target ()
4024{
4025 struct remote_state *rs = get_remote_state ();
4026
4027 /* Check for NULL because we may get here with a partially
4028 constructed target/connection. */
4029 if (rs->remote_desc == nullptr)
4030 return;
4031
4032 serial_close (rs->remote_desc);
4033
4034 /* We are destroying the remote target, so we should discard
f48ff2a7 4035 everything of this target. */
6b8edb51 4036 discard_pending_stop_replies_in_queue ();
74531fed 4037
6b8edb51
PA
4038 if (rs->remote_async_inferior_event_token)
4039 delete_async_event_handler (&rs->remote_async_inferior_event_token);
722247f1 4040
97dfbadd 4041 delete rs->notif_state;
c906108c
SS
4042}
4043
23860348 4044/* Query the remote side for the text, data and bss offsets. */
c906108c 4045
6b8edb51
PA
4046void
4047remote_target::get_offsets ()
c906108c 4048{
d01949b6 4049 struct remote_state *rs = get_remote_state ();
2e9f7625 4050 char *buf;
085dd6e6 4051 char *ptr;
31d99776
DJ
4052 int lose, num_segments = 0, do_sections, do_segments;
4053 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 4054 struct section_offsets *offs;
31d99776
DJ
4055 struct symfile_segment_data *data;
4056
4057 if (symfile_objfile == NULL)
4058 return;
c906108c
SS
4059
4060 putpkt ("qOffsets");
8d64371b
TT
4061 getpkt (&rs->buf, 0);
4062 buf = rs->buf.data ();
c906108c
SS
4063
4064 if (buf[0] == '\000')
4065 return; /* Return silently. Stub doesn't support
23860348 4066 this command. */
c906108c
SS
4067 if (buf[0] == 'E')
4068 {
8a3fe4f8 4069 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
4070 return;
4071 }
4072
4073 /* Pick up each field in turn. This used to be done with scanf, but
4074 scanf will make trouble if CORE_ADDR size doesn't match
4075 conversion directives correctly. The following code will work
4076 with any size of CORE_ADDR. */
4077 text_addr = data_addr = bss_addr = 0;
4078 ptr = buf;
4079 lose = 0;
4080
61012eef 4081 if (startswith (ptr, "Text="))
c906108c
SS
4082 {
4083 ptr += 5;
4084 /* Don't use strtol, could lose on big values. */
4085 while (*ptr && *ptr != ';')
4086 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 4087
61012eef 4088 if (startswith (ptr, ";Data="))
31d99776
DJ
4089 {
4090 ptr += 6;
4091 while (*ptr && *ptr != ';')
4092 data_addr = (data_addr << 4) + fromhex (*ptr++);
4093 }
4094 else
4095 lose = 1;
4096
61012eef 4097 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
4098 {
4099 ptr += 5;
4100 while (*ptr && *ptr != ';')
4101 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 4102
31d99776
DJ
4103 if (bss_addr != data_addr)
4104 warning (_("Target reported unsupported offsets: %s"), buf);
4105 }
4106 else
4107 lose = 1;
4108 }
61012eef 4109 else if (startswith (ptr, "TextSeg="))
c906108c 4110 {
31d99776
DJ
4111 ptr += 8;
4112 /* Don't use strtol, could lose on big values. */
c906108c 4113 while (*ptr && *ptr != ';')
31d99776
DJ
4114 text_addr = (text_addr << 4) + fromhex (*ptr++);
4115 num_segments = 1;
4116
61012eef 4117 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
4118 {
4119 ptr += 9;
4120 while (*ptr && *ptr != ';')
4121 data_addr = (data_addr << 4) + fromhex (*ptr++);
4122 num_segments++;
4123 }
c906108c
SS
4124 }
4125 else
4126 lose = 1;
4127
4128 if (lose)
8a3fe4f8 4129 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
4130 else if (*ptr != '\0')
4131 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 4132
802188a7 4133 offs = ((struct section_offsets *)
a39a16c4 4134 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 4135 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 4136 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 4137
31d99776
DJ
4138 data = get_symfile_segment_data (symfile_objfile->obfd);
4139 do_segments = (data != NULL);
4140 do_sections = num_segments == 0;
c906108c 4141
28c32713 4142 if (num_segments > 0)
31d99776 4143 {
31d99776
DJ
4144 segments[0] = text_addr;
4145 segments[1] = data_addr;
4146 }
28c32713
JB
4147 /* If we have two segments, we can still try to relocate everything
4148 by assuming that the .text and .data offsets apply to the whole
4149 text and data segments. Convert the offsets given in the packet
4150 to base addresses for symfile_map_offsets_to_segments. */
4151 else if (data && data->num_segments == 2)
4152 {
4153 segments[0] = data->segment_bases[0] + text_addr;
4154 segments[1] = data->segment_bases[1] + data_addr;
4155 num_segments = 2;
4156 }
8d385431
DJ
4157 /* If the object file has only one segment, assume that it is text
4158 rather than data; main programs with no writable data are rare,
4159 but programs with no code are useless. Of course the code might
4160 have ended up in the data segment... to detect that we would need
4161 the permissions here. */
4162 else if (data && data->num_segments == 1)
4163 {
4164 segments[0] = data->segment_bases[0] + text_addr;
4165 num_segments = 1;
4166 }
28c32713
JB
4167 /* There's no way to relocate by segment. */
4168 else
4169 do_segments = 0;
31d99776
DJ
4170
4171 if (do_segments)
4172 {
4173 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
4174 offs, num_segments, segments);
4175
4176 if (ret == 0 && !do_sections)
3e43a32a
MS
4177 error (_("Can not handle qOffsets TextSeg "
4178 "response with this symbol file"));
31d99776
DJ
4179
4180 if (ret > 0)
4181 do_sections = 0;
4182 }
c906108c 4183
9ef895d6
DJ
4184 if (data)
4185 free_symfile_segment_data (data);
31d99776
DJ
4186
4187 if (do_sections)
4188 {
4189 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
4190
3e43a32a
MS
4191 /* This is a temporary kludge to force data and bss to use the
4192 same offsets because that's what nlmconv does now. The real
4193 solution requires changes to the stub and remote.c that I
4194 don't have time to do right now. */
31d99776
DJ
4195
4196 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
4197 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
4198 }
c906108c
SS
4199
4200 objfile_relocate (symfile_objfile, offs);
4201}
4202
9a7071a8 4203/* Send interrupt_sequence to remote target. */
6b8edb51
PA
4204
4205void
4206remote_target::send_interrupt_sequence ()
9a7071a8 4207{
5d93a237
TT
4208 struct remote_state *rs = get_remote_state ();
4209
9a7071a8 4210 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 4211 remote_serial_write ("\x03", 1);
9a7071a8 4212 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 4213 serial_send_break (rs->remote_desc);
9a7071a8
JB
4214 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4215 {
5d93a237 4216 serial_send_break (rs->remote_desc);
c33e31fd 4217 remote_serial_write ("g", 1);
9a7071a8
JB
4218 }
4219 else
4220 internal_error (__FILE__, __LINE__,
4221 _("Invalid value for interrupt_sequence_mode: %s."),
4222 interrupt_sequence_mode);
4223}
4224
3405876a
PA
4225
4226/* If STOP_REPLY is a T stop reply, look for the "thread" register,
4227 and extract the PTID. Returns NULL_PTID if not found. */
4228
4229static ptid_t
4230stop_reply_extract_thread (char *stop_reply)
4231{
4232 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4233 {
256642e8 4234 const char *p;
3405876a
PA
4235
4236 /* Txx r:val ; r:val (...) */
4237 p = &stop_reply[3];
4238
4239 /* Look for "register" named "thread". */
4240 while (*p != '\0')
4241 {
256642e8 4242 const char *p1;
3405876a
PA
4243
4244 p1 = strchr (p, ':');
4245 if (p1 == NULL)
4246 return null_ptid;
4247
4248 if (strncmp (p, "thread", p1 - p) == 0)
4249 return read_ptid (++p1, &p);
4250
4251 p1 = strchr (p, ';');
4252 if (p1 == NULL)
4253 return null_ptid;
4254 p1++;
4255
4256 p = p1;
4257 }
4258 }
4259
4260 return null_ptid;
4261}
4262
b7ea362b
PA
4263/* Determine the remote side's current thread. If we have a stop
4264 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4265 "thread" register we can extract the current thread from. If not,
4266 ask the remote which is the current thread with qC. The former
4267 method avoids a roundtrip. */
4268
6b8edb51
PA
4269ptid_t
4270remote_target::get_current_thread (char *wait_status)
b7ea362b 4271{
6a49a997 4272 ptid_t ptid = null_ptid;
b7ea362b
PA
4273
4274 /* Note we don't use remote_parse_stop_reply as that makes use of
4275 the target architecture, which we haven't yet fully determined at
4276 this point. */
4277 if (wait_status != NULL)
4278 ptid = stop_reply_extract_thread (wait_status);
d7e15655 4279 if (ptid == null_ptid)
b7ea362b
PA
4280 ptid = remote_current_thread (inferior_ptid);
4281
4282 return ptid;
4283}
4284
49c62f2e
PA
4285/* Query the remote target for which is the current thread/process,
4286 add it to our tables, and update INFERIOR_PTID. The caller is
4287 responsible for setting the state such that the remote end is ready
3405876a
PA
4288 to return the current thread.
4289
4290 This function is called after handling the '?' or 'vRun' packets,
4291 whose response is a stop reply from which we can also try
4292 extracting the thread. If the target doesn't support the explicit
4293 qC query, we infer the current thread from that stop reply, passed
4294 in in WAIT_STATUS, which may be NULL. */
49c62f2e 4295
6b8edb51
PA
4296void
4297remote_target::add_current_inferior_and_thread (char *wait_status)
49c62f2e
PA
4298{
4299 struct remote_state *rs = get_remote_state ();
9ab8741a 4300 bool fake_pid_p = false;
49c62f2e
PA
4301
4302 inferior_ptid = null_ptid;
4303
b7ea362b 4304 /* Now, if we have thread information, update inferior_ptid. */
87215ad1 4305 ptid_t curr_ptid = get_current_thread (wait_status);
3405876a 4306
87215ad1 4307 if (curr_ptid != null_ptid)
49c62f2e
PA
4308 {
4309 if (!remote_multi_process_p (rs))
9ab8741a 4310 fake_pid_p = true;
49c62f2e
PA
4311 }
4312 else
4313 {
4314 /* Without this, some commands which require an active target
4315 (such as kill) won't work. This variable serves (at least)
4316 double duty as both the pid of the target process (if it has
4317 such), and as a flag indicating that a target is active. */
87215ad1 4318 curr_ptid = magic_null_ptid;
9ab8741a 4319 fake_pid_p = true;
49c62f2e
PA
4320 }
4321
e99b03dc 4322 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
49c62f2e 4323
87215ad1
SDJ
4324 /* Add the main thread and switch to it. Don't try reading
4325 registers yet, since we haven't fetched the target description
4326 yet. */
4327 thread_info *tp = add_thread_silent (curr_ptid);
4328 switch_to_thread_no_regs (tp);
49c62f2e
PA
4329}
4330
6efcd9a8
PA
4331/* Print info about a thread that was found already stopped on
4332 connection. */
4333
4334static void
4335print_one_stopped_thread (struct thread_info *thread)
4336{
4337 struct target_waitstatus *ws = &thread->suspend.waitstatus;
4338
00431a78 4339 switch_to_thread (thread);
f2ffa92b 4340 thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
6efcd9a8
PA
4341 set_current_sal_from_frame (get_current_frame ());
4342
4343 thread->suspend.waitstatus_pending_p = 0;
4344
4345 if (ws->kind == TARGET_WAITKIND_STOPPED)
4346 {
4347 enum gdb_signal sig = ws->value.sig;
4348
4349 if (signal_print_state (sig))
76727919 4350 gdb::observers::signal_received.notify (sig);
6efcd9a8 4351 }
76727919 4352 gdb::observers::normal_stop.notify (NULL, 1);
6efcd9a8
PA
4353}
4354
221e1a37
PA
4355/* Process all initial stop replies the remote side sent in response
4356 to the ? packet. These indicate threads that were already stopped
4357 on initial connection. We mark these threads as stopped and print
4358 their current frame before giving the user the prompt. */
4359
6b8edb51
PA
4360void
4361remote_target::process_initial_stop_replies (int from_tty)
221e1a37
PA
4362{
4363 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
4364 struct thread_info *selected = NULL;
4365 struct thread_info *lowest_stopped = NULL;
4366 struct thread_info *first = NULL;
221e1a37
PA
4367
4368 /* Consume the initial pending events. */
4369 while (pending_stop_replies-- > 0)
4370 {
4371 ptid_t waiton_ptid = minus_one_ptid;
4372 ptid_t event_ptid;
4373 struct target_waitstatus ws;
4374 int ignore_event = 0;
4375
4376 memset (&ws, 0, sizeof (ws));
4377 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4378 if (remote_debug)
4379 print_target_wait_results (waiton_ptid, event_ptid, &ws);
4380
4381 switch (ws.kind)
4382 {
4383 case TARGET_WAITKIND_IGNORE:
4384 case TARGET_WAITKIND_NO_RESUMED:
4385 case TARGET_WAITKIND_SIGNALLED:
4386 case TARGET_WAITKIND_EXITED:
4387 /* We shouldn't see these, but if we do, just ignore. */
4388 if (remote_debug)
4389 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
4390 ignore_event = 1;
4391 break;
4392
4393 case TARGET_WAITKIND_EXECD:
4394 xfree (ws.value.execd_pathname);
4395 break;
4396 default:
4397 break;
4398 }
4399
4400 if (ignore_event)
4401 continue;
4402
b926417a 4403 struct thread_info *evthread = find_thread_ptid (event_ptid);
221e1a37
PA
4404
4405 if (ws.kind == TARGET_WAITKIND_STOPPED)
4406 {
4407 enum gdb_signal sig = ws.value.sig;
4408
4409 /* Stubs traditionally report SIGTRAP as initial signal,
4410 instead of signal 0. Suppress it. */
4411 if (sig == GDB_SIGNAL_TRAP)
4412 sig = GDB_SIGNAL_0;
b926417a 4413 evthread->suspend.stop_signal = sig;
6efcd9a8
PA
4414 ws.value.sig = sig;
4415 }
221e1a37 4416
b926417a 4417 evthread->suspend.waitstatus = ws;
6efcd9a8
PA
4418
4419 if (ws.kind != TARGET_WAITKIND_STOPPED
4420 || ws.value.sig != GDB_SIGNAL_0)
b926417a 4421 evthread->suspend.waitstatus_pending_p = 1;
6efcd9a8
PA
4422
4423 set_executing (event_ptid, 0);
4424 set_running (event_ptid, 0);
b926417a 4425 get_remote_thread_info (evthread)->vcont_resumed = 0;
6efcd9a8
PA
4426 }
4427
4428 /* "Notice" the new inferiors before anything related to
4429 registers/memory. */
08036331 4430 for (inferior *inf : all_non_exited_inferiors ())
6efcd9a8 4431 {
6efcd9a8
PA
4432 inf->needs_setup = 1;
4433
4434 if (non_stop)
4435 {
08036331 4436 thread_info *thread = any_live_thread_of_inferior (inf);
00431a78 4437 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
6efcd9a8
PA
4438 from_tty);
4439 }
4440 }
4441
4442 /* If all-stop on top of non-stop, pause all threads. Note this
4443 records the threads' stop pc, so must be done after "noticing"
4444 the inferiors. */
4445 if (!non_stop)
4446 {
4447 stop_all_threads ();
4448
4449 /* If all threads of an inferior were already stopped, we
4450 haven't setup the inferior yet. */
08036331 4451 for (inferior *inf : all_non_exited_inferiors ())
6efcd9a8 4452 {
6efcd9a8
PA
4453 if (inf->needs_setup)
4454 {
08036331 4455 thread_info *thread = any_live_thread_of_inferior (inf);
6efcd9a8
PA
4456 switch_to_thread_no_regs (thread);
4457 setup_inferior (0);
4458 }
4459 }
221e1a37 4460 }
6efcd9a8
PA
4461
4462 /* Now go over all threads that are stopped, and print their current
4463 frame. If all-stop, then if there's a signalled thread, pick
4464 that as current. */
08036331 4465 for (thread_info *thread : all_non_exited_threads ())
6efcd9a8 4466 {
6efcd9a8
PA
4467 if (first == NULL)
4468 first = thread;
4469
4470 if (!non_stop)
00431a78 4471 thread->set_running (false);
6efcd9a8
PA
4472 else if (thread->state != THREAD_STOPPED)
4473 continue;
4474
6efcd9a8
PA
4475 if (selected == NULL
4476 && thread->suspend.waitstatus_pending_p)
4477 selected = thread;
4478
5d5658a1
PA
4479 if (lowest_stopped == NULL
4480 || thread->inf->num < lowest_stopped->inf->num
4481 || thread->per_inf_num < lowest_stopped->per_inf_num)
6efcd9a8
PA
4482 lowest_stopped = thread;
4483
4484 if (non_stop)
4485 print_one_stopped_thread (thread);
4486 }
4487
4488 /* In all-stop, we only print the status of one thread, and leave
4489 others with their status pending. */
4490 if (!non_stop)
4491 {
08036331 4492 thread_info *thread = selected;
6efcd9a8
PA
4493 if (thread == NULL)
4494 thread = lowest_stopped;
4495 if (thread == NULL)
4496 thread = first;
4497
4498 print_one_stopped_thread (thread);
4499 }
4500
4501 /* For "info program". */
08036331 4502 thread_info *thread = inferior_thread ();
6efcd9a8
PA
4503 if (thread->state == THREAD_STOPPED)
4504 set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
221e1a37
PA
4505}
4506
048094ac
PA
4507/* Start the remote connection and sync state. */
4508
f6ac5f3d
PA
4509void
4510remote_target::start_remote (int from_tty, int extended_p)
c906108c 4511{
c8d104ad
PA
4512 struct remote_state *rs = get_remote_state ();
4513 struct packet_config *noack_config;
2d717e4f 4514 char *wait_status = NULL;
8621d6a9 4515
048094ac
PA
4516 /* Signal other parts that we're going through the initial setup,
4517 and so things may not be stable yet. E.g., we don't try to
4518 install tracepoints until we've relocated symbols. Also, a
4519 Ctrl-C before we're connected and synced up can't interrupt the
4520 target. Instead, it offers to drop the (potentially wedged)
4521 connection. */
4522 rs->starting_up = 1;
4523
522002f9 4524 QUIT;
c906108c 4525
9a7071a8
JB
4526 if (interrupt_on_connect)
4527 send_interrupt_sequence ();
4528
57e12211 4529 /* Ack any packet which the remote side has already sent. */
048094ac 4530 remote_serial_write ("+", 1);
1e51243a 4531
c8d104ad
PA
4532 /* The first packet we send to the target is the optional "supported
4533 packets" request. If the target can answer this, it will tell us
4534 which later probes to skip. */
4535 remote_query_supported ();
4536
d914c394 4537 /* If the stub wants to get a QAllow, compose one and send it. */
4082afcc 4538 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
f6ac5f3d 4539 set_permissions ();
d914c394 4540
57809e5e
JK
4541 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4542 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4543 as a reply to known packet. For packet "vFile:setfs:" it is an
4544 invalid reply and GDB would return error in
4545 remote_hostio_set_filesystem, making remote files access impossible.
4546 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4547 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4548 {
4549 const char v_mustreplyempty[] = "vMustReplyEmpty";
4550
4551 putpkt (v_mustreplyempty);
8d64371b
TT
4552 getpkt (&rs->buf, 0);
4553 if (strcmp (rs->buf.data (), "OK") == 0)
57809e5e 4554 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
8d64371b 4555 else if (strcmp (rs->buf.data (), "") != 0)
57809e5e 4556 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
8d64371b 4557 rs->buf.data ());
57809e5e
JK
4558 }
4559
c8d104ad
PA
4560 /* Next, we possibly activate noack mode.
4561
4562 If the QStartNoAckMode packet configuration is set to AUTO,
4563 enable noack mode if the stub reported a wish for it with
4564 qSupported.
4565
4566 If set to TRUE, then enable noack mode even if the stub didn't
4567 report it in qSupported. If the stub doesn't reply OK, the
4568 session ends with an error.
4569
4570 If FALSE, then don't activate noack mode, regardless of what the
4571 stub claimed should be the default with qSupported. */
4572
4573 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4082afcc 4574 if (packet_config_support (noack_config) != PACKET_DISABLE)
c8d104ad
PA
4575 {
4576 putpkt ("QStartNoAckMode");
8d64371b 4577 getpkt (&rs->buf, 0);
c8d104ad
PA
4578 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4579 rs->noack_mode = 1;
4580 }
4581
04bd08de 4582 if (extended_p)
5fe04517
PA
4583 {
4584 /* Tell the remote that we are using the extended protocol. */
4585 putpkt ("!");
8d64371b 4586 getpkt (&rs->buf, 0);
5fe04517
PA
4587 }
4588
9b224c5e
PA
4589 /* Let the target know which signals it is allowed to pass down to
4590 the program. */
4591 update_signals_program_target ();
4592
d962ef82
DJ
4593 /* Next, if the target can specify a description, read it. We do
4594 this before anything involving memory or registers. */
4595 target_find_description ();
4596
6c95b8df
PA
4597 /* Next, now that we know something about the target, update the
4598 address spaces in the program spaces. */
4599 update_address_spaces ();
4600
50c71eaf
PA
4601 /* On OSs where the list of libraries is global to all
4602 processes, we fetch them early. */
f5656ead 4603 if (gdbarch_has_global_solist (target_gdbarch ()))
e696b3ad 4604 solib_add (NULL, from_tty, auto_solib_add);
50c71eaf 4605
6efcd9a8 4606 if (target_is_non_stop_p ())
74531fed 4607 {
4082afcc 4608 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3e43a32a
MS
4609 error (_("Non-stop mode requested, but remote "
4610 "does not support non-stop"));
74531fed
PA
4611
4612 putpkt ("QNonStop:1");
8d64371b 4613 getpkt (&rs->buf, 0);
74531fed 4614
8d64371b
TT
4615 if (strcmp (rs->buf.data (), "OK") != 0)
4616 error (_("Remote refused setting non-stop mode with: %s"),
4617 rs->buf.data ());
74531fed
PA
4618
4619 /* Find about threads and processes the stub is already
4620 controlling. We default to adding them in the running state.
4621 The '?' query below will then tell us about which threads are
4622 stopped. */
f6ac5f3d 4623 this->update_thread_list ();
74531fed 4624 }
4082afcc 4625 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4626 {
4627 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4628 Request it explicitly. */
74531fed 4629 putpkt ("QNonStop:0");
8d64371b 4630 getpkt (&rs->buf, 0);
74531fed 4631
8d64371b
TT
4632 if (strcmp (rs->buf.data (), "OK") != 0)
4633 error (_("Remote refused setting all-stop mode with: %s"),
4634 rs->buf.data ());
74531fed
PA
4635 }
4636
a0743c90
YQ
4637 /* Upload TSVs regardless of whether the target is running or not. The
4638 remote stub, such as GDBserver, may have some predefined or builtin
4639 TSVs, even if the target is not running. */
f6ac5f3d 4640 if (get_trace_status (current_trace_status ()) != -1)
a0743c90
YQ
4641 {
4642 struct uploaded_tsv *uploaded_tsvs = NULL;
4643
f6ac5f3d 4644 upload_trace_state_variables (&uploaded_tsvs);
a0743c90
YQ
4645 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4646 }
4647
2d717e4f
DJ
4648 /* Check whether the target is running now. */
4649 putpkt ("?");
8d64371b 4650 getpkt (&rs->buf, 0);
2d717e4f 4651
6efcd9a8 4652 if (!target_is_non_stop_p ())
2d717e4f 4653 {
74531fed 4654 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4655 {
04bd08de 4656 if (!extended_p)
74531fed 4657 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4658
4659 /* We're connected, but not running. Drop out before we
4660 call start_remote. */
e278ad5b 4661 rs->starting_up = 0;
c35b1492 4662 return;
2d717e4f
DJ
4663 }
4664 else
74531fed 4665 {
74531fed 4666 /* Save the reply for later. */
8d64371b
TT
4667 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
4668 strcpy (wait_status, rs->buf.data ());
74531fed
PA
4669 }
4670
b7ea362b 4671 /* Fetch thread list. */
e8032dde 4672 target_update_thread_list ();
b7ea362b 4673
74531fed
PA
4674 /* Let the stub know that we want it to return the thread. */
4675 set_continue_thread (minus_one_ptid);
4676
b7ea362b
PA
4677 if (thread_count () == 0)
4678 {
4679 /* Target has no concept of threads at all. GDB treats
4680 non-threaded target as single-threaded; add a main
4681 thread. */
4682 add_current_inferior_and_thread (wait_status);
4683 }
4684 else
4685 {
4686 /* We have thread information; select the thread the target
4687 says should be current. If we're reconnecting to a
4688 multi-threaded program, this will ideally be the thread
4689 that last reported an event before GDB disconnected. */
4690 inferior_ptid = get_current_thread (wait_status);
d7e15655 4691 if (inferior_ptid == null_ptid)
b7ea362b
PA
4692 {
4693 /* Odd... The target was able to list threads, but not
4694 tell us which thread was current (no "thread"
4695 register in T stop reply?). Just pick the first
4696 thread in the thread list then. */
c9f35b34
KB
4697
4698 if (remote_debug)
4699 fprintf_unfiltered (gdb_stdlog,
4700 "warning: couldn't determine remote "
4701 "current thread; picking first in list.\n");
4702
08036331 4703 inferior_ptid = inferior_list->thread_list->ptid;
b7ea362b
PA
4704 }
4705 }
74531fed 4706
6e586cc5
YQ
4707 /* init_wait_for_inferior should be called before get_offsets in order
4708 to manage `inserted' flag in bp loc in a correct state.
4709 breakpoint_init_inferior, called from init_wait_for_inferior, set
4710 `inserted' flag to 0, while before breakpoint_re_set, called from
4711 start_remote, set `inserted' flag to 1. In the initialization of
4712 inferior, breakpoint_init_inferior should be called first, and then
4713 breakpoint_re_set can be called. If this order is broken, state of
4714 `inserted' flag is wrong, and cause some problems on breakpoint
4715 manipulation. */
4716 init_wait_for_inferior ();
4717
74531fed
PA
4718 get_offsets (); /* Get text, data & bss offsets. */
4719
d962ef82
DJ
4720 /* If we could not find a description using qXfer, and we know
4721 how to do it some other way, try again. This is not
4722 supported for non-stop; it could be, but it is tricky if
4723 there are no stopped threads when we connect. */
f6ac5f3d 4724 if (remote_read_description_p (this)
f5656ead 4725 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4726 {
4727 target_clear_description ();
4728 target_find_description ();
4729 }
4730
74531fed
PA
4731 /* Use the previously fetched status. */
4732 gdb_assert (wait_status != NULL);
8d64371b 4733 strcpy (rs->buf.data (), wait_status);
74531fed
PA
4734 rs->cached_wait_status = 1;
4735
f6ac5f3d 4736 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4737 }
4738 else
4739 {
68c97600
PA
4740 /* Clear WFI global state. Do this before finding about new
4741 threads and inferiors, and setting the current inferior.
4742 Otherwise we would clear the proceed status of the current
4743 inferior when we want its stop_soon state to be preserved
4744 (see notice_new_inferior). */
4745 init_wait_for_inferior ();
4746
74531fed
PA
4747 /* In non-stop, we will either get an "OK", meaning that there
4748 are no stopped threads at this time; or, a regular stop
4749 reply. In the latter case, there may be more than one thread
4750 stopped --- we pull them all out using the vStopped
4751 mechanism. */
8d64371b 4752 if (strcmp (rs->buf.data (), "OK") != 0)
74531fed 4753 {
722247f1 4754 struct notif_client *notif = &notif_client_stop;
2d717e4f 4755
722247f1
YQ
4756 /* remote_notif_get_pending_replies acks this one, and gets
4757 the rest out. */
f48ff2a7 4758 rs->notif_state->pending_event[notif_client_stop.id]
8d64371b 4759 = remote_notif_parse (this, notif, rs->buf.data ());
722247f1 4760 remote_notif_get_pending_events (notif);
74531fed 4761 }
2d717e4f 4762
74531fed
PA
4763 if (thread_count () == 0)
4764 {
04bd08de 4765 if (!extended_p)
74531fed 4766 error (_("The target is not running (try extended-remote?)"));
82f73884 4767
c35b1492
PA
4768 /* We're connected, but not running. Drop out before we
4769 call start_remote. */
e278ad5b 4770 rs->starting_up = 0;
c35b1492
PA
4771 return;
4772 }
74531fed 4773
74531fed
PA
4774 /* In non-stop mode, any cached wait status will be stored in
4775 the stop reply queue. */
4776 gdb_assert (wait_status == NULL);
f0223081 4777
2455069d 4778 /* Report all signals during attach/startup. */
adc6a863 4779 pass_signals ({});
221e1a37
PA
4780
4781 /* If there are already stopped threads, mark them stopped and
4782 report their stops before giving the prompt to the user. */
6efcd9a8 4783 process_initial_stop_replies (from_tty);
221e1a37
PA
4784
4785 if (target_can_async_p ())
4786 target_async (1);
74531fed 4787 }
c8d104ad 4788
c8d104ad
PA
4789 /* If we connected to a live target, do some additional setup. */
4790 if (target_has_execution)
4791 {
f4ccffad 4792 if (symfile_objfile) /* No use without a symbol-file. */
36d25514 4793 remote_check_symbols ();
c8d104ad 4794 }
50c71eaf 4795
d5551862
SS
4796 /* Possibly the target has been engaged in a trace run started
4797 previously; find out where things are at. */
f6ac5f3d 4798 if (get_trace_status (current_trace_status ()) != -1)
d5551862 4799 {
00bf0b85 4800 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4801
00bf0b85
SS
4802 if (current_trace_status ()->running)
4803 printf_filtered (_("Trace is already running on the target.\n"));
4804
f6ac5f3d 4805 upload_tracepoints (&uploaded_tps);
00bf0b85
SS
4806
4807 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4808 }
4809
c0272db5
TW
4810 /* Possibly the target has been engaged in a btrace record started
4811 previously; find out where things are at. */
4812 remote_btrace_maybe_reopen ();
4813
1e51243a
PA
4814 /* The thread and inferior lists are now synchronized with the
4815 target, our symbols have been relocated, and we're merged the
4816 target's tracepoints with ours. We're done with basic start
4817 up. */
4818 rs->starting_up = 0;
4819
a25a5a45
PA
4820 /* Maybe breakpoints are global and need to be inserted now. */
4821 if (breakpoints_should_be_inserted_now ())
50c71eaf 4822 insert_breakpoints ();
c906108c
SS
4823}
4824
4825/* Open a connection to a remote debugger.
4826 NAME is the filename used for communication. */
4827
f6ac5f3d
PA
4828void
4829remote_target::open (const char *name, int from_tty)
c906108c 4830{
f6ac5f3d 4831 open_1 (name, from_tty, 0);
43ff13b4
JM
4832}
4833
c906108c
SS
4834/* Open a connection to a remote debugger using the extended
4835 remote gdb protocol. NAME is the filename used for communication. */
4836
f6ac5f3d
PA
4837void
4838extended_remote_target::open (const char *name, int from_tty)
c906108c 4839{
f6ac5f3d 4840 open_1 (name, from_tty, 1 /*extended_p */);
43ff13b4
JM
4841}
4842
ca4f7f8b
PA
4843/* Reset all packets back to "unknown support". Called when opening a
4844 new connection to a remote target. */
c906108c 4845
d471ea57 4846static void
ca4f7f8b 4847reset_all_packet_configs_support (void)
d471ea57
AC
4848{
4849 int i;
a744cf53 4850
444abaca 4851 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4852 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4853}
4854
ca4f7f8b
PA
4855/* Initialize all packet configs. */
4856
4857static void
4858init_all_packet_configs (void)
4859{
4860 int i;
4861
4862 for (i = 0; i < PACKET_MAX; i++)
4863 {
4864 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4865 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4866 }
4867}
4868
23860348 4869/* Symbol look-up. */
dc8acb97 4870
6b8edb51
PA
4871void
4872remote_target::remote_check_symbols ()
dc8acb97 4873{
8d64371b 4874 char *tmp;
dc8acb97
MS
4875 int end;
4876
63154eca
PA
4877 /* The remote side has no concept of inferiors that aren't running
4878 yet, it only knows about running processes. If we're connected
4879 but our current inferior is not running, we should not invite the
4880 remote target to request symbol lookups related to its
4881 (unrelated) current process. */
4882 if (!target_has_execution)
4883 return;
4884
4082afcc 4885 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
dc8acb97
MS
4886 return;
4887
63154eca
PA
4888 /* Make sure the remote is pointing at the right process. Note
4889 there's no way to select "no process". */
3c9c4b83
PA
4890 set_general_process ();
4891
6d820c5c
DJ
4892 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4893 because we need both at the same time. */
66644cd3 4894 gdb::char_vector msg (get_remote_packet_size ());
8d64371b 4895 gdb::char_vector reply (get_remote_packet_size ());
6d820c5c 4896
23860348 4897 /* Invite target to request symbol lookups. */
dc8acb97
MS
4898
4899 putpkt ("qSymbol::");
8d64371b 4900 getpkt (&reply, 0);
28170b88 4901 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 4902
8d64371b 4903 while (startswith (reply.data (), "qSymbol:"))
dc8acb97 4904 {
77e371c0
TT
4905 struct bound_minimal_symbol sym;
4906
dc8acb97 4907 tmp = &reply[8];
66644cd3
AB
4908 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()),
4909 strlen (tmp) / 2);
dc8acb97 4910 msg[end] = '\0';
66644cd3 4911 sym = lookup_minimal_symbol (msg.data (), NULL, NULL);
3b7344d5 4912 if (sym.minsym == NULL)
66644cd3
AB
4913 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s",
4914 &reply[8]);
dc8acb97 4915 else
2bbe3cc1 4916 {
f5656ead 4917 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 4918 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
4919
4920 /* If this is a function address, return the start of code
4921 instead of any data function descriptor. */
f5656ead 4922 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1 4923 sym_addr,
8b88a78e 4924 current_top_target ());
2bbe3cc1 4925
66644cd3 4926 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 4927 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1 4928 }
66644cd3
AB
4929
4930 putpkt (msg.data ());
8d64371b 4931 getpkt (&reply, 0);
dc8acb97
MS
4932 }
4933}
4934
9db8d71f 4935static struct serial *
baa336ce 4936remote_serial_open (const char *name)
9db8d71f
DJ
4937{
4938 static int udp_warning = 0;
4939
4940 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4941 of in ser-tcp.c, because it is the remote protocol assuming that the
4942 serial connection is reliable and not the serial connection promising
4943 to be. */
61012eef 4944 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 4945 {
3e43a32a
MS
4946 warning (_("The remote protocol may be unreliable over UDP.\n"
4947 "Some events may be lost, rendering further debugging "
4948 "impossible."));
9db8d71f
DJ
4949 udp_warning = 1;
4950 }
4951
4952 return serial_open (name);
4953}
4954
d914c394
SS
4955/* Inform the target of our permission settings. The permission flags
4956 work without this, but if the target knows the settings, it can do
4957 a couple things. First, it can add its own check, to catch cases
4958 that somehow manage to get by the permissions checks in target
4959 methods. Second, if the target is wired to disallow particular
4960 settings (for instance, a system in the field that is not set up to
4961 be able to stop at a breakpoint), it can object to any unavailable
4962 permissions. */
4963
4964void
f6ac5f3d 4965remote_target::set_permissions ()
d914c394
SS
4966{
4967 struct remote_state *rs = get_remote_state ();
4968
8d64371b 4969 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:"
bba74b36
YQ
4970 "WriteReg:%x;WriteMem:%x;"
4971 "InsertBreak:%x;InsertTrace:%x;"
4972 "InsertFastTrace:%x;Stop:%x",
4973 may_write_registers, may_write_memory,
4974 may_insert_breakpoints, may_insert_tracepoints,
4975 may_insert_fast_tracepoints, may_stop);
d914c394 4976 putpkt (rs->buf);
8d64371b 4977 getpkt (&rs->buf, 0);
d914c394
SS
4978
4979 /* If the target didn't like the packet, warn the user. Do not try
4980 to undo the user's settings, that would just be maddening. */
8d64371b
TT
4981 if (strcmp (rs->buf.data (), "OK") != 0)
4982 warning (_("Remote refused setting permissions with: %s"),
4983 rs->buf.data ());
d914c394
SS
4984}
4985
be2a5f71
DJ
4986/* This type describes each known response to the qSupported
4987 packet. */
4988struct protocol_feature
4989{
4990 /* The name of this protocol feature. */
4991 const char *name;
4992
4993 /* The default for this protocol feature. */
4994 enum packet_support default_support;
4995
4996 /* The function to call when this feature is reported, or after
4997 qSupported processing if the feature is not supported.
4998 The first argument points to this structure. The second
4999 argument indicates whether the packet requested support be
5000 enabled, disabled, or probed (or the default, if this function
5001 is being called at the end of processing and this feature was
5002 not reported). The third argument may be NULL; if not NULL, it
5003 is a NUL-terminated string taken from the packet following
5004 this feature's name and an equals sign. */
6b8edb51
PA
5005 void (*func) (remote_target *remote, const struct protocol_feature *,
5006 enum packet_support, const char *);
be2a5f71
DJ
5007
5008 /* The corresponding packet for this feature. Only used if
5009 FUNC is remote_supported_packet. */
5010 int packet;
5011};
5012
be2a5f71 5013static void
6b8edb51
PA
5014remote_supported_packet (remote_target *remote,
5015 const struct protocol_feature *feature,
be2a5f71
DJ
5016 enum packet_support support,
5017 const char *argument)
5018{
5019 if (argument)
5020 {
5021 warning (_("Remote qSupported response supplied an unexpected value for"
5022 " \"%s\"."), feature->name);
5023 return;
5024 }
5025
4082afcc 5026 remote_protocol_packets[feature->packet].support = support;
be2a5f71 5027}
be2a5f71 5028
6b8edb51
PA
5029void
5030remote_target::remote_packet_size (const protocol_feature *feature,
5031 enum packet_support support, const char *value)
be2a5f71
DJ
5032{
5033 struct remote_state *rs = get_remote_state ();
5034
5035 int packet_size;
5036 char *value_end;
5037
5038 if (support != PACKET_ENABLE)
5039 return;
5040
5041 if (value == NULL || *value == '\0')
5042 {
5043 warning (_("Remote target reported \"%s\" without a size."),
5044 feature->name);
5045 return;
5046 }
5047
5048 errno = 0;
5049 packet_size = strtol (value, &value_end, 16);
5050 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5051 {
5052 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5053 feature->name, value);
5054 return;
5055 }
5056
be2a5f71
DJ
5057 /* Record the new maximum packet size. */
5058 rs->explicit_packet_size = packet_size;
5059}
5060
6b8edb51
PA
5061void
5062remote_packet_size (remote_target *remote, const protocol_feature *feature,
5063 enum packet_support support, const char *value)
5064{
5065 remote->remote_packet_size (feature, support, value);
5066}
5067
dc473cfb 5068static const struct protocol_feature remote_protocol_features[] = {
0876f84a 5069 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 5070 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 5071 PACKET_qXfer_auxv },
c78fa86a
GB
5072 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5073 PACKET_qXfer_exec_file },
23181151
DJ
5074 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5075 PACKET_qXfer_features },
cfa9d6d9
DJ
5076 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5077 PACKET_qXfer_libraries },
2268b414
JK
5078 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5079 PACKET_qXfer_libraries_svr4 },
ced63ec0 5080 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 5081 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 5082 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 5083 PACKET_qXfer_memory_map },
07e059b5
VP
5084 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5085 PACKET_qXfer_osdata },
dc146f7c
VP
5086 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5087 PACKET_qXfer_threads },
b3b9301e
PA
5088 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5089 PACKET_qXfer_traceframe_info },
89be2091
DJ
5090 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5091 PACKET_QPassSignals },
82075af2
JS
5092 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5093 PACKET_QCatchSyscalls },
9b224c5e
PA
5094 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5095 PACKET_QProgramSignals },
bc3b087d
SDJ
5096 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5097 PACKET_QSetWorkingDir },
aefd8b33
SDJ
5098 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5099 PACKET_QStartupWithShell },
0a2dde4a
SDJ
5100 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5101 PACKET_QEnvironmentHexEncoded },
5102 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5103 PACKET_QEnvironmentReset },
5104 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5105 PACKET_QEnvironmentUnset },
a6f3e723
SL
5106 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5107 PACKET_QStartNoAckMode },
4082afcc
PA
5108 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5109 PACKET_multiprocess_feature },
5110 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
5111 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5112 PACKET_qXfer_siginfo_read },
5113 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5114 PACKET_qXfer_siginfo_write },
4082afcc 5115 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 5116 PACKET_ConditionalTracepoints },
4082afcc 5117 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 5118 PACKET_ConditionalBreakpoints },
4082afcc 5119 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 5120 PACKET_BreakpointCommands },
4082afcc 5121 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 5122 PACKET_FastTracepoints },
4082afcc 5123 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 5124 PACKET_StaticTracepoints },
4082afcc 5125 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 5126 PACKET_InstallInTrace},
4082afcc
PA
5127 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5128 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
5129 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5130 PACKET_bc },
5131 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5132 PACKET_bs },
409873ef
SS
5133 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5134 PACKET_TracepointSource },
d914c394
SS
5135 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5136 PACKET_QAllow },
4082afcc
PA
5137 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5138 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
5139 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5140 PACKET_qXfer_fdpic },
169081d0
TG
5141 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5142 PACKET_qXfer_uib },
03583c20
UW
5143 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5144 PACKET_QDisableRandomization },
d1feda86 5145 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
5146 { "QTBuffer:size", PACKET_DISABLE,
5147 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 5148 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
5149 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5150 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 5151 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 5152 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
5153 PACKET_qXfer_btrace },
5154 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
5155 PACKET_qXfer_btrace_conf },
5156 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
5157 PACKET_Qbtrace_conf_bts_size },
5158 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 5159 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
5160 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5161 PACKET_fork_event_feature },
5162 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5163 PACKET_vfork_event_feature },
94585166
DB
5164 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5165 PACKET_exec_event_feature },
b20a6524 5166 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 5167 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
5168 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5169 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 5170 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
5171};
5172
c8d5aac9
L
5173static char *remote_support_xml;
5174
5175/* Register string appended to "xmlRegisters=" in qSupported query. */
5176
5177void
6e39997a 5178register_remote_support_xml (const char *xml)
c8d5aac9
L
5179{
5180#if defined(HAVE_LIBEXPAT)
5181 if (remote_support_xml == NULL)
c4f7c687 5182 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
5183 else
5184 {
5185 char *copy = xstrdup (remote_support_xml + 13);
5186 char *p = strtok (copy, ",");
5187
5188 do
5189 {
5190 if (strcmp (p, xml) == 0)
5191 {
5192 /* already there */
5193 xfree (copy);
5194 return;
5195 }
5196 }
5197 while ((p = strtok (NULL, ",")) != NULL);
5198 xfree (copy);
5199
94b0dee1
PA
5200 remote_support_xml = reconcat (remote_support_xml,
5201 remote_support_xml, ",", xml,
5202 (char *) NULL);
c8d5aac9
L
5203 }
5204#endif
5205}
5206
69b6ecb0
TT
5207static void
5208remote_query_supported_append (std::string *msg, const char *append)
c8d5aac9 5209{
69b6ecb0
TT
5210 if (!msg->empty ())
5211 msg->append (";");
5212 msg->append (append);
c8d5aac9
L
5213}
5214
6b8edb51
PA
5215void
5216remote_target::remote_query_supported ()
be2a5f71
DJ
5217{
5218 struct remote_state *rs = get_remote_state ();
5219 char *next;
5220 int i;
5221 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5222
5223 /* The packet support flags are handled differently for this packet
5224 than for most others. We treat an error, a disabled packet, and
5225 an empty response identically: any features which must be reported
5226 to be used will be automatically disabled. An empty buffer
5227 accomplishes this, since that is also the representation for a list
5228 containing no features. */
5229
5230 rs->buf[0] = 0;
4082afcc 5231 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 5232 {
69b6ecb0 5233 std::string q;
c8d5aac9 5234
73b8c1fd 5235 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5236 remote_query_supported_append (&q, "multiprocess+");
c8d5aac9 5237
f7e6eed5 5238 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5239 remote_query_supported_append (&q, "swbreak+");
f7e6eed5 5240 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5241 remote_query_supported_append (&q, "hwbreak+");
f7e6eed5 5242
69b6ecb0 5243 remote_query_supported_append (&q, "qRelocInsn+");
dde08ee1 5244
8020350c
DB
5245 if (packet_set_cmd_state (PACKET_fork_event_feature)
5246 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5247 remote_query_supported_append (&q, "fork-events+");
8020350c
DB
5248 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5249 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5250 remote_query_supported_append (&q, "vfork-events+");
8020350c
DB
5251 if (packet_set_cmd_state (PACKET_exec_event_feature)
5252 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5253 remote_query_supported_append (&q, "exec-events+");
89245bc0 5254
750ce8d1 5255 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5256 remote_query_supported_append (&q, "vContSupported+");
750ce8d1 5257
65706a29 5258 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5259 remote_query_supported_append (&q, "QThreadEvents+");
65706a29 5260
f2faf941 5261 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5262 remote_query_supported_append (&q, "no-resumed+");
f2faf941 5263
b35d5edb
PA
5264 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5265 the qSupported:xmlRegisters=i386 handling. */
7cc244de
PA
5266 if (remote_support_xml != NULL
5267 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
69b6ecb0 5268 remote_query_supported_append (&q, remote_support_xml);
82f73884 5269
69b6ecb0
TT
5270 q = "qSupported:" + q;
5271 putpkt (q.c_str ());
94b0dee1 5272
8d64371b 5273 getpkt (&rs->buf, 0);
be2a5f71
DJ
5274
5275 /* If an error occured, warn, but do not return - just reset the
5276 buffer to empty and go on to disable features. */
5277 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5278 == PACKET_ERROR)
5279 {
8d64371b 5280 warning (_("Remote failure reply: %s"), rs->buf.data ());
be2a5f71
DJ
5281 rs->buf[0] = 0;
5282 }
5283 }
5284
5285 memset (seen, 0, sizeof (seen));
5286
8d64371b 5287 next = rs->buf.data ();
be2a5f71
DJ
5288 while (*next)
5289 {
5290 enum packet_support is_supported;
5291 char *p, *end, *name_end, *value;
5292
5293 /* First separate out this item from the rest of the packet. If
5294 there's another item after this, we overwrite the separator
5295 (terminated strings are much easier to work with). */
5296 p = next;
5297 end = strchr (p, ';');
5298 if (end == NULL)
5299 {
5300 end = p + strlen (p);
5301 next = end;
5302 }
5303 else
5304 {
89be2091
DJ
5305 *end = '\0';
5306 next = end + 1;
5307
be2a5f71
DJ
5308 if (end == p)
5309 {
5310 warning (_("empty item in \"qSupported\" response"));
5311 continue;
5312 }
be2a5f71
DJ
5313 }
5314
5315 name_end = strchr (p, '=');
5316 if (name_end)
5317 {
5318 /* This is a name=value entry. */
5319 is_supported = PACKET_ENABLE;
5320 value = name_end + 1;
5321 *name_end = '\0';
5322 }
5323 else
5324 {
5325 value = NULL;
5326 switch (end[-1])
5327 {
5328 case '+':
5329 is_supported = PACKET_ENABLE;
5330 break;
5331
5332 case '-':
5333 is_supported = PACKET_DISABLE;
5334 break;
5335
5336 case '?':
5337 is_supported = PACKET_SUPPORT_UNKNOWN;
5338 break;
5339
5340 default:
3e43a32a
MS
5341 warning (_("unrecognized item \"%s\" "
5342 "in \"qSupported\" response"), p);
be2a5f71
DJ
5343 continue;
5344 }
5345 end[-1] = '\0';
5346 }
5347
5348 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5349 if (strcmp (remote_protocol_features[i].name, p) == 0)
5350 {
5351 const struct protocol_feature *feature;
5352
5353 seen[i] = 1;
5354 feature = &remote_protocol_features[i];
6b8edb51 5355 feature->func (this, feature, is_supported, value);
be2a5f71
DJ
5356 break;
5357 }
5358 }
5359
5360 /* If we increased the packet size, make sure to increase the global
5361 buffer size also. We delay this until after parsing the entire
5362 qSupported packet, because this is the same buffer we were
5363 parsing. */
8d64371b
TT
5364 if (rs->buf.size () < rs->explicit_packet_size)
5365 rs->buf.resize (rs->explicit_packet_size);
be2a5f71
DJ
5366
5367 /* Handle the defaults for unmentioned features. */
5368 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5369 if (!seen[i])
5370 {
5371 const struct protocol_feature *feature;
5372
5373 feature = &remote_protocol_features[i];
6b8edb51 5374 feature->func (this, feature, feature->default_support, NULL);
be2a5f71
DJ
5375 }
5376}
5377
048094ac
PA
5378/* Serial QUIT handler for the remote serial descriptor.
5379
5380 Defers handling a Ctrl-C until we're done with the current
5381 command/response packet sequence, unless:
5382
5383 - We're setting up the connection. Don't send a remote interrupt
5384 request, as we're not fully synced yet. Quit immediately
5385 instead.
5386
5387 - The target has been resumed in the foreground
223ffa71 5388 (target_terminal::is_ours is false) with a synchronous resume
048094ac
PA
5389 packet, and we're blocked waiting for the stop reply, thus a
5390 Ctrl-C should be immediately sent to the target.
5391
5392 - We get a second Ctrl-C while still within the same serial read or
5393 write. In that case the serial is seemingly wedged --- offer to
5394 quit/disconnect.
5395
5396 - We see a second Ctrl-C without target response, after having
5397 previously interrupted the target. In that case the target/stub
5398 is probably wedged --- offer to quit/disconnect.
5399*/
5400
6b8edb51
PA
5401void
5402remote_target::remote_serial_quit_handler ()
048094ac
PA
5403{
5404 struct remote_state *rs = get_remote_state ();
5405
5406 if (check_quit_flag ())
5407 {
5408 /* If we're starting up, we're not fully synced yet. Quit
5409 immediately. */
5410 if (rs->starting_up)
5411 quit ();
5412 else if (rs->got_ctrlc_during_io)
5413 {
5414 if (query (_("The target is not responding to GDB commands.\n"
5415 "Stop debugging it? ")))
5416 remote_unpush_and_throw ();
5417 }
5418 /* If ^C has already been sent once, offer to disconnect. */
223ffa71 5419 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
048094ac
PA
5420 interrupt_query ();
5421 /* All-stop protocol, and blocked waiting for stop reply. Send
5422 an interrupt request. */
223ffa71 5423 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
e671cd59 5424 target_interrupt ();
048094ac
PA
5425 else
5426 rs->got_ctrlc_during_io = 1;
5427 }
5428}
5429
6b8edb51
PA
5430/* The remote_target that is current while the quit handler is
5431 overridden with remote_serial_quit_handler. */
5432static remote_target *curr_quit_handler_target;
5433
5434static void
5435remote_serial_quit_handler ()
5436{
5437 curr_quit_handler_target->remote_serial_quit_handler ();
5438}
5439
78a095c3
JK
5440/* Remove any of the remote.c targets from target stack. Upper targets depend
5441 on it so remove them first. */
5442
5443static void
5444remote_unpush_target (void)
5445{
915ef8b1 5446 pop_all_targets_at_and_above (process_stratum);
78a095c3 5447}
be2a5f71 5448
048094ac
PA
5449static void
5450remote_unpush_and_throw (void)
5451{
5452 remote_unpush_target ();
5453 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5454}
5455
f6ac5f3d
PA
5456void
5457remote_target::open_1 (const char *name, int from_tty, int extended_p)
c906108c 5458{
6b8edb51 5459 remote_target *curr_remote = get_current_remote_target ();
a6f3e723 5460
c906108c 5461 if (name == 0)
8a3fe4f8 5462 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 5463 "serial device is attached to the remote system\n"
8a3fe4f8 5464 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 5465
2d717e4f 5466 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
5467 Ask this question first, before target_preopen has a chance to kill
5468 anything. */
6b8edb51 5469 if (curr_remote != NULL && !have_inferiors ())
2d717e4f 5470 {
78a095c3
JK
5471 if (from_tty
5472 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
5473 error (_("Still connected."));
5474 }
5475
78a095c3 5476 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
5477 target_preopen (from_tty);
5478
ad9a8f3f 5479 remote_fileio_reset ();
1dd41f16
NS
5480 reopen_exec_file ();
5481 reread_symbols ();
5482
6b8edb51
PA
5483 remote_target *remote
5484 = (extended_p ? new extended_remote_target () : new remote_target ());
5485 target_ops_up target_holder (remote);
5486
5487 remote_state *rs = remote->get_remote_state ();
5488
5489 /* See FIXME above. */
5490 if (!target_async_permitted)
5491 rs->wait_forever_enabled_p = 1;
5492
5d93a237
TT
5493 rs->remote_desc = remote_serial_open (name);
5494 if (!rs->remote_desc)
c906108c
SS
5495 perror_with_name (name);
5496
5497 if (baud_rate != -1)
5498 {
5d93a237 5499 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 5500 {
9b74d5d3
KB
5501 /* The requested speed could not be set. Error out to
5502 top level after closing remote_desc. Take care to
5503 set remote_desc to NULL to avoid closing remote_desc
5504 more than once. */
5d93a237
TT
5505 serial_close (rs->remote_desc);
5506 rs->remote_desc = NULL;
c906108c
SS
5507 perror_with_name (name);
5508 }
5509 }
5510
236af5e3 5511 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 5512 serial_raw (rs->remote_desc);
c906108c
SS
5513
5514 /* If there is something sitting in the buffer we might take it as a
5515 response to a command, which would be bad. */
5d93a237 5516 serial_flush_input (rs->remote_desc);
c906108c
SS
5517
5518 if (from_tty)
5519 {
5520 puts_filtered ("Remote debugging using ");
5521 puts_filtered (name);
5522 puts_filtered ("\n");
5523 }
d9f719f1 5524
6b8edb51 5525 /* Switch to using the remote target now. */
dea57a62 5526 push_target (std::move (target_holder));
c906108c 5527
74531fed 5528 /* Register extra event sources in the event loop. */
6b8edb51 5529 rs->remote_async_inferior_event_token
74531fed 5530 = create_async_event_handler (remote_async_inferior_event_handler,
6b8edb51
PA
5531 remote);
5532 rs->notif_state = remote_notif_state_allocate (remote);
74531fed 5533
be2a5f71
DJ
5534 /* Reset the target state; these things will be queried either by
5535 remote_query_supported or as they are needed. */
ca4f7f8b 5536 reset_all_packet_configs_support ();
74531fed 5537 rs->cached_wait_status = 0;
be2a5f71 5538 rs->explicit_packet_size = 0;
a6f3e723 5539 rs->noack_mode = 0;
82f73884 5540 rs->extended = extended_p;
e24a49d8 5541 rs->waiting_for_stop_reply = 0;
3a29589a 5542 rs->ctrlc_pending_p = 0;
048094ac 5543 rs->got_ctrlc_during_io = 0;
802188a7 5544
47f8a51d
TT
5545 rs->general_thread = not_sent_ptid;
5546 rs->continue_thread = not_sent_ptid;
262e1174 5547 rs->remote_traceframe_number = -1;
c906108c 5548
3a00c802
PA
5549 rs->last_resume_exec_dir = EXEC_FORWARD;
5550
9d1f7ab2 5551 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5552 rs->use_threadinfo_query = 1;
5553 rs->use_threadextra_query = 1;
9d1f7ab2 5554
dd194f6b 5555 rs->readahead_cache.invalidate ();
80152258 5556
c6ebd6cf 5557 if (target_async_permitted)
92d1e331 5558 {
92d1e331
DJ
5559 /* FIXME: cagney/1999-09-23: During the initial connection it is
5560 assumed that the target is already ready and able to respond to
0df8b418 5561 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5562 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5563 around this. Eventually a mechanism that allows
92d1e331 5564 wait_for_inferior() to expect/get timeouts will be
23860348 5565 implemented. */
6b8edb51 5566 rs->wait_forever_enabled_p = 0;
92d1e331
DJ
5567 }
5568
23860348 5569 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5570 no_shared_libraries (NULL, 0);
f78f6cf1 5571
36918e70 5572 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5573 target (we'd otherwise be in an inconsistent state) and then
5574 propogate the error on up the exception chain. This ensures that
5575 the caller doesn't stumble along blindly assuming that the
5576 function succeeded. The CLI doesn't have this problem but other
5577 UI's, such as MI do.
36918e70
AC
5578
5579 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5580 this function should return an error indication letting the
ce2826aa 5581 caller restore the previous state. Unfortunately the command
36918e70
AC
5582 ``target remote'' is directly wired to this function making that
5583 impossible. On a positive note, the CLI side of this problem has
5584 been fixed - the function set_cmd_context() makes it possible for
5585 all the ``target ....'' commands to share a common callback
5586 function. See cli-dump.c. */
109c3e39 5587 {
2d717e4f 5588
a70b8144 5589 try
04bd08de 5590 {
6b8edb51 5591 remote->start_remote (from_tty, extended_p);
04bd08de 5592 }
230d2906 5593 catch (const gdb_exception &ex)
109c3e39 5594 {
c8d104ad
PA
5595 /* Pop the partially set up target - unless something else did
5596 already before throwing the exception. */
6b8edb51 5597 if (ex.error != TARGET_CLOSE_ERROR)
78a095c3 5598 remote_unpush_target ();
eedc3f4f 5599 throw;
109c3e39
AC
5600 }
5601 }
c906108c 5602
6b8edb51 5603 remote_btrace_reset (rs);
f4abbc16 5604
c6ebd6cf 5605 if (target_async_permitted)
6b8edb51 5606 rs->wait_forever_enabled_p = 1;
43ff13b4
JM
5607}
5608
de0d863e
DB
5609/* Detach the specified process. */
5610
6b8edb51
PA
5611void
5612remote_target::remote_detach_pid (int pid)
de0d863e
DB
5613{
5614 struct remote_state *rs = get_remote_state ();
5615
4c7333b3
PA
5616 /* This should not be necessary, but the handling for D;PID in
5617 GDBserver versions prior to 8.2 incorrectly assumes that the
5618 selected process points to the same process we're detaching,
5619 leading to misbehavior (and possibly GDBserver crashing) when it
5620 does not. Since it's easy and cheap, work around it by forcing
5621 GDBserver to select GDB's current process. */
5622 set_general_process ();
5623
de0d863e 5624 if (remote_multi_process_p (rs))
8d64371b 5625 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid);
de0d863e 5626 else
8d64371b 5627 strcpy (rs->buf.data (), "D");
de0d863e
DB
5628
5629 putpkt (rs->buf);
8d64371b 5630 getpkt (&rs->buf, 0);
de0d863e
DB
5631
5632 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5633 ;
5634 else if (rs->buf[0] == '\0')
5635 error (_("Remote doesn't know how to detach"));
5636 else
5637 error (_("Can't detach process."));
5638}
5639
5640/* This detaches a program to which we previously attached, using
5641 inferior_ptid to identify the process. After this is done, GDB
5642 can be used to debug some other program. We better not have left
5643 any breakpoints in the target program or it'll die when it hits
5644 one. */
c906108c 5645
6b8edb51 5646void
00431a78 5647remote_target::remote_detach_1 (inferior *inf, int from_tty)
c906108c 5648{
e99b03dc 5649 int pid = inferior_ptid.pid ();
d01949b6 5650 struct remote_state *rs = get_remote_state ();
de0d863e 5651 int is_fork_parent;
c906108c 5652
2d717e4f
DJ
5653 if (!target_has_execution)
5654 error (_("No process to detach from."));
5655
0f48b757 5656 target_announce_detach (from_tty);
7cee1e54 5657
c906108c 5658 /* Tell the remote target to detach. */
de0d863e 5659 remote_detach_pid (pid);
82f73884 5660
8020350c
DB
5661 /* Exit only if this is the only active inferior. */
5662 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
7cee1e54 5663 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5664
00431a78
PA
5665 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5666
de0d863e
DB
5667 /* Check to see if we are detaching a fork parent. Note that if we
5668 are detaching a fork child, tp == NULL. */
5669 is_fork_parent = (tp != NULL
5670 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5671
5672 /* If doing detach-on-fork, we don't mourn, because that will delete
5673 breakpoints that should be available for the followed inferior. */
5674 if (!is_fork_parent)
f67c0c91 5675 {
249b5733
PA
5676 /* Save the pid as a string before mourning, since that will
5677 unpush the remote target, and we need the string after. */
f2907e49 5678 std::string infpid = target_pid_to_str (ptid_t (pid));
f67c0c91
SDJ
5679
5680 target_mourn_inferior (inferior_ptid);
5681 if (print_inferior_events)
5682 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5683 inf->num, infpid.c_str ());
5684 }
de0d863e
DB
5685 else
5686 {
5687 inferior_ptid = null_ptid;
00431a78 5688 detach_inferior (current_inferior ());
de0d863e 5689 }
2d717e4f
DJ
5690}
5691
f6ac5f3d
PA
5692void
5693remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5694{
00431a78 5695 remote_detach_1 (inf, from_tty);
2d717e4f
DJ
5696}
5697
f6ac5f3d
PA
5698void
5699extended_remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5700{
00431a78 5701 remote_detach_1 (inf, from_tty);
de0d863e
DB
5702}
5703
5704/* Target follow-fork function for remote targets. On entry, and
5705 at return, the current inferior is the fork parent.
5706
5707 Note that although this is currently only used for extended-remote,
5708 it is named remote_follow_fork in anticipation of using it for the
5709 remote target as well. */
5710
f6ac5f3d
PA
5711int
5712remote_target::follow_fork (int follow_child, int detach_fork)
de0d863e
DB
5713{
5714 struct remote_state *rs = get_remote_state ();
c269dbdb 5715 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5716
c269dbdb
DB
5717 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5718 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5719 {
5720 /* When following the parent and detaching the child, we detach
5721 the child here. For the case of following the child and
5722 detaching the parent, the detach is done in the target-
5723 independent follow fork code in infrun.c. We can't use
5724 target_detach when detaching an unfollowed child because
5725 the client side doesn't know anything about the child. */
5726 if (detach_fork && !follow_child)
5727 {
5728 /* Detach the fork child. */
5729 ptid_t child_ptid;
5730 pid_t child_pid;
5731
5732 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
e99b03dc 5733 child_pid = child_ptid.pid ();
de0d863e
DB
5734
5735 remote_detach_pid (child_pid);
de0d863e
DB
5736 }
5737 }
5738 return 0;
c906108c
SS
5739}
5740
94585166
DB
5741/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5742 in the program space of the new inferior. On entry and at return the
5743 current inferior is the exec'ing inferior. INF is the new exec'd
5744 inferior, which may be the same as the exec'ing inferior unless
5745 follow-exec-mode is "new". */
5746
f6ac5f3d 5747void
4ca51187 5748remote_target::follow_exec (struct inferior *inf, const char *execd_pathname)
94585166
DB
5749{
5750 /* We know that this is a target file name, so if it has the "target:"
5751 prefix we strip it off before saving it in the program space. */
5752 if (is_target_filename (execd_pathname))
5753 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5754
5755 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5756}
5757
6ad8ae5c
DJ
5758/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5759
f6ac5f3d
PA
5760void
5761remote_target::disconnect (const char *args, int from_tty)
43ff13b4 5762{
43ff13b4 5763 if (args)
2d717e4f 5764 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5765
8020350c
DB
5766 /* Make sure we unpush even the extended remote targets. Calling
5767 target_mourn_inferior won't unpush, and remote_mourn won't
5768 unpush if there is more than one inferior left. */
f6ac5f3d 5769 unpush_target (this);
8020350c 5770 generic_mourn_inferior ();
2d717e4f 5771
43ff13b4
JM
5772 if (from_tty)
5773 puts_filtered ("Ending remote debugging.\n");
5774}
5775
2d717e4f
DJ
5776/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5777 be chatty about it. */
5778
f6ac5f3d
PA
5779void
5780extended_remote_target::attach (const char *args, int from_tty)
2d717e4f
DJ
5781{
5782 struct remote_state *rs = get_remote_state ();
be86555c 5783 int pid;
96ef3384 5784 char *wait_status = NULL;
2d717e4f 5785
74164c56 5786 pid = parse_pid_to_attach (args);
2d717e4f 5787
74164c56
JK
5788 /* Remote PID can be freely equal to getpid, do not check it here the same
5789 way as in other targets. */
2d717e4f 5790
4082afcc 5791 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5792 error (_("This target does not support attaching to a process"));
5793
7cee1e54
PA
5794 if (from_tty)
5795 {
5796 char *exec_file = get_exec_file (0);
5797
5798 if (exec_file)
5799 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
a068643d 5800 target_pid_to_str (ptid_t (pid)).c_str ());
7cee1e54
PA
5801 else
5802 printf_unfiltered (_("Attaching to %s\n"),
a068643d 5803 target_pid_to_str (ptid_t (pid)).c_str ());
7cee1e54
PA
5804 }
5805
8d64371b 5806 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f 5807 putpkt (rs->buf);
8d64371b 5808 getpkt (&rs->buf, 0);
2d717e4f 5809
4082afcc
PA
5810 switch (packet_ok (rs->buf,
5811 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5812 {
4082afcc 5813 case PACKET_OK:
6efcd9a8 5814 if (!target_is_non_stop_p ())
74531fed
PA
5815 {
5816 /* Save the reply for later. */
8d64371b
TT
5817 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
5818 strcpy (wait_status, rs->buf.data ());
74531fed 5819 }
8d64371b 5820 else if (strcmp (rs->buf.data (), "OK") != 0)
74531fed 5821 error (_("Attaching to %s failed with: %s"),
a068643d 5822 target_pid_to_str (ptid_t (pid)).c_str (),
8d64371b 5823 rs->buf.data ());
4082afcc
PA
5824 break;
5825 case PACKET_UNKNOWN:
5826 error (_("This target does not support attaching to a process"));
5827 default:
50fa3001
SDJ
5828 error (_("Attaching to %s failed"),
5829 target_pid_to_str (ptid_t (pid)).c_str ());
2d717e4f 5830 }
2d717e4f 5831
9ab8741a 5832 set_current_inferior (remote_add_inferior (false, pid, 1, 0));
bad34192 5833
f2907e49 5834 inferior_ptid = ptid_t (pid);
79d7f229 5835
6efcd9a8 5836 if (target_is_non_stop_p ())
bad34192
PA
5837 {
5838 struct thread_info *thread;
79d7f229 5839
bad34192 5840 /* Get list of threads. */
f6ac5f3d 5841 update_thread_list ();
82f73884 5842
00431a78 5843 thread = first_thread_of_inferior (current_inferior ());
bad34192
PA
5844 if (thread)
5845 inferior_ptid = thread->ptid;
5846 else
f2907e49 5847 inferior_ptid = ptid_t (pid);
bad34192
PA
5848
5849 /* Invalidate our notion of the remote current thread. */
47f8a51d 5850 record_currthread (rs, minus_one_ptid);
bad34192 5851 }
74531fed 5852 else
bad34192
PA
5853 {
5854 /* Now, if we have thread information, update inferior_ptid. */
5855 inferior_ptid = remote_current_thread (inferior_ptid);
5856
5857 /* Add the main thread to the thread list. */
00aecdcf
PA
5858 thread_info *thr = add_thread_silent (inferior_ptid);
5859 /* Don't consider the thread stopped until we've processed the
5860 saved stop reply. */
5861 set_executing (thr->ptid, true);
bad34192 5862 }
c0a2216e 5863
96ef3384
UW
5864 /* Next, if the target can specify a description, read it. We do
5865 this before anything involving memory or registers. */
5866 target_find_description ();
5867
6efcd9a8 5868 if (!target_is_non_stop_p ())
74531fed
PA
5869 {
5870 /* Use the previously fetched status. */
5871 gdb_assert (wait_status != NULL);
5872
5873 if (target_can_async_p ())
5874 {
722247f1 5875 struct notif_event *reply
6b8edb51 5876 = remote_notif_parse (this, &notif_client_stop, wait_status);
74531fed 5877
722247f1 5878 push_stop_reply ((struct stop_reply *) reply);
74531fed 5879
6a3753b3 5880 target_async (1);
74531fed
PA
5881 }
5882 else
5883 {
5884 gdb_assert (wait_status != NULL);
8d64371b 5885 strcpy (rs->buf.data (), wait_status);
74531fed
PA
5886 rs->cached_wait_status = 1;
5887 }
5888 }
5889 else
5890 gdb_assert (wait_status == NULL);
2d717e4f
DJ
5891}
5892
b9c1d481
AS
5893/* Implementation of the to_post_attach method. */
5894
f6ac5f3d
PA
5895void
5896extended_remote_target::post_attach (int pid)
b9c1d481 5897{
6efcd9a8
PA
5898 /* Get text, data & bss offsets. */
5899 get_offsets ();
5900
b9c1d481
AS
5901 /* In certain cases GDB might not have had the chance to start
5902 symbol lookup up until now. This could happen if the debugged
5903 binary is not using shared libraries, the vsyscall page is not
5904 present (on Linux) and the binary itself hadn't changed since the
5905 debugging process was started. */
5906 if (symfile_objfile != NULL)
5907 remote_check_symbols();
5908}
5909
c906108c 5910\f
506fb367
DJ
5911/* Check for the availability of vCont. This function should also check
5912 the response. */
c906108c 5913
6b8edb51
PA
5914void
5915remote_target::remote_vcont_probe ()
c906108c 5916{
6b8edb51 5917 remote_state *rs = get_remote_state ();
2e9f7625 5918 char *buf;
6d820c5c 5919
8d64371b 5920 strcpy (rs->buf.data (), "vCont?");
2e9f7625 5921 putpkt (rs->buf);
8d64371b
TT
5922 getpkt (&rs->buf, 0);
5923 buf = rs->buf.data ();
c906108c 5924
506fb367 5925 /* Make sure that the features we assume are supported. */
61012eef 5926 if (startswith (buf, "vCont"))
506fb367
DJ
5927 {
5928 char *p = &buf[5];
750ce8d1 5929 int support_c, support_C;
506fb367 5930
750ce8d1
YQ
5931 rs->supports_vCont.s = 0;
5932 rs->supports_vCont.S = 0;
506fb367
DJ
5933 support_c = 0;
5934 support_C = 0;
d458bd84 5935 rs->supports_vCont.t = 0;
c1e36e3e 5936 rs->supports_vCont.r = 0;
506fb367
DJ
5937 while (p && *p == ';')
5938 {
5939 p++;
5940 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5941 rs->supports_vCont.s = 1;
506fb367 5942 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5943 rs->supports_vCont.S = 1;
506fb367
DJ
5944 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5945 support_c = 1;
5946 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5947 support_C = 1;
74531fed 5948 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 5949 rs->supports_vCont.t = 1;
c1e36e3e
PA
5950 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5951 rs->supports_vCont.r = 1;
506fb367
DJ
5952
5953 p = strchr (p, ';');
5954 }
c906108c 5955
750ce8d1
YQ
5956 /* If c, and C are not all supported, we can't use vCont. Clearing
5957 BUF will make packet_ok disable the packet. */
5958 if (!support_c || !support_C)
506fb367
DJ
5959 buf[0] = 0;
5960 }
c906108c 5961
8d64371b 5962 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 5963}
c906108c 5964
0d8f58ca
PA
5965/* Helper function for building "vCont" resumptions. Write a
5966 resumption to P. ENDP points to one-passed-the-end of the buffer
5967 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5968 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5969 resumed thread should be single-stepped and/or signalled. If PTID
5970 equals minus_one_ptid, then all threads are resumed; if PTID
5971 represents a process, then all threads of the process are resumed;
5972 the thread to be stepped and/or signalled is given in the global
5973 INFERIOR_PTID. */
5974
6b8edb51
PA
5975char *
5976remote_target::append_resumption (char *p, char *endp,
5977 ptid_t ptid, int step, gdb_signal siggnal)
0d8f58ca
PA
5978{
5979 struct remote_state *rs = get_remote_state ();
5980
a493e3e2 5981 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 5982 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
5983 else if (step
5984 /* GDB is willing to range step. */
5985 && use_range_stepping
5986 /* Target supports range stepping. */
5987 && rs->supports_vCont.r
5988 /* We don't currently support range stepping multiple
5989 threads with a wildcard (though the protocol allows it,
5990 so stubs shouldn't make an active effort to forbid
5991 it). */
0e998d96 5992 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
c1e36e3e
PA
5993 {
5994 struct thread_info *tp;
5995
d7e15655 5996 if (ptid == minus_one_ptid)
c1e36e3e
PA
5997 {
5998 /* If we don't know about the target thread's tid, then
5999 we're resuming magic_null_ptid (see caller). */
6000 tp = find_thread_ptid (magic_null_ptid);
6001 }
6002 else
6003 tp = find_thread_ptid (ptid);
6004 gdb_assert (tp != NULL);
6005
6006 if (tp->control.may_range_step)
6007 {
6008 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6009
6010 p += xsnprintf (p, endp - p, ";r%s,%s",
6011 phex_nz (tp->control.step_range_start,
6012 addr_size),
6013 phex_nz (tp->control.step_range_end,
6014 addr_size));
6015 }
6016 else
6017 p += xsnprintf (p, endp - p, ";s");
6018 }
0d8f58ca
PA
6019 else if (step)
6020 p += xsnprintf (p, endp - p, ";s");
a493e3e2 6021 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
6022 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6023 else
6024 p += xsnprintf (p, endp - p, ";c");
6025
0e998d96 6026 if (remote_multi_process_p (rs) && ptid.is_pid ())
0d8f58ca
PA
6027 {
6028 ptid_t nptid;
6029
6030 /* All (-1) threads of process. */
e99b03dc 6031 nptid = ptid_t (ptid.pid (), -1, 0);
0d8f58ca
PA
6032
6033 p += xsnprintf (p, endp - p, ":");
6034 p = write_ptid (p, endp, nptid);
6035 }
d7e15655 6036 else if (ptid != minus_one_ptid)
0d8f58ca
PA
6037 {
6038 p += xsnprintf (p, endp - p, ":");
6039 p = write_ptid (p, endp, ptid);
6040 }
6041
6042 return p;
6043}
6044
799a2abe
PA
6045/* Clear the thread's private info on resume. */
6046
6047static void
6048resume_clear_thread_private_info (struct thread_info *thread)
6049{
6050 if (thread->priv != NULL)
6051 {
7aabaf9d
SM
6052 remote_thread_info *priv = get_remote_thread_info (thread);
6053
6054 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6055 priv->watch_data_address = 0;
799a2abe
PA
6056 }
6057}
6058
e5ef252a
PA
6059/* Append a vCont continue-with-signal action for threads that have a
6060 non-zero stop signal. */
6061
6b8edb51
PA
6062char *
6063remote_target::append_pending_thread_resumptions (char *p, char *endp,
6064 ptid_t ptid)
e5ef252a 6065{
08036331
PA
6066 for (thread_info *thread : all_non_exited_threads (ptid))
6067 if (inferior_ptid != thread->ptid
70509625 6068 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
6069 {
6070 p = append_resumption (p, endp, thread->ptid,
6071 0, thread->suspend.stop_signal);
6072 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 6073 resume_clear_thread_private_info (thread);
e5ef252a
PA
6074 }
6075
6076 return p;
6077}
6078
7b68ffbb
PA
6079/* Set the target running, using the packets that use Hc
6080 (c/s/C/S). */
6081
6b8edb51
PA
6082void
6083remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6084 gdb_signal siggnal)
7b68ffbb
PA
6085{
6086 struct remote_state *rs = get_remote_state ();
7b68ffbb
PA
6087 char *buf;
6088
6089 rs->last_sent_signal = siggnal;
6090 rs->last_sent_step = step;
6091
6092 /* The c/s/C/S resume packets use Hc, so set the continue
6093 thread. */
d7e15655 6094 if (ptid == minus_one_ptid)
7b68ffbb
PA
6095 set_continue_thread (any_thread_ptid);
6096 else
6097 set_continue_thread (ptid);
6098
08036331 6099 for (thread_info *thread : all_non_exited_threads ())
7b68ffbb
PA
6100 resume_clear_thread_private_info (thread);
6101
8d64371b 6102 buf = rs->buf.data ();
6b8edb51 6103 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6104 {
6105 /* We don't pass signals to the target in reverse exec mode. */
6106 if (info_verbose && siggnal != GDB_SIGNAL_0)
6107 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6108 siggnal);
6109
6110 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6111 error (_("Remote reverse-step not supported."));
6112 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6113 error (_("Remote reverse-continue not supported."));
6114
6115 strcpy (buf, step ? "bs" : "bc");
6116 }
6117 else if (siggnal != GDB_SIGNAL_0)
6118 {
6119 buf[0] = step ? 'S' : 'C';
6120 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6121 buf[2] = tohex (((int) siggnal) & 0xf);
6122 buf[3] = '\0';
6123 }
6124 else
6125 strcpy (buf, step ? "s" : "c");
6126
6127 putpkt (buf);
6128}
6129
506fb367
DJ
6130/* Resume the remote inferior by using a "vCont" packet. The thread
6131 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
6132 resumed thread should be single-stepped and/or signalled. If PTID
6133 equals minus_one_ptid, then all threads are resumed; the thread to
6134 be stepped and/or signalled is given in the global INFERIOR_PTID.
6135 This function returns non-zero iff it resumes the inferior.
44eaed12 6136
7b68ffbb
PA
6137 This function issues a strict subset of all possible vCont commands
6138 at the moment. */
44eaed12 6139
6b8edb51
PA
6140int
6141remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6142 enum gdb_signal siggnal)
506fb367
DJ
6143{
6144 struct remote_state *rs = get_remote_state ();
82f73884
PA
6145 char *p;
6146 char *endp;
44eaed12 6147
7b68ffbb 6148 /* No reverse execution actions defined for vCont. */
6b8edb51 6149 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6150 return 0;
6151
4082afcc 6152 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 6153 remote_vcont_probe ();
44eaed12 6154
4082afcc 6155 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 6156 return 0;
44eaed12 6157
8d64371b
TT
6158 p = rs->buf.data ();
6159 endp = p + get_remote_packet_size ();
82f73884 6160
506fb367
DJ
6161 /* If we could generate a wider range of packets, we'd have to worry
6162 about overflowing BUF. Should there be a generic
6163 "multi-part-packet" packet? */
6164
0d8f58ca
PA
6165 p += xsnprintf (p, endp - p, "vCont");
6166
d7e15655 6167 if (ptid == magic_null_ptid)
c906108c 6168 {
79d7f229
PA
6169 /* MAGIC_NULL_PTID means that we don't have any active threads,
6170 so we don't have any TID numbers the inferior will
6171 understand. Make sure to only send forms that do not specify
6172 a TID. */
a9cbf802 6173 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 6174 }
d7e15655 6175 else if (ptid == minus_one_ptid || ptid.is_pid ())
506fb367 6176 {
0d8f58ca
PA
6177 /* Resume all threads (of all processes, or of a single
6178 process), with preference for INFERIOR_PTID. This assumes
6179 inferior_ptid belongs to the set of all threads we are about
6180 to resume. */
a493e3e2 6181 if (step || siggnal != GDB_SIGNAL_0)
82f73884 6182 {
0d8f58ca
PA
6183 /* Step inferior_ptid, with or without signal. */
6184 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 6185 }
0d8f58ca 6186
e5ef252a
PA
6187 /* Also pass down any pending signaled resumption for other
6188 threads not the current. */
6189 p = append_pending_thread_resumptions (p, endp, ptid);
6190
0d8f58ca 6191 /* And continue others without a signal. */
a493e3e2 6192 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
6193 }
6194 else
506fb367
DJ
6195 {
6196 /* Scheduler locking; resume only PTID. */
a9cbf802 6197 append_resumption (p, endp, ptid, step, siggnal);
506fb367 6198 }
c906108c 6199
8d64371b 6200 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ());
82f73884 6201 putpkt (rs->buf);
506fb367 6202
6efcd9a8 6203 if (target_is_non_stop_p ())
74531fed
PA
6204 {
6205 /* In non-stop, the stub replies to vCont with "OK". The stop
6206 reply will be reported asynchronously by means of a `%Stop'
6207 notification. */
8d64371b
TT
6208 getpkt (&rs->buf, 0);
6209 if (strcmp (rs->buf.data (), "OK") != 0)
6210 error (_("Unexpected vCont reply in non-stop mode: %s"),
6211 rs->buf.data ());
74531fed
PA
6212 }
6213
506fb367 6214 return 1;
c906108c 6215}
43ff13b4 6216
506fb367
DJ
6217/* Tell the remote machine to resume. */
6218
f6ac5f3d
PA
6219void
6220remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 6221{
d01949b6 6222 struct remote_state *rs = get_remote_state ();
43ff13b4 6223
85ad3aaf
PA
6224 /* When connected in non-stop mode, the core resumes threads
6225 individually. Resuming remote threads directly in target_resume
6226 would thus result in sending one packet per thread. Instead, to
6227 minimize roundtrip latency, here we just store the resume
6228 request; the actual remote resumption will be done in
6229 target_commit_resume / remote_commit_resume, where we'll be able
6230 to do vCont action coalescing. */
f6ac5f3d 6231 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
85ad3aaf 6232 {
7aabaf9d 6233 remote_thread_info *remote_thr;
85ad3aaf 6234
d7e15655 6235 if (minus_one_ptid == ptid || ptid.is_pid ())
7aabaf9d 6236 remote_thr = get_remote_thread_info (inferior_ptid);
85ad3aaf 6237 else
7aabaf9d
SM
6238 remote_thr = get_remote_thread_info (ptid);
6239
85ad3aaf
PA
6240 remote_thr->last_resume_step = step;
6241 remote_thr->last_resume_sig = siggnal;
6242 return;
6243 }
6244
722247f1
YQ
6245 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6246 (explained in remote-notif.c:handle_notification) so
6247 remote_notif_process is not called. We need find a place where
6248 it is safe to start a 'vNotif' sequence. It is good to do it
6249 before resuming inferior, because inferior was stopped and no RSP
6250 traffic at that moment. */
6efcd9a8 6251 if (!target_is_non_stop_p ())
5965e028 6252 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 6253
f6ac5f3d 6254 rs->last_resume_exec_dir = ::execution_direction;
3a00c802 6255
7b68ffbb
PA
6256 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6257 if (!remote_resume_with_vcont (ptid, step, siggnal))
6b8edb51 6258 remote_resume_with_hc (ptid, step, siggnal);
43ff13b4 6259
2acceee2 6260 /* We are about to start executing the inferior, let's register it
0df8b418
MS
6261 with the event loop. NOTE: this is the one place where all the
6262 execution commands end up. We could alternatively do this in each
23860348 6263 of the execution commands in infcmd.c. */
2acceee2
JM
6264 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6265 into infcmd.c in order to allow inferior function calls to work
23860348 6266 NOT asynchronously. */
362646f5 6267 if (target_can_async_p ())
6a3753b3 6268 target_async (1);
e24a49d8
PA
6269
6270 /* We've just told the target to resume. The remote server will
6271 wait for the inferior to stop, and then send a stop reply. In
6272 the mean time, we can't start another command/query ourselves
74531fed
PA
6273 because the stub wouldn't be ready to process it. This applies
6274 only to the base all-stop protocol, however. In non-stop (which
6275 only supports vCont), the stub replies with an "OK", and is
6276 immediate able to process further serial input. */
6efcd9a8 6277 if (!target_is_non_stop_p ())
74531fed 6278 rs->waiting_for_stop_reply = 1;
43ff13b4 6279}
85ad3aaf 6280
85ad3aaf
PA
6281static int is_pending_fork_parent_thread (struct thread_info *thread);
6282
6283/* Private per-inferior info for target remote processes. */
6284
089354bb 6285struct remote_inferior : public private_inferior
85ad3aaf
PA
6286{
6287 /* Whether we can send a wildcard vCont for this process. */
089354bb 6288 bool may_wildcard_vcont = true;
85ad3aaf
PA
6289};
6290
089354bb
SM
6291/* Get the remote private inferior data associated to INF. */
6292
6293static remote_inferior *
6294get_remote_inferior (inferior *inf)
6295{
6296 if (inf->priv == NULL)
6297 inf->priv.reset (new remote_inferior);
6298
6299 return static_cast<remote_inferior *> (inf->priv.get ());
6300}
6301
f5db4863 6302/* Class used to track the construction of a vCont packet in the
85ad3aaf
PA
6303 outgoing packet buffer. This is used to send multiple vCont
6304 packets if we have more actions than would fit a single packet. */
6305
f5db4863 6306class vcont_builder
85ad3aaf 6307{
f5db4863 6308public:
6b8edb51
PA
6309 explicit vcont_builder (remote_target *remote)
6310 : m_remote (remote)
f5db4863
PA
6311 {
6312 restart ();
6313 }
6314
6315 void flush ();
6316 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6317
6318private:
6319 void restart ();
6320
6b8edb51
PA
6321 /* The remote target. */
6322 remote_target *m_remote;
6323
85ad3aaf
PA
6324 /* Pointer to the first action. P points here if no action has been
6325 appended yet. */
f5db4863 6326 char *m_first_action;
85ad3aaf
PA
6327
6328 /* Where the next action will be appended. */
f5db4863 6329 char *m_p;
85ad3aaf
PA
6330
6331 /* The end of the buffer. Must never write past this. */
f5db4863 6332 char *m_endp;
85ad3aaf
PA
6333};
6334
6335/* Prepare the outgoing buffer for a new vCont packet. */
6336
f5db4863
PA
6337void
6338vcont_builder::restart ()
85ad3aaf 6339{
6b8edb51 6340 struct remote_state *rs = m_remote->get_remote_state ();
85ad3aaf 6341
8d64371b
TT
6342 m_p = rs->buf.data ();
6343 m_endp = m_p + m_remote->get_remote_packet_size ();
f5db4863
PA
6344 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6345 m_first_action = m_p;
85ad3aaf
PA
6346}
6347
6348/* If the vCont packet being built has any action, send it to the
6349 remote end. */
6350
f5db4863
PA
6351void
6352vcont_builder::flush ()
85ad3aaf
PA
6353{
6354 struct remote_state *rs;
6355
f5db4863 6356 if (m_p == m_first_action)
85ad3aaf
PA
6357 return;
6358
6b8edb51
PA
6359 rs = m_remote->get_remote_state ();
6360 m_remote->putpkt (rs->buf);
8d64371b
TT
6361 m_remote->getpkt (&rs->buf, 0);
6362 if (strcmp (rs->buf.data (), "OK") != 0)
6363 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
85ad3aaf
PA
6364}
6365
6366/* The largest action is range-stepping, with its two addresses. This
6367 is more than sufficient. If a new, bigger action is created, it'll
6368 quickly trigger a failed assertion in append_resumption (and we'll
6369 just bump this). */
6370#define MAX_ACTION_SIZE 200
6371
6372/* Append a new vCont action in the outgoing packet being built. If
6373 the action doesn't fit the packet along with previous actions, push
6374 what we've got so far to the remote end and start over a new vCont
6375 packet (with the new action). */
6376
f5db4863
PA
6377void
6378vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
85ad3aaf
PA
6379{
6380 char buf[MAX_ACTION_SIZE + 1];
85ad3aaf 6381
6b8edb51
PA
6382 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6383 ptid, step, siggnal);
85ad3aaf
PA
6384
6385 /* Check whether this new action would fit in the vCont packet along
6386 with previous actions. If not, send what we've got so far and
6387 start a new vCont packet. */
f5db4863
PA
6388 size_t rsize = endp - buf;
6389 if (rsize > m_endp - m_p)
85ad3aaf 6390 {
f5db4863
PA
6391 flush ();
6392 restart ();
85ad3aaf
PA
6393
6394 /* Should now fit. */
f5db4863 6395 gdb_assert (rsize <= m_endp - m_p);
85ad3aaf
PA
6396 }
6397
f5db4863
PA
6398 memcpy (m_p, buf, rsize);
6399 m_p += rsize;
6400 *m_p = '\0';
85ad3aaf
PA
6401}
6402
6403/* to_commit_resume implementation. */
6404
f6ac5f3d
PA
6405void
6406remote_target::commit_resume ()
85ad3aaf 6407{
85ad3aaf
PA
6408 int any_process_wildcard;
6409 int may_global_wildcard_vcont;
85ad3aaf
PA
6410
6411 /* If connected in all-stop mode, we'd send the remote resume
6412 request directly from remote_resume. Likewise if
6413 reverse-debugging, as there are no defined vCont actions for
6414 reverse execution. */
f6ac5f3d 6415 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
85ad3aaf
PA
6416 return;
6417
6418 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6419 instead of resuming all threads of each process individually.
6420 However, if any thread of a process must remain halted, we can't
6421 send wildcard resumes and must send one action per thread.
6422
6423 Care must be taken to not resume threads/processes the server
6424 side already told us are stopped, but the core doesn't know about
6425 yet, because the events are still in the vStopped notification
6426 queue. For example:
6427
6428 #1 => vCont s:p1.1;c
6429 #2 <= OK
6430 #3 <= %Stopped T05 p1.1
6431 #4 => vStopped
6432 #5 <= T05 p1.2
6433 #6 => vStopped
6434 #7 <= OK
6435 #8 (infrun handles the stop for p1.1 and continues stepping)
6436 #9 => vCont s:p1.1;c
6437
6438 The last vCont above would resume thread p1.2 by mistake, because
6439 the server has no idea that the event for p1.2 had not been
6440 handled yet.
6441
6442 The server side must similarly ignore resume actions for the
6443 thread that has a pending %Stopped notification (and any other
6444 threads with events pending), until GDB acks the notification
6445 with vStopped. Otherwise, e.g., the following case is
6446 mishandled:
6447
6448 #1 => g (or any other packet)
6449 #2 <= [registers]
6450 #3 <= %Stopped T05 p1.2
6451 #4 => vCont s:p1.1;c
6452 #5 <= OK
6453
6454 Above, the server must not resume thread p1.2. GDB can't know
6455 that p1.2 stopped until it acks the %Stopped notification, and
6456 since from GDB's perspective all threads should be running, it
6457 sends a "c" action.
6458
6459 Finally, special care must also be given to handling fork/vfork
6460 events. A (v)fork event actually tells us that two processes
6461 stopped -- the parent and the child. Until we follow the fork,
6462 we must not resume the child. Therefore, if we have a pending
6463 fork follow, we must not send a global wildcard resume action
6464 (vCont;c). We can still send process-wide wildcards though. */
6465
6466 /* Start by assuming a global wildcard (vCont;c) is possible. */
6467 may_global_wildcard_vcont = 1;
6468
6469 /* And assume every process is individually wildcard-able too. */
08036331 6470 for (inferior *inf : all_non_exited_inferiors ())
85ad3aaf 6471 {
089354bb
SM
6472 remote_inferior *priv = get_remote_inferior (inf);
6473
6474 priv->may_wildcard_vcont = true;
85ad3aaf
PA
6475 }
6476
6477 /* Check for any pending events (not reported or processed yet) and
6478 disable process and global wildcard resumes appropriately. */
6479 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6480
08036331 6481 for (thread_info *tp : all_non_exited_threads ())
85ad3aaf
PA
6482 {
6483 /* If a thread of a process is not meant to be resumed, then we
6484 can't wildcard that process. */
6485 if (!tp->executing)
6486 {
089354bb 6487 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
85ad3aaf
PA
6488
6489 /* And if we can't wildcard a process, we can't wildcard
6490 everything either. */
6491 may_global_wildcard_vcont = 0;
6492 continue;
6493 }
6494
6495 /* If a thread is the parent of an unfollowed fork, then we
6496 can't do a global wildcard, as that would resume the fork
6497 child. */
6498 if (is_pending_fork_parent_thread (tp))
6499 may_global_wildcard_vcont = 0;
6500 }
6501
6502 /* Now let's build the vCont packet(s). Actions must be appended
6503 from narrower to wider scopes (thread -> process -> global). If
6504 we end up with too many actions for a single packet vcont_builder
6505 flushes the current vCont packet to the remote side and starts a
6506 new one. */
6b8edb51 6507 struct vcont_builder vcont_builder (this);
85ad3aaf
PA
6508
6509 /* Threads first. */
08036331 6510 for (thread_info *tp : all_non_exited_threads ())
85ad3aaf 6511 {
7aabaf9d 6512 remote_thread_info *remote_thr = get_remote_thread_info (tp);
85ad3aaf
PA
6513
6514 if (!tp->executing || remote_thr->vcont_resumed)
6515 continue;
6516
6517 gdb_assert (!thread_is_in_step_over_chain (tp));
6518
6519 if (!remote_thr->last_resume_step
6520 && remote_thr->last_resume_sig == GDB_SIGNAL_0
089354bb 6521 && get_remote_inferior (tp->inf)->may_wildcard_vcont)
85ad3aaf
PA
6522 {
6523 /* We'll send a wildcard resume instead. */
6524 remote_thr->vcont_resumed = 1;
6525 continue;
6526 }
6527
f5db4863 6528 vcont_builder.push_action (tp->ptid,
85ad3aaf
PA
6529 remote_thr->last_resume_step,
6530 remote_thr->last_resume_sig);
6531 remote_thr->vcont_resumed = 1;
6532 }
6533
6534 /* Now check whether we can send any process-wide wildcard. This is
6535 to avoid sending a global wildcard in the case nothing is
6536 supposed to be resumed. */
6537 any_process_wildcard = 0;
6538
08036331 6539 for (inferior *inf : all_non_exited_inferiors ())
85ad3aaf 6540 {
089354bb 6541 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf
PA
6542 {
6543 any_process_wildcard = 1;
6544 break;
6545 }
6546 }
6547
6548 if (any_process_wildcard)
6549 {
6550 /* If all processes are wildcard-able, then send a single "c"
6551 action, otherwise, send an "all (-1) threads of process"
6552 continue action for each running process, if any. */
6553 if (may_global_wildcard_vcont)
6554 {
f5db4863
PA
6555 vcont_builder.push_action (minus_one_ptid,
6556 false, GDB_SIGNAL_0);
85ad3aaf
PA
6557 }
6558 else
6559 {
08036331 6560 for (inferior *inf : all_non_exited_inferiors ())
85ad3aaf 6561 {
089354bb 6562 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf 6563 {
f2907e49 6564 vcont_builder.push_action (ptid_t (inf->pid),
f5db4863 6565 false, GDB_SIGNAL_0);
85ad3aaf
PA
6566 }
6567 }
6568 }
6569 }
6570
f5db4863 6571 vcont_builder.flush ();
85ad3aaf
PA
6572}
6573
c906108c 6574\f
43ff13b4 6575
74531fed
PA
6576/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6577 thread, all threads of a remote process, or all threads of all
6578 processes. */
6579
6b8edb51
PA
6580void
6581remote_target::remote_stop_ns (ptid_t ptid)
74531fed
PA
6582{
6583 struct remote_state *rs = get_remote_state ();
8d64371b
TT
6584 char *p = rs->buf.data ();
6585 char *endp = p + get_remote_packet_size ();
74531fed 6586
4082afcc 6587 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 6588 remote_vcont_probe ();
74531fed 6589
d458bd84 6590 if (!rs->supports_vCont.t)
74531fed
PA
6591 error (_("Remote server does not support stopping threads"));
6592
d7e15655 6593 if (ptid == minus_one_ptid
0e998d96 6594 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
74531fed
PA
6595 p += xsnprintf (p, endp - p, "vCont;t");
6596 else
6597 {
6598 ptid_t nptid;
6599
74531fed
PA
6600 p += xsnprintf (p, endp - p, "vCont;t:");
6601
0e998d96 6602 if (ptid.is_pid ())
74531fed 6603 /* All (-1) threads of process. */
e99b03dc 6604 nptid = ptid_t (ptid.pid (), -1, 0);
74531fed
PA
6605 else
6606 {
6607 /* Small optimization: if we already have a stop reply for
6608 this thread, no use in telling the stub we want this
6609 stopped. */
6610 if (peek_stop_reply (ptid))
6611 return;
6612
6613 nptid = ptid;
6614 }
6615
a9cbf802 6616 write_ptid (p, endp, nptid);
74531fed
PA
6617 }
6618
6619 /* In non-stop, we get an immediate OK reply. The stop reply will
6620 come in asynchronously by notification. */
6621 putpkt (rs->buf);
8d64371b
TT
6622 getpkt (&rs->buf, 0);
6623 if (strcmp (rs->buf.data (), "OK") != 0)
a068643d 6624 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
8d64371b 6625 rs->buf.data ());
74531fed
PA
6626}
6627
bfedc46a
PA
6628/* All-stop version of target_interrupt. Sends a break or a ^C to
6629 interrupt the remote target. It is undefined which thread of which
6630 process reports the interrupt. */
74531fed 6631
6b8edb51
PA
6632void
6633remote_target::remote_interrupt_as ()
74531fed
PA
6634{
6635 struct remote_state *rs = get_remote_state ();
6636
3a29589a
DJ
6637 rs->ctrlc_pending_p = 1;
6638
74531fed
PA
6639 /* If the inferior is stopped already, but the core didn't know
6640 about it yet, just ignore the request. The cached wait status
6641 will be collected in remote_wait. */
6642 if (rs->cached_wait_status)
6643 return;
6644
9a7071a8
JB
6645 /* Send interrupt_sequence to remote target. */
6646 send_interrupt_sequence ();
74531fed
PA
6647}
6648
de979965
PA
6649/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6650 the remote target. It is undefined which thread of which process
e42de8c7
PA
6651 reports the interrupt. Throws an error if the packet is not
6652 supported by the server. */
de979965 6653
6b8edb51
PA
6654void
6655remote_target::remote_interrupt_ns ()
de979965
PA
6656{
6657 struct remote_state *rs = get_remote_state ();
8d64371b
TT
6658 char *p = rs->buf.data ();
6659 char *endp = p + get_remote_packet_size ();
de979965
PA
6660
6661 xsnprintf (p, endp - p, "vCtrlC");
6662
6663 /* In non-stop, we get an immediate OK reply. The stop reply will
6664 come in asynchronously by notification. */
6665 putpkt (rs->buf);
8d64371b 6666 getpkt (&rs->buf, 0);
de979965
PA
6667
6668 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6669 {
6670 case PACKET_OK:
6671 break;
6672 case PACKET_UNKNOWN:
e42de8c7 6673 error (_("No support for interrupting the remote target."));
de979965 6674 case PACKET_ERROR:
8d64371b 6675 error (_("Interrupting target failed: %s"), rs->buf.data ());
de979965 6676 }
de979965
PA
6677}
6678
bfedc46a 6679/* Implement the to_stop function for the remote targets. */
74531fed 6680
f6ac5f3d
PA
6681void
6682remote_target::stop (ptid_t ptid)
c906108c 6683{
7a292a7a 6684 if (remote_debug)
0f71a2f6 6685 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 6686
6efcd9a8 6687 if (target_is_non_stop_p ())
74531fed 6688 remote_stop_ns (ptid);
c906108c 6689 else
bfedc46a
PA
6690 {
6691 /* We don't currently have a way to transparently pause the
6692 remote target in all-stop mode. Interrupt it instead. */
de979965 6693 remote_interrupt_as ();
bfedc46a
PA
6694 }
6695}
6696
6697/* Implement the to_interrupt function for the remote targets. */
6698
f6ac5f3d
PA
6699void
6700remote_target::interrupt ()
bfedc46a
PA
6701{
6702 if (remote_debug)
6703 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6704
e42de8c7
PA
6705 if (target_is_non_stop_p ())
6706 remote_interrupt_ns ();
bfedc46a 6707 else
e42de8c7 6708 remote_interrupt_as ();
c906108c
SS
6709}
6710
93692b58
PA
6711/* Implement the to_pass_ctrlc function for the remote targets. */
6712
f6ac5f3d
PA
6713void
6714remote_target::pass_ctrlc ()
93692b58
PA
6715{
6716 struct remote_state *rs = get_remote_state ();
6717
6718 if (remote_debug)
6719 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6720
6721 /* If we're starting up, we're not fully synced yet. Quit
6722 immediately. */
6723 if (rs->starting_up)
6724 quit ();
6725 /* If ^C has already been sent once, offer to disconnect. */
6726 else if (rs->ctrlc_pending_p)
6727 interrupt_query ();
6728 else
e671cd59 6729 target_interrupt ();
93692b58
PA
6730}
6731
c906108c
SS
6732/* Ask the user what to do when an interrupt is received. */
6733
6b8edb51
PA
6734void
6735remote_target::interrupt_query ()
c906108c 6736{
abc56d60 6737 struct remote_state *rs = get_remote_state ();
c906108c 6738
abc56d60 6739 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 6740 {
abc56d60
PA
6741 if (query (_("The target is not responding to interrupt requests.\n"
6742 "Stop debugging it? ")))
74531fed 6743 {
78a095c3 6744 remote_unpush_target ();
abc56d60 6745 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
6746 }
6747 }
abc56d60
PA
6748 else
6749 {
6750 if (query (_("Interrupted while waiting for the program.\n"
6751 "Give up waiting? ")))
6752 quit ();
6753 }
c906108c
SS
6754}
6755
6426a772
JM
6756/* Enable/disable target terminal ownership. Most targets can use
6757 terminal groups to control terminal ownership. Remote targets are
6758 different in that explicit transfer of ownership to/from GDB/target
23860348 6759 is required. */
6426a772 6760
f6ac5f3d
PA
6761void
6762remote_target::terminal_inferior ()
6426a772 6763{
6426a772
JM
6764 /* NOTE: At this point we could also register our selves as the
6765 recipient of all input. Any characters typed could then be
23860348 6766 passed on down to the target. */
6426a772
JM
6767}
6768
f6ac5f3d
PA
6769void
6770remote_target::terminal_ours ()
6426a772 6771{
6426a772
JM
6772}
6773
176a6961 6774static void
05be00a8 6775remote_console_output (const char *msg)
c906108c 6776{
05be00a8 6777 const char *p;
c906108c 6778
c5aa993b 6779 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
6780 {
6781 char tb[2];
6782 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 6783
c906108c
SS
6784 tb[0] = c;
6785 tb[1] = 0;
43ff13b4 6786 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 6787 }
00db5b94
PA
6788 gdb_flush (gdb_stdtarg);
6789}
74531fed 6790
32603266 6791struct stop_reply : public notif_event
74531fed 6792{
32603266 6793 ~stop_reply ();
74531fed 6794
722247f1 6795 /* The identifier of the thread about this event */
74531fed
PA
6796 ptid_t ptid;
6797
340e3c99 6798 /* The remote state this event is associated with. When the remote
bcc75809
YQ
6799 connection, represented by a remote_state object, is closed,
6800 all the associated stop_reply events should be released. */
6801 struct remote_state *rs;
6802
74531fed
PA
6803 struct target_waitstatus ws;
6804
5cd63fda
PA
6805 /* The architecture associated with the expedited registers. */
6806 gdbarch *arch;
6807
15148d6a
PA
6808 /* Expedited registers. This makes remote debugging a bit more
6809 efficient for those targets that provide critical registers as
6810 part of their normal status mechanism (as another roundtrip to
6811 fetch them is avoided). */
32603266 6812 std::vector<cached_reg_t> regcache;
74531fed 6813
f7e6eed5
PA
6814 enum target_stop_reason stop_reason;
6815
74531fed
PA
6816 CORE_ADDR watch_data_address;
6817
dc146f7c 6818 int core;
32603266 6819};
c906108c 6820
221e1a37
PA
6821/* Return the length of the stop reply queue. */
6822
6b8edb51
PA
6823int
6824remote_target::stop_reply_queue_length ()
221e1a37 6825{
6b8edb51 6826 remote_state *rs = get_remote_state ();
953edf2b 6827 return rs->stop_reply_queue.size ();
221e1a37
PA
6828}
6829
6b8edb51
PA
6830void
6831remote_notif_stop_parse (remote_target *remote,
bb277751 6832 struct notif_client *self, const char *buf,
722247f1
YQ
6833 struct notif_event *event)
6834{
6b8edb51 6835 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
722247f1
YQ
6836}
6837
6838static void
6b8edb51 6839remote_notif_stop_ack (remote_target *remote,
bb277751 6840 struct notif_client *self, const char *buf,
722247f1
YQ
6841 struct notif_event *event)
6842{
6843 struct stop_reply *stop_reply = (struct stop_reply *) event;
6844
6845 /* acknowledge */
6b8edb51 6846 putpkt (remote, self->ack_command);
722247f1
YQ
6847
6848 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6b8edb51 6849 {
722247f1
YQ
6850 /* We got an unknown stop reply. */
6851 error (_("Unknown stop reply"));
6b8edb51 6852 }
722247f1 6853
6b8edb51 6854 remote->push_stop_reply (stop_reply);
722247f1
YQ
6855}
6856
6857static int
6b8edb51
PA
6858remote_notif_stop_can_get_pending_events (remote_target *remote,
6859 struct notif_client *self)
722247f1
YQ
6860{
6861 /* We can't get pending events in remote_notif_process for
6862 notification stop, and we have to do this in remote_wait_ns
6863 instead. If we fetch all queued events from stub, remote stub
6864 may exit and we have no chance to process them back in
6865 remote_wait_ns. */
6b8edb51
PA
6866 remote_state *rs = remote->get_remote_state ();
6867 mark_async_event_handler (rs->remote_async_inferior_event_token);
722247f1
YQ
6868 return 0;
6869}
6870
32603266 6871stop_reply::~stop_reply ()
722247f1 6872{
32603266
TT
6873 for (cached_reg_t &reg : regcache)
6874 xfree (reg.data);
722247f1
YQ
6875}
6876
32603266
TT
6877static notif_event_up
6878remote_notif_stop_alloc_reply ()
722247f1 6879{
32603266 6880 return notif_event_up (new struct stop_reply ());
722247f1
YQ
6881}
6882
6883/* A client of notification Stop. */
6884
6885struct notif_client notif_client_stop =
6886{
6887 "Stop",
6888 "vStopped",
6889 remote_notif_stop_parse,
6890 remote_notif_stop_ack,
6891 remote_notif_stop_can_get_pending_events,
6892 remote_notif_stop_alloc_reply,
f48ff2a7 6893 REMOTE_NOTIF_STOP,
722247f1
YQ
6894};
6895
85ad3aaf 6896/* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
cbb8991c
DB
6897 the pid of the process that owns the threads we want to check, or
6898 -1 if we want to check all threads. */
6899
6900static int
6901is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6902 ptid_t thread_ptid)
6903{
6904 if (ws->kind == TARGET_WAITKIND_FORKED
6905 || ws->kind == TARGET_WAITKIND_VFORKED)
6906 {
e99b03dc 6907 if (event_pid == -1 || event_pid == thread_ptid.pid ())
cbb8991c
DB
6908 return 1;
6909 }
6910
6911 return 0;
6912}
6913
85ad3aaf
PA
6914/* Return the thread's pending status used to determine whether the
6915 thread is a fork parent stopped at a fork event. */
6916
6917static struct target_waitstatus *
6918thread_pending_fork_status (struct thread_info *thread)
6919{
6920 if (thread->suspend.waitstatus_pending_p)
6921 return &thread->suspend.waitstatus;
6922 else
6923 return &thread->pending_follow;
6924}
6925
6926/* Determine if THREAD is a pending fork parent thread. */
6927
6928static int
6929is_pending_fork_parent_thread (struct thread_info *thread)
6930{
6931 struct target_waitstatus *ws = thread_pending_fork_status (thread);
6932 int pid = -1;
6933
6934 return is_pending_fork_parent (ws, pid, thread->ptid);
6935}
6936
cbb8991c
DB
6937/* If CONTEXT contains any fork child threads that have not been
6938 reported yet, remove them from the CONTEXT list. If such a
6939 thread exists it is because we are stopped at a fork catchpoint
6940 and have not yet called follow_fork, which will set up the
6941 host-side data structures for the new process. */
6942
6b8edb51
PA
6943void
6944remote_target::remove_new_fork_children (threads_listing_context *context)
cbb8991c 6945{
cbb8991c
DB
6946 int pid = -1;
6947 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
6948
6949 /* For any threads stopped at a fork event, remove the corresponding
6950 fork child threads from the CONTEXT list. */
08036331 6951 for (thread_info *thread : all_non_exited_threads ())
cbb8991c 6952 {
85ad3aaf 6953 struct target_waitstatus *ws = thread_pending_fork_status (thread);
cbb8991c
DB
6954
6955 if (is_pending_fork_parent (ws, pid, thread->ptid))
21fe1c75 6956 context->remove_thread (ws->value.related_pid);
cbb8991c
DB
6957 }
6958
6959 /* Check for any pending fork events (not reported or processed yet)
6960 in process PID and remove those fork child threads from the
6961 CONTEXT list as well. */
6962 remote_notif_get_pending_events (notif);
953edf2b
TT
6963 for (auto &event : get_remote_state ()->stop_reply_queue)
6964 if (event->ws.kind == TARGET_WAITKIND_FORKED
6965 || event->ws.kind == TARGET_WAITKIND_VFORKED
6966 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6967 context->remove_thread (event->ws.value.related_pid);
85ad3aaf
PA
6968}
6969
6970/* Check whether any event pending in the vStopped queue would prevent
6971 a global or process wildcard vCont action. Clear
6972 *may_global_wildcard if we can't do a global wildcard (vCont;c),
6973 and clear the event inferior's may_wildcard_vcont flag if we can't
6974 do a process-wide wildcard resume (vCont;c:pPID.-1). */
6975
6b8edb51
PA
6976void
6977remote_target::check_pending_events_prevent_wildcard_vcont
6978 (int *may_global_wildcard)
85ad3aaf
PA
6979{
6980 struct notif_client *notif = &notif_client_stop;
6981
6982 remote_notif_get_pending_events (notif);
953edf2b
TT
6983 for (auto &event : get_remote_state ()->stop_reply_queue)
6984 {
6985 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6986 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6987 continue;
85ad3aaf 6988
953edf2b
TT
6989 if (event->ws.kind == TARGET_WAITKIND_FORKED
6990 || event->ws.kind == TARGET_WAITKIND_VFORKED)
6991 *may_global_wildcard = 0;
722247f1 6992
953edf2b 6993 struct inferior *inf = find_inferior_ptid (event->ptid);
722247f1 6994
953edf2b
TT
6995 /* This may be the first time we heard about this process.
6996 Regardless, we must not do a global wildcard resume, otherwise
6997 we'd resume this process too. */
6998 *may_global_wildcard = 0;
6999 if (inf != NULL)
7000 get_remote_inferior (inf)->may_wildcard_vcont = false;
722247f1 7001 }
722247f1
YQ
7002}
7003
f48ff2a7 7004/* Discard all pending stop replies of inferior INF. */
c906108c 7005
6b8edb51
PA
7006void
7007remote_target::discard_pending_stop_replies (struct inferior *inf)
c906108c 7008{
f48ff2a7
YQ
7009 struct stop_reply *reply;
7010 struct remote_state *rs = get_remote_state ();
7011 struct remote_notif_state *rns = rs->notif_state;
7012
7013 /* This function can be notified when an inferior exists. When the
7014 target is not remote, the notification state is NULL. */
7015 if (rs->remote_desc == NULL)
7016 return;
7017
7018 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 7019
74531fed 7020 /* Discard the in-flight notification. */
e99b03dc 7021 if (reply != NULL && reply->ptid.pid () == inf->pid)
74531fed 7022 {
32603266 7023 delete reply;
f48ff2a7 7024 rns->pending_event[notif_client_stop.id] = NULL;
74531fed 7025 }
c906108c 7026
74531fed
PA
7027 /* Discard the stop replies we have already pulled with
7028 vStopped. */
953edf2b
TT
7029 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7030 rs->stop_reply_queue.end (),
7031 [=] (const stop_reply_up &event)
7032 {
7033 return event->ptid.pid () == inf->pid;
7034 });
7035 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
bcc75809
YQ
7036}
7037
7038/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7 7039
6b8edb51
PA
7040void
7041remote_target::discard_pending_stop_replies_in_queue ()
f48ff2a7 7042{
6b8edb51 7043 remote_state *rs = get_remote_state ();
f48ff2a7 7044
f48ff2a7
YQ
7045 /* Discard the stop replies we have already pulled with
7046 vStopped. */
953edf2b
TT
7047 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7048 rs->stop_reply_queue.end (),
7049 [=] (const stop_reply_up &event)
7050 {
7051 return event->rs == rs;
7052 });
7053 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
74531fed 7054}
43ff13b4 7055
722247f1
YQ
7056/* Remove the first reply in 'stop_reply_queue' which matches
7057 PTID. */
2e9f7625 7058
6b8edb51
PA
7059struct stop_reply *
7060remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 7061{
953edf2b 7062 remote_state *rs = get_remote_state ();
722247f1 7063
953edf2b
TT
7064 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7065 rs->stop_reply_queue.end (),
7066 [=] (const stop_reply_up &event)
7067 {
7068 return event->ptid.matches (ptid);
7069 });
7070 struct stop_reply *result;
7071 if (iter == rs->stop_reply_queue.end ())
7072 result = nullptr;
7073 else
7074 {
7075 result = iter->release ();
7076 rs->stop_reply_queue.erase (iter);
7077 }
722247f1 7078
722247f1
YQ
7079 if (notif_debug)
7080 fprintf_unfiltered (gdb_stdlog,
7081 "notif: discard queued event: 'Stop' in %s\n",
a068643d 7082 target_pid_to_str (ptid).c_str ());
a744cf53 7083
953edf2b 7084 return result;
74531fed 7085}
75c99385 7086
74531fed
PA
7087/* Look for a queued stop reply belonging to PTID. If one is found,
7088 remove it from the queue, and return it. Returns NULL if none is
7089 found. If there are still queued events left to process, tell the
7090 event loop to get back to target_wait soon. */
e24a49d8 7091
6b8edb51
PA
7092struct stop_reply *
7093remote_target::queued_stop_reply (ptid_t ptid)
74531fed 7094{
953edf2b 7095 remote_state *rs = get_remote_state ();
722247f1 7096 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 7097
953edf2b 7098 if (!rs->stop_reply_queue.empty ())
6b8edb51 7099 {
6b8edb51
PA
7100 /* There's still at least an event left. */
7101 mark_async_event_handler (rs->remote_async_inferior_event_token);
7102 }
74531fed 7103
722247f1 7104 return r;
74531fed
PA
7105}
7106
7107/* Push a fully parsed stop reply in the stop reply queue. Since we
7108 know that we now have at least one queued event left to pass to the
7109 core side, tell the event loop to get back to target_wait soon. */
7110
6b8edb51
PA
7111void
7112remote_target::push_stop_reply (struct stop_reply *new_event)
74531fed 7113{
6b8edb51 7114 remote_state *rs = get_remote_state ();
953edf2b 7115 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
74531fed 7116
722247f1
YQ
7117 if (notif_debug)
7118 fprintf_unfiltered (gdb_stdlog,
7119 "notif: push 'Stop' %s to queue %d\n",
a068643d 7120 target_pid_to_str (new_event->ptid).c_str (),
953edf2b 7121 int (rs->stop_reply_queue.size ()));
74531fed 7122
6b8edb51 7123 mark_async_event_handler (rs->remote_async_inferior_event_token);
74531fed
PA
7124}
7125
7126/* Returns true if we have a stop reply for PTID. */
7127
6b8edb51
PA
7128int
7129remote_target::peek_stop_reply (ptid_t ptid)
74531fed 7130{
6b8edb51 7131 remote_state *rs = get_remote_state ();
953edf2b
TT
7132 for (auto &event : rs->stop_reply_queue)
7133 if (ptid == event->ptid
7134 && event->ws.kind == TARGET_WAITKIND_STOPPED)
7135 return 1;
7136 return 0;
74531fed
PA
7137}
7138
26d56a93
SL
7139/* Helper for remote_parse_stop_reply. Return nonzero if the substring
7140 starting with P and ending with PEND matches PREFIX. */
7141
7142static int
7143strprefix (const char *p, const char *pend, const char *prefix)
7144{
7145 for ( ; p < pend; p++, prefix++)
7146 if (*p != *prefix)
7147 return 0;
7148 return *prefix == '\0';
7149}
7150
74531fed
PA
7151/* Parse the stop reply in BUF. Either the function succeeds, and the
7152 result is stored in EVENT, or throws an error. */
7153
6b8edb51 7154void
bb277751 7155remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event)
74531fed 7156{
5cd63fda 7157 remote_arch_state *rsa = NULL;
74531fed 7158 ULONGEST addr;
256642e8 7159 const char *p;
94585166 7160 int skipregs = 0;
74531fed
PA
7161
7162 event->ptid = null_ptid;
bcc75809 7163 event->rs = get_remote_state ();
74531fed
PA
7164 event->ws.kind = TARGET_WAITKIND_IGNORE;
7165 event->ws.value.integer = 0;
f7e6eed5 7166 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
32603266 7167 event->regcache.clear ();
dc146f7c 7168 event->core = -1;
74531fed
PA
7169
7170 switch (buf[0])
7171 {
7172 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
7173 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7174 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7175 ss = signal number
7176 n... = register number
7177 r... = register contents
7178 */
7179
7180 p = &buf[3]; /* after Txx */
7181 while (*p)
7182 {
256642e8 7183 const char *p1;
cea39f65 7184 int fieldsize;
43ff13b4 7185
1f10ba14
PA
7186 p1 = strchr (p, ':');
7187 if (p1 == NULL)
7188 error (_("Malformed packet(a) (missing colon): %s\n\
7189Packet: '%s'\n"),
7190 p, buf);
7191 if (p == p1)
7192 error (_("Malformed packet(a) (missing register number): %s\n\
7193Packet: '%s'\n"),
7194 p, buf);
3c3bea1c 7195
1f10ba14
PA
7196 /* Some "registers" are actually extended stop information.
7197 Note if you're adding a new entry here: GDB 7.9 and
7198 earlier assume that all register "numbers" that start
7199 with an hex digit are real register numbers. Make sure
7200 the server only sends such a packet if it knows the
7201 client understands it. */
c8e38a49 7202
26d56a93 7203 if (strprefix (p, p1, "thread"))
1f10ba14 7204 event->ptid = read_ptid (++p1, &p);
82075af2
JS
7205 else if (strprefix (p, p1, "syscall_entry"))
7206 {
7207 ULONGEST sysno;
7208
7209 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7210 p = unpack_varlen_hex (++p1, &sysno);
7211 event->ws.value.syscall_number = (int) sysno;
7212 }
7213 else if (strprefix (p, p1, "syscall_return"))
7214 {
7215 ULONGEST sysno;
7216
7217 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7218 p = unpack_varlen_hex (++p1, &sysno);
7219 event->ws.value.syscall_number = (int) sysno;
7220 }
26d56a93
SL
7221 else if (strprefix (p, p1, "watch")
7222 || strprefix (p, p1, "rwatch")
7223 || strprefix (p, p1, "awatch"))
cea39f65 7224 {
f7e6eed5 7225 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
7226 p = unpack_varlen_hex (++p1, &addr);
7227 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 7228 }
26d56a93 7229 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
7230 {
7231 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7232
7233 /* Make sure the stub doesn't forget to indicate support
7234 with qSupported. */
7235 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7236 error (_("Unexpected swbreak stop reason"));
7237
7238 /* The value part is documented as "must be empty",
7239 though we ignore it, in case we ever decide to make
7240 use of it in a backward compatible way. */
8424cc97 7241 p = strchrnul (p1 + 1, ';');
f7e6eed5 7242 }
26d56a93 7243 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
7244 {
7245 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7246
7247 /* Make sure the stub doesn't forget to indicate support
7248 with qSupported. */
7249 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7250 error (_("Unexpected hwbreak stop reason"));
7251
7252 /* See above. */
8424cc97 7253 p = strchrnul (p1 + 1, ';');
f7e6eed5 7254 }
26d56a93 7255 else if (strprefix (p, p1, "library"))
cea39f65 7256 {
1f10ba14 7257 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 7258 p = strchrnul (p1 + 1, ';');
1f10ba14 7259 }
26d56a93 7260 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
7261 {
7262 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7263 /* p1 will indicate "begin" or "end", but it makes
7264 no difference for now, so ignore it. */
8424cc97 7265 p = strchrnul (p1 + 1, ';');
1f10ba14 7266 }
26d56a93 7267 else if (strprefix (p, p1, "core"))
1f10ba14
PA
7268 {
7269 ULONGEST c;
a744cf53 7270
1f10ba14
PA
7271 p = unpack_varlen_hex (++p1, &c);
7272 event->core = c;
cea39f65 7273 }
26d56a93 7274 else if (strprefix (p, p1, "fork"))
de0d863e
DB
7275 {
7276 event->ws.value.related_pid = read_ptid (++p1, &p);
7277 event->ws.kind = TARGET_WAITKIND_FORKED;
7278 }
26d56a93 7279 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
7280 {
7281 event->ws.value.related_pid = read_ptid (++p1, &p);
7282 event->ws.kind = TARGET_WAITKIND_VFORKED;
7283 }
26d56a93 7284 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
7285 {
7286 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 7287 p = strchrnul (p1 + 1, ';');
c269dbdb 7288 }
6ab24463 7289 else if (strprefix (p, p1, "exec"))
94585166
DB
7290 {
7291 ULONGEST ignored;
94585166
DB
7292 int pathlen;
7293
7294 /* Determine the length of the execd pathname. */
7295 p = unpack_varlen_hex (++p1, &ignored);
7296 pathlen = (p - p1) / 2;
7297
7298 /* Save the pathname for event reporting and for
7299 the next run command. */
c6321f19
TT
7300 gdb::unique_xmalloc_ptr<char[]> pathname
7301 ((char *) xmalloc (pathlen + 1));
7302 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen);
94585166
DB
7303 pathname[pathlen] = '\0';
7304
7305 /* This is freed during event handling. */
c6321f19 7306 event->ws.value.execd_pathname = pathname.release ();
94585166
DB
7307 event->ws.kind = TARGET_WAITKIND_EXECD;
7308
7309 /* Skip the registers included in this packet, since
7310 they may be for an architecture different from the
7311 one used by the original program. */
7312 skipregs = 1;
7313 }
65706a29
PA
7314 else if (strprefix (p, p1, "create"))
7315 {
7316 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 7317 p = strchrnul (p1 + 1, ';');
65706a29 7318 }
cea39f65
MS
7319 else
7320 {
1f10ba14 7321 ULONGEST pnum;
256642e8 7322 const char *p_temp;
1f10ba14 7323
94585166
DB
7324 if (skipregs)
7325 {
8424cc97 7326 p = strchrnul (p1 + 1, ';');
94585166
DB
7327 p++;
7328 continue;
7329 }
7330
1f10ba14
PA
7331 /* Maybe a real ``P'' register number. */
7332 p_temp = unpack_varlen_hex (p, &pnum);
7333 /* If the first invalid character is the colon, we got a
7334 register number. Otherwise, it's an unknown stop
7335 reason. */
7336 if (p_temp == p1)
7337 {
5cd63fda
PA
7338 /* If we haven't parsed the event's thread yet, find
7339 it now, in order to find the architecture of the
7340 reported expedited registers. */
7341 if (event->ptid == null_ptid)
7342 {
7343 const char *thr = strstr (p1 + 1, ";thread:");
7344 if (thr != NULL)
7345 event->ptid = read_ptid (thr + strlen (";thread:"),
7346 NULL);
7347 else
3cada740
PA
7348 {
7349 /* Either the current thread hasn't changed,
7350 or the inferior is not multi-threaded.
7351 The event must be for the thread we last
7352 set as (or learned as being) current. */
7353 event->ptid = event->rs->general_thread;
7354 }
5cd63fda
PA
7355 }
7356
7357 if (rsa == NULL)
7358 {
7359 inferior *inf = (event->ptid == null_ptid
7360 ? NULL
7361 : find_inferior_ptid (event->ptid));
7362 /* If this is the first time we learn anything
7363 about this process, skip the registers
7364 included in this packet, since we don't yet
7365 know which architecture to use to parse them.
7366 We'll determine the architecture later when
7367 we process the stop reply and retrieve the
7368 target description, via
7369 remote_notice_new_inferior ->
7370 post_create_inferior. */
7371 if (inf == NULL)
7372 {
7373 p = strchrnul (p1 + 1, ';');
7374 p++;
7375 continue;
7376 }
7377
7378 event->arch = inf->gdbarch;
9d6eea31 7379 rsa = event->rs->get_remote_arch_state (event->arch);
5cd63fda
PA
7380 }
7381
7382 packet_reg *reg
7383 = packet_reg_from_pnum (event->arch, rsa, pnum);
1f10ba14 7384 cached_reg_t cached_reg;
43ff13b4 7385
1f10ba14
PA
7386 if (reg == NULL)
7387 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 7388Packet: '%s'\n"),
1f10ba14 7389 hex_string (pnum), p, buf);
c8e38a49 7390
1f10ba14 7391 cached_reg.num = reg->regnum;
d1dff226 7392 cached_reg.data = (gdb_byte *)
5cd63fda 7393 xmalloc (register_size (event->arch, reg->regnum));
4100683b 7394
1f10ba14
PA
7395 p = p1 + 1;
7396 fieldsize = hex2bin (p, cached_reg.data,
5cd63fda 7397 register_size (event->arch, reg->regnum));
1f10ba14 7398 p += 2 * fieldsize;
5cd63fda 7399 if (fieldsize < register_size (event->arch, reg->regnum))
1f10ba14 7400 warning (_("Remote reply is too short: %s"), buf);
74531fed 7401
32603266 7402 event->regcache.push_back (cached_reg);
1f10ba14
PA
7403 }
7404 else
7405 {
7406 /* Not a number. Silently skip unknown optional
7407 info. */
8424cc97 7408 p = strchrnul (p1 + 1, ';');
1f10ba14 7409 }
cea39f65 7410 }
c8e38a49 7411
cea39f65
MS
7412 if (*p != ';')
7413 error (_("Remote register badly formatted: %s\nhere: %s"),
7414 buf, p);
7415 ++p;
7416 }
5b5596ff
PA
7417
7418 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7419 break;
7420
c8e38a49
PA
7421 /* fall through */
7422 case 'S': /* Old style status, just signal only. */
3a09da41
PA
7423 {
7424 int sig;
7425
7426 event->ws.kind = TARGET_WAITKIND_STOPPED;
7427 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7428 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7429 event->ws.value.sig = (enum gdb_signal) sig;
7430 else
7431 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7432 }
c8e38a49 7433 break;
65706a29
PA
7434 case 'w': /* Thread exited. */
7435 {
65706a29
PA
7436 ULONGEST value;
7437
7438 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7439 p = unpack_varlen_hex (&buf[1], &value);
7440 event->ws.value.integer = value;
7441 if (*p != ';')
7442 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 7443 event->ptid = read_ptid (++p, NULL);
65706a29
PA
7444 break;
7445 }
c8e38a49
PA
7446 case 'W': /* Target exited. */
7447 case 'X':
7448 {
c8e38a49
PA
7449 int pid;
7450 ULONGEST value;
82f73884 7451
c8e38a49
PA
7452 /* GDB used to accept only 2 hex chars here. Stubs should
7453 only send more if they detect GDB supports multi-process
7454 support. */
7455 p = unpack_varlen_hex (&buf[1], &value);
82f73884 7456
c8e38a49
PA
7457 if (buf[0] == 'W')
7458 {
7459 /* The remote process exited. */
74531fed
PA
7460 event->ws.kind = TARGET_WAITKIND_EXITED;
7461 event->ws.value.integer = value;
c8e38a49
PA
7462 }
7463 else
7464 {
7465 /* The remote process exited with a signal. */
74531fed 7466 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
7467 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7468 event->ws.value.sig = (enum gdb_signal) value;
7469 else
7470 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 7471 }
82f73884 7472
c8e38a49 7473 /* If no process is specified, assume inferior_ptid. */
e99b03dc 7474 pid = inferior_ptid.pid ();
c8e38a49
PA
7475 if (*p == '\0')
7476 ;
7477 else if (*p == ';')
7478 {
7479 p++;
7480
0b24eb2d 7481 if (*p == '\0')
82f73884 7482 ;
61012eef 7483 else if (startswith (p, "process:"))
82f73884 7484 {
c8e38a49 7485 ULONGEST upid;
a744cf53 7486
c8e38a49
PA
7487 p += sizeof ("process:") - 1;
7488 unpack_varlen_hex (p, &upid);
7489 pid = upid;
82f73884
PA
7490 }
7491 else
7492 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 7493 }
c8e38a49
PA
7494 else
7495 error (_("unknown stop reply packet: %s"), buf);
f2907e49 7496 event->ptid = ptid_t (pid);
74531fed
PA
7497 }
7498 break;
f2faf941
PA
7499 case 'N':
7500 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7501 event->ptid = minus_one_ptid;
7502 break;
74531fed
PA
7503 }
7504
d7e15655 7505 if (target_is_non_stop_p () && event->ptid == null_ptid)
74531fed
PA
7506 error (_("No process or thread specified in stop reply: %s"), buf);
7507}
7508
722247f1
YQ
7509/* When the stub wants to tell GDB about a new notification reply, it
7510 sends a notification (%Stop, for example). Those can come it at
7511 any time, hence, we have to make sure that any pending
7512 putpkt/getpkt sequence we're making is finished, before querying
7513 the stub for more events with the corresponding ack command
7514 (vStopped, for example). E.g., if we started a vStopped sequence
7515 immediately upon receiving the notification, something like this
7516 could happen:
74531fed
PA
7517
7518 1.1) --> Hg 1
7519 1.2) <-- OK
7520 1.3) --> g
7521 1.4) <-- %Stop
7522 1.5) --> vStopped
7523 1.6) <-- (registers reply to step #1.3)
7524
7525 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7526 query.
7527
796cb314 7528 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
7529 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7530 doing whatever we were doing:
7531
7532 2.1) --> Hg 1
7533 2.2) <-- OK
7534 2.3) --> g
7535 2.4) <-- %Stop
7536 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7537 2.5) <-- (registers reply to step #2.3)
7538
7539 Eventualy after step #2.5, we return to the event loop, which
7540 notices there's an event on the
7541 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7542 associated callback --- the function below. At this point, we're
7543 always safe to start a vStopped sequence. :
7544
7545 2.6) --> vStopped
7546 2.7) <-- T05 thread:2
7547 2.8) --> vStopped
7548 2.9) --> OK
7549*/
7550
722247f1 7551void
6b8edb51 7552remote_target::remote_notif_get_pending_events (notif_client *nc)
74531fed
PA
7553{
7554 struct remote_state *rs = get_remote_state ();
74531fed 7555
f48ff2a7 7556 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 7557 {
722247f1
YQ
7558 if (notif_debug)
7559 fprintf_unfiltered (gdb_stdlog,
7560 "notif: process: '%s' ack pending event\n",
7561 nc->name);
74531fed 7562
722247f1 7563 /* acknowledge */
8d64371b
TT
7564 nc->ack (this, nc, rs->buf.data (),
7565 rs->notif_state->pending_event[nc->id]);
f48ff2a7 7566 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
7567
7568 while (1)
7569 {
8d64371b
TT
7570 getpkt (&rs->buf, 0);
7571 if (strcmp (rs->buf.data (), "OK") == 0)
74531fed
PA
7572 break;
7573 else
8d64371b 7574 remote_notif_ack (this, nc, rs->buf.data ());
74531fed
PA
7575 }
7576 }
722247f1
YQ
7577 else
7578 {
7579 if (notif_debug)
7580 fprintf_unfiltered (gdb_stdlog,
7581 "notif: process: '%s' no pending reply\n",
7582 nc->name);
7583 }
74531fed
PA
7584}
7585
6b8edb51
PA
7586/* Wrapper around remote_target::remote_notif_get_pending_events to
7587 avoid having to export the whole remote_target class. */
7588
7589void
7590remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7591{
7592 remote->remote_notif_get_pending_events (nc);
7593}
7594
74531fed
PA
7595/* Called when it is decided that STOP_REPLY holds the info of the
7596 event that is to be returned to the core. This function always
7597 destroys STOP_REPLY. */
7598
6b8edb51
PA
7599ptid_t
7600remote_target::process_stop_reply (struct stop_reply *stop_reply,
7601 struct target_waitstatus *status)
74531fed
PA
7602{
7603 ptid_t ptid;
7604
7605 *status = stop_reply->ws;
7606 ptid = stop_reply->ptid;
7607
7608 /* If no thread/process was reported by the stub, assume the current
7609 inferior. */
d7e15655 7610 if (ptid == null_ptid)
74531fed
PA
7611 ptid = inferior_ptid;
7612
5f3563ea 7613 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
7614 && status->kind != TARGET_WAITKIND_SIGNALLED
7615 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 7616 {
5f3563ea 7617 /* Expedited registers. */
32603266 7618 if (!stop_reply->regcache.empty ())
5f3563ea 7619 {
217f1f79 7620 struct regcache *regcache
5cd63fda 7621 = get_thread_arch_regcache (ptid, stop_reply->arch);
5f3563ea 7622
32603266
TT
7623 for (cached_reg_t &reg : stop_reply->regcache)
7624 {
7625 regcache->raw_supply (reg.num, reg.data);
7626 xfree (reg.data);
7627 }
d1dff226 7628
32603266 7629 stop_reply->regcache.clear ();
5f3563ea 7630 }
74531fed 7631
1941c569 7632 remote_notice_new_inferior (ptid, 0);
7aabaf9d 7633 remote_thread_info *remote_thr = get_remote_thread_info (ptid);
799a2abe
PA
7634 remote_thr->core = stop_reply->core;
7635 remote_thr->stop_reason = stop_reply->stop_reason;
7636 remote_thr->watch_data_address = stop_reply->watch_data_address;
85ad3aaf 7637 remote_thr->vcont_resumed = 0;
74531fed
PA
7638 }
7639
32603266 7640 delete stop_reply;
74531fed
PA
7641 return ptid;
7642}
7643
7644/* The non-stop mode version of target_wait. */
7645
6b8edb51
PA
7646ptid_t
7647remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
7648{
7649 struct remote_state *rs = get_remote_state ();
74531fed
PA
7650 struct stop_reply *stop_reply;
7651 int ret;
fee9eda9 7652 int is_notif = 0;
74531fed
PA
7653
7654 /* If in non-stop mode, get out of getpkt even if a
7655 notification is received. */
7656
8d64371b 7657 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif);
74531fed
PA
7658 while (1)
7659 {
fee9eda9 7660 if (ret != -1 && !is_notif)
74531fed
PA
7661 switch (rs->buf[0])
7662 {
7663 case 'E': /* Error of some sort. */
7664 /* We're out of sync with the target now. Did it continue
7665 or not? We can't tell which thread it was in non-stop,
7666 so just ignore this. */
8d64371b 7667 warning (_("Remote failure reply: %s"), rs->buf.data ());
74531fed
PA
7668 break;
7669 case 'O': /* Console output. */
8d64371b 7670 remote_console_output (&rs->buf[1]);
74531fed
PA
7671 break;
7672 default:
8d64371b 7673 warning (_("Invalid remote reply: %s"), rs->buf.data ());
74531fed
PA
7674 break;
7675 }
7676
7677 /* Acknowledge a pending stop reply that may have arrived in the
7678 mean time. */
f48ff2a7 7679 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 7680 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
7681
7682 /* If indeed we noticed a stop reply, we're done. */
7683 stop_reply = queued_stop_reply (ptid);
7684 if (stop_reply != NULL)
7685 return process_stop_reply (stop_reply, status);
7686
47608cb1 7687 /* Still no event. If we're just polling for an event, then
74531fed 7688 return to the event loop. */
47608cb1 7689 if (options & TARGET_WNOHANG)
74531fed
PA
7690 {
7691 status->kind = TARGET_WAITKIND_IGNORE;
7692 return minus_one_ptid;
7693 }
7694
47608cb1 7695 /* Otherwise do a blocking wait. */
8d64371b 7696 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif);
74531fed
PA
7697 }
7698}
7699
7700/* Wait until the remote machine stops, then return, storing status in
7701 STATUS just as `wait' would. */
7702
6b8edb51
PA
7703ptid_t
7704remote_target::wait_as (ptid_t ptid, target_waitstatus *status, int options)
74531fed
PA
7705{
7706 struct remote_state *rs = get_remote_state ();
74531fed 7707 ptid_t event_ptid = null_ptid;
cea39f65 7708 char *buf;
74531fed
PA
7709 struct stop_reply *stop_reply;
7710
47608cb1
PA
7711 again:
7712
74531fed
PA
7713 status->kind = TARGET_WAITKIND_IGNORE;
7714 status->value.integer = 0;
7715
7716 stop_reply = queued_stop_reply (ptid);
7717 if (stop_reply != NULL)
7718 return process_stop_reply (stop_reply, status);
7719
7720 if (rs->cached_wait_status)
7721 /* Use the cached wait status, but only once. */
7722 rs->cached_wait_status = 0;
7723 else
7724 {
7725 int ret;
722247f1 7726 int is_notif;
567420d1 7727 int forever = ((options & TARGET_WNOHANG) == 0
6b8edb51 7728 && rs->wait_forever_enabled_p);
567420d1
PA
7729
7730 if (!rs->waiting_for_stop_reply)
7731 {
7732 status->kind = TARGET_WAITKIND_NO_RESUMED;
7733 return minus_one_ptid;
7734 }
74531fed 7735
74531fed
PA
7736 /* FIXME: cagney/1999-09-27: If we're in async mode we should
7737 _never_ wait for ever -> test on target_is_async_p().
7738 However, before we do that we need to ensure that the caller
7739 knows how to take the target into/out of async mode. */
8d64371b 7740 ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif);
722247f1
YQ
7741
7742 /* GDB gets a notification. Return to core as this event is
7743 not interesting. */
7744 if (ret != -1 && is_notif)
7745 return minus_one_ptid;
567420d1
PA
7746
7747 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7748 return minus_one_ptid;
74531fed
PA
7749 }
7750
8d64371b 7751 buf = rs->buf.data ();
74531fed 7752
3a29589a
DJ
7753 /* Assume that the target has acknowledged Ctrl-C unless we receive
7754 an 'F' or 'O' packet. */
7755 if (buf[0] != 'F' && buf[0] != 'O')
7756 rs->ctrlc_pending_p = 0;
7757
74531fed
PA
7758 switch (buf[0])
7759 {
7760 case 'E': /* Error of some sort. */
7761 /* We're out of sync with the target now. Did it continue or
7762 not? Not is more likely, so report a stop. */
29090fb6
LM
7763 rs->waiting_for_stop_reply = 0;
7764
74531fed
PA
7765 warning (_("Remote failure reply: %s"), buf);
7766 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 7767 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
7768 break;
7769 case 'F': /* File-I/O request. */
e42e5352
YQ
7770 /* GDB may access the inferior memory while handling the File-I/O
7771 request, but we don't want GDB accessing memory while waiting
7772 for a stop reply. See the comments in putpkt_binary. Set
7773 waiting_for_stop_reply to 0 temporarily. */
7774 rs->waiting_for_stop_reply = 0;
6b8edb51 7775 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
3a29589a 7776 rs->ctrlc_pending_p = 0;
e42e5352
YQ
7777 /* GDB handled the File-I/O request, and the target is running
7778 again. Keep waiting for events. */
7779 rs->waiting_for_stop_reply = 1;
74531fed 7780 break;
f2faf941 7781 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 7782 {
29090fb6
LM
7783 /* There is a stop reply to handle. */
7784 rs->waiting_for_stop_reply = 0;
7785
7786 stop_reply
6b8edb51
PA
7787 = (struct stop_reply *) remote_notif_parse (this,
7788 &notif_client_stop,
8d64371b 7789 rs->buf.data ());
74531fed 7790
74531fed 7791 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
7792 break;
7793 }
7794 case 'O': /* Console output. */
7795 remote_console_output (buf + 1);
c8e38a49
PA
7796 break;
7797 case '\0':
b73be471 7798 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
7799 {
7800 /* Zero length reply means that we tried 'S' or 'C' and the
7801 remote system doesn't support it. */
223ffa71 7802 target_terminal::ours_for_output ();
c8e38a49
PA
7803 printf_filtered
7804 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
7805 gdb_signal_to_name (rs->last_sent_signal));
7806 rs->last_sent_signal = GDB_SIGNAL_0;
223ffa71 7807 target_terminal::inferior ();
c8e38a49 7808
f5c4fcd9
TT
7809 strcpy (buf, rs->last_sent_step ? "s" : "c");
7810 putpkt (buf);
c8e38a49 7811 break;
43ff13b4 7812 }
86a73007 7813 /* fallthrough */
c8e38a49
PA
7814 default:
7815 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 7816 break;
43ff13b4 7817 }
c8e38a49 7818
f2faf941
PA
7819 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7820 return minus_one_ptid;
7821 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
7822 {
7823 /* Nothing interesting happened. If we're doing a non-blocking
7824 poll, we're done. Otherwise, go back to waiting. */
7825 if (options & TARGET_WNOHANG)
7826 return minus_one_ptid;
7827 else
7828 goto again;
7829 }
74531fed
PA
7830 else if (status->kind != TARGET_WAITKIND_EXITED
7831 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884 7832 {
d7e15655 7833 if (event_ptid != null_ptid)
47f8a51d 7834 record_currthread (rs, event_ptid);
82f73884
PA
7835 else
7836 event_ptid = inferior_ptid;
43ff13b4 7837 }
74531fed
PA
7838 else
7839 /* A process exit. Invalidate our notion of current thread. */
47f8a51d 7840 record_currthread (rs, minus_one_ptid);
79d7f229 7841
82f73884 7842 return event_ptid;
43ff13b4
JM
7843}
7844
74531fed
PA
7845/* Wait until the remote machine stops, then return, storing status in
7846 STATUS just as `wait' would. */
7847
f6ac5f3d
PA
7848ptid_t
7849remote_target::wait (ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
7850{
7851 ptid_t event_ptid;
7852
6efcd9a8 7853 if (target_is_non_stop_p ())
6b8edb51 7854 event_ptid = wait_ns (ptid, status, options);
74531fed 7855 else
6b8edb51 7856 event_ptid = wait_as (ptid, status, options);
c8e38a49 7857
d9d41e78 7858 if (target_is_async_p ())
c8e38a49 7859 {
6b8edb51
PA
7860 remote_state *rs = get_remote_state ();
7861
74531fed
PA
7862 /* If there are are events left in the queue tell the event loop
7863 to return here. */
953edf2b 7864 if (!rs->stop_reply_queue.empty ())
6b8edb51 7865 mark_async_event_handler (rs->remote_async_inferior_event_token);
c8e38a49 7866 }
c8e38a49
PA
7867
7868 return event_ptid;
7869}
7870
74ca34ce 7871/* Fetch a single register using a 'p' packet. */
c906108c 7872
6b8edb51
PA
7873int
7874remote_target::fetch_register_using_p (struct regcache *regcache,
7875 packet_reg *reg)
b96ec7ac 7876{
ac7936df 7877 struct gdbarch *gdbarch = regcache->arch ();
b96ec7ac 7878 struct remote_state *rs = get_remote_state ();
2e9f7625 7879 char *buf, *p;
9890e433 7880 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
b96ec7ac
AC
7881 int i;
7882
4082afcc 7883 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
7884 return 0;
7885
7886 if (reg->pnum == -1)
7887 return 0;
7888
8d64371b 7889 p = rs->buf.data ();
fcad0fa4 7890 *p++ = 'p';
74ca34ce 7891 p += hexnumstr (p, reg->pnum);
fcad0fa4 7892 *p++ = '\0';
1f4437a4 7893 putpkt (rs->buf);
8d64371b 7894 getpkt (&rs->buf, 0);
3f9a994c 7895
8d64371b 7896 buf = rs->buf.data ();
2e9f7625 7897
8d64371b 7898 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p]))
74ca34ce
DJ
7899 {
7900 case PACKET_OK:
7901 break;
7902 case PACKET_UNKNOWN:
7903 return 0;
7904 case PACKET_ERROR:
27a9c0bf 7905 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
ac7936df 7906 gdbarch_register_name (regcache->arch (),
27a9c0bf
MS
7907 reg->regnum),
7908 buf);
74ca34ce 7909 }
3f9a994c
JB
7910
7911 /* If this register is unfetchable, tell the regcache. */
7912 if (buf[0] == 'x')
8480adf2 7913 {
73e1c03f 7914 regcache->raw_supply (reg->regnum, NULL);
8480adf2 7915 return 1;
b96ec7ac 7916 }
b96ec7ac 7917
3f9a994c
JB
7918 /* Otherwise, parse and supply the value. */
7919 p = buf;
7920 i = 0;
7921 while (p[0] != 0)
7922 {
7923 if (p[1] == 0)
74ca34ce 7924 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
7925
7926 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7927 p += 2;
7928 }
73e1c03f 7929 regcache->raw_supply (reg->regnum, regp);
3f9a994c 7930 return 1;
b96ec7ac
AC
7931}
7932
74ca34ce
DJ
7933/* Fetch the registers included in the target's 'g' packet. */
7934
6b8edb51
PA
7935int
7936remote_target::send_g_packet ()
c906108c 7937{
d01949b6 7938 struct remote_state *rs = get_remote_state ();
cea39f65 7939 int buf_len;
c906108c 7940
8d64371b 7941 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g");
b75abf5b 7942 putpkt (rs->buf);
8d64371b 7943 getpkt (&rs->buf, 0);
b75abf5b
AK
7944 if (packet_check_result (rs->buf) == PACKET_ERROR)
7945 error (_("Could not read registers; remote failure reply '%s'"),
8d64371b 7946 rs->buf.data ());
c906108c 7947
29709017
DJ
7948 /* We can get out of synch in various cases. If the first character
7949 in the buffer is not a hex character, assume that has happened
7950 and try to fetch another packet to read. */
7951 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7952 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7953 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7954 && rs->buf[0] != 'x') /* New: unavailable register value. */
7955 {
7956 if (remote_debug)
7957 fprintf_unfiltered (gdb_stdlog,
7958 "Bad register packet; fetching a new packet\n");
8d64371b 7959 getpkt (&rs->buf, 0);
29709017
DJ
7960 }
7961
8d64371b 7962 buf_len = strlen (rs->buf.data ());
74ca34ce
DJ
7963
7964 /* Sanity check the received packet. */
7965 if (buf_len % 2 != 0)
8d64371b 7966 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ());
29709017
DJ
7967
7968 return buf_len / 2;
7969}
7970
6b8edb51
PA
7971void
7972remote_target::process_g_packet (struct regcache *regcache)
29709017 7973{
ac7936df 7974 struct gdbarch *gdbarch = regcache->arch ();
29709017 7975 struct remote_state *rs = get_remote_state ();
9d6eea31 7976 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
29709017
DJ
7977 int i, buf_len;
7978 char *p;
7979 char *regs;
7980
8d64371b 7981 buf_len = strlen (rs->buf.data ());
29709017
DJ
7982
7983 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce 7984 if (buf_len > 2 * rsa->sizeof_g_packet)
fc809827 7985 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8d64371b
TT
7986 "bytes): %s"),
7987 rsa->sizeof_g_packet, buf_len / 2,
7988 rs->buf.data ());
74ca34ce
DJ
7989
7990 /* Save the size of the packet sent to us by the target. It is used
7991 as a heuristic when determining the max size of packets that the
7992 target can safely receive. */
7993 if (rsa->actual_register_packet_size == 0)
7994 rsa->actual_register_packet_size = buf_len;
7995
7996 /* If this is smaller than we guessed the 'g' packet would be,
7997 update our records. A 'g' reply that doesn't include a register's
7998 value implies either that the register is not available, or that
7999 the 'p' packet must be used. */
8000 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 8001 {
9dc193c3 8002 long sizeof_g_packet = buf_len / 2;
74ca34ce 8003
4a22f64d 8004 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 8005 {
9dc193c3
LF
8006 long offset = rsa->regs[i].offset;
8007 long reg_size = register_size (gdbarch, i);
8008
74ca34ce
DJ
8009 if (rsa->regs[i].pnum == -1)
8010 continue;
8011
9dc193c3 8012 if (offset >= sizeof_g_packet)
74ca34ce 8013 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
8014 else if (offset + reg_size > sizeof_g_packet)
8015 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 8016 else
74ca34ce 8017 rsa->regs[i].in_g_packet = 1;
b96ec7ac 8018 }
9dc193c3
LF
8019
8020 /* Looks valid enough, we can assume this is the correct length
8021 for a 'g' packet. It's important not to adjust
8022 rsa->sizeof_g_packet if we have truncated registers otherwise
8023 this "if" won't be run the next time the method is called
8024 with a packet of the same size and one of the internal errors
8025 below will trigger instead. */
8026 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 8027 }
b323314b 8028
224c3ddb 8029 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
8030
8031 /* Unimplemented registers read as all bits zero. */
ea9c271d 8032 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 8033
c906108c
SS
8034 /* Reply describes registers byte by byte, each byte encoded as two
8035 hex characters. Suck them all up, then supply them to the
8036 register cacheing/storage mechanism. */
8037
8d64371b 8038 p = rs->buf.data ();
ea9c271d 8039 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 8040 {
74ca34ce
DJ
8041 if (p[0] == 0 || p[1] == 0)
8042 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8043 internal_error (__FILE__, __LINE__,
9b20d036 8044 _("unexpected end of 'g' packet reply"));
74ca34ce 8045
c906108c 8046 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 8047 regs[i] = 0; /* 'x' */
c906108c
SS
8048 else
8049 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8050 p += 2;
8051 }
8052
a744cf53
MS
8053 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8054 {
8055 struct packet_reg *r = &rsa->regs[i];
9dc193c3 8056 long reg_size = register_size (gdbarch, i);
a744cf53
MS
8057
8058 if (r->in_g_packet)
8059 {
8d64371b 8060 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ()))
a744cf53
MS
8061 /* This shouldn't happen - we adjusted in_g_packet above. */
8062 internal_error (__FILE__, __LINE__,
9b20d036 8063 _("unexpected end of 'g' packet reply"));
a744cf53
MS
8064 else if (rs->buf[r->offset * 2] == 'x')
8065 {
8d64371b 8066 gdb_assert (r->offset * 2 < strlen (rs->buf.data ()));
a744cf53
MS
8067 /* The register isn't available, mark it as such (at
8068 the same time setting the value to zero). */
73e1c03f 8069 regcache->raw_supply (r->regnum, NULL);
a744cf53
MS
8070 }
8071 else
73e1c03f 8072 regcache->raw_supply (r->regnum, regs + r->offset);
a744cf53
MS
8073 }
8074 }
c906108c
SS
8075}
8076
6b8edb51
PA
8077void
8078remote_target::fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
8079{
8080 send_g_packet ();
56be3814 8081 process_g_packet (regcache);
29709017
DJ
8082}
8083
e6e4e701
PA
8084/* Make the remote selected traceframe match GDB's selected
8085 traceframe. */
8086
6b8edb51
PA
8087void
8088remote_target::set_remote_traceframe ()
e6e4e701
PA
8089{
8090 int newnum;
262e1174 8091 struct remote_state *rs = get_remote_state ();
e6e4e701 8092
262e1174 8093 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
8094 return;
8095
8096 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 8097 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
8098
8099 newnum = target_trace_find (tfind_number,
8100 get_traceframe_number (), 0, 0, NULL);
8101
8102 /* Should not happen. If it does, all bets are off. */
8103 if (newnum != get_traceframe_number ())
8104 warning (_("could not set remote traceframe"));
8105}
8106
f6ac5f3d
PA
8107void
8108remote_target::fetch_registers (struct regcache *regcache, int regnum)
74ca34ce 8109{
ac7936df 8110 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8111 struct remote_state *rs = get_remote_state ();
8112 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8113 int i;
8114
e6e4e701 8115 set_remote_traceframe ();
222312d3 8116 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8117
8118 if (regnum >= 0)
8119 {
5cd63fda 8120 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8121
74ca34ce
DJ
8122 gdb_assert (reg != NULL);
8123
8124 /* If this register might be in the 'g' packet, try that first -
8125 we are likely to read more than one register. If this is the
8126 first 'g' packet, we might be overly optimistic about its
8127 contents, so fall back to 'p'. */
8128 if (reg->in_g_packet)
8129 {
56be3814 8130 fetch_registers_using_g (regcache);
74ca34ce
DJ
8131 if (reg->in_g_packet)
8132 return;
8133 }
8134
56be3814 8135 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
8136 return;
8137
8138 /* This register is not available. */
73e1c03f 8139 regcache->raw_supply (reg->regnum, NULL);
74ca34ce
DJ
8140
8141 return;
8142 }
8143
56be3814 8144 fetch_registers_using_g (regcache);
74ca34ce 8145
5cd63fda 8146 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8147 if (!rsa->regs[i].in_g_packet)
56be3814 8148 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
8149 {
8150 /* This register is not available. */
73e1c03f 8151 regcache->raw_supply (i, NULL);
74ca34ce
DJ
8152 }
8153}
8154
c906108c
SS
8155/* Prepare to store registers. Since we may send them all (using a
8156 'G' request), we have to read out the ones we don't want to change
8157 first. */
8158
f6ac5f3d
PA
8159void
8160remote_target::prepare_to_store (struct regcache *regcache)
c906108c 8161{
9d6eea31
PA
8162 struct remote_state *rs = get_remote_state ();
8163 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cf0e1e0d 8164 int i;
cf0e1e0d 8165
c906108c 8166 /* Make sure the entire registers array is valid. */
4082afcc 8167 switch (packet_support (PACKET_P))
5a2468f5
JM
8168 {
8169 case PACKET_DISABLE:
8170 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 8171 /* Make sure all the necessary registers are cached. */
ac7936df 8172 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
ea9c271d 8173 if (rsa->regs[i].in_g_packet)
0b47d985 8174 regcache->raw_update (rsa->regs[i].regnum);
5a2468f5
JM
8175 break;
8176 case PACKET_ENABLE:
8177 break;
8178 }
8179}
8180
ad10f812 8181/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 8182 packet was not recognized. */
5a2468f5 8183
6b8edb51
PA
8184int
8185remote_target::store_register_using_P (const struct regcache *regcache,
8186 packet_reg *reg)
5a2468f5 8187{
ac7936df 8188 struct gdbarch *gdbarch = regcache->arch ();
d01949b6 8189 struct remote_state *rs = get_remote_state ();
5a2468f5 8190 /* Try storing a single register. */
8d64371b 8191 char *buf = rs->buf.data ();
9890e433 8192 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 8193 char *p;
5a2468f5 8194
4082afcc 8195 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
8196 return 0;
8197
8198 if (reg->pnum == -1)
8199 return 0;
8200
ea9c271d 8201 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 8202 p = buf + strlen (buf);
34a79281 8203 regcache->raw_collect (reg->regnum, regp);
4a22f64d 8204 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4 8205 putpkt (rs->buf);
8d64371b 8206 getpkt (&rs->buf, 0);
5a2468f5 8207
74ca34ce
DJ
8208 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8209 {
8210 case PACKET_OK:
8211 return 1;
8212 case PACKET_ERROR:
27a9c0bf 8213 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8d64371b 8214 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ());
74ca34ce
DJ
8215 case PACKET_UNKNOWN:
8216 return 0;
8217 default:
8218 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8219 }
c906108c
SS
8220}
8221
23860348
MS
8222/* Store register REGNUM, or all registers if REGNUM == -1, from the
8223 contents of the register cache buffer. FIXME: ignores errors. */
c906108c 8224
6b8edb51
PA
8225void
8226remote_target::store_registers_using_G (const struct regcache *regcache)
c906108c 8227{
d01949b6 8228 struct remote_state *rs = get_remote_state ();
9d6eea31 8229 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cfd77fa1 8230 gdb_byte *regs;
c906108c
SS
8231 char *p;
8232
193cb69f
AC
8233 /* Extract all the registers in the regcache copying them into a
8234 local buffer. */
8235 {
b323314b 8236 int i;
a744cf53 8237
224c3ddb 8238 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 8239 memset (regs, 0, rsa->sizeof_g_packet);
ac7936df 8240 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
193cb69f 8241 {
ea9c271d 8242 struct packet_reg *r = &rsa->regs[i];
a744cf53 8243
b323314b 8244 if (r->in_g_packet)
34a79281 8245 regcache->raw_collect (r->regnum, regs + r->offset);
193cb69f
AC
8246 }
8247 }
c906108c
SS
8248
8249 /* Command describes registers byte by byte,
8250 each byte encoded as two hex characters. */
8d64371b 8251 p = rs->buf.data ();
193cb69f 8252 *p++ = 'G';
74ca34ce 8253 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4 8254 putpkt (rs->buf);
8d64371b 8255 getpkt (&rs->buf, 0);
1f4437a4 8256 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf 8257 error (_("Could not write registers; remote failure reply '%s'"),
8d64371b 8258 rs->buf.data ());
c906108c 8259}
74ca34ce
DJ
8260
8261/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8262 of the register cache buffer. FIXME: ignores errors. */
8263
f6ac5f3d
PA
8264void
8265remote_target::store_registers (struct regcache *regcache, int regnum)
74ca34ce 8266{
5cd63fda 8267 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8268 struct remote_state *rs = get_remote_state ();
8269 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8270 int i;
8271
e6e4e701 8272 set_remote_traceframe ();
222312d3 8273 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8274
8275 if (regnum >= 0)
8276 {
5cd63fda 8277 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8278
74ca34ce
DJ
8279 gdb_assert (reg != NULL);
8280
8281 /* Always prefer to store registers using the 'P' packet if
8282 possible; we often change only a small number of registers.
8283 Sometimes we change a larger number; we'd need help from a
8284 higher layer to know to use 'G'. */
56be3814 8285 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
8286 return;
8287
8288 /* For now, don't complain if we have no way to write the
8289 register. GDB loses track of unavailable registers too
8290 easily. Some day, this may be an error. We don't have
0df8b418 8291 any way to read the register, either... */
74ca34ce
DJ
8292 if (!reg->in_g_packet)
8293 return;
8294
56be3814 8295 store_registers_using_G (regcache);
74ca34ce
DJ
8296 return;
8297 }
8298
56be3814 8299 store_registers_using_G (regcache);
74ca34ce 8300
5cd63fda 8301 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8302 if (!rsa->regs[i].in_g_packet)
56be3814 8303 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
8304 /* See above for why we do not issue an error here. */
8305 continue;
8306}
c906108c
SS
8307\f
8308
8309/* Return the number of hex digits in num. */
8310
8311static int
fba45db2 8312hexnumlen (ULONGEST num)
c906108c
SS
8313{
8314 int i;
8315
8316 for (i = 0; num != 0; i++)
8317 num >>= 4;
8318
325fac50 8319 return std::max (i, 1);
c906108c
SS
8320}
8321
2df3850c 8322/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
8323
8324static int
fba45db2 8325hexnumstr (char *buf, ULONGEST num)
c906108c 8326{
c906108c 8327 int len = hexnumlen (num);
a744cf53 8328
2df3850c
JM
8329 return hexnumnstr (buf, num, len);
8330}
8331
c906108c 8332
2df3850c 8333/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 8334
2df3850c 8335static int
fba45db2 8336hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
8337{
8338 int i;
8339
8340 buf[width] = '\0';
8341
8342 for (i = width - 1; i >= 0; i--)
c906108c 8343 {
c5aa993b 8344 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
8345 num >>= 4;
8346 }
8347
2df3850c 8348 return width;
c906108c
SS
8349}
8350
23860348 8351/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
8352
8353static CORE_ADDR
fba45db2 8354remote_address_masked (CORE_ADDR addr)
c906108c 8355{
883b9c6c 8356 unsigned int address_size = remote_address_size;
a744cf53 8357
911c95a5
UW
8358 /* If "remoteaddresssize" was not set, default to target address size. */
8359 if (!address_size)
f5656ead 8360 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
8361
8362 if (address_size > 0
8363 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
8364 {
8365 /* Only create a mask when that mask can safely be constructed
23860348 8366 in a ULONGEST variable. */
c906108c 8367 ULONGEST mask = 1;
a744cf53 8368
911c95a5 8369 mask = (mask << address_size) - 1;
c906108c
SS
8370 addr &= mask;
8371 }
8372 return addr;
8373}
8374
8375/* Determine whether the remote target supports binary downloading.
8376 This is accomplished by sending a no-op memory write of zero length
8377 to the target at the specified address. It does not suffice to send
23860348
MS
8378 the whole packet, since many stubs strip the eighth bit and
8379 subsequently compute a wrong checksum, which causes real havoc with
8380 remote_write_bytes.
7a292a7a 8381
96baa820 8382 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 8383 clean. In cases like this, the user should clear "remote
23860348 8384 X-packet". */
96baa820 8385
6b8edb51
PA
8386void
8387remote_target::check_binary_download (CORE_ADDR addr)
c906108c 8388{
d01949b6 8389 struct remote_state *rs = get_remote_state ();
24b06219 8390
4082afcc 8391 switch (packet_support (PACKET_X))
c906108c 8392 {
96baa820
JM
8393 case PACKET_DISABLE:
8394 break;
8395 case PACKET_ENABLE:
8396 break;
8397 case PACKET_SUPPORT_UNKNOWN:
8398 {
96baa820 8399 char *p;
802188a7 8400
8d64371b 8401 p = rs->buf.data ();
96baa820
JM
8402 *p++ = 'X';
8403 p += hexnumstr (p, (ULONGEST) addr);
8404 *p++ = ',';
8405 p += hexnumstr (p, (ULONGEST) 0);
8406 *p++ = ':';
8407 *p = '\0';
802188a7 8408
8d64371b
TT
8409 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8410 getpkt (&rs->buf, 0);
c906108c 8411
2e9f7625 8412 if (rs->buf[0] == '\0')
96baa820
JM
8413 {
8414 if (remote_debug)
8415 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8416 "binary downloading NOT "
8417 "supported by target\n");
444abaca 8418 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8419 }
8420 else
8421 {
8422 if (remote_debug)
8423 fprintf_unfiltered (gdb_stdlog,
64b9b334 8424 "binary downloading supported by target\n");
444abaca 8425 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8426 }
8427 break;
8428 }
c906108c
SS
8429 }
8430}
8431
124e13d9
SM
8432/* Helper function to resize the payload in order to try to get a good
8433 alignment. We try to write an amount of data such that the next write will
8434 start on an address aligned on REMOTE_ALIGN_WRITES. */
8435
8436static int
8437align_for_efficient_write (int todo, CORE_ADDR memaddr)
8438{
8439 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8440}
8441
c906108c
SS
8442/* Write memory data directly to the remote machine.
8443 This does not inform the data cache; the data cache uses this.
a76d924d 8444 HEADER is the starting part of the packet.
c906108c
SS
8445 MEMADDR is the address in the remote memory space.
8446 MYADDR is the address of the buffer in our space.
124e13d9
SM
8447 LEN_UNITS is the number of addressable units to write.
8448 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8449 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8450 should send data as binary ('X'), or hex-encoded ('M').
8451
8452 The function creates packet of the form
8453 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8454
124e13d9 8455 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8456
8457 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8458 are omitted.
8459
9b409511 8460 Return the transferred status, error or OK (an
124e13d9
SM
8461 'enum target_xfer_status' value). Save the number of addressable units
8462 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8463
8464 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8465 exchange between gdb and the stub could look like (?? in place of the
8466 checksum):
8467
8468 -> $m1000,4#??
8469 <- aaaabbbbccccdddd
8470
8471 -> $M1000,3:eeeeffffeeee#??
8472 <- OK
8473
8474 -> $m1000,4#??
8475 <- eeeeffffeeeedddd */
c906108c 8476
6b8edb51
PA
8477target_xfer_status
8478remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8479 const gdb_byte *myaddr,
8480 ULONGEST len_units,
8481 int unit_size,
8482 ULONGEST *xfered_len_units,
8483 char packet_format, int use_length)
c906108c 8484{
6d820c5c 8485 struct remote_state *rs = get_remote_state ();
cfd77fa1 8486 char *p;
a76d924d
DJ
8487 char *plen = NULL;
8488 int plenlen = 0;
124e13d9
SM
8489 int todo_units;
8490 int units_written;
8491 int payload_capacity_bytes;
8492 int payload_length_bytes;
a76d924d
DJ
8493
8494 if (packet_format != 'X' && packet_format != 'M')
8495 internal_error (__FILE__, __LINE__,
9b20d036 8496 _("remote_write_bytes_aux: bad packet format"));
c906108c 8497
124e13d9 8498 if (len_units == 0)
9b409511 8499 return TARGET_XFER_EOF;
b2182ed2 8500
124e13d9 8501 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8502
6d820c5c
DJ
8503 /* The packet buffer will be large enough for the payload;
8504 get_memory_packet_size ensures this. */
a76d924d 8505 rs->buf[0] = '\0';
c906108c 8506
a257b5bb 8507 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8508 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8509
124e13d9 8510 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8511 if (!use_length)
0df8b418 8512 /* The comma won't be used. */
124e13d9
SM
8513 payload_capacity_bytes += 1;
8514 payload_capacity_bytes -= strlen (header);
8515 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8516
a76d924d 8517 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8518
8d64371b
TT
8519 strcat (rs->buf.data (), header);
8520 p = rs->buf.data () + strlen (header);
a76d924d
DJ
8521
8522 /* Compute a best guess of the number of bytes actually transfered. */
8523 if (packet_format == 'X')
c906108c 8524 {
23860348 8525 /* Best guess at number of bytes that will fit. */
325fac50
PA
8526 todo_units = std::min (len_units,
8527 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8528 if (use_length)
124e13d9 8529 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8530 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8531 }
8532 else
8533 {
124e13d9 8534 /* Number of bytes that will fit. */
325fac50
PA
8535 todo_units
8536 = std::min (len_units,
8537 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8538 if (use_length)
124e13d9 8539 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8540 todo_units = std::min (todo_units,
8541 (payload_capacity_bytes / unit_size) / 2);
917317f4 8542 }
a76d924d 8543
124e13d9 8544 if (todo_units <= 0)
3de11b2e 8545 internal_error (__FILE__, __LINE__,
405f8e94 8546 _("minimum packet size too small to write data"));
802188a7 8547
6765f3e5
DJ
8548 /* If we already need another packet, then try to align the end
8549 of this packet to a useful boundary. */
124e13d9
SM
8550 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8551 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8552
a257b5bb 8553 /* Append "<memaddr>". */
917317f4
JM
8554 memaddr = remote_address_masked (memaddr);
8555 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8556
a76d924d
DJ
8557 if (use_length)
8558 {
8559 /* Append ",". */
8560 *p++ = ',';
802188a7 8561
124e13d9
SM
8562 /* Append the length and retain its location and size. It may need to be
8563 adjusted once the packet body has been created. */
a76d924d 8564 plen = p;
124e13d9 8565 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8566 p += plenlen;
8567 }
a257b5bb
AC
8568
8569 /* Append ":". */
917317f4
JM
8570 *p++ = ':';
8571 *p = '\0';
802188a7 8572
a257b5bb 8573 /* Append the packet body. */
a76d924d 8574 if (packet_format == 'X')
917317f4 8575 {
917317f4
JM
8576 /* Binary mode. Send target system values byte by byte, in
8577 increasing byte addresses. Only escape certain critical
8578 characters. */
124e13d9
SM
8579 payload_length_bytes =
8580 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8581 &units_written, payload_capacity_bytes);
6765f3e5 8582
124e13d9 8583 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8584 a second try to keep the end of the packet aligned. Don't do
8585 this if the packet is tiny. */
124e13d9 8586 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8587 {
124e13d9
SM
8588 int new_todo_units;
8589
8590 new_todo_units = align_for_efficient_write (units_written, memaddr);
8591
8592 if (new_todo_units != units_written)
8593 payload_length_bytes =
8594 remote_escape_output (myaddr, new_todo_units, unit_size,
8595 (gdb_byte *) p, &units_written,
8596 payload_capacity_bytes);
6765f3e5
DJ
8597 }
8598
124e13d9
SM
8599 p += payload_length_bytes;
8600 if (use_length && units_written < todo_units)
c906108c 8601 {
802188a7 8602 /* Escape chars have filled up the buffer prematurely,
124e13d9 8603 and we have actually sent fewer units than planned.
917317f4
JM
8604 Fix-up the length field of the packet. Use the same
8605 number of characters as before. */
124e13d9
SM
8606 plen += hexnumnstr (plen, (ULONGEST) units_written,
8607 plenlen);
917317f4 8608 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8609 }
a76d924d
DJ
8610 }
8611 else
8612 {
917317f4
JM
8613 /* Normal mode: Send target system values byte by byte, in
8614 increasing byte addresses. Each byte is encoded as a two hex
8615 value. */
124e13d9
SM
8616 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8617 units_written = todo_units;
c906108c 8618 }
802188a7 8619
8d64371b
TT
8620 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ()));
8621 getpkt (&rs->buf, 0);
802188a7 8622
2e9f7625 8623 if (rs->buf[0] == 'E')
00d84524 8624 return TARGET_XFER_E_IO;
802188a7 8625
124e13d9
SM
8626 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8627 send fewer units than we'd planned. */
8628 *xfered_len_units = (ULONGEST) units_written;
92ffd475 8629 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
8630}
8631
a76d924d
DJ
8632/* Write memory data directly to the remote machine.
8633 This does not inform the data cache; the data cache uses this.
8634 MEMADDR is the address in the remote memory space.
8635 MYADDR is the address of the buffer in our space.
8636 LEN is the number of bytes.
8637
9b409511
YQ
8638 Return the transferred status, error or OK (an
8639 'enum target_xfer_status' value). Save the number of bytes
8640 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8641
6b8edb51
PA
8642target_xfer_status
8643remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8644 ULONGEST len, int unit_size,
8645 ULONGEST *xfered_len)
a76d924d 8646{
a121b7c1 8647 const char *packet_format = NULL;
a76d924d
DJ
8648
8649 /* Check whether the target supports binary download. */
8650 check_binary_download (memaddr);
8651
4082afcc 8652 switch (packet_support (PACKET_X))
a76d924d
DJ
8653 {
8654 case PACKET_ENABLE:
8655 packet_format = "X";
8656 break;
8657 case PACKET_DISABLE:
8658 packet_format = "M";
8659 break;
8660 case PACKET_SUPPORT_UNKNOWN:
8661 internal_error (__FILE__, __LINE__,
8662 _("remote_write_bytes: bad internal state"));
8663 default:
8664 internal_error (__FILE__, __LINE__, _("bad switch"));
8665 }
8666
8667 return remote_write_bytes_aux (packet_format,
124e13d9 8668 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8669 packet_format[0], 1);
a76d924d
DJ
8670}
8671
9217e74e
YQ
8672/* Read memory data directly from the remote machine.
8673 This does not use the data cache; the data cache uses this.
8674 MEMADDR is the address in the remote memory space.
8675 MYADDR is the address of the buffer in our space.
124e13d9
SM
8676 LEN_UNITS is the number of addressable memory units to read..
8677 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8678
8679 Return the transferred status, error or OK (an
8680 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8681 transferred in *XFERED_LEN_UNITS.
8682
8683 See the comment of remote_write_bytes_aux for an example of
8684 memory read/write exchange between gdb and the stub. */
9217e74e 8685
6b8edb51
PA
8686target_xfer_status
8687remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8688 ULONGEST len_units,
8689 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
8690{
8691 struct remote_state *rs = get_remote_state ();
124e13d9 8692 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 8693 char *p;
124e13d9
SM
8694 int todo_units;
8695 int decoded_bytes;
9217e74e 8696
124e13d9 8697 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
8698 /* The packet buffer will be large enough for the payload;
8699 get_memory_packet_size ensures this. */
8700
124e13d9 8701 /* Number of units that will fit. */
325fac50
PA
8702 todo_units = std::min (len_units,
8703 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
8704
8705 /* Construct "m"<memaddr>","<len>". */
8706 memaddr = remote_address_masked (memaddr);
8d64371b 8707 p = rs->buf.data ();
9217e74e
YQ
8708 *p++ = 'm';
8709 p += hexnumstr (p, (ULONGEST) memaddr);
8710 *p++ = ',';
124e13d9 8711 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
8712 *p = '\0';
8713 putpkt (rs->buf);
8d64371b 8714 getpkt (&rs->buf, 0);
9217e74e
YQ
8715 if (rs->buf[0] == 'E'
8716 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8717 && rs->buf[3] == '\0')
8718 return TARGET_XFER_E_IO;
8719 /* Reply describes memory byte by byte, each byte encoded as two hex
8720 characters. */
8d64371b 8721 p = rs->buf.data ();
124e13d9 8722 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 8723 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 8724 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
92ffd475 8725 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9217e74e
YQ
8726}
8727
b55fbac4
YQ
8728/* Using the set of read-only target sections of remote, read live
8729 read-only memory.
8acf9577
YQ
8730
8731 For interface/parameters/return description see target.h,
8732 to_xfer_partial. */
8733
6b8edb51
PA
8734target_xfer_status
8735remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
8736 ULONGEST memaddr,
8737 ULONGEST len,
8738 int unit_size,
8739 ULONGEST *xfered_len)
8acf9577
YQ
8740{
8741 struct target_section *secp;
8742 struct target_section_table *table;
8743
6b8edb51 8744 secp = target_section_by_addr (this, memaddr);
8acf9577 8745 if (secp != NULL
fd361982 8746 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
8acf9577
YQ
8747 {
8748 struct target_section *p;
8749 ULONGEST memend = memaddr + len;
8750
6b8edb51 8751 table = target_get_section_table (this);
8acf9577
YQ
8752
8753 for (p = table->sections; p < table->sections_end; p++)
8754 {
8755 if (memaddr >= p->addr)
8756 {
8757 if (memend <= p->endaddr)
8758 {
8759 /* Entire transfer is within this section. */
124e13d9 8760 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8761 xfered_len);
8acf9577
YQ
8762 }
8763 else if (memaddr >= p->endaddr)
8764 {
8765 /* This section ends before the transfer starts. */
8766 continue;
8767 }
8768 else
8769 {
8770 /* This section overlaps the transfer. Just do half. */
8771 len = p->endaddr - memaddr;
124e13d9 8772 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8773 xfered_len);
8acf9577
YQ
8774 }
8775 }
8776 }
8777 }
8778
8779 return TARGET_XFER_EOF;
8780}
8781
9217e74e
YQ
8782/* Similar to remote_read_bytes_1, but it reads from the remote stub
8783 first if the requested memory is unavailable in traceframe.
8784 Otherwise, fall back to remote_read_bytes_1. */
c906108c 8785
6b8edb51
PA
8786target_xfer_status
8787remote_target::remote_read_bytes (CORE_ADDR memaddr,
8788 gdb_byte *myaddr, ULONGEST len, int unit_size,
8789 ULONGEST *xfered_len)
c906108c 8790{
6b6aa828 8791 if (len == 0)
96c4f946 8792 return TARGET_XFER_EOF;
b2182ed2 8793
8acf9577
YQ
8794 if (get_traceframe_number () != -1)
8795 {
a79b1bc6 8796 std::vector<mem_range> available;
8acf9577
YQ
8797
8798 /* If we fail to get the set of available memory, then the
8799 target does not support querying traceframe info, and so we
8800 attempt reading from the traceframe anyway (assuming the
8801 target implements the old QTro packet then). */
8802 if (traceframe_available_memory (&available, memaddr, len))
8803 {
a79b1bc6 8804 if (available.empty () || available[0].start != memaddr)
8acf9577
YQ
8805 {
8806 enum target_xfer_status res;
8807
8808 /* Don't read into the traceframe's available
8809 memory. */
a79b1bc6 8810 if (!available.empty ())
8acf9577
YQ
8811 {
8812 LONGEST oldlen = len;
8813
a79b1bc6 8814 len = available[0].start - memaddr;
8acf9577
YQ
8815 gdb_assert (len <= oldlen);
8816 }
8817
8acf9577 8818 /* This goes through the topmost target again. */
6b8edb51 8819 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
124e13d9 8820 len, unit_size, xfered_len);
8acf9577
YQ
8821 if (res == TARGET_XFER_OK)
8822 return TARGET_XFER_OK;
8823 else
8824 {
8825 /* No use trying further, we know some memory starting
8826 at MEMADDR isn't available. */
8827 *xfered_len = len;
92ffd475
PC
8828 return (*xfered_len != 0) ?
8829 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8acf9577
YQ
8830 }
8831 }
8832
8833 /* Don't try to read more than how much is available, in
8834 case the target implements the deprecated QTro packet to
8835 cater for older GDBs (the target's knowledge of read-only
8836 sections may be outdated by now). */
a79b1bc6 8837 len = available[0].length;
8acf9577
YQ
8838 }
8839 }
8840
124e13d9 8841 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 8842}
74531fed 8843
c906108c 8844\f
c906108c 8845
a76d924d
DJ
8846/* Sends a packet with content determined by the printf format string
8847 FORMAT and the remaining arguments, then gets the reply. Returns
8848 whether the packet was a success, a failure, or unknown. */
8849
6b8edb51
PA
8850packet_result
8851remote_target::remote_send_printf (const char *format, ...)
a76d924d
DJ
8852{
8853 struct remote_state *rs = get_remote_state ();
8854 int max_size = get_remote_packet_size ();
a76d924d 8855 va_list ap;
a744cf53 8856
a76d924d
DJ
8857 va_start (ap, format);
8858
8859 rs->buf[0] = '\0';
8d64371b 8860 int size = vsnprintf (rs->buf.data (), max_size, format, ap);
33b031ce
GB
8861
8862 va_end (ap);
8863
8864 if (size >= max_size)
9b20d036 8865 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
8866
8867 if (putpkt (rs->buf) < 0)
8868 error (_("Communication problem with target."));
8869
8870 rs->buf[0] = '\0';
8d64371b 8871 getpkt (&rs->buf, 0);
a76d924d
DJ
8872
8873 return packet_check_result (rs->buf);
8874}
8875
a76d924d
DJ
8876/* Flash writing can take quite some time. We'll set
8877 effectively infinite timeout for flash operations.
8878 In future, we'll need to decide on a better approach. */
8879static const int remote_flash_timeout = 1000;
8880
f6ac5f3d
PA
8881void
8882remote_target::flash_erase (ULONGEST address, LONGEST length)
a76d924d 8883{
f5656ead 8884 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d 8885 enum packet_result ret;
2ec845e7
TT
8886 scoped_restore restore_timeout
8887 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
a76d924d
DJ
8888
8889 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 8890 phex (address, addr_size),
a76d924d
DJ
8891 phex (length, 4));
8892 switch (ret)
8893 {
8894 case PACKET_UNKNOWN:
8895 error (_("Remote target does not support flash erase"));
8896 case PACKET_ERROR:
8897 error (_("Error erasing flash with vFlashErase packet"));
8898 default:
8899 break;
8900 }
a76d924d
DJ
8901}
8902
6b8edb51
PA
8903target_xfer_status
8904remote_target::remote_flash_write (ULONGEST address,
8905 ULONGEST length, ULONGEST *xfered_len,
8906 const gdb_byte *data)
a76d924d 8907{
2ec845e7
TT
8908 scoped_restore restore_timeout
8909 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8910 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8911 xfered_len,'X', 0);
a76d924d
DJ
8912}
8913
f6ac5f3d
PA
8914void
8915remote_target::flash_done ()
a76d924d 8916{
a76d924d 8917 int ret;
a76d924d 8918
2ec845e7
TT
8919 scoped_restore restore_timeout
8920 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8921
a76d924d 8922 ret = remote_send_printf ("vFlashDone");
a76d924d
DJ
8923
8924 switch (ret)
8925 {
8926 case PACKET_UNKNOWN:
8927 error (_("Remote target does not support vFlashDone"));
8928 case PACKET_ERROR:
8929 error (_("Error finishing flash operation"));
8930 default:
8931 break;
8932 }
8933}
8934
f6ac5f3d
PA
8935void
8936remote_target::files_info ()
c906108c
SS
8937{
8938 puts_filtered ("Debugging a target over a serial line.\n");
8939}
8940\f
8941/* Stuff for dealing with the packets which are part of this protocol.
8942 See comment at top of file for details. */
8943
1927e618
PA
8944/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8945 error to higher layers. Called when a serial error is detected.
8946 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
8947 the system error message for errno at function entry and final dot
8948 for output compatibility with throw_perror_with_name. */
1927e618
PA
8949
8950static void
8951unpush_and_perror (const char *string)
8952{
d6cb50a2 8953 int saved_errno = errno;
1927e618
PA
8954
8955 remote_unpush_target ();
d6cb50a2
JK
8956 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8957 safe_strerror (saved_errno));
1927e618
PA
8958}
8959
048094ac
PA
8960/* Read a single character from the remote end. The current quit
8961 handler is overridden to avoid quitting in the middle of packet
8962 sequence, as that would break communication with the remote server.
8963 See remote_serial_quit_handler for more detail. */
c906108c 8964
6b8edb51
PA
8965int
8966remote_target::readchar (int timeout)
c906108c
SS
8967{
8968 int ch;
5d93a237 8969 struct remote_state *rs = get_remote_state ();
048094ac 8970
2ec845e7 8971 {
6b8edb51
PA
8972 scoped_restore restore_quit_target
8973 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 8974 scoped_restore restore_quit
6b8edb51 8975 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
c906108c 8976
2ec845e7 8977 rs->got_ctrlc_during_io = 0;
c906108c 8978
2ec845e7 8979 ch = serial_readchar (rs->remote_desc, timeout);
048094ac 8980
2ec845e7
TT
8981 if (rs->got_ctrlc_during_io)
8982 set_quit_flag ();
8983 }
048094ac 8984
2acceee2 8985 if (ch >= 0)
0876f84a 8986 return ch;
2acceee2
JM
8987
8988 switch ((enum serial_rc) ch)
c906108c
SS
8989 {
8990 case SERIAL_EOF:
78a095c3 8991 remote_unpush_target ();
598d3636 8992 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 8993 /* no return */
c906108c 8994 case SERIAL_ERROR:
1927e618
PA
8995 unpush_and_perror (_("Remote communication error. "
8996 "Target disconnected."));
2acceee2 8997 /* no return */
c906108c 8998 case SERIAL_TIMEOUT:
2acceee2 8999 break;
c906108c 9000 }
2acceee2 9001 return ch;
c906108c
SS
9002}
9003
c33e31fd 9004/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
9005 writing fails. The current quit handler is overridden to avoid
9006 quitting in the middle of packet sequence, as that would break
9007 communication with the remote server. See
9008 remote_serial_quit_handler for more detail. */
c33e31fd 9009
6b8edb51
PA
9010void
9011remote_target::remote_serial_write (const char *str, int len)
c33e31fd 9012{
5d93a237 9013 struct remote_state *rs = get_remote_state ();
048094ac 9014
6b8edb51
PA
9015 scoped_restore restore_quit_target
9016 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9017 scoped_restore restore_quit
6b8edb51 9018 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
048094ac
PA
9019
9020 rs->got_ctrlc_during_io = 0;
5d93a237
TT
9021
9022 if (serial_write (rs->remote_desc, str, len))
c33e31fd 9023 {
1927e618
PA
9024 unpush_and_perror (_("Remote communication error. "
9025 "Target disconnected."));
c33e31fd 9026 }
048094ac
PA
9027
9028 if (rs->got_ctrlc_during_io)
9029 set_quit_flag ();
c33e31fd
PA
9030}
9031
b3ced9ba
PA
9032/* Return a string representing an escaped version of BUF, of len N.
9033 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 9034
b3ced9ba 9035static std::string
6e5abd65
PA
9036escape_buffer (const char *buf, int n)
9037{
d7e74731 9038 string_file stb;
6e5abd65 9039
d7e74731
PA
9040 stb.putstrn (buf, n, '\\');
9041 return std::move (stb.string ());
6e5abd65
PA
9042}
9043
c906108c
SS
9044/* Display a null-terminated packet on stdout, for debugging, using C
9045 string notation. */
9046
9047static void
baa336ce 9048print_packet (const char *buf)
c906108c
SS
9049{
9050 puts_filtered ("\"");
43e526b9 9051 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
9052 puts_filtered ("\"");
9053}
9054
9055int
6b8edb51 9056remote_target::putpkt (const char *buf)
c906108c
SS
9057{
9058 return putpkt_binary (buf, strlen (buf));
9059}
9060
6b8edb51
PA
9061/* Wrapper around remote_target::putpkt to avoid exporting
9062 remote_target. */
9063
9064int
9065putpkt (remote_target *remote, const char *buf)
9066{
9067 return remote->putpkt (buf);
9068}
9069
c906108c 9070/* Send a packet to the remote machine, with error checking. The data
23860348 9071 of the packet is in BUF. The string in BUF can be at most
ea9c271d 9072 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
9073 and for a possible /0 if we are debugging (remote_debug) and want
9074 to print the sent packet as a string. */
c906108c 9075
6b8edb51
PA
9076int
9077remote_target::putpkt_binary (const char *buf, int cnt)
c906108c 9078{
2d717e4f 9079 struct remote_state *rs = get_remote_state ();
c906108c
SS
9080 int i;
9081 unsigned char csum = 0;
b80406ac
TT
9082 gdb::def_vector<char> data (cnt + 6);
9083 char *buf2 = data.data ();
085dd6e6 9084
c906108c
SS
9085 int ch;
9086 int tcount = 0;
9087 char *p;
9088
e24a49d8
PA
9089 /* Catch cases like trying to read memory or listing threads while
9090 we're waiting for a stop reply. The remote server wouldn't be
9091 ready to handle this request, so we'd hang and timeout. We don't
9092 have to worry about this in synchronous mode, because in that
9093 case it's not possible to issue a command while the target is
74531fed
PA
9094 running. This is not a problem in non-stop mode, because in that
9095 case, the stub is always ready to process serial input. */
6efcd9a8
PA
9096 if (!target_is_non_stop_p ()
9097 && target_is_async_p ()
9098 && rs->waiting_for_stop_reply)
9597b22a
DE
9099 {
9100 error (_("Cannot execute this command while the target is running.\n"
9101 "Use the \"interrupt\" command to stop the target\n"
9102 "and then try again."));
9103 }
e24a49d8 9104
2d717e4f
DJ
9105 /* We're sending out a new packet. Make sure we don't look at a
9106 stale cached response. */
9107 rs->cached_wait_status = 0;
9108
c906108c
SS
9109 /* Copy the packet into buffer BUF2, encapsulating it
9110 and giving it a checksum. */
9111
c906108c
SS
9112 p = buf2;
9113 *p++ = '$';
9114
9115 for (i = 0; i < cnt; i++)
9116 {
9117 csum += buf[i];
9118 *p++ = buf[i];
9119 }
9120 *p++ = '#';
9121 *p++ = tohex ((csum >> 4) & 0xf);
9122 *p++ = tohex (csum & 0xf);
9123
9124 /* Send it over and over until we get a positive ack. */
9125
9126 while (1)
9127 {
9128 int started_error_output = 0;
9129
9130 if (remote_debug)
9131 {
9132 *p = '\0';
b3ced9ba 9133
6f8976bf
YQ
9134 int len = (int) (p - buf2);
9135
9136 std::string str
9137 = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
9138
9139 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
9140
567a3e54
SM
9141 if (len > REMOTE_DEBUG_MAX_CHAR)
9142 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9143 len - REMOTE_DEBUG_MAX_CHAR);
6f8976bf
YQ
9144
9145 fprintf_unfiltered (gdb_stdlog, "...");
b3ced9ba 9146
0f71a2f6 9147 gdb_flush (gdb_stdlog);
c906108c 9148 }
c33e31fd 9149 remote_serial_write (buf2, p - buf2);
c906108c 9150
a6f3e723
SL
9151 /* If this is a no acks version of the remote protocol, send the
9152 packet and move on. */
9153 if (rs->noack_mode)
9154 break;
9155
74531fed
PA
9156 /* Read until either a timeout occurs (-2) or '+' is read.
9157 Handle any notification that arrives in the mean time. */
c906108c
SS
9158 while (1)
9159 {
9160 ch = readchar (remote_timeout);
9161
c5aa993b 9162 if (remote_debug)
c906108c
SS
9163 {
9164 switch (ch)
9165 {
9166 case '+':
1216fa2c 9167 case '-':
c906108c
SS
9168 case SERIAL_TIMEOUT:
9169 case '$':
74531fed 9170 case '%':
c906108c
SS
9171 if (started_error_output)
9172 {
9173 putchar_unfiltered ('\n');
9174 started_error_output = 0;
9175 }
9176 }
9177 }
9178
9179 switch (ch)
9180 {
9181 case '+':
9182 if (remote_debug)
0f71a2f6 9183 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 9184 return 1;
1216fa2c
AC
9185 case '-':
9186 if (remote_debug)
9187 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 9188 /* FALLTHROUGH */
c906108c 9189 case SERIAL_TIMEOUT:
c5aa993b 9190 tcount++;
c906108c 9191 if (tcount > 3)
b80406ac 9192 return 0;
23860348 9193 break; /* Retransmit buffer. */
c906108c
SS
9194 case '$':
9195 {
40e3f985 9196 if (remote_debug)
2bc416ba 9197 fprintf_unfiltered (gdb_stdlog,
23860348 9198 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
9199 /* It's probably an old response sent because an ACK
9200 was lost. Gobble up the packet and ack it so it
9201 doesn't get retransmitted when we resend this
9202 packet. */
6d820c5c 9203 skip_frame ();
c33e31fd 9204 remote_serial_write ("+", 1);
23860348 9205 continue; /* Now, go look for +. */
c906108c 9206 }
74531fed
PA
9207
9208 case '%':
9209 {
9210 int val;
9211
9212 /* If we got a notification, handle it, and go back to looking
9213 for an ack. */
9214 /* We've found the start of a notification. Now
9215 collect the data. */
8d64371b 9216 val = read_frame (&rs->buf);
74531fed
PA
9217 if (val >= 0)
9218 {
9219 if (remote_debug)
9220 {
8d64371b 9221 std::string str = escape_buffer (rs->buf.data (), val);
6e5abd65 9222
6e5abd65
PA
9223 fprintf_unfiltered (gdb_stdlog,
9224 " Notification received: %s\n",
b3ced9ba 9225 str.c_str ());
74531fed 9226 }
8d64371b 9227 handle_notification (rs->notif_state, rs->buf.data ());
74531fed
PA
9228 /* We're in sync now, rewait for the ack. */
9229 tcount = 0;
9230 }
9231 else
9232 {
9233 if (remote_debug)
9234 {
9235 if (!started_error_output)
9236 {
9237 started_error_output = 1;
9238 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9239 }
9240 fputc_unfiltered (ch & 0177, gdb_stdlog);
8d64371b 9241 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf.data ());
74531fed
PA
9242 }
9243 }
9244 continue;
9245 }
9246 /* fall-through */
c906108c
SS
9247 default:
9248 if (remote_debug)
9249 {
9250 if (!started_error_output)
9251 {
9252 started_error_output = 1;
0f71a2f6 9253 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 9254 }
0f71a2f6 9255 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
9256 }
9257 continue;
9258 }
23860348 9259 break; /* Here to retransmit. */
c906108c
SS
9260 }
9261
9262#if 0
9263 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
9264 able to get out next time we call QUIT, without anything as
9265 violent as interrupt_query. If we want to provide a way out of
9266 here without getting to the next QUIT, it should be based on
9267 hitting ^C twice as in remote_wait. */
c906108c
SS
9268 if (quit_flag)
9269 {
9270 quit_flag = 0;
9271 interrupt_query ();
9272 }
9273#endif
9274 }
a5c0808e 9275
a6f3e723 9276 return 0;
c906108c
SS
9277}
9278
6d820c5c
DJ
9279/* Come here after finding the start of a frame when we expected an
9280 ack. Do our best to discard the rest of this packet. */
9281
6b8edb51
PA
9282void
9283remote_target::skip_frame ()
6d820c5c
DJ
9284{
9285 int c;
9286
9287 while (1)
9288 {
9289 c = readchar (remote_timeout);
9290 switch (c)
9291 {
9292 case SERIAL_TIMEOUT:
9293 /* Nothing we can do. */
9294 return;
9295 case '#':
9296 /* Discard the two bytes of checksum and stop. */
9297 c = readchar (remote_timeout);
9298 if (c >= 0)
9299 c = readchar (remote_timeout);
9300
9301 return;
9302 case '*': /* Run length encoding. */
9303 /* Discard the repeat count. */
9304 c = readchar (remote_timeout);
9305 if (c < 0)
9306 return;
9307 break;
9308 default:
9309 /* A regular character. */
9310 break;
9311 }
9312 }
9313}
9314
c906108c 9315/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
9316 into *BUF, verifying the checksum, length, and handling run-length
9317 compression. NUL terminate the buffer. If there is not enough room,
8d64371b 9318 expand *BUF.
c906108c 9319
c2d11a7d
JM
9320 Returns -1 on error, number of characters in buffer (ignoring the
9321 trailing NULL) on success. (could be extended to return one of the
23860348 9322 SERIAL status indications). */
c2d11a7d 9323
6b8edb51 9324long
8d64371b 9325remote_target::read_frame (gdb::char_vector *buf_p)
c906108c
SS
9326{
9327 unsigned char csum;
c2d11a7d 9328 long bc;
c906108c 9329 int c;
8d64371b 9330 char *buf = buf_p->data ();
a6f3e723 9331 struct remote_state *rs = get_remote_state ();
c906108c
SS
9332
9333 csum = 0;
c2d11a7d 9334 bc = 0;
c906108c
SS
9335
9336 while (1)
9337 {
9338 c = readchar (remote_timeout);
c906108c
SS
9339 switch (c)
9340 {
9341 case SERIAL_TIMEOUT:
9342 if (remote_debug)
0f71a2f6 9343 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 9344 return -1;
c906108c
SS
9345 case '$':
9346 if (remote_debug)
0f71a2f6
JM
9347 fputs_filtered ("Saw new packet start in middle of old one\n",
9348 gdb_stdlog);
23860348 9349 return -1; /* Start a new packet, count retries. */
c906108c
SS
9350 case '#':
9351 {
9352 unsigned char pktcsum;
e1b09194
AC
9353 int check_0 = 0;
9354 int check_1 = 0;
c906108c 9355
c2d11a7d 9356 buf[bc] = '\0';
c906108c 9357
e1b09194
AC
9358 check_0 = readchar (remote_timeout);
9359 if (check_0 >= 0)
9360 check_1 = readchar (remote_timeout);
802188a7 9361
e1b09194
AC
9362 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9363 {
9364 if (remote_debug)
2bc416ba 9365 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 9366 gdb_stdlog);
e1b09194
AC
9367 return -1;
9368 }
9369 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
9370 {
9371 if (remote_debug)
2bc416ba 9372 fputs_filtered ("Communication error in checksum\n",
23860348 9373 gdb_stdlog);
40e3f985
FN
9374 return -1;
9375 }
c906108c 9376
a6f3e723
SL
9377 /* Don't recompute the checksum; with no ack packets we
9378 don't have any way to indicate a packet retransmission
9379 is necessary. */
9380 if (rs->noack_mode)
9381 return bc;
9382
e1b09194 9383 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9384 if (csum == pktcsum)
c2d11a7d 9385 return bc;
c906108c 9386
c5aa993b 9387 if (remote_debug)
c906108c 9388 {
b3ced9ba 9389 std::string str = escape_buffer (buf, bc);
6e5abd65 9390
6e5abd65 9391 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
9392 "Bad checksum, sentsum=0x%x, "
9393 "csum=0x%x, buf=%s\n",
b3ced9ba 9394 pktcsum, csum, str.c_str ());
c906108c 9395 }
c2d11a7d 9396 /* Number of characters in buffer ignoring trailing
23860348 9397 NULL. */
c2d11a7d 9398 return -1;
c906108c 9399 }
23860348 9400 case '*': /* Run length encoding. */
c2c6d25f
JM
9401 {
9402 int repeat;
c906108c 9403
a744cf53 9404 csum += c;
b4501125
AC
9405 c = readchar (remote_timeout);
9406 csum += c;
23860348 9407 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9408
23860348 9409 /* The character before ``*'' is repeated. */
c2d11a7d 9410
6d820c5c 9411 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9412 {
8d64371b 9413 if (bc + repeat - 1 >= buf_p->size () - 1)
6d820c5c
DJ
9414 {
9415 /* Make some more room in the buffer. */
8d64371b
TT
9416 buf_p->resize (buf_p->size () + repeat);
9417 buf = buf_p->data ();
6d820c5c
DJ
9418 }
9419
c2d11a7d
JM
9420 memset (&buf[bc], buf[bc - 1], repeat);
9421 bc += repeat;
c2c6d25f
JM
9422 continue;
9423 }
9424
c2d11a7d 9425 buf[bc] = '\0';
6d820c5c 9426 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9427 return -1;
c2c6d25f 9428 }
c906108c 9429 default:
8d64371b 9430 if (bc >= buf_p->size () - 1)
c906108c 9431 {
6d820c5c 9432 /* Make some more room in the buffer. */
8d64371b
TT
9433 buf_p->resize (buf_p->size () * 2);
9434 buf = buf_p->data ();
c906108c
SS
9435 }
9436
6d820c5c
DJ
9437 buf[bc++] = c;
9438 csum += c;
9439 continue;
c906108c
SS
9440 }
9441 }
9442}
9443
ed2b7c17
TT
9444/* Set this to the maximum number of seconds to wait instead of waiting forever
9445 in target_wait(). If this timer times out, then it generates an error and
9446 the command is aborted. This replaces most of the need for timeouts in the
9447 GDB test suite, and makes it possible to distinguish between a hung target
9448 and one with slow communications. */
9449
9450static int watchdog = 0;
9451static void
9452show_watchdog (struct ui_file *file, int from_tty,
9453 struct cmd_list_element *c, const char *value)
9454{
9455 fprintf_filtered (file, _("Watchdog timer is %s.\n"), value);
9456}
9457
c906108c 9458/* Read a packet from the remote machine, with error checking, and
8d64371b
TT
9459 store it in *BUF. Resize *BUF if necessary to hold the result. If
9460 FOREVER, wait forever rather than timing out; this is used (in
9461 synchronous mode) to wait for a target that is is executing user
9462 code to stop. */
d9fcf2fb
JM
9463/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9464 don't have to change all the calls to getpkt to deal with the
9465 return value, because at the moment I don't know what the right
23860348 9466 thing to do it for those. */
6b8edb51 9467
c906108c 9468void
8d64371b 9469remote_target::getpkt (gdb::char_vector *buf, int forever)
d9fcf2fb 9470{
8d64371b 9471 getpkt_sane (buf, forever);
d9fcf2fb
JM
9472}
9473
9474
9475/* Read a packet from the remote machine, with error checking, and
8d64371b
TT
9476 store it in *BUF. Resize *BUF if necessary to hold the result. If
9477 FOREVER, wait forever rather than timing out; this is used (in
9478 synchronous mode) to wait for a target that is is executing user
9479 code to stop. If FOREVER == 0, this function is allowed to time
9480 out gracefully and return an indication of this to the caller.
9481 Otherwise return the number of bytes read. If EXPECTING_NOTIF,
9482 consider receiving a notification enough reason to return to the
9483 caller. *IS_NOTIF is an output boolean that indicates whether *BUF
9484 holds a notification or not (a regular packet). */
74531fed 9485
6b8edb51 9486int
8d64371b 9487remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
6b8edb51
PA
9488 int forever, int expecting_notif,
9489 int *is_notif)
c906108c 9490{
2d717e4f 9491 struct remote_state *rs = get_remote_state ();
c906108c
SS
9492 int c;
9493 int tries;
9494 int timeout;
df4b58fe 9495 int val = -1;
c906108c 9496
2d717e4f
DJ
9497 /* We're reading a new response. Make sure we don't look at a
9498 previously cached response. */
9499 rs->cached_wait_status = 0;
9500
8d64371b 9501 strcpy (buf->data (), "timeout");
c906108c
SS
9502
9503 if (forever)
74531fed
PA
9504 timeout = watchdog > 0 ? watchdog : -1;
9505 else if (expecting_notif)
9506 timeout = 0; /* There should already be a char in the buffer. If
9507 not, bail out. */
c906108c
SS
9508 else
9509 timeout = remote_timeout;
9510
9511#define MAX_TRIES 3
9512
74531fed
PA
9513 /* Process any number of notifications, and then return when
9514 we get a packet. */
9515 for (;;)
c906108c 9516 {
d9c43928 9517 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9518 times. */
9519 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9520 {
74531fed
PA
9521 /* This can loop forever if the remote side sends us
9522 characters continuously, but if it pauses, we'll get
9523 SERIAL_TIMEOUT from readchar because of timeout. Then
9524 we'll count that as a retry.
9525
9526 Note that even when forever is set, we will only wait
9527 forever prior to the start of a packet. After that, we
9528 expect characters to arrive at a brisk pace. They should
9529 show up within remote_timeout intervals. */
9530 do
9531 c = readchar (timeout);
9532 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9533
9534 if (c == SERIAL_TIMEOUT)
9535 {
74531fed
PA
9536 if (expecting_notif)
9537 return -1; /* Don't complain, it's normal to not get
9538 anything in this case. */
9539
23860348 9540 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9541 {
78a095c3 9542 remote_unpush_target ();
598d3636
JK
9543 throw_error (TARGET_CLOSE_ERROR,
9544 _("Watchdog timeout has expired. "
9545 "Target detached."));
c906108c 9546 }
c906108c 9547 if (remote_debug)
0f71a2f6 9548 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 9549 }
74531fed
PA
9550 else
9551 {
9552 /* We've found the start of a packet or notification.
9553 Now collect the data. */
8d64371b 9554 val = read_frame (buf);
74531fed
PA
9555 if (val >= 0)
9556 break;
9557 }
9558
c33e31fd 9559 remote_serial_write ("-", 1);
c906108c 9560 }
c906108c 9561
74531fed
PA
9562 if (tries > MAX_TRIES)
9563 {
9564 /* We have tried hard enough, and just can't receive the
9565 packet/notification. Give up. */
9566 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9567
74531fed
PA
9568 /* Skip the ack char if we're in no-ack mode. */
9569 if (!rs->noack_mode)
c33e31fd 9570 remote_serial_write ("+", 1);
74531fed
PA
9571 return -1;
9572 }
c906108c 9573
74531fed
PA
9574 /* If we got an ordinary packet, return that to our caller. */
9575 if (c == '$')
c906108c
SS
9576 {
9577 if (remote_debug)
43e526b9 9578 {
6f8976bf 9579 std::string str
8d64371b 9580 = escape_buffer (buf->data (),
6f8976bf
YQ
9581 std::min (val, REMOTE_DEBUG_MAX_CHAR));
9582
9583 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9584 str.c_str ());
9585
567a3e54
SM
9586 if (val > REMOTE_DEBUG_MAX_CHAR)
9587 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9588 val - REMOTE_DEBUG_MAX_CHAR);
6e5abd65 9589
6f8976bf 9590 fprintf_unfiltered (gdb_stdlog, "\n");
43e526b9 9591 }
a6f3e723
SL
9592
9593 /* Skip the ack char if we're in no-ack mode. */
9594 if (!rs->noack_mode)
c33e31fd 9595 remote_serial_write ("+", 1);
fee9eda9
YQ
9596 if (is_notif != NULL)
9597 *is_notif = 0;
0876f84a 9598 return val;
c906108c
SS
9599 }
9600
74531fed
PA
9601 /* If we got a notification, handle it, and go back to looking
9602 for a packet. */
9603 else
9604 {
9605 gdb_assert (c == '%');
9606
9607 if (remote_debug)
9608 {
8d64371b 9609 std::string str = escape_buffer (buf->data (), val);
6e5abd65 9610
6e5abd65
PA
9611 fprintf_unfiltered (gdb_stdlog,
9612 " Notification received: %s\n",
b3ced9ba 9613 str.c_str ());
74531fed 9614 }
fee9eda9
YQ
9615 if (is_notif != NULL)
9616 *is_notif = 1;
c906108c 9617
8d64371b 9618 handle_notification (rs->notif_state, buf->data ());
c906108c 9619
74531fed 9620 /* Notifications require no acknowledgement. */
a6f3e723 9621
74531fed 9622 if (expecting_notif)
fee9eda9 9623 return val;
74531fed
PA
9624 }
9625 }
9626}
9627
6b8edb51 9628int
8d64371b 9629remote_target::getpkt_sane (gdb::char_vector *buf, int forever)
74531fed 9630{
8d64371b 9631 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL);
74531fed
PA
9632}
9633
6b8edb51 9634int
8d64371b 9635remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever,
6b8edb51 9636 int *is_notif)
74531fed 9637{
8d64371b 9638 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif);
c906108c 9639}
74531fed 9640
cbb8991c
DB
9641/* Kill any new fork children of process PID that haven't been
9642 processed by follow_fork. */
9643
6b8edb51
PA
9644void
9645remote_target::kill_new_fork_children (int pid)
cbb8991c 9646{
6b8edb51 9647 remote_state *rs = get_remote_state ();
cbb8991c 9648 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
9649
9650 /* Kill the fork child threads of any threads in process PID
9651 that are stopped at a fork event. */
08036331 9652 for (thread_info *thread : all_non_exited_threads ())
cbb8991c
DB
9653 {
9654 struct target_waitstatus *ws = &thread->pending_follow;
9655
9656 if (is_pending_fork_parent (ws, pid, thread->ptid))
9657 {
953edf2b 9658 int child_pid = ws->value.related_pid.pid ();
cbb8991c
DB
9659 int res;
9660
6b8edb51 9661 res = remote_vkill (child_pid);
cbb8991c
DB
9662 if (res != 0)
9663 error (_("Can't kill fork child process %d"), child_pid);
9664 }
9665 }
9666
9667 /* Check for any pending fork events (not reported or processed yet)
9668 in process PID and kill those fork child threads as well. */
9669 remote_notif_get_pending_events (notif);
953edf2b
TT
9670 for (auto &event : rs->stop_reply_queue)
9671 if (is_pending_fork_parent (&event->ws, pid, event->ptid))
9672 {
9673 int child_pid = event->ws.value.related_pid.pid ();
9674 int res;
9675
9676 res = remote_vkill (child_pid);
9677 if (res != 0)
9678 error (_("Can't kill fork child process %d"), child_pid);
9679 }
cbb8991c
DB
9680}
9681
c906108c 9682\f
8020350c
DB
9683/* Target hook to kill the current inferior. */
9684
f6ac5f3d
PA
9685void
9686remote_target::kill ()
43ff13b4 9687{
8020350c 9688 int res = -1;
e99b03dc 9689 int pid = inferior_ptid.pid ();
8020350c 9690 struct remote_state *rs = get_remote_state ();
0fdf84ca 9691
8020350c 9692 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9693 {
8020350c
DB
9694 /* If we're stopped while forking and we haven't followed yet,
9695 kill the child task. We need to do this before killing the
9696 parent task because if this is a vfork then the parent will
9697 be sleeping. */
6b8edb51 9698 kill_new_fork_children (pid);
8020350c 9699
6b8edb51 9700 res = remote_vkill (pid);
8020350c 9701 if (res == 0)
0fdf84ca 9702 {
bc1e6c81 9703 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
9704 return;
9705 }
8020350c 9706 }
0fdf84ca 9707
8020350c
DB
9708 /* If we are in 'target remote' mode and we are killing the only
9709 inferior, then we will tell gdbserver to exit and unpush the
9710 target. */
9711 if (res == -1 && !remote_multi_process_p (rs)
9712 && number_of_live_inferiors () == 1)
9713 {
9714 remote_kill_k ();
9715
9716 /* We've killed the remote end, we get to mourn it. If we are
9717 not in extended mode, mourning the inferior also unpushes
9718 remote_ops from the target stack, which closes the remote
9719 connection. */
bc1e6c81 9720 target_mourn_inferior (inferior_ptid);
8020350c
DB
9721
9722 return;
0fdf84ca 9723 }
43ff13b4 9724
8020350c 9725 error (_("Can't kill process"));
43ff13b4
JM
9726}
9727
8020350c
DB
9728/* Send a kill request to the target using the 'vKill' packet. */
9729
6b8edb51
PA
9730int
9731remote_target::remote_vkill (int pid)
82f73884 9732{
4082afcc 9733 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
9734 return -1;
9735
6b8edb51
PA
9736 remote_state *rs = get_remote_state ();
9737
82f73884 9738 /* Tell the remote target to detach. */
8d64371b 9739 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid);
82f73884 9740 putpkt (rs->buf);
8d64371b 9741 getpkt (&rs->buf, 0);
82f73884 9742
4082afcc
PA
9743 switch (packet_ok (rs->buf,
9744 &remote_protocol_packets[PACKET_vKill]))
9745 {
9746 case PACKET_OK:
9747 return 0;
9748 case PACKET_ERROR:
9749 return 1;
9750 case PACKET_UNKNOWN:
9751 return -1;
9752 default:
9753 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9754 }
82f73884
PA
9755}
9756
8020350c
DB
9757/* Send a kill request to the target using the 'k' packet. */
9758
6b8edb51
PA
9759void
9760remote_target::remote_kill_k ()
82f73884 9761{
8020350c
DB
9762 /* Catch errors so the user can quit from gdb even when we
9763 aren't on speaking terms with the remote system. */
a70b8144 9764 try
82f73884 9765 {
82f73884 9766 putpkt ("k");
82f73884 9767 }
230d2906 9768 catch (const gdb_exception_error &ex)
8020350c
DB
9769 {
9770 if (ex.error == TARGET_CLOSE_ERROR)
9771 {
9772 /* If we got an (EOF) error that caused the target
9773 to go away, then we're done, that's what we wanted.
9774 "k" is susceptible to cause a premature EOF, given
9775 that the remote server isn't actually required to
9776 reply to "k", and it can happen that it doesn't
9777 even get to reply ACK to the "k". */
9778 return;
9779 }
82f73884 9780
8020350c
DB
9781 /* Otherwise, something went wrong. We didn't actually kill
9782 the target. Just propagate the exception, and let the
9783 user or higher layers decide what to do. */
eedc3f4f 9784 throw;
8020350c 9785 }
82f73884
PA
9786}
9787
f6ac5f3d
PA
9788void
9789remote_target::mourn_inferior ()
c906108c 9790{
8020350c 9791 struct remote_state *rs = get_remote_state ();
ce5ce7ed 9792
9607784a
PA
9793 /* We're no longer interested in notification events of an inferior
9794 that exited or was killed/detached. */
9795 discard_pending_stop_replies (current_inferior ());
9796
8020350c
DB
9797 /* In 'target remote' mode with one inferior, we close the connection. */
9798 if (!rs->extended && number_of_live_inferiors () <= 1)
9799 {
f6ac5f3d 9800 unpush_target (this);
c906108c 9801
8020350c
DB
9802 /* remote_close takes care of doing most of the clean up. */
9803 generic_mourn_inferior ();
9804 return;
9805 }
c906108c 9806
e24a49d8
PA
9807 /* In case we got here due to an error, but we're going to stay
9808 connected. */
9809 rs->waiting_for_stop_reply = 0;
9810
dc1981d7
PA
9811 /* If the current general thread belonged to the process we just
9812 detached from or has exited, the remote side current general
9813 thread becomes undefined. Considering a case like this:
9814
9815 - We just got here due to a detach.
9816 - The process that we're detaching from happens to immediately
9817 report a global breakpoint being hit in non-stop mode, in the
9818 same thread we had selected before.
9819 - GDB attaches to this process again.
9820 - This event happens to be the next event we handle.
9821
9822 GDB would consider that the current general thread didn't need to
9823 be set on the stub side (with Hg), since for all it knew,
9824 GENERAL_THREAD hadn't changed.
9825
9826 Notice that although in all-stop mode, the remote server always
9827 sets the current thread to the thread reporting the stop event,
9828 that doesn't happen in non-stop mode; in non-stop, the stub *must
9829 not* change the current thread when reporting a breakpoint hit,
9830 due to the decoupling of event reporting and event handling.
9831
9832 To keep things simple, we always invalidate our notion of the
9833 current thread. */
47f8a51d 9834 record_currthread (rs, minus_one_ptid);
dc1981d7 9835
8020350c 9836 /* Call common code to mark the inferior as not running. */
48aa3c27
PA
9837 generic_mourn_inferior ();
9838
d729566a 9839 if (!have_inferiors ())
2d717e4f 9840 {
82f73884
PA
9841 if (!remote_multi_process_p (rs))
9842 {
9843 /* Check whether the target is running now - some remote stubs
9844 automatically restart after kill. */
9845 putpkt ("?");
8d64371b 9846 getpkt (&rs->buf, 0);
82f73884
PA
9847
9848 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9849 {
3e43a32a
MS
9850 /* Assume that the target has been restarted. Set
9851 inferior_ptid so that bits of core GDB realizes
9852 there's something here, e.g., so that the user can
9853 say "kill" again. */
82f73884
PA
9854 inferior_ptid = magic_null_ptid;
9855 }
82f73884 9856 }
2d717e4f
DJ
9857 }
9858}
c906108c 9859
57810aa7 9860bool
f6ac5f3d 9861extended_remote_target::supports_disable_randomization ()
03583c20 9862{
4082afcc 9863 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
9864}
9865
6b8edb51
PA
9866void
9867remote_target::extended_remote_disable_randomization (int val)
03583c20
UW
9868{
9869 struct remote_state *rs = get_remote_state ();
9870 char *reply;
9871
8d64371b
TT
9872 xsnprintf (rs->buf.data (), get_remote_packet_size (),
9873 "QDisableRandomization:%x", val);
03583c20 9874 putpkt (rs->buf);
b6bb3468 9875 reply = remote_get_noisy_reply ();
03583c20
UW
9876 if (*reply == '\0')
9877 error (_("Target does not support QDisableRandomization."));
9878 if (strcmp (reply, "OK") != 0)
9879 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9880}
9881
6b8edb51
PA
9882int
9883remote_target::extended_remote_run (const std::string &args)
2d717e4f
DJ
9884{
9885 struct remote_state *rs = get_remote_state ();
2d717e4f 9886 int len;
94585166 9887 const char *remote_exec_file = get_remote_exec_file ();
c906108c 9888
2d717e4f
DJ
9889 /* If the user has disabled vRun support, or we have detected that
9890 support is not available, do not try it. */
4082afcc 9891 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 9892 return -1;
424163ea 9893
8d64371b
TT
9894 strcpy (rs->buf.data (), "vRun;");
9895 len = strlen (rs->buf.data ());
c906108c 9896
2d717e4f
DJ
9897 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9898 error (_("Remote file name too long for run packet"));
8d64371b 9899 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len,
9f1b45b0 9900 strlen (remote_exec_file));
2d717e4f 9901
7c5ded6a 9902 if (!args.empty ())
2d717e4f 9903 {
2d717e4f 9904 int i;
2d717e4f 9905
773a1edc 9906 gdb_argv argv (args.c_str ());
2d717e4f
DJ
9907 for (i = 0; argv[i] != NULL; i++)
9908 {
9909 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9910 error (_("Argument list too long for run packet"));
9911 rs->buf[len++] = ';';
8d64371b 9912 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len,
9f1b45b0 9913 strlen (argv[i]));
2d717e4f 9914 }
2d717e4f
DJ
9915 }
9916
9917 rs->buf[len++] = '\0';
9918
9919 putpkt (rs->buf);
8d64371b 9920 getpkt (&rs->buf, 0);
2d717e4f 9921
4082afcc 9922 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 9923 {
4082afcc 9924 case PACKET_OK:
3405876a 9925 /* We have a wait response. All is well. */
2d717e4f 9926 return 0;
4082afcc
PA
9927 case PACKET_UNKNOWN:
9928 return -1;
9929 case PACKET_ERROR:
2d717e4f
DJ
9930 if (remote_exec_file[0] == '\0')
9931 error (_("Running the default executable on the remote target failed; "
9932 "try \"set remote exec-file\"?"));
9933 else
9934 error (_("Running \"%s\" on the remote target failed"),
9935 remote_exec_file);
4082afcc
PA
9936 default:
9937 gdb_assert_not_reached (_("bad switch"));
2d717e4f 9938 }
c906108c
SS
9939}
9940
0a2dde4a
SDJ
9941/* Helper function to send set/unset environment packets. ACTION is
9942 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
9943 or "QEnvironmentUnsetVariable". VALUE is the variable to be
9944 sent. */
9945
6b8edb51
PA
9946void
9947remote_target::send_environment_packet (const char *action,
9948 const char *packet,
9949 const char *value)
0a2dde4a 9950{
6b8edb51
PA
9951 remote_state *rs = get_remote_state ();
9952
0a2dde4a
SDJ
9953 /* Convert the environment variable to an hex string, which
9954 is the best format to be transmitted over the wire. */
9955 std::string encoded_value = bin2hex ((const gdb_byte *) value,
9956 strlen (value));
9957
8d64371b 9958 xsnprintf (rs->buf.data (), get_remote_packet_size (),
0a2dde4a
SDJ
9959 "%s:%s", packet, encoded_value.c_str ());
9960
9961 putpkt (rs->buf);
8d64371b
TT
9962 getpkt (&rs->buf, 0);
9963 if (strcmp (rs->buf.data (), "OK") != 0)
0a2dde4a
SDJ
9964 warning (_("Unable to %s environment variable '%s' on remote."),
9965 action, value);
9966}
9967
9968/* Helper function to handle the QEnvironment* packets. */
9969
6b8edb51
PA
9970void
9971remote_target::extended_remote_environment_support ()
0a2dde4a 9972{
6b8edb51
PA
9973 remote_state *rs = get_remote_state ();
9974
0a2dde4a
SDJ
9975 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9976 {
9977 putpkt ("QEnvironmentReset");
8d64371b
TT
9978 getpkt (&rs->buf, 0);
9979 if (strcmp (rs->buf.data (), "OK") != 0)
0a2dde4a
SDJ
9980 warning (_("Unable to reset environment on remote."));
9981 }
9982
9983 gdb_environ *e = &current_inferior ()->environment;
9984
9985 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9986 for (const std::string &el : e->user_set_env ())
6b8edb51 9987 send_environment_packet ("set", "QEnvironmentHexEncoded",
0a2dde4a
SDJ
9988 el.c_str ());
9989
9990 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9991 for (const std::string &el : e->user_unset_env ())
6b8edb51 9992 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
0a2dde4a
SDJ
9993}
9994
bc3b087d
SDJ
9995/* Helper function to set the current working directory for the
9996 inferior in the remote target. */
9997
6b8edb51
PA
9998void
9999remote_target::extended_remote_set_inferior_cwd ()
bc3b087d
SDJ
10000{
10001 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10002 {
10003 const char *inferior_cwd = get_inferior_cwd ();
6b8edb51 10004 remote_state *rs = get_remote_state ();
bc3b087d
SDJ
10005
10006 if (inferior_cwd != NULL)
10007 {
10008 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10009 strlen (inferior_cwd));
10010
8d64371b 10011 xsnprintf (rs->buf.data (), get_remote_packet_size (),
bc3b087d
SDJ
10012 "QSetWorkingDir:%s", hexpath.c_str ());
10013 }
10014 else
10015 {
10016 /* An empty inferior_cwd means that the user wants us to
10017 reset the remote server's inferior's cwd. */
8d64371b 10018 xsnprintf (rs->buf.data (), get_remote_packet_size (),
bc3b087d
SDJ
10019 "QSetWorkingDir:");
10020 }
10021
10022 putpkt (rs->buf);
8d64371b 10023 getpkt (&rs->buf, 0);
bc3b087d
SDJ
10024 if (packet_ok (rs->buf,
10025 &remote_protocol_packets[PACKET_QSetWorkingDir])
10026 != PACKET_OK)
10027 error (_("\
10028Remote replied unexpectedly while setting the inferior's working\n\
10029directory: %s"),
8d64371b 10030 rs->buf.data ());
bc3b087d
SDJ
10031
10032 }
10033}
10034
2d717e4f
DJ
10035/* In the extended protocol we want to be able to do things like
10036 "run" and have them basically work as expected. So we need
10037 a special create_inferior function. We support changing the
10038 executable file and the command line arguments, but not the
10039 environment. */
10040
f6ac5f3d
PA
10041void
10042extended_remote_target::create_inferior (const char *exec_file,
10043 const std::string &args,
10044 char **env, int from_tty)
43ff13b4 10045{
3405876a
PA
10046 int run_worked;
10047 char *stop_reply;
10048 struct remote_state *rs = get_remote_state ();
94585166 10049 const char *remote_exec_file = get_remote_exec_file ();
3405876a 10050
43ff13b4 10051 /* If running asynchronously, register the target file descriptor
23860348 10052 with the event loop. */
75c99385 10053 if (target_can_async_p ())
6a3753b3 10054 target_async (1);
43ff13b4 10055
03583c20 10056 /* Disable address space randomization if requested (and supported). */
f6ac5f3d 10057 if (supports_disable_randomization ())
03583c20
UW
10058 extended_remote_disable_randomization (disable_randomization);
10059
aefd8b33
SDJ
10060 /* If startup-with-shell is on, we inform gdbserver to start the
10061 remote inferior using a shell. */
10062 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10063 {
8d64371b 10064 xsnprintf (rs->buf.data (), get_remote_packet_size (),
aefd8b33
SDJ
10065 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10066 putpkt (rs->buf);
8d64371b
TT
10067 getpkt (&rs->buf, 0);
10068 if (strcmp (rs->buf.data (), "OK") != 0)
aefd8b33
SDJ
10069 error (_("\
10070Remote replied unexpectedly while setting startup-with-shell: %s"),
8d64371b 10071 rs->buf.data ());
aefd8b33
SDJ
10072 }
10073
6b8edb51 10074 extended_remote_environment_support ();
0a2dde4a 10075
6b8edb51 10076 extended_remote_set_inferior_cwd ();
bc3b087d 10077
43ff13b4 10078 /* Now restart the remote server. */
3405876a
PA
10079 run_worked = extended_remote_run (args) != -1;
10080 if (!run_worked)
2d717e4f
DJ
10081 {
10082 /* vRun was not supported. Fail if we need it to do what the
10083 user requested. */
10084 if (remote_exec_file[0])
10085 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 10086 if (!args.empty ())
65e65158 10087 error (_("Remote target does not support \"set args\" or run ARGS"));
43ff13b4 10088
2d717e4f
DJ
10089 /* Fall back to "R". */
10090 extended_remote_restart ();
10091 }
424163ea 10092
3405876a 10093 /* vRun's success return is a stop reply. */
8d64371b 10094 stop_reply = run_worked ? rs->buf.data () : NULL;
3405876a 10095 add_current_inferior_and_thread (stop_reply);
c0a2216e 10096
2d717e4f
DJ
10097 /* Get updated offsets, if the stub uses qOffsets. */
10098 get_offsets ();
2d717e4f 10099}
c906108c 10100\f
c5aa993b 10101
b775012e
LM
10102/* Given a location's target info BP_TGT and the packet buffer BUF, output
10103 the list of conditions (in agent expression bytecode format), if any, the
10104 target needs to evaluate. The output is placed into the packet buffer
bba74b36 10105 started from BUF and ended at BUF_END. */
b775012e
LM
10106
10107static int
10108remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
10109 struct bp_target_info *bp_tgt, char *buf,
10110 char *buf_end)
b775012e 10111{
3cde5c42 10112 if (bp_tgt->conditions.empty ())
b775012e
LM
10113 return 0;
10114
10115 buf += strlen (buf);
bba74b36 10116 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
10117 buf++;
10118
83621223 10119 /* Send conditions to the target. */
d538e36d 10120 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 10121 {
bba74b36 10122 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 10123 buf += strlen (buf);
3cde5c42 10124 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
10125 buf = pack_hex_byte (buf, aexpr->buf[i]);
10126 *buf = '\0';
10127 }
b775012e
LM
10128 return 0;
10129}
10130
d3ce09f5
SS
10131static void
10132remote_add_target_side_commands (struct gdbarch *gdbarch,
10133 struct bp_target_info *bp_tgt, char *buf)
10134{
3cde5c42 10135 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
10136 return;
10137
10138 buf += strlen (buf);
10139
10140 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10141 buf += strlen (buf);
10142
10143 /* Concatenate all the agent expressions that are commands into the
10144 cmds parameter. */
df97be55 10145 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
10146 {
10147 sprintf (buf, "X%x,", aexpr->len);
10148 buf += strlen (buf);
3cde5c42 10149 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
10150 buf = pack_hex_byte (buf, aexpr->buf[i]);
10151 *buf = '\0';
10152 }
d3ce09f5
SS
10153}
10154
8181d85f
DJ
10155/* Insert a breakpoint. On targets that have software breakpoint
10156 support, we ask the remote target to do the work; on targets
10157 which don't, we insert a traditional memory breakpoint. */
c906108c 10158
f6ac5f3d
PA
10159int
10160remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10161 struct bp_target_info *bp_tgt)
c906108c 10162{
d471ea57
AC
10163 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10164 If it succeeds, then set the support to PACKET_ENABLE. If it
10165 fails, and the user has explicitly requested the Z support then
23860348 10166 report an error, otherwise, mark it disabled and go on. */
802188a7 10167
4082afcc 10168 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10169 {
0d5ed153 10170 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10171 struct remote_state *rs;
bba74b36 10172 char *p, *endbuf;
4fff2411 10173
28439a30
PA
10174 /* Make sure the remote is pointing at the right process, if
10175 necessary. */
10176 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10177 set_general_process ();
10178
4fff2411 10179 rs = get_remote_state ();
8d64371b
TT
10180 p = rs->buf.data ();
10181 endbuf = p + get_remote_packet_size ();
802188a7 10182
96baa820
JM
10183 *(p++) = 'Z';
10184 *(p++) = '0';
10185 *(p++) = ',';
7c0f6dcc 10186 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 10187 p += hexnumstr (p, addr);
579c6ad9 10188 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10189
f6ac5f3d 10190 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10191 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10192
f6ac5f3d 10193 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10194 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10195
6d820c5c 10196 putpkt (rs->buf);
8d64371b 10197 getpkt (&rs->buf, 0);
96baa820 10198
6d820c5c 10199 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 10200 {
d471ea57
AC
10201 case PACKET_ERROR:
10202 return -1;
10203 case PACKET_OK:
10204 return 0;
10205 case PACKET_UNKNOWN:
10206 break;
96baa820
JM
10207 }
10208 }
c906108c 10209
0000e5cc
PA
10210 /* If this breakpoint has target-side commands but this stub doesn't
10211 support Z0 packets, throw error. */
3cde5c42 10212 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
10213 throw_error (NOT_SUPPORTED_ERROR, _("\
10214Target doesn't support breakpoints that have target side commands."));
10215
f6ac5f3d 10216 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
c906108c
SS
10217}
10218
f6ac5f3d
PA
10219int
10220remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10221 struct bp_target_info *bp_tgt,
10222 enum remove_bp_reason reason)
c906108c 10223{
8181d85f 10224 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 10225 struct remote_state *rs = get_remote_state ();
96baa820 10226
4082afcc 10227 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10228 {
8d64371b
TT
10229 char *p = rs->buf.data ();
10230 char *endbuf = p + get_remote_packet_size ();
802188a7 10231
28439a30
PA
10232 /* Make sure the remote is pointing at the right process, if
10233 necessary. */
10234 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10235 set_general_process ();
10236
96baa820
JM
10237 *(p++) = 'z';
10238 *(p++) = '0';
10239 *(p++) = ',';
10240
8181d85f
DJ
10241 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10242 p += hexnumstr (p, addr);
579c6ad9 10243 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10244
6d820c5c 10245 putpkt (rs->buf);
8d64371b 10246 getpkt (&rs->buf, 0);
96baa820 10247
6d820c5c 10248 return (rs->buf[0] == 'E');
96baa820
JM
10249 }
10250
f6ac5f3d 10251 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
c906108c
SS
10252}
10253
f486487f 10254static enum Z_packet_type
d471ea57
AC
10255watchpoint_to_Z_packet (int type)
10256{
10257 switch (type)
10258 {
10259 case hw_write:
bb858e6a 10260 return Z_PACKET_WRITE_WP;
d471ea57
AC
10261 break;
10262 case hw_read:
bb858e6a 10263 return Z_PACKET_READ_WP;
d471ea57
AC
10264 break;
10265 case hw_access:
bb858e6a 10266 return Z_PACKET_ACCESS_WP;
d471ea57
AC
10267 break;
10268 default:
8e65ff28 10269 internal_error (__FILE__, __LINE__,
e2e0b3e5 10270 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
10271 }
10272}
10273
f6ac5f3d
PA
10274int
10275remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10276 enum target_hw_bp_type type, struct expression *cond)
96baa820 10277{
d01949b6 10278 struct remote_state *rs = get_remote_state ();
8d64371b 10279 char *endbuf = rs->buf.data () + get_remote_packet_size ();
e514a9d6 10280 char *p;
d471ea57 10281 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 10282
4082afcc 10283 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 10284 return 1;
802188a7 10285
28439a30
PA
10286 /* Make sure the remote is pointing at the right process, if
10287 necessary. */
10288 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10289 set_general_process ();
10290
8d64371b
TT
10291 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet);
10292 p = strchr (rs->buf.data (), '\0');
96baa820
JM
10293 addr = remote_address_masked (addr);
10294 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10295 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 10296
6d820c5c 10297 putpkt (rs->buf);
8d64371b 10298 getpkt (&rs->buf, 0);
96baa820 10299
6d820c5c 10300 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10301 {
10302 case PACKET_ERROR:
d471ea57 10303 return -1;
85d721b8
PA
10304 case PACKET_UNKNOWN:
10305 return 1;
d471ea57
AC
10306 case PACKET_OK:
10307 return 0;
10308 }
8e65ff28 10309 internal_error (__FILE__, __LINE__,
e2e0b3e5 10310 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
10311}
10312
57810aa7 10313bool
f6ac5f3d
PA
10314remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10315 CORE_ADDR start, int length)
283002cf
MR
10316{
10317 CORE_ADDR diff = remote_address_masked (addr - start);
10318
10319 return diff < length;
10320}
10321
d471ea57 10322
f6ac5f3d
PA
10323int
10324remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10325 enum target_hw_bp_type type, struct expression *cond)
96baa820 10326{
d01949b6 10327 struct remote_state *rs = get_remote_state ();
8d64371b 10328 char *endbuf = rs->buf.data () + get_remote_packet_size ();
e514a9d6 10329 char *p;
d471ea57
AC
10330 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10331
4082afcc 10332 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 10333 return -1;
802188a7 10334
28439a30
PA
10335 /* Make sure the remote is pointing at the right process, if
10336 necessary. */
10337 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10338 set_general_process ();
10339
8d64371b
TT
10340 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet);
10341 p = strchr (rs->buf.data (), '\0');
96baa820
JM
10342 addr = remote_address_masked (addr);
10343 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10344 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c 10345 putpkt (rs->buf);
8d64371b 10346 getpkt (&rs->buf, 0);
96baa820 10347
6d820c5c 10348 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10349 {
10350 case PACKET_ERROR:
10351 case PACKET_UNKNOWN:
10352 return -1;
10353 case PACKET_OK:
10354 return 0;
10355 }
8e65ff28 10356 internal_error (__FILE__, __LINE__,
e2e0b3e5 10357 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
10358}
10359
3c3bea1c 10360
60fcc1c3
TT
10361static int remote_hw_watchpoint_limit = -1;
10362static int remote_hw_watchpoint_length_limit = -1;
10363static int remote_hw_breakpoint_limit = -1;
d471ea57 10364
f6ac5f3d
PA
10365int
10366remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
480a3f21
PW
10367{
10368 if (remote_hw_watchpoint_length_limit == 0)
10369 return 0;
10370 else if (remote_hw_watchpoint_length_limit < 0)
10371 return 1;
10372 else if (len <= remote_hw_watchpoint_length_limit)
10373 return 1;
10374 else
10375 return 0;
10376}
10377
f6ac5f3d
PA
10378int
10379remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
96baa820 10380{
3c3bea1c
GS
10381 if (type == bp_hardware_breakpoint)
10382 {
10383 if (remote_hw_breakpoint_limit == 0)
10384 return 0;
501eef12
AC
10385 else if (remote_hw_breakpoint_limit < 0)
10386 return 1;
3c3bea1c
GS
10387 else if (cnt <= remote_hw_breakpoint_limit)
10388 return 1;
10389 }
10390 else
10391 {
10392 if (remote_hw_watchpoint_limit == 0)
10393 return 0;
501eef12
AC
10394 else if (remote_hw_watchpoint_limit < 0)
10395 return 1;
3c3bea1c
GS
10396 else if (ot)
10397 return -1;
10398 else if (cnt <= remote_hw_watchpoint_limit)
10399 return 1;
10400 }
10401 return -1;
10402}
10403
f7e6eed5
PA
10404/* The to_stopped_by_sw_breakpoint method of target remote. */
10405
57810aa7 10406bool
f6ac5f3d 10407remote_target::stopped_by_sw_breakpoint ()
f7e6eed5 10408{
799a2abe 10409 struct thread_info *thread = inferior_thread ();
f7e6eed5 10410
799a2abe 10411 return (thread->priv != NULL
7aabaf9d
SM
10412 && (get_remote_thread_info (thread)->stop_reason
10413 == TARGET_STOPPED_BY_SW_BREAKPOINT));
f7e6eed5
PA
10414}
10415
10416/* The to_supports_stopped_by_sw_breakpoint method of target
10417 remote. */
10418
57810aa7 10419bool
f6ac5f3d 10420remote_target::supports_stopped_by_sw_breakpoint ()
f7e6eed5 10421{
f7e6eed5
PA
10422 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10423}
10424
10425/* The to_stopped_by_hw_breakpoint method of target remote. */
10426
57810aa7 10427bool
f6ac5f3d 10428remote_target::stopped_by_hw_breakpoint ()
f7e6eed5 10429{
799a2abe 10430 struct thread_info *thread = inferior_thread ();
f7e6eed5 10431
799a2abe 10432 return (thread->priv != NULL
7aabaf9d
SM
10433 && (get_remote_thread_info (thread)->stop_reason
10434 == TARGET_STOPPED_BY_HW_BREAKPOINT));
f7e6eed5
PA
10435}
10436
10437/* The to_supports_stopped_by_hw_breakpoint method of target
10438 remote. */
10439
57810aa7 10440bool
f6ac5f3d 10441remote_target::supports_stopped_by_hw_breakpoint ()
f7e6eed5 10442{
f7e6eed5
PA
10443 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10444}
10445
57810aa7 10446bool
f6ac5f3d 10447remote_target::stopped_by_watchpoint ()
3c3bea1c 10448{
799a2abe 10449 struct thread_info *thread = inferior_thread ();
ee154bee 10450
799a2abe 10451 return (thread->priv != NULL
7aabaf9d
SM
10452 && (get_remote_thread_info (thread)->stop_reason
10453 == TARGET_STOPPED_BY_WATCHPOINT));
3c3bea1c
GS
10454}
10455
57810aa7 10456bool
f6ac5f3d 10457remote_target::stopped_data_address (CORE_ADDR *addr_p)
3c3bea1c 10458{
799a2abe 10459 struct thread_info *thread = inferior_thread ();
a744cf53 10460
799a2abe 10461 if (thread->priv != NULL
7aabaf9d
SM
10462 && (get_remote_thread_info (thread)->stop_reason
10463 == TARGET_STOPPED_BY_WATCHPOINT))
4aa7a7f5 10464 {
7aabaf9d 10465 *addr_p = get_remote_thread_info (thread)->watch_data_address;
57810aa7 10466 return true;
4aa7a7f5
JJ
10467 }
10468
57810aa7 10469 return false;
3c3bea1c
GS
10470}
10471
10472
f6ac5f3d
PA
10473int
10474remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10475 struct bp_target_info *bp_tgt)
3c3bea1c 10476{
0d5ed153 10477 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10478 struct remote_state *rs;
bba74b36 10479 char *p, *endbuf;
dd61ec5c 10480 char *message;
3c3bea1c 10481
4082afcc 10482 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10483 return -1;
2bc416ba 10484
28439a30
PA
10485 /* Make sure the remote is pointing at the right process, if
10486 necessary. */
10487 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10488 set_general_process ();
10489
4fff2411 10490 rs = get_remote_state ();
8d64371b
TT
10491 p = rs->buf.data ();
10492 endbuf = p + get_remote_packet_size ();
4fff2411 10493
96baa820
JM
10494 *(p++) = 'Z';
10495 *(p++) = '1';
10496 *(p++) = ',';
802188a7 10497
0d5ed153 10498 addr = remote_address_masked (addr);
96baa820 10499 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10500 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10501
f6ac5f3d 10502 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10503 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10504
f6ac5f3d 10505 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10506 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10507
6d820c5c 10508 putpkt (rs->buf);
8d64371b 10509 getpkt (&rs->buf, 0);
96baa820 10510
6d820c5c 10511 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10512 {
10513 case PACKET_ERROR:
dd61ec5c
MW
10514 if (rs->buf[1] == '.')
10515 {
8d64371b 10516 message = strchr (&rs->buf[2], '.');
dd61ec5c 10517 if (message)
0316657e 10518 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
10519 }
10520 return -1;
d471ea57
AC
10521 case PACKET_UNKNOWN:
10522 return -1;
10523 case PACKET_OK:
10524 return 0;
10525 }
8e65ff28 10526 internal_error (__FILE__, __LINE__,
e2e0b3e5 10527 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10528}
10529
d471ea57 10530
f6ac5f3d
PA
10531int
10532remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10533 struct bp_target_info *bp_tgt)
96baa820 10534{
8181d85f 10535 CORE_ADDR addr;
d01949b6 10536 struct remote_state *rs = get_remote_state ();
8d64371b
TT
10537 char *p = rs->buf.data ();
10538 char *endbuf = p + get_remote_packet_size ();
c8189ed1 10539
4082afcc 10540 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10541 return -1;
802188a7 10542
28439a30
PA
10543 /* Make sure the remote is pointing at the right process, if
10544 necessary. */
10545 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10546 set_general_process ();
10547
96baa820
JM
10548 *(p++) = 'z';
10549 *(p++) = '1';
10550 *(p++) = ',';
802188a7 10551
8181d85f 10552 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10553 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10554 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10555
6d820c5c 10556 putpkt (rs->buf);
8d64371b 10557 getpkt (&rs->buf, 0);
802188a7 10558
6d820c5c 10559 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10560 {
10561 case PACKET_ERROR:
10562 case PACKET_UNKNOWN:
10563 return -1;
10564 case PACKET_OK:
10565 return 0;
10566 }
8e65ff28 10567 internal_error (__FILE__, __LINE__,
e2e0b3e5 10568 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10569}
96baa820 10570
4a5e7a5b
PA
10571/* Verify memory using the "qCRC:" request. */
10572
f6ac5f3d
PA
10573int
10574remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
4a5e7a5b
PA
10575{
10576 struct remote_state *rs = get_remote_state ();
10577 unsigned long host_crc, target_crc;
10578 char *tmp;
10579
936d2992
PA
10580 /* It doesn't make sense to use qCRC if the remote target is
10581 connected but not running. */
10582 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10583 {
10584 enum packet_result result;
28439a30 10585
936d2992
PA
10586 /* Make sure the remote is pointing at the right process. */
10587 set_general_process ();
4a5e7a5b 10588
936d2992 10589 /* FIXME: assumes lma can fit into long. */
8d64371b 10590 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
936d2992
PA
10591 (long) lma, (long) size);
10592 putpkt (rs->buf);
4a5e7a5b 10593
936d2992
PA
10594 /* Be clever; compute the host_crc before waiting for target
10595 reply. */
10596 host_crc = xcrc32 (data, size, 0xffffffff);
10597
8d64371b 10598 getpkt (&rs->buf, 0);
4a5e7a5b 10599
936d2992
PA
10600 result = packet_ok (rs->buf,
10601 &remote_protocol_packets[PACKET_qCRC]);
10602 if (result == PACKET_ERROR)
10603 return -1;
10604 else if (result == PACKET_OK)
10605 {
10606 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10607 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10608
936d2992
PA
10609 return (host_crc == target_crc);
10610 }
10611 }
4a5e7a5b 10612
f6ac5f3d 10613 return simple_verify_memory (this, data, lma, size);
4a5e7a5b
PA
10614}
10615
c906108c
SS
10616/* compare-sections command
10617
10618 With no arguments, compares each loadable section in the exec bfd
10619 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10620 Useful for verifying the image on the target against the exec file. */
e514a9d6 10621
c906108c 10622static void
ac88e2de 10623compare_sections_command (const char *args, int from_tty)
c906108c
SS
10624{
10625 asection *s;
ce359b09 10626 const char *sectname;
c906108c
SS
10627 bfd_size_type size;
10628 bfd_vma lma;
10629 int matched = 0;
10630 int mismatched = 0;
4a5e7a5b 10631 int res;
95cf3b38 10632 int read_only = 0;
c906108c
SS
10633
10634 if (!exec_bfd)
8a3fe4f8 10635 error (_("command cannot be used without an exec file"));
c906108c 10636
95cf3b38
DT
10637 if (args != NULL && strcmp (args, "-r") == 0)
10638 {
10639 read_only = 1;
10640 args = NULL;
10641 }
10642
c5aa993b 10643 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
10644 {
10645 if (!(s->flags & SEC_LOAD))
0df8b418 10646 continue; /* Skip non-loadable section. */
c906108c 10647
95cf3b38
DT
10648 if (read_only && (s->flags & SEC_READONLY) == 0)
10649 continue; /* Skip writeable sections */
10650
fd361982 10651 size = bfd_section_size (s);
c906108c 10652 if (size == 0)
0df8b418 10653 continue; /* Skip zero-length section. */
c906108c 10654
fd361982 10655 sectname = bfd_section_name (s);
c906108c 10656 if (args && strcmp (args, sectname) != 0)
0df8b418 10657 continue; /* Not the section selected by user. */
c906108c 10658
0df8b418 10659 matched = 1; /* Do this section. */
c906108c 10660 lma = s->lma;
c906108c 10661
b80406ac
TT
10662 gdb::byte_vector sectdata (size);
10663 bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
c906108c 10664
b80406ac 10665 res = target_verify_memory (sectdata.data (), lma, size);
4a5e7a5b
PA
10666
10667 if (res == -1)
5af949e3 10668 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10669 paddress (target_gdbarch (), lma),
10670 paddress (target_gdbarch (), lma + size));
c906108c 10671
5af949e3 10672 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10673 paddress (target_gdbarch (), lma),
10674 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10675 if (res)
c906108c
SS
10676 printf_filtered ("matched.\n");
10677 else
c5aa993b
JM
10678 {
10679 printf_filtered ("MIS-MATCHED!\n");
10680 mismatched++;
10681 }
c906108c
SS
10682 }
10683 if (mismatched > 0)
936d2992 10684 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10685the loaded file\n"));
c906108c 10686 if (args && !matched)
a3f17187 10687 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10688}
10689
0e7f50da
UW
10690/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10691 into remote target. The number of bytes written to the remote
10692 target is returned, or -1 for error. */
10693
6b8edb51
PA
10694target_xfer_status
10695remote_target::remote_write_qxfer (const char *object_name,
10696 const char *annex, const gdb_byte *writebuf,
10697 ULONGEST offset, LONGEST len,
10698 ULONGEST *xfered_len,
10699 struct packet_config *packet)
0e7f50da
UW
10700{
10701 int i, buf_len;
10702 ULONGEST n;
0e7f50da
UW
10703 struct remote_state *rs = get_remote_state ();
10704 int max_size = get_memory_write_packet_size ();
10705
7cc244de 10706 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10707 return TARGET_XFER_E_IO;
0e7f50da
UW
10708
10709 /* Insert header. */
8d64371b 10710 i = snprintf (rs->buf.data (), max_size,
0e7f50da
UW
10711 "qXfer:%s:write:%s:%s:",
10712 object_name, annex ? annex : "",
10713 phex_nz (offset, sizeof offset));
10714 max_size -= (i + 1);
10715
10716 /* Escape as much data as fits into rs->buf. */
10717 buf_len = remote_escape_output
8d64371b 10718 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size);
0e7f50da 10719
8d64371b
TT
10720 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0
10721 || getpkt_sane (&rs->buf, 0) < 0
0e7f50da 10722 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10723 return TARGET_XFER_E_IO;
0e7f50da 10724
8d64371b 10725 unpack_varlen_hex (rs->buf.data (), &n);
9b409511
YQ
10726
10727 *xfered_len = n;
92ffd475 10728 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
0e7f50da
UW
10729}
10730
0876f84a
DJ
10731/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10732 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10733 number of bytes read is returned, or 0 for EOF, or -1 for error.
10734 The number of bytes read may be less than LEN without indicating an
10735 EOF. PACKET is checked and updated to indicate whether the remote
10736 target supports this object. */
10737
6b8edb51
PA
10738target_xfer_status
10739remote_target::remote_read_qxfer (const char *object_name,
10740 const char *annex,
10741 gdb_byte *readbuf, ULONGEST offset,
10742 LONGEST len,
10743 ULONGEST *xfered_len,
10744 struct packet_config *packet)
0876f84a 10745{
0876f84a 10746 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
10747 LONGEST i, n, packet_len;
10748
7cc244de 10749 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10750 return TARGET_XFER_E_IO;
0876f84a
DJ
10751
10752 /* Check whether we've cached an end-of-object packet that matches
10753 this request. */
8e88304f 10754 if (rs->finished_object)
0876f84a 10755 {
8e88304f
TT
10756 if (strcmp (object_name, rs->finished_object) == 0
10757 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10758 && offset == rs->finished_offset)
9b409511
YQ
10759 return TARGET_XFER_EOF;
10760
0876f84a
DJ
10761
10762 /* Otherwise, we're now reading something different. Discard
10763 the cache. */
8e88304f
TT
10764 xfree (rs->finished_object);
10765 xfree (rs->finished_annex);
10766 rs->finished_object = NULL;
10767 rs->finished_annex = NULL;
0876f84a
DJ
10768 }
10769
10770 /* Request only enough to fit in a single packet. The actual data
10771 may not, since we don't know how much of it will need to be escaped;
10772 the target is free to respond with slightly less data. We subtract
10773 five to account for the response type and the protocol frame. */
768adc05 10774 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
8d64371b
TT
10775 snprintf (rs->buf.data (), get_remote_packet_size () - 4,
10776 "qXfer:%s:read:%s:%s,%s",
0876f84a
DJ
10777 object_name, annex ? annex : "",
10778 phex_nz (offset, sizeof offset),
10779 phex_nz (n, sizeof n));
10780 i = putpkt (rs->buf);
10781 if (i < 0)
2ed4b548 10782 return TARGET_XFER_E_IO;
0876f84a
DJ
10783
10784 rs->buf[0] = '\0';
8d64371b 10785 packet_len = getpkt_sane (&rs->buf, 0);
0876f84a 10786 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10787 return TARGET_XFER_E_IO;
0876f84a
DJ
10788
10789 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
8d64371b 10790 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ());
0876f84a
DJ
10791
10792 /* 'm' means there is (or at least might be) more data after this
10793 batch. That does not make sense unless there's at least one byte
10794 of data in this reply. */
10795 if (rs->buf[0] == 'm' && packet_len == 1)
10796 error (_("Remote qXfer reply contained no data."));
10797
10798 /* Got some data. */
8d64371b 10799 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1,
bc20a4af 10800 packet_len - 1, readbuf, n);
0876f84a
DJ
10801
10802 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
10803 or possibly empty. If we have the final block of a non-empty
10804 object, record this fact to bypass a subsequent partial read. */
10805 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 10806 {
8e88304f
TT
10807 rs->finished_object = xstrdup (object_name);
10808 rs->finished_annex = xstrdup (annex ? annex : "");
10809 rs->finished_offset = offset + i;
0876f84a
DJ
10810 }
10811
9b409511
YQ
10812 if (i == 0)
10813 return TARGET_XFER_EOF;
10814 else
10815 {
10816 *xfered_len = i;
10817 return TARGET_XFER_OK;
10818 }
0876f84a
DJ
10819}
10820
f6ac5f3d
PA
10821enum target_xfer_status
10822remote_target::xfer_partial (enum target_object object,
10823 const char *annex, gdb_byte *readbuf,
10824 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10825 ULONGEST *xfered_len)
c906108c 10826{
82f73884 10827 struct remote_state *rs;
c906108c 10828 int i;
6d820c5c 10829 char *p2;
1e3ff5ad 10830 char query_type;
124e13d9 10831 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 10832
e6e4e701 10833 set_remote_traceframe ();
82f73884
PA
10834 set_general_thread (inferior_ptid);
10835
10836 rs = get_remote_state ();
10837
b2182ed2 10838 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
10839 if (object == TARGET_OBJECT_MEMORY)
10840 {
2d717e4f
DJ
10841 /* If the remote target is connected but not running, we should
10842 pass this request down to a lower stratum (e.g. the executable
10843 file). */
10844 if (!target_has_execution)
9b409511 10845 return TARGET_XFER_EOF;
2d717e4f 10846
21e3b9b9 10847 if (writebuf != NULL)
124e13d9
SM
10848 return remote_write_bytes (offset, writebuf, len, unit_size,
10849 xfered_len);
21e3b9b9 10850 else
6b8edb51 10851 return remote_read_bytes (offset, readbuf, len, unit_size,
124e13d9 10852 xfered_len);
21e3b9b9
DJ
10853 }
10854
4aa995e1
PA
10855 /* Handle extra signal info using qxfer packets. */
10856 if (object == TARGET_OBJECT_SIGNAL_INFO)
10857 {
10858 if (readbuf)
f6ac5f3d 10859 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
9b409511 10860 xfered_len, &remote_protocol_packets
4aa995e1
PA
10861 [PACKET_qXfer_siginfo_read]);
10862 else
f6ac5f3d 10863 return remote_write_qxfer ("siginfo", annex,
9b409511 10864 writebuf, offset, len, xfered_len,
4aa995e1
PA
10865 &remote_protocol_packets
10866 [PACKET_qXfer_siginfo_write]);
10867 }
10868
0fb4aa4b
PA
10869 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10870 {
10871 if (readbuf)
f6ac5f3d 10872 return remote_read_qxfer ("statictrace", annex,
9b409511 10873 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
10874 &remote_protocol_packets
10875 [PACKET_qXfer_statictrace_read]);
10876 else
2ed4b548 10877 return TARGET_XFER_E_IO;
0fb4aa4b
PA
10878 }
10879
a76d924d
DJ
10880 /* Only handle flash writes. */
10881 if (writebuf != NULL)
10882 {
a76d924d
DJ
10883 switch (object)
10884 {
10885 case TARGET_OBJECT_FLASH:
6b8edb51 10886 return remote_flash_write (offset, len, xfered_len,
9b409511 10887 writebuf);
a76d924d
DJ
10888
10889 default:
2ed4b548 10890 return TARGET_XFER_E_IO;
a76d924d
DJ
10891 }
10892 }
4b8a223f 10893
1e3ff5ad
AC
10894 /* Map pre-existing objects onto letters. DO NOT do this for new
10895 objects!!! Instead specify new query packets. */
10896 switch (object)
c906108c 10897 {
1e3ff5ad
AC
10898 case TARGET_OBJECT_AVR:
10899 query_type = 'R';
10900 break;
802188a7
RM
10901
10902 case TARGET_OBJECT_AUXV:
0876f84a 10903 gdb_assert (annex == NULL);
f6ac5f3d 10904 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
9b409511 10905 xfered_len,
0876f84a 10906 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 10907
23181151
DJ
10908 case TARGET_OBJECT_AVAILABLE_FEATURES:
10909 return remote_read_qxfer
f6ac5f3d 10910 ("features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
10911 &remote_protocol_packets[PACKET_qXfer_features]);
10912
cfa9d6d9
DJ
10913 case TARGET_OBJECT_LIBRARIES:
10914 return remote_read_qxfer
f6ac5f3d 10915 ("libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
10916 &remote_protocol_packets[PACKET_qXfer_libraries]);
10917
2268b414
JK
10918 case TARGET_OBJECT_LIBRARIES_SVR4:
10919 return remote_read_qxfer
f6ac5f3d 10920 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
10921 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10922
fd79ecee
DJ
10923 case TARGET_OBJECT_MEMORY_MAP:
10924 gdb_assert (annex == NULL);
f6ac5f3d 10925 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
9b409511 10926 xfered_len,
fd79ecee
DJ
10927 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10928
07e059b5
VP
10929 case TARGET_OBJECT_OSDATA:
10930 /* Should only get here if we're connected. */
5d93a237 10931 gdb_assert (rs->remote_desc);
07e059b5 10932 return remote_read_qxfer
f6ac5f3d 10933 ("osdata", annex, readbuf, offset, len, xfered_len,
07e059b5
VP
10934 &remote_protocol_packets[PACKET_qXfer_osdata]);
10935
dc146f7c
VP
10936 case TARGET_OBJECT_THREADS:
10937 gdb_assert (annex == NULL);
f6ac5f3d 10938 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
9b409511 10939 xfered_len,
dc146f7c
VP
10940 &remote_protocol_packets[PACKET_qXfer_threads]);
10941
b3b9301e
PA
10942 case TARGET_OBJECT_TRACEFRAME_INFO:
10943 gdb_assert (annex == NULL);
10944 return remote_read_qxfer
f6ac5f3d 10945 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 10946 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
10947
10948 case TARGET_OBJECT_FDPIC:
f6ac5f3d 10949 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
9b409511 10950 xfered_len,
78d85199 10951 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
10952
10953 case TARGET_OBJECT_OPENVMS_UIB:
f6ac5f3d 10954 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
9b409511 10955 xfered_len,
169081d0
TG
10956 &remote_protocol_packets[PACKET_qXfer_uib]);
10957
9accd112 10958 case TARGET_OBJECT_BTRACE:
f6ac5f3d 10959 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
9b409511 10960 xfered_len,
9accd112
MM
10961 &remote_protocol_packets[PACKET_qXfer_btrace]);
10962
f4abbc16 10963 case TARGET_OBJECT_BTRACE_CONF:
f6ac5f3d 10964 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
f4abbc16
MM
10965 len, xfered_len,
10966 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10967
c78fa86a 10968 case TARGET_OBJECT_EXEC_FILE:
f6ac5f3d 10969 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
c78fa86a
GB
10970 len, xfered_len,
10971 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10972
1e3ff5ad 10973 default:
2ed4b548 10974 return TARGET_XFER_E_IO;
c906108c
SS
10975 }
10976
0df8b418 10977 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 10978 large enough let the caller deal with it. */
ea9c271d 10979 if (len < get_remote_packet_size ())
2ed4b548 10980 return TARGET_XFER_E_IO;
ea9c271d 10981 len = get_remote_packet_size ();
1e3ff5ad 10982
23860348 10983 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 10984 if (!rs->remote_desc)
8a3fe4f8 10985 error (_("remote query is only available after target open"));
c906108c 10986
1e3ff5ad 10987 gdb_assert (annex != NULL);
4b8a223f 10988 gdb_assert (readbuf != NULL);
c906108c 10989
8d64371b 10990 p2 = rs->buf.data ();
c906108c
SS
10991 *p2++ = 'q';
10992 *p2++ = query_type;
10993
23860348
MS
10994 /* We used one buffer char for the remote protocol q command and
10995 another for the query type. As the remote protocol encapsulation
10996 uses 4 chars plus one extra in case we are debugging
10997 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10998 string. */
c906108c 10999 i = 0;
ea9c271d 11000 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 11001 {
1e3ff5ad
AC
11002 /* Bad caller may have sent forbidden characters. */
11003 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11004 *p2++ = annex[i];
c906108c
SS
11005 i++;
11006 }
1e3ff5ad
AC
11007 *p2 = '\0';
11008 gdb_assert (annex[i] == '\0');
c906108c 11009
6d820c5c 11010 i = putpkt (rs->buf);
c5aa993b 11011 if (i < 0)
2ed4b548 11012 return TARGET_XFER_E_IO;
c906108c 11013
8d64371b
TT
11014 getpkt (&rs->buf, 0);
11015 strcpy ((char *) readbuf, rs->buf.data ());
c906108c 11016
9b409511 11017 *xfered_len = strlen ((char *) readbuf);
92ffd475 11018 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
11019}
11020
09c98b44
DB
11021/* Implementation of to_get_memory_xfer_limit. */
11022
f6ac5f3d
PA
11023ULONGEST
11024remote_target::get_memory_xfer_limit ()
09c98b44
DB
11025{
11026 return get_memory_write_packet_size ();
11027}
11028
f6ac5f3d
PA
11029int
11030remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11031 const gdb_byte *pattern, ULONGEST pattern_len,
11032 CORE_ADDR *found_addrp)
08388c79 11033{
f5656ead 11034 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
11035 struct remote_state *rs = get_remote_state ();
11036 int max_size = get_memory_write_packet_size ();
11037 struct packet_config *packet =
11038 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
11039 /* Number of packet bytes used to encode the pattern;
11040 this could be more than PATTERN_LEN due to escape characters. */
08388c79 11041 int escaped_pattern_len;
0df8b418 11042 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
11043 int used_pattern_len;
11044 int i;
11045 int found;
11046 ULONGEST found_addr;
11047
7cc244de
PA
11048 /* Don't go to the target if we don't have to. This is done before
11049 checking packet_config_support to avoid the possibility that a
11050 success for this edge case means the facility works in
11051 general. */
08388c79
DE
11052 if (pattern_len > search_space_len)
11053 return 0;
11054 if (pattern_len == 0)
11055 {
11056 *found_addrp = start_addr;
11057 return 1;
11058 }
11059
11060 /* If we already know the packet isn't supported, fall back to the simple
11061 way of searching memory. */
11062
4082afcc 11063 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
11064 {
11065 /* Target doesn't provided special support, fall back and use the
11066 standard support (copy memory and do the search here). */
f6ac5f3d 11067 return simple_search_memory (this, start_addr, search_space_len,
08388c79
DE
11068 pattern, pattern_len, found_addrp);
11069 }
11070
28439a30
PA
11071 /* Make sure the remote is pointing at the right process. */
11072 set_general_process ();
11073
08388c79 11074 /* Insert header. */
8d64371b 11075 i = snprintf (rs->buf.data (), max_size,
08388c79 11076 "qSearch:memory:%s;%s;",
5af949e3 11077 phex_nz (start_addr, addr_size),
08388c79
DE
11078 phex_nz (search_space_len, sizeof (search_space_len)));
11079 max_size -= (i + 1);
11080
11081 /* Escape as much data as fits into rs->buf. */
11082 escaped_pattern_len =
8d64371b
TT
11083 remote_escape_output (pattern, pattern_len, 1,
11084 (gdb_byte *) rs->buf.data () + i,
08388c79
DE
11085 &used_pattern_len, max_size);
11086
11087 /* Bail if the pattern is too large. */
11088 if (used_pattern_len != pattern_len)
9b20d036 11089 error (_("Pattern is too large to transmit to remote target."));
08388c79 11090
8d64371b
TT
11091 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0
11092 || getpkt_sane (&rs->buf, 0) < 0
08388c79
DE
11093 || packet_ok (rs->buf, packet) != PACKET_OK)
11094 {
11095 /* The request may not have worked because the command is not
11096 supported. If so, fall back to the simple way. */
7cc244de 11097 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79 11098 {
f6ac5f3d 11099 return simple_search_memory (this, start_addr, search_space_len,
08388c79
DE
11100 pattern, pattern_len, found_addrp);
11101 }
11102 return -1;
11103 }
11104
11105 if (rs->buf[0] == '0')
11106 found = 0;
11107 else if (rs->buf[0] == '1')
11108 {
11109 found = 1;
11110 if (rs->buf[1] != ',')
8d64371b
TT
11111 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
11112 unpack_varlen_hex (&rs->buf[2], &found_addr);
08388c79
DE
11113 *found_addrp = found_addr;
11114 }
11115 else
8d64371b 11116 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ());
08388c79
DE
11117
11118 return found;
11119}
11120
f6ac5f3d
PA
11121void
11122remote_target::rcmd (const char *command, struct ui_file *outbuf)
96baa820 11123{
d01949b6 11124 struct remote_state *rs = get_remote_state ();
8d64371b 11125 char *p = rs->buf.data ();
96baa820 11126
5d93a237 11127 if (!rs->remote_desc)
8a3fe4f8 11128 error (_("remote rcmd is only available after target open"));
96baa820 11129
23860348 11130 /* Send a NULL command across as an empty command. */
7be570e7
JM
11131 if (command == NULL)
11132 command = "";
11133
23860348 11134 /* The query prefix. */
8d64371b
TT
11135 strcpy (rs->buf.data (), "qRcmd,");
11136 p = strchr (rs->buf.data (), '\0');
96baa820 11137
8d64371b 11138 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/)
3e43a32a 11139 > get_remote_packet_size ())
8a3fe4f8 11140 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 11141
23860348 11142 /* Encode the actual command. */
a30bf1f1 11143 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 11144
6d820c5c 11145 if (putpkt (rs->buf) < 0)
8a3fe4f8 11146 error (_("Communication problem with target."));
96baa820
JM
11147
11148 /* get/display the response */
11149 while (1)
11150 {
2e9f7625
DJ
11151 char *buf;
11152
00bf0b85 11153 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 11154 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 11155 rs->buf[0] = '\0';
8d64371b 11156 if (getpkt_sane (&rs->buf, 0) == -1)
5b37825d
PW
11157 {
11158 /* Timeout. Continue to (try to) read responses.
11159 This is better than stopping with an error, assuming the stub
11160 is still executing the (long) monitor command.
11161 If needed, the user can interrupt gdb using C-c, obtaining
11162 an effect similar to stop on timeout. */
11163 continue;
11164 }
8d64371b 11165 buf = rs->buf.data ();
96baa820 11166 if (buf[0] == '\0')
8a3fe4f8 11167 error (_("Target does not support this command."));
96baa820
JM
11168 if (buf[0] == 'O' && buf[1] != 'K')
11169 {
23860348 11170 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
11171 continue;
11172 }
11173 if (strcmp (buf, "OK") == 0)
11174 break;
7be570e7
JM
11175 if (strlen (buf) == 3 && buf[0] == 'E'
11176 && isdigit (buf[1]) && isdigit (buf[2]))
11177 {
8a3fe4f8 11178 error (_("Protocol error with Rcmd"));
7be570e7 11179 }
96baa820
JM
11180 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11181 {
11182 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 11183
96baa820
JM
11184 fputc_unfiltered (c, outbuf);
11185 }
11186 break;
11187 }
11188}
11189
f6ac5f3d
PA
11190std::vector<mem_region>
11191remote_target::memory_map ()
fd79ecee 11192{
a664f67e 11193 std::vector<mem_region> result;
9018be22 11194 gdb::optional<gdb::char_vector> text
8b88a78e 11195 = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
fd79ecee
DJ
11196
11197 if (text)
9018be22 11198 result = parse_memory_map (text->data ());
fd79ecee
DJ
11199
11200 return result;
11201}
11202
c906108c 11203static void
ac88e2de 11204packet_command (const char *args, int from_tty)
c906108c 11205{
6b8edb51 11206 remote_target *remote = get_current_remote_target ();
c906108c 11207
6b8edb51 11208 if (remote == nullptr)
8a3fe4f8 11209 error (_("command can only be used with remote target"));
c906108c 11210
6b8edb51
PA
11211 remote->packet_command (args, from_tty);
11212}
11213
11214void
11215remote_target::packet_command (const char *args, int from_tty)
11216{
c5aa993b 11217 if (!args)
8a3fe4f8 11218 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
11219
11220 puts_filtered ("sending: ");
11221 print_packet (args);
11222 puts_filtered ("\n");
11223 putpkt (args);
11224
6b8edb51
PA
11225 remote_state *rs = get_remote_state ();
11226
8d64371b 11227 getpkt (&rs->buf, 0);
c906108c 11228 puts_filtered ("received: ");
8d64371b 11229 print_packet (rs->buf.data ());
c906108c
SS
11230 puts_filtered ("\n");
11231}
11232
11233#if 0
23860348 11234/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 11235
a14ed312 11236static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 11237
a14ed312 11238static void threadset_test_cmd (char *cmd, int tty);
c906108c 11239
a14ed312 11240static void threadalive_test (char *cmd, int tty);
c906108c 11241
a14ed312 11242static void threadlist_test_cmd (char *cmd, int tty);
c906108c 11243
23860348 11244int get_and_display_threadinfo (threadref *ref);
c906108c 11245
a14ed312 11246static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 11247
23860348 11248static int thread_display_step (threadref *ref, void *context);
c906108c 11249
a14ed312 11250static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 11251
a14ed312 11252static void init_remote_threadtests (void);
c906108c 11253
23860348 11254#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
11255
11256static void
0b39b52e 11257threadset_test_cmd (const char *cmd, int tty)
c906108c
SS
11258{
11259 int sample_thread = SAMPLE_THREAD;
11260
a3f17187 11261 printf_filtered (_("Remote threadset test\n"));
79d7f229 11262 set_general_thread (sample_thread);
c906108c
SS
11263}
11264
11265
11266static void
0b39b52e 11267threadalive_test (const char *cmd, int tty)
c906108c
SS
11268{
11269 int sample_thread = SAMPLE_THREAD;
e99b03dc 11270 int pid = inferior_ptid.pid ();
fd79271b 11271 ptid_t ptid = ptid_t (pid, sample_thread, 0);
c906108c 11272
79d7f229 11273 if (remote_thread_alive (ptid))
c906108c
SS
11274 printf_filtered ("PASS: Thread alive test\n");
11275 else
11276 printf_filtered ("FAIL: Thread alive test\n");
11277}
11278
23860348 11279void output_threadid (char *title, threadref *ref);
c906108c
SS
11280
11281void
fba45db2 11282output_threadid (char *title, threadref *ref)
c906108c
SS
11283{
11284 char hexid[20];
11285
405feb71 11286 pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */
c906108c
SS
11287 hexid[16] = 0;
11288 printf_filtered ("%s %s\n", title, (&hexid[0]));
11289}
11290
11291static void
0b39b52e 11292threadlist_test_cmd (const char *cmd, int tty)
c906108c
SS
11293{
11294 int startflag = 1;
11295 threadref nextthread;
11296 int done, result_count;
11297 threadref threadlist[3];
11298
11299 printf_filtered ("Remote Threadlist test\n");
11300 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11301 &result_count, &threadlist[0]))
11302 printf_filtered ("FAIL: threadlist test\n");
11303 else
11304 {
11305 threadref *scan = threadlist;
11306 threadref *limit = scan + result_count;
11307
11308 while (scan < limit)
11309 output_threadid (" thread ", scan++);
11310 }
11311}
11312
11313void
fba45db2 11314display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
11315{
11316 output_threadid ("Threadid: ", &info->threadid);
11317 printf_filtered ("Name: %s\n ", info->shortname);
11318 printf_filtered ("State: %s\n", info->display);
11319 printf_filtered ("other: %s\n\n", info->more_display);
11320}
11321
11322int
fba45db2 11323get_and_display_threadinfo (threadref *ref)
c906108c
SS
11324{
11325 int result;
11326 int set;
11327 struct gdb_ext_thread_info threadinfo;
11328
11329 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11330 | TAG_MOREDISPLAY | TAG_DISPLAY;
11331 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11332 display_thread_info (&threadinfo);
11333 return result;
11334}
11335
11336static void
0b39b52e 11337threadinfo_test_cmd (const char *cmd, int tty)
c906108c
SS
11338{
11339 int athread = SAMPLE_THREAD;
11340 threadref thread;
11341 int set;
11342
11343 int_to_threadref (&thread, athread);
11344 printf_filtered ("Remote Threadinfo test\n");
11345 if (!get_and_display_threadinfo (&thread))
11346 printf_filtered ("FAIL cannot get thread info\n");
11347}
11348
11349static int
fba45db2 11350thread_display_step (threadref *ref, void *context)
c906108c
SS
11351{
11352 /* output_threadid(" threadstep ",ref); *//* simple test */
11353 return get_and_display_threadinfo (ref);
11354}
11355
11356static void
0b39b52e 11357threadlist_update_test_cmd (const char *cmd, int tty)
c906108c
SS
11358{
11359 printf_filtered ("Remote Threadlist update test\n");
11360 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11361}
11362
11363static void
11364init_remote_threadtests (void)
11365{
3e43a32a
MS
11366 add_com ("tlist", class_obscure, threadlist_test_cmd,
11367 _("Fetch and print the remote list of "
590042fc 11368 "thread identifiers, one pkt only."));
c906108c 11369 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
590042fc 11370 _("Fetch and display info about one thread."));
c906108c 11371 add_com ("tset", class_obscure, threadset_test_cmd,
590042fc 11372 _("Test setting to a different thread."));
c906108c 11373 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
590042fc 11374 _("Iterate through updating all remote thread info."));
c906108c 11375 add_com ("talive", class_obscure, threadalive_test,
590042fc 11376 _("Remote thread alive test."));
c906108c
SS
11377}
11378
11379#endif /* 0 */
11380
a068643d 11381/* Convert a thread ID to a string. */
f3fb8c85 11382
a068643d 11383std::string
f6ac5f3d 11384remote_target::pid_to_str (ptid_t ptid)
f3fb8c85 11385{
82f73884 11386 struct remote_state *rs = get_remote_state ();
f3fb8c85 11387
d7e15655 11388 if (ptid == null_ptid)
7cee1e54 11389 return normal_pid_to_str (ptid);
0e998d96 11390 else if (ptid.is_pid ())
ecd0ada5
PA
11391 {
11392 /* Printing an inferior target id. */
11393
11394 /* When multi-process extensions are off, there's no way in the
11395 remote protocol to know the remote process id, if there's any
11396 at all. There's one exception --- when we're connected with
11397 target extended-remote, and we manually attached to a process
11398 with "attach PID". We don't record anywhere a flag that
11399 allows us to distinguish that case from the case of
11400 connecting with extended-remote and the stub already being
11401 attached to a process, and reporting yes to qAttached, hence
11402 no smart special casing here. */
11403 if (!remote_multi_process_p (rs))
a068643d 11404 return "Remote target";
ecd0ada5
PA
11405
11406 return normal_pid_to_str (ptid);
82f73884 11407 }
ecd0ada5 11408 else
79d7f229 11409 {
d7e15655 11410 if (magic_null_ptid == ptid)
a068643d 11411 return "Thread <main>";
8020350c 11412 else if (remote_multi_process_p (rs))
e38504b3 11413 if (ptid.lwp () == 0)
de0d863e
DB
11414 return normal_pid_to_str (ptid);
11415 else
a068643d
TT
11416 return string_printf ("Thread %d.%ld",
11417 ptid.pid (), ptid.lwp ());
ecd0ada5 11418 else
a068643d 11419 return string_printf ("Thread %ld", ptid.lwp ());
79d7f229 11420 }
f3fb8c85
MS
11421}
11422
38691318
KB
11423/* Get the address of the thread local variable in OBJFILE which is
11424 stored at OFFSET within the thread local storage for thread PTID. */
11425
f6ac5f3d
PA
11426CORE_ADDR
11427remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11428 CORE_ADDR offset)
38691318 11429{
4082afcc 11430 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
11431 {
11432 struct remote_state *rs = get_remote_state ();
8d64371b
TT
11433 char *p = rs->buf.data ();
11434 char *endp = p + get_remote_packet_size ();
571dd617 11435 enum packet_result result;
38691318
KB
11436
11437 strcpy (p, "qGetTLSAddr:");
11438 p += strlen (p);
82f73884 11439 p = write_ptid (p, endp, ptid);
38691318
KB
11440 *p++ = ',';
11441 p += hexnumstr (p, offset);
11442 *p++ = ',';
11443 p += hexnumstr (p, lm);
11444 *p++ = '\0';
11445
6d820c5c 11446 putpkt (rs->buf);
8d64371b 11447 getpkt (&rs->buf, 0);
3e43a32a
MS
11448 result = packet_ok (rs->buf,
11449 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11450 if (result == PACKET_OK)
38691318 11451 {
b926417a 11452 ULONGEST addr;
38691318 11453
8d64371b 11454 unpack_varlen_hex (rs->buf.data (), &addr);
b926417a 11455 return addr;
38691318 11456 }
571dd617 11457 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11458 throw_error (TLS_GENERIC_ERROR,
11459 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11460 else
109c3e39
AC
11461 throw_error (TLS_GENERIC_ERROR,
11462 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11463 }
11464 else
109c3e39
AC
11465 throw_error (TLS_GENERIC_ERROR,
11466 _("TLS not supported or disabled on this target"));
38691318
KB
11467 /* Not reached. */
11468 return 0;
11469}
11470
711e434b
PM
11471/* Provide thread local base, i.e. Thread Information Block address.
11472 Returns 1 if ptid is found and thread_local_base is non zero. */
11473
57810aa7 11474bool
f6ac5f3d 11475remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
711e434b 11476{
4082afcc 11477 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11478 {
11479 struct remote_state *rs = get_remote_state ();
8d64371b
TT
11480 char *p = rs->buf.data ();
11481 char *endp = p + get_remote_packet_size ();
711e434b
PM
11482 enum packet_result result;
11483
11484 strcpy (p, "qGetTIBAddr:");
11485 p += strlen (p);
11486 p = write_ptid (p, endp, ptid);
11487 *p++ = '\0';
11488
11489 putpkt (rs->buf);
8d64371b 11490 getpkt (&rs->buf, 0);
711e434b
PM
11491 result = packet_ok (rs->buf,
11492 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11493 if (result == PACKET_OK)
11494 {
b926417a 11495 ULONGEST val;
8d64371b 11496 unpack_varlen_hex (rs->buf.data (), &val);
711e434b 11497 if (addr)
b926417a 11498 *addr = (CORE_ADDR) val;
57810aa7 11499 return true;
711e434b
PM
11500 }
11501 else if (result == PACKET_UNKNOWN)
11502 error (_("Remote target doesn't support qGetTIBAddr packet"));
11503 else
11504 error (_("Remote target failed to process qGetTIBAddr request"));
11505 }
11506 else
11507 error (_("qGetTIBAddr not supported or disabled on this target"));
11508 /* Not reached. */
57810aa7 11509 return false;
711e434b
PM
11510}
11511
29709017
DJ
11512/* Support for inferring a target description based on the current
11513 architecture and the size of a 'g' packet. While the 'g' packet
11514 can have any size (since optional registers can be left off the
11515 end), some sizes are easily recognizable given knowledge of the
11516 approximate architecture. */
11517
11518struct remote_g_packet_guess
11519{
eefce37f
TT
11520 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
11521 : bytes (bytes_),
11522 tdesc (tdesc_)
11523 {
11524 }
11525
29709017
DJ
11526 int bytes;
11527 const struct target_desc *tdesc;
11528};
29709017 11529
eefce37f 11530struct remote_g_packet_data : public allocate_on_obstack
29709017 11531{
eefce37f 11532 std::vector<remote_g_packet_guess> guesses;
29709017
DJ
11533};
11534
11535static struct gdbarch_data *remote_g_packet_data_handle;
11536
11537static void *
11538remote_g_packet_data_init (struct obstack *obstack)
11539{
eefce37f 11540 return new (obstack) remote_g_packet_data;
29709017
DJ
11541}
11542
11543void
11544register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11545 const struct target_desc *tdesc)
11546{
11547 struct remote_g_packet_data *data
19ba03f4
SM
11548 = ((struct remote_g_packet_data *)
11549 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11550
11551 gdb_assert (tdesc != NULL);
11552
eefce37f
TT
11553 for (const remote_g_packet_guess &guess : data->guesses)
11554 if (guess.bytes == bytes)
29709017 11555 internal_error (__FILE__, __LINE__,
9b20d036 11556 _("Duplicate g packet description added for size %d"),
29709017
DJ
11557 bytes);
11558
eefce37f 11559 data->guesses.emplace_back (bytes, tdesc);
29709017
DJ
11560}
11561
eefce37f
TT
11562/* Return true if remote_read_description would do anything on this target
11563 and architecture, false otherwise. */
d962ef82 11564
eefce37f 11565static bool
d962ef82
DJ
11566remote_read_description_p (struct target_ops *target)
11567{
11568 struct remote_g_packet_data *data
19ba03f4
SM
11569 = ((struct remote_g_packet_data *)
11570 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82 11571
eefce37f 11572 return !data->guesses.empty ();
d962ef82
DJ
11573}
11574
f6ac5f3d
PA
11575const struct target_desc *
11576remote_target::read_description ()
29709017
DJ
11577{
11578 struct remote_g_packet_data *data
19ba03f4
SM
11579 = ((struct remote_g_packet_data *)
11580 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11581
d962ef82
DJ
11582 /* Do not try this during initial connection, when we do not know
11583 whether there is a running but stopped thread. */
d7e15655 11584 if (!target_has_execution || inferior_ptid == null_ptid)
b6a8c27b 11585 return beneath ()->read_description ();
d962ef82 11586
eefce37f 11587 if (!data->guesses.empty ())
29709017 11588 {
29709017
DJ
11589 int bytes = send_g_packet ();
11590
eefce37f
TT
11591 for (const remote_g_packet_guess &guess : data->guesses)
11592 if (guess.bytes == bytes)
11593 return guess.tdesc;
29709017
DJ
11594
11595 /* We discard the g packet. A minor optimization would be to
11596 hold on to it, and fill the register cache once we have selected
11597 an architecture, but it's too tricky to do safely. */
11598 }
11599
b6a8c27b 11600 return beneath ()->read_description ();
29709017
DJ
11601}
11602
a6b151f1
DJ
11603/* Remote file transfer support. This is host-initiated I/O, not
11604 target-initiated; for target-initiated, see remote-fileio.c. */
11605
11606/* If *LEFT is at least the length of STRING, copy STRING to
11607 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11608 decrease *LEFT. Otherwise raise an error. */
11609
11610static void
a121b7c1 11611remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11612{
11613 int len = strlen (string);
11614
11615 if (len > *left)
11616 error (_("Packet too long for target."));
11617
11618 memcpy (*buffer, string, len);
11619 *buffer += len;
11620 *left -= len;
11621
11622 /* NUL-terminate the buffer as a convenience, if there is
11623 room. */
11624 if (*left)
11625 **buffer = '\0';
11626}
11627
11628/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11629 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11630 decrease *LEFT. Otherwise raise an error. */
11631
11632static void
11633remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11634 int len)
11635{
11636 if (2 * len > *left)
11637 error (_("Packet too long for target."));
11638
11639 bin2hex (bytes, *buffer, len);
11640 *buffer += 2 * len;
11641 *left -= 2 * len;
11642
11643 /* NUL-terminate the buffer as a convenience, if there is
11644 room. */
11645 if (*left)
11646 **buffer = '\0';
11647}
11648
11649/* If *LEFT is large enough, convert VALUE to hex and add it to
11650 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11651 decrease *LEFT. Otherwise raise an error. */
11652
11653static void
11654remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11655{
11656 int len = hexnumlen (value);
11657
11658 if (len > *left)
11659 error (_("Packet too long for target."));
11660
11661 hexnumstr (*buffer, value);
11662 *buffer += len;
11663 *left -= len;
11664
11665 /* NUL-terminate the buffer as a convenience, if there is
11666 room. */
11667 if (*left)
11668 **buffer = '\0';
11669}
11670
11671/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11672 value, *REMOTE_ERRNO to the remote error number or zero if none
11673 was included, and *ATTACHMENT to point to the start of the annex
11674 if any. The length of the packet isn't needed here; there may
11675 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11676
11677 Return 0 if the packet could be parsed, -1 if it could not. If
11678 -1 is returned, the other variables may not be initialized. */
11679
11680static int
11681remote_hostio_parse_result (char *buffer, int *retcode,
11682 int *remote_errno, char **attachment)
11683{
11684 char *p, *p2;
11685
11686 *remote_errno = 0;
11687 *attachment = NULL;
11688
11689 if (buffer[0] != 'F')
11690 return -1;
11691
11692 errno = 0;
11693 *retcode = strtol (&buffer[1], &p, 16);
11694 if (errno != 0 || p == &buffer[1])
11695 return -1;
11696
11697 /* Check for ",errno". */
11698 if (*p == ',')
11699 {
11700 errno = 0;
11701 *remote_errno = strtol (p + 1, &p2, 16);
11702 if (errno != 0 || p + 1 == p2)
11703 return -1;
11704 p = p2;
11705 }
11706
11707 /* Check for ";attachment". If there is no attachment, the
11708 packet should end here. */
11709 if (*p == ';')
11710 {
11711 *attachment = p + 1;
11712 return 0;
11713 }
11714 else if (*p == '\0')
11715 return 0;
11716 else
11717 return -1;
11718}
11719
11720/* Send a prepared I/O packet to the target and read its response.
11721 The prepared packet is in the global RS->BUF before this function
11722 is called, and the answer is there when we return.
11723
11724 COMMAND_BYTES is the length of the request to send, which may include
11725 binary data. WHICH_PACKET is the packet configuration to check
11726 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11727 is set to the error number and -1 is returned. Otherwise the value
11728 returned by the function is returned.
11729
11730 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11731 attachment is expected; an error will be reported if there's a
11732 mismatch. If one is found, *ATTACHMENT will be set to point into
11733 the packet buffer and *ATTACHMENT_LEN will be set to the
11734 attachment's length. */
11735
6b8edb51
PA
11736int
11737remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
11738 int *remote_errno, char **attachment,
11739 int *attachment_len)
a6b151f1
DJ
11740{
11741 struct remote_state *rs = get_remote_state ();
11742 int ret, bytes_read;
11743 char *attachment_tmp;
11744
20db9c52 11745 if (packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
11746 {
11747 *remote_errno = FILEIO_ENOSYS;
11748 return -1;
11749 }
11750
8d64371b
TT
11751 putpkt_binary (rs->buf.data (), command_bytes);
11752 bytes_read = getpkt_sane (&rs->buf, 0);
a6b151f1
DJ
11753
11754 /* If it timed out, something is wrong. Don't try to parse the
11755 buffer. */
11756 if (bytes_read < 0)
11757 {
11758 *remote_errno = FILEIO_EINVAL;
11759 return -1;
11760 }
11761
11762 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11763 {
11764 case PACKET_ERROR:
11765 *remote_errno = FILEIO_EINVAL;
11766 return -1;
11767 case PACKET_UNKNOWN:
11768 *remote_errno = FILEIO_ENOSYS;
11769 return -1;
11770 case PACKET_OK:
11771 break;
11772 }
11773
8d64371b 11774 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno,
a6b151f1
DJ
11775 &attachment_tmp))
11776 {
11777 *remote_errno = FILEIO_EINVAL;
11778 return -1;
11779 }
11780
11781 /* Make sure we saw an attachment if and only if we expected one. */
11782 if ((attachment_tmp == NULL && attachment != NULL)
11783 || (attachment_tmp != NULL && attachment == NULL))
11784 {
11785 *remote_errno = FILEIO_EINVAL;
11786 return -1;
11787 }
11788
11789 /* If an attachment was found, it must point into the packet buffer;
11790 work out how many bytes there were. */
11791 if (attachment_tmp != NULL)
11792 {
11793 *attachment = attachment_tmp;
8d64371b 11794 *attachment_len = bytes_read - (*attachment - rs->buf.data ());
a6b151f1
DJ
11795 }
11796
11797 return ret;
11798}
11799
dd194f6b 11800/* See declaration.h. */
80152258 11801
dd194f6b
PA
11802void
11803readahead_cache::invalidate ()
80152258 11804{
dd194f6b 11805 this->fd = -1;
80152258
PA
11806}
11807
dd194f6b 11808/* See declaration.h. */
80152258 11809
dd194f6b
PA
11810void
11811readahead_cache::invalidate_fd (int fd)
80152258 11812{
dd194f6b
PA
11813 if (this->fd == fd)
11814 this->fd = -1;
80152258
PA
11815}
11816
15a201c8
GB
11817/* Set the filesystem remote_hostio functions that take FILENAME
11818 arguments will use. Return 0 on success, or -1 if an error
11819 occurs (and set *REMOTE_ERRNO). */
11820
6b8edb51
PA
11821int
11822remote_target::remote_hostio_set_filesystem (struct inferior *inf,
11823 int *remote_errno)
15a201c8
GB
11824{
11825 struct remote_state *rs = get_remote_state ();
11826 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
8d64371b 11827 char *p = rs->buf.data ();
15a201c8
GB
11828 int left = get_remote_packet_size () - 1;
11829 char arg[9];
11830 int ret;
11831
11832 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11833 return 0;
11834
11835 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11836 return 0;
11837
11838 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11839
11840 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11841 remote_buffer_add_string (&p, &left, arg);
11842
8d64371b 11843 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs,
15a201c8
GB
11844 remote_errno, NULL, NULL);
11845
11846 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11847 return 0;
11848
11849 if (ret == 0)
11850 rs->fs_pid = required_pid;
11851
11852 return ret;
11853}
11854
12e2a5fd 11855/* Implementation of to_fileio_open. */
a6b151f1 11856
6b8edb51
PA
11857int
11858remote_target::remote_hostio_open (inferior *inf, const char *filename,
11859 int flags, int mode, int warn_if_slow,
11860 int *remote_errno)
a6b151f1
DJ
11861{
11862 struct remote_state *rs = get_remote_state ();
8d64371b 11863 char *p = rs->buf.data ();
a6b151f1
DJ
11864 int left = get_remote_packet_size () - 1;
11865
4313b8c0
GB
11866 if (warn_if_slow)
11867 {
11868 static int warning_issued = 0;
11869
11870 printf_unfiltered (_("Reading %s from remote target...\n"),
11871 filename);
11872
11873 if (!warning_issued)
11874 {
11875 warning (_("File transfers from remote targets can be slow."
11876 " Use \"set sysroot\" to access files locally"
11877 " instead."));
11878 warning_issued = 1;
11879 }
11880 }
11881
15a201c8
GB
11882 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11883 return -1;
11884
a6b151f1
DJ
11885 remote_buffer_add_string (&p, &left, "vFile:open:");
11886
11887 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11888 strlen (filename));
11889 remote_buffer_add_string (&p, &left, ",");
11890
11891 remote_buffer_add_int (&p, &left, flags);
11892 remote_buffer_add_string (&p, &left, ",");
11893
11894 remote_buffer_add_int (&p, &left, mode);
11895
8d64371b 11896 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open,
a6b151f1
DJ
11897 remote_errno, NULL, NULL);
11898}
11899
f6ac5f3d
PA
11900int
11901remote_target::fileio_open (struct inferior *inf, const char *filename,
11902 int flags, int mode, int warn_if_slow,
11903 int *remote_errno)
11904{
6b8edb51 11905 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
f6ac5f3d
PA
11906 remote_errno);
11907}
11908
12e2a5fd 11909/* Implementation of to_fileio_pwrite. */
a6b151f1 11910
6b8edb51
PA
11911int
11912remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
11913 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11914{
11915 struct remote_state *rs = get_remote_state ();
8d64371b 11916 char *p = rs->buf.data ();
a6b151f1
DJ
11917 int left = get_remote_packet_size ();
11918 int out_len;
11919
dd194f6b 11920 rs->readahead_cache.invalidate_fd (fd);
80152258 11921
a6b151f1
DJ
11922 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11923
11924 remote_buffer_add_int (&p, &left, fd);
11925 remote_buffer_add_string (&p, &left, ",");
11926
11927 remote_buffer_add_int (&p, &left, offset);
11928 remote_buffer_add_string (&p, &left, ",");
11929
124e13d9 11930 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
8d64371b
TT
11931 (get_remote_packet_size ()
11932 - (p - rs->buf.data ())));
a6b151f1 11933
8d64371b 11934 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite,
a6b151f1
DJ
11935 remote_errno, NULL, NULL);
11936}
11937
f6ac5f3d
PA
11938int
11939remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
11940 ULONGEST offset, int *remote_errno)
11941{
6b8edb51 11942 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
f6ac5f3d
PA
11943}
11944
80152258
PA
11945/* Helper for the implementation of to_fileio_pread. Read the file
11946 from the remote side with vFile:pread. */
a6b151f1 11947
6b8edb51
PA
11948int
11949remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
11950 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11951{
11952 struct remote_state *rs = get_remote_state ();
8d64371b 11953 char *p = rs->buf.data ();
a6b151f1
DJ
11954 char *attachment;
11955 int left = get_remote_packet_size ();
11956 int ret, attachment_len;
11957 int read_len;
11958
11959 remote_buffer_add_string (&p, &left, "vFile:pread:");
11960
11961 remote_buffer_add_int (&p, &left, fd);
11962 remote_buffer_add_string (&p, &left, ",");
11963
11964 remote_buffer_add_int (&p, &left, len);
11965 remote_buffer_add_string (&p, &left, ",");
11966
11967 remote_buffer_add_int (&p, &left, offset);
11968
8d64371b 11969 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread,
a6b151f1
DJ
11970 remote_errno, &attachment,
11971 &attachment_len);
11972
11973 if (ret < 0)
11974 return ret;
11975
bc20a4af 11976 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
11977 read_buf, len);
11978 if (read_len != ret)
11979 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11980
11981 return ret;
11982}
11983
dd194f6b 11984/* See declaration.h. */
80152258 11985
dd194f6b
PA
11986int
11987readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
11988 ULONGEST offset)
80152258 11989{
dd194f6b
PA
11990 if (this->fd == fd
11991 && this->offset <= offset
11992 && offset < this->offset + this->bufsize)
80152258 11993 {
dd194f6b 11994 ULONGEST max = this->offset + this->bufsize;
80152258
PA
11995
11996 if (offset + len > max)
11997 len = max - offset;
11998
dd194f6b 11999 memcpy (read_buf, this->buf + offset - this->offset, len);
80152258
PA
12000 return len;
12001 }
12002
12003 return 0;
12004}
12005
12006/* Implementation of to_fileio_pread. */
12007
6b8edb51
PA
12008int
12009remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12010 ULONGEST offset, int *remote_errno)
80152258
PA
12011{
12012 int ret;
12013 struct remote_state *rs = get_remote_state ();
dd194f6b 12014 readahead_cache *cache = &rs->readahead_cache;
80152258 12015
dd194f6b 12016 ret = cache->pread (fd, read_buf, len, offset);
80152258
PA
12017 if (ret > 0)
12018 {
12019 cache->hit_count++;
12020
12021 if (remote_debug)
12022 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
12023 pulongest (cache->hit_count));
12024 return ret;
12025 }
12026
12027 cache->miss_count++;
12028 if (remote_debug)
12029 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
12030 pulongest (cache->miss_count));
12031
12032 cache->fd = fd;
12033 cache->offset = offset;
12034 cache->bufsize = get_remote_packet_size ();
224c3ddb 12035 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258 12036
6b8edb51 12037 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
80152258
PA
12038 cache->offset, remote_errno);
12039 if (ret <= 0)
12040 {
dd194f6b 12041 cache->invalidate_fd (fd);
80152258
PA
12042 return ret;
12043 }
12044
12045 cache->bufsize = ret;
dd194f6b 12046 return cache->pread (fd, read_buf, len, offset);
80152258
PA
12047}
12048
f6ac5f3d
PA
12049int
12050remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12051 ULONGEST offset, int *remote_errno)
12052{
6b8edb51 12053 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
f6ac5f3d
PA
12054}
12055
12e2a5fd 12056/* Implementation of to_fileio_close. */
a6b151f1 12057
6b8edb51
PA
12058int
12059remote_target::remote_hostio_close (int fd, int *remote_errno)
a6b151f1
DJ
12060{
12061 struct remote_state *rs = get_remote_state ();
8d64371b 12062 char *p = rs->buf.data ();
a6b151f1
DJ
12063 int left = get_remote_packet_size () - 1;
12064
dd194f6b 12065 rs->readahead_cache.invalidate_fd (fd);
80152258 12066
a6b151f1
DJ
12067 remote_buffer_add_string (&p, &left, "vFile:close:");
12068
12069 remote_buffer_add_int (&p, &left, fd);
12070
8d64371b 12071 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close,
a6b151f1
DJ
12072 remote_errno, NULL, NULL);
12073}
12074
f6ac5f3d
PA
12075int
12076remote_target::fileio_close (int fd, int *remote_errno)
12077{
6b8edb51 12078 return remote_hostio_close (fd, remote_errno);
f6ac5f3d
PA
12079}
12080
12e2a5fd 12081/* Implementation of to_fileio_unlink. */
a6b151f1 12082
6b8edb51
PA
12083int
12084remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12085 int *remote_errno)
a6b151f1
DJ
12086{
12087 struct remote_state *rs = get_remote_state ();
8d64371b 12088 char *p = rs->buf.data ();
a6b151f1
DJ
12089 int left = get_remote_packet_size () - 1;
12090
15a201c8
GB
12091 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12092 return -1;
12093
a6b151f1
DJ
12094 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12095
12096 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12097 strlen (filename));
12098
8d64371b 12099 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink,
a6b151f1
DJ
12100 remote_errno, NULL, NULL);
12101}
12102
f6ac5f3d
PA
12103int
12104remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12105 int *remote_errno)
12106{
6b8edb51 12107 return remote_hostio_unlink (inf, filename, remote_errno);
f6ac5f3d
PA
12108}
12109
12e2a5fd 12110/* Implementation of to_fileio_readlink. */
b9e7b9c3 12111
f6ac5f3d
PA
12112gdb::optional<std::string>
12113remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12114 int *remote_errno)
b9e7b9c3
UW
12115{
12116 struct remote_state *rs = get_remote_state ();
8d64371b 12117 char *p = rs->buf.data ();
b9e7b9c3
UW
12118 char *attachment;
12119 int left = get_remote_packet_size ();
12120 int len, attachment_len;
12121 int read_len;
b9e7b9c3 12122
15a201c8 12123 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
e0d3522b 12124 return {};
15a201c8 12125
b9e7b9c3
UW
12126 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12127
12128 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12129 strlen (filename));
12130
8d64371b 12131 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink,
b9e7b9c3
UW
12132 remote_errno, &attachment,
12133 &attachment_len);
12134
12135 if (len < 0)
e0d3522b 12136 return {};
b9e7b9c3 12137
e0d3522b 12138 std::string ret (len, '\0');
b9e7b9c3 12139
bc20a4af 12140 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
e0d3522b 12141 (gdb_byte *) &ret[0], len);
b9e7b9c3
UW
12142 if (read_len != len)
12143 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12144
b9e7b9c3
UW
12145 return ret;
12146}
12147
12e2a5fd 12148/* Implementation of to_fileio_fstat. */
0a93529c 12149
f6ac5f3d
PA
12150int
12151remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
0a93529c
GB
12152{
12153 struct remote_state *rs = get_remote_state ();
8d64371b 12154 char *p = rs->buf.data ();
0a93529c
GB
12155 int left = get_remote_packet_size ();
12156 int attachment_len, ret;
12157 char *attachment;
12158 struct fio_stat fst;
12159 int read_len;
12160
464b0089
GB
12161 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12162
12163 remote_buffer_add_int (&p, &left, fd);
12164
8d64371b 12165 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat,
464b0089
GB
12166 remote_errno, &attachment,
12167 &attachment_len);
12168 if (ret < 0)
0a93529c 12169 {
464b0089
GB
12170 if (*remote_errno != FILEIO_ENOSYS)
12171 return ret;
12172
0a93529c
GB
12173 /* Strictly we should return -1, ENOSYS here, but when
12174 "set sysroot remote:" was implemented in August 2008
12175 BFD's need for a stat function was sidestepped with
12176 this hack. This was not remedied until March 2015
12177 so we retain the previous behavior to avoid breaking
12178 compatibility.
12179
12180 Note that the memset is a March 2015 addition; older
12181 GDBs set st_size *and nothing else* so the structure
12182 would have garbage in all other fields. This might
12183 break something but retaining the previous behavior
12184 here would be just too wrong. */
12185
12186 memset (st, 0, sizeof (struct stat));
12187 st->st_size = INT_MAX;
12188 return 0;
12189 }
12190
0a93529c
GB
12191 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12192 (gdb_byte *) &fst, sizeof (fst));
12193
12194 if (read_len != ret)
12195 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12196
12197 if (read_len != sizeof (fst))
12198 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12199 read_len, (int) sizeof (fst));
12200
12201 remote_fileio_to_host_stat (&fst, st);
12202
12203 return 0;
12204}
12205
12e2a5fd 12206/* Implementation of to_filesystem_is_local. */
e3dd7556 12207
57810aa7 12208bool
f6ac5f3d 12209remote_target::filesystem_is_local ()
e3dd7556
GB
12210{
12211 /* Valgrind GDB presents itself as a remote target but works
12212 on the local filesystem: it does not implement remote get
12213 and users are not expected to set a sysroot. To handle
12214 this case we treat the remote filesystem as local if the
12215 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12216 does not support vFile:open. */
a3be80c3 12217 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
12218 {
12219 enum packet_support ps = packet_support (PACKET_vFile_open);
12220
12221 if (ps == PACKET_SUPPORT_UNKNOWN)
12222 {
12223 int fd, remote_errno;
12224
12225 /* Try opening a file to probe support. The supplied
12226 filename is irrelevant, we only care about whether
12227 the stub recognizes the packet or not. */
6b8edb51 12228 fd = remote_hostio_open (NULL, "just probing",
4313b8c0 12229 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
12230 &remote_errno);
12231
12232 if (fd >= 0)
6b8edb51 12233 remote_hostio_close (fd, &remote_errno);
e3dd7556
GB
12234
12235 ps = packet_support (PACKET_vFile_open);
12236 }
12237
12238 if (ps == PACKET_DISABLE)
12239 {
12240 static int warning_issued = 0;
12241
12242 if (!warning_issued)
12243 {
12244 warning (_("remote target does not support file"
12245 " transfer, attempting to access files"
12246 " from local filesystem."));
12247 warning_issued = 1;
12248 }
12249
57810aa7 12250 return true;
e3dd7556
GB
12251 }
12252 }
12253
57810aa7 12254 return false;
e3dd7556
GB
12255}
12256
a6b151f1
DJ
12257static int
12258remote_fileio_errno_to_host (int errnum)
12259{
12260 switch (errnum)
12261 {
12262 case FILEIO_EPERM:
12263 return EPERM;
12264 case FILEIO_ENOENT:
12265 return ENOENT;
12266 case FILEIO_EINTR:
12267 return EINTR;
12268 case FILEIO_EIO:
12269 return EIO;
12270 case FILEIO_EBADF:
12271 return EBADF;
12272 case FILEIO_EACCES:
12273 return EACCES;
12274 case FILEIO_EFAULT:
12275 return EFAULT;
12276 case FILEIO_EBUSY:
12277 return EBUSY;
12278 case FILEIO_EEXIST:
12279 return EEXIST;
12280 case FILEIO_ENODEV:
12281 return ENODEV;
12282 case FILEIO_ENOTDIR:
12283 return ENOTDIR;
12284 case FILEIO_EISDIR:
12285 return EISDIR;
12286 case FILEIO_EINVAL:
12287 return EINVAL;
12288 case FILEIO_ENFILE:
12289 return ENFILE;
12290 case FILEIO_EMFILE:
12291 return EMFILE;
12292 case FILEIO_EFBIG:
12293 return EFBIG;
12294 case FILEIO_ENOSPC:
12295 return ENOSPC;
12296 case FILEIO_ESPIPE:
12297 return ESPIPE;
12298 case FILEIO_EROFS:
12299 return EROFS;
12300 case FILEIO_ENOSYS:
12301 return ENOSYS;
12302 case FILEIO_ENAMETOOLONG:
12303 return ENAMETOOLONG;
12304 }
12305 return -1;
12306}
12307
12308static char *
12309remote_hostio_error (int errnum)
12310{
12311 int host_error = remote_fileio_errno_to_host (errnum);
12312
12313 if (host_error == -1)
12314 error (_("Unknown remote I/O error %d"), errnum);
12315 else
12316 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12317}
12318
440b7aec
PA
12319/* A RAII wrapper around a remote file descriptor. */
12320
12321class scoped_remote_fd
a6b151f1 12322{
440b7aec 12323public:
6b8edb51
PA
12324 scoped_remote_fd (remote_target *remote, int fd)
12325 : m_remote (remote), m_fd (fd)
440b7aec
PA
12326 {
12327 }
a6b151f1 12328
440b7aec
PA
12329 ~scoped_remote_fd ()
12330 {
12331 if (m_fd != -1)
12332 {
12333 try
12334 {
12335 int remote_errno;
6b8edb51 12336 m_remote->remote_hostio_close (m_fd, &remote_errno);
440b7aec
PA
12337 }
12338 catch (...)
12339 {
12340 /* Swallow exception before it escapes the dtor. If
12341 something goes wrong, likely the connection is gone,
12342 and there's nothing else that can be done. */
12343 }
12344 }
12345 }
12346
12347 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12348
12349 /* Release ownership of the file descriptor, and return it. */
88a774b9 12350 ATTRIBUTE_UNUSED_RESULT int release () noexcept
440b7aec
PA
12351 {
12352 int fd = m_fd;
12353 m_fd = -1;
12354 return fd;
12355 }
12356
12357 /* Return the owned file descriptor. */
12358 int get () const noexcept
12359 {
12360 return m_fd;
12361 }
12362
12363private:
6b8edb51
PA
12364 /* The remote target. */
12365 remote_target *m_remote;
12366
440b7aec
PA
12367 /* The owned remote I/O file descriptor. */
12368 int m_fd;
12369};
a6b151f1
DJ
12370
12371void
12372remote_file_put (const char *local_file, const char *remote_file, int from_tty)
6b8edb51
PA
12373{
12374 remote_target *remote = get_current_remote_target ();
12375
12376 if (remote == nullptr)
12377 error (_("command can only be used with remote target"));
12378
12379 remote->remote_file_put (local_file, remote_file, from_tty);
12380}
12381
12382void
12383remote_target::remote_file_put (const char *local_file, const char *remote_file,
12384 int from_tty)
a6b151f1 12385{
440b7aec 12386 int retcode, remote_errno, bytes, io_size;
a6b151f1
DJ
12387 int bytes_in_buffer;
12388 int saw_eof;
12389 ULONGEST offset;
a6b151f1 12390
d419f42d 12391 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
12392 if (file == NULL)
12393 perror_with_name (local_file);
a6b151f1 12394
440b7aec 12395 scoped_remote_fd fd
6b8edb51
PA
12396 (this, remote_hostio_open (NULL,
12397 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12398 | FILEIO_O_TRUNC),
12399 0700, 0, &remote_errno));
440b7aec 12400 if (fd.get () == -1)
a6b151f1
DJ
12401 remote_hostio_error (remote_errno);
12402
12403 /* Send up to this many bytes at once. They won't all fit in the
12404 remote packet limit, so we'll transfer slightly fewer. */
12405 io_size = get_remote_packet_size ();
5ca3b260 12406 gdb::byte_vector buffer (io_size);
a6b151f1 12407
a6b151f1
DJ
12408 bytes_in_buffer = 0;
12409 saw_eof = 0;
12410 offset = 0;
12411 while (bytes_in_buffer || !saw_eof)
12412 {
12413 if (!saw_eof)
12414 {
5ca3b260 12415 bytes = fread (buffer.data () + bytes_in_buffer, 1,
3e43a32a 12416 io_size - bytes_in_buffer,
d419f42d 12417 file.get ());
a6b151f1
DJ
12418 if (bytes == 0)
12419 {
d419f42d 12420 if (ferror (file.get ()))
a6b151f1
DJ
12421 error (_("Error reading %s."), local_file);
12422 else
12423 {
12424 /* EOF. Unless there is something still in the
12425 buffer from the last iteration, we are done. */
12426 saw_eof = 1;
12427 if (bytes_in_buffer == 0)
12428 break;
12429 }
12430 }
12431 }
12432 else
12433 bytes = 0;
12434
12435 bytes += bytes_in_buffer;
12436 bytes_in_buffer = 0;
12437
5ca3b260 12438 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
3e43a32a 12439 offset, &remote_errno);
a6b151f1
DJ
12440
12441 if (retcode < 0)
12442 remote_hostio_error (remote_errno);
12443 else if (retcode == 0)
12444 error (_("Remote write of %d bytes returned 0!"), bytes);
12445 else if (retcode < bytes)
12446 {
12447 /* Short write. Save the rest of the read data for the next
12448 write. */
12449 bytes_in_buffer = bytes - retcode;
5ca3b260 12450 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
a6b151f1
DJ
12451 }
12452
12453 offset += retcode;
12454 }
12455
6b8edb51 12456 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12457 remote_hostio_error (remote_errno);
12458
12459 if (from_tty)
12460 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
a6b151f1
DJ
12461}
12462
12463void
12464remote_file_get (const char *remote_file, const char *local_file, int from_tty)
6b8edb51
PA
12465{
12466 remote_target *remote = get_current_remote_target ();
12467
12468 if (remote == nullptr)
12469 error (_("command can only be used with remote target"));
12470
12471 remote->remote_file_get (remote_file, local_file, from_tty);
12472}
12473
12474void
12475remote_target::remote_file_get (const char *remote_file, const char *local_file,
12476 int from_tty)
a6b151f1 12477{
440b7aec 12478 int remote_errno, bytes, io_size;
a6b151f1 12479 ULONGEST offset;
a6b151f1 12480
440b7aec 12481 scoped_remote_fd fd
6b8edb51
PA
12482 (this, remote_hostio_open (NULL,
12483 remote_file, FILEIO_O_RDONLY, 0, 0,
12484 &remote_errno));
440b7aec 12485 if (fd.get () == -1)
a6b151f1
DJ
12486 remote_hostio_error (remote_errno);
12487
d419f42d 12488 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12489 if (file == NULL)
12490 perror_with_name (local_file);
a6b151f1
DJ
12491
12492 /* Send up to this many bytes at once. They won't all fit in the
12493 remote packet limit, so we'll transfer slightly fewer. */
12494 io_size = get_remote_packet_size ();
5ca3b260 12495 gdb::byte_vector buffer (io_size);
a6b151f1 12496
a6b151f1
DJ
12497 offset = 0;
12498 while (1)
12499 {
5ca3b260 12500 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
440b7aec 12501 &remote_errno);
a6b151f1
DJ
12502 if (bytes == 0)
12503 /* Success, but no bytes, means end-of-file. */
12504 break;
12505 if (bytes == -1)
12506 remote_hostio_error (remote_errno);
12507
12508 offset += bytes;
12509
5ca3b260 12510 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
a6b151f1
DJ
12511 if (bytes == 0)
12512 perror_with_name (local_file);
12513 }
12514
6b8edb51 12515 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12516 remote_hostio_error (remote_errno);
12517
12518 if (from_tty)
12519 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
a6b151f1
DJ
12520}
12521
12522void
12523remote_file_delete (const char *remote_file, int from_tty)
12524{
6b8edb51 12525 remote_target *remote = get_current_remote_target ();
a6b151f1 12526
6b8edb51 12527 if (remote == nullptr)
a6b151f1
DJ
12528 error (_("command can only be used with remote target"));
12529
6b8edb51
PA
12530 remote->remote_file_delete (remote_file, from_tty);
12531}
12532
12533void
12534remote_target::remote_file_delete (const char *remote_file, int from_tty)
12535{
12536 int retcode, remote_errno;
12537
12538 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
a6b151f1
DJ
12539 if (retcode == -1)
12540 remote_hostio_error (remote_errno);
12541
12542 if (from_tty)
12543 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12544}
12545
12546static void
ac88e2de 12547remote_put_command (const char *args, int from_tty)
a6b151f1 12548{
d1a41061
PP
12549 if (args == NULL)
12550 error_no_arg (_("file to put"));
12551
773a1edc 12552 gdb_argv argv (args);
a6b151f1
DJ
12553 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12554 error (_("Invalid parameters to remote put"));
12555
12556 remote_file_put (argv[0], argv[1], from_tty);
a6b151f1
DJ
12557}
12558
12559static void
ac88e2de 12560remote_get_command (const char *args, int from_tty)
a6b151f1 12561{
d1a41061
PP
12562 if (args == NULL)
12563 error_no_arg (_("file to get"));
12564
773a1edc 12565 gdb_argv argv (args);
a6b151f1
DJ
12566 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12567 error (_("Invalid parameters to remote get"));
12568
12569 remote_file_get (argv[0], argv[1], from_tty);
a6b151f1
DJ
12570}
12571
12572static void
ac88e2de 12573remote_delete_command (const char *args, int from_tty)
a6b151f1 12574{
d1a41061
PP
12575 if (args == NULL)
12576 error_no_arg (_("file to delete"));
12577
773a1edc 12578 gdb_argv argv (args);
a6b151f1
DJ
12579 if (argv[0] == NULL || argv[1] != NULL)
12580 error (_("Invalid parameters to remote delete"));
12581
12582 remote_file_delete (argv[0], from_tty);
a6b151f1
DJ
12583}
12584
12585static void
981a3fb3 12586remote_command (const char *args, int from_tty)
a6b151f1 12587{
635c7e8a 12588 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
a6b151f1
DJ
12589}
12590
57810aa7 12591bool
f6ac5f3d 12592remote_target::can_execute_reverse ()
b2175913 12593{
4082afcc
PA
12594 if (packet_support (PACKET_bs) == PACKET_ENABLE
12595 || packet_support (PACKET_bc) == PACKET_ENABLE)
57810aa7 12596 return true;
40ab02ce 12597 else
57810aa7 12598 return false;
b2175913
MS
12599}
12600
57810aa7 12601bool
f6ac5f3d 12602remote_target::supports_non_stop ()
74531fed 12603{
57810aa7 12604 return true;
74531fed
PA
12605}
12606
57810aa7 12607bool
f6ac5f3d 12608remote_target::supports_disable_randomization ()
03583c20
UW
12609{
12610 /* Only supported in extended mode. */
57810aa7 12611 return false;
03583c20
UW
12612}
12613
57810aa7 12614bool
f6ac5f3d 12615remote_target::supports_multi_process ()
8a305172
PA
12616{
12617 struct remote_state *rs = get_remote_state ();
a744cf53 12618
8020350c 12619 return remote_multi_process_p (rs);
8a305172
PA
12620}
12621
70221824 12622static int
f6ac5f3d 12623remote_supports_cond_tracepoints ()
782b2b07 12624{
4082afcc 12625 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12626}
12627
57810aa7 12628bool
f6ac5f3d 12629remote_target::supports_evaluation_of_breakpoint_conditions ()
3788aec7 12630{
4082afcc 12631 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12632}
12633
70221824 12634static int
f6ac5f3d 12635remote_supports_fast_tracepoints ()
7a697b8d 12636{
4082afcc 12637 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12638}
12639
0fb4aa4b 12640static int
f6ac5f3d 12641remote_supports_static_tracepoints ()
0fb4aa4b 12642{
4082afcc 12643 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12644}
12645
1e4d1764 12646static int
f6ac5f3d 12647remote_supports_install_in_trace ()
1e4d1764 12648{
4082afcc 12649 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12650}
12651
57810aa7 12652bool
f6ac5f3d 12653remote_target::supports_enable_disable_tracepoint ()
d248b706 12654{
4082afcc
PA
12655 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12656 == PACKET_ENABLE);
d248b706
KY
12657}
12658
57810aa7 12659bool
f6ac5f3d 12660remote_target::supports_string_tracing ()
3065dfb6 12661{
4082afcc 12662 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12663}
12664
57810aa7 12665bool
f6ac5f3d 12666remote_target::can_run_breakpoint_commands ()
d3ce09f5 12667{
4082afcc 12668 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12669}
12670
f6ac5f3d
PA
12671void
12672remote_target::trace_init ()
35b1e5cc 12673{
b6bb3468
PA
12674 struct remote_state *rs = get_remote_state ();
12675
35b1e5cc 12676 putpkt ("QTinit");
b6bb3468 12677 remote_get_noisy_reply ();
8d64371b 12678 if (strcmp (rs->buf.data (), "OK") != 0)
35b1e5cc
SS
12679 error (_("Target does not support this command."));
12680}
12681
409873ef
SS
12682/* Recursive routine to walk through command list including loops, and
12683 download packets for each command. */
12684
6b8edb51
PA
12685void
12686remote_target::remote_download_command_source (int num, ULONGEST addr,
12687 struct command_line *cmds)
409873ef
SS
12688{
12689 struct remote_state *rs = get_remote_state ();
12690 struct command_line *cmd;
12691
12692 for (cmd = cmds; cmd; cmd = cmd->next)
12693 {
0df8b418 12694 QUIT; /* Allow user to bail out with ^C. */
8d64371b 12695 strcpy (rs->buf.data (), "QTDPsrc:");
409873ef 12696 encode_source_string (num, addr, "cmd", cmd->line,
8d64371b
TT
12697 rs->buf.data () + strlen (rs->buf.data ()),
12698 rs->buf.size () - strlen (rs->buf.data ()));
409873ef 12699 putpkt (rs->buf);
b6bb3468 12700 remote_get_noisy_reply ();
8d64371b 12701 if (strcmp (rs->buf.data (), "OK"))
409873ef
SS
12702 warning (_("Target does not support source download."));
12703
12704 if (cmd->control_type == while_control
12705 || cmd->control_type == while_stepping_control)
12706 {
12973681 12707 remote_download_command_source (num, addr, cmd->body_list_0.get ());
409873ef 12708
0df8b418 12709 QUIT; /* Allow user to bail out with ^C. */
8d64371b 12710 strcpy (rs->buf.data (), "QTDPsrc:");
409873ef 12711 encode_source_string (num, addr, "cmd", "end",
8d64371b
TT
12712 rs->buf.data () + strlen (rs->buf.data ()),
12713 rs->buf.size () - strlen (rs->buf.data ()));
409873ef 12714 putpkt (rs->buf);
b6bb3468 12715 remote_get_noisy_reply ();
8d64371b 12716 if (strcmp (rs->buf.data (), "OK"))
409873ef
SS
12717 warning (_("Target does not support source download."));
12718 }
12719 }
12720}
12721
f6ac5f3d
PA
12722void
12723remote_target::download_tracepoint (struct bp_location *loc)
35b1e5cc
SS
12724{
12725 CORE_ADDR tpaddr;
409873ef 12726 char addrbuf[40];
b44ec619
SM
12727 std::vector<std::string> tdp_actions;
12728 std::vector<std::string> stepping_actions;
35b1e5cc 12729 char *pkt;
e8ba3115 12730 struct breakpoint *b = loc->owner;
d9b3f62e 12731 struct tracepoint *t = (struct tracepoint *) b;
b6bb3468 12732 struct remote_state *rs = get_remote_state ();
3df3a985 12733 int ret;
ff36536c 12734 const char *err_msg = _("Tracepoint packet too large for target.");
3df3a985
PFC
12735 size_t size_left;
12736
12737 /* We use a buffer other than rs->buf because we'll build strings
12738 across multiple statements, and other statements in between could
12739 modify rs->buf. */
12740 gdb::char_vector buf (get_remote_packet_size ());
35b1e5cc 12741
dc673c81 12742 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
12743
12744 tpaddr = loc->address;
12745 sprintf_vma (addrbuf, tpaddr);
3df3a985
PFC
12746 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
12747 b->number, addrbuf, /* address */
12748 (b->enable_state == bp_enabled ? 'E' : 'D'),
12749 t->step_count, t->pass_count);
12750
12751 if (ret < 0 || ret >= buf.size ())
a7f25a84 12752 error ("%s", err_msg);
3df3a985 12753
e8ba3115
YQ
12754 /* Fast tracepoints are mostly handled by the target, but we can
12755 tell the target how big of an instruction block should be moved
12756 around. */
12757 if (b->type == bp_fast_tracepoint)
12758 {
12759 /* Only test for support at download time; we may not know
12760 target capabilities at definition time. */
12761 if (remote_supports_fast_tracepoints ())
35b1e5cc 12762 {
6b940e6a
PL
12763 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12764 NULL))
3df3a985
PFC
12765 {
12766 size_left = buf.size () - strlen (buf.data ());
12767 ret = snprintf (buf.data () + strlen (buf.data ()),
12768 size_left, ":F%x",
12769 gdb_insn_length (loc->gdbarch, tpaddr));
12770
12771 if (ret < 0 || ret >= size_left)
a7f25a84 12772 error ("%s", err_msg);
3df3a985 12773 }
35b1e5cc 12774 else
e8ba3115
YQ
12775 /* If it passed validation at definition but fails now,
12776 something is very wrong. */
12777 internal_error (__FILE__, __LINE__,
12778 _("Fast tracepoint not "
12779 "valid during download"));
35b1e5cc 12780 }
e8ba3115
YQ
12781 else
12782 /* Fast tracepoints are functionally identical to regular
12783 tracepoints, so don't take lack of support as a reason to
12784 give up on the trace run. */
12785 warning (_("Target does not support fast tracepoints, "
12786 "downloading %d as regular tracepoint"), b->number);
12787 }
12788 else if (b->type == bp_static_tracepoint)
12789 {
12790 /* Only test for support at download time; we may not know
12791 target capabilities at definition time. */
12792 if (remote_supports_static_tracepoints ())
0fb4aa4b 12793 {
e8ba3115 12794 struct static_tracepoint_marker marker;
0fb4aa4b 12795
e8ba3115 12796 if (target_static_tracepoint_marker_at (tpaddr, &marker))
3df3a985
PFC
12797 {
12798 size_left = buf.size () - strlen (buf.data ());
12799 ret = snprintf (buf.data () + strlen (buf.data ()),
12800 size_left, ":S");
12801
12802 if (ret < 0 || ret >= size_left)
a7f25a84 12803 error ("%s", err_msg);
3df3a985 12804 }
0fb4aa4b 12805 else
e8ba3115 12806 error (_("Static tracepoint not valid during download"));
0fb4aa4b 12807 }
e8ba3115
YQ
12808 else
12809 /* Fast tracepoints are functionally identical to regular
12810 tracepoints, so don't take lack of support as a reason
12811 to give up on the trace run. */
12812 error (_("Target does not support static tracepoints"));
12813 }
12814 /* If the tracepoint has a conditional, make it into an agent
12815 expression and append to the definition. */
12816 if (loc->cond)
12817 {
12818 /* Only test support at download time, we may not know target
12819 capabilities at definition time. */
12820 if (remote_supports_cond_tracepoints ())
35b1e5cc 12821 {
3df3a985
PFC
12822 agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
12823 loc->cond.get ());
12824
12825 size_left = buf.size () - strlen (buf.data ());
12826
12827 ret = snprintf (buf.data () + strlen (buf.data ()),
12828 size_left, ":X%x,", aexpr->len);
12829
12830 if (ret < 0 || ret >= size_left)
a7f25a84 12831 error ("%s", err_msg);
3df3a985
PFC
12832
12833 size_left = buf.size () - strlen (buf.data ());
12834
12835 /* Two bytes to encode each aexpr byte, plus the terminating
12836 null byte. */
12837 if (aexpr->len * 2 + 1 > size_left)
a7f25a84 12838 error ("%s", err_msg);
3df3a985
PFC
12839
12840 pkt = buf.data () + strlen (buf.data ());
12841
b44ec619 12842 for (int ndx = 0; ndx < aexpr->len; ++ndx)
e8ba3115
YQ
12843 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12844 *pkt = '\0';
35b1e5cc 12845 }
e8ba3115
YQ
12846 else
12847 warning (_("Target does not support conditional tracepoints, "
12848 "ignoring tp %d cond"), b->number);
12849 }
35b1e5cc 12850
d9b3f62e 12851 if (b->commands || *default_collect)
3df3a985
PFC
12852 {
12853 size_left = buf.size () - strlen (buf.data ());
12854
12855 ret = snprintf (buf.data () + strlen (buf.data ()),
12856 size_left, "-");
12857
12858 if (ret < 0 || ret >= size_left)
a7f25a84 12859 error ("%s", err_msg);
3df3a985
PFC
12860 }
12861
12862 putpkt (buf.data ());
b6bb3468 12863 remote_get_noisy_reply ();
8d64371b 12864 if (strcmp (rs->buf.data (), "OK"))
e8ba3115 12865 error (_("Target does not support tracepoints."));
35b1e5cc 12866
e8ba3115 12867 /* do_single_steps (t); */
b44ec619
SM
12868 for (auto action_it = tdp_actions.begin ();
12869 action_it != tdp_actions.end (); action_it++)
e8ba3115 12870 {
b44ec619
SM
12871 QUIT; /* Allow user to bail out with ^C. */
12872
aa6f3694 12873 bool has_more = ((action_it + 1) != tdp_actions.end ()
b44ec619
SM
12874 || !stepping_actions.empty ());
12875
3df3a985
PFC
12876 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
12877 b->number, addrbuf, /* address */
12878 action_it->c_str (),
12879 has_more ? '-' : 0);
12880
12881 if (ret < 0 || ret >= buf.size ())
a7f25a84 12882 error ("%s", err_msg);
3df3a985
PFC
12883
12884 putpkt (buf.data ());
b44ec619 12885 remote_get_noisy_reply ();
8d64371b 12886 if (strcmp (rs->buf.data (), "OK"))
b44ec619 12887 error (_("Error on target while setting tracepoints."));
e8ba3115 12888 }
409873ef 12889
05abfc39
PFC
12890 for (auto action_it = stepping_actions.begin ();
12891 action_it != stepping_actions.end (); action_it++)
12892 {
12893 QUIT; /* Allow user to bail out with ^C. */
12894
12895 bool is_first = action_it == stepping_actions.begin ();
aa6f3694 12896 bool has_more = (action_it + 1) != stepping_actions.end ();
05abfc39 12897
3df3a985
PFC
12898 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
12899 b->number, addrbuf, /* address */
12900 is_first ? "S" : "",
12901 action_it->c_str (),
12902 has_more ? "-" : "");
12903
12904 if (ret < 0 || ret >= buf.size ())
a7f25a84 12905 error ("%s", err_msg);
3df3a985
PFC
12906
12907 putpkt (buf.data ());
05abfc39 12908 remote_get_noisy_reply ();
8d64371b 12909 if (strcmp (rs->buf.data (), "OK"))
05abfc39
PFC
12910 error (_("Error on target while setting tracepoints."));
12911 }
b44ec619 12912
4082afcc 12913 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 12914 {
f00aae0f 12915 if (b->location != NULL)
409873ef 12916 {
3df3a985
PFC
12917 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
12918
12919 if (ret < 0 || ret >= buf.size ())
a7f25a84 12920 error ("%s", err_msg);
3df3a985 12921
f00aae0f 12922 encode_source_string (b->number, loc->address, "at",
d28cd78a 12923 event_location_to_string (b->location.get ()),
3df3a985
PFC
12924 buf.data () + strlen (buf.data ()),
12925 buf.size () - strlen (buf.data ()));
12926 putpkt (buf.data ());
b6bb3468 12927 remote_get_noisy_reply ();
8d64371b 12928 if (strcmp (rs->buf.data (), "OK"))
e8ba3115 12929 warning (_("Target does not support source download."));
409873ef 12930 }
e8ba3115
YQ
12931 if (b->cond_string)
12932 {
3df3a985
PFC
12933 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
12934
12935 if (ret < 0 || ret >= buf.size ())
a7f25a84 12936 error ("%s", err_msg);
3df3a985 12937
e8ba3115 12938 encode_source_string (b->number, loc->address,
3df3a985
PFC
12939 "cond", b->cond_string,
12940 buf.data () + strlen (buf.data ()),
12941 buf.size () - strlen (buf.data ()));
12942 putpkt (buf.data ());
b6bb3468 12943 remote_get_noisy_reply ();
8d64371b 12944 if (strcmp (rs->buf.data (), "OK"))
e8ba3115
YQ
12945 warning (_("Target does not support source download."));
12946 }
12947 remote_download_command_source (b->number, loc->address,
12948 breakpoint_commands (b));
35b1e5cc 12949 }
35b1e5cc
SS
12950}
12951
57810aa7 12952bool
f6ac5f3d 12953remote_target::can_download_tracepoint ()
1e4d1764 12954{
1e51243a
PA
12955 struct remote_state *rs = get_remote_state ();
12956 struct trace_status *ts;
12957 int status;
12958
12959 /* Don't try to install tracepoints until we've relocated our
12960 symbols, and fetched and merged the target's tracepoint list with
12961 ours. */
12962 if (rs->starting_up)
57810aa7 12963 return false;
1e51243a
PA
12964
12965 ts = current_trace_status ();
f6ac5f3d 12966 status = get_trace_status (ts);
1e4d1764
YQ
12967
12968 if (status == -1 || !ts->running_known || !ts->running)
57810aa7 12969 return false;
1e4d1764
YQ
12970
12971 /* If we are in a tracing experiment, but remote stub doesn't support
12972 installing tracepoint in trace, we have to return. */
12973 if (!remote_supports_install_in_trace ())
57810aa7 12974 return false;
1e4d1764 12975
57810aa7 12976 return true;
1e4d1764
YQ
12977}
12978
12979
f6ac5f3d
PA
12980void
12981remote_target::download_trace_state_variable (const trace_state_variable &tsv)
35b1e5cc
SS
12982{
12983 struct remote_state *rs = get_remote_state ();
00bf0b85 12984 char *p;
35b1e5cc 12985
8d64371b 12986 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
c252925c
SM
12987 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
12988 tsv.builtin);
8d64371b
TT
12989 p = rs->buf.data () + strlen (rs->buf.data ());
12990 if ((p - rs->buf.data ()) + tsv.name.length () * 2
12991 >= get_remote_packet_size ())
00bf0b85 12992 error (_("Trace state variable name too long for tsv definition packet"));
c252925c 12993 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
00bf0b85 12994 *p++ = '\0';
35b1e5cc 12995 putpkt (rs->buf);
b6bb3468 12996 remote_get_noisy_reply ();
8d64371b 12997 if (rs->buf[0] == '\0')
ad91cd99 12998 error (_("Target does not support this command."));
8d64371b 12999 if (strcmp (rs->buf.data (), "OK") != 0)
ad91cd99 13000 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
13001}
13002
f6ac5f3d
PA
13003void
13004remote_target::enable_tracepoint (struct bp_location *location)
d248b706
KY
13005{
13006 struct remote_state *rs = get_remote_state ();
13007 char addr_buf[40];
13008
13009 sprintf_vma (addr_buf, location->address);
8d64371b 13010 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s",
bba74b36 13011 location->owner->number, addr_buf);
d248b706 13012 putpkt (rs->buf);
b6bb3468 13013 remote_get_noisy_reply ();
8d64371b 13014 if (rs->buf[0] == '\0')
d248b706 13015 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
8d64371b 13016 if (strcmp (rs->buf.data (), "OK") != 0)
d248b706
KY
13017 error (_("Error on target while enabling tracepoint."));
13018}
13019
f6ac5f3d
PA
13020void
13021remote_target::disable_tracepoint (struct bp_location *location)
d248b706
KY
13022{
13023 struct remote_state *rs = get_remote_state ();
13024 char addr_buf[40];
13025
13026 sprintf_vma (addr_buf, location->address);
8d64371b 13027 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s",
bba74b36 13028 location->owner->number, addr_buf);
d248b706 13029 putpkt (rs->buf);
b6bb3468 13030 remote_get_noisy_reply ();
8d64371b 13031 if (rs->buf[0] == '\0')
d248b706 13032 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
8d64371b 13033 if (strcmp (rs->buf.data (), "OK") != 0)
d248b706
KY
13034 error (_("Error on target while disabling tracepoint."));
13035}
13036
f6ac5f3d
PA
13037void
13038remote_target::trace_set_readonly_regions ()
35b1e5cc
SS
13039{
13040 asection *s;
13041 bfd_size_type size;
608bcef2 13042 bfd_vma vma;
35b1e5cc 13043 int anysecs = 0;
c2fa21f1 13044 int offset = 0;
35b1e5cc
SS
13045
13046 if (!exec_bfd)
13047 return; /* No information to give. */
13048
b6bb3468
PA
13049 struct remote_state *rs = get_remote_state ();
13050
8d64371b
TT
13051 strcpy (rs->buf.data (), "QTro");
13052 offset = strlen (rs->buf.data ());
35b1e5cc
SS
13053 for (s = exec_bfd->sections; s; s = s->next)
13054 {
13055 char tmp1[40], tmp2[40];
c2fa21f1 13056 int sec_length;
35b1e5cc
SS
13057
13058 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 13059 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
13060 (s->flags & SEC_READONLY) == 0)
13061 continue;
13062
13063 anysecs = 1;
fd361982
AM
13064 vma = bfd_section_vma (s);
13065 size = bfd_section_size (s);
608bcef2
HZ
13066 sprintf_vma (tmp1, vma);
13067 sprintf_vma (tmp2, vma + size);
c2fa21f1 13068 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
8d64371b 13069 if (offset + sec_length + 1 > rs->buf.size ())
c2fa21f1 13070 {
4082afcc 13071 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 13072 warning (_("\
c2fa21f1
HZ
13073Too many sections for read-only sections definition packet."));
13074 break;
13075 }
8d64371b 13076 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s",
bba74b36 13077 tmp1, tmp2);
c2fa21f1 13078 offset += sec_length;
35b1e5cc
SS
13079 }
13080 if (anysecs)
13081 {
b6bb3468 13082 putpkt (rs->buf);
8d64371b 13083 getpkt (&rs->buf, 0);
35b1e5cc
SS
13084 }
13085}
13086
f6ac5f3d
PA
13087void
13088remote_target::trace_start ()
35b1e5cc 13089{
b6bb3468
PA
13090 struct remote_state *rs = get_remote_state ();
13091
35b1e5cc 13092 putpkt ("QTStart");
b6bb3468 13093 remote_get_noisy_reply ();
8d64371b 13094 if (rs->buf[0] == '\0')
ad91cd99 13095 error (_("Target does not support this command."));
8d64371b
TT
13096 if (strcmp (rs->buf.data (), "OK") != 0)
13097 error (_("Bogus reply from target: %s"), rs->buf.data ());
35b1e5cc
SS
13098}
13099
f6ac5f3d
PA
13100int
13101remote_target::get_trace_status (struct trace_status *ts)
35b1e5cc 13102{
953b98d1 13103 /* Initialize it just to avoid a GCC false warning. */
f652de6f 13104 char *p = NULL;
bd3eecc3 13105 enum packet_result result;
b6bb3468 13106 struct remote_state *rs = get_remote_state ();
bd3eecc3 13107
4082afcc 13108 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 13109 return -1;
a744cf53 13110
7b9a15e1 13111 /* FIXME we need to get register block size some other way. */
5cd63fda 13112 trace_regblock_size
9d6eea31 13113 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
00bf0b85 13114
049dc89b
JK
13115 putpkt ("qTStatus");
13116
a70b8144 13117 try
67f41397 13118 {
b6bb3468 13119 p = remote_get_noisy_reply ();
67f41397 13120 }
230d2906 13121 catch (const gdb_exception_error &ex)
67f41397 13122 {
598d3636
JK
13123 if (ex.error != TARGET_CLOSE_ERROR)
13124 {
13125 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13126 return -1;
13127 }
eedc3f4f 13128 throw;
67f41397 13129 }
00bf0b85 13130
bd3eecc3
PA
13131 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13132
00bf0b85 13133 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 13134 if (result == PACKET_UNKNOWN)
00bf0b85 13135 return -1;
35b1e5cc 13136
00bf0b85 13137 /* We're working with a live target. */
f5911ea1 13138 ts->filename = NULL;
00bf0b85 13139
00bf0b85 13140 if (*p++ != 'T')
8d64371b 13141 error (_("Bogus trace status reply from target: %s"), rs->buf.data ());
35b1e5cc 13142
84cebc4a
YQ
13143 /* Function 'parse_trace_status' sets default value of each field of
13144 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
13145 parse_trace_status (p, ts);
13146
13147 return ts->running;
35b1e5cc
SS
13148}
13149
f6ac5f3d
PA
13150void
13151remote_target::get_tracepoint_status (struct breakpoint *bp,
13152 struct uploaded_tp *utp)
f196051f
SS
13153{
13154 struct remote_state *rs = get_remote_state ();
f196051f
SS
13155 char *reply;
13156 struct bp_location *loc;
13157 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 13158 size_t size = get_remote_packet_size ();
f196051f
SS
13159
13160 if (tp)
13161 {
c1fc2657 13162 tp->hit_count = 0;
f196051f 13163 tp->traceframe_usage = 0;
c1fc2657 13164 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
13165 {
13166 /* If the tracepoint was never downloaded, don't go asking for
13167 any status. */
13168 if (tp->number_on_target == 0)
13169 continue;
8d64371b 13170 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target,
bba74b36 13171 phex_nz (loc->address, 0));
f196051f 13172 putpkt (rs->buf);
b6bb3468 13173 reply = remote_get_noisy_reply ();
f196051f
SS
13174 if (reply && *reply)
13175 {
13176 if (*reply == 'V')
13177 parse_tracepoint_status (reply + 1, bp, utp);
13178 }
13179 }
13180 }
13181 else if (utp)
13182 {
13183 utp->hit_count = 0;
13184 utp->traceframe_usage = 0;
8d64371b 13185 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number,
bba74b36 13186 phex_nz (utp->addr, 0));
f196051f 13187 putpkt (rs->buf);
b6bb3468 13188 reply = remote_get_noisy_reply ();
f196051f
SS
13189 if (reply && *reply)
13190 {
13191 if (*reply == 'V')
13192 parse_tracepoint_status (reply + 1, bp, utp);
13193 }
13194 }
13195}
13196
f6ac5f3d
PA
13197void
13198remote_target::trace_stop ()
35b1e5cc 13199{
b6bb3468
PA
13200 struct remote_state *rs = get_remote_state ();
13201
35b1e5cc 13202 putpkt ("QTStop");
b6bb3468 13203 remote_get_noisy_reply ();
8d64371b 13204 if (rs->buf[0] == '\0')
ad91cd99 13205 error (_("Target does not support this command."));
8d64371b
TT
13206 if (strcmp (rs->buf.data (), "OK") != 0)
13207 error (_("Bogus reply from target: %s"), rs->buf.data ());
35b1e5cc
SS
13208}
13209
f6ac5f3d
PA
13210int
13211remote_target::trace_find (enum trace_find_type type, int num,
13212 CORE_ADDR addr1, CORE_ADDR addr2,
13213 int *tpp)
35b1e5cc
SS
13214{
13215 struct remote_state *rs = get_remote_state ();
8d64371b 13216 char *endbuf = rs->buf.data () + get_remote_packet_size ();
35b1e5cc
SS
13217 char *p, *reply;
13218 int target_frameno = -1, target_tracept = -1;
13219
e6e4e701
PA
13220 /* Lookups other than by absolute frame number depend on the current
13221 trace selected, so make sure it is correct on the remote end
13222 first. */
13223 if (type != tfind_number)
13224 set_remote_traceframe ();
13225
8d64371b 13226 p = rs->buf.data ();
35b1e5cc
SS
13227 strcpy (p, "QTFrame:");
13228 p = strchr (p, '\0');
13229 switch (type)
13230 {
13231 case tfind_number:
bba74b36 13232 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
13233 break;
13234 case tfind_pc:
bba74b36 13235 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
13236 break;
13237 case tfind_tp:
bba74b36 13238 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
13239 break;
13240 case tfind_range:
bba74b36
YQ
13241 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13242 phex_nz (addr2, 0));
35b1e5cc
SS
13243 break;
13244 case tfind_outside:
bba74b36
YQ
13245 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13246 phex_nz (addr2, 0));
35b1e5cc
SS
13247 break;
13248 default:
9b20d036 13249 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
13250 }
13251
13252 putpkt (rs->buf);
b6bb3468 13253 reply = remote_get_noisy_reply ();
ad91cd99
PA
13254 if (*reply == '\0')
13255 error (_("Target does not support this command."));
35b1e5cc
SS
13256
13257 while (reply && *reply)
13258 switch (*reply)
13259 {
13260 case 'F':
f197e0f1
VP
13261 p = ++reply;
13262 target_frameno = (int) strtol (p, &reply, 16);
13263 if (reply == p)
13264 error (_("Unable to parse trace frame number"));
e6e4e701
PA
13265 /* Don't update our remote traceframe number cache on failure
13266 to select a remote traceframe. */
f197e0f1
VP
13267 if (target_frameno == -1)
13268 return -1;
35b1e5cc
SS
13269 break;
13270 case 'T':
f197e0f1
VP
13271 p = ++reply;
13272 target_tracept = (int) strtol (p, &reply, 16);
13273 if (reply == p)
13274 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
13275 break;
13276 case 'O': /* "OK"? */
13277 if (reply[1] == 'K' && reply[2] == '\0')
13278 reply += 2;
13279 else
13280 error (_("Bogus reply from target: %s"), reply);
13281 break;
13282 default:
13283 error (_("Bogus reply from target: %s"), reply);
13284 }
13285 if (tpp)
13286 *tpp = target_tracept;
e6e4e701 13287
262e1174 13288 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
13289 return target_frameno;
13290}
13291
57810aa7 13292bool
f6ac5f3d 13293remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
35b1e5cc
SS
13294{
13295 struct remote_state *rs = get_remote_state ();
13296 char *reply;
13297 ULONGEST uval;
13298
e6e4e701
PA
13299 set_remote_traceframe ();
13300
8d64371b 13301 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc 13302 putpkt (rs->buf);
b6bb3468 13303 reply = remote_get_noisy_reply ();
35b1e5cc
SS
13304 if (reply && *reply)
13305 {
13306 if (*reply == 'V')
13307 {
13308 unpack_varlen_hex (reply + 1, &uval);
13309 *val = (LONGEST) uval;
57810aa7 13310 return true;
35b1e5cc
SS
13311 }
13312 }
57810aa7 13313 return false;
35b1e5cc
SS
13314}
13315
f6ac5f3d
PA
13316int
13317remote_target::save_trace_data (const char *filename)
00bf0b85
SS
13318{
13319 struct remote_state *rs = get_remote_state ();
13320 char *p, *reply;
13321
8d64371b 13322 p = rs->buf.data ();
00bf0b85
SS
13323 strcpy (p, "QTSave:");
13324 p += strlen (p);
8d64371b
TT
13325 if ((p - rs->buf.data ()) + strlen (filename) * 2
13326 >= get_remote_packet_size ())
00bf0b85 13327 error (_("Remote file name too long for trace save packet"));
9f1b45b0 13328 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
13329 *p++ = '\0';
13330 putpkt (rs->buf);
b6bb3468 13331 reply = remote_get_noisy_reply ();
d6c5869f 13332 if (*reply == '\0')
ad91cd99
PA
13333 error (_("Target does not support this command."));
13334 if (strcmp (reply, "OK") != 0)
13335 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
13336 return 0;
13337}
13338
13339/* This is basically a memory transfer, but needs to be its own packet
13340 because we don't know how the target actually organizes its trace
13341 memory, plus we want to be able to ask for as much as possible, but
13342 not be unhappy if we don't get as much as we ask for. */
13343
f6ac5f3d
PA
13344LONGEST
13345remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
13346{
13347 struct remote_state *rs = get_remote_state ();
13348 char *reply;
13349 char *p;
13350 int rslt;
13351
8d64371b 13352 p = rs->buf.data ();
00bf0b85
SS
13353 strcpy (p, "qTBuffer:");
13354 p += strlen (p);
13355 p += hexnumstr (p, offset);
13356 *p++ = ',';
13357 p += hexnumstr (p, len);
13358 *p++ = '\0';
13359
13360 putpkt (rs->buf);
b6bb3468 13361 reply = remote_get_noisy_reply ();
00bf0b85
SS
13362 if (reply && *reply)
13363 {
13364 /* 'l' by itself means we're at the end of the buffer and
13365 there is nothing more to get. */
13366 if (*reply == 'l')
13367 return 0;
13368
13369 /* Convert the reply into binary. Limit the number of bytes to
13370 convert according to our passed-in buffer size, rather than
13371 what was returned in the packet; if the target is
13372 unexpectedly generous and gives us a bigger reply than we
13373 asked for, we don't want to crash. */
b6bb3468 13374 rslt = hex2bin (reply, buf, len);
00bf0b85
SS
13375 return rslt;
13376 }
13377
13378 /* Something went wrong, flag as an error. */
13379 return -1;
13380}
13381
f6ac5f3d
PA
13382void
13383remote_target::set_disconnected_tracing (int val)
35b1e5cc
SS
13384{
13385 struct remote_state *rs = get_remote_state ();
13386
4082afcc 13387 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 13388 {
ad91cd99
PA
13389 char *reply;
13390
8d64371b
TT
13391 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13392 "QTDisconnected:%x", val);
33da3f1c 13393 putpkt (rs->buf);
b6bb3468 13394 reply = remote_get_noisy_reply ();
ad91cd99 13395 if (*reply == '\0')
33da3f1c 13396 error (_("Target does not support this command."));
ad91cd99
PA
13397 if (strcmp (reply, "OK") != 0)
13398 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
13399 }
13400 else if (val)
13401 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
13402}
13403
f6ac5f3d
PA
13404int
13405remote_target::core_of_thread (ptid_t ptid)
dc146f7c
VP
13406{
13407 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 13408
7aabaf9d
SM
13409 if (info != NULL && info->priv != NULL)
13410 return get_remote_thread_info (info)->core;
13411
dc146f7c
VP
13412 return -1;
13413}
13414
f6ac5f3d
PA
13415void
13416remote_target::set_circular_trace_buffer (int val)
4daf5ac0
SS
13417{
13418 struct remote_state *rs = get_remote_state ();
ad91cd99 13419 char *reply;
4daf5ac0 13420
8d64371b
TT
13421 xsnprintf (rs->buf.data (), get_remote_packet_size (),
13422 "QTBuffer:circular:%x", val);
4daf5ac0 13423 putpkt (rs->buf);
b6bb3468 13424 reply = remote_get_noisy_reply ();
ad91cd99 13425 if (*reply == '\0')
4daf5ac0 13426 error (_("Target does not support this command."));
ad91cd99
PA
13427 if (strcmp (reply, "OK") != 0)
13428 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
13429}
13430
f6ac5f3d
PA
13431traceframe_info_up
13432remote_target::traceframe_info ()
b3b9301e 13433{
9018be22 13434 gdb::optional<gdb::char_vector> text
8b88a78e 13435 = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
b7b030ad 13436 NULL);
9018be22
SM
13437 if (text)
13438 return parse_traceframe_info (text->data ());
b3b9301e
PA
13439
13440 return NULL;
13441}
13442
405f8e94
SS
13443/* Handle the qTMinFTPILen packet. Returns the minimum length of
13444 instruction on which a fast tracepoint may be placed. Returns -1
13445 if the packet is not supported, and 0 if the minimum instruction
13446 length is unknown. */
13447
f6ac5f3d
PA
13448int
13449remote_target::get_min_fast_tracepoint_insn_len ()
405f8e94
SS
13450{
13451 struct remote_state *rs = get_remote_state ();
13452 char *reply;
13453
e886a173
PA
13454 /* If we're not debugging a process yet, the IPA can't be
13455 loaded. */
13456 if (!target_has_execution)
13457 return 0;
13458
13459 /* Make sure the remote is pointing at the right process. */
13460 set_general_process ();
13461
8d64371b 13462 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen");
405f8e94 13463 putpkt (rs->buf);
b6bb3468 13464 reply = remote_get_noisy_reply ();
405f8e94
SS
13465 if (*reply == '\0')
13466 return -1;
13467 else
13468 {
13469 ULONGEST min_insn_len;
13470
13471 unpack_varlen_hex (reply, &min_insn_len);
13472
13473 return (int) min_insn_len;
13474 }
13475}
13476
f6ac5f3d
PA
13477void
13478remote_target::set_trace_buffer_size (LONGEST val)
f6f899bf 13479{
4082afcc 13480 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
13481 {
13482 struct remote_state *rs = get_remote_state ();
8d64371b
TT
13483 char *buf = rs->buf.data ();
13484 char *endbuf = buf + get_remote_packet_size ();
f6f899bf
HAQ
13485 enum packet_result result;
13486
13487 gdb_assert (val >= 0 || val == -1);
13488 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13489 /* Send -1 as literal "-1" to avoid host size dependency. */
13490 if (val < 0)
13491 {
13492 *buf++ = '-';
13493 buf += hexnumstr (buf, (ULONGEST) -val);
13494 }
13495 else
13496 buf += hexnumstr (buf, (ULONGEST) val);
13497
13498 putpkt (rs->buf);
b6bb3468 13499 remote_get_noisy_reply ();
f6f899bf
HAQ
13500 result = packet_ok (rs->buf,
13501 &remote_protocol_packets[PACKET_QTBuffer_size]);
13502
13503 if (result != PACKET_OK)
8d64371b 13504 warning (_("Bogus reply from target: %s"), rs->buf.data ());
f6f899bf
HAQ
13505 }
13506}
13507
57810aa7 13508bool
f6ac5f3d
PA
13509remote_target::set_trace_notes (const char *user, const char *notes,
13510 const char *stop_notes)
f196051f
SS
13511{
13512 struct remote_state *rs = get_remote_state ();
13513 char *reply;
8d64371b
TT
13514 char *buf = rs->buf.data ();
13515 char *endbuf = buf + get_remote_packet_size ();
f196051f
SS
13516 int nbytes;
13517
13518 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13519 if (user)
13520 {
13521 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13522 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13523 buf += 2 * nbytes;
13524 *buf++ = ';';
13525 }
13526 if (notes)
13527 {
13528 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13529 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13530 buf += 2 * nbytes;
13531 *buf++ = ';';
13532 }
13533 if (stop_notes)
13534 {
13535 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13536 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13537 buf += 2 * nbytes;
13538 *buf++ = ';';
13539 }
13540 /* Ensure the buffer is terminated. */
13541 *buf = '\0';
13542
13543 putpkt (rs->buf);
b6bb3468 13544 reply = remote_get_noisy_reply ();
f196051f 13545 if (*reply == '\0')
57810aa7 13546 return false;
f196051f
SS
13547
13548 if (strcmp (reply, "OK") != 0)
13549 error (_("Bogus reply from target: %s"), reply);
13550
57810aa7 13551 return true;
f196051f
SS
13552}
13553
57810aa7
PA
13554bool
13555remote_target::use_agent (bool use)
d1feda86 13556{
4082afcc 13557 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13558 {
13559 struct remote_state *rs = get_remote_state ();
13560
13561 /* If the stub supports QAgent. */
8d64371b 13562 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use);
d1feda86 13563 putpkt (rs->buf);
8d64371b 13564 getpkt (&rs->buf, 0);
d1feda86 13565
8d64371b 13566 if (strcmp (rs->buf.data (), "OK") == 0)
d1feda86 13567 {
f6ac5f3d 13568 ::use_agent = use;
57810aa7 13569 return true;
d1feda86
YQ
13570 }
13571 }
13572
57810aa7 13573 return false;
d1feda86
YQ
13574}
13575
57810aa7 13576bool
f6ac5f3d 13577remote_target::can_use_agent ()
d1feda86 13578{
4082afcc 13579 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13580}
13581
9accd112
MM
13582struct btrace_target_info
13583{
13584 /* The ptid of the traced thread. */
13585 ptid_t ptid;
f4abbc16
MM
13586
13587 /* The obtained branch trace configuration. */
13588 struct btrace_config conf;
9accd112
MM
13589};
13590
f4abbc16
MM
13591/* Reset our idea of our target's btrace configuration. */
13592
13593static void
6b8edb51 13594remote_btrace_reset (remote_state *rs)
f4abbc16 13595{
f4abbc16
MM
13596 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13597}
13598
f4abbc16
MM
13599/* Synchronize the configuration with the target. */
13600
6b8edb51
PA
13601void
13602remote_target::btrace_sync_conf (const btrace_config *conf)
f4abbc16 13603{
d33501a5
MM
13604 struct packet_config *packet;
13605 struct remote_state *rs;
13606 char *buf, *pos, *endbuf;
13607
13608 rs = get_remote_state ();
8d64371b 13609 buf = rs->buf.data ();
d33501a5
MM
13610 endbuf = buf + get_remote_packet_size ();
13611
13612 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13613 if (packet_config_support (packet) == PACKET_ENABLE
13614 && conf->bts.size != rs->btrace_config.bts.size)
13615 {
13616 pos = buf;
13617 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13618 conf->bts.size);
13619
13620 putpkt (buf);
8d64371b 13621 getpkt (&rs->buf, 0);
d33501a5
MM
13622
13623 if (packet_ok (buf, packet) == PACKET_ERROR)
13624 {
13625 if (buf[0] == 'E' && buf[1] == '.')
13626 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13627 else
13628 error (_("Failed to configure the BTS buffer size."));
13629 }
13630
13631 rs->btrace_config.bts.size = conf->bts.size;
13632 }
b20a6524
MM
13633
13634 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13635 if (packet_config_support (packet) == PACKET_ENABLE
13636 && conf->pt.size != rs->btrace_config.pt.size)
13637 {
13638 pos = buf;
13639 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13640 conf->pt.size);
13641
13642 putpkt (buf);
8d64371b 13643 getpkt (&rs->buf, 0);
b20a6524
MM
13644
13645 if (packet_ok (buf, packet) == PACKET_ERROR)
13646 {
13647 if (buf[0] == 'E' && buf[1] == '.')
13648 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13649 else
13650 error (_("Failed to configure the trace buffer size."));
13651 }
13652
13653 rs->btrace_config.pt.size = conf->pt.size;
13654 }
f4abbc16
MM
13655}
13656
13657/* Read the current thread's btrace configuration from the target and
13658 store it into CONF. */
13659
13660static void
13661btrace_read_config (struct btrace_config *conf)
13662{
9018be22 13663 gdb::optional<gdb::char_vector> xml
8b88a78e 13664 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
9018be22
SM
13665 if (xml)
13666 parse_xml_btrace_conf (conf, xml->data ());
f4abbc16
MM
13667}
13668
c0272db5
TW
13669/* Maybe reopen target btrace. */
13670
6b8edb51
PA
13671void
13672remote_target::remote_btrace_maybe_reopen ()
c0272db5
TW
13673{
13674 struct remote_state *rs = get_remote_state ();
c0272db5 13675 int btrace_target_pushed = 0;
15766370 13676#if !defined (HAVE_LIBIPT)
c0272db5 13677 int warned = 0;
15766370 13678#endif
c0272db5 13679
aedbe3bb
CM
13680 /* Don't bother walking the entirety of the remote thread list when
13681 we know the feature isn't supported by the remote. */
13682 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
13683 return;
13684
5ed8105e
PA
13685 scoped_restore_current_thread restore_thread;
13686
08036331 13687 for (thread_info *tp : all_non_exited_threads ())
c0272db5
TW
13688 {
13689 set_general_thread (tp->ptid);
13690
13691 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13692 btrace_read_config (&rs->btrace_config);
13693
13694 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13695 continue;
13696
13697#if !defined (HAVE_LIBIPT)
13698 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13699 {
13700 if (!warned)
13701 {
13702 warned = 1;
c4e12631
MM
13703 warning (_("Target is recording using Intel Processor Trace "
13704 "but support was disabled at compile time."));
c0272db5
TW
13705 }
13706
13707 continue;
13708 }
13709#endif /* !defined (HAVE_LIBIPT) */
13710
13711 /* Push target, once, but before anything else happens. This way our
13712 changes to the threads will be cleaned up by unpushing the target
13713 in case btrace_read_config () throws. */
13714 if (!btrace_target_pushed)
13715 {
13716 btrace_target_pushed = 1;
13717 record_btrace_push_target ();
13718 printf_filtered (_("Target is recording using %s.\n"),
13719 btrace_format_string (rs->btrace_config.format));
13720 }
13721
13722 tp->btrace.target = XCNEW (struct btrace_target_info);
13723 tp->btrace.target->ptid = tp->ptid;
13724 tp->btrace.target->conf = rs->btrace_config;
13725 }
c0272db5
TW
13726}
13727
9accd112
MM
13728/* Enable branch tracing. */
13729
f6ac5f3d
PA
13730struct btrace_target_info *
13731remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
9accd112
MM
13732{
13733 struct btrace_target_info *tinfo = NULL;
b20a6524 13734 struct packet_config *packet = NULL;
9accd112 13735 struct remote_state *rs = get_remote_state ();
8d64371b
TT
13736 char *buf = rs->buf.data ();
13737 char *endbuf = buf + get_remote_packet_size ();
9accd112 13738
b20a6524
MM
13739 switch (conf->format)
13740 {
13741 case BTRACE_FORMAT_BTS:
13742 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13743 break;
13744
13745 case BTRACE_FORMAT_PT:
13746 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13747 break;
13748 }
13749
13750 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13751 error (_("Target does not support branch tracing."));
13752
f4abbc16
MM
13753 btrace_sync_conf (conf);
13754
9accd112
MM
13755 set_general_thread (ptid);
13756
13757 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13758 putpkt (rs->buf);
8d64371b 13759 getpkt (&rs->buf, 0);
9accd112
MM
13760
13761 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13762 {
13763 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13764 error (_("Could not enable branch tracing for %s: %s"),
a068643d 13765 target_pid_to_str (ptid).c_str (), &rs->buf[2]);
9accd112
MM
13766 else
13767 error (_("Could not enable branch tracing for %s."),
a068643d 13768 target_pid_to_str (ptid).c_str ());
9accd112
MM
13769 }
13770
8d749320 13771 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
13772 tinfo->ptid = ptid;
13773
f4abbc16
MM
13774 /* If we fail to read the configuration, we lose some information, but the
13775 tracing itself is not impacted. */
a70b8144 13776 try
492d29ea
PA
13777 {
13778 btrace_read_config (&tinfo->conf);
13779 }
230d2906 13780 catch (const gdb_exception_error &err)
492d29ea
PA
13781 {
13782 if (err.message != NULL)
3d6e9d23 13783 warning ("%s", err.what ());
492d29ea 13784 }
f4abbc16 13785
9accd112
MM
13786 return tinfo;
13787}
13788
13789/* Disable branch tracing. */
13790
f6ac5f3d
PA
13791void
13792remote_target::disable_btrace (struct btrace_target_info *tinfo)
9accd112
MM
13793{
13794 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13795 struct remote_state *rs = get_remote_state ();
8d64371b
TT
13796 char *buf = rs->buf.data ();
13797 char *endbuf = buf + get_remote_packet_size ();
9accd112 13798
4082afcc 13799 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13800 error (_("Target does not support branch tracing."));
13801
13802 set_general_thread (tinfo->ptid);
13803
13804 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13805 putpkt (rs->buf);
8d64371b 13806 getpkt (&rs->buf, 0);
9accd112
MM
13807
13808 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13809 {
13810 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13811 error (_("Could not disable branch tracing for %s: %s"),
a068643d 13812 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]);
9accd112
MM
13813 else
13814 error (_("Could not disable branch tracing for %s."),
a068643d 13815 target_pid_to_str (tinfo->ptid).c_str ());
9accd112
MM
13816 }
13817
13818 xfree (tinfo);
13819}
13820
13821/* Teardown branch tracing. */
13822
f6ac5f3d
PA
13823void
13824remote_target::teardown_btrace (struct btrace_target_info *tinfo)
9accd112
MM
13825{
13826 /* We must not talk to the target during teardown. */
13827 xfree (tinfo);
13828}
13829
13830/* Read the branch trace. */
13831
f6ac5f3d
PA
13832enum btrace_error
13833remote_target::read_btrace (struct btrace_data *btrace,
13834 struct btrace_target_info *tinfo,
13835 enum btrace_read_type type)
9accd112
MM
13836{
13837 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
9accd112 13838 const char *annex;
9accd112 13839
4082afcc 13840 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13841 error (_("Target does not support branch tracing."));
13842
13843#if !defined(HAVE_LIBEXPAT)
13844 error (_("Cannot process branch tracing result. XML parsing not supported."));
13845#endif
13846
13847 switch (type)
13848 {
864089d2 13849 case BTRACE_READ_ALL:
9accd112
MM
13850 annex = "all";
13851 break;
864089d2 13852 case BTRACE_READ_NEW:
9accd112
MM
13853 annex = "new";
13854 break;
969c39fb
MM
13855 case BTRACE_READ_DELTA:
13856 annex = "delta";
13857 break;
9accd112
MM
13858 default:
13859 internal_error (__FILE__, __LINE__,
13860 _("Bad branch tracing read type: %u."),
13861 (unsigned int) type);
13862 }
13863
9018be22 13864 gdb::optional<gdb::char_vector> xml
8b88a78e 13865 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
9018be22 13866 if (!xml)
969c39fb 13867 return BTRACE_ERR_UNKNOWN;
9accd112 13868
9018be22 13869 parse_xml_btrace (btrace, xml->data ());
9accd112 13870
969c39fb 13871 return BTRACE_ERR_NONE;
9accd112
MM
13872}
13873
f6ac5f3d
PA
13874const struct btrace_config *
13875remote_target::btrace_conf (const struct btrace_target_info *tinfo)
f4abbc16
MM
13876{
13877 return &tinfo->conf;
13878}
13879
57810aa7 13880bool
f6ac5f3d 13881remote_target::augmented_libraries_svr4_read ()
ced63ec0 13882{
4082afcc
PA
13883 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13884 == PACKET_ENABLE);
ced63ec0
GB
13885}
13886
9dd130a0
TT
13887/* Implementation of to_load. */
13888
f6ac5f3d
PA
13889void
13890remote_target::load (const char *name, int from_tty)
9dd130a0
TT
13891{
13892 generic_load (name, from_tty);
13893}
13894
c78fa86a
GB
13895/* Accepts an integer PID; returns a string representing a file that
13896 can be opened on the remote side to get the symbols for the child
13897 process. Returns NULL if the operation is not supported. */
13898
f6ac5f3d
PA
13899char *
13900remote_target::pid_to_exec_file (int pid)
c78fa86a 13901{
9018be22 13902 static gdb::optional<gdb::char_vector> filename;
835205d0
GB
13903 struct inferior *inf;
13904 char *annex = NULL;
c78fa86a
GB
13905
13906 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13907 return NULL;
13908
835205d0
GB
13909 inf = find_inferior_pid (pid);
13910 if (inf == NULL)
13911 internal_error (__FILE__, __LINE__,
13912 _("not currently attached to process %d"), pid);
13913
13914 if (!inf->fake_pid_p)
13915 {
13916 const int annex_size = 9;
13917
224c3ddb 13918 annex = (char *) alloca (annex_size);
835205d0
GB
13919 xsnprintf (annex, annex_size, "%x", pid);
13920 }
13921
8b88a78e 13922 filename = target_read_stralloc (current_top_target (),
c78fa86a
GB
13923 TARGET_OBJECT_EXEC_FILE, annex);
13924
9018be22 13925 return filename ? filename->data () : nullptr;
c78fa86a
GB
13926}
13927
750ce8d1
YQ
13928/* Implement the to_can_do_single_step target_ops method. */
13929
f6ac5f3d
PA
13930int
13931remote_target::can_do_single_step ()
750ce8d1
YQ
13932{
13933 /* We can only tell whether target supports single step or not by
13934 supported s and S vCont actions if the stub supports vContSupported
13935 feature. If the stub doesn't support vContSupported feature,
13936 we have conservatively to think target doesn't supports single
13937 step. */
13938 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13939 {
13940 struct remote_state *rs = get_remote_state ();
13941
13942 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 13943 remote_vcont_probe ();
750ce8d1
YQ
13944
13945 return rs->supports_vCont.s && rs->supports_vCont.S;
13946 }
13947 else
13948 return 0;
13949}
13950
3a00c802
PA
13951/* Implementation of the to_execution_direction method for the remote
13952 target. */
13953
f6ac5f3d
PA
13954enum exec_direction_kind
13955remote_target::execution_direction ()
3a00c802
PA
13956{
13957 struct remote_state *rs = get_remote_state ();
13958
13959 return rs->last_resume_exec_dir;
13960}
13961
f6327dcb
KB
13962/* Return pointer to the thread_info struct which corresponds to
13963 THREAD_HANDLE (having length HANDLE_LEN). */
13964
f6ac5f3d
PA
13965thread_info *
13966remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
13967 int handle_len,
13968 inferior *inf)
f6327dcb 13969{
08036331 13970 for (thread_info *tp : all_non_exited_threads ())
f6327dcb 13971 {
7aabaf9d 13972 remote_thread_info *priv = get_remote_thread_info (tp);
f6327dcb
KB
13973
13974 if (tp->inf == inf && priv != NULL)
13975 {
7aabaf9d 13976 if (handle_len != priv->thread_handle.size ())
f6327dcb 13977 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
7aabaf9d
SM
13978 handle_len, priv->thread_handle.size ());
13979 if (memcmp (thread_handle, priv->thread_handle.data (),
f6327dcb
KB
13980 handle_len) == 0)
13981 return tp;
13982 }
13983 }
13984
13985 return NULL;
13986}
13987
3d6c6204
KB
13988gdb::byte_vector
13989remote_target::thread_info_to_thread_handle (struct thread_info *tp)
13990{
13991 remote_thread_info *priv = get_remote_thread_info (tp);
13992 return priv->thread_handle;
13993}
13994
57810aa7 13995bool
f6ac5f3d 13996remote_target::can_async_p ()
6426a772 13997{
5d93a237
TT
13998 struct remote_state *rs = get_remote_state ();
13999
3015c064
SM
14000 /* We don't go async if the user has explicitly prevented it with the
14001 "maint set target-async" command. */
c6ebd6cf 14002 if (!target_async_permitted)
57810aa7 14003 return false;
75c99385 14004
23860348 14005 /* We're async whenever the serial device is. */
5d93a237 14006 return serial_can_async_p (rs->remote_desc);
6426a772
JM
14007}
14008
57810aa7 14009bool
f6ac5f3d 14010remote_target::is_async_p ()
6426a772 14011{
5d93a237
TT
14012 struct remote_state *rs = get_remote_state ();
14013
c6ebd6cf 14014 if (!target_async_permitted)
75c99385 14015 /* We only enable async when the user specifically asks for it. */
57810aa7 14016 return false;
75c99385 14017
23860348 14018 /* We're async whenever the serial device is. */
5d93a237 14019 return serial_is_async_p (rs->remote_desc);
6426a772
JM
14020}
14021
2acceee2
JM
14022/* Pass the SERIAL event on and up to the client. One day this code
14023 will be able to delay notifying the client of an event until the
23860348 14024 point where an entire packet has been received. */
2acceee2 14025
2acceee2
JM
14026static serial_event_ftype remote_async_serial_handler;
14027
6426a772 14028static void
819cc324 14029remote_async_serial_handler (struct serial *scb, void *context)
6426a772 14030{
2acceee2
JM
14031 /* Don't propogate error information up to the client. Instead let
14032 the client find out about the error by querying the target. */
6a3753b3 14033 inferior_event_handler (INF_REG_EVENT, NULL);
2acceee2
JM
14034}
14035
74531fed
PA
14036static void
14037remote_async_inferior_event_handler (gdb_client_data data)
14038{
6b8edb51 14039 inferior_event_handler (INF_REG_EVENT, data);
74531fed
PA
14040}
14041
f6ac5f3d
PA
14042void
14043remote_target::async (int enable)
2acceee2 14044{
5d93a237
TT
14045 struct remote_state *rs = get_remote_state ();
14046
6a3753b3 14047 if (enable)
2acceee2 14048 {
88b496c3 14049 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
14050
14051 /* If there are pending events in the stop reply queue tell the
14052 event loop to process them. */
953edf2b 14053 if (!rs->stop_reply_queue.empty ())
6b8edb51 14054 mark_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14055 /* For simplicity, below we clear the pending events token
14056 without remembering whether it is marked, so here we always
14057 mark it. If there's actually no pending notification to
14058 process, this ends up being a no-op (other than a spurious
14059 event-loop wakeup). */
14060 if (target_is_non_stop_p ())
14061 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
14062 }
14063 else
b7d2e916
PA
14064 {
14065 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
14066 /* If the core is disabling async, it doesn't want to be
14067 disturbed with target events. Clear all async event sources
14068 too. */
6b8edb51 14069 clear_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14070 if (target_is_non_stop_p ())
14071 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 14072 }
6426a772
JM
14073}
14074
65706a29
PA
14075/* Implementation of the to_thread_events method. */
14076
f6ac5f3d
PA
14077void
14078remote_target::thread_events (int enable)
65706a29
PA
14079{
14080 struct remote_state *rs = get_remote_state ();
14081 size_t size = get_remote_packet_size ();
65706a29
PA
14082
14083 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14084 return;
14085
8d64371b 14086 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0);
65706a29 14087 putpkt (rs->buf);
8d64371b 14088 getpkt (&rs->buf, 0);
65706a29
PA
14089
14090 switch (packet_ok (rs->buf,
14091 &remote_protocol_packets[PACKET_QThreadEvents]))
14092 {
14093 case PACKET_OK:
8d64371b
TT
14094 if (strcmp (rs->buf.data (), "OK") != 0)
14095 error (_("Remote refused setting thread events: %s"), rs->buf.data ());
65706a29
PA
14096 break;
14097 case PACKET_ERROR:
8d64371b 14098 warning (_("Remote failure reply: %s"), rs->buf.data ());
65706a29
PA
14099 break;
14100 case PACKET_UNKNOWN:
14101 break;
14102 }
14103}
14104
5a2468f5 14105static void
981a3fb3 14106set_remote_cmd (const char *args, int from_tty)
5a2468f5 14107{
635c7e8a 14108 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
5a2468f5
JM
14109}
14110
d471ea57 14111static void
981a3fb3 14112show_remote_cmd (const char *args, int from_tty)
d471ea57 14113{
37a105a1 14114 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 14115 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 14116 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 14117 struct ui_out *uiout = current_uiout;
37a105a1 14118
2e783024 14119 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
14120 for (; list != NULL; list = list->next)
14121 if (strcmp (list->name, "Z-packet") == 0)
14122 continue;
427c3a89
DJ
14123 else if (list->type == not_set_cmd)
14124 /* Alias commands are exactly like the original, except they
14125 don't have the normal type. */
14126 continue;
14127 else
37a105a1 14128 {
2e783024 14129 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 14130
112e8700
SM
14131 uiout->field_string ("name", list->name);
14132 uiout->text (": ");
427c3a89 14133 if (list->type == show_cmd)
f5c4fcd9 14134 do_show_command (NULL, from_tty, list);
427c3a89
DJ
14135 else
14136 cmd_func (list, NULL, from_tty);
37a105a1 14137 }
d471ea57 14138}
5a2468f5 14139
0f71a2f6 14140
23860348 14141/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
14142static void
14143remote_new_objfile (struct objfile *objfile)
14144{
6b8edb51 14145 remote_target *remote = get_current_remote_target ();
5d93a237 14146
6b8edb51
PA
14147 if (remote != NULL) /* Have a remote connection. */
14148 remote->remote_check_symbols ();
dc8acb97
MS
14149}
14150
00bf0b85
SS
14151/* Pull all the tracepoints defined on the target and create local
14152 data structures representing them. We don't want to create real
14153 tracepoints yet, we don't want to mess up the user's existing
14154 collection. */
14155
f6ac5f3d
PA
14156int
14157remote_target::upload_tracepoints (struct uploaded_tp **utpp)
d5551862 14158{
00bf0b85
SS
14159 struct remote_state *rs = get_remote_state ();
14160 char *p;
d5551862 14161
00bf0b85
SS
14162 /* Ask for a first packet of tracepoint definition. */
14163 putpkt ("qTfP");
8d64371b
TT
14164 getpkt (&rs->buf, 0);
14165 p = rs->buf.data ();
00bf0b85 14166 while (*p && *p != 'l')
d5551862 14167 {
00bf0b85
SS
14168 parse_tracepoint_definition (p, utpp);
14169 /* Ask for another packet of tracepoint definition. */
14170 putpkt ("qTsP");
8d64371b
TT
14171 getpkt (&rs->buf, 0);
14172 p = rs->buf.data ();
d5551862 14173 }
00bf0b85 14174 return 0;
d5551862
SS
14175}
14176
f6ac5f3d
PA
14177int
14178remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
d5551862 14179{
00bf0b85 14180 struct remote_state *rs = get_remote_state ();
d5551862 14181 char *p;
d5551862 14182
00bf0b85
SS
14183 /* Ask for a first packet of variable definition. */
14184 putpkt ("qTfV");
8d64371b
TT
14185 getpkt (&rs->buf, 0);
14186 p = rs->buf.data ();
00bf0b85 14187 while (*p && *p != 'l')
d5551862 14188 {
00bf0b85
SS
14189 parse_tsv_definition (p, utsvp);
14190 /* Ask for another packet of variable definition. */
14191 putpkt ("qTsV");
8d64371b
TT
14192 getpkt (&rs->buf, 0);
14193 p = rs->buf.data ();
d5551862 14194 }
00bf0b85 14195 return 0;
d5551862
SS
14196}
14197
c1e36e3e
PA
14198/* The "set/show range-stepping" show hook. */
14199
14200static void
14201show_range_stepping (struct ui_file *file, int from_tty,
14202 struct cmd_list_element *c,
14203 const char *value)
14204{
14205 fprintf_filtered (file,
14206 _("Debugger's willingness to use range stepping "
14207 "is %s.\n"), value);
14208}
14209
6b8edb51
PA
14210/* Return true if the vCont;r action is supported by the remote
14211 stub. */
14212
14213bool
14214remote_target::vcont_r_supported ()
14215{
14216 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14217 remote_vcont_probe ();
14218
14219 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14220 && get_remote_state ()->supports_vCont.r);
14221}
14222
c1e36e3e
PA
14223/* The "set/show range-stepping" set hook. */
14224
14225static void
eb4c3f4a 14226set_range_stepping (const char *ignore_args, int from_tty,
c1e36e3e
PA
14227 struct cmd_list_element *c)
14228{
6b8edb51
PA
14229 /* When enabling, check whether range stepping is actually supported
14230 by the target, and warn if not. */
c1e36e3e
PA
14231 if (use_range_stepping)
14232 {
6b8edb51
PA
14233 remote_target *remote = get_current_remote_target ();
14234 if (remote == NULL
14235 || !remote->vcont_r_supported ())
14236 warning (_("Range stepping is not supported by the current target"));
c1e36e3e
PA
14237 }
14238}
14239
c906108c 14240void
fba45db2 14241_initialize_remote (void)
c906108c 14242{
9a7071a8 14243 struct cmd_list_element *cmd;
6f937416 14244 const char *cmd_name;
ea9c271d 14245
0f71a2f6 14246 /* architecture specific data */
29709017
DJ
14247 remote_g_packet_data_handle =
14248 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 14249
d9f719f1
PA
14250 add_target (remote_target_info, remote_target::open);
14251 add_target (extended_remote_target_info, extended_remote_target::open);
cce74817 14252
dc8acb97 14253 /* Hook into new objfile notification. */
76727919 14254 gdb::observers::new_objfile.attach (remote_new_objfile);
dc8acb97 14255
c906108c
SS
14256#if 0
14257 init_remote_threadtests ();
14258#endif
14259
23860348 14260 /* set/show remote ... */
d471ea57 14261
1bedd215 14262 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
590042fc 14263Remote protocol specific variables.\n\
5a2468f5 14264Configure various remote-protocol specific variables such as\n\
590042fc 14265the packets being used."),
cff3e48b 14266 &remote_set_cmdlist, "set remote ",
23860348 14267 0 /* allow-unknown */, &setlist);
1bedd215 14268 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
590042fc 14269Remote protocol specific variables.\n\
5a2468f5 14270Configure various remote-protocol specific variables such as\n\
590042fc 14271the packets being used."),
cff3e48b 14272 &remote_show_cmdlist, "show remote ",
23860348 14273 0 /* allow-unknown */, &showlist);
5a2468f5 14274
1a966eab
AC
14275 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14276Compare section data on target to the exec file.\n\
95cf3b38
DT
14277Argument is a single section name (default: all loaded sections).\n\
14278To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
14279 &cmdlist);
14280
1a966eab
AC
14281 add_cmd ("packet", class_maintenance, packet_command, _("\
14282Send an arbitrary packet to a remote target.\n\
c906108c
SS
14283 maintenance packet TEXT\n\
14284If GDB is talking to an inferior via the GDB serial protocol, then\n\
14285this command sends the string TEXT to the inferior, and displays the\n\
14286response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 14287terminating `#' character and checksum."),
c906108c
SS
14288 &maintenancelist);
14289
7915a72c
AC
14290 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14291Set whether to send break if interrupted."), _("\
14292Show whether to send break if interrupted."), _("\
14293If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14294 set_remotebreak, show_remotebreak,
e707bbc2 14295 &setlist, &showlist);
9a7071a8
JB
14296 cmd_name = "remotebreak";
14297 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14298 deprecate_cmd (cmd, "set remote interrupt-sequence");
14299 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14300 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14301 deprecate_cmd (cmd, "show remote interrupt-sequence");
14302
14303 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14304 interrupt_sequence_modes, &interrupt_sequence_mode,
14305 _("\
9a7071a8
JB
14306Set interrupt sequence to remote target."), _("\
14307Show interrupt sequence to remote target."), _("\
14308Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14309 NULL, show_interrupt_sequence,
14310 &remote_set_cmdlist,
14311 &remote_show_cmdlist);
14312
14313 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14314 &interrupt_on_connect, _("\
590042fc
PW
14315Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
14316Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
9a7071a8
JB
14317If set, interrupt sequence is sent to remote target."),
14318 NULL, NULL,
14319 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14320
23860348 14321 /* Install commands for configuring memory read/write packets. */
11cf8741 14322
1a966eab
AC
14323 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14324Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14325 &setlist);
1a966eab
AC
14326 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14327Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14328 &showlist);
14329 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14330 set_memory_write_packet_size, _("\
14331Set the maximum number of bytes per memory-write packet.\n\
14332Specify the number of bytes in a packet or 0 (zero) for the\n\
14333default packet size. The actual limit is further reduced\n\
14334dependent on the target. Specify ``fixed'' to disable the\n\
14335further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14336 &remote_set_cmdlist);
14337 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14338 set_memory_read_packet_size, _("\
14339Set the maximum number of bytes per memory-read packet.\n\
14340Specify the number of bytes in a packet or 0 (zero) for the\n\
14341default packet size. The actual limit is further reduced\n\
14342dependent on the target. Specify ``fixed'' to disable the\n\
14343further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14344 &remote_set_cmdlist);
14345 add_cmd ("memory-write-packet-size", no_class,
14346 show_memory_write_packet_size,
1a966eab 14347 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14348 &remote_show_cmdlist);
14349 add_cmd ("memory-read-packet-size", no_class,
14350 show_memory_read_packet_size,
1a966eab 14351 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14352 &remote_show_cmdlist);
c906108c 14353
055303e2 14354 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14355 &remote_hw_watchpoint_limit, _("\
14356Set the maximum number of target hardware watchpoints."), _("\
14357Show the maximum number of target hardware watchpoints."), _("\
055303e2
AB
14358Specify \"unlimited\" for unlimited hardware watchpoints."),
14359 NULL, show_hardware_watchpoint_limit,
14360 &remote_set_cmdlist,
14361 &remote_show_cmdlist);
14362 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
14363 no_class,
480a3f21
PW
14364 &remote_hw_watchpoint_length_limit, _("\
14365Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14366Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
055303e2
AB
14367Specify \"unlimited\" to allow watchpoints of unlimited size."),
14368 NULL, show_hardware_watchpoint_length_limit,
480a3f21 14369 &remote_set_cmdlist, &remote_show_cmdlist);
055303e2 14370 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14371 &remote_hw_breakpoint_limit, _("\
14372Set the maximum number of target hardware breakpoints."), _("\
14373Show the maximum number of target hardware breakpoints."), _("\
055303e2
AB
14374Specify \"unlimited\" for unlimited hardware breakpoints."),
14375 NULL, show_hardware_breakpoint_limit,
b3f42336 14376 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 14377
1b493192
PA
14378 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14379 &remote_address_size, _("\
4d28ad1e
AC
14380Set the maximum size of the address (in bits) in a memory packet."), _("\
14381Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
14382 NULL,
14383 NULL, /* FIXME: i18n: */
14384 &setlist, &showlist);
c906108c 14385
ca4f7f8b
PA
14386 init_all_packet_configs ();
14387
444abaca 14388 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 14389 "X", "binary-download", 1);
0f71a2f6 14390
444abaca 14391 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 14392 "vCont", "verbose-resume", 0);
506fb367 14393
89be2091
DJ
14394 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14395 "QPassSignals", "pass-signals", 0);
14396
82075af2
JS
14397 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14398 "QCatchSyscalls", "catch-syscalls", 0);
14399
9b224c5e
PA
14400 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14401 "QProgramSignals", "program-signals", 0);
14402
bc3b087d
SDJ
14403 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14404 "QSetWorkingDir", "set-working-dir", 0);
14405
aefd8b33
SDJ
14406 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14407 "QStartupWithShell", "startup-with-shell", 0);
14408
0a2dde4a
SDJ
14409 add_packet_config_cmd (&remote_protocol_packets
14410 [PACKET_QEnvironmentHexEncoded],
14411 "QEnvironmentHexEncoded", "environment-hex-encoded",
14412 0);
14413
14414 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14415 "QEnvironmentReset", "environment-reset",
14416 0);
14417
14418 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14419 "QEnvironmentUnset", "environment-unset",
14420 0);
14421
444abaca 14422 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 14423 "qSymbol", "symbol-lookup", 0);
dc8acb97 14424
444abaca 14425 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 14426 "P", "set-register", 1);
d471ea57 14427
444abaca 14428 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 14429 "p", "fetch-register", 1);
b96ec7ac 14430
444abaca 14431 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 14432 "Z0", "software-breakpoint", 0);
d471ea57 14433
444abaca 14434 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 14435 "Z1", "hardware-breakpoint", 0);
d471ea57 14436
444abaca 14437 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 14438 "Z2", "write-watchpoint", 0);
d471ea57 14439
444abaca 14440 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 14441 "Z3", "read-watchpoint", 0);
d471ea57 14442
444abaca 14443 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 14444 "Z4", "access-watchpoint", 0);
d471ea57 14445
0876f84a
DJ
14446 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14447 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 14448
c78fa86a
GB
14449 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14450 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14451
23181151
DJ
14452 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14453 "qXfer:features:read", "target-features", 0);
14454
cfa9d6d9
DJ
14455 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14456 "qXfer:libraries:read", "library-info", 0);
14457
2268b414
JK
14458 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14459 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14460
fd79ecee
DJ
14461 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14462 "qXfer:memory-map:read", "memory-map", 0);
14463
07e059b5
VP
14464 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14465 "qXfer:osdata:read", "osdata", 0);
14466
dc146f7c
VP
14467 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14468 "qXfer:threads:read", "threads", 0);
14469
4aa995e1
PA
14470 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14471 "qXfer:siginfo:read", "read-siginfo-object", 0);
14472
14473 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14474 "qXfer:siginfo:write", "write-siginfo-object", 0);
14475
b3b9301e
PA
14476 add_packet_config_cmd
14477 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14478 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14479
169081d0
TG
14480 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14481 "qXfer:uib:read", "unwind-info-block", 0);
14482
444abaca 14483 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14484 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14485 0);
14486
711e434b
PM
14487 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14488 "qGetTIBAddr", "get-thread-information-block-address",
14489 0);
14490
40ab02ce
MS
14491 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14492 "bc", "reverse-continue", 0);
14493
14494 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14495 "bs", "reverse-step", 0);
14496
be2a5f71
DJ
14497 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14498 "qSupported", "supported-packets", 0);
14499
08388c79
DE
14500 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14501 "qSearch:memory", "search-memory", 0);
14502
bd3eecc3
PA
14503 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14504 "qTStatus", "trace-status", 0);
14505
15a201c8
GB
14506 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14507 "vFile:setfs", "hostio-setfs", 0);
14508
a6b151f1
DJ
14509 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14510 "vFile:open", "hostio-open", 0);
14511
14512 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14513 "vFile:pread", "hostio-pread", 0);
14514
14515 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14516 "vFile:pwrite", "hostio-pwrite", 0);
14517
14518 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14519 "vFile:close", "hostio-close", 0);
14520
14521 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14522 "vFile:unlink", "hostio-unlink", 0);
14523
b9e7b9c3
UW
14524 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14525 "vFile:readlink", "hostio-readlink", 0);
14526
0a93529c
GB
14527 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14528 "vFile:fstat", "hostio-fstat", 0);
14529
2d717e4f
DJ
14530 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14531 "vAttach", "attach", 0);
14532
14533 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14534 "vRun", "run", 0);
14535
a6f3e723
SL
14536 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14537 "QStartNoAckMode", "noack", 0);
14538
82f73884
PA
14539 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14540 "vKill", "kill", 0);
14541
0b16c5cf
PA
14542 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14543 "qAttached", "query-attached", 0);
14544
782b2b07 14545 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14546 "ConditionalTracepoints",
14547 "conditional-tracepoints", 0);
3788aec7
LM
14548
14549 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14550 "ConditionalBreakpoints",
14551 "conditional-breakpoints", 0);
14552
d3ce09f5
SS
14553 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14554 "BreakpointCommands",
14555 "breakpoint-commands", 0);
14556
7a697b8d
SS
14557 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14558 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14559
409873ef
SS
14560 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14561 "TracepointSource", "TracepointSource", 0);
14562
d914c394
SS
14563 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14564 "QAllow", "allow", 0);
14565
0fb4aa4b
PA
14566 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14567 "StaticTracepoints", "static-tracepoints", 0);
14568
1e4d1764
YQ
14569 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14570 "InstallInTrace", "install-in-trace", 0);
14571
0fb4aa4b
PA
14572 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14573 "qXfer:statictrace:read", "read-sdata-object", 0);
14574
78d85199
YQ
14575 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14576 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14577
03583c20
UW
14578 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14579 "QDisableRandomization", "disable-randomization", 0);
14580
d1feda86
YQ
14581 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14582 "QAgent", "agent", 0);
14583
f6f899bf
HAQ
14584 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14585 "QTBuffer:size", "trace-buffer-size", 0);
14586
9accd112
MM
14587 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14588 "Qbtrace:off", "disable-btrace", 0);
14589
14590 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14591 "Qbtrace:bts", "enable-btrace-bts", 0);
14592
14593 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14594 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14595
14596 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14597 "qXfer:btrace", "read-btrace", 0);
14598
f4abbc16
MM
14599 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14600 "qXfer:btrace-conf", "read-btrace-conf", 0);
14601
d33501a5
MM
14602 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14603 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14604
73b8c1fd
PA
14605 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14606 "multiprocess-feature", "multiprocess-feature", 0);
14607
f7e6eed5
PA
14608 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14609 "swbreak-feature", "swbreak-feature", 0);
14610
14611 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14612 "hwbreak-feature", "hwbreak-feature", 0);
14613
89245bc0
DB
14614 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14615 "fork-event-feature", "fork-event-feature", 0);
14616
14617 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14618 "vfork-event-feature", "vfork-event-feature", 0);
14619
b20a6524
MM
14620 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14621 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14622
750ce8d1
YQ
14623 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14624 "vContSupported", "verbose-resume-supported", 0);
14625
94585166
DB
14626 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14627 "exec-event-feature", "exec-event-feature", 0);
14628
de979965
PA
14629 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14630 "vCtrlC", "ctrl-c", 0);
14631
65706a29
PA
14632 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14633 "QThreadEvents", "thread-events", 0);
14634
f2faf941
PA
14635 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14636 "N stop reply", "no-resumed-stop-reply", 0);
14637
0b736949
DB
14638 /* Assert that we've registered "set remote foo-packet" commands
14639 for all packet configs. */
ca4f7f8b
PA
14640 {
14641 int i;
14642
14643 for (i = 0; i < PACKET_MAX; i++)
14644 {
14645 /* Ideally all configs would have a command associated. Some
14646 still don't though. */
14647 int excepted;
14648
14649 switch (i)
14650 {
14651 case PACKET_QNonStop:
ca4f7f8b
PA
14652 case PACKET_EnableDisableTracepoints_feature:
14653 case PACKET_tracenz_feature:
14654 case PACKET_DisconnectedTracing_feature:
14655 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14656 case PACKET_qCRC:
14657 /* Additions to this list need to be well justified:
14658 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14659 excepted = 1;
14660 break;
14661 default:
14662 excepted = 0;
14663 break;
14664 }
14665
14666 /* This catches both forgetting to add a config command, and
14667 forgetting to remove a packet from the exception list. */
14668 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14669 }
14670 }
14671
37a105a1
DJ
14672 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14673 Z sub-packet has its own set and show commands, but users may
14674 have sets to this variable in their .gdbinit files (or in their
14675 documentation). */
e9e68a56 14676 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c 14677 &remote_Z_packet_detect, _("\
590042fc
PW
14678Set use of remote protocol `Z' packets."), _("\
14679Show use of remote protocol `Z' packets."), _("\
3b64bf98 14680When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14681packets."),
e9e68a56 14682 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14683 show_remote_protocol_Z_packet_cmd,
14684 /* FIXME: i18n: Use of remote protocol
14685 `Z' packets is %s. */
e9e68a56 14686 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14687
a6b151f1 14688 add_prefix_cmd ("remote", class_files, remote_command, _("\
590042fc 14689Manipulate files on the remote system.\n\
a6b151f1
DJ
14690Transfer files to and from the remote target system."),
14691 &remote_cmdlist, "remote ",
14692 0 /* allow-unknown */, &cmdlist);
14693
14694 add_cmd ("put", class_files, remote_put_command,
14695 _("Copy a local file to the remote system."),
14696 &remote_cmdlist);
14697
14698 add_cmd ("get", class_files, remote_get_command,
14699 _("Copy a remote file to the local system."),
14700 &remote_cmdlist);
14701
14702 add_cmd ("delete", class_files, remote_delete_command,
14703 _("Delete a remote file."),
14704 &remote_cmdlist);
14705
2d717e4f 14706 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 14707 &remote_exec_file_var, _("\
590042fc
PW
14708Set the remote pathname for \"run\"."), _("\
14709Show the remote pathname for \"run\"."), NULL,
94585166
DB
14710 set_remote_exec_file,
14711 show_remote_exec_file,
14712 &remote_set_cmdlist,
14713 &remote_show_cmdlist);
2d717e4f 14714
c1e36e3e
PA
14715 add_setshow_boolean_cmd ("range-stepping", class_run,
14716 &use_range_stepping, _("\
14717Enable or disable range stepping."), _("\
14718Show whether target-assisted range stepping is enabled."), _("\
14719If on, and the target supports it, when stepping a source line, GDB\n\
14720tells the target to step the corresponding range of addresses itself instead\n\
14721of issuing multiple single-steps. This speeds up source level\n\
14722stepping. If off, GDB always issues single-steps, even if range\n\
14723stepping is supported by the target. The default is on."),
14724 set_range_stepping,
14725 show_range_stepping,
14726 &setlist,
14727 &showlist);
14728
ed2b7c17
TT
14729 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
14730Set watchdog timer."), _("\
14731Show watchdog timer."), _("\
14732When non-zero, this timeout is used instead of waiting forever for a target\n\
14733to finish a low-level step or continue operation. If the specified amount\n\
14734of time passes without a response from the target, an error occurs."),
14735 NULL,
14736 show_watchdog,
14737 &setlist, &showlist);
14738
449092f6
CV
14739 /* Eventually initialize fileio. See fileio.c */
14740 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
c906108c 14741}
This page took 5.721284 seconds and 4 git commands to generate.