]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/remote.c
* testsuite/nds32/ji-jr.d: Fix name tag.
[thirdparty/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
e2882c85 3 Copyright (C) 1988-2018 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"
c5aa993b 30/*#include "terminal.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"
614c279d 45#include "filestuff.h"
9c3d6531 46#include "rsp-low.h"
6b940e6a 47#include "disasm.h"
f00aae0f 48#include "location.h"
c906108c 49
438e1e42 50#include "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"
d1feda86 71#include "agent.h"
9accd112 72#include "btrace.h"
c0272db5 73#include "record-btrace.h"
325fac50 74#include <algorithm>
2ec845e7 75#include "common/scoped_restore.h"
0a2dde4a 76#include "environ.h"
f6327dcb 77#include "common/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;
953edf2b 99static void stop_reply_xfree (struct stop_reply *);
6b8edb51 100
953edf2b
TT
101struct stop_reply_deleter
102{
103 void operator() (stop_reply *r) const
104 {
105 stop_reply_xfree (r);
106 }
107};
108
109typedef std::unique_ptr<stop_reply, stop_reply_deleter> stop_reply_up;
6b8edb51
PA
110
111/* Generic configuration support for packets the stub optionally
112 supports. Allows the user to specify the use of the packet as well
113 as allowing GDB to auto-detect support in the remote stub. */
114
115enum packet_support
116 {
117 PACKET_SUPPORT_UNKNOWN = 0,
118 PACKET_ENABLE,
119 PACKET_DISABLE
120 };
121
122/* Analyze a packet's return value and update the packet config
123 accordingly. */
124
125enum packet_result
126{
127 PACKET_ERROR,
128 PACKET_OK,
129 PACKET_UNKNOWN
130};
131
132struct threads_listing_context;
3c69da40
PA
133
134/* Stub vCont actions support.
135
136 Each field is a boolean flag indicating whether the stub reports
137 support for the corresponding action. */
138
139struct vCont_action_support
140{
141 /* vCont;t */
142 bool t = false;
143
144 /* vCont;r */
145 bool r = false;
146
147 /* vCont;s */
148 bool s = false;
149
150 /* vCont;S */
151 bool S = false;
152};
153
154/* About this many threadisds fit in a packet. */
155
156#define MAXTHREADLISTRESULTS 32
157
158/* Data for the vFile:pread readahead cache. */
159
160struct readahead_cache
161{
162 /* Invalidate the readahead cache. */
163 void invalidate ();
164
165 /* Invalidate the readahead cache if it is holding data for FD. */
166 void invalidate_fd (int fd);
167
168 /* Serve pread from the readahead cache. Returns number of bytes
169 read, or 0 if the request can't be served from the cache. */
170 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
171
172 /* The file descriptor for the file that is being cached. -1 if the
173 cache is invalid. */
174 int fd = -1;
175
176 /* The offset into the file that the cache buffer corresponds
177 to. */
178 ULONGEST offset = 0;
179
180 /* The buffer holding the cache contents. */
181 gdb_byte *buf = nullptr;
182 /* The buffer's size. We try to read as much as fits into a packet
183 at a time. */
184 size_t bufsize = 0;
185
186 /* Cache hit and miss counters. */
187 ULONGEST hit_count = 0;
188 ULONGEST miss_count = 0;
189};
190
191/* Description of the remote protocol for a given architecture. */
192
193struct packet_reg
194{
195 long offset; /* Offset into G packet. */
196 long regnum; /* GDB's internal register number. */
197 LONGEST pnum; /* Remote protocol register number. */
198 int in_g_packet; /* Always part of G packet. */
199 /* long size in bytes; == register_size (target_gdbarch (), regnum);
200 at present. */
201 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
202 at present. */
203};
204
205struct remote_arch_state
206{
207 explicit remote_arch_state (struct gdbarch *gdbarch);
208
209 /* Description of the remote protocol registers. */
210 long sizeof_g_packet;
211
212 /* Description of the remote protocol registers indexed by REGNUM
213 (making an array gdbarch_num_regs in size). */
214 std::unique_ptr<packet_reg[]> regs;
215
216 /* This is the size (in chars) of the first response to the ``g''
217 packet. It is used as a heuristic when determining the maximum
218 size of memory-read and memory-write packets. A target will
219 typically only reserve a buffer large enough to hold the ``g''
220 packet. The size does not include packet overhead (headers and
221 trailers). */
222 long actual_register_packet_size;
223
224 /* This is the maximum size (in chars) of a non read/write packet.
225 It is also used as a cap on the size of read/write packets. */
226 long remote_packet_size;
227};
228
229/* Description of the remote protocol state for the currently
230 connected target. This is per-target state, and independent of the
231 selected architecture. */
232
233class remote_state
234{
235public:
236
237 remote_state ();
238 ~remote_state ();
239
240 /* Get the remote arch state for GDBARCH. */
241 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
242
243public: /* data */
244
245 /* A buffer to use for incoming packets, and its current size. The
246 buffer is grown dynamically for larger incoming packets.
247 Outgoing packets may also be constructed in this buffer.
248 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
249 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
250 packets. */
251 char *buf;
252 long buf_size;
253
254 /* True if we're going through initial connection setup (finding out
255 about the remote side's threads, relocating symbols, etc.). */
256 bool starting_up = false;
257
258 /* If we negotiated packet size explicitly (and thus can bypass
259 heuristics for the largest packet size that will not overflow
260 a buffer in the stub), this will be set to that packet size.
261 Otherwise zero, meaning to use the guessed size. */
262 long explicit_packet_size = 0;
263
264 /* remote_wait is normally called when the target is running and
265 waits for a stop reply packet. But sometimes we need to call it
266 when the target is already stopped. We can send a "?" packet
267 and have remote_wait read the response. Or, if we already have
268 the response, we can stash it in BUF and tell remote_wait to
269 skip calling getpkt. This flag is set when BUF contains a
270 stop reply packet and the target is not waiting. */
271 int cached_wait_status = 0;
272
273 /* True, if in no ack mode. That is, neither GDB nor the stub will
274 expect acks from each other. The connection is assumed to be
275 reliable. */
276 bool noack_mode = false;
277
278 /* True if we're connected in extended remote mode. */
279 bool extended = false;
280
281 /* True if we resumed the target and we're waiting for the target to
282 stop. In the mean time, we can't start another command/query.
283 The remote server wouldn't be ready to process it, so we'd
284 timeout waiting for a reply that would never come and eventually
285 we'd close the connection. This can happen in asynchronous mode
286 because we allow GDB commands while the target is running. */
287 bool waiting_for_stop_reply = false;
288
289 /* The status of the stub support for the various vCont actions. */
290 vCont_action_support supports_vCont;
291
292 /* True if the user has pressed Ctrl-C, but the target hasn't
293 responded to that. */
294 bool ctrlc_pending_p = false;
295
296 /* True if we saw a Ctrl-C while reading or writing from/to the
297 remote descriptor. At that point it is not safe to send a remote
298 interrupt packet, so we instead remember we saw the Ctrl-C and
299 process it once we're done with sending/receiving the current
300 packet, which should be shortly. If however that takes too long,
301 and the user presses Ctrl-C again, we offer to disconnect. */
302 bool got_ctrlc_during_io = false;
303
304 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
305 remote_open knows that we don't have a file open when the program
306 starts. */
307 struct serial *remote_desc = nullptr;
308
309 /* These are the threads which we last sent to the remote system. The
310 TID member will be -1 for all or -2 for not sent yet. */
311 ptid_t general_thread = null_ptid;
312 ptid_t continue_thread = null_ptid;
313
314 /* This is the traceframe which we last selected on the remote system.
315 It will be -1 if no traceframe is selected. */
316 int remote_traceframe_number = -1;
317
318 char *last_pass_packet = nullptr;
319
320 /* The last QProgramSignals packet sent to the target. We bypass
321 sending a new program signals list down to the target if the new
322 packet is exactly the same as the last we sent. IOW, we only let
323 the target know about program signals list changes. */
324 char *last_program_signals_packet = nullptr;
325
326 gdb_signal last_sent_signal = GDB_SIGNAL_0;
327
328 bool last_sent_step = false;
329
330 /* The execution direction of the last resume we got. */
331 exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
332
333 char *finished_object = nullptr;
334 char *finished_annex = nullptr;
335 ULONGEST finished_offset = 0;
336
337 /* Should we try the 'ThreadInfo' query packet?
338
339 This variable (NOT available to the user: auto-detect only!)
340 determines whether GDB will use the new, simpler "ThreadInfo"
341 query or the older, more complex syntax for thread queries.
342 This is an auto-detect variable (set to true at each connect,
343 and set to false when the target fails to recognize it). */
344 bool use_threadinfo_query = false;
345 bool use_threadextra_query = false;
346
347 threadref echo_nextthread {};
348 threadref nextthread {};
349 threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
350
351 /* The state of remote notification. */
352 struct remote_notif_state *notif_state = nullptr;
353
354 /* The branch trace configuration. */
355 struct btrace_config btrace_config {};
356
357 /* The argument to the last "vFile:setfs:" packet we sent, used
358 to avoid sending repeated unnecessary "vFile:setfs:" packets.
359 Initialized to -1 to indicate that no "vFile:setfs:" packet
360 has yet been sent. */
361 int fs_pid = -1;
362
363 /* A readahead cache for vFile:pread. Often, reading a binary
364 involves a sequence of small reads. E.g., when parsing an ELF
365 file. A readahead cache helps mostly the case of remote
366 debugging on a connection with higher latency, due to the
367 request/reply nature of the RSP. We only cache data for a single
368 file descriptor at a time. */
369 struct readahead_cache readahead_cache;
370
371 /* The list of already fetched and acknowledged stop events. This
372 queue is used for notification Stop, and other notifications
373 don't need queue for their events, because the notification
374 events of Stop can't be consumed immediately, so that events
375 should be queued first, and be consumed by remote_wait_{ns,as}
376 one per time. Other notifications can consume their events
377 immediately, so queue is not needed for them. */
953edf2b 378 std::vector<stop_reply_up> stop_reply_queue;
3c69da40
PA
379
380 /* Asynchronous signal handle registered as event loop source for
381 when we have pending events ready to be passed to the core. */
382 struct async_event_handler *remote_async_inferior_event_token = nullptr;
383
384 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
385 ``forever'' still use the normal timeout mechanism. This is
386 currently used by the ASYNC code to guarentee that target reads
387 during the initial connect always time-out. Once getpkt has been
388 modified to return a timeout indication and, in turn
389 remote_wait()/wait_for_inferior() have gained a timeout parameter
390 this can go away. */
391 int wait_forever_enabled_p = 1;
392
393private:
394 /* Mapping of remote protocol data for each gdbarch. Usually there
395 is only one entry here, though we may see more with stubs that
396 support multi-process. */
397 std::unordered_map<struct gdbarch *, remote_arch_state>
398 m_arch_states;
399};
6b8edb51 400
d9f719f1
PA
401static const target_info remote_target_info = {
402 "remote",
403 N_("Remote serial target in gdb-specific protocol"),
404 remote_doc
405};
406
f6ac5f3d
PA
407class remote_target : public target_ops
408{
409public:
410 remote_target ()
411 {
412 to_stratum = process_stratum;
413 }
6b8edb51 414 ~remote_target () override;
f6ac5f3d 415
d9f719f1
PA
416 const target_info &info () const override
417 { return remote_target_info; }
f6ac5f3d
PA
418
419 thread_control_capabilities get_thread_control_capabilities () override
420 { return tc_schedlock; }
421
d9f719f1
PA
422 /* Open a remote connection. */
423 static void open (const char *, int);
424
f6ac5f3d
PA
425 void close () override;
426
427 void detach (inferior *, int) override;
428 void disconnect (const char *, int) override;
429
430 void commit_resume () override;
431 void resume (ptid_t, int, enum gdb_signal) override;
432 ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
433
434 void fetch_registers (struct regcache *, int) override;
435 void store_registers (struct regcache *, int) override;
436 void prepare_to_store (struct regcache *) override;
437
438 void files_info () override;
439
440 int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
441
442 int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
443 enum remove_bp_reason) override;
444
445
57810aa7
PA
446 bool stopped_by_sw_breakpoint () override;
447 bool supports_stopped_by_sw_breakpoint () override;
f6ac5f3d 448
57810aa7 449 bool stopped_by_hw_breakpoint () override;
f6ac5f3d 450
57810aa7 451 bool supports_stopped_by_hw_breakpoint () override;
f6ac5f3d 452
57810aa7 453 bool stopped_by_watchpoint () override;
f6ac5f3d 454
57810aa7 455 bool stopped_data_address (CORE_ADDR *) override;
f6ac5f3d 456
57810aa7 457 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
f6ac5f3d
PA
458
459 int can_use_hw_breakpoint (enum bptype, int, int) override;
460
461 int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
462
463 int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
464
465 int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
466
467 int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
468 struct expression *) override;
469
470 int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
471 struct expression *) override;
472
473 void kill () override;
474
475 void load (const char *, int) override;
476
477 void mourn_inferior () override;
478
479 void pass_signals (int, unsigned char *) override;
480
481 int set_syscall_catchpoint (int, bool, int,
482 gdb::array_view<const int>) override;
483
484 void program_signals (int, unsigned char *) override;
485
57810aa7 486 bool thread_alive (ptid_t ptid) override;
f6ac5f3d
PA
487
488 const char *thread_name (struct thread_info *) override;
489
490 void update_thread_list () override;
491
492 const char *pid_to_str (ptid_t) override;
493
494 const char *extra_thread_info (struct thread_info *) override;
495
496 ptid_t get_ada_task_ptid (long lwp, long thread) override;
497
498 thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
499 int handle_len,
500 inferior *inf) override;
501
502 void stop (ptid_t) override;
503
504 void interrupt () override;
505
506 void pass_ctrlc () override;
507
508 enum target_xfer_status xfer_partial (enum target_object object,
509 const char *annex,
510 gdb_byte *readbuf,
511 const gdb_byte *writebuf,
512 ULONGEST offset, ULONGEST len,
513 ULONGEST *xfered_len) override;
514
515 ULONGEST get_memory_xfer_limit () override;
516
517 void rcmd (const char *command, struct ui_file *output) override;
518
519 char *pid_to_exec_file (int pid) override;
520
521 void log_command (const char *cmd) override
522 {
523 serial_log_command (this, cmd);
524 }
525
526 CORE_ADDR get_thread_local_address (ptid_t ptid,
527 CORE_ADDR load_module_addr,
528 CORE_ADDR offset) override;
529
57810aa7
PA
530 bool has_all_memory () override { return default_child_has_all_memory (); }
531 bool has_memory () override { return default_child_has_memory (); }
532 bool has_stack () override { return default_child_has_stack (); }
533 bool has_registers () override { return default_child_has_registers (); }
534 bool has_execution (ptid_t ptid) override { return default_child_has_execution (ptid); }
f6ac5f3d 535
57810aa7 536 bool can_execute_reverse () override;
f6ac5f3d
PA
537
538 std::vector<mem_region> memory_map () override;
539
540 void flash_erase (ULONGEST address, LONGEST length) override;
541
542 void flash_done () override;
543
544 const struct target_desc *read_description () override;
545
546 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
547 const gdb_byte *pattern, ULONGEST pattern_len,
548 CORE_ADDR *found_addrp) override;
549
57810aa7 550 bool can_async_p () override;
f6ac5f3d 551
57810aa7 552 bool is_async_p () override;
f6ac5f3d
PA
553
554 void async (int) override;
555
556 void thread_events (int) override;
557
558 int can_do_single_step () override;
559
560 void terminal_inferior () override;
561
562 void terminal_ours () override;
563
57810aa7 564 bool supports_non_stop () override;
f6ac5f3d 565
57810aa7 566 bool supports_multi_process () override;
f6ac5f3d 567
57810aa7 568 bool supports_disable_randomization () override;
f6ac5f3d 569
57810aa7 570 bool filesystem_is_local () override;
f6ac5f3d
PA
571
572
573 int fileio_open (struct inferior *inf, const char *filename,
574 int flags, int mode, int warn_if_slow,
575 int *target_errno) override;
576
577 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
578 ULONGEST offset, int *target_errno) override;
579
580 int fileio_pread (int fd, gdb_byte *read_buf, int len,
581 ULONGEST offset, int *target_errno) override;
582
583 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
584
585 int fileio_close (int fd, int *target_errno) override;
586
587 int fileio_unlink (struct inferior *inf,
588 const char *filename,
589 int *target_errno) override;
590
591 gdb::optional<std::string>
592 fileio_readlink (struct inferior *inf,
593 const char *filename,
594 int *target_errno) override;
595
57810aa7 596 bool supports_enable_disable_tracepoint () override;
f6ac5f3d 597
57810aa7 598 bool supports_string_tracing () override;
f6ac5f3d 599
57810aa7 600 bool supports_evaluation_of_breakpoint_conditions () override;
f6ac5f3d 601
57810aa7 602 bool can_run_breakpoint_commands () override;
f6ac5f3d
PA
603
604 void trace_init () override;
605
606 void download_tracepoint (struct bp_location *location) override;
607
57810aa7 608 bool can_download_tracepoint () override;
f6ac5f3d
PA
609
610 void download_trace_state_variable (const trace_state_variable &tsv) override;
611
612 void enable_tracepoint (struct bp_location *location) override;
613
614 void disable_tracepoint (struct bp_location *location) override;
615
616 void trace_set_readonly_regions () override;
617
618 void trace_start () override;
619
620 int get_trace_status (struct trace_status *ts) override;
621
622 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
623 override;
624
625 void trace_stop () override;
626
627 int trace_find (enum trace_find_type type, int num,
628 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
629
57810aa7 630 bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
f6ac5f3d
PA
631
632 int save_trace_data (const char *filename) override;
633
634 int upload_tracepoints (struct uploaded_tp **utpp) override;
635
636 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
637
638 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
639
640 int get_min_fast_tracepoint_insn_len () override;
641
642 void set_disconnected_tracing (int val) override;
643
644 void set_circular_trace_buffer (int val) override;
645
646 void set_trace_buffer_size (LONGEST val) override;
647
57810aa7
PA
648 bool set_trace_notes (const char *user, const char *notes,
649 const char *stopnotes) override;
f6ac5f3d
PA
650
651 int core_of_thread (ptid_t ptid) override;
652
653 int verify_memory (const gdb_byte *data,
654 CORE_ADDR memaddr, ULONGEST size) override;
655
656
57810aa7 657 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
f6ac5f3d
PA
658
659 void set_permissions () override;
660
661 bool static_tracepoint_marker_at (CORE_ADDR,
662 struct static_tracepoint_marker *marker)
663 override;
664
665 std::vector<static_tracepoint_marker>
666 static_tracepoint_markers_by_strid (const char *id) override;
667
668 traceframe_info_up traceframe_info () override;
669
57810aa7
PA
670 bool use_agent (bool use) override;
671 bool can_use_agent () override;
f6ac5f3d
PA
672
673 struct btrace_target_info *enable_btrace (ptid_t ptid,
674 const struct btrace_config *conf) override;
675
676 void disable_btrace (struct btrace_target_info *tinfo) override;
677
678 void teardown_btrace (struct btrace_target_info *tinfo) override;
679
680 enum btrace_error read_btrace (struct btrace_data *data,
681 struct btrace_target_info *btinfo,
682 enum btrace_read_type type) override;
683
684 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
57810aa7 685 bool augmented_libraries_svr4_read () override;
f6ac5f3d
PA
686 int follow_fork (int, int) override;
687 void follow_exec (struct inferior *, char *) override;
688 int insert_fork_catchpoint (int) override;
689 int remove_fork_catchpoint (int) override;
690 int insert_vfork_catchpoint (int) override;
691 int remove_vfork_catchpoint (int) override;
692 int insert_exec_catchpoint (int) override;
693 int remove_exec_catchpoint (int) override;
694 enum exec_direction_kind execution_direction () override;
695
6b8edb51
PA
696public: /* Remote specific methods. */
697
698 void remote_download_command_source (int num, ULONGEST addr,
699 struct command_line *cmds);
700
701 void remote_file_put (const char *local_file, const char *remote_file,
702 int from_tty);
703 void remote_file_get (const char *remote_file, const char *local_file,
704 int from_tty);
705 void remote_file_delete (const char *remote_file, int from_tty);
706
707 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
708 ULONGEST offset, int *remote_errno);
709 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
710 ULONGEST offset, int *remote_errno);
711 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
712 ULONGEST offset, int *remote_errno);
713
714 int remote_hostio_send_command (int command_bytes, int which_packet,
715 int *remote_errno, char **attachment,
716 int *attachment_len);
717 int remote_hostio_set_filesystem (struct inferior *inf,
718 int *remote_errno);
719 /* We should get rid of this and use fileio_open directly. */
720 int remote_hostio_open (struct inferior *inf, const char *filename,
721 int flags, int mode, int warn_if_slow,
722 int *remote_errno);
723 int remote_hostio_close (int fd, int *remote_errno);
724
725 int remote_hostio_unlink (inferior *inf, const char *filename,
726 int *remote_errno);
727
728 struct remote_state *get_remote_state ();
729
730 long get_remote_packet_size (void);
731 long get_memory_packet_size (struct memory_packet_config *config);
732
733 long get_memory_write_packet_size ();
734 long get_memory_read_packet_size ();
735
736 char *append_pending_thread_resumptions (char *p, char *endp,
737 ptid_t ptid);
d9f719f1 738 static void open_1 (const char *name, int from_tty, int extended_p);
f6ac5f3d 739 void start_remote (int from_tty, int extended_p);
00431a78 740 void remote_detach_1 (struct inferior *inf, int from_tty);
6b8edb51
PA
741
742 char *append_resumption (char *p, char *endp,
743 ptid_t ptid, int step, gdb_signal siggnal);
744 int remote_resume_with_vcont (ptid_t ptid, int step,
745 gdb_signal siggnal);
746
747 void add_current_inferior_and_thread (char *wait_status);
748
749 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
750 int options);
751 ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
752 int options);
753
754 ptid_t process_stop_reply (struct stop_reply *stop_reply,
755 target_waitstatus *status);
756
757 void remote_notice_new_inferior (ptid_t currthread, int executing);
758
759 void process_initial_stop_replies (int from_tty);
760
00431a78 761 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing);
6b8edb51
PA
762
763 void btrace_sync_conf (const btrace_config *conf);
764
765 void remote_btrace_maybe_reopen ();
766
767 void remove_new_fork_children (threads_listing_context *context);
768 void kill_new_fork_children (int pid);
769 void discard_pending_stop_replies (struct inferior *inf);
770 int stop_reply_queue_length ();
771
772 void check_pending_events_prevent_wildcard_vcont
773 (int *may_global_wildcard_vcont);
774
775 void discard_pending_stop_replies_in_queue ();
776 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
777 struct stop_reply *queued_stop_reply (ptid_t ptid);
778 int peek_stop_reply (ptid_t ptid);
779 void remote_parse_stop_reply (char *buf, stop_reply *event);
780
781 void remote_stop_ns (ptid_t ptid);
782 void remote_interrupt_as ();
783 void remote_interrupt_ns ();
784
785 char *remote_get_noisy_reply ();
786 int remote_query_attached (int pid);
787 inferior *remote_add_inferior (int fake_pid_p, int pid, int attached,
788 int try_open_exec);
789
790 ptid_t remote_current_thread (ptid_t oldpid);
791 ptid_t get_current_thread (char *wait_status);
792
793 void set_thread (ptid_t ptid, int gen);
794 void set_general_thread (ptid_t ptid);
795 void set_continue_thread (ptid_t ptid);
796 void set_general_process ();
797
798 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
799
800 int remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
801 gdb_ext_thread_info *info);
802 int remote_get_threadinfo (threadref *threadid, int fieldset,
803 gdb_ext_thread_info *info);
804
805 int parse_threadlist_response (char *pkt, int result_limit,
806 threadref *original_echo,
807 threadref *resultlist,
808 int *doneflag);
809 int remote_get_threadlist (int startflag, threadref *nextthread,
810 int result_limit, int *done, int *result_count,
811 threadref *threadlist);
812
813 int remote_threadlist_iterator (rmt_thread_action stepfunction,
814 void *context, int looplimit);
815
816 int remote_get_threads_with_ql (threads_listing_context *context);
817 int remote_get_threads_with_qxfer (threads_listing_context *context);
818 int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
819
820 void extended_remote_restart ();
821
822 void get_offsets ();
823
824 void remote_check_symbols ();
825
826 void remote_supported_packet (const struct protocol_feature *feature,
827 enum packet_support support,
828 const char *argument);
829
830 void remote_query_supported ();
831
832 void remote_packet_size (const protocol_feature *feature,
833 packet_support support, const char *value);
834
835 void remote_serial_quit_handler ();
836
837 void remote_detach_pid (int pid);
838
839 void remote_vcont_probe ();
840
841 void remote_resume_with_hc (ptid_t ptid, int step,
842 gdb_signal siggnal);
843
844 void send_interrupt_sequence ();
845 void interrupt_query ();
846
847 void remote_notif_get_pending_events (notif_client *nc);
848
849 int fetch_register_using_p (struct regcache *regcache,
850 packet_reg *reg);
851 int send_g_packet ();
852 void process_g_packet (struct regcache *regcache);
853 void fetch_registers_using_g (struct regcache *regcache);
854 int store_register_using_P (const struct regcache *regcache,
855 packet_reg *reg);
856 void store_registers_using_G (const struct regcache *regcache);
857
858 void set_remote_traceframe ();
859
860 void check_binary_download (CORE_ADDR addr);
861
862 target_xfer_status remote_write_bytes_aux (const char *header,
863 CORE_ADDR memaddr,
864 const gdb_byte *myaddr,
865 ULONGEST len_units,
866 int unit_size,
867 ULONGEST *xfered_len_units,
868 char packet_format,
869 int use_length);
870
871 target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
872 const gdb_byte *myaddr, ULONGEST len,
873 int unit_size, ULONGEST *xfered_len);
874
875 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
876 ULONGEST len_units,
877 int unit_size, ULONGEST *xfered_len_units);
878
879 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
880 ULONGEST memaddr,
881 ULONGEST len,
882 int unit_size,
883 ULONGEST *xfered_len);
884
885 target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
886 gdb_byte *myaddr, ULONGEST len,
887 int unit_size,
888 ULONGEST *xfered_len);
889
890 packet_result remote_send_printf (const char *format, ...)
891 ATTRIBUTE_PRINTF (2, 3);
892
893 target_xfer_status remote_flash_write (ULONGEST address,
894 ULONGEST length, ULONGEST *xfered_len,
895 const gdb_byte *data);
896
897 int readchar (int timeout);
898
899 void remote_serial_write (const char *str, int len);
900
901 int putpkt (const char *buf);
902 int putpkt_binary (const char *buf, int cnt);
903
904 void skip_frame ();
905 long read_frame (char **buf_p, long *sizeof_buf);
906 void getpkt (char **buf, long *sizeof_buf, int forever);
907 int getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
908 int expecting_notif, int *is_notif);
909 int getpkt_sane (char **buf, long *sizeof_buf, int forever);
910 int getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
911 int *is_notif);
912 int remote_vkill (int pid);
913 void remote_kill_k ();
914
915 void extended_remote_disable_randomization (int val);
916 int extended_remote_run (const std::string &args);
917
918 void send_environment_packet (const char *action,
919 const char *packet,
920 const char *value);
921
922 void extended_remote_environment_support ();
3c69da40 923 void extended_remote_set_inferior_cwd ();
80152258 924
3c69da40
PA
925 target_xfer_status remote_write_qxfer (const char *object_name,
926 const char *annex,
927 const gdb_byte *writebuf,
928 ULONGEST offset, LONGEST len,
929 ULONGEST *xfered_len,
930 struct packet_config *packet);
43c3a0e4 931
3c69da40
PA
932 target_xfer_status remote_read_qxfer (const char *object_name,
933 const char *annex,
934 gdb_byte *readbuf, ULONGEST offset,
935 LONGEST len,
936 ULONGEST *xfered_len,
937 struct packet_config *packet);
43c3a0e4 938
3c69da40 939 void push_stop_reply (struct stop_reply *new_event);
43c3a0e4 940
3c69da40 941 bool vcont_r_supported ();
43c3a0e4 942
3c69da40 943 void packet_command (const char *args, int from_tty);
43c3a0e4 944
3c69da40 945private: /* data fields */
43c3a0e4 946
3c69da40
PA
947 /* The remote state. Don't reference this directly. Use the
948 get_remote_state method instead. */
949 remote_state m_remote_state;
43c3a0e4
PA
950};
951
3c69da40
PA
952static const target_info extended_remote_target_info = {
953 "extended-remote",
954 N_("Extended remote serial target in gdb-specific protocol"),
955 remote_doc
956};
ea9c271d 957
3c69da40
PA
958/* Set up the extended remote target by extending the standard remote
959 target and adding to it. */
960
961class extended_remote_target final : public remote_target
ea9c271d 962{
9d6eea31 963public:
3c69da40
PA
964 const target_info &info () const override
965 { return extended_remote_target_info; }
9d6eea31 966
3c69da40
PA
967 /* Open an extended-remote connection. */
968 static void open (const char *, int);
de44f5a7 969
3c69da40
PA
970 bool can_create_inferior () override { return true; }
971 void create_inferior (const char *, const std::string &,
972 char **, int) override;
9d6eea31 973
3c69da40 974 void detach (inferior *, int) override;
9d6eea31 975
3c69da40
PA
976 bool can_attach () override { return true; }
977 void attach (const char *, int) override;
be2a5f71 978
3c69da40
PA
979 void post_attach (int) override;
980 bool supports_disable_randomization () override;
981};
1e51243a 982
3c69da40
PA
983/* Per-program-space data key. */
984static const struct program_space_data *remote_pspace_data;
2d717e4f 985
3c69da40
PA
986/* The variable registered as the control variable used by the
987 remote exec-file commands. While the remote exec-file setting is
988 per-program-space, the set/show machinery uses this as the
989 location of the remote exec-file value. */
990static char *remote_exec_file_var;
a6f3e723 991
3c69da40
PA
992/* The size to align memory write packets, when practical. The protocol
993 does not guarantee any alignment, and gdb will generate short
994 writes and unaligned writes, but even as a best-effort attempt this
995 can improve bulk transfers. For instance, if a write is misaligned
996 relative to the target's data bus, the stub may need to make an extra
997 round trip fetching data from the target. This doesn't make a
998 huge difference, but it's easy to do, so we try to be helpful.
82f73884 999
3c69da40
PA
1000 The alignment chosen is arbitrary; usually data bus width is
1001 important here, not the possibly larger cache line size. */
1002enum { REMOTE_ALIGN_WRITES = 16 };
82f73884 1003
3c69da40 1004/* Prototypes for local functions. */
74531fed 1005
3c69da40 1006static int hexnumlen (ULONGEST num);
782b2b07 1007
3c69da40 1008static int stubhex (int ch);
5d93a237 1009
3c69da40 1010static int hexnumstr (char *, ULONGEST);
048094ac 1011
3c69da40 1012static int hexnumnstr (char *, ULONGEST, int);
47f8a51d 1013
3c69da40 1014static CORE_ADDR remote_address_masked (CORE_ADDR);
262e1174 1015
3c69da40 1016static void print_packet (const char *);
747dc59d 1017
3c69da40 1018static int stub_unpack_int (char *buff, int fieldlength);
5e4a05c4 1019
3c69da40 1020struct packet_config;
b73be471 1021
3c69da40 1022static void show_packet_config_cmd (struct packet_config *config);
280ceea3 1023
3c69da40
PA
1024static void show_remote_protocol_packet_cmd (struct ui_file *file,
1025 int from_tty,
1026 struct cmd_list_element *c,
1027 const char *value);
8e88304f 1028
3c69da40 1029static ptid_t read_ptid (const char *buf, const char **obuf);
3a00c802 1030
3c69da40 1031static void remote_async_inferior_event_handler (gdb_client_data);
b80fafe3 1032
3c69da40 1033static int remote_read_description_p (struct target_ops *target);
88b496c3 1034
3c69da40 1035static void remote_console_output (char *msg);
5965e028 1036
3c69da40 1037static void remote_btrace_reset (remote_state *rs);
f4abbc16 1038
3c69da40 1039static void remote_unpush_and_throw (void);
15a201c8 1040
3c69da40 1041/* For "remote". */
80152258 1042
3c69da40 1043static struct cmd_list_element *remote_cmdlist;
9d6eea31 1044
3c69da40 1045/* For "set remote" and "show remote". */
6b8edb51 1046
3c69da40
PA
1047static struct cmd_list_element *remote_set_cmdlist;
1048static struct cmd_list_element *remote_show_cmdlist;
6b8edb51 1049
3c69da40 1050/* Controls whether GDB is willing to use range stepping. */
6b8edb51 1051
3c69da40
PA
1052static int use_range_stepping = 1;
1053
1054/* The max number of chars in debug output. The rest of chars are
1055 omitted. */
1056
1057#define REMOTE_DEBUG_MAX_CHAR 512
ea9c271d 1058
7aabaf9d
SM
1059/* Private data that we'll store in (struct thread_info)->priv. */
1060struct remote_thread_info : public private_thread_info
dc146f7c 1061{
7aabaf9d
SM
1062 std::string extra;
1063 std::string name;
1064 int core = -1;
799a2abe 1065
f6327dcb
KB
1066 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1067 sequence of bytes. */
7aabaf9d 1068 gdb::byte_vector thread_handle;
f6327dcb 1069
799a2abe 1070 /* Whether the target stopped for a breakpoint/watchpoint. */
7aabaf9d 1071 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
799a2abe
PA
1072
1073 /* This is set to the data address of the access causing the target
1074 to stop for a watchpoint. */
7aabaf9d 1075 CORE_ADDR watch_data_address = 0;
85ad3aaf
PA
1076
1077 /* Fields used by the vCont action coalescing implemented in
1078 remote_resume / remote_commit_resume. remote_resume stores each
1079 thread's last resume request in these fields, so that a later
1080 remote_commit_resume knows which is the proper action for this
1081 thread to include in the vCont packet. */
1082
1083 /* True if the last target_resume call for this thread was a step
1084 request, false if a continue request. */
7aabaf9d 1085 int last_resume_step = 0;
85ad3aaf
PA
1086
1087 /* The signal specified in the last target_resume call for this
1088 thread. */
7aabaf9d 1089 gdb_signal last_resume_sig = GDB_SIGNAL_0;
85ad3aaf
PA
1090
1091 /* Whether this thread was already vCont-resumed on the remote
1092 side. */
7aabaf9d 1093 int vcont_resumed = 0;
dc146f7c
VP
1094};
1095
de44f5a7
PA
1096remote_state::remote_state ()
1097{
1098 /* The default buffer size is unimportant; it will be expanded
1099 whenever a larger buffer is needed. */
1100 this->buf_size = 400;
1101 this->buf = (char *) xmalloc (this->buf_size);
1102}
1103
1104remote_state::~remote_state ()
1105{
1106 xfree (this->last_pass_packet);
1107 xfree (this->last_program_signals_packet);
1108 xfree (this->buf);
1109 xfree (this->finished_object);
1110 xfree (this->finished_annex);
cf792862
TT
1111}
1112
35b1e5cc
SS
1113/* Utility: generate error from an incoming stub packet. */
1114static void
1115trace_error (char *buf)
1116{
1117 if (*buf++ != 'E')
1118 return; /* not an error msg */
1119 switch (*buf)
1120 {
1121 case '1': /* malformed packet error */
1122 if (*++buf == '0') /* general case: */
1123 error (_("remote.c: error in outgoing packet."));
1124 else
1125 error (_("remote.c: error in outgoing packet at field #%ld."),
1126 strtol (buf, NULL, 16));
35b1e5cc
SS
1127 default:
1128 error (_("Target returns error code '%s'."), buf);
1129 }
1130}
1131
1132/* Utility: wait for reply from stub, while accepting "O" packets. */
b6bb3468 1133
6b8edb51
PA
1134char *
1135remote_target::remote_get_noisy_reply ()
35b1e5cc 1136{
b6bb3468
PA
1137 struct remote_state *rs = get_remote_state ();
1138
35b1e5cc
SS
1139 do /* Loop on reply from remote stub. */
1140 {
1141 char *buf;
a744cf53 1142
0df8b418 1143 QUIT; /* Allow user to bail out with ^C. */
b6bb3468
PA
1144 getpkt (&rs->buf, &rs->buf_size, 0);
1145 buf = rs->buf;
ad91cd99 1146 if (buf[0] == 'E')
35b1e5cc 1147 trace_error (buf);
61012eef 1148 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
1149 {
1150 ULONGEST ul;
1151 CORE_ADDR from, to, org_to;
256642e8 1152 const char *p, *pp;
dde08ee1 1153 int adjusted_size = 0;
7556d4a4 1154 int relocated = 0;
dde08ee1
PA
1155
1156 p = buf + strlen ("qRelocInsn:");
1157 pp = unpack_varlen_hex (p, &ul);
1158 if (*pp != ';')
cb91c06a 1159 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
1160 from = ul;
1161
1162 p = pp + 1;
a9cbf802 1163 unpack_varlen_hex (p, &ul);
dde08ee1
PA
1164 to = ul;
1165
1166 org_to = to;
1167
492d29ea 1168 TRY
dde08ee1 1169 {
f5656ead 1170 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 1171 relocated = 1;
dde08ee1 1172 }
492d29ea 1173 CATCH (ex, RETURN_MASK_ALL)
7556d4a4
PA
1174 {
1175 if (ex.error == MEMORY_ERROR)
1176 {
1177 /* Propagate memory errors silently back to the
1178 target. The stub may have limited the range of
1179 addresses we can write to, for example. */
1180 }
1181 else
1182 {
1183 /* Something unexpectedly bad happened. Be verbose
1184 so we can tell what, and propagate the error back
1185 to the stub, so it doesn't get stuck waiting for
1186 a response. */
1187 exception_fprintf (gdb_stderr, ex,
1188 _("warning: relocating instruction: "));
1189 }
1190 putpkt ("E01");
1191 }
492d29ea 1192 END_CATCH
7556d4a4
PA
1193
1194 if (relocated)
dde08ee1
PA
1195 {
1196 adjusted_size = to - org_to;
1197
b6bb3468 1198 xsnprintf (buf, rs->buf_size, "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
1199 putpkt (buf);
1200 }
dde08ee1 1201 }
ad91cd99 1202 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
1203 remote_console_output (buf + 1); /* 'O' message from stub */
1204 else
0df8b418 1205 return buf; /* Here's the actual reply. */
35b1e5cc
SS
1206 }
1207 while (1);
1208}
3c3bea1c 1209
9d6eea31
PA
1210struct remote_arch_state *
1211remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
d01949b6 1212{
43c3a0e4
PA
1213 remote_arch_state *rsa;
1214
1215 auto it = this->m_arch_states.find (gdbarch);
1216 if (it == this->m_arch_states.end ())
9d6eea31 1217 {
43c3a0e4
PA
1218 auto p = this->m_arch_states.emplace (std::piecewise_construct,
1219 std::forward_as_tuple (gdbarch),
1220 std::forward_as_tuple (gdbarch));
1221 rsa = &p.first->second;
9d6eea31
PA
1222
1223 /* Make sure that the packet buffer is plenty big enough for
1224 this architecture. */
1225 if (this->buf_size < rsa->remote_packet_size)
1226 {
1227 this->buf_size = 2 * rsa->remote_packet_size;
1228 this->buf = (char *) xrealloc (this->buf, this->buf_size);
1229 }
1230 }
43c3a0e4
PA
1231 else
1232 rsa = &it->second;
1233
1234 return rsa;
d01949b6
AC
1235}
1236
0b83947e
DJ
1237/* Fetch the global remote target state. */
1238
6b8edb51
PA
1239remote_state *
1240remote_target::get_remote_state ()
0b83947e
DJ
1241{
1242 /* Make sure that the remote architecture state has been
1243 initialized, because doing so might reallocate rs->buf. Any
1244 function which calls getpkt also needs to be mindful of changes
1245 to rs->buf, but this call limits the number of places which run
1246 into trouble. */
3c69da40 1247 m_remote_state.get_remote_arch_state (target_gdbarch ());
0b83947e 1248
3c69da40 1249 return &m_remote_state;
0b83947e
DJ
1250}
1251
94585166
DB
1252/* Cleanup routine for the remote module's pspace data. */
1253
1254static void
1255remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
1256{
19ba03f4 1257 char *remote_exec_file = (char *) arg;
94585166
DB
1258
1259 xfree (remote_exec_file);
1260}
1261
1262/* Fetch the remote exec-file from the current program space. */
1263
1264static const char *
1265get_remote_exec_file (void)
1266{
1267 char *remote_exec_file;
1268
19ba03f4
SM
1269 remote_exec_file
1270 = (char *) program_space_data (current_program_space,
1271 remote_pspace_data);
94585166
DB
1272 if (remote_exec_file == NULL)
1273 return "";
1274
1275 return remote_exec_file;
1276}
1277
1278/* Set the remote exec file for PSPACE. */
1279
1280static void
1281set_pspace_remote_exec_file (struct program_space *pspace,
1282 char *remote_exec_file)
1283{
19ba03f4 1284 char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
94585166
DB
1285
1286 xfree (old_file);
1287 set_program_space_data (pspace, remote_pspace_data,
1288 xstrdup (remote_exec_file));
1289}
1290
1291/* The "set/show remote exec-file" set command hook. */
1292
1293static void
eb4c3f4a 1294set_remote_exec_file (const char *ignored, int from_tty,
94585166
DB
1295 struct cmd_list_element *c)
1296{
1297 gdb_assert (remote_exec_file_var != NULL);
1298 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1299}
1300
1301/* The "set/show remote exec-file" show command hook. */
1302
1303static void
1304show_remote_exec_file (struct ui_file *file, int from_tty,
1305 struct cmd_list_element *cmd, const char *value)
1306{
1307 fprintf_filtered (file, "%s\n", remote_exec_file_var);
1308}
1309
74ca34ce
DJ
1310static int
1311compare_pnums (const void *lhs_, const void *rhs_)
1312{
19ba03f4
SM
1313 const struct packet_reg * const *lhs
1314 = (const struct packet_reg * const *) lhs_;
1315 const struct packet_reg * const *rhs
1316 = (const struct packet_reg * const *) rhs_;
74ca34ce
DJ
1317
1318 if ((*lhs)->pnum < (*rhs)->pnum)
1319 return -1;
1320 else if ((*lhs)->pnum == (*rhs)->pnum)
1321 return 0;
1322 else
1323 return 1;
1324}
1325
c21236dc
PA
1326static int
1327map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 1328{
74ca34ce 1329 int regnum, num_remote_regs, offset;
74ca34ce 1330 struct packet_reg **remote_regs;
ea9c271d 1331
4a22f64d 1332 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 1333 {
c21236dc 1334 struct packet_reg *r = &regs[regnum];
baef701f 1335
4a22f64d 1336 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
1337 /* Do not try to fetch zero-sized (placeholder) registers. */
1338 r->pnum = -1;
1339 else
1340 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1341
b323314b 1342 r->regnum = regnum;
74ca34ce
DJ
1343 }
1344
1345 /* Define the g/G packet format as the contents of each register
1346 with a remote protocol number, in order of ascending protocol
1347 number. */
1348
224c3ddb 1349 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 1350 for (num_remote_regs = 0, regnum = 0;
4a22f64d 1351 regnum < gdbarch_num_regs (gdbarch);
f57d151a 1352 regnum++)
c21236dc
PA
1353 if (regs[regnum].pnum != -1)
1354 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 1355
74ca34ce
DJ
1356 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
1357 compare_pnums);
1358
1359 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1360 {
1361 remote_regs[regnum]->in_g_packet = 1;
1362 remote_regs[regnum]->offset = offset;
4a22f64d 1363 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
1364 }
1365
c21236dc
PA
1366 return offset;
1367}
1368
1369/* Given the architecture described by GDBARCH, return the remote
1370 protocol register's number and the register's offset in the g/G
1371 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1372 If the target does not have a mapping for REGNUM, return false,
1373 otherwise, return true. */
1374
1375int
1376remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1377 int *pnum, int *poffset)
1378{
c21236dc
PA
1379 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1380
b80406ac 1381 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
c21236dc 1382
b80406ac 1383 map_regcache_remote_table (gdbarch, regs.data ());
c21236dc
PA
1384
1385 *pnum = regs[regnum].pnum;
1386 *poffset = regs[regnum].offset;
1387
c21236dc
PA
1388 return *pnum != -1;
1389}
1390
9d6eea31 1391remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
c21236dc 1392{
c21236dc
PA
1393 /* Use the architecture to build a regnum<->pnum table, which will be
1394 1:1 unless a feature set specifies otherwise. */
9d6eea31 1395 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
c21236dc 1396
74ca34ce
DJ
1397 /* Record the maximum possible size of the g packet - it may turn out
1398 to be smaller. */
9d6eea31
PA
1399 this->sizeof_g_packet
1400 = map_regcache_remote_table (gdbarch, this->regs.get ());
74ca34ce 1401
0df8b418 1402 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
1403 remote stubs have a hardwired buffer size of 400 bytes
1404 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1405 as the maximum packet-size to ensure that the packet and an extra
1406 NUL character can always fit in the buffer. This stops GDB
1407 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d 1408 already a full buffer (As of 1999-12-04 that was most stubs). */
9d6eea31 1409 this->remote_packet_size = 400 - 1;
d01949b6 1410
ea9c271d 1411 /* This one is filled in when a ``g'' packet is received. */
9d6eea31 1412 this->actual_register_packet_size = 0;
ea9c271d
DJ
1413
1414 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
1415 default, adjust the size accordingly. Remember that each byte is
1416 encoded as two characters. 32 is the overhead for the packet
1417 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 1418 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 1419 little. */
9d6eea31
PA
1420 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1421 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
ea9c271d
DJ
1422}
1423
6b8edb51
PA
1424/* Get a pointer to the current remote target. If not connected to a
1425 remote target, return NULL. */
1426
1427static remote_target *
1428get_current_remote_target ()
1429{
1430 target_ops *proc_target = find_target_at (process_stratum);
1431 return dynamic_cast<remote_target *> (proc_target);
1432}
1433
ea9c271d
DJ
1434/* Return the current allowed size of a remote packet. This is
1435 inferred from the current architecture, and should be used to
1436 limit the length of outgoing packets. */
6b8edb51
PA
1437long
1438remote_target::get_remote_packet_size ()
ea9c271d 1439{
be2a5f71 1440 struct remote_state *rs = get_remote_state ();
9d6eea31 1441 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1442
be2a5f71
DJ
1443 if (rs->explicit_packet_size)
1444 return rs->explicit_packet_size;
1445
ea9c271d 1446 return rsa->remote_packet_size;
d01949b6
AC
1447}
1448
ad10f812 1449static struct packet_reg *
5cd63fda
PA
1450packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1451 long regnum)
ad10f812 1452{
5cd63fda 1453 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
b323314b
AC
1454 return NULL;
1455 else
ad10f812 1456 {
ea9c271d 1457 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 1458
b323314b
AC
1459 gdb_assert (r->regnum == regnum);
1460 return r;
ad10f812 1461 }
ad10f812
AC
1462}
1463
1464static struct packet_reg *
5cd63fda
PA
1465packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1466 LONGEST pnum)
ad10f812 1467{
b323314b 1468 int i;
a744cf53 1469
5cd63fda 1470 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
ad10f812 1471 {
ea9c271d 1472 struct packet_reg *r = &rsa->regs[i];
a744cf53 1473
b323314b
AC
1474 if (r->pnum == pnum)
1475 return r;
ad10f812
AC
1476 }
1477 return NULL;
d01949b6
AC
1478}
1479
9a7071a8
JB
1480/* Allow the user to specify what sequence to send to the remote
1481 when he requests a program interruption: Although ^C is usually
1482 what remote systems expect (this is the default, here), it is
1483 sometimes preferable to send a break. On other systems such
1484 as the Linux kernel, a break followed by g, which is Magic SysRq g
1485 is required in order to interrupt the execution. */
1486const char interrupt_sequence_control_c[] = "Ctrl-C";
1487const char interrupt_sequence_break[] = "BREAK";
1488const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 1489static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
1490 {
1491 interrupt_sequence_control_c,
1492 interrupt_sequence_break,
1493 interrupt_sequence_break_g,
1494 NULL
1495 };
1496static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1497
1498static void
1499show_interrupt_sequence (struct ui_file *file, int from_tty,
1500 struct cmd_list_element *c,
1501 const char *value)
1502{
1503 if (interrupt_sequence_mode == interrupt_sequence_control_c)
1504 fprintf_filtered (file,
1505 _("Send the ASCII ETX character (Ctrl-c) "
1506 "to the remote target to interrupt the "
1507 "execution of the program.\n"));
1508 else if (interrupt_sequence_mode == interrupt_sequence_break)
1509 fprintf_filtered (file,
1510 _("send a break signal to the remote target "
1511 "to interrupt the execution of the program.\n"));
1512 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1513 fprintf_filtered (file,
1514 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1515 "the remote target to interrupt the execution "
1516 "of Linux kernel.\n"));
1517 else
1518 internal_error (__FILE__, __LINE__,
1519 _("Invalid value for interrupt_sequence_mode: %s."),
1520 interrupt_sequence_mode);
1521}
6426a772 1522
9a7071a8
JB
1523/* This boolean variable specifies whether interrupt_sequence is sent
1524 to the remote target when gdb connects to it.
1525 This is mostly needed when you debug the Linux kernel: The Linux kernel
1526 expects BREAK g which is Magic SysRq g for connecting gdb. */
1527static int interrupt_on_connect = 0;
c906108c 1528
9a7071a8
JB
1529/* This variable is used to implement the "set/show remotebreak" commands.
1530 Since these commands are now deprecated in favor of "set/show remote
1531 interrupt-sequence", it no longer has any effect on the code. */
c906108c
SS
1532static int remote_break;
1533
9a7071a8 1534static void
eb4c3f4a 1535set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
9a7071a8
JB
1536{
1537 if (remote_break)
1538 interrupt_sequence_mode = interrupt_sequence_break;
1539 else
1540 interrupt_sequence_mode = interrupt_sequence_control_c;
1541}
1542
1543static void
1544show_remotebreak (struct ui_file *file, int from_tty,
1545 struct cmd_list_element *c,
1546 const char *value)
1547{
1548}
1549
c906108c
SS
1550/* This variable sets the number of bits in an address that are to be
1551 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 1552 leading zeros, the entire address would be sent. This variable
c906108c
SS
1553 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1554 initial implementation of remote.c restricted the address sent in
1555 memory packets to ``host::sizeof long'' bytes - (typically 32
1556 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1557 address was never sent. Since fixing this bug may cause a break in
1558 some remote targets this variable is principly provided to
23860348 1559 facilitate backward compatibility. */
c906108c 1560
883b9c6c 1561static unsigned int remote_address_size;
c906108c 1562
11cf8741 1563\f
11cf8741 1564/* User configurable variables for the number of characters in a
ea9c271d
DJ
1565 memory read/write packet. MIN (rsa->remote_packet_size,
1566 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 1567 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
1568 (speed up transfers). The variables ``preferred_*'' (the user
1569 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1570 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1571
1572struct memory_packet_config
1573{
a121b7c1 1574 const char *name;
11cf8741
JM
1575 long size;
1576 int fixed_p;
1577};
1578
cc0be08f
PA
1579/* The default max memory-write-packet-size, when the setting is
1580 "fixed". The 16k is historical. (It came from older GDB's using
1581 alloca for buffers and the knowledge (folklore?) that some hosts
1582 don't cope very well with large alloca calls.) */
1583#define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
a5c0808e
PA
1584
1585/* The minimum remote packet size for memory transfers. Ensures we
1586 can write at least one byte. */
1587#define MIN_MEMORY_PACKET_SIZE 20
1588
cc0be08f
PA
1589/* Get the memory packet size, assuming it is fixed. */
1590
1591static long
1592get_fixed_memory_packet_size (struct memory_packet_config *config)
1593{
1594 gdb_assert (config->fixed_p);
1595
1596 if (config->size <= 0)
1597 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1598 else
1599 return config->size;
1600}
1601
11cf8741
JM
1602/* Compute the current size of a read/write packet. Since this makes
1603 use of ``actual_register_packet_size'' the computation is dynamic. */
1604
6b8edb51
PA
1605long
1606remote_target::get_memory_packet_size (struct memory_packet_config *config)
11cf8741 1607{
d01949b6 1608 struct remote_state *rs = get_remote_state ();
9d6eea31 1609 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
ea9c271d 1610
11cf8741
JM
1611 long what_they_get;
1612 if (config->fixed_p)
cc0be08f 1613 what_they_get = get_fixed_memory_packet_size (config);
11cf8741
JM
1614 else
1615 {
ea9c271d 1616 what_they_get = get_remote_packet_size ();
23860348 1617 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1618 if (config->size > 0
1619 && what_they_get > config->size)
1620 what_they_get = config->size;
be2a5f71
DJ
1621
1622 /* Limit it to the size of the targets ``g'' response unless we have
1623 permission from the stub to use a larger packet size. */
1624 if (rs->explicit_packet_size == 0
1625 && rsa->actual_register_packet_size > 0
1626 && what_they_get > rsa->actual_register_packet_size)
1627 what_they_get = rsa->actual_register_packet_size;
11cf8741 1628 }
a5c0808e
PA
1629 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1630 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1631
1632 /* Make sure there is room in the global buffer for this packet
1633 (including its trailing NUL byte). */
1634 if (rs->buf_size < what_they_get + 1)
1635 {
1636 rs->buf_size = 2 * what_they_get;
224c3ddb 1637 rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
6d820c5c
DJ
1638 }
1639
11cf8741
JM
1640 return what_they_get;
1641}
1642
0df8b418 1643/* Update the size of a read/write packet. If they user wants
23860348 1644 something really big then do a sanity check. */
11cf8741
JM
1645
1646static void
ac88e2de 1647set_memory_packet_size (const char *args, struct memory_packet_config *config)
11cf8741
JM
1648{
1649 int fixed_p = config->fixed_p;
1650 long size = config->size;
a744cf53 1651
11cf8741 1652 if (args == NULL)
8a3fe4f8 1653 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1654 else if (strcmp (args, "hard") == 0
1655 || strcmp (args, "fixed") == 0)
1656 fixed_p = 1;
1657 else if (strcmp (args, "soft") == 0
1658 || strcmp (args, "limit") == 0)
1659 fixed_p = 0;
1660 else
1661 {
1662 char *end;
a744cf53 1663
11cf8741
JM
1664 size = strtoul (args, &end, 0);
1665 if (args == end)
8a3fe4f8 1666 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1667
1668 /* Instead of explicitly capping the size of a packet to or
1669 disallowing it, the user is allowed to set the size to
1670 something arbitrarily large. */
11cf8741 1671 }
a5c0808e 1672
23860348 1673 /* Extra checks? */
11cf8741
JM
1674 if (fixed_p && !config->fixed_p)
1675 {
cc0be08f
PA
1676 /* So that the query shows the correct value. */
1677 long query_size = (size <= 0
1678 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1679 : size);
1680
e2e0b3e5
AC
1681 if (! query (_("The target may not be able to correctly handle a %s\n"
1682 "of %ld bytes. Change the packet size? "),
cc0be08f 1683 config->name, query_size))
8a3fe4f8 1684 error (_("Packet size not changed."));
11cf8741 1685 }
23860348 1686 /* Update the config. */
11cf8741
JM
1687 config->fixed_p = fixed_p;
1688 config->size = size;
1689}
1690
1691static void
1692show_memory_packet_size (struct memory_packet_config *config)
1693{
cc0be08f
PA
1694 if (config->size == 0)
1695 printf_filtered (_("The %s is 0 (default). "), config->name);
1696 else
1697 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1698 if (config->fixed_p)
a3f17187 1699 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
cc0be08f 1700 get_fixed_memory_packet_size (config));
11cf8741 1701 else
cc0be08f 1702 {
6b8edb51 1703 remote_target *remote = get_current_remote_target ();
cc0be08f 1704
6b8edb51 1705 if (remote != NULL)
cc0be08f 1706 printf_filtered (_("Packets are limited to %ld bytes.\n"),
6b8edb51 1707 remote->get_memory_packet_size (config));
cc0be08f
PA
1708 else
1709 puts_filtered ("The actual limit will be further reduced "
1710 "dependent on the target.\n");
1711 }
11cf8741
JM
1712}
1713
1714static struct memory_packet_config memory_write_packet_config =
1715{
1716 "memory-write-packet-size",
1717};
1718
1719static void
ac88e2de 1720set_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1721{
1722 set_memory_packet_size (args, &memory_write_packet_config);
1723}
1724
1725static void
ac88e2de 1726show_memory_write_packet_size (const char *args, int from_tty)
11cf8741
JM
1727{
1728 show_memory_packet_size (&memory_write_packet_config);
1729}
1730
6b8edb51
PA
1731long
1732remote_target::get_memory_write_packet_size ()
11cf8741
JM
1733{
1734 return get_memory_packet_size (&memory_write_packet_config);
1735}
1736
1737static struct memory_packet_config memory_read_packet_config =
1738{
1739 "memory-read-packet-size",
1740};
1741
1742static void
ac88e2de 1743set_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1744{
1745 set_memory_packet_size (args, &memory_read_packet_config);
1746}
1747
1748static void
ac88e2de 1749show_memory_read_packet_size (const char *args, int from_tty)
11cf8741
JM
1750{
1751 show_memory_packet_size (&memory_read_packet_config);
1752}
1753
6b8edb51
PA
1754long
1755remote_target::get_memory_read_packet_size ()
11cf8741
JM
1756{
1757 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1758
11cf8741
JM
1759 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1760 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1761 increased beyond this. */
1762 if (size > get_remote_packet_size ())
1763 size = get_remote_packet_size ();
11cf8741
JM
1764 return size;
1765}
1766
11cf8741 1767\f
5a2468f5 1768
5a2468f5
JM
1769struct packet_config
1770 {
bb572ddd
DJ
1771 const char *name;
1772 const char *title;
4082afcc
PA
1773
1774 /* If auto, GDB auto-detects support for this packet or feature,
1775 either through qSupported, or by trying the packet and looking
1776 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1777 packet. If false, the packet is disabled. Configs that don't
1778 have an associated command always have this set to auto. */
7f19b9a2 1779 enum auto_boolean detect;
4082afcc
PA
1780
1781 /* Does the target support this packet? */
5a2468f5
JM
1782 enum packet_support support;
1783 };
1784
4082afcc
PA
1785static enum packet_support packet_config_support (struct packet_config *config);
1786static enum packet_support packet_support (int packet);
5a2468f5
JM
1787
1788static void
fba45db2 1789show_packet_config_cmd (struct packet_config *config)
5a2468f5 1790{
a121b7c1 1791 const char *support = "internal-error";
a744cf53 1792
4082afcc 1793 switch (packet_config_support (config))
5a2468f5
JM
1794 {
1795 case PACKET_ENABLE:
1796 support = "enabled";
1797 break;
1798 case PACKET_DISABLE:
1799 support = "disabled";
1800 break;
1801 case PACKET_SUPPORT_UNKNOWN:
1802 support = "unknown";
1803 break;
1804 }
1805 switch (config->detect)
1806 {
7f19b9a2 1807 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1808 printf_filtered (_("Support for the `%s' packet "
1809 "is auto-detected, currently %s.\n"),
37a105a1 1810 config->name, support);
5a2468f5 1811 break;
7f19b9a2
AC
1812 case AUTO_BOOLEAN_TRUE:
1813 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1814 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1815 config->name, support);
8e248173 1816 break;
5a2468f5
JM
1817 }
1818}
1819
1820static void
bb572ddd
DJ
1821add_packet_config_cmd (struct packet_config *config, const char *name,
1822 const char *title, int legacy)
d471ea57 1823{
5a2468f5
JM
1824 char *set_doc;
1825 char *show_doc;
d471ea57 1826 char *cmd_name;
3ed07be4 1827
5a2468f5
JM
1828 config->name = name;
1829 config->title = title;
b435e160
AC
1830 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1831 name, title);
3e43a32a
MS
1832 show_doc = xstrprintf ("Show current use of remote "
1833 "protocol `%s' (%s) packet",
b435e160 1834 name, title);
d471ea57 1835 /* set/show TITLE-packet {auto,on,off} */
b435e160 1836 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1837 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1838 &config->detect, set_doc,
1839 show_doc, NULL, /* help_doc */
4082afcc 1840 NULL,
bb572ddd
DJ
1841 show_remote_protocol_packet_cmd,
1842 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1843 /* The command code copies the documentation strings. */
1844 xfree (set_doc);
1845 xfree (show_doc);
23860348 1846 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1847 if (legacy)
1848 {
1849 char *legacy_name;
a744cf53 1850
b435e160 1851 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1852 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1853 &remote_set_cmdlist);
d471ea57 1854 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1855 &remote_show_cmdlist);
d471ea57 1856 }
5a2468f5
JM
1857}
1858
d471ea57 1859static enum packet_result
a76d924d 1860packet_check_result (const char *buf)
5a2468f5 1861{
d471ea57 1862 if (buf[0] != '\0')
5a2468f5 1863 {
d471ea57 1864 /* The stub recognized the packet request. Check that the
23860348 1865 operation succeeded. */
a76d924d
DJ
1866 if (buf[0] == 'E'
1867 && isxdigit (buf[1]) && isxdigit (buf[2])
1868 && buf[3] == '\0')
1869 /* "Enn" - definitly an error. */
1870 return PACKET_ERROR;
1871
1872 /* Always treat "E." as an error. This will be used for
1873 more verbose error messages, such as E.memtypes. */
1874 if (buf[0] == 'E' && buf[1] == '.')
1875 return PACKET_ERROR;
1876
1877 /* The packet may or may not be OK. Just assume it is. */
1878 return PACKET_OK;
1879 }
1880 else
1881 /* The stub does not support the packet. */
1882 return PACKET_UNKNOWN;
1883}
1884
1885static enum packet_result
1886packet_ok (const char *buf, struct packet_config *config)
1887{
1888 enum packet_result result;
1889
4082afcc
PA
1890 if (config->detect != AUTO_BOOLEAN_TRUE
1891 && config->support == PACKET_DISABLE)
1892 internal_error (__FILE__, __LINE__,
1893 _("packet_ok: attempt to use a disabled packet"));
1894
a76d924d
DJ
1895 result = packet_check_result (buf);
1896 switch (result)
1897 {
1898 case PACKET_OK:
1899 case PACKET_ERROR:
1900 /* The stub recognized the packet request. */
4082afcc 1901 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1902 {
d471ea57
AC
1903 if (remote_debug)
1904 fprintf_unfiltered (gdb_stdlog,
4082afcc
PA
1905 "Packet %s (%s) is supported\n",
1906 config->name, config->title);
d471ea57 1907 config->support = PACKET_ENABLE;
d471ea57 1908 }
a76d924d
DJ
1909 break;
1910 case PACKET_UNKNOWN:
23860348 1911 /* The stub does not support the packet. */
4082afcc
PA
1912 if (config->detect == AUTO_BOOLEAN_AUTO
1913 && config->support == PACKET_ENABLE)
d471ea57 1914 {
4082afcc
PA
1915 /* If the stub previously indicated that the packet was
1916 supported then there is a protocol error. */
1917 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1918 config->name, config->title);
1919 }
1920 else if (config->detect == AUTO_BOOLEAN_TRUE)
1921 {
1922 /* The user set it wrong. */
1923 error (_("Enabled packet %s (%s) not recognized by stub"),
1924 config->name, config->title);
d471ea57 1925 }
4082afcc
PA
1926
1927 if (remote_debug)
1928 fprintf_unfiltered (gdb_stdlog,
1929 "Packet %s (%s) is NOT supported\n",
1930 config->name, config->title);
1931 config->support = PACKET_DISABLE;
a76d924d 1932 break;
5a2468f5 1933 }
a76d924d
DJ
1934
1935 return result;
5a2468f5
JM
1936}
1937
444abaca
DJ
1938enum {
1939 PACKET_vCont = 0,
1940 PACKET_X,
1941 PACKET_qSymbol,
1942 PACKET_P,
1943 PACKET_p,
1944 PACKET_Z0,
1945 PACKET_Z1,
1946 PACKET_Z2,
1947 PACKET_Z3,
1948 PACKET_Z4,
15a201c8 1949 PACKET_vFile_setfs,
a6b151f1
DJ
1950 PACKET_vFile_open,
1951 PACKET_vFile_pread,
1952 PACKET_vFile_pwrite,
1953 PACKET_vFile_close,
1954 PACKET_vFile_unlink,
b9e7b9c3 1955 PACKET_vFile_readlink,
0a93529c 1956 PACKET_vFile_fstat,
0876f84a 1957 PACKET_qXfer_auxv,
23181151 1958 PACKET_qXfer_features,
c78fa86a 1959 PACKET_qXfer_exec_file,
cfa9d6d9 1960 PACKET_qXfer_libraries,
2268b414 1961 PACKET_qXfer_libraries_svr4,
fd79ecee 1962 PACKET_qXfer_memory_map,
0e7f50da
UW
1963 PACKET_qXfer_spu_read,
1964 PACKET_qXfer_spu_write,
07e059b5 1965 PACKET_qXfer_osdata,
dc146f7c 1966 PACKET_qXfer_threads,
0fb4aa4b 1967 PACKET_qXfer_statictrace_read,
b3b9301e 1968 PACKET_qXfer_traceframe_info,
169081d0 1969 PACKET_qXfer_uib,
711e434b 1970 PACKET_qGetTIBAddr,
444abaca 1971 PACKET_qGetTLSAddr,
be2a5f71 1972 PACKET_qSupported,
bd3eecc3 1973 PACKET_qTStatus,
89be2091 1974 PACKET_QPassSignals,
82075af2 1975 PACKET_QCatchSyscalls,
9b224c5e 1976 PACKET_QProgramSignals,
bc3b087d 1977 PACKET_QSetWorkingDir,
aefd8b33 1978 PACKET_QStartupWithShell,
0a2dde4a
SDJ
1979 PACKET_QEnvironmentHexEncoded,
1980 PACKET_QEnvironmentReset,
1981 PACKET_QEnvironmentUnset,
936d2992 1982 PACKET_qCRC,
08388c79 1983 PACKET_qSearch_memory,
2d717e4f
DJ
1984 PACKET_vAttach,
1985 PACKET_vRun,
a6f3e723 1986 PACKET_QStartNoAckMode,
82f73884 1987 PACKET_vKill,
4aa995e1
PA
1988 PACKET_qXfer_siginfo_read,
1989 PACKET_qXfer_siginfo_write,
0b16c5cf 1990 PACKET_qAttached,
4082afcc
PA
1991
1992 /* Support for conditional tracepoints. */
782b2b07 1993 PACKET_ConditionalTracepoints,
4082afcc
PA
1994
1995 /* Support for target-side breakpoint conditions. */
3788aec7 1996 PACKET_ConditionalBreakpoints,
4082afcc
PA
1997
1998 /* Support for target-side breakpoint commands. */
d3ce09f5 1999 PACKET_BreakpointCommands,
4082afcc
PA
2000
2001 /* Support for fast tracepoints. */
7a697b8d 2002 PACKET_FastTracepoints,
4082afcc
PA
2003
2004 /* Support for static tracepoints. */
0fb4aa4b 2005 PACKET_StaticTracepoints,
4082afcc
PA
2006
2007 /* Support for installing tracepoints while a trace experiment is
2008 running. */
1e4d1764 2009 PACKET_InstallInTrace,
4082afcc 2010
40ab02ce
MS
2011 PACKET_bc,
2012 PACKET_bs,
409873ef 2013 PACKET_TracepointSource,
d914c394 2014 PACKET_QAllow,
78d85199 2015 PACKET_qXfer_fdpic,
03583c20 2016 PACKET_QDisableRandomization,
d1feda86 2017 PACKET_QAgent,
f6f899bf 2018 PACKET_QTBuffer_size,
9accd112
MM
2019 PACKET_Qbtrace_off,
2020 PACKET_Qbtrace_bts,
b20a6524 2021 PACKET_Qbtrace_pt,
9accd112 2022 PACKET_qXfer_btrace,
4082afcc
PA
2023
2024 /* Support for the QNonStop packet. */
2025 PACKET_QNonStop,
2026
65706a29
PA
2027 /* Support for the QThreadEvents packet. */
2028 PACKET_QThreadEvents,
2029
4082afcc
PA
2030 /* Support for multi-process extensions. */
2031 PACKET_multiprocess_feature,
2032
2033 /* Support for enabling and disabling tracepoints while a trace
2034 experiment is running. */
2035 PACKET_EnableDisableTracepoints_feature,
2036
2037 /* Support for collecting strings using the tracenz bytecode. */
2038 PACKET_tracenz_feature,
2039
2040 /* Support for continuing to run a trace experiment while GDB is
2041 disconnected. */
2042 PACKET_DisconnectedTracing_feature,
2043
2044 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
2045 PACKET_augmented_libraries_svr4_read_feature,
2046
f4abbc16
MM
2047 /* Support for the qXfer:btrace-conf:read packet. */
2048 PACKET_qXfer_btrace_conf,
2049
d33501a5
MM
2050 /* Support for the Qbtrace-conf:bts:size packet. */
2051 PACKET_Qbtrace_conf_bts_size,
2052
f7e6eed5
PA
2053 /* Support for swbreak+ feature. */
2054 PACKET_swbreak_feature,
2055
2056 /* Support for hwbreak+ feature. */
2057 PACKET_hwbreak_feature,
2058
89245bc0
DB
2059 /* Support for fork events. */
2060 PACKET_fork_event_feature,
2061
2062 /* Support for vfork events. */
2063 PACKET_vfork_event_feature,
2064
b20a6524
MM
2065 /* Support for the Qbtrace-conf:pt:size packet. */
2066 PACKET_Qbtrace_conf_pt_size,
2067
94585166
DB
2068 /* Support for exec events. */
2069 PACKET_exec_event_feature,
2070
750ce8d1
YQ
2071 /* Support for query supported vCont actions. */
2072 PACKET_vContSupported,
2073
de979965
PA
2074 /* Support remote CTRL-C. */
2075 PACKET_vCtrlC,
2076
f2faf941
PA
2077 /* Support TARGET_WAITKIND_NO_RESUMED. */
2078 PACKET_no_resumed,
2079
444abaca
DJ
2080 PACKET_MAX
2081};
506fb367 2082
444abaca 2083static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97 2084
f7e6eed5
PA
2085/* Returns the packet's corresponding "set remote foo-packet" command
2086 state. See struct packet_config for more details. */
2087
2088static enum auto_boolean
2089packet_set_cmd_state (int packet)
2090{
2091 return remote_protocol_packets[packet].detect;
2092}
2093
4082afcc
PA
2094/* Returns whether a given packet or feature is supported. This takes
2095 into account the state of the corresponding "set remote foo-packet"
2096 command, which may be used to bypass auto-detection. */
dc8acb97 2097
4082afcc
PA
2098static enum packet_support
2099packet_config_support (struct packet_config *config)
2100{
2101 switch (config->detect)
444abaca 2102 {
4082afcc
PA
2103 case AUTO_BOOLEAN_TRUE:
2104 return PACKET_ENABLE;
2105 case AUTO_BOOLEAN_FALSE:
2106 return PACKET_DISABLE;
2107 case AUTO_BOOLEAN_AUTO:
2108 return config->support;
2109 default:
2110 gdb_assert_not_reached (_("bad switch"));
444abaca 2111 }
4082afcc
PA
2112}
2113
2114/* Same as packet_config_support, but takes the packet's enum value as
2115 argument. */
2116
2117static enum packet_support
2118packet_support (int packet)
2119{
2120 struct packet_config *config = &remote_protocol_packets[packet];
2121
2122 return packet_config_support (config);
dc8acb97
MS
2123}
2124
5a2468f5 2125static void
444abaca
DJ
2126show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2127 struct cmd_list_element *c,
2128 const char *value)
5a2468f5 2129{
444abaca 2130 struct packet_config *packet;
5a2468f5 2131
444abaca
DJ
2132 for (packet = remote_protocol_packets;
2133 packet < &remote_protocol_packets[PACKET_MAX];
2134 packet++)
2135 {
2136 if (&packet->detect == c->var)
2137 {
2138 show_packet_config_cmd (packet);
2139 return;
2140 }
2141 }
9b20d036 2142 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 2143 c->name);
5a2468f5
JM
2144}
2145
d471ea57
AC
2146/* Should we try one of the 'Z' requests? */
2147
2148enum Z_packet_type
2149{
2150 Z_PACKET_SOFTWARE_BP,
2151 Z_PACKET_HARDWARE_BP,
2152 Z_PACKET_WRITE_WP,
2153 Z_PACKET_READ_WP,
2154 Z_PACKET_ACCESS_WP,
2155 NR_Z_PACKET_TYPES
2156};
96baa820 2157
d471ea57 2158/* For compatibility with older distributions. Provide a ``set remote
23860348 2159 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 2160
7f19b9a2 2161static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
2162
2163static void
eb4c3f4a 2164set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
fba45db2 2165 struct cmd_list_element *c)
96baa820 2166{
d471ea57 2167 int i;
a744cf53 2168
d471ea57 2169 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
4082afcc 2170 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
96baa820
JM
2171}
2172
2173static void
08546159
AC
2174show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2175 struct cmd_list_element *c,
2176 const char *value)
96baa820 2177{
d471ea57 2178 int i;
a744cf53 2179
d471ea57
AC
2180 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2181 {
444abaca 2182 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 2183 }
96baa820
JM
2184}
2185
4082afcc
PA
2186/* Returns true if the multi-process extensions are in effect. */
2187
2188static int
2189remote_multi_process_p (struct remote_state *rs)
2190{
2191 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2192}
2193
de0d863e
DB
2194/* Returns true if fork events are supported. */
2195
2196static int
2197remote_fork_event_p (struct remote_state *rs)
2198{
2199 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2200}
2201
c269dbdb
DB
2202/* Returns true if vfork events are supported. */
2203
2204static int
2205remote_vfork_event_p (struct remote_state *rs)
2206{
2207 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2208}
2209
d46addbb
DB
2210/* Returns true if exec events are supported. */
2211
2212static int
2213remote_exec_event_p (struct remote_state *rs)
2214{
2215 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2216}
2217
cbb8991c
DB
2218/* Insert fork catchpoint target routine. If fork events are enabled
2219 then return success, nothing more to do. */
2220
f6ac5f3d
PA
2221int
2222remote_target::insert_fork_catchpoint (int pid)
cbb8991c
DB
2223{
2224 struct remote_state *rs = get_remote_state ();
2225
2226 return !remote_fork_event_p (rs);
2227}
2228
2229/* Remove fork catchpoint target routine. Nothing to do, just
2230 return success. */
2231
f6ac5f3d
PA
2232int
2233remote_target::remove_fork_catchpoint (int pid)
cbb8991c
DB
2234{
2235 return 0;
2236}
2237
2238/* Insert vfork catchpoint target routine. If vfork events are enabled
2239 then return success, nothing more to do. */
2240
f6ac5f3d
PA
2241int
2242remote_target::insert_vfork_catchpoint (int pid)
cbb8991c
DB
2243{
2244 struct remote_state *rs = get_remote_state ();
2245
2246 return !remote_vfork_event_p (rs);
2247}
2248
2249/* Remove vfork catchpoint target routine. Nothing to do, just
2250 return success. */
2251
f6ac5f3d
PA
2252int
2253remote_target::remove_vfork_catchpoint (int pid)
cbb8991c
DB
2254{
2255 return 0;
2256}
2257
d46addbb
DB
2258/* Insert exec catchpoint target routine. If exec events are
2259 enabled, just return success. */
2260
f6ac5f3d
PA
2261int
2262remote_target::insert_exec_catchpoint (int pid)
d46addbb
DB
2263{
2264 struct remote_state *rs = get_remote_state ();
2265
2266 return !remote_exec_event_p (rs);
2267}
2268
2269/* Remove exec catchpoint target routine. Nothing to do, just
2270 return success. */
2271
f6ac5f3d
PA
2272int
2273remote_target::remove_exec_catchpoint (int pid)
d46addbb
DB
2274{
2275 return 0;
2276}
2277
c906108c
SS
2278\f
2279
79d7f229
PA
2280static ptid_t magic_null_ptid;
2281static ptid_t not_sent_ptid;
2282static ptid_t any_thread_ptid;
2283
0b16c5cf
PA
2284/* Find out if the stub attached to PID (and hence GDB should offer to
2285 detach instead of killing it when bailing out). */
2286
6b8edb51
PA
2287int
2288remote_target::remote_query_attached (int pid)
0b16c5cf
PA
2289{
2290 struct remote_state *rs = get_remote_state ();
bba74b36 2291 size_t size = get_remote_packet_size ();
0b16c5cf 2292
4082afcc 2293 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
0b16c5cf
PA
2294 return 0;
2295
2296 if (remote_multi_process_p (rs))
bba74b36 2297 xsnprintf (rs->buf, size, "qAttached:%x", pid);
0b16c5cf 2298 else
bba74b36 2299 xsnprintf (rs->buf, size, "qAttached");
0b16c5cf
PA
2300
2301 putpkt (rs->buf);
2302 getpkt (&rs->buf, &rs->buf_size, 0);
2303
2304 switch (packet_ok (rs->buf,
1554e9be 2305 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
2306 {
2307 case PACKET_OK:
2308 if (strcmp (rs->buf, "1") == 0)
2309 return 1;
2310 break;
2311 case PACKET_ERROR:
2312 warning (_("Remote failure reply: %s"), rs->buf);
2313 break;
2314 case PACKET_UNKNOWN:
2315 break;
2316 }
2317
2318 return 0;
2319}
2320
49c62f2e
PA
2321/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2322 has been invented by GDB, instead of reported by the target. Since
2323 we can be connected to a remote system before before knowing about
2324 any inferior, mark the target with execution when we find the first
2325 inferior. If ATTACHED is 1, then we had just attached to this
2326 inferior. If it is 0, then we just created this inferior. If it
2327 is -1, then try querying the remote stub to find out if it had
1b6e6f5c
GB
2328 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2329 attempt to open this inferior's executable as the main executable
2330 if no main executable is open already. */
1941c569 2331
6b8edb51
PA
2332inferior *
2333remote_target::remote_add_inferior (int fake_pid_p, int pid, int attached,
2334 int try_open_exec)
1941c569 2335{
1941c569
PA
2336 struct inferior *inf;
2337
0b16c5cf
PA
2338 /* Check whether this process we're learning about is to be
2339 considered attached, or if is to be considered to have been
2340 spawned by the stub. */
2341 if (attached == -1)
2342 attached = remote_query_attached (pid);
2343
f5656ead 2344 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
2345 {
2346 /* If the target shares code across all inferiors, then every
2347 attach adds a new inferior. */
2348 inf = add_inferior (pid);
2349
2350 /* ... and every inferior is bound to the same program space.
2351 However, each inferior may still have its own address
2352 space. */
2353 inf->aspace = maybe_new_address_space ();
2354 inf->pspace = current_program_space;
2355 }
2356 else
2357 {
2358 /* In the traditional debugging scenario, there's a 1-1 match
2359 between program/address spaces. We simply bind the inferior
2360 to the program space's address space. */
2361 inf = current_inferior ();
2362 inferior_appeared (inf, pid);
2363 }
1941c569 2364
0b16c5cf 2365 inf->attach_flag = attached;
49c62f2e 2366 inf->fake_pid_p = fake_pid_p;
0b16c5cf 2367
1b6e6f5c
GB
2368 /* If no main executable is currently open then attempt to
2369 open the file that was executed to create this inferior. */
835205d0 2370 if (try_open_exec && get_exec_file (0) == NULL)
bb805577 2371 exec_file_locate_attach (pid, 0, 1);
1b6e6f5c 2372
1941c569
PA
2373 return inf;
2374}
2375
7aabaf9d 2376static remote_thread_info *get_remote_thread_info (thread_info *thread);
00431a78 2377static remote_thread_info *get_remote_thread_info (ptid_t ptid);
85ad3aaf 2378
1941c569
PA
2379/* Add thread PTID to GDB's thread list. Tag it as executing/running
2380 according to RUNNING. */
2381
00431a78 2382thread_info *
6b8edb51 2383remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
c906108c 2384{
b7ea362b 2385 struct remote_state *rs = get_remote_state ();
85ad3aaf 2386 struct thread_info *thread;
b7ea362b
PA
2387
2388 /* GDB historically didn't pull threads in the initial connection
2389 setup. If the remote target doesn't even have a concept of
2390 threads (e.g., a bare-metal target), even if internally we
2391 consider that a single-threaded target, mentioning a new thread
2392 might be confusing to the user. Be silent then, preserving the
2393 age old behavior. */
2394 if (rs->starting_up)
85ad3aaf 2395 thread = add_thread_silent (ptid);
b7ea362b 2396 else
85ad3aaf 2397 thread = add_thread (ptid);
1941c569 2398
7aabaf9d 2399 get_remote_thread_info (thread)->vcont_resumed = executing;
0d5b594f 2400 set_executing (ptid, executing);
1941c569 2401 set_running (ptid, running);
00431a78
PA
2402
2403 return thread;
1941c569
PA
2404}
2405
2406/* Come here when we learn about a thread id from the remote target.
2407 It may be the first time we hear about such thread, so take the
2408 opportunity to add it to GDB's thread list. In case this is the
2409 first time we're noticing its corresponding inferior, add it to
0d5b594f
PA
2410 GDB's inferior list as well. EXECUTING indicates whether the
2411 thread is (internally) executing or stopped. */
1941c569 2412
6b8edb51
PA
2413void
2414remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
1941c569 2415{
0d5b594f
PA
2416 /* In non-stop mode, we assume new found threads are (externally)
2417 running until proven otherwise with a stop reply. In all-stop,
2418 we can only get here if all threads are stopped. */
2419 int running = target_is_non_stop_p () ? 1 : 0;
2420
c906108c
SS
2421 /* If this is a new thread, add it to GDB's thread list.
2422 If we leave it up to WFI to do this, bad things will happen. */
82f73884 2423
00431a78
PA
2424 thread_info *tp = find_thread_ptid (currthread);
2425 if (tp != NULL && tp->state == THREAD_EXITED)
82f73884
PA
2426 {
2427 /* We're seeing an event on a thread id we knew had exited.
2428 This has to be a new thread reusing the old id. Add it. */
0d5b594f 2429 remote_add_thread (currthread, running, executing);
82f73884
PA
2430 return;
2431 }
2432
79d7f229 2433 if (!in_thread_list (currthread))
c0a2216e 2434 {
1941c569 2435 struct inferior *inf = NULL;
e99b03dc 2436 int pid = currthread.pid ();
1941c569 2437
0e998d96 2438 if (inferior_ptid.is_pid ()
e99b03dc 2439 && pid == inferior_ptid.pid ())
c0a2216e
PA
2440 {
2441 /* inferior_ptid has no thread member yet. This can happen
2442 with the vAttach -> remote_wait,"TAAthread:" path if the
2443 stub doesn't support qC. This is the first stop reported
2444 after an attach, so this is the main thread. Update the
2445 ptid in the thread list. */
f2907e49 2446 if (in_thread_list (ptid_t (pid)))
bad34192
PA
2447 thread_change_ptid (inferior_ptid, currthread);
2448 else
2449 {
0d5b594f 2450 remote_add_thread (currthread, running, executing);
bad34192
PA
2451 inferior_ptid = currthread;
2452 }
dc146f7c 2453 return;
c0a2216e 2454 }
82f73884 2455
d7e15655 2456 if (magic_null_ptid == inferior_ptid)
c0a2216e
PA
2457 {
2458 /* inferior_ptid is not set yet. This can happen with the
2459 vRun -> remote_wait,"TAAthread:" path if the stub
2460 doesn't support qC. This is the first stop reported
2461 after an attach, so this is the main thread. Update the
2462 ptid in the thread list. */
dc146f7c 2463 thread_change_ptid (inferior_ptid, currthread);
82f73884 2464 return;
c0a2216e 2465 }
82f73884 2466
29c87f7f
PA
2467 /* When connecting to a target remote, or to a target
2468 extended-remote which already was debugging an inferior, we
2469 may not know about it yet. Add it before adding its child
2470 thread, so notifications are emitted in a sensible order. */
e99b03dc 2471 if (find_inferior_pid (currthread.pid ()) == NULL)
49c62f2e
PA
2472 {
2473 struct remote_state *rs = get_remote_state ();
2474 int fake_pid_p = !remote_multi_process_p (rs);
2475
2476 inf = remote_add_inferior (fake_pid_p,
e99b03dc 2477 currthread.pid (), -1, 1);
49c62f2e 2478 }
29c87f7f 2479
82f73884 2480 /* This is really a new thread. Add it. */
00431a78
PA
2481 thread_info *new_thr
2482 = remote_add_thread (currthread, running, executing);
1941c569
PA
2483
2484 /* If we found a new inferior, let the common code do whatever
2485 it needs to with it (e.g., read shared libraries, insert
b7ea362b
PA
2486 breakpoints), unless we're just setting up an all-stop
2487 connection. */
1941c569 2488 if (inf != NULL)
b7ea362b
PA
2489 {
2490 struct remote_state *rs = get_remote_state ();
2491
6efcd9a8 2492 if (!rs->starting_up)
00431a78 2493 notice_new_inferior (new_thr, executing, 0);
b7ea362b 2494 }
c0a2216e 2495 }
c906108c
SS
2496}
2497
85ad3aaf 2498/* Return THREAD's private thread data, creating it if necessary. */
dc146f7c 2499
7aabaf9d
SM
2500static remote_thread_info *
2501get_remote_thread_info (thread_info *thread)
dc146f7c 2502{
85ad3aaf 2503 gdb_assert (thread != NULL);
dc146f7c 2504
85ad3aaf 2505 if (thread->priv == NULL)
7aabaf9d 2506 thread->priv.reset (new remote_thread_info);
dc146f7c 2507
7aabaf9d 2508 return static_cast<remote_thread_info *> (thread->priv.get ());
85ad3aaf
PA
2509}
2510
7aabaf9d
SM
2511static remote_thread_info *
2512get_remote_thread_info (ptid_t ptid)
85ad3aaf 2513{
00431a78
PA
2514 thread_info *thr = find_thread_ptid (ptid);
2515 return get_remote_thread_info (thr);
dc146f7c
VP
2516}
2517
74531fed
PA
2518/* Call this function as a result of
2519 1) A halt indication (T packet) containing a thread id
2520 2) A direct query of currthread
0df8b418 2521 3) Successful execution of set thread */
74531fed
PA
2522
2523static void
47f8a51d 2524record_currthread (struct remote_state *rs, ptid_t currthread)
74531fed 2525{
47f8a51d 2526 rs->general_thread = currthread;
74531fed
PA
2527}
2528
89be2091
DJ
2529/* If 'QPassSignals' is supported, tell the remote stub what signals
2530 it can simply pass through to the inferior without reporting. */
2531
f6ac5f3d
PA
2532void
2533remote_target::pass_signals (int numsigs, unsigned char *pass_signals)
89be2091 2534{
4082afcc 2535 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
89be2091
DJ
2536 {
2537 char *pass_packet, *p;
89be2091 2538 int count = 0, i;
747dc59d 2539 struct remote_state *rs = get_remote_state ();
89be2091
DJ
2540
2541 gdb_assert (numsigs < 256);
2542 for (i = 0; i < numsigs; i++)
2543 {
2455069d 2544 if (pass_signals[i])
89be2091
DJ
2545 count++;
2546 }
224c3ddb 2547 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
89be2091
DJ
2548 strcpy (pass_packet, "QPassSignals:");
2549 p = pass_packet + strlen (pass_packet);
2550 for (i = 0; i < numsigs; i++)
2551 {
2455069d 2552 if (pass_signals[i])
89be2091
DJ
2553 {
2554 if (i >= 16)
2555 *p++ = tohex (i >> 4);
2556 *p++ = tohex (i & 15);
2557 if (count)
2558 *p++ = ';';
2559 else
2560 break;
2561 count--;
2562 }
2563 }
2564 *p = 0;
747dc59d 2565 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
89be2091 2566 {
89be2091
DJ
2567 putpkt (pass_packet);
2568 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2569 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
747dc59d
TT
2570 if (rs->last_pass_packet)
2571 xfree (rs->last_pass_packet);
2572 rs->last_pass_packet = pass_packet;
89be2091
DJ
2573 }
2574 else
2575 xfree (pass_packet);
2576 }
2577}
2578
82075af2
JS
2579/* If 'QCatchSyscalls' is supported, tell the remote stub
2580 to report syscalls to GDB. */
2581
f6ac5f3d
PA
2582int
2583remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2584 gdb::array_view<const int> syscall_counts)
82075af2 2585{
b80406ac 2586 const char *catch_packet;
82075af2
JS
2587 enum packet_result result;
2588 int n_sysno = 0;
2589
2590 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2591 {
2592 /* Not supported. */
2593 return 1;
2594 }
2595
649a140c 2596 if (needed && any_count == 0)
82075af2 2597 {
649a140c
PA
2598 /* Count how many syscalls are to be caught. */
2599 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2600 {
649a140c 2601 if (syscall_counts[i] != 0)
82075af2
JS
2602 n_sysno++;
2603 }
2604 }
2605
2606 if (remote_debug)
2607 {
2608 fprintf_unfiltered (gdb_stdlog,
2609 "remote_set_syscall_catchpoint "
2610 "pid %d needed %d any_count %d n_sysno %d\n",
2611 pid, needed, any_count, n_sysno);
2612 }
2613
1b81856f 2614 std::string built_packet;
82075af2
JS
2615 if (needed)
2616 {
2617 /* Prepare a packet with the sysno list, assuming max 8+1
2618 characters for a sysno. If the resulting packet size is too
2619 big, fallback on the non-selective packet. */
2620 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
1b81856f
PA
2621 built_packet.reserve (maxpktsz);
2622 built_packet = "QCatchSyscalls:1";
649a140c 2623 if (any_count == 0)
82075af2 2624 {
649a140c
PA
2625 /* Add in each syscall to be caught. */
2626 for (size_t i = 0; i < syscall_counts.size (); i++)
82075af2 2627 {
649a140c
PA
2628 if (syscall_counts[i] != 0)
2629 string_appendf (built_packet, ";%zx", i);
82075af2
JS
2630 }
2631 }
1b81856f 2632 if (built_packet.size () > get_remote_packet_size ())
82075af2
JS
2633 {
2634 /* catch_packet too big. Fallback to less efficient
2635 non selective mode, with GDB doing the filtering. */
b80406ac 2636 catch_packet = "QCatchSyscalls:1";
82075af2 2637 }
b80406ac 2638 else
1b81856f 2639 catch_packet = built_packet.c_str ();
82075af2
JS
2640 }
2641 else
b80406ac 2642 catch_packet = "QCatchSyscalls:0";
82075af2 2643
b80406ac 2644 struct remote_state *rs = get_remote_state ();
82075af2 2645
b80406ac
TT
2646 putpkt (catch_packet);
2647 getpkt (&rs->buf, &rs->buf_size, 0);
2648 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2649 if (result == PACKET_OK)
2650 return 0;
2651 else
2652 return -1;
82075af2
JS
2653}
2654
9b224c5e
PA
2655/* If 'QProgramSignals' is supported, tell the remote stub what
2656 signals it should pass through to the inferior when detaching. */
2657
f6ac5f3d
PA
2658void
2659remote_target::program_signals (int numsigs, unsigned char *signals)
9b224c5e 2660{
4082afcc 2661 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2662 {
2663 char *packet, *p;
2664 int count = 0, i;
5e4a05c4 2665 struct remote_state *rs = get_remote_state ();
9b224c5e
PA
2666
2667 gdb_assert (numsigs < 256);
2668 for (i = 0; i < numsigs; i++)
2669 {
2670 if (signals[i])
2671 count++;
2672 }
224c3ddb 2673 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2674 strcpy (packet, "QProgramSignals:");
2675 p = packet + strlen (packet);
2676 for (i = 0; i < numsigs; i++)
2677 {
2678 if (signal_pass_state (i))
2679 {
2680 if (i >= 16)
2681 *p++ = tohex (i >> 4);
2682 *p++ = tohex (i & 15);
2683 if (count)
2684 *p++ = ';';
2685 else
2686 break;
2687 count--;
2688 }
2689 }
2690 *p = 0;
5e4a05c4
TT
2691 if (!rs->last_program_signals_packet
2692 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2693 {
9b224c5e
PA
2694 putpkt (packet);
2695 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2696 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2697 xfree (rs->last_program_signals_packet);
2698 rs->last_program_signals_packet = packet;
9b224c5e
PA
2699 }
2700 else
2701 xfree (packet);
2702 }
2703}
2704
79d7f229
PA
2705/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2706 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2707 thread. If GEN is set, set the general thread, if not, then set
2708 the step/continue thread. */
6b8edb51
PA
2709void
2710remote_target::set_thread (ptid_t ptid, int gen)
c906108c 2711{
d01949b6 2712 struct remote_state *rs = get_remote_state ();
47f8a51d 2713 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
6d820c5c 2714 char *buf = rs->buf;
79d7f229 2715 char *endbuf = rs->buf + get_remote_packet_size ();
c906108c 2716
d7e15655 2717 if (state == ptid)
c906108c
SS
2718 return;
2719
79d7f229
PA
2720 *buf++ = 'H';
2721 *buf++ = gen ? 'g' : 'c';
d7e15655 2722 if (ptid == magic_null_ptid)
79d7f229 2723 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2724 else if (ptid == any_thread_ptid)
79d7f229 2725 xsnprintf (buf, endbuf - buf, "0");
d7e15655 2726 else if (ptid == minus_one_ptid)
79d7f229
PA
2727 xsnprintf (buf, endbuf - buf, "-1");
2728 else
82f73884 2729 write_ptid (buf, endbuf, ptid);
79d7f229 2730 putpkt (rs->buf);
6d820c5c 2731 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 2732 if (gen)
47f8a51d 2733 rs->general_thread = ptid;
c906108c 2734 else
47f8a51d 2735 rs->continue_thread = ptid;
c906108c 2736}
79d7f229 2737
6b8edb51
PA
2738void
2739remote_target::set_general_thread (ptid_t ptid)
79d7f229
PA
2740{
2741 set_thread (ptid, 1);
2742}
2743
6b8edb51
PA
2744void
2745remote_target::set_continue_thread (ptid_t ptid)
79d7f229
PA
2746{
2747 set_thread (ptid, 0);
2748}
2749
3c9c4b83
PA
2750/* Change the remote current process. Which thread within the process
2751 ends up selected isn't important, as long as it is the same process
2752 as what INFERIOR_PTID points to.
2753
2754 This comes from that fact that there is no explicit notion of
2755 "selected process" in the protocol. The selected process for
2756 general operations is the process the selected general thread
2757 belongs to. */
2758
6b8edb51
PA
2759void
2760remote_target::set_general_process ()
3c9c4b83
PA
2761{
2762 struct remote_state *rs = get_remote_state ();
2763
2764 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2765 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2766 return;
2767
2768 /* We only need to change the remote current thread if it's pointing
2769 at some other process. */
e99b03dc 2770 if (rs->general_thread.pid () != inferior_ptid.pid ())
3c9c4b83
PA
2771 set_general_thread (inferior_ptid);
2772}
2773
c906108c 2774\f
7d1a114c
PA
2775/* Return nonzero if this is the main thread that we made up ourselves
2776 to model non-threaded targets as single-threaded. */
c906108c
SS
2777
2778static int
f6ac5f3d 2779remote_thread_always_alive (ptid_t ptid)
c906108c 2780{
d7e15655 2781 if (ptid == magic_null_ptid)
c0a2216e
PA
2782 /* The main thread is always alive. */
2783 return 1;
2784
e38504b3 2785 if (ptid.pid () != 0 && ptid.lwp () == 0)
c0a2216e
PA
2786 /* The main thread is always alive. This can happen after a
2787 vAttach, if the remote side doesn't support
2788 multi-threading. */
2789 return 1;
2790
7d1a114c
PA
2791 return 0;
2792}
2793
2794/* Return nonzero if the thread PTID is still alive on the remote
2795 system. */
2796
57810aa7 2797bool
f6ac5f3d 2798remote_target::thread_alive (ptid_t ptid)
7d1a114c
PA
2799{
2800 struct remote_state *rs = get_remote_state ();
2801 char *p, *endp;
2802
2803 /* Check if this is a thread that we made up ourselves to model
2804 non-threaded targets as single-threaded. */
f6ac5f3d 2805 if (remote_thread_always_alive (ptid))
7d1a114c
PA
2806 return 1;
2807
82f73884
PA
2808 p = rs->buf;
2809 endp = rs->buf + get_remote_packet_size ();
2810
2811 *p++ = 'T';
2812 write_ptid (p, endp, ptid);
2813
2e9f7625 2814 putpkt (rs->buf);
6d820c5c 2815 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2816 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2817}
2818
79efa585
SM
2819/* Return a pointer to a thread name if we know it and NULL otherwise.
2820 The thread_info object owns the memory for the name. */
2821
f6ac5f3d
PA
2822const char *
2823remote_target::thread_name (struct thread_info *info)
79efa585
SM
2824{
2825 if (info->priv != NULL)
a9334058
SM
2826 {
2827 const std::string &name = get_remote_thread_info (info)->name;
2828 return !name.empty () ? name.c_str () : NULL;
2829 }
79efa585
SM
2830
2831 return NULL;
2832}
2833
c906108c
SS
2834/* About these extended threadlist and threadinfo packets. They are
2835 variable length packets but, the fields within them are often fixed
2836 length. They are redundent enough to send over UDP as is the
2837 remote protocol in general. There is a matching unit test module
2838 in libstub. */
2839
23860348 2840/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2841 libstub protocol encoding, and remote.c. It is not particularly
23860348 2842 changable. */
cce74817
JM
2843
2844/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2845 Plan to fix this. */
cce74817 2846
23860348 2847typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2848
9d1f7ab2 2849/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2850 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2851
2852struct gdb_ext_thread_info
c5aa993b 2853 {
23860348 2854 threadref threadid; /* External form of thread reference. */
2bc416ba 2855 int active; /* Has state interesting to GDB?
23860348 2856 regs, stack. */
2bc416ba 2857 char display[256]; /* Brief state display, name,
cedea757 2858 blocked/suspended. */
23860348 2859 char shortname[32]; /* To be used to name threads. */
2bc416ba 2860 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2861 whatever. */
c5aa993b 2862 };
cce74817
JM
2863
2864/* The volume of remote transfers can be limited by submitting
2865 a mask containing bits specifying the desired information.
2866 Use a union of these values as the 'selection' parameter to
0df8b418 2867 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2868
2869#define TAG_THREADID 1
2870#define TAG_EXISTS 2
2871#define TAG_DISPLAY 4
2872#define TAG_THREADNAME 8
c5aa993b 2873#define TAG_MOREDISPLAY 16
cce74817 2874
23860348 2875#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 2876
a14ed312 2877static char *unpack_nibble (char *buf, int *val);
cce74817 2878
a14ed312 2879static char *unpack_byte (char *buf, int *value);
cce74817 2880
a14ed312 2881static char *pack_int (char *buf, int value);
cce74817 2882
a14ed312 2883static char *unpack_int (char *buf, int *value);
cce74817 2884
a14ed312 2885static char *unpack_string (char *src, char *dest, int length);
cce74817 2886
23860348 2887static char *pack_threadid (char *pkt, threadref *id);
cce74817 2888
23860348 2889static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 2890
23860348 2891void int_to_threadref (threadref *id, int value);
cce74817 2892
23860348 2893static int threadref_to_int (threadref *ref);
cce74817 2894
23860348 2895static void copy_threadref (threadref *dest, threadref *src);
cce74817 2896
23860348 2897static int threadmatch (threadref *dest, threadref *src);
cce74817 2898
2bc416ba 2899static char *pack_threadinfo_request (char *pkt, int mode,
23860348 2900 threadref *id);
cce74817 2901
a14ed312
KB
2902static char *pack_threadlist_request (char *pkt, int startflag,
2903 int threadcount,
23860348 2904 threadref *nextthread);
cce74817 2905
23860348 2906static int remote_newthread_step (threadref *ref, void *context);
cce74817 2907
82f73884
PA
2908
2909/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2910 buffer we're allowed to write to. Returns
2911 BUF+CHARACTERS_WRITTEN. */
2912
6b8edb51
PA
2913char *
2914remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
82f73884
PA
2915{
2916 int pid, tid;
2917 struct remote_state *rs = get_remote_state ();
2918
2919 if (remote_multi_process_p (rs))
2920 {
e99b03dc 2921 pid = ptid.pid ();
82f73884
PA
2922 if (pid < 0)
2923 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2924 else
2925 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2926 }
e38504b3 2927 tid = ptid.lwp ();
82f73884
PA
2928 if (tid < 0)
2929 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2930 else
2931 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2932
2933 return buf;
2934}
2935
256642e8
PA
2936/* Extract a PTID from BUF. If non-null, OBUF is set to one past the
2937 last parsed char. Returns null_ptid if no thread id is found, and
2938 throws an error if the thread id has an invalid format. */
82f73884
PA
2939
2940static ptid_t
256642e8 2941read_ptid (const char *buf, const char **obuf)
82f73884 2942{
256642e8
PA
2943 const char *p = buf;
2944 const char *pp;
82f73884 2945 ULONGEST pid = 0, tid = 0;
82f73884
PA
2946
2947 if (*p == 'p')
2948 {
2949 /* Multi-process ptid. */
2950 pp = unpack_varlen_hex (p + 1, &pid);
2951 if (*pp != '.')
b37520b6 2952 error (_("invalid remote ptid: %s"), p);
82f73884
PA
2953
2954 p = pp;
2955 pp = unpack_varlen_hex (p + 1, &tid);
2956 if (obuf)
2957 *obuf = pp;
fd79271b 2958 return ptid_t (pid, tid, 0);
82f73884
PA
2959 }
2960
2961 /* No multi-process. Just a tid. */
2962 pp = unpack_varlen_hex (p, &tid);
2963
c9f35b34
KB
2964 /* Return null_ptid when no thread id is found. */
2965 if (p == pp)
2966 {
2967 if (obuf)
2968 *obuf = pp;
2969 return null_ptid;
2970 }
2971
82f73884 2972 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
2973 what's in inferior_ptid, unless it's null at this point. If so,
2974 then since there's no way to know the pid of the reported
2975 threads, use the magic number. */
d7e15655 2976 if (inferior_ptid == null_ptid)
e99b03dc 2977 pid = magic_null_ptid.pid ();
ca19bf23 2978 else
e99b03dc 2979 pid = inferior_ptid.pid ();
82f73884
PA
2980
2981 if (obuf)
2982 *obuf = pp;
fd79271b 2983 return ptid_t (pid, tid, 0);
82f73884
PA
2984}
2985
c906108c 2986static int
fba45db2 2987stubhex (int ch)
c906108c
SS
2988{
2989 if (ch >= 'a' && ch <= 'f')
2990 return ch - 'a' + 10;
2991 if (ch >= '0' && ch <= '9')
2992 return ch - '0';
2993 if (ch >= 'A' && ch <= 'F')
2994 return ch - 'A' + 10;
2995 return -1;
2996}
2997
2998static int
fba45db2 2999stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
3000{
3001 int nibble;
3002 int retval = 0;
3003
3004 while (fieldlength)
3005 {
3006 nibble = stubhex (*buff++);
3007 retval |= nibble;
3008 fieldlength--;
3009 if (fieldlength)
3010 retval = retval << 4;
3011 }
3012 return retval;
3013}
3014
c906108c 3015static char *
fba45db2 3016unpack_nibble (char *buf, int *val)
c906108c 3017{
b7589f7d 3018 *val = fromhex (*buf++);
c906108c
SS
3019 return buf;
3020}
3021
c906108c 3022static char *
fba45db2 3023unpack_byte (char *buf, int *value)
c906108c
SS
3024{
3025 *value = stub_unpack_int (buf, 2);
3026 return buf + 2;
3027}
3028
3029static char *
fba45db2 3030pack_int (char *buf, int value)
c906108c
SS
3031{
3032 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3033 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3034 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3035 buf = pack_hex_byte (buf, (value & 0xff));
3036 return buf;
3037}
3038
3039static char *
fba45db2 3040unpack_int (char *buf, int *value)
c906108c
SS
3041{
3042 *value = stub_unpack_int (buf, 8);
3043 return buf + 8;
3044}
3045
23860348 3046#if 0 /* Currently unused, uncomment when needed. */
a14ed312 3047static char *pack_string (char *pkt, char *string);
c906108c
SS
3048
3049static char *
fba45db2 3050pack_string (char *pkt, char *string)
c906108c
SS
3051{
3052 char ch;
3053 int len;
3054
3055 len = strlen (string);
3056 if (len > 200)
23860348 3057 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
3058 pkt = pack_hex_byte (pkt, len);
3059 while (len-- > 0)
3060 {
3061 ch = *string++;
3062 if ((ch == '\0') || (ch == '#'))
23860348 3063 ch = '*'; /* Protect encapsulation. */
c906108c
SS
3064 *pkt++ = ch;
3065 }
3066 return pkt;
3067}
3068#endif /* 0 (unused) */
3069
3070static char *
fba45db2 3071unpack_string (char *src, char *dest, int length)
c906108c
SS
3072{
3073 while (length--)
3074 *dest++ = *src++;
3075 *dest = '\0';
3076 return src;
3077}
3078
3079static char *
fba45db2 3080pack_threadid (char *pkt, threadref *id)
c906108c
SS
3081{
3082 char *limit;
3083 unsigned char *altid;
3084
3085 altid = (unsigned char *) id;
3086 limit = pkt + BUF_THREAD_ID_SIZE;
3087 while (pkt < limit)
3088 pkt = pack_hex_byte (pkt, *altid++);
3089 return pkt;
3090}
3091
3092
3093static char *
fba45db2 3094unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
3095{
3096 char *altref;
3097 char *limit = inbuf + BUF_THREAD_ID_SIZE;
3098 int x, y;
3099
3100 altref = (char *) id;
3101
3102 while (inbuf < limit)
3103 {
3104 x = stubhex (*inbuf++);
3105 y = stubhex (*inbuf++);
3106 *altref++ = (x << 4) | y;
3107 }
3108 return inbuf;
3109}
3110
3111/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 3112 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
3113 to use 64bit thread references internally. This is an adapter
3114 function. */
3115
3116void
fba45db2 3117int_to_threadref (threadref *id, int value)
c906108c
SS
3118{
3119 unsigned char *scan;
3120
3121 scan = (unsigned char *) id;
3122 {
3123 int i = 4;
3124 while (i--)
3125 *scan++ = 0;
3126 }
3127 *scan++ = (value >> 24) & 0xff;
3128 *scan++ = (value >> 16) & 0xff;
3129 *scan++ = (value >> 8) & 0xff;
3130 *scan++ = (value & 0xff);
3131}
3132
3133static int
fba45db2 3134threadref_to_int (threadref *ref)
c906108c
SS
3135{
3136 int i, value = 0;
3137 unsigned char *scan;
3138
cfd77fa1 3139 scan = *ref;
c906108c
SS
3140 scan += 4;
3141 i = 4;
3142 while (i-- > 0)
3143 value = (value << 8) | ((*scan++) & 0xff);
3144 return value;
3145}
3146
3147static void
fba45db2 3148copy_threadref (threadref *dest, threadref *src)
c906108c
SS
3149{
3150 int i;
3151 unsigned char *csrc, *cdest;
3152
3153 csrc = (unsigned char *) src;
3154 cdest = (unsigned char *) dest;
3155 i = 8;
3156 while (i--)
3157 *cdest++ = *csrc++;
3158}
3159
3160static int
fba45db2 3161threadmatch (threadref *dest, threadref *src)
c906108c 3162{
23860348 3163 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
3164#if 0
3165 unsigned char *srcp, *destp;
3166 int i, result;
3167 srcp = (char *) src;
3168 destp = (char *) dest;
3169
3170 result = 1;
3171 while (i-- > 0)
3172 result &= (*srcp++ == *destp++) ? 1 : 0;
3173 return result;
3174#endif
3175 return 1;
3176}
3177
3178/*
c5aa993b
JM
3179 threadid:1, # always request threadid
3180 context_exists:2,
3181 display:4,
3182 unique_name:8,
3183 more_display:16
3184 */
c906108c
SS
3185
3186/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3187
3188static char *
fba45db2 3189pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 3190{
23860348
MS
3191 *pkt++ = 'q'; /* Info Query */
3192 *pkt++ = 'P'; /* process or thread info */
3193 pkt = pack_int (pkt, mode); /* mode */
c906108c 3194 pkt = pack_threadid (pkt, id); /* threadid */
23860348 3195 *pkt = '\0'; /* terminate */
c906108c
SS
3196 return pkt;
3197}
3198
23860348 3199/* These values tag the fields in a thread info response packet. */
c906108c 3200/* Tagging the fields allows us to request specific fields and to
23860348 3201 add more fields as time goes by. */
c906108c 3202
23860348 3203#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 3204#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 3205 fetch registers and its stack? */
c5aa993b 3206#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 3207#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 3208#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 3209 the process. */
c906108c 3210
6b8edb51
PA
3211int
3212remote_target::remote_unpack_thread_info_response (char *pkt,
3213 threadref *expectedref,
3214 gdb_ext_thread_info *info)
c906108c 3215{
d01949b6 3216 struct remote_state *rs = get_remote_state ();
c906108c 3217 int mask, length;
cfd77fa1 3218 int tag;
c906108c 3219 threadref ref;
6d820c5c 3220 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
3221 int retval = 1;
3222
23860348 3223 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
3224 info->active = 0;
3225 info->display[0] = '\0';
3226 info->shortname[0] = '\0';
3227 info->more_display[0] = '\0';
3228
23860348
MS
3229 /* Assume the characters indicating the packet type have been
3230 stripped. */
c906108c
SS
3231 pkt = unpack_int (pkt, &mask); /* arg mask */
3232 pkt = unpack_threadid (pkt, &ref);
3233
3234 if (mask == 0)
8a3fe4f8 3235 warning (_("Incomplete response to threadinfo request."));
c906108c 3236 if (!threadmatch (&ref, expectedref))
23860348 3237 { /* This is an answer to a different request. */
8a3fe4f8 3238 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
3239 return 0;
3240 }
3241 copy_threadref (&info->threadid, &ref);
3242
23860348 3243 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 3244
23860348
MS
3245 /* Packets are terminated with nulls. */
3246 while ((pkt < limit) && mask && *pkt)
c906108c
SS
3247 {
3248 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
3249 pkt = unpack_byte (pkt, &length); /* length */
3250 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 3251 {
8a3fe4f8 3252 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
3253 retval = 0;
3254 break;
3255 }
3256 if (tag == TAG_THREADID)
3257 {
3258 if (length != 16)
3259 {
8a3fe4f8 3260 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
3261 retval = 0;
3262 break;
3263 }
3264 pkt = unpack_threadid (pkt, &ref);
3265 mask = mask & ~TAG_THREADID;
3266 continue;
3267 }
3268 if (tag == TAG_EXISTS)
3269 {
3270 info->active = stub_unpack_int (pkt, length);
3271 pkt += length;
3272 mask = mask & ~(TAG_EXISTS);
3273 if (length > 8)
3274 {
8a3fe4f8 3275 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
3276 retval = 0;
3277 break;
3278 }
3279 continue;
3280 }
3281 if (tag == TAG_THREADNAME)
3282 {
3283 pkt = unpack_string (pkt, &info->shortname[0], length);
3284 mask = mask & ~TAG_THREADNAME;
3285 continue;
3286 }
3287 if (tag == TAG_DISPLAY)
3288 {
3289 pkt = unpack_string (pkt, &info->display[0], length);
3290 mask = mask & ~TAG_DISPLAY;
3291 continue;
3292 }
3293 if (tag == TAG_MOREDISPLAY)
3294 {
3295 pkt = unpack_string (pkt, &info->more_display[0], length);
3296 mask = mask & ~TAG_MOREDISPLAY;
3297 continue;
3298 }
8a3fe4f8 3299 warning (_("ERROR RMT: unknown thread info tag."));
23860348 3300 break; /* Not a tag we know about. */
c906108c
SS
3301 }
3302 return retval;
3303}
3304
6b8edb51
PA
3305int
3306remote_target::remote_get_threadinfo (threadref *threadid,
3307 int fieldset,
3308 gdb_ext_thread_info *info)
c906108c 3309{
d01949b6 3310 struct remote_state *rs = get_remote_state ();
c906108c 3311 int result;
c906108c 3312
2e9f7625
DJ
3313 pack_threadinfo_request (rs->buf, fieldset, threadid);
3314 putpkt (rs->buf);
6d820c5c 3315 getpkt (&rs->buf, &rs->buf_size, 0);
3084dd77
PA
3316
3317 if (rs->buf[0] == '\0')
3318 return 0;
3319
2e9f7625 3320 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 3321 threadid, info);
c906108c
SS
3322 return result;
3323}
3324
c906108c
SS
3325/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3326
3327static char *
fba45db2
KB
3328pack_threadlist_request (char *pkt, int startflag, int threadcount,
3329 threadref *nextthread)
c906108c
SS
3330{
3331 *pkt++ = 'q'; /* info query packet */
3332 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 3333 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
3334 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
3335 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
3336 *pkt = '\0';
3337 return pkt;
3338}
3339
3340/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3341
6b8edb51
PA
3342int
3343remote_target::parse_threadlist_response (char *pkt, int result_limit,
3344 threadref *original_echo,
3345 threadref *resultlist,
3346 int *doneflag)
c906108c 3347{
d01949b6 3348 struct remote_state *rs = get_remote_state ();
c906108c
SS
3349 char *limit;
3350 int count, resultcount, done;
3351
3352 resultcount = 0;
3353 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 3354 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 3355 /* done parse past here */
c906108c
SS
3356 pkt = unpack_byte (pkt, &count); /* count field */
3357 pkt = unpack_nibble (pkt, &done);
3358 /* The first threadid is the argument threadid. */
3359 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
3360 while ((count-- > 0) && (pkt < limit))
3361 {
3362 pkt = unpack_threadid (pkt, resultlist++);
3363 if (resultcount++ >= result_limit)
3364 break;
3365 }
3366 if (doneflag)
3367 *doneflag = done;
3368 return resultcount;
3369}
3370
6dc54d91
PA
3371/* Fetch the next batch of threads from the remote. Returns -1 if the
3372 qL packet is not supported, 0 on error and 1 on success. */
3373
6b8edb51
PA
3374int
3375remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3376 int result_limit, int *done, int *result_count,
3377 threadref *threadlist)
c906108c 3378{
d01949b6 3379 struct remote_state *rs = get_remote_state ();
c906108c
SS
3380 int result = 1;
3381
23860348 3382 /* Trancate result limit to be smaller than the packet size. */
3e43a32a
MS
3383 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3384 >= get_remote_packet_size ())
ea9c271d 3385 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 3386
6d820c5c
DJ
3387 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
3388 putpkt (rs->buf);
3389 getpkt (&rs->buf, &rs->buf_size, 0);
d8f2712d 3390 if (*rs->buf == '\0')
6dc54d91
PA
3391 {
3392 /* Packet not supported. */
3393 return -1;
3394 }
3395
3396 *result_count =
3397 parse_threadlist_response (rs->buf + 2, result_limit,
3398 &rs->echo_nextthread, threadlist, done);
c906108c 3399
0d031856 3400 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 3401 {
23860348
MS
3402 /* FIXME: This is a good reason to drop the packet. */
3403 /* Possably, there is a duplicate response. */
c906108c
SS
3404 /* Possabilities :
3405 retransmit immediatly - race conditions
3406 retransmit after timeout - yes
3407 exit
3408 wait for packet, then exit
3409 */
8a3fe4f8 3410 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 3411 return 0; /* I choose simply exiting. */
c906108c
SS
3412 }
3413 if (*result_count <= 0)
3414 {
3415 if (*done != 1)
3416 {
8a3fe4f8 3417 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
3418 result = 0;
3419 }
3420 return result; /* break; */
3421 }
3422 if (*result_count > result_limit)
3423 {
3424 *result_count = 0;
8a3fe4f8 3425 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
3426 return 0;
3427 }
3428 return result;
3429}
3430
6dc54d91
PA
3431/* Fetch the list of remote threads, with the qL packet, and call
3432 STEPFUNCTION for each thread found. Stops iterating and returns 1
3433 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3434 STEPFUNCTION returns false. If the packet is not supported,
3435 returns -1. */
c906108c 3436
6b8edb51
PA
3437int
3438remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3439 void *context, int looplimit)
c906108c 3440{
0d031856 3441 struct remote_state *rs = get_remote_state ();
c906108c
SS
3442 int done, i, result_count;
3443 int startflag = 1;
3444 int result = 1;
3445 int loopcount = 0;
c906108c
SS
3446
3447 done = 0;
3448 while (!done)
3449 {
3450 if (loopcount++ > looplimit)
3451 {
3452 result = 0;
8a3fe4f8 3453 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
3454 break;
3455 }
6dc54d91
PA
3456 result = remote_get_threadlist (startflag, &rs->nextthread,
3457 MAXTHREADLISTRESULTS,
3458 &done, &result_count,
3459 rs->resultthreadlist);
3460 if (result <= 0)
3461 break;
23860348 3462 /* Clear for later iterations. */
c906108c
SS
3463 startflag = 0;
3464 /* Setup to resume next batch of thread references, set nextthread. */
3465 if (result_count >= 1)
0d031856
TT
3466 copy_threadref (&rs->nextthread,
3467 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
3468 i = 0;
3469 while (result_count--)
6dc54d91
PA
3470 {
3471 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3472 {
3473 result = 0;
3474 break;
3475 }
3476 }
c906108c
SS
3477 }
3478 return result;
3479}
3480
6dc54d91
PA
3481/* A thread found on the remote target. */
3482
21fe1c75 3483struct thread_item
6dc54d91 3484{
21fe1c75
SM
3485 explicit thread_item (ptid_t ptid_)
3486 : ptid (ptid_)
3487 {}
3488
3489 thread_item (thread_item &&other) = default;
3490 thread_item &operator= (thread_item &&other) = default;
3491
3492 DISABLE_COPY_AND_ASSIGN (thread_item);
3493
6dc54d91
PA
3494 /* The thread's PTID. */
3495 ptid_t ptid;
3496
21fe1c75
SM
3497 /* The thread's extra info. */
3498 std::string extra;
6dc54d91 3499
21fe1c75
SM
3500 /* The thread's name. */
3501 std::string name;
79efa585 3502
6dc54d91 3503 /* The core the thread was running on. -1 if not known. */
21fe1c75 3504 int core = -1;
f6327dcb
KB
3505
3506 /* The thread handle associated with the thread. */
21fe1c75 3507 gdb::byte_vector thread_handle;
21fe1c75 3508};
6dc54d91
PA
3509
3510/* Context passed around to the various methods listing remote
3511 threads. As new threads are found, they're added to the ITEMS
3512 vector. */
3513
3514struct threads_listing_context
3515{
21fe1c75
SM
3516 /* Return true if this object contains an entry for a thread with ptid
3517 PTID. */
6dc54d91 3518
21fe1c75
SM
3519 bool contains_thread (ptid_t ptid) const
3520 {
3521 auto match_ptid = [&] (const thread_item &item)
3522 {
3523 return item.ptid == ptid;
3524 };
80134cf5 3525
21fe1c75
SM
3526 auto it = std::find_if (this->items.begin (),
3527 this->items.end (),
3528 match_ptid);
80134cf5 3529
21fe1c75
SM
3530 return it != this->items.end ();
3531 }
80134cf5 3532
21fe1c75 3533 /* Remove the thread with ptid PTID. */
80134cf5 3534
21fe1c75
SM
3535 void remove_thread (ptid_t ptid)
3536 {
3537 auto match_ptid = [&] (const thread_item &item)
3538 {
3539 return item.ptid == ptid;
3540 };
cbb8991c 3541
21fe1c75
SM
3542 auto it = std::remove_if (this->items.begin (),
3543 this->items.end (),
3544 match_ptid);
cbb8991c 3545
21fe1c75
SM
3546 if (it != this->items.end ())
3547 this->items.erase (it);
3548 }
3549
3550 /* The threads found on the remote target. */
3551 std::vector<thread_item> items;
3552};
cbb8991c 3553
c906108c 3554static int
6dc54d91 3555remote_newthread_step (threadref *ref, void *data)
c906108c 3556{
19ba03f4
SM
3557 struct threads_listing_context *context
3558 = (struct threads_listing_context *) data;
21fe1c75
SM
3559 int pid = inferior_ptid.pid ();
3560 int lwp = threadref_to_int (ref);
3561 ptid_t ptid (pid, lwp);
6dc54d91 3562
21fe1c75 3563 context->items.emplace_back (ptid);
6dc54d91 3564
c906108c
SS
3565 return 1; /* continue iterator */
3566}
3567
3568#define CRAZY_MAX_THREADS 1000
3569
6b8edb51
PA
3570ptid_t
3571remote_target::remote_current_thread (ptid_t oldpid)
c906108c 3572{
d01949b6 3573 struct remote_state *rs = get_remote_state ();
c906108c
SS
3574
3575 putpkt ("qC");
6d820c5c 3576 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3577 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34 3578 {
256642e8 3579 const char *obuf;
c9f35b34
KB
3580 ptid_t result;
3581
3582 result = read_ptid (&rs->buf[2], &obuf);
3583 if (*obuf != '\0' && remote_debug)
3584 fprintf_unfiltered (gdb_stdlog,
3585 "warning: garbage in qC reply\n");
3586
3587 return result;
3588 }
c906108c
SS
3589 else
3590 return oldpid;
3591}
3592
6dc54d91 3593/* List remote threads using the deprecated qL packet. */
cce74817 3594
6b8edb51
PA
3595int
3596remote_target::remote_get_threads_with_ql (threads_listing_context *context)
c906108c 3597{
6dc54d91
PA
3598 if (remote_threadlist_iterator (remote_newthread_step, context,
3599 CRAZY_MAX_THREADS) >= 0)
3600 return 1;
3601
3602 return 0;
c906108c
SS
3603}
3604
dc146f7c
VP
3605#if defined(HAVE_LIBEXPAT)
3606
dc146f7c
VP
3607static void
3608start_thread (struct gdb_xml_parser *parser,
3609 const struct gdb_xml_element *element,
4d0fdd9b
SM
3610 void *user_data,
3611 std::vector<gdb_xml_value> &attributes)
dc146f7c 3612{
19ba03f4
SM
3613 struct threads_listing_context *data
3614 = (struct threads_listing_context *) user_data;
3d2c1d41 3615 struct gdb_xml_value *attr;
dc146f7c 3616
4d0fdd9b 3617 char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
21fe1c75
SM
3618 ptid_t ptid = read_ptid (id, NULL);
3619
3620 data->items.emplace_back (ptid);
3621 thread_item &item = data->items.back ();
dc146f7c 3622
3d2c1d41
PA
3623 attr = xml_find_attribute (attributes, "core");
3624 if (attr != NULL)
4d0fdd9b 3625 item.core = *(ULONGEST *) attr->value.get ();
dc146f7c 3626
79efa585 3627 attr = xml_find_attribute (attributes, "name");
21fe1c75 3628 if (attr != NULL)
4d0fdd9b 3629 item.name = (const char *) attr->value.get ();
79efa585 3630
f6327dcb
KB
3631 attr = xml_find_attribute (attributes, "handle");
3632 if (attr != NULL)
4d0fdd9b 3633 item.thread_handle = hex2bin ((const char *) attr->value.get ());
dc146f7c
VP
3634}
3635
3636static void
3637end_thread (struct gdb_xml_parser *parser,
3638 const struct gdb_xml_element *element,
3639 void *user_data, const char *body_text)
3640{
19ba03f4
SM
3641 struct threads_listing_context *data
3642 = (struct threads_listing_context *) user_data;
dc146f7c 3643
21fe1c75
SM
3644 if (body_text != NULL && *body_text != '\0')
3645 data->items.back ().extra = body_text;
dc146f7c
VP
3646}
3647
3648const struct gdb_xml_attribute thread_attributes[] = {
3649 { "id", GDB_XML_AF_NONE, NULL, NULL },
3650 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3651 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
f6327dcb 3652 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3653 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3654};
3655
3656const struct gdb_xml_element thread_children[] = {
3657 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3658};
3659
3660const struct gdb_xml_element threads_children[] = {
3661 { "thread", thread_attributes, thread_children,
3662 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3663 start_thread, end_thread },
3664 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3665};
3666
3667const struct gdb_xml_element threads_elements[] = {
3668 { "threads", NULL, threads_children,
3669 GDB_XML_EF_NONE, NULL, NULL },
3670 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3671};
3672
3673#endif
3674
6dc54d91 3675/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3676
6b8edb51
PA
3677int
3678remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
0f71a2f6 3679{
dc146f7c 3680#if defined(HAVE_LIBEXPAT)
4082afcc 3681 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3682 {
9018be22 3683 gdb::optional<gdb::char_vector> xml
6b8edb51 3684 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
efc0eabd 3685
9018be22 3686 if (xml && (*xml)[0] != '\0')
dc146f7c 3687 {
6dc54d91 3688 gdb_xml_parse_quick (_("threads"), "threads.dtd",
9018be22 3689 threads_elements, xml->data (), context);
dc146f7c
VP
3690 }
3691
6dc54d91 3692 return 1;
dc146f7c
VP
3693 }
3694#endif
3695
6dc54d91
PA
3696 return 0;
3697}
3698
3699/* List remote threads using qfThreadInfo/qsThreadInfo. */
3700
6b8edb51
PA
3701int
3702remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
6dc54d91
PA
3703{
3704 struct remote_state *rs = get_remote_state ();
3705
b80fafe3 3706 if (rs->use_threadinfo_query)
9d1f7ab2 3707 {
256642e8 3708 const char *bufp;
6dc54d91 3709
9d1f7ab2 3710 putpkt ("qfThreadInfo");
6d820c5c 3711 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3712 bufp = rs->buf;
9d1f7ab2 3713 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3714 {
9d1f7ab2
MS
3715 while (*bufp++ == 'm') /* reply contains one or more TID */
3716 {
3717 do
3718 {
21fe1c75
SM
3719 ptid_t ptid = read_ptid (bufp, &bufp);
3720 context->items.emplace_back (ptid);
9d1f7ab2
MS
3721 }
3722 while (*bufp++ == ','); /* comma-separated list */
3723 putpkt ("qsThreadInfo");
6d820c5c 3724 getpkt (&rs->buf, &rs->buf_size, 0);
6dc54d91 3725 bufp = rs->buf;
9d1f7ab2 3726 }
6dc54d91
PA
3727 return 1;
3728 }
3729 else
3730 {
3731 /* Packet not recognized. */
3732 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3733 }
3734 }
3735
6dc54d91
PA
3736 return 0;
3737}
3738
e8032dde 3739/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3740 targets. */
3741
f6ac5f3d
PA
3742void
3743remote_target::update_thread_list ()
6dc54d91 3744{
6dc54d91 3745 struct threads_listing_context context;
ab970af1 3746 int got_list = 0;
e8032dde 3747
6dc54d91
PA
3748 /* We have a few different mechanisms to fetch the thread list. Try
3749 them all, starting with the most preferred one first, falling
3750 back to older methods. */
6b8edb51
PA
3751 if (remote_get_threads_with_qxfer (&context)
3752 || remote_get_threads_with_qthreadinfo (&context)
3753 || remote_get_threads_with_ql (&context))
6dc54d91 3754 {
ab970af1
PA
3755 struct thread_info *tp, *tmp;
3756
3757 got_list = 1;
3758
21fe1c75 3759 if (context.items.empty ()
f6ac5f3d 3760 && remote_thread_always_alive (inferior_ptid))
7d1a114c
PA
3761 {
3762 /* Some targets don't really support threads, but still
3763 reply an (empty) thread list in response to the thread
3764 listing packets, instead of replying "packet not
3765 supported". Exit early so we don't delete the main
3766 thread. */
7d1a114c
PA
3767 return;
3768 }
3769
ab970af1
PA
3770 /* CONTEXT now holds the current thread list on the remote
3771 target end. Delete GDB-side threads no longer found on the
3772 target. */
8a06aea7 3773 ALL_THREADS_SAFE (tp, tmp)
cbb8991c 3774 {
21fe1c75 3775 if (!context.contains_thread (tp->ptid))
ab970af1
PA
3776 {
3777 /* Not found. */
00431a78 3778 delete_thread (tp);
ab970af1 3779 }
cbb8991c
DB
3780 }
3781
3782 /* Remove any unreported fork child threads from CONTEXT so
3783 that we don't interfere with follow fork, which is where
3784 creation of such threads is handled. */
3785 remove_new_fork_children (&context);
74531fed 3786
ab970af1 3787 /* And now add threads we don't know about yet to our list. */
21fe1c75 3788 for (thread_item &item : context.items)
6dc54d91 3789 {
21fe1c75 3790 if (item.ptid != null_ptid)
6dc54d91 3791 {
6dc54d91 3792 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3793 executing until proven otherwise with a stop reply.
3794 In all-stop, we can only get here if all threads are
6dc54d91 3795 stopped. */
0d5b594f 3796 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3797
21fe1c75 3798 remote_notice_new_inferior (item.ptid, executing);
6dc54d91 3799
00431a78
PA
3800 thread_info *tp = find_thread_ptid (item.ptid);
3801 remote_thread_info *info = get_remote_thread_info (tp);
21fe1c75 3802 info->core = item.core;
7aabaf9d
SM
3803 info->extra = std::move (item.extra);
3804 info->name = std::move (item.name);
3805 info->thread_handle = std::move (item.thread_handle);
6dc54d91
PA
3806 }
3807 }
3808 }
3809
ab970af1
PA
3810 if (!got_list)
3811 {
3812 /* If no thread listing method is supported, then query whether
3813 each known thread is alive, one by one, with the T packet.
3814 If the target doesn't support threads at all, then this is a
3815 no-op. See remote_thread_alive. */
3816 prune_threads ();
3817 }
9d1f7ab2
MS
3818}
3819
802188a7 3820/*
9d1f7ab2
MS
3821 * Collect a descriptive string about the given thread.
3822 * The target may say anything it wants to about the thread
3823 * (typically info about its blocked / runnable state, name, etc.).
3824 * This string will appear in the info threads display.
802188a7 3825 *
9d1f7ab2
MS
3826 * Optional: targets are not required to implement this function.
3827 */
3828
f6ac5f3d
PA
3829const char *
3830remote_target::extra_thread_info (thread_info *tp)
9d1f7ab2 3831{
d01949b6 3832 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3833 int set;
3834 threadref id;
3835 struct gdb_ext_thread_info threadinfo;
9d1f7ab2 3836
5d93a237 3837 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3838 internal_error (__FILE__, __LINE__,
e2e0b3e5 3839 _("remote_threads_extra_info"));
9d1f7ab2 3840
d7e15655 3841 if (tp->ptid == magic_null_ptid
e38504b3 3842 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0))
60e569b9
PA
3843 /* This is the main thread which was added by GDB. The remote
3844 server doesn't know about it. */
3845 return NULL;
3846
c76a8ea3
PA
3847 std::string &extra = get_remote_thread_info (tp)->extra;
3848
3849 /* If already have cached info, use it. */
3850 if (!extra.empty ())
3851 return extra.c_str ();
3852
4082afcc 3853 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3854 {
c76a8ea3
PA
3855 /* If we're using qXfer:threads:read, then the extra info is
3856 included in the XML. So if we didn't have anything cached,
3857 it's because there's really no extra info. */
3858 return NULL;
dc146f7c
VP
3859 }
3860
b80fafe3 3861 if (rs->use_threadextra_query)
9d1f7ab2 3862 {
82f73884
PA
3863 char *b = rs->buf;
3864 char *endb = rs->buf + get_remote_packet_size ();
3865
3866 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3867 b += strlen (b);
3868 write_ptid (b, endb, tp->ptid);
3869
2e9f7625 3870 putpkt (rs->buf);
6d820c5c 3871 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3872 if (rs->buf[0] != 0)
9d1f7ab2 3873 {
c76a8ea3
PA
3874 extra.resize (strlen (rs->buf) / 2);
3875 hex2bin (rs->buf, (gdb_byte *) &extra[0], extra.size ());
3876 return extra.c_str ();
9d1f7ab2 3877 }
0f71a2f6 3878 }
9d1f7ab2
MS
3879
3880 /* If the above query fails, fall back to the old method. */
b80fafe3 3881 rs->use_threadextra_query = 0;
9d1f7ab2
MS
3882 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3883 | TAG_MOREDISPLAY | TAG_DISPLAY;
e38504b3 3884 int_to_threadref (&id, tp->ptid.lwp ());
9d1f7ab2
MS
3885 if (remote_get_threadinfo (&id, set, &threadinfo))
3886 if (threadinfo.active)
0f71a2f6 3887 {
9d1f7ab2 3888 if (*threadinfo.shortname)
c76a8ea3 3889 string_appendf (extra, " Name: %s", threadinfo.shortname);
9d1f7ab2 3890 if (*threadinfo.display)
c76a8ea3
PA
3891 {
3892 if (!extra.empty ())
3893 extra += ',';
3894 string_appendf (extra, " State: %s", threadinfo.display);
3895 }
9d1f7ab2 3896 if (*threadinfo.more_display)
c5aa993b 3897 {
c76a8ea3
PA
3898 if (!extra.empty ())
3899 extra += ',';
3900 string_appendf (extra, " Priority: %s", threadinfo.more_display);
c5aa993b 3901 }
c76a8ea3 3902 return extra.c_str ();
0f71a2f6 3903 }
9d1f7ab2 3904 return NULL;
0f71a2f6 3905}
c906108c 3906\f
c5aa993b 3907
f6ac5f3d
PA
3908bool
3909remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
3910 struct static_tracepoint_marker *marker)
0fb4aa4b
PA
3911{
3912 struct remote_state *rs = get_remote_state ();
3913 char *p = rs->buf;
3914
bba74b36 3915 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
3916 p += strlen (p);
3917 p += hexnumstr (p, addr);
3918 putpkt (rs->buf);
3919 getpkt (&rs->buf, &rs->buf_size, 0);
3920 p = rs->buf;
3921
3922 if (*p == 'E')
3923 error (_("Remote failure reply: %s"), p);
3924
3925 if (*p++ == 'm')
3926 {
256642e8 3927 parse_static_tracepoint_marker_definition (p, NULL, marker);
5d9310c4 3928 return true;
0fb4aa4b
PA
3929 }
3930
5d9310c4 3931 return false;
0fb4aa4b
PA
3932}
3933
f6ac5f3d
PA
3934std::vector<static_tracepoint_marker>
3935remote_target::static_tracepoint_markers_by_strid (const char *strid)
0fb4aa4b
PA
3936{
3937 struct remote_state *rs = get_remote_state ();
5d9310c4 3938 std::vector<static_tracepoint_marker> markers;
256642e8 3939 const char *p;
5d9310c4 3940 static_tracepoint_marker marker;
0fb4aa4b
PA
3941
3942 /* Ask for a first packet of static tracepoint marker
3943 definition. */
3944 putpkt ("qTfSTM");
3945 getpkt (&rs->buf, &rs->buf_size, 0);
3946 p = rs->buf;
3947 if (*p == 'E')
3948 error (_("Remote failure reply: %s"), p);
3949
0fb4aa4b
PA
3950 while (*p++ == 'm')
3951 {
0fb4aa4b
PA
3952 do
3953 {
5d9310c4 3954 parse_static_tracepoint_marker_definition (p, &p, &marker);
0fb4aa4b 3955
5d9310c4
SM
3956 if (strid == NULL || marker.str_id == strid)
3957 markers.push_back (std::move (marker));
0fb4aa4b
PA
3958 }
3959 while (*p++ == ','); /* comma-separated list */
3960 /* Ask for another packet of static tracepoint definition. */
3961 putpkt ("qTsSTM");
3962 getpkt (&rs->buf, &rs->buf_size, 0);
3963 p = rs->buf;
3964 }
3965
0fb4aa4b
PA
3966 return markers;
3967}
3968
3969\f
10760264
JB
3970/* Implement the to_get_ada_task_ptid function for the remote targets. */
3971
f6ac5f3d
PA
3972ptid_t
3973remote_target::get_ada_task_ptid (long lwp, long thread)
10760264 3974{
e99b03dc 3975 return ptid_t (inferior_ptid.pid (), lwp, 0);
10760264
JB
3976}
3977\f
3978
24b06219 3979/* Restart the remote side; this is an extended protocol operation. */
c906108c 3980
6b8edb51
PA
3981void
3982remote_target::extended_remote_restart ()
c906108c 3983{
d01949b6 3984 struct remote_state *rs = get_remote_state ();
c906108c
SS
3985
3986 /* Send the restart command; for reasons I don't understand the
3987 remote side really expects a number after the "R". */
ea9c271d 3988 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 3989 putpkt (rs->buf);
c906108c 3990
ad9a8f3f 3991 remote_fileio_reset ();
c906108c
SS
3992}
3993\f
3994/* Clean up connection to a remote debugger. */
3995
f6ac5f3d
PA
3996void
3997remote_target::close ()
c906108c 3998{
048094ac 3999 /* Make sure we leave stdin registered in the event loop. */
f6ac5f3d 4000 terminal_ours ();
ce5ce7ed 4001
ce5ce7ed 4002 /* We don't have a connection to the remote stub anymore. Get rid
f67fd822
PM
4003 of all the inferiors and their threads we were controlling.
4004 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
4005 will be unable to find the thread corresponding to (pid, 0, 0). */
0f2caa1b 4006 inferior_ptid = null_ptid;
f67fd822 4007 discard_all_inferiors ();
ce5ce7ed 4008
6b8edb51
PA
4009 trace_reset_local_state ();
4010
4011 delete this;
4012}
4013
4014remote_target::~remote_target ()
4015{
4016 struct remote_state *rs = get_remote_state ();
4017
4018 /* Check for NULL because we may get here with a partially
4019 constructed target/connection. */
4020 if (rs->remote_desc == nullptr)
4021 return;
4022
4023 serial_close (rs->remote_desc);
4024
4025 /* We are destroying the remote target, so we should discard
f48ff2a7 4026 everything of this target. */
6b8edb51 4027 discard_pending_stop_replies_in_queue ();
74531fed 4028
6b8edb51
PA
4029 if (rs->remote_async_inferior_event_token)
4030 delete_async_event_handler (&rs->remote_async_inferior_event_token);
722247f1 4031
5965e028 4032 remote_notif_state_xfree (rs->notif_state);
c906108c
SS
4033}
4034
23860348 4035/* Query the remote side for the text, data and bss offsets. */
c906108c 4036
6b8edb51
PA
4037void
4038remote_target::get_offsets ()
c906108c 4039{
d01949b6 4040 struct remote_state *rs = get_remote_state ();
2e9f7625 4041 char *buf;
085dd6e6 4042 char *ptr;
31d99776
DJ
4043 int lose, num_segments = 0, do_sections, do_segments;
4044 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 4045 struct section_offsets *offs;
31d99776
DJ
4046 struct symfile_segment_data *data;
4047
4048 if (symfile_objfile == NULL)
4049 return;
c906108c
SS
4050
4051 putpkt ("qOffsets");
6d820c5c 4052 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 4053 buf = rs->buf;
c906108c
SS
4054
4055 if (buf[0] == '\000')
4056 return; /* Return silently. Stub doesn't support
23860348 4057 this command. */
c906108c
SS
4058 if (buf[0] == 'E')
4059 {
8a3fe4f8 4060 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
4061 return;
4062 }
4063
4064 /* Pick up each field in turn. This used to be done with scanf, but
4065 scanf will make trouble if CORE_ADDR size doesn't match
4066 conversion directives correctly. The following code will work
4067 with any size of CORE_ADDR. */
4068 text_addr = data_addr = bss_addr = 0;
4069 ptr = buf;
4070 lose = 0;
4071
61012eef 4072 if (startswith (ptr, "Text="))
c906108c
SS
4073 {
4074 ptr += 5;
4075 /* Don't use strtol, could lose on big values. */
4076 while (*ptr && *ptr != ';')
4077 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 4078
61012eef 4079 if (startswith (ptr, ";Data="))
31d99776
DJ
4080 {
4081 ptr += 6;
4082 while (*ptr && *ptr != ';')
4083 data_addr = (data_addr << 4) + fromhex (*ptr++);
4084 }
4085 else
4086 lose = 1;
4087
61012eef 4088 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
4089 {
4090 ptr += 5;
4091 while (*ptr && *ptr != ';')
4092 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 4093
31d99776
DJ
4094 if (bss_addr != data_addr)
4095 warning (_("Target reported unsupported offsets: %s"), buf);
4096 }
4097 else
4098 lose = 1;
4099 }
61012eef 4100 else if (startswith (ptr, "TextSeg="))
c906108c 4101 {
31d99776
DJ
4102 ptr += 8;
4103 /* Don't use strtol, could lose on big values. */
c906108c 4104 while (*ptr && *ptr != ';')
31d99776
DJ
4105 text_addr = (text_addr << 4) + fromhex (*ptr++);
4106 num_segments = 1;
4107
61012eef 4108 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
4109 {
4110 ptr += 9;
4111 while (*ptr && *ptr != ';')
4112 data_addr = (data_addr << 4) + fromhex (*ptr++);
4113 num_segments++;
4114 }
c906108c
SS
4115 }
4116 else
4117 lose = 1;
4118
4119 if (lose)
8a3fe4f8 4120 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
4121 else if (*ptr != '\0')
4122 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 4123
802188a7 4124 offs = ((struct section_offsets *)
a39a16c4 4125 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 4126 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 4127 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 4128
31d99776
DJ
4129 data = get_symfile_segment_data (symfile_objfile->obfd);
4130 do_segments = (data != NULL);
4131 do_sections = num_segments == 0;
c906108c 4132
28c32713 4133 if (num_segments > 0)
31d99776 4134 {
31d99776
DJ
4135 segments[0] = text_addr;
4136 segments[1] = data_addr;
4137 }
28c32713
JB
4138 /* If we have two segments, we can still try to relocate everything
4139 by assuming that the .text and .data offsets apply to the whole
4140 text and data segments. Convert the offsets given in the packet
4141 to base addresses for symfile_map_offsets_to_segments. */
4142 else if (data && data->num_segments == 2)
4143 {
4144 segments[0] = data->segment_bases[0] + text_addr;
4145 segments[1] = data->segment_bases[1] + data_addr;
4146 num_segments = 2;
4147 }
8d385431
DJ
4148 /* If the object file has only one segment, assume that it is text
4149 rather than data; main programs with no writable data are rare,
4150 but programs with no code are useless. Of course the code might
4151 have ended up in the data segment... to detect that we would need
4152 the permissions here. */
4153 else if (data && data->num_segments == 1)
4154 {
4155 segments[0] = data->segment_bases[0] + text_addr;
4156 num_segments = 1;
4157 }
28c32713
JB
4158 /* There's no way to relocate by segment. */
4159 else
4160 do_segments = 0;
31d99776
DJ
4161
4162 if (do_segments)
4163 {
4164 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
4165 offs, num_segments, segments);
4166
4167 if (ret == 0 && !do_sections)
3e43a32a
MS
4168 error (_("Can not handle qOffsets TextSeg "
4169 "response with this symbol file"));
31d99776
DJ
4170
4171 if (ret > 0)
4172 do_sections = 0;
4173 }
c906108c 4174
9ef895d6
DJ
4175 if (data)
4176 free_symfile_segment_data (data);
31d99776
DJ
4177
4178 if (do_sections)
4179 {
4180 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
4181
3e43a32a
MS
4182 /* This is a temporary kludge to force data and bss to use the
4183 same offsets because that's what nlmconv does now. The real
4184 solution requires changes to the stub and remote.c that I
4185 don't have time to do right now. */
31d99776
DJ
4186
4187 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
4188 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
4189 }
c906108c
SS
4190
4191 objfile_relocate (symfile_objfile, offs);
4192}
4193
9a7071a8 4194/* Send interrupt_sequence to remote target. */
6b8edb51
PA
4195
4196void
4197remote_target::send_interrupt_sequence ()
9a7071a8 4198{
5d93a237
TT
4199 struct remote_state *rs = get_remote_state ();
4200
9a7071a8 4201 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 4202 remote_serial_write ("\x03", 1);
9a7071a8 4203 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 4204 serial_send_break (rs->remote_desc);
9a7071a8
JB
4205 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4206 {
5d93a237 4207 serial_send_break (rs->remote_desc);
c33e31fd 4208 remote_serial_write ("g", 1);
9a7071a8
JB
4209 }
4210 else
4211 internal_error (__FILE__, __LINE__,
4212 _("Invalid value for interrupt_sequence_mode: %s."),
4213 interrupt_sequence_mode);
4214}
4215
3405876a
PA
4216
4217/* If STOP_REPLY is a T stop reply, look for the "thread" register,
4218 and extract the PTID. Returns NULL_PTID if not found. */
4219
4220static ptid_t
4221stop_reply_extract_thread (char *stop_reply)
4222{
4223 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4224 {
256642e8 4225 const char *p;
3405876a
PA
4226
4227 /* Txx r:val ; r:val (...) */
4228 p = &stop_reply[3];
4229
4230 /* Look for "register" named "thread". */
4231 while (*p != '\0')
4232 {
256642e8 4233 const char *p1;
3405876a
PA
4234
4235 p1 = strchr (p, ':');
4236 if (p1 == NULL)
4237 return null_ptid;
4238
4239 if (strncmp (p, "thread", p1 - p) == 0)
4240 return read_ptid (++p1, &p);
4241
4242 p1 = strchr (p, ';');
4243 if (p1 == NULL)
4244 return null_ptid;
4245 p1++;
4246
4247 p = p1;
4248 }
4249 }
4250
4251 return null_ptid;
4252}
4253
b7ea362b
PA
4254/* Determine the remote side's current thread. If we have a stop
4255 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4256 "thread" register we can extract the current thread from. If not,
4257 ask the remote which is the current thread with qC. The former
4258 method avoids a roundtrip. */
4259
6b8edb51
PA
4260ptid_t
4261remote_target::get_current_thread (char *wait_status)
b7ea362b 4262{
6a49a997 4263 ptid_t ptid = null_ptid;
b7ea362b
PA
4264
4265 /* Note we don't use remote_parse_stop_reply as that makes use of
4266 the target architecture, which we haven't yet fully determined at
4267 this point. */
4268 if (wait_status != NULL)
4269 ptid = stop_reply_extract_thread (wait_status);
d7e15655 4270 if (ptid == null_ptid)
b7ea362b
PA
4271 ptid = remote_current_thread (inferior_ptid);
4272
4273 return ptid;
4274}
4275
49c62f2e
PA
4276/* Query the remote target for which is the current thread/process,
4277 add it to our tables, and update INFERIOR_PTID. The caller is
4278 responsible for setting the state such that the remote end is ready
3405876a
PA
4279 to return the current thread.
4280
4281 This function is called after handling the '?' or 'vRun' packets,
4282 whose response is a stop reply from which we can also try
4283 extracting the thread. If the target doesn't support the explicit
4284 qC query, we infer the current thread from that stop reply, passed
4285 in in WAIT_STATUS, which may be NULL. */
49c62f2e 4286
6b8edb51
PA
4287void
4288remote_target::add_current_inferior_and_thread (char *wait_status)
49c62f2e
PA
4289{
4290 struct remote_state *rs = get_remote_state ();
4291 int fake_pid_p = 0;
49c62f2e
PA
4292
4293 inferior_ptid = null_ptid;
4294
b7ea362b 4295 /* Now, if we have thread information, update inferior_ptid. */
87215ad1 4296 ptid_t curr_ptid = get_current_thread (wait_status);
3405876a 4297
87215ad1 4298 if (curr_ptid != null_ptid)
49c62f2e
PA
4299 {
4300 if (!remote_multi_process_p (rs))
4301 fake_pid_p = 1;
49c62f2e
PA
4302 }
4303 else
4304 {
4305 /* Without this, some commands which require an active target
4306 (such as kill) won't work. This variable serves (at least)
4307 double duty as both the pid of the target process (if it has
4308 such), and as a flag indicating that a target is active. */
87215ad1 4309 curr_ptid = magic_null_ptid;
49c62f2e
PA
4310 fake_pid_p = 1;
4311 }
4312
e99b03dc 4313 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1);
49c62f2e 4314
87215ad1
SDJ
4315 /* Add the main thread and switch to it. Don't try reading
4316 registers yet, since we haven't fetched the target description
4317 yet. */
4318 thread_info *tp = add_thread_silent (curr_ptid);
4319 switch_to_thread_no_regs (tp);
49c62f2e
PA
4320}
4321
6efcd9a8
PA
4322/* Print info about a thread that was found already stopped on
4323 connection. */
4324
4325static void
4326print_one_stopped_thread (struct thread_info *thread)
4327{
4328 struct target_waitstatus *ws = &thread->suspend.waitstatus;
4329
00431a78 4330 switch_to_thread (thread);
f2ffa92b 4331 thread->suspend.stop_pc = get_frame_pc (get_current_frame ());
6efcd9a8
PA
4332 set_current_sal_from_frame (get_current_frame ());
4333
4334 thread->suspend.waitstatus_pending_p = 0;
4335
4336 if (ws->kind == TARGET_WAITKIND_STOPPED)
4337 {
4338 enum gdb_signal sig = ws->value.sig;
4339
4340 if (signal_print_state (sig))
76727919 4341 gdb::observers::signal_received.notify (sig);
6efcd9a8 4342 }
76727919 4343 gdb::observers::normal_stop.notify (NULL, 1);
6efcd9a8
PA
4344}
4345
221e1a37
PA
4346/* Process all initial stop replies the remote side sent in response
4347 to the ? packet. These indicate threads that were already stopped
4348 on initial connection. We mark these threads as stopped and print
4349 their current frame before giving the user the prompt. */
4350
6b8edb51
PA
4351void
4352remote_target::process_initial_stop_replies (int from_tty)
221e1a37
PA
4353{
4354 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
4355 struct inferior *inf;
4356 struct thread_info *thread;
4357 struct thread_info *selected = NULL;
4358 struct thread_info *lowest_stopped = NULL;
4359 struct thread_info *first = NULL;
221e1a37
PA
4360
4361 /* Consume the initial pending events. */
4362 while (pending_stop_replies-- > 0)
4363 {
4364 ptid_t waiton_ptid = minus_one_ptid;
4365 ptid_t event_ptid;
4366 struct target_waitstatus ws;
4367 int ignore_event = 0;
6efcd9a8 4368 struct thread_info *thread;
221e1a37
PA
4369
4370 memset (&ws, 0, sizeof (ws));
4371 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4372 if (remote_debug)
4373 print_target_wait_results (waiton_ptid, event_ptid, &ws);
4374
4375 switch (ws.kind)
4376 {
4377 case TARGET_WAITKIND_IGNORE:
4378 case TARGET_WAITKIND_NO_RESUMED:
4379 case TARGET_WAITKIND_SIGNALLED:
4380 case TARGET_WAITKIND_EXITED:
4381 /* We shouldn't see these, but if we do, just ignore. */
4382 if (remote_debug)
4383 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
4384 ignore_event = 1;
4385 break;
4386
4387 case TARGET_WAITKIND_EXECD:
4388 xfree (ws.value.execd_pathname);
4389 break;
4390 default:
4391 break;
4392 }
4393
4394 if (ignore_event)
4395 continue;
4396
6efcd9a8 4397 thread = find_thread_ptid (event_ptid);
221e1a37
PA
4398
4399 if (ws.kind == TARGET_WAITKIND_STOPPED)
4400 {
4401 enum gdb_signal sig = ws.value.sig;
4402
4403 /* Stubs traditionally report SIGTRAP as initial signal,
4404 instead of signal 0. Suppress it. */
4405 if (sig == GDB_SIGNAL_TRAP)
4406 sig = GDB_SIGNAL_0;
6efcd9a8
PA
4407 thread->suspend.stop_signal = sig;
4408 ws.value.sig = sig;
4409 }
221e1a37 4410
6efcd9a8
PA
4411 thread->suspend.waitstatus = ws;
4412
4413 if (ws.kind != TARGET_WAITKIND_STOPPED
4414 || ws.value.sig != GDB_SIGNAL_0)
4415 thread->suspend.waitstatus_pending_p = 1;
4416
4417 set_executing (event_ptid, 0);
4418 set_running (event_ptid, 0);
7aabaf9d 4419 get_remote_thread_info (thread)->vcont_resumed = 0;
6efcd9a8
PA
4420 }
4421
4422 /* "Notice" the new inferiors before anything related to
4423 registers/memory. */
4424 ALL_INFERIORS (inf)
4425 {
4426 if (inf->pid == 0)
4427 continue;
4428
4429 inf->needs_setup = 1;
4430
4431 if (non_stop)
4432 {
00431a78
PA
4433 thread = any_live_thread_of_inferior (inf);
4434 notice_new_inferior (thread, thread->state == THREAD_RUNNING,
6efcd9a8
PA
4435 from_tty);
4436 }
4437 }
4438
4439 /* If all-stop on top of non-stop, pause all threads. Note this
4440 records the threads' stop pc, so must be done after "noticing"
4441 the inferiors. */
4442 if (!non_stop)
4443 {
4444 stop_all_threads ();
4445
4446 /* If all threads of an inferior were already stopped, we
4447 haven't setup the inferior yet. */
4448 ALL_INFERIORS (inf)
4449 {
4450 if (inf->pid == 0)
4451 continue;
221e1a37 4452
6efcd9a8
PA
4453 if (inf->needs_setup)
4454 {
00431a78 4455 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. */
4465 ALL_NON_EXITED_THREADS (thread)
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 {
4492 thread = selected;
4493 if (thread == NULL)
4494 thread = lowest_stopped;
4495 if (thread == NULL)
4496 thread = first;
4497
4498 print_one_stopped_thread (thread);
4499 }
4500
4501 /* For "info program". */
4502 thread = inferior_thread ();
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);
4552 getpkt (&rs->buf, &rs->buf_size, 0);
4553 if (strcmp (rs->buf, "OK") == 0)
4554 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4555 else if (strcmp (rs->buf, "") != 0)
4556 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4557 rs->buf);
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");
4577 getpkt (&rs->buf, &rs->buf_size, 0);
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 ("!");
4586 getpkt (&rs->buf, &rs->buf_size, 0);
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");
4613 getpkt (&rs->buf, &rs->buf_size, 0);
4614
4615 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4616 error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
74531fed
PA
4617
4618 /* Find about threads and processes the stub is already
4619 controlling. We default to adding them in the running state.
4620 The '?' query below will then tell us about which threads are
4621 stopped. */
f6ac5f3d 4622 this->update_thread_list ();
74531fed 4623 }
4082afcc 4624 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4625 {
4626 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4627 Request it explicitly. */
74531fed
PA
4628 putpkt ("QNonStop:0");
4629 getpkt (&rs->buf, &rs->buf_size, 0);
4630
4631 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4632 error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
74531fed
PA
4633 }
4634
a0743c90
YQ
4635 /* Upload TSVs regardless of whether the target is running or not. The
4636 remote stub, such as GDBserver, may have some predefined or builtin
4637 TSVs, even if the target is not running. */
f6ac5f3d 4638 if (get_trace_status (current_trace_status ()) != -1)
a0743c90
YQ
4639 {
4640 struct uploaded_tsv *uploaded_tsvs = NULL;
4641
f6ac5f3d 4642 upload_trace_state_variables (&uploaded_tsvs);
a0743c90
YQ
4643 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4644 }
4645
2d717e4f
DJ
4646 /* Check whether the target is running now. */
4647 putpkt ("?");
4648 getpkt (&rs->buf, &rs->buf_size, 0);
4649
6efcd9a8 4650 if (!target_is_non_stop_p ())
2d717e4f 4651 {
74531fed 4652 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4653 {
04bd08de 4654 if (!extended_p)
74531fed 4655 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4656
4657 /* We're connected, but not running. Drop out before we
4658 call start_remote. */
e278ad5b 4659 rs->starting_up = 0;
c35b1492 4660 return;
2d717e4f
DJ
4661 }
4662 else
74531fed 4663 {
74531fed 4664 /* Save the reply for later. */
224c3ddb 4665 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
4666 strcpy (wait_status, rs->buf);
4667 }
4668
b7ea362b 4669 /* Fetch thread list. */
e8032dde 4670 target_update_thread_list ();
b7ea362b 4671
74531fed
PA
4672 /* Let the stub know that we want it to return the thread. */
4673 set_continue_thread (minus_one_ptid);
4674
b7ea362b
PA
4675 if (thread_count () == 0)
4676 {
4677 /* Target has no concept of threads at all. GDB treats
4678 non-threaded target as single-threaded; add a main
4679 thread. */
4680 add_current_inferior_and_thread (wait_status);
4681 }
4682 else
4683 {
4684 /* We have thread information; select the thread the target
4685 says should be current. If we're reconnecting to a
4686 multi-threaded program, this will ideally be the thread
4687 that last reported an event before GDB disconnected. */
4688 inferior_ptid = get_current_thread (wait_status);
d7e15655 4689 if (inferior_ptid == null_ptid)
b7ea362b
PA
4690 {
4691 /* Odd... The target was able to list threads, but not
4692 tell us which thread was current (no "thread"
4693 register in T stop reply?). Just pick the first
4694 thread in the thread list then. */
c9f35b34
KB
4695
4696 if (remote_debug)
4697 fprintf_unfiltered (gdb_stdlog,
4698 "warning: couldn't determine remote "
4699 "current thread; picking first in list.\n");
4700
b7ea362b
PA
4701 inferior_ptid = thread_list->ptid;
4702 }
4703 }
74531fed 4704
6e586cc5
YQ
4705 /* init_wait_for_inferior should be called before get_offsets in order
4706 to manage `inserted' flag in bp loc in a correct state.
4707 breakpoint_init_inferior, called from init_wait_for_inferior, set
4708 `inserted' flag to 0, while before breakpoint_re_set, called from
4709 start_remote, set `inserted' flag to 1. In the initialization of
4710 inferior, breakpoint_init_inferior should be called first, and then
4711 breakpoint_re_set can be called. If this order is broken, state of
4712 `inserted' flag is wrong, and cause some problems on breakpoint
4713 manipulation. */
4714 init_wait_for_inferior ();
4715
74531fed
PA
4716 get_offsets (); /* Get text, data & bss offsets. */
4717
d962ef82
DJ
4718 /* If we could not find a description using qXfer, and we know
4719 how to do it some other way, try again. This is not
4720 supported for non-stop; it could be, but it is tricky if
4721 there are no stopped threads when we connect. */
f6ac5f3d 4722 if (remote_read_description_p (this)
f5656ead 4723 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4724 {
4725 target_clear_description ();
4726 target_find_description ();
4727 }
4728
74531fed
PA
4729 /* Use the previously fetched status. */
4730 gdb_assert (wait_status != NULL);
4731 strcpy (rs->buf, wait_status);
4732 rs->cached_wait_status = 1;
4733
f6ac5f3d 4734 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4735 }
4736 else
4737 {
68c97600
PA
4738 /* Clear WFI global state. Do this before finding about new
4739 threads and inferiors, and setting the current inferior.
4740 Otherwise we would clear the proceed status of the current
4741 inferior when we want its stop_soon state to be preserved
4742 (see notice_new_inferior). */
4743 init_wait_for_inferior ();
4744
74531fed
PA
4745 /* In non-stop, we will either get an "OK", meaning that there
4746 are no stopped threads at this time; or, a regular stop
4747 reply. In the latter case, there may be more than one thread
4748 stopped --- we pull them all out using the vStopped
4749 mechanism. */
4750 if (strcmp (rs->buf, "OK") != 0)
4751 {
722247f1 4752 struct notif_client *notif = &notif_client_stop;
2d717e4f 4753
722247f1
YQ
4754 /* remote_notif_get_pending_replies acks this one, and gets
4755 the rest out. */
f48ff2a7 4756 rs->notif_state->pending_event[notif_client_stop.id]
6b8edb51 4757 = remote_notif_parse (this, notif, rs->buf);
722247f1 4758 remote_notif_get_pending_events (notif);
74531fed 4759 }
2d717e4f 4760
74531fed
PA
4761 if (thread_count () == 0)
4762 {
04bd08de 4763 if (!extended_p)
74531fed 4764 error (_("The target is not running (try extended-remote?)"));
82f73884 4765
c35b1492
PA
4766 /* We're connected, but not running. Drop out before we
4767 call start_remote. */
e278ad5b 4768 rs->starting_up = 0;
c35b1492
PA
4769 return;
4770 }
74531fed 4771
74531fed
PA
4772 /* In non-stop mode, any cached wait status will be stored in
4773 the stop reply queue. */
4774 gdb_assert (wait_status == NULL);
f0223081 4775
2455069d 4776 /* Report all signals during attach/startup. */
f6ac5f3d 4777 pass_signals (0, NULL);
221e1a37
PA
4778
4779 /* If there are already stopped threads, mark them stopped and
4780 report their stops before giving the prompt to the user. */
6efcd9a8 4781 process_initial_stop_replies (from_tty);
221e1a37
PA
4782
4783 if (target_can_async_p ())
4784 target_async (1);
74531fed 4785 }
c8d104ad 4786
c8d104ad
PA
4787 /* If we connected to a live target, do some additional setup. */
4788 if (target_has_execution)
4789 {
f4ccffad 4790 if (symfile_objfile) /* No use without a symbol-file. */
36d25514 4791 remote_check_symbols ();
c8d104ad 4792 }
50c71eaf 4793
d5551862
SS
4794 /* Possibly the target has been engaged in a trace run started
4795 previously; find out where things are at. */
f6ac5f3d 4796 if (get_trace_status (current_trace_status ()) != -1)
d5551862 4797 {
00bf0b85 4798 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4799
00bf0b85
SS
4800 if (current_trace_status ()->running)
4801 printf_filtered (_("Trace is already running on the target.\n"));
4802
f6ac5f3d 4803 upload_tracepoints (&uploaded_tps);
00bf0b85
SS
4804
4805 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4806 }
4807
c0272db5
TW
4808 /* Possibly the target has been engaged in a btrace record started
4809 previously; find out where things are at. */
4810 remote_btrace_maybe_reopen ();
4811
1e51243a
PA
4812 /* The thread and inferior lists are now synchronized with the
4813 target, our symbols have been relocated, and we're merged the
4814 target's tracepoints with ours. We're done with basic start
4815 up. */
4816 rs->starting_up = 0;
4817
a25a5a45
PA
4818 /* Maybe breakpoints are global and need to be inserted now. */
4819 if (breakpoints_should_be_inserted_now ())
50c71eaf 4820 insert_breakpoints ();
c906108c
SS
4821}
4822
4823/* Open a connection to a remote debugger.
4824 NAME is the filename used for communication. */
4825
f6ac5f3d
PA
4826void
4827remote_target::open (const char *name, int from_tty)
c906108c 4828{
f6ac5f3d 4829 open_1 (name, from_tty, 0);
43ff13b4
JM
4830}
4831
c906108c
SS
4832/* Open a connection to a remote debugger using the extended
4833 remote gdb protocol. NAME is the filename used for communication. */
4834
f6ac5f3d
PA
4835void
4836extended_remote_target::open (const char *name, int from_tty)
c906108c 4837{
f6ac5f3d 4838 open_1 (name, from_tty, 1 /*extended_p */);
43ff13b4
JM
4839}
4840
ca4f7f8b
PA
4841/* Reset all packets back to "unknown support". Called when opening a
4842 new connection to a remote target. */
c906108c 4843
d471ea57 4844static void
ca4f7f8b 4845reset_all_packet_configs_support (void)
d471ea57
AC
4846{
4847 int i;
a744cf53 4848
444abaca 4849 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4850 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4851}
4852
ca4f7f8b
PA
4853/* Initialize all packet configs. */
4854
4855static void
4856init_all_packet_configs (void)
4857{
4858 int i;
4859
4860 for (i = 0; i < PACKET_MAX; i++)
4861 {
4862 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4863 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4864 }
4865}
4866
23860348 4867/* Symbol look-up. */
dc8acb97 4868
6b8edb51
PA
4869void
4870remote_target::remote_check_symbols ()
dc8acb97
MS
4871{
4872 char *msg, *reply, *tmp;
dc8acb97 4873 int end;
28170b88 4874 long reply_size;
a5c0808e 4875 struct cleanup *old_chain;
dc8acb97 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. */
224c3ddb 4894 msg = (char *) xmalloc (get_remote_packet_size ());
a5c0808e 4895 old_chain = make_cleanup (xfree, msg);
28170b88
MK
4896 reply = (char *) xmalloc (get_remote_packet_size ());
4897 make_cleanup (free_current_contents, &reply);
4898 reply_size = get_remote_packet_size ();
6d820c5c 4899
23860348 4900 /* Invite target to request symbol lookups. */
dc8acb97
MS
4901
4902 putpkt ("qSymbol::");
28170b88
MK
4903 getpkt (&reply, &reply_size, 0);
4904 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 4905
61012eef 4906 while (startswith (reply, "qSymbol:"))
dc8acb97 4907 {
77e371c0
TT
4908 struct bound_minimal_symbol sym;
4909
dc8acb97 4910 tmp = &reply[8];
cfd77fa1 4911 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
4912 msg[end] = '\0';
4913 sym = lookup_minimal_symbol (msg, NULL, NULL);
3b7344d5 4914 if (sym.minsym == NULL)
ea9c271d 4915 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 4916 else
2bbe3cc1 4917 {
f5656ead 4918 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 4919 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
4920
4921 /* If this is a function address, return the start of code
4922 instead of any data function descriptor. */
f5656ead 4923 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1 4924 sym_addr,
8b88a78e 4925 current_top_target ());
2bbe3cc1
DJ
4926
4927 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 4928 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1
DJ
4929 }
4930
dc8acb97 4931 putpkt (msg);
28170b88 4932 getpkt (&reply, &reply_size, 0);
dc8acb97 4933 }
a5c0808e
PA
4934
4935 do_cleanups (old_chain);
dc8acb97
MS
4936}
4937
9db8d71f 4938static struct serial *
baa336ce 4939remote_serial_open (const char *name)
9db8d71f
DJ
4940{
4941 static int udp_warning = 0;
4942
4943 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4944 of in ser-tcp.c, because it is the remote protocol assuming that the
4945 serial connection is reliable and not the serial connection promising
4946 to be. */
61012eef 4947 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 4948 {
3e43a32a
MS
4949 warning (_("The remote protocol may be unreliable over UDP.\n"
4950 "Some events may be lost, rendering further debugging "
4951 "impossible."));
9db8d71f
DJ
4952 udp_warning = 1;
4953 }
4954
4955 return serial_open (name);
4956}
4957
d914c394
SS
4958/* Inform the target of our permission settings. The permission flags
4959 work without this, but if the target knows the settings, it can do
4960 a couple things. First, it can add its own check, to catch cases
4961 that somehow manage to get by the permissions checks in target
4962 methods. Second, if the target is wired to disallow particular
4963 settings (for instance, a system in the field that is not set up to
4964 be able to stop at a breakpoint), it can object to any unavailable
4965 permissions. */
4966
4967void
f6ac5f3d 4968remote_target::set_permissions ()
d914c394
SS
4969{
4970 struct remote_state *rs = get_remote_state ();
4971
bba74b36
YQ
4972 xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4973 "WriteReg:%x;WriteMem:%x;"
4974 "InsertBreak:%x;InsertTrace:%x;"
4975 "InsertFastTrace:%x;Stop:%x",
4976 may_write_registers, may_write_memory,
4977 may_insert_breakpoints, may_insert_tracepoints,
4978 may_insert_fast_tracepoints, may_stop);
d914c394
SS
4979 putpkt (rs->buf);
4980 getpkt (&rs->buf, &rs->buf_size, 0);
4981
4982 /* If the target didn't like the packet, warn the user. Do not try
4983 to undo the user's settings, that would just be maddening. */
4984 if (strcmp (rs->buf, "OK") != 0)
7ea6d463 4985 warning (_("Remote refused setting permissions with: %s"), rs->buf);
d914c394
SS
4986}
4987
be2a5f71
DJ
4988/* This type describes each known response to the qSupported
4989 packet. */
4990struct protocol_feature
4991{
4992 /* The name of this protocol feature. */
4993 const char *name;
4994
4995 /* The default for this protocol feature. */
4996 enum packet_support default_support;
4997
4998 /* The function to call when this feature is reported, or after
4999 qSupported processing if the feature is not supported.
5000 The first argument points to this structure. The second
5001 argument indicates whether the packet requested support be
5002 enabled, disabled, or probed (or the default, if this function
5003 is being called at the end of processing and this feature was
5004 not reported). The third argument may be NULL; if not NULL, it
5005 is a NUL-terminated string taken from the packet following
5006 this feature's name and an equals sign. */
6b8edb51
PA
5007 void (*func) (remote_target *remote, const struct protocol_feature *,
5008 enum packet_support, const char *);
be2a5f71
DJ
5009
5010 /* The corresponding packet for this feature. Only used if
5011 FUNC is remote_supported_packet. */
5012 int packet;
5013};
5014
be2a5f71 5015static void
6b8edb51
PA
5016remote_supported_packet (remote_target *remote,
5017 const struct protocol_feature *feature,
be2a5f71
DJ
5018 enum packet_support support,
5019 const char *argument)
5020{
5021 if (argument)
5022 {
5023 warning (_("Remote qSupported response supplied an unexpected value for"
5024 " \"%s\"."), feature->name);
5025 return;
5026 }
5027
4082afcc 5028 remote_protocol_packets[feature->packet].support = support;
be2a5f71 5029}
be2a5f71 5030
6b8edb51
PA
5031void
5032remote_target::remote_packet_size (const protocol_feature *feature,
5033 enum packet_support support, const char *value)
be2a5f71
DJ
5034{
5035 struct remote_state *rs = get_remote_state ();
5036
5037 int packet_size;
5038 char *value_end;
5039
5040 if (support != PACKET_ENABLE)
5041 return;
5042
5043 if (value == NULL || *value == '\0')
5044 {
5045 warning (_("Remote target reported \"%s\" without a size."),
5046 feature->name);
5047 return;
5048 }
5049
5050 errno = 0;
5051 packet_size = strtol (value, &value_end, 16);
5052 if (errno != 0 || *value_end != '\0' || packet_size < 0)
5053 {
5054 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5055 feature->name, value);
5056 return;
5057 }
5058
be2a5f71
DJ
5059 /* Record the new maximum packet size. */
5060 rs->explicit_packet_size = packet_size;
5061}
5062
6b8edb51
PA
5063void
5064remote_packet_size (remote_target *remote, const protocol_feature *feature,
5065 enum packet_support support, const char *value)
5066{
5067 remote->remote_packet_size (feature, support, value);
5068}
5069
dc473cfb 5070static const struct protocol_feature remote_protocol_features[] = {
0876f84a 5071 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 5072 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 5073 PACKET_qXfer_auxv },
c78fa86a
GB
5074 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5075 PACKET_qXfer_exec_file },
23181151
DJ
5076 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5077 PACKET_qXfer_features },
cfa9d6d9
DJ
5078 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5079 PACKET_qXfer_libraries },
2268b414
JK
5080 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5081 PACKET_qXfer_libraries_svr4 },
ced63ec0 5082 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 5083 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 5084 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 5085 PACKET_qXfer_memory_map },
4de6483e
UW
5086 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
5087 PACKET_qXfer_spu_read },
5088 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
5089 PACKET_qXfer_spu_write },
07e059b5
VP
5090 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5091 PACKET_qXfer_osdata },
dc146f7c
VP
5092 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5093 PACKET_qXfer_threads },
b3b9301e
PA
5094 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5095 PACKET_qXfer_traceframe_info },
89be2091
DJ
5096 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5097 PACKET_QPassSignals },
82075af2
JS
5098 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5099 PACKET_QCatchSyscalls },
9b224c5e
PA
5100 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5101 PACKET_QProgramSignals },
bc3b087d
SDJ
5102 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5103 PACKET_QSetWorkingDir },
aefd8b33
SDJ
5104 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5105 PACKET_QStartupWithShell },
0a2dde4a
SDJ
5106 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5107 PACKET_QEnvironmentHexEncoded },
5108 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5109 PACKET_QEnvironmentReset },
5110 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5111 PACKET_QEnvironmentUnset },
a6f3e723
SL
5112 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5113 PACKET_QStartNoAckMode },
4082afcc
PA
5114 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5115 PACKET_multiprocess_feature },
5116 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
5117 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5118 PACKET_qXfer_siginfo_read },
5119 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5120 PACKET_qXfer_siginfo_write },
4082afcc 5121 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 5122 PACKET_ConditionalTracepoints },
4082afcc 5123 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 5124 PACKET_ConditionalBreakpoints },
4082afcc 5125 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 5126 PACKET_BreakpointCommands },
4082afcc 5127 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 5128 PACKET_FastTracepoints },
4082afcc 5129 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 5130 PACKET_StaticTracepoints },
4082afcc 5131 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 5132 PACKET_InstallInTrace},
4082afcc
PA
5133 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5134 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
5135 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5136 PACKET_bc },
5137 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5138 PACKET_bs },
409873ef
SS
5139 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5140 PACKET_TracepointSource },
d914c394
SS
5141 { "QAllow", PACKET_DISABLE, remote_supported_packet,
5142 PACKET_QAllow },
4082afcc
PA
5143 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5144 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
5145 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5146 PACKET_qXfer_fdpic },
169081d0
TG
5147 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5148 PACKET_qXfer_uib },
03583c20
UW
5149 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5150 PACKET_QDisableRandomization },
d1feda86 5151 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
5152 { "QTBuffer:size", PACKET_DISABLE,
5153 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 5154 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
5155 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5156 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 5157 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 5158 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
5159 PACKET_qXfer_btrace },
5160 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
5161 PACKET_qXfer_btrace_conf },
5162 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
5163 PACKET_Qbtrace_conf_bts_size },
5164 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 5165 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
5166 { "fork-events", PACKET_DISABLE, remote_supported_packet,
5167 PACKET_fork_event_feature },
5168 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5169 PACKET_vfork_event_feature },
94585166
DB
5170 { "exec-events", PACKET_DISABLE, remote_supported_packet,
5171 PACKET_exec_event_feature },
b20a6524 5172 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 5173 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
5174 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5175 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 5176 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
5177};
5178
c8d5aac9
L
5179static char *remote_support_xml;
5180
5181/* Register string appended to "xmlRegisters=" in qSupported query. */
5182
5183void
6e39997a 5184register_remote_support_xml (const char *xml)
c8d5aac9
L
5185{
5186#if defined(HAVE_LIBEXPAT)
5187 if (remote_support_xml == NULL)
c4f7c687 5188 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
5189 else
5190 {
5191 char *copy = xstrdup (remote_support_xml + 13);
5192 char *p = strtok (copy, ",");
5193
5194 do
5195 {
5196 if (strcmp (p, xml) == 0)
5197 {
5198 /* already there */
5199 xfree (copy);
5200 return;
5201 }
5202 }
5203 while ((p = strtok (NULL, ",")) != NULL);
5204 xfree (copy);
5205
94b0dee1
PA
5206 remote_support_xml = reconcat (remote_support_xml,
5207 remote_support_xml, ",", xml,
5208 (char *) NULL);
c8d5aac9
L
5209 }
5210#endif
5211}
5212
69b6ecb0
TT
5213static void
5214remote_query_supported_append (std::string *msg, const char *append)
c8d5aac9 5215{
69b6ecb0
TT
5216 if (!msg->empty ())
5217 msg->append (";");
5218 msg->append (append);
c8d5aac9
L
5219}
5220
6b8edb51
PA
5221void
5222remote_target::remote_query_supported ()
be2a5f71
DJ
5223{
5224 struct remote_state *rs = get_remote_state ();
5225 char *next;
5226 int i;
5227 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5228
5229 /* The packet support flags are handled differently for this packet
5230 than for most others. We treat an error, a disabled packet, and
5231 an empty response identically: any features which must be reported
5232 to be used will be automatically disabled. An empty buffer
5233 accomplishes this, since that is also the representation for a list
5234 containing no features. */
5235
5236 rs->buf[0] = 0;
4082afcc 5237 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 5238 {
69b6ecb0 5239 std::string q;
c8d5aac9 5240
73b8c1fd 5241 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5242 remote_query_supported_append (&q, "multiprocess+");
c8d5aac9 5243
f7e6eed5 5244 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5245 remote_query_supported_append (&q, "swbreak+");
f7e6eed5 5246 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5247 remote_query_supported_append (&q, "hwbreak+");
f7e6eed5 5248
69b6ecb0 5249 remote_query_supported_append (&q, "qRelocInsn+");
dde08ee1 5250
8020350c
DB
5251 if (packet_set_cmd_state (PACKET_fork_event_feature)
5252 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5253 remote_query_supported_append (&q, "fork-events+");
8020350c
DB
5254 if (packet_set_cmd_state (PACKET_vfork_event_feature)
5255 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5256 remote_query_supported_append (&q, "vfork-events+");
8020350c
DB
5257 if (packet_set_cmd_state (PACKET_exec_event_feature)
5258 != AUTO_BOOLEAN_FALSE)
69b6ecb0 5259 remote_query_supported_append (&q, "exec-events+");
89245bc0 5260
750ce8d1 5261 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5262 remote_query_supported_append (&q, "vContSupported+");
750ce8d1 5263
65706a29 5264 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5265 remote_query_supported_append (&q, "QThreadEvents+");
65706a29 5266
f2faf941 5267 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
69b6ecb0 5268 remote_query_supported_append (&q, "no-resumed+");
f2faf941 5269
b35d5edb
PA
5270 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5271 the qSupported:xmlRegisters=i386 handling. */
7cc244de
PA
5272 if (remote_support_xml != NULL
5273 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
69b6ecb0 5274 remote_query_supported_append (&q, remote_support_xml);
82f73884 5275
69b6ecb0
TT
5276 q = "qSupported:" + q;
5277 putpkt (q.c_str ());
94b0dee1 5278
be2a5f71
DJ
5279 getpkt (&rs->buf, &rs->buf_size, 0);
5280
5281 /* If an error occured, warn, but do not return - just reset the
5282 buffer to empty and go on to disable features. */
5283 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5284 == PACKET_ERROR)
5285 {
5286 warning (_("Remote failure reply: %s"), rs->buf);
5287 rs->buf[0] = 0;
5288 }
5289 }
5290
5291 memset (seen, 0, sizeof (seen));
5292
5293 next = rs->buf;
5294 while (*next)
5295 {
5296 enum packet_support is_supported;
5297 char *p, *end, *name_end, *value;
5298
5299 /* First separate out this item from the rest of the packet. If
5300 there's another item after this, we overwrite the separator
5301 (terminated strings are much easier to work with). */
5302 p = next;
5303 end = strchr (p, ';');
5304 if (end == NULL)
5305 {
5306 end = p + strlen (p);
5307 next = end;
5308 }
5309 else
5310 {
89be2091
DJ
5311 *end = '\0';
5312 next = end + 1;
5313
be2a5f71
DJ
5314 if (end == p)
5315 {
5316 warning (_("empty item in \"qSupported\" response"));
5317 continue;
5318 }
be2a5f71
DJ
5319 }
5320
5321 name_end = strchr (p, '=');
5322 if (name_end)
5323 {
5324 /* This is a name=value entry. */
5325 is_supported = PACKET_ENABLE;
5326 value = name_end + 1;
5327 *name_end = '\0';
5328 }
5329 else
5330 {
5331 value = NULL;
5332 switch (end[-1])
5333 {
5334 case '+':
5335 is_supported = PACKET_ENABLE;
5336 break;
5337
5338 case '-':
5339 is_supported = PACKET_DISABLE;
5340 break;
5341
5342 case '?':
5343 is_supported = PACKET_SUPPORT_UNKNOWN;
5344 break;
5345
5346 default:
3e43a32a
MS
5347 warning (_("unrecognized item \"%s\" "
5348 "in \"qSupported\" response"), p);
be2a5f71
DJ
5349 continue;
5350 }
5351 end[-1] = '\0';
5352 }
5353
5354 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5355 if (strcmp (remote_protocol_features[i].name, p) == 0)
5356 {
5357 const struct protocol_feature *feature;
5358
5359 seen[i] = 1;
5360 feature = &remote_protocol_features[i];
6b8edb51 5361 feature->func (this, feature, is_supported, value);
be2a5f71
DJ
5362 break;
5363 }
5364 }
5365
5366 /* If we increased the packet size, make sure to increase the global
5367 buffer size also. We delay this until after parsing the entire
5368 qSupported packet, because this is the same buffer we were
5369 parsing. */
5370 if (rs->buf_size < rs->explicit_packet_size)
5371 {
5372 rs->buf_size = rs->explicit_packet_size;
224c3ddb 5373 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
be2a5f71
DJ
5374 }
5375
5376 /* Handle the defaults for unmentioned features. */
5377 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5378 if (!seen[i])
5379 {
5380 const struct protocol_feature *feature;
5381
5382 feature = &remote_protocol_features[i];
6b8edb51 5383 feature->func (this, feature, feature->default_support, NULL);
be2a5f71
DJ
5384 }
5385}
5386
048094ac
PA
5387/* Serial QUIT handler for the remote serial descriptor.
5388
5389 Defers handling a Ctrl-C until we're done with the current
5390 command/response packet sequence, unless:
5391
5392 - We're setting up the connection. Don't send a remote interrupt
5393 request, as we're not fully synced yet. Quit immediately
5394 instead.
5395
5396 - The target has been resumed in the foreground
223ffa71 5397 (target_terminal::is_ours is false) with a synchronous resume
048094ac
PA
5398 packet, and we're blocked waiting for the stop reply, thus a
5399 Ctrl-C should be immediately sent to the target.
5400
5401 - We get a second Ctrl-C while still within the same serial read or
5402 write. In that case the serial is seemingly wedged --- offer to
5403 quit/disconnect.
5404
5405 - We see a second Ctrl-C without target response, after having
5406 previously interrupted the target. In that case the target/stub
5407 is probably wedged --- offer to quit/disconnect.
5408*/
5409
6b8edb51
PA
5410void
5411remote_target::remote_serial_quit_handler ()
048094ac
PA
5412{
5413 struct remote_state *rs = get_remote_state ();
5414
5415 if (check_quit_flag ())
5416 {
5417 /* If we're starting up, we're not fully synced yet. Quit
5418 immediately. */
5419 if (rs->starting_up)
5420 quit ();
5421 else if (rs->got_ctrlc_during_io)
5422 {
5423 if (query (_("The target is not responding to GDB commands.\n"
5424 "Stop debugging it? ")))
5425 remote_unpush_and_throw ();
5426 }
5427 /* If ^C has already been sent once, offer to disconnect. */
223ffa71 5428 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
048094ac
PA
5429 interrupt_query ();
5430 /* All-stop protocol, and blocked waiting for stop reply. Send
5431 an interrupt request. */
223ffa71 5432 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
e671cd59 5433 target_interrupt ();
048094ac
PA
5434 else
5435 rs->got_ctrlc_during_io = 1;
5436 }
5437}
5438
6b8edb51
PA
5439/* The remote_target that is current while the quit handler is
5440 overridden with remote_serial_quit_handler. */
5441static remote_target *curr_quit_handler_target;
5442
5443static void
5444remote_serial_quit_handler ()
5445{
5446 curr_quit_handler_target->remote_serial_quit_handler ();
5447}
5448
78a095c3
JK
5449/* Remove any of the remote.c targets from target stack. Upper targets depend
5450 on it so remove them first. */
5451
5452static void
5453remote_unpush_target (void)
5454{
915ef8b1 5455 pop_all_targets_at_and_above (process_stratum);
78a095c3 5456}
be2a5f71 5457
048094ac
PA
5458static void
5459remote_unpush_and_throw (void)
5460{
5461 remote_unpush_target ();
5462 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5463}
5464
f6ac5f3d
PA
5465void
5466remote_target::open_1 (const char *name, int from_tty, int extended_p)
c906108c 5467{
6b8edb51 5468 remote_target *curr_remote = get_current_remote_target ();
a6f3e723 5469
c906108c 5470 if (name == 0)
8a3fe4f8 5471 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 5472 "serial device is attached to the remote system\n"
8a3fe4f8 5473 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 5474
2d717e4f 5475 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
5476 Ask this question first, before target_preopen has a chance to kill
5477 anything. */
6b8edb51 5478 if (curr_remote != NULL && !have_inferiors ())
2d717e4f 5479 {
78a095c3
JK
5480 if (from_tty
5481 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
5482 error (_("Still connected."));
5483 }
5484
78a095c3 5485 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
5486 target_preopen (from_tty);
5487
ad9a8f3f 5488 remote_fileio_reset ();
1dd41f16
NS
5489 reopen_exec_file ();
5490 reread_symbols ();
5491
6b8edb51
PA
5492 remote_target *remote
5493 = (extended_p ? new extended_remote_target () : new remote_target ());
5494 target_ops_up target_holder (remote);
5495
5496 remote_state *rs = remote->get_remote_state ();
5497
5498 /* See FIXME above. */
5499 if (!target_async_permitted)
5500 rs->wait_forever_enabled_p = 1;
5501
5d93a237
TT
5502 rs->remote_desc = remote_serial_open (name);
5503 if (!rs->remote_desc)
c906108c
SS
5504 perror_with_name (name);
5505
5506 if (baud_rate != -1)
5507 {
5d93a237 5508 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 5509 {
9b74d5d3
KB
5510 /* The requested speed could not be set. Error out to
5511 top level after closing remote_desc. Take care to
5512 set remote_desc to NULL to avoid closing remote_desc
5513 more than once. */
5d93a237
TT
5514 serial_close (rs->remote_desc);
5515 rs->remote_desc = NULL;
c906108c
SS
5516 perror_with_name (name);
5517 }
5518 }
5519
236af5e3 5520 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 5521 serial_raw (rs->remote_desc);
c906108c
SS
5522
5523 /* If there is something sitting in the buffer we might take it as a
5524 response to a command, which would be bad. */
5d93a237 5525 serial_flush_input (rs->remote_desc);
c906108c
SS
5526
5527 if (from_tty)
5528 {
5529 puts_filtered ("Remote debugging using ");
5530 puts_filtered (name);
5531 puts_filtered ("\n");
5532 }
d9f719f1 5533
6b8edb51
PA
5534 /* Switch to using the remote target now. */
5535 push_target (remote);
5536 /* The target stack owns the target now. */
5537 target_holder.release ();
c906108c 5538
74531fed 5539 /* Register extra event sources in the event loop. */
6b8edb51 5540 rs->remote_async_inferior_event_token
74531fed 5541 = create_async_event_handler (remote_async_inferior_event_handler,
6b8edb51
PA
5542 remote);
5543 rs->notif_state = remote_notif_state_allocate (remote);
74531fed 5544
be2a5f71
DJ
5545 /* Reset the target state; these things will be queried either by
5546 remote_query_supported or as they are needed. */
ca4f7f8b 5547 reset_all_packet_configs_support ();
74531fed 5548 rs->cached_wait_status = 0;
be2a5f71 5549 rs->explicit_packet_size = 0;
a6f3e723 5550 rs->noack_mode = 0;
82f73884 5551 rs->extended = extended_p;
e24a49d8 5552 rs->waiting_for_stop_reply = 0;
3a29589a 5553 rs->ctrlc_pending_p = 0;
048094ac 5554 rs->got_ctrlc_during_io = 0;
802188a7 5555
47f8a51d
TT
5556 rs->general_thread = not_sent_ptid;
5557 rs->continue_thread = not_sent_ptid;
262e1174 5558 rs->remote_traceframe_number = -1;
c906108c 5559
3a00c802
PA
5560 rs->last_resume_exec_dir = EXEC_FORWARD;
5561
9d1f7ab2 5562 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5563 rs->use_threadinfo_query = 1;
5564 rs->use_threadextra_query = 1;
9d1f7ab2 5565
dd194f6b 5566 rs->readahead_cache.invalidate ();
80152258 5567
c6ebd6cf 5568 if (target_async_permitted)
92d1e331 5569 {
92d1e331
DJ
5570 /* FIXME: cagney/1999-09-23: During the initial connection it is
5571 assumed that the target is already ready and able to respond to
0df8b418 5572 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5573 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5574 around this. Eventually a mechanism that allows
92d1e331 5575 wait_for_inferior() to expect/get timeouts will be
23860348 5576 implemented. */
6b8edb51 5577 rs->wait_forever_enabled_p = 0;
92d1e331
DJ
5578 }
5579
23860348 5580 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5581 no_shared_libraries (NULL, 0);
f78f6cf1 5582
74531fed
PA
5583 /* Start afresh. */
5584 init_thread_list ();
5585
36918e70 5586 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5587 target (we'd otherwise be in an inconsistent state) and then
5588 propogate the error on up the exception chain. This ensures that
5589 the caller doesn't stumble along blindly assuming that the
5590 function succeeded. The CLI doesn't have this problem but other
5591 UI's, such as MI do.
36918e70
AC
5592
5593 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5594 this function should return an error indication letting the
ce2826aa 5595 caller restore the previous state. Unfortunately the command
36918e70
AC
5596 ``target remote'' is directly wired to this function making that
5597 impossible. On a positive note, the CLI side of this problem has
5598 been fixed - the function set_cmd_context() makes it possible for
5599 all the ``target ....'' commands to share a common callback
5600 function. See cli-dump.c. */
109c3e39 5601 {
2d717e4f 5602
492d29ea 5603 TRY
04bd08de 5604 {
6b8edb51 5605 remote->start_remote (from_tty, extended_p);
04bd08de 5606 }
492d29ea 5607 CATCH (ex, RETURN_MASK_ALL)
109c3e39 5608 {
c8d104ad
PA
5609 /* Pop the partially set up target - unless something else did
5610 already before throwing the exception. */
6b8edb51 5611 if (ex.error != TARGET_CLOSE_ERROR)
78a095c3 5612 remote_unpush_target ();
109c3e39
AC
5613 throw_exception (ex);
5614 }
492d29ea 5615 END_CATCH
109c3e39 5616 }
c906108c 5617
6b8edb51 5618 remote_btrace_reset (rs);
f4abbc16 5619
c6ebd6cf 5620 if (target_async_permitted)
6b8edb51 5621 rs->wait_forever_enabled_p = 1;
43ff13b4
JM
5622}
5623
de0d863e
DB
5624/* Detach the specified process. */
5625
6b8edb51
PA
5626void
5627remote_target::remote_detach_pid (int pid)
de0d863e
DB
5628{
5629 struct remote_state *rs = get_remote_state ();
5630
5631 if (remote_multi_process_p (rs))
5632 xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5633 else
5634 strcpy (rs->buf, "D");
5635
5636 putpkt (rs->buf);
5637 getpkt (&rs->buf, &rs->buf_size, 0);
5638
5639 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5640 ;
5641 else if (rs->buf[0] == '\0')
5642 error (_("Remote doesn't know how to detach"));
5643 else
5644 error (_("Can't detach process."));
5645}
5646
5647/* This detaches a program to which we previously attached, using
5648 inferior_ptid to identify the process. After this is done, GDB
5649 can be used to debug some other program. We better not have left
5650 any breakpoints in the target program or it'll die when it hits
5651 one. */
c906108c 5652
6b8edb51 5653void
00431a78 5654remote_target::remote_detach_1 (inferior *inf, int from_tty)
c906108c 5655{
e99b03dc 5656 int pid = inferior_ptid.pid ();
d01949b6 5657 struct remote_state *rs = get_remote_state ();
de0d863e 5658 int is_fork_parent;
c906108c 5659
2d717e4f
DJ
5660 if (!target_has_execution)
5661 error (_("No process to detach from."));
5662
0f48b757 5663 target_announce_detach (from_tty);
7cee1e54 5664
c906108c 5665 /* Tell the remote target to detach. */
de0d863e 5666 remote_detach_pid (pid);
82f73884 5667
8020350c
DB
5668 /* Exit only if this is the only active inferior. */
5669 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
7cee1e54 5670 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5671
00431a78
PA
5672 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5673
de0d863e
DB
5674 /* Check to see if we are detaching a fork parent. Note that if we
5675 are detaching a fork child, tp == NULL. */
5676 is_fork_parent = (tp != NULL
5677 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5678
5679 /* If doing detach-on-fork, we don't mourn, because that will delete
5680 breakpoints that should be available for the followed inferior. */
5681 if (!is_fork_parent)
f67c0c91 5682 {
249b5733
PA
5683 /* Save the pid as a string before mourning, since that will
5684 unpush the remote target, and we need the string after. */
f2907e49 5685 std::string infpid = target_pid_to_str (ptid_t (pid));
f67c0c91
SDJ
5686
5687 target_mourn_inferior (inferior_ptid);
5688 if (print_inferior_events)
5689 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5690 inf->num, infpid.c_str ());
5691 }
de0d863e
DB
5692 else
5693 {
5694 inferior_ptid = null_ptid;
00431a78 5695 detach_inferior (current_inferior ());
de0d863e 5696 }
2d717e4f
DJ
5697}
5698
f6ac5f3d
PA
5699void
5700remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5701{
00431a78 5702 remote_detach_1 (inf, from_tty);
2d717e4f
DJ
5703}
5704
f6ac5f3d
PA
5705void
5706extended_remote_target::detach (inferior *inf, int from_tty)
2d717e4f 5707{
00431a78 5708 remote_detach_1 (inf, from_tty);
de0d863e
DB
5709}
5710
5711/* Target follow-fork function for remote targets. On entry, and
5712 at return, the current inferior is the fork parent.
5713
5714 Note that although this is currently only used for extended-remote,
5715 it is named remote_follow_fork in anticipation of using it for the
5716 remote target as well. */
5717
f6ac5f3d
PA
5718int
5719remote_target::follow_fork (int follow_child, int detach_fork)
de0d863e
DB
5720{
5721 struct remote_state *rs = get_remote_state ();
c269dbdb 5722 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5723
c269dbdb
DB
5724 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5725 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5726 {
5727 /* When following the parent and detaching the child, we detach
5728 the child here. For the case of following the child and
5729 detaching the parent, the detach is done in the target-
5730 independent follow fork code in infrun.c. We can't use
5731 target_detach when detaching an unfollowed child because
5732 the client side doesn't know anything about the child. */
5733 if (detach_fork && !follow_child)
5734 {
5735 /* Detach the fork child. */
5736 ptid_t child_ptid;
5737 pid_t child_pid;
5738
5739 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
e99b03dc 5740 child_pid = child_ptid.pid ();
de0d863e
DB
5741
5742 remote_detach_pid (child_pid);
de0d863e
DB
5743 }
5744 }
5745 return 0;
c906108c
SS
5746}
5747
94585166
DB
5748/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5749 in the program space of the new inferior. On entry and at return the
5750 current inferior is the exec'ing inferior. INF is the new exec'd
5751 inferior, which may be the same as the exec'ing inferior unless
5752 follow-exec-mode is "new". */
5753
f6ac5f3d
PA
5754void
5755remote_target::follow_exec (struct inferior *inf, char *execd_pathname)
94585166
DB
5756{
5757 /* We know that this is a target file name, so if it has the "target:"
5758 prefix we strip it off before saving it in the program space. */
5759 if (is_target_filename (execd_pathname))
5760 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5761
5762 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5763}
5764
6ad8ae5c
DJ
5765/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5766
f6ac5f3d
PA
5767void
5768remote_target::disconnect (const char *args, int from_tty)
43ff13b4 5769{
43ff13b4 5770 if (args)
2d717e4f 5771 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5772
8020350c
DB
5773 /* Make sure we unpush even the extended remote targets. Calling
5774 target_mourn_inferior won't unpush, and remote_mourn won't
5775 unpush if there is more than one inferior left. */
f6ac5f3d 5776 unpush_target (this);
8020350c 5777 generic_mourn_inferior ();
2d717e4f 5778
43ff13b4
JM
5779 if (from_tty)
5780 puts_filtered ("Ending remote debugging.\n");
5781}
5782
2d717e4f
DJ
5783/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5784 be chatty about it. */
5785
f6ac5f3d
PA
5786void
5787extended_remote_target::attach (const char *args, int from_tty)
2d717e4f
DJ
5788{
5789 struct remote_state *rs = get_remote_state ();
be86555c 5790 int pid;
96ef3384 5791 char *wait_status = NULL;
2d717e4f 5792
74164c56 5793 pid = parse_pid_to_attach (args);
2d717e4f 5794
74164c56
JK
5795 /* Remote PID can be freely equal to getpid, do not check it here the same
5796 way as in other targets. */
2d717e4f 5797
4082afcc 5798 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5799 error (_("This target does not support attaching to a process"));
5800
7cee1e54
PA
5801 if (from_tty)
5802 {
5803 char *exec_file = get_exec_file (0);
5804
5805 if (exec_file)
5806 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
f2907e49 5807 target_pid_to_str (ptid_t (pid)));
7cee1e54
PA
5808 else
5809 printf_unfiltered (_("Attaching to %s\n"),
f2907e49 5810 target_pid_to_str (ptid_t (pid)));
7cee1e54
PA
5811
5812 gdb_flush (gdb_stdout);
5813 }
5814
bba74b36 5815 xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f
DJ
5816 putpkt (rs->buf);
5817 getpkt (&rs->buf, &rs->buf_size, 0);
5818
4082afcc
PA
5819 switch (packet_ok (rs->buf,
5820 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5821 {
4082afcc 5822 case PACKET_OK:
6efcd9a8 5823 if (!target_is_non_stop_p ())
74531fed
PA
5824 {
5825 /* Save the reply for later. */
224c3ddb 5826 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
5827 strcpy (wait_status, rs->buf);
5828 }
5829 else if (strcmp (rs->buf, "OK") != 0)
5830 error (_("Attaching to %s failed with: %s"),
f2907e49 5831 target_pid_to_str (ptid_t (pid)),
74531fed 5832 rs->buf);
4082afcc
PA
5833 break;
5834 case PACKET_UNKNOWN:
5835 error (_("This target does not support attaching to a process"));
5836 default:
5837 error (_("Attaching to %s failed"),
f2907e49 5838 target_pid_to_str (ptid_t (pid)));
2d717e4f 5839 }
2d717e4f 5840
1b6e6f5c 5841 set_current_inferior (remote_add_inferior (0, pid, 1, 0));
bad34192 5842
f2907e49 5843 inferior_ptid = ptid_t (pid);
79d7f229 5844
6efcd9a8 5845 if (target_is_non_stop_p ())
bad34192
PA
5846 {
5847 struct thread_info *thread;
79d7f229 5848
bad34192 5849 /* Get list of threads. */
f6ac5f3d 5850 update_thread_list ();
82f73884 5851
00431a78 5852 thread = first_thread_of_inferior (current_inferior ());
bad34192
PA
5853 if (thread)
5854 inferior_ptid = thread->ptid;
5855 else
f2907e49 5856 inferior_ptid = ptid_t (pid);
bad34192
PA
5857
5858 /* Invalidate our notion of the remote current thread. */
47f8a51d 5859 record_currthread (rs, minus_one_ptid);
bad34192 5860 }
74531fed 5861 else
bad34192
PA
5862 {
5863 /* Now, if we have thread information, update inferior_ptid. */
5864 inferior_ptid = remote_current_thread (inferior_ptid);
5865
5866 /* Add the main thread to the thread list. */
00aecdcf
PA
5867 thread_info *thr = add_thread_silent (inferior_ptid);
5868 /* Don't consider the thread stopped until we've processed the
5869 saved stop reply. */
5870 set_executing (thr->ptid, true);
bad34192 5871 }
c0a2216e 5872
96ef3384
UW
5873 /* Next, if the target can specify a description, read it. We do
5874 this before anything involving memory or registers. */
5875 target_find_description ();
5876
6efcd9a8 5877 if (!target_is_non_stop_p ())
74531fed
PA
5878 {
5879 /* Use the previously fetched status. */
5880 gdb_assert (wait_status != NULL);
5881
5882 if (target_can_async_p ())
5883 {
722247f1 5884 struct notif_event *reply
6b8edb51 5885 = remote_notif_parse (this, &notif_client_stop, wait_status);
74531fed 5886
722247f1 5887 push_stop_reply ((struct stop_reply *) reply);
74531fed 5888
6a3753b3 5889 target_async (1);
74531fed
PA
5890 }
5891 else
5892 {
5893 gdb_assert (wait_status != NULL);
5894 strcpy (rs->buf, wait_status);
5895 rs->cached_wait_status = 1;
5896 }
5897 }
5898 else
5899 gdb_assert (wait_status == NULL);
2d717e4f
DJ
5900}
5901
b9c1d481
AS
5902/* Implementation of the to_post_attach method. */
5903
f6ac5f3d
PA
5904void
5905extended_remote_target::post_attach (int pid)
b9c1d481 5906{
6efcd9a8
PA
5907 /* Get text, data & bss offsets. */
5908 get_offsets ();
5909
b9c1d481
AS
5910 /* In certain cases GDB might not have had the chance to start
5911 symbol lookup up until now. This could happen if the debugged
5912 binary is not using shared libraries, the vsyscall page is not
5913 present (on Linux) and the binary itself hadn't changed since the
5914 debugging process was started. */
5915 if (symfile_objfile != NULL)
5916 remote_check_symbols();
5917}
5918
c906108c 5919\f
506fb367
DJ
5920/* Check for the availability of vCont. This function should also check
5921 the response. */
c906108c 5922
6b8edb51
PA
5923void
5924remote_target::remote_vcont_probe ()
c906108c 5925{
6b8edb51 5926 remote_state *rs = get_remote_state ();
2e9f7625 5927 char *buf;
6d820c5c 5928
2e9f7625
DJ
5929 strcpy (rs->buf, "vCont?");
5930 putpkt (rs->buf);
6d820c5c 5931 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 5932 buf = rs->buf;
c906108c 5933
506fb367 5934 /* Make sure that the features we assume are supported. */
61012eef 5935 if (startswith (buf, "vCont"))
506fb367
DJ
5936 {
5937 char *p = &buf[5];
750ce8d1 5938 int support_c, support_C;
506fb367 5939
750ce8d1
YQ
5940 rs->supports_vCont.s = 0;
5941 rs->supports_vCont.S = 0;
506fb367
DJ
5942 support_c = 0;
5943 support_C = 0;
d458bd84 5944 rs->supports_vCont.t = 0;
c1e36e3e 5945 rs->supports_vCont.r = 0;
506fb367
DJ
5946 while (p && *p == ';')
5947 {
5948 p++;
5949 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5950 rs->supports_vCont.s = 1;
506fb367 5951 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5952 rs->supports_vCont.S = 1;
506fb367
DJ
5953 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5954 support_c = 1;
5955 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5956 support_C = 1;
74531fed 5957 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 5958 rs->supports_vCont.t = 1;
c1e36e3e
PA
5959 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5960 rs->supports_vCont.r = 1;
506fb367
DJ
5961
5962 p = strchr (p, ';');
5963 }
c906108c 5964
750ce8d1
YQ
5965 /* If c, and C are not all supported, we can't use vCont. Clearing
5966 BUF will make packet_ok disable the packet. */
5967 if (!support_c || !support_C)
506fb367
DJ
5968 buf[0] = 0;
5969 }
c906108c 5970
444abaca 5971 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 5972}
c906108c 5973
0d8f58ca
PA
5974/* Helper function for building "vCont" resumptions. Write a
5975 resumption to P. ENDP points to one-passed-the-end of the buffer
5976 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5977 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5978 resumed thread should be single-stepped and/or signalled. If PTID
5979 equals minus_one_ptid, then all threads are resumed; if PTID
5980 represents a process, then all threads of the process are resumed;
5981 the thread to be stepped and/or signalled is given in the global
5982 INFERIOR_PTID. */
5983
6b8edb51
PA
5984char *
5985remote_target::append_resumption (char *p, char *endp,
5986 ptid_t ptid, int step, gdb_signal siggnal)
0d8f58ca
PA
5987{
5988 struct remote_state *rs = get_remote_state ();
5989
a493e3e2 5990 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 5991 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
5992 else if (step
5993 /* GDB is willing to range step. */
5994 && use_range_stepping
5995 /* Target supports range stepping. */
5996 && rs->supports_vCont.r
5997 /* We don't currently support range stepping multiple
5998 threads with a wildcard (though the protocol allows it,
5999 so stubs shouldn't make an active effort to forbid
6000 it). */
0e998d96 6001 && !(remote_multi_process_p (rs) && ptid.is_pid ()))
c1e36e3e
PA
6002 {
6003 struct thread_info *tp;
6004
d7e15655 6005 if (ptid == minus_one_ptid)
c1e36e3e
PA
6006 {
6007 /* If we don't know about the target thread's tid, then
6008 we're resuming magic_null_ptid (see caller). */
6009 tp = find_thread_ptid (magic_null_ptid);
6010 }
6011 else
6012 tp = find_thread_ptid (ptid);
6013 gdb_assert (tp != NULL);
6014
6015 if (tp->control.may_range_step)
6016 {
6017 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6018
6019 p += xsnprintf (p, endp - p, ";r%s,%s",
6020 phex_nz (tp->control.step_range_start,
6021 addr_size),
6022 phex_nz (tp->control.step_range_end,
6023 addr_size));
6024 }
6025 else
6026 p += xsnprintf (p, endp - p, ";s");
6027 }
0d8f58ca
PA
6028 else if (step)
6029 p += xsnprintf (p, endp - p, ";s");
a493e3e2 6030 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
6031 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6032 else
6033 p += xsnprintf (p, endp - p, ";c");
6034
0e998d96 6035 if (remote_multi_process_p (rs) && ptid.is_pid ())
0d8f58ca
PA
6036 {
6037 ptid_t nptid;
6038
6039 /* All (-1) threads of process. */
e99b03dc 6040 nptid = ptid_t (ptid.pid (), -1, 0);
0d8f58ca
PA
6041
6042 p += xsnprintf (p, endp - p, ":");
6043 p = write_ptid (p, endp, nptid);
6044 }
d7e15655 6045 else if (ptid != minus_one_ptid)
0d8f58ca
PA
6046 {
6047 p += xsnprintf (p, endp - p, ":");
6048 p = write_ptid (p, endp, ptid);
6049 }
6050
6051 return p;
6052}
6053
799a2abe
PA
6054/* Clear the thread's private info on resume. */
6055
6056static void
6057resume_clear_thread_private_info (struct thread_info *thread)
6058{
6059 if (thread->priv != NULL)
6060 {
7aabaf9d
SM
6061 remote_thread_info *priv = get_remote_thread_info (thread);
6062
6063 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6064 priv->watch_data_address = 0;
799a2abe
PA
6065 }
6066}
6067
e5ef252a
PA
6068/* Append a vCont continue-with-signal action for threads that have a
6069 non-zero stop signal. */
6070
6b8edb51
PA
6071char *
6072remote_target::append_pending_thread_resumptions (char *p, char *endp,
6073 ptid_t ptid)
e5ef252a
PA
6074{
6075 struct thread_info *thread;
6076
034f788c 6077 ALL_NON_EXITED_THREADS (thread)
26a57c92 6078 if (thread->ptid.matches (ptid)
d7e15655 6079 && inferior_ptid != thread->ptid
70509625 6080 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
6081 {
6082 p = append_resumption (p, endp, thread->ptid,
6083 0, thread->suspend.stop_signal);
6084 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 6085 resume_clear_thread_private_info (thread);
e5ef252a
PA
6086 }
6087
6088 return p;
6089}
6090
7b68ffbb
PA
6091/* Set the target running, using the packets that use Hc
6092 (c/s/C/S). */
6093
6b8edb51
PA
6094void
6095remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6096 gdb_signal siggnal)
7b68ffbb
PA
6097{
6098 struct remote_state *rs = get_remote_state ();
6099 struct thread_info *thread;
6100 char *buf;
6101
6102 rs->last_sent_signal = siggnal;
6103 rs->last_sent_step = step;
6104
6105 /* The c/s/C/S resume packets use Hc, so set the continue
6106 thread. */
d7e15655 6107 if (ptid == minus_one_ptid)
7b68ffbb
PA
6108 set_continue_thread (any_thread_ptid);
6109 else
6110 set_continue_thread (ptid);
6111
6112 ALL_NON_EXITED_THREADS (thread)
6113 resume_clear_thread_private_info (thread);
6114
6115 buf = rs->buf;
6b8edb51 6116 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6117 {
6118 /* We don't pass signals to the target in reverse exec mode. */
6119 if (info_verbose && siggnal != GDB_SIGNAL_0)
6120 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6121 siggnal);
6122
6123 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6124 error (_("Remote reverse-step not supported."));
6125 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6126 error (_("Remote reverse-continue not supported."));
6127
6128 strcpy (buf, step ? "bs" : "bc");
6129 }
6130 else if (siggnal != GDB_SIGNAL_0)
6131 {
6132 buf[0] = step ? 'S' : 'C';
6133 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6134 buf[2] = tohex (((int) siggnal) & 0xf);
6135 buf[3] = '\0';
6136 }
6137 else
6138 strcpy (buf, step ? "s" : "c");
6139
6140 putpkt (buf);
6141}
6142
506fb367
DJ
6143/* Resume the remote inferior by using a "vCont" packet. The thread
6144 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
6145 resumed thread should be single-stepped and/or signalled. If PTID
6146 equals minus_one_ptid, then all threads are resumed; the thread to
6147 be stepped and/or signalled is given in the global INFERIOR_PTID.
6148 This function returns non-zero iff it resumes the inferior.
44eaed12 6149
7b68ffbb
PA
6150 This function issues a strict subset of all possible vCont commands
6151 at the moment. */
44eaed12 6152
6b8edb51
PA
6153int
6154remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6155 enum gdb_signal siggnal)
506fb367
DJ
6156{
6157 struct remote_state *rs = get_remote_state ();
82f73884
PA
6158 char *p;
6159 char *endp;
44eaed12 6160
7b68ffbb 6161 /* No reverse execution actions defined for vCont. */
6b8edb51 6162 if (::execution_direction == EXEC_REVERSE)
7b68ffbb
PA
6163 return 0;
6164
4082afcc 6165 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 6166 remote_vcont_probe ();
44eaed12 6167
4082afcc 6168 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 6169 return 0;
44eaed12 6170
82f73884
PA
6171 p = rs->buf;
6172 endp = rs->buf + get_remote_packet_size ();
6173
506fb367
DJ
6174 /* If we could generate a wider range of packets, we'd have to worry
6175 about overflowing BUF. Should there be a generic
6176 "multi-part-packet" packet? */
6177
0d8f58ca
PA
6178 p += xsnprintf (p, endp - p, "vCont");
6179
d7e15655 6180 if (ptid == magic_null_ptid)
c906108c 6181 {
79d7f229
PA
6182 /* MAGIC_NULL_PTID means that we don't have any active threads,
6183 so we don't have any TID numbers the inferior will
6184 understand. Make sure to only send forms that do not specify
6185 a TID. */
a9cbf802 6186 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 6187 }
d7e15655 6188 else if (ptid == minus_one_ptid || ptid.is_pid ())
506fb367 6189 {
0d8f58ca
PA
6190 /* Resume all threads (of all processes, or of a single
6191 process), with preference for INFERIOR_PTID. This assumes
6192 inferior_ptid belongs to the set of all threads we are about
6193 to resume. */
a493e3e2 6194 if (step || siggnal != GDB_SIGNAL_0)
82f73884 6195 {
0d8f58ca
PA
6196 /* Step inferior_ptid, with or without signal. */
6197 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 6198 }
0d8f58ca 6199
e5ef252a
PA
6200 /* Also pass down any pending signaled resumption for other
6201 threads not the current. */
6202 p = append_pending_thread_resumptions (p, endp, ptid);
6203
0d8f58ca 6204 /* And continue others without a signal. */
a493e3e2 6205 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
6206 }
6207 else
506fb367
DJ
6208 {
6209 /* Scheduler locking; resume only PTID. */
a9cbf802 6210 append_resumption (p, endp, ptid, step, siggnal);
506fb367 6211 }
c906108c 6212
82f73884
PA
6213 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
6214 putpkt (rs->buf);
506fb367 6215
6efcd9a8 6216 if (target_is_non_stop_p ())
74531fed
PA
6217 {
6218 /* In non-stop, the stub replies to vCont with "OK". The stop
6219 reply will be reported asynchronously by means of a `%Stop'
6220 notification. */
6221 getpkt (&rs->buf, &rs->buf_size, 0);
6222 if (strcmp (rs->buf, "OK") != 0)
6223 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
6224 }
6225
506fb367 6226 return 1;
c906108c 6227}
43ff13b4 6228
506fb367
DJ
6229/* Tell the remote machine to resume. */
6230
f6ac5f3d
PA
6231void
6232remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 6233{
d01949b6 6234 struct remote_state *rs = get_remote_state ();
43ff13b4 6235
85ad3aaf
PA
6236 /* When connected in non-stop mode, the core resumes threads
6237 individually. Resuming remote threads directly in target_resume
6238 would thus result in sending one packet per thread. Instead, to
6239 minimize roundtrip latency, here we just store the resume
6240 request; the actual remote resumption will be done in
6241 target_commit_resume / remote_commit_resume, where we'll be able
6242 to do vCont action coalescing. */
f6ac5f3d 6243 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
85ad3aaf 6244 {
7aabaf9d 6245 remote_thread_info *remote_thr;
85ad3aaf 6246
d7e15655 6247 if (minus_one_ptid == ptid || ptid.is_pid ())
7aabaf9d 6248 remote_thr = get_remote_thread_info (inferior_ptid);
85ad3aaf 6249 else
7aabaf9d
SM
6250 remote_thr = get_remote_thread_info (ptid);
6251
85ad3aaf
PA
6252 remote_thr->last_resume_step = step;
6253 remote_thr->last_resume_sig = siggnal;
6254 return;
6255 }
6256
722247f1
YQ
6257 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6258 (explained in remote-notif.c:handle_notification) so
6259 remote_notif_process is not called. We need find a place where
6260 it is safe to start a 'vNotif' sequence. It is good to do it
6261 before resuming inferior, because inferior was stopped and no RSP
6262 traffic at that moment. */
6efcd9a8 6263 if (!target_is_non_stop_p ())
5965e028 6264 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 6265
f6ac5f3d 6266 rs->last_resume_exec_dir = ::execution_direction;
3a00c802 6267
7b68ffbb
PA
6268 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
6269 if (!remote_resume_with_vcont (ptid, step, siggnal))
6b8edb51 6270 remote_resume_with_hc (ptid, step, siggnal);
43ff13b4 6271
2acceee2 6272 /* We are about to start executing the inferior, let's register it
0df8b418
MS
6273 with the event loop. NOTE: this is the one place where all the
6274 execution commands end up. We could alternatively do this in each
23860348 6275 of the execution commands in infcmd.c. */
2acceee2
JM
6276 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6277 into infcmd.c in order to allow inferior function calls to work
23860348 6278 NOT asynchronously. */
362646f5 6279 if (target_can_async_p ())
6a3753b3 6280 target_async (1);
e24a49d8
PA
6281
6282 /* We've just told the target to resume. The remote server will
6283 wait for the inferior to stop, and then send a stop reply. In
6284 the mean time, we can't start another command/query ourselves
74531fed
PA
6285 because the stub wouldn't be ready to process it. This applies
6286 only to the base all-stop protocol, however. In non-stop (which
6287 only supports vCont), the stub replies with an "OK", and is
6288 immediate able to process further serial input. */
6efcd9a8 6289 if (!target_is_non_stop_p ())
74531fed 6290 rs->waiting_for_stop_reply = 1;
43ff13b4 6291}
85ad3aaf 6292
85ad3aaf
PA
6293static int is_pending_fork_parent_thread (struct thread_info *thread);
6294
6295/* Private per-inferior info for target remote processes. */
6296
089354bb 6297struct remote_inferior : public private_inferior
85ad3aaf
PA
6298{
6299 /* Whether we can send a wildcard vCont for this process. */
089354bb 6300 bool may_wildcard_vcont = true;
85ad3aaf
PA
6301};
6302
089354bb
SM
6303/* Get the remote private inferior data associated to INF. */
6304
6305static remote_inferior *
6306get_remote_inferior (inferior *inf)
6307{
6308 if (inf->priv == NULL)
6309 inf->priv.reset (new remote_inferior);
6310
6311 return static_cast<remote_inferior *> (inf->priv.get ());
6312}
6313
f5db4863 6314/* Class used to track the construction of a vCont packet in the
85ad3aaf
PA
6315 outgoing packet buffer. This is used to send multiple vCont
6316 packets if we have more actions than would fit a single packet. */
6317
f5db4863 6318class vcont_builder
85ad3aaf 6319{
f5db4863 6320public:
6b8edb51
PA
6321 explicit vcont_builder (remote_target *remote)
6322 : m_remote (remote)
f5db4863
PA
6323 {
6324 restart ();
6325 }
6326
6327 void flush ();
6328 void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6329
6330private:
6331 void restart ();
6332
6b8edb51
PA
6333 /* The remote target. */
6334 remote_target *m_remote;
6335
85ad3aaf
PA
6336 /* Pointer to the first action. P points here if no action has been
6337 appended yet. */
f5db4863 6338 char *m_first_action;
85ad3aaf
PA
6339
6340 /* Where the next action will be appended. */
f5db4863 6341 char *m_p;
85ad3aaf
PA
6342
6343 /* The end of the buffer. Must never write past this. */
f5db4863 6344 char *m_endp;
85ad3aaf
PA
6345};
6346
6347/* Prepare the outgoing buffer for a new vCont packet. */
6348
f5db4863
PA
6349void
6350vcont_builder::restart ()
85ad3aaf 6351{
6b8edb51 6352 struct remote_state *rs = m_remote->get_remote_state ();
85ad3aaf 6353
f5db4863 6354 m_p = rs->buf;
6b8edb51 6355 m_endp = rs->buf + m_remote->get_remote_packet_size ();
f5db4863
PA
6356 m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6357 m_first_action = m_p;
85ad3aaf
PA
6358}
6359
6360/* If the vCont packet being built has any action, send it to the
6361 remote end. */
6362
f5db4863
PA
6363void
6364vcont_builder::flush ()
85ad3aaf
PA
6365{
6366 struct remote_state *rs;
6367
f5db4863 6368 if (m_p == m_first_action)
85ad3aaf
PA
6369 return;
6370
6b8edb51
PA
6371 rs = m_remote->get_remote_state ();
6372 m_remote->putpkt (rs->buf);
6373 m_remote->getpkt (&rs->buf, &rs->buf_size, 0);
85ad3aaf
PA
6374 if (strcmp (rs->buf, "OK") != 0)
6375 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
6376}
6377
6378/* The largest action is range-stepping, with its two addresses. This
6379 is more than sufficient. If a new, bigger action is created, it'll
6380 quickly trigger a failed assertion in append_resumption (and we'll
6381 just bump this). */
6382#define MAX_ACTION_SIZE 200
6383
6384/* Append a new vCont action in the outgoing packet being built. If
6385 the action doesn't fit the packet along with previous actions, push
6386 what we've got so far to the remote end and start over a new vCont
6387 packet (with the new action). */
6388
f5db4863
PA
6389void
6390vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
85ad3aaf
PA
6391{
6392 char buf[MAX_ACTION_SIZE + 1];
85ad3aaf 6393
6b8edb51
PA
6394 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6395 ptid, step, siggnal);
85ad3aaf
PA
6396
6397 /* Check whether this new action would fit in the vCont packet along
6398 with previous actions. If not, send what we've got so far and
6399 start a new vCont packet. */
f5db4863
PA
6400 size_t rsize = endp - buf;
6401 if (rsize > m_endp - m_p)
85ad3aaf 6402 {
f5db4863
PA
6403 flush ();
6404 restart ();
85ad3aaf
PA
6405
6406 /* Should now fit. */
f5db4863 6407 gdb_assert (rsize <= m_endp - m_p);
85ad3aaf
PA
6408 }
6409
f5db4863
PA
6410 memcpy (m_p, buf, rsize);
6411 m_p += rsize;
6412 *m_p = '\0';
85ad3aaf
PA
6413}
6414
6415/* to_commit_resume implementation. */
6416
f6ac5f3d
PA
6417void
6418remote_target::commit_resume ()
85ad3aaf 6419{
85ad3aaf
PA
6420 struct inferior *inf;
6421 struct thread_info *tp;
6422 int any_process_wildcard;
6423 int may_global_wildcard_vcont;
85ad3aaf
PA
6424
6425 /* If connected in all-stop mode, we'd send the remote resume
6426 request directly from remote_resume. Likewise if
6427 reverse-debugging, as there are no defined vCont actions for
6428 reverse execution. */
f6ac5f3d 6429 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
85ad3aaf
PA
6430 return;
6431
6432 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6433 instead of resuming all threads of each process individually.
6434 However, if any thread of a process must remain halted, we can't
6435 send wildcard resumes and must send one action per thread.
6436
6437 Care must be taken to not resume threads/processes the server
6438 side already told us are stopped, but the core doesn't know about
6439 yet, because the events are still in the vStopped notification
6440 queue. For example:
6441
6442 #1 => vCont s:p1.1;c
6443 #2 <= OK
6444 #3 <= %Stopped T05 p1.1
6445 #4 => vStopped
6446 #5 <= T05 p1.2
6447 #6 => vStopped
6448 #7 <= OK
6449 #8 (infrun handles the stop for p1.1 and continues stepping)
6450 #9 => vCont s:p1.1;c
6451
6452 The last vCont above would resume thread p1.2 by mistake, because
6453 the server has no idea that the event for p1.2 had not been
6454 handled yet.
6455
6456 The server side must similarly ignore resume actions for the
6457 thread that has a pending %Stopped notification (and any other
6458 threads with events pending), until GDB acks the notification
6459 with vStopped. Otherwise, e.g., the following case is
6460 mishandled:
6461
6462 #1 => g (or any other packet)
6463 #2 <= [registers]
6464 #3 <= %Stopped T05 p1.2
6465 #4 => vCont s:p1.1;c
6466 #5 <= OK
6467
6468 Above, the server must not resume thread p1.2. GDB can't know
6469 that p1.2 stopped until it acks the %Stopped notification, and
6470 since from GDB's perspective all threads should be running, it
6471 sends a "c" action.
6472
6473 Finally, special care must also be given to handling fork/vfork
6474 events. A (v)fork event actually tells us that two processes
6475 stopped -- the parent and the child. Until we follow the fork,
6476 we must not resume the child. Therefore, if we have a pending
6477 fork follow, we must not send a global wildcard resume action
6478 (vCont;c). We can still send process-wide wildcards though. */
6479
6480 /* Start by assuming a global wildcard (vCont;c) is possible. */
6481 may_global_wildcard_vcont = 1;
6482
6483 /* And assume every process is individually wildcard-able too. */
6484 ALL_NON_EXITED_INFERIORS (inf)
6485 {
089354bb
SM
6486 remote_inferior *priv = get_remote_inferior (inf);
6487
6488 priv->may_wildcard_vcont = true;
85ad3aaf
PA
6489 }
6490
6491 /* Check for any pending events (not reported or processed yet) and
6492 disable process and global wildcard resumes appropriately. */
6493 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6494
6495 ALL_NON_EXITED_THREADS (tp)
6496 {
6497 /* If a thread of a process is not meant to be resumed, then we
6498 can't wildcard that process. */
6499 if (!tp->executing)
6500 {
089354bb 6501 get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
85ad3aaf
PA
6502
6503 /* And if we can't wildcard a process, we can't wildcard
6504 everything either. */
6505 may_global_wildcard_vcont = 0;
6506 continue;
6507 }
6508
6509 /* If a thread is the parent of an unfollowed fork, then we
6510 can't do a global wildcard, as that would resume the fork
6511 child. */
6512 if (is_pending_fork_parent_thread (tp))
6513 may_global_wildcard_vcont = 0;
6514 }
6515
6516 /* Now let's build the vCont packet(s). Actions must be appended
6517 from narrower to wider scopes (thread -> process -> global). If
6518 we end up with too many actions for a single packet vcont_builder
6519 flushes the current vCont packet to the remote side and starts a
6520 new one. */
6b8edb51 6521 struct vcont_builder vcont_builder (this);
85ad3aaf
PA
6522
6523 /* Threads first. */
6524 ALL_NON_EXITED_THREADS (tp)
6525 {
7aabaf9d 6526 remote_thread_info *remote_thr = get_remote_thread_info (tp);
85ad3aaf
PA
6527
6528 if (!tp->executing || remote_thr->vcont_resumed)
6529 continue;
6530
6531 gdb_assert (!thread_is_in_step_over_chain (tp));
6532
6533 if (!remote_thr->last_resume_step
6534 && remote_thr->last_resume_sig == GDB_SIGNAL_0
089354bb 6535 && get_remote_inferior (tp->inf)->may_wildcard_vcont)
85ad3aaf
PA
6536 {
6537 /* We'll send a wildcard resume instead. */
6538 remote_thr->vcont_resumed = 1;
6539 continue;
6540 }
6541
f5db4863 6542 vcont_builder.push_action (tp->ptid,
85ad3aaf
PA
6543 remote_thr->last_resume_step,
6544 remote_thr->last_resume_sig);
6545 remote_thr->vcont_resumed = 1;
6546 }
6547
6548 /* Now check whether we can send any process-wide wildcard. This is
6549 to avoid sending a global wildcard in the case nothing is
6550 supposed to be resumed. */
6551 any_process_wildcard = 0;
6552
6553 ALL_NON_EXITED_INFERIORS (inf)
6554 {
089354bb 6555 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf
PA
6556 {
6557 any_process_wildcard = 1;
6558 break;
6559 }
6560 }
6561
6562 if (any_process_wildcard)
6563 {
6564 /* If all processes are wildcard-able, then send a single "c"
6565 action, otherwise, send an "all (-1) threads of process"
6566 continue action for each running process, if any. */
6567 if (may_global_wildcard_vcont)
6568 {
f5db4863
PA
6569 vcont_builder.push_action (minus_one_ptid,
6570 false, GDB_SIGNAL_0);
85ad3aaf
PA
6571 }
6572 else
6573 {
6574 ALL_NON_EXITED_INFERIORS (inf)
6575 {
089354bb 6576 if (get_remote_inferior (inf)->may_wildcard_vcont)
85ad3aaf 6577 {
f2907e49 6578 vcont_builder.push_action (ptid_t (inf->pid),
f5db4863 6579 false, GDB_SIGNAL_0);
85ad3aaf
PA
6580 }
6581 }
6582 }
6583 }
6584
f5db4863 6585 vcont_builder.flush ();
85ad3aaf
PA
6586}
6587
c906108c 6588\f
43ff13b4 6589
74531fed
PA
6590/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6591 thread, all threads of a remote process, or all threads of all
6592 processes. */
6593
6b8edb51
PA
6594void
6595remote_target::remote_stop_ns (ptid_t ptid)
74531fed
PA
6596{
6597 struct remote_state *rs = get_remote_state ();
6598 char *p = rs->buf;
6599 char *endp = rs->buf + get_remote_packet_size ();
74531fed 6600
4082afcc 6601 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 6602 remote_vcont_probe ();
74531fed 6603
d458bd84 6604 if (!rs->supports_vCont.t)
74531fed
PA
6605 error (_("Remote server does not support stopping threads"));
6606
d7e15655 6607 if (ptid == minus_one_ptid
0e998d96 6608 || (!remote_multi_process_p (rs) && ptid.is_pid ()))
74531fed
PA
6609 p += xsnprintf (p, endp - p, "vCont;t");
6610 else
6611 {
6612 ptid_t nptid;
6613
74531fed
PA
6614 p += xsnprintf (p, endp - p, "vCont;t:");
6615
0e998d96 6616 if (ptid.is_pid ())
74531fed 6617 /* All (-1) threads of process. */
e99b03dc 6618 nptid = ptid_t (ptid.pid (), -1, 0);
74531fed
PA
6619 else
6620 {
6621 /* Small optimization: if we already have a stop reply for
6622 this thread, no use in telling the stub we want this
6623 stopped. */
6624 if (peek_stop_reply (ptid))
6625 return;
6626
6627 nptid = ptid;
6628 }
6629
a9cbf802 6630 write_ptid (p, endp, nptid);
74531fed
PA
6631 }
6632
6633 /* In non-stop, we get an immediate OK reply. The stop reply will
6634 come in asynchronously by notification. */
6635 putpkt (rs->buf);
6636 getpkt (&rs->buf, &rs->buf_size, 0);
6637 if (strcmp (rs->buf, "OK") != 0)
6638 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6639}
6640
bfedc46a
PA
6641/* All-stop version of target_interrupt. Sends a break or a ^C to
6642 interrupt the remote target. It is undefined which thread of which
6643 process reports the interrupt. */
74531fed 6644
6b8edb51
PA
6645void
6646remote_target::remote_interrupt_as ()
74531fed
PA
6647{
6648 struct remote_state *rs = get_remote_state ();
6649
3a29589a
DJ
6650 rs->ctrlc_pending_p = 1;
6651
74531fed
PA
6652 /* If the inferior is stopped already, but the core didn't know
6653 about it yet, just ignore the request. The cached wait status
6654 will be collected in remote_wait. */
6655 if (rs->cached_wait_status)
6656 return;
6657
9a7071a8
JB
6658 /* Send interrupt_sequence to remote target. */
6659 send_interrupt_sequence ();
74531fed
PA
6660}
6661
de979965
PA
6662/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6663 the remote target. It is undefined which thread of which process
e42de8c7
PA
6664 reports the interrupt. Throws an error if the packet is not
6665 supported by the server. */
de979965 6666
6b8edb51
PA
6667void
6668remote_target::remote_interrupt_ns ()
de979965
PA
6669{
6670 struct remote_state *rs = get_remote_state ();
6671 char *p = rs->buf;
6672 char *endp = rs->buf + get_remote_packet_size ();
6673
6674 xsnprintf (p, endp - p, "vCtrlC");
6675
6676 /* In non-stop, we get an immediate OK reply. The stop reply will
6677 come in asynchronously by notification. */
6678 putpkt (rs->buf);
6679 getpkt (&rs->buf, &rs->buf_size, 0);
6680
6681 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6682 {
6683 case PACKET_OK:
6684 break;
6685 case PACKET_UNKNOWN:
e42de8c7 6686 error (_("No support for interrupting the remote target."));
de979965
PA
6687 case PACKET_ERROR:
6688 error (_("Interrupting target failed: %s"), rs->buf);
6689 }
de979965
PA
6690}
6691
bfedc46a 6692/* Implement the to_stop function for the remote targets. */
74531fed 6693
f6ac5f3d
PA
6694void
6695remote_target::stop (ptid_t ptid)
c906108c 6696{
7a292a7a 6697 if (remote_debug)
0f71a2f6 6698 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 6699
6efcd9a8 6700 if (target_is_non_stop_p ())
74531fed 6701 remote_stop_ns (ptid);
c906108c 6702 else
bfedc46a
PA
6703 {
6704 /* We don't currently have a way to transparently pause the
6705 remote target in all-stop mode. Interrupt it instead. */
de979965 6706 remote_interrupt_as ();
bfedc46a
PA
6707 }
6708}
6709
6710/* Implement the to_interrupt function for the remote targets. */
6711
f6ac5f3d
PA
6712void
6713remote_target::interrupt ()
bfedc46a
PA
6714{
6715 if (remote_debug)
6716 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6717
e42de8c7
PA
6718 if (target_is_non_stop_p ())
6719 remote_interrupt_ns ();
bfedc46a 6720 else
e42de8c7 6721 remote_interrupt_as ();
c906108c
SS
6722}
6723
93692b58
PA
6724/* Implement the to_pass_ctrlc function for the remote targets. */
6725
f6ac5f3d
PA
6726void
6727remote_target::pass_ctrlc ()
93692b58
PA
6728{
6729 struct remote_state *rs = get_remote_state ();
6730
6731 if (remote_debug)
6732 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6733
6734 /* If we're starting up, we're not fully synced yet. Quit
6735 immediately. */
6736 if (rs->starting_up)
6737 quit ();
6738 /* If ^C has already been sent once, offer to disconnect. */
6739 else if (rs->ctrlc_pending_p)
6740 interrupt_query ();
6741 else
e671cd59 6742 target_interrupt ();
93692b58
PA
6743}
6744
c906108c
SS
6745/* Ask the user what to do when an interrupt is received. */
6746
6b8edb51
PA
6747void
6748remote_target::interrupt_query ()
c906108c 6749{
abc56d60 6750 struct remote_state *rs = get_remote_state ();
c906108c 6751
abc56d60 6752 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 6753 {
abc56d60
PA
6754 if (query (_("The target is not responding to interrupt requests.\n"
6755 "Stop debugging it? ")))
74531fed 6756 {
78a095c3 6757 remote_unpush_target ();
abc56d60 6758 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
6759 }
6760 }
abc56d60
PA
6761 else
6762 {
6763 if (query (_("Interrupted while waiting for the program.\n"
6764 "Give up waiting? ")))
6765 quit ();
6766 }
c906108c
SS
6767}
6768
6426a772
JM
6769/* Enable/disable target terminal ownership. Most targets can use
6770 terminal groups to control terminal ownership. Remote targets are
6771 different in that explicit transfer of ownership to/from GDB/target
23860348 6772 is required. */
6426a772 6773
f6ac5f3d
PA
6774void
6775remote_target::terminal_inferior ()
6426a772 6776{
6426a772
JM
6777 /* NOTE: At this point we could also register our selves as the
6778 recipient of all input. Any characters typed could then be
23860348 6779 passed on down to the target. */
6426a772
JM
6780}
6781
f6ac5f3d
PA
6782void
6783remote_target::terminal_ours ()
6426a772 6784{
6426a772
JM
6785}
6786
176a6961 6787static void
917317f4 6788remote_console_output (char *msg)
c906108c
SS
6789{
6790 char *p;
6791
c5aa993b 6792 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
6793 {
6794 char tb[2];
6795 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 6796
c906108c
SS
6797 tb[0] = c;
6798 tb[1] = 0;
43ff13b4 6799 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 6800 }
00db5b94
PA
6801 gdb_flush (gdb_stdtarg);
6802}
74531fed 6803
74531fed
PA
6804DEF_VEC_O(cached_reg_t);
6805
722247f1 6806typedef struct stop_reply
74531fed 6807{
722247f1 6808 struct notif_event base;
74531fed 6809
722247f1 6810 /* The identifier of the thread about this event */
74531fed
PA
6811 ptid_t ptid;
6812
340e3c99 6813 /* The remote state this event is associated with. When the remote
bcc75809
YQ
6814 connection, represented by a remote_state object, is closed,
6815 all the associated stop_reply events should be released. */
6816 struct remote_state *rs;
6817
74531fed
PA
6818 struct target_waitstatus ws;
6819
5cd63fda
PA
6820 /* The architecture associated with the expedited registers. */
6821 gdbarch *arch;
6822
15148d6a
PA
6823 /* Expedited registers. This makes remote debugging a bit more
6824 efficient for those targets that provide critical registers as
6825 part of their normal status mechanism (as another roundtrip to
6826 fetch them is avoided). */
74531fed
PA
6827 VEC(cached_reg_t) *regcache;
6828
f7e6eed5
PA
6829 enum target_stop_reason stop_reason;
6830
74531fed
PA
6831 CORE_ADDR watch_data_address;
6832
dc146f7c 6833 int core;
722247f1 6834} *stop_reply_p;
a744cf53 6835
74531fed
PA
6836static void
6837stop_reply_xfree (struct stop_reply *r)
6838{
f48ff2a7 6839 notif_event_xfree ((struct notif_event *) r);
c906108c
SS
6840}
6841
221e1a37
PA
6842/* Return the length of the stop reply queue. */
6843
6b8edb51
PA
6844int
6845remote_target::stop_reply_queue_length ()
221e1a37 6846{
6b8edb51 6847 remote_state *rs = get_remote_state ();
953edf2b 6848 return rs->stop_reply_queue.size ();
221e1a37
PA
6849}
6850
6b8edb51
PA
6851void
6852remote_notif_stop_parse (remote_target *remote,
6853 struct notif_client *self, char *buf,
722247f1
YQ
6854 struct notif_event *event)
6855{
6b8edb51 6856 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
722247f1
YQ
6857}
6858
6859static void
6b8edb51
PA
6860remote_notif_stop_ack (remote_target *remote,
6861 struct notif_client *self, char *buf,
722247f1
YQ
6862 struct notif_event *event)
6863{
6864 struct stop_reply *stop_reply = (struct stop_reply *) event;
6865
6866 /* acknowledge */
6b8edb51 6867 putpkt (remote, self->ack_command);
722247f1
YQ
6868
6869 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6b8edb51 6870 {
722247f1
YQ
6871 /* We got an unknown stop reply. */
6872 error (_("Unknown stop reply"));
6b8edb51 6873 }
722247f1 6874
6b8edb51 6875 remote->push_stop_reply (stop_reply);
722247f1
YQ
6876}
6877
6878static int
6b8edb51
PA
6879remote_notif_stop_can_get_pending_events (remote_target *remote,
6880 struct notif_client *self)
722247f1
YQ
6881{
6882 /* We can't get pending events in remote_notif_process for
6883 notification stop, and we have to do this in remote_wait_ns
6884 instead. If we fetch all queued events from stub, remote stub
6885 may exit and we have no chance to process them back in
6886 remote_wait_ns. */
6b8edb51
PA
6887 remote_state *rs = remote->get_remote_state ();
6888 mark_async_event_handler (rs->remote_async_inferior_event_token);
722247f1
YQ
6889 return 0;
6890}
6891
6892static void
6893stop_reply_dtr (struct notif_event *event)
6894{
6895 struct stop_reply *r = (struct stop_reply *) event;
d1dff226
AH
6896 cached_reg_t *reg;
6897 int ix;
6898
6899 for (ix = 0;
6900 VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6901 ix++)
6902 xfree (reg->data);
722247f1
YQ
6903
6904 VEC_free (cached_reg_t, r->regcache);
6905}
6906
6907static struct notif_event *
6908remote_notif_stop_alloc_reply (void)
6909{
8d749320
SM
6910 /* We cast to a pointer to the "base class". */
6911 struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
722247f1
YQ
6912
6913 r->dtr = stop_reply_dtr;
6914
6915 return r;
6916}
6917
6918/* A client of notification Stop. */
6919
6920struct notif_client notif_client_stop =
6921{
6922 "Stop",
6923 "vStopped",
6924 remote_notif_stop_parse,
6925 remote_notif_stop_ack,
6926 remote_notif_stop_can_get_pending_events,
6927 remote_notif_stop_alloc_reply,
f48ff2a7 6928 REMOTE_NOTIF_STOP,
722247f1
YQ
6929};
6930
85ad3aaf 6931/* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
cbb8991c
DB
6932 the pid of the process that owns the threads we want to check, or
6933 -1 if we want to check all threads. */
6934
6935static int
6936is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6937 ptid_t thread_ptid)
6938{
6939 if (ws->kind == TARGET_WAITKIND_FORKED
6940 || ws->kind == TARGET_WAITKIND_VFORKED)
6941 {
e99b03dc 6942 if (event_pid == -1 || event_pid == thread_ptid.pid ())
cbb8991c
DB
6943 return 1;
6944 }
6945
6946 return 0;
6947}
6948
85ad3aaf
PA
6949/* Return the thread's pending status used to determine whether the
6950 thread is a fork parent stopped at a fork event. */
6951
6952static struct target_waitstatus *
6953thread_pending_fork_status (struct thread_info *thread)
6954{
6955 if (thread->suspend.waitstatus_pending_p)
6956 return &thread->suspend.waitstatus;
6957 else
6958 return &thread->pending_follow;
6959}
6960
6961/* Determine if THREAD is a pending fork parent thread. */
6962
6963static int
6964is_pending_fork_parent_thread (struct thread_info *thread)
6965{
6966 struct target_waitstatus *ws = thread_pending_fork_status (thread);
6967 int pid = -1;
6968
6969 return is_pending_fork_parent (ws, pid, thread->ptid);
6970}
6971
cbb8991c
DB
6972/* If CONTEXT contains any fork child threads that have not been
6973 reported yet, remove them from the CONTEXT list. If such a
6974 thread exists it is because we are stopped at a fork catchpoint
6975 and have not yet called follow_fork, which will set up the
6976 host-side data structures for the new process. */
6977
6b8edb51
PA
6978void
6979remote_target::remove_new_fork_children (threads_listing_context *context)
cbb8991c
DB
6980{
6981 struct thread_info * thread;
6982 int pid = -1;
6983 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
6984
6985 /* For any threads stopped at a fork event, remove the corresponding
6986 fork child threads from the CONTEXT list. */
6987 ALL_NON_EXITED_THREADS (thread)
6988 {
85ad3aaf 6989 struct target_waitstatus *ws = thread_pending_fork_status (thread);
cbb8991c
DB
6990
6991 if (is_pending_fork_parent (ws, pid, thread->ptid))
21fe1c75 6992 context->remove_thread (ws->value.related_pid);
cbb8991c
DB
6993 }
6994
6995 /* Check for any pending fork events (not reported or processed yet)
6996 in process PID and remove those fork child threads from the
6997 CONTEXT list as well. */
6998 remote_notif_get_pending_events (notif);
953edf2b
TT
6999 for (auto &event : get_remote_state ()->stop_reply_queue)
7000 if (event->ws.kind == TARGET_WAITKIND_FORKED
7001 || event->ws.kind == TARGET_WAITKIND_VFORKED
7002 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
7003 context->remove_thread (event->ws.value.related_pid);
85ad3aaf
PA
7004}
7005
7006/* Check whether any event pending in the vStopped queue would prevent
7007 a global or process wildcard vCont action. Clear
7008 *may_global_wildcard if we can't do a global wildcard (vCont;c),
7009 and clear the event inferior's may_wildcard_vcont flag if we can't
7010 do a process-wide wildcard resume (vCont;c:pPID.-1). */
7011
6b8edb51
PA
7012void
7013remote_target::check_pending_events_prevent_wildcard_vcont
7014 (int *may_global_wildcard)
85ad3aaf
PA
7015{
7016 struct notif_client *notif = &notif_client_stop;
7017
7018 remote_notif_get_pending_events (notif);
953edf2b
TT
7019 for (auto &event : get_remote_state ()->stop_reply_queue)
7020 {
7021 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
7022 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
7023 continue;
85ad3aaf 7024
953edf2b
TT
7025 if (event->ws.kind == TARGET_WAITKIND_FORKED
7026 || event->ws.kind == TARGET_WAITKIND_VFORKED)
7027 *may_global_wildcard = 0;
722247f1 7028
953edf2b 7029 struct inferior *inf = find_inferior_ptid (event->ptid);
722247f1 7030
953edf2b
TT
7031 /* This may be the first time we heard about this process.
7032 Regardless, we must not do a global wildcard resume, otherwise
7033 we'd resume this process too. */
7034 *may_global_wildcard = 0;
7035 if (inf != NULL)
7036 get_remote_inferior (inf)->may_wildcard_vcont = false;
722247f1 7037 }
722247f1
YQ
7038}
7039
f48ff2a7 7040/* Discard all pending stop replies of inferior INF. */
c906108c 7041
6b8edb51
PA
7042void
7043remote_target::discard_pending_stop_replies (struct inferior *inf)
c906108c 7044{
f48ff2a7
YQ
7045 struct stop_reply *reply;
7046 struct remote_state *rs = get_remote_state ();
7047 struct remote_notif_state *rns = rs->notif_state;
7048
7049 /* This function can be notified when an inferior exists. When the
7050 target is not remote, the notification state is NULL. */
7051 if (rs->remote_desc == NULL)
7052 return;
7053
7054 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 7055
74531fed 7056 /* Discard the in-flight notification. */
e99b03dc 7057 if (reply != NULL && reply->ptid.pid () == inf->pid)
74531fed 7058 {
722247f1 7059 stop_reply_xfree (reply);
f48ff2a7 7060 rns->pending_event[notif_client_stop.id] = NULL;
74531fed 7061 }
c906108c 7062
74531fed
PA
7063 /* Discard the stop replies we have already pulled with
7064 vStopped. */
953edf2b
TT
7065 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7066 rs->stop_reply_queue.end (),
7067 [=] (const stop_reply_up &event)
7068 {
7069 return event->ptid.pid () == inf->pid;
7070 });
7071 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
bcc75809
YQ
7072}
7073
7074/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7 7075
6b8edb51
PA
7076void
7077remote_target::discard_pending_stop_replies_in_queue ()
f48ff2a7 7078{
6b8edb51 7079 remote_state *rs = get_remote_state ();
f48ff2a7 7080
f48ff2a7
YQ
7081 /* Discard the stop replies we have already pulled with
7082 vStopped. */
953edf2b
TT
7083 auto iter = std::remove_if (rs->stop_reply_queue.begin (),
7084 rs->stop_reply_queue.end (),
7085 [=] (const stop_reply_up &event)
7086 {
7087 return event->rs == rs;
7088 });
7089 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ());
74531fed 7090}
43ff13b4 7091
722247f1
YQ
7092/* Remove the first reply in 'stop_reply_queue' which matches
7093 PTID. */
2e9f7625 7094
6b8edb51
PA
7095struct stop_reply *
7096remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 7097{
953edf2b 7098 remote_state *rs = get_remote_state ();
722247f1 7099
953edf2b
TT
7100 auto iter = std::find_if (rs->stop_reply_queue.begin (),
7101 rs->stop_reply_queue.end (),
7102 [=] (const stop_reply_up &event)
7103 {
7104 return event->ptid.matches (ptid);
7105 });
7106 struct stop_reply *result;
7107 if (iter == rs->stop_reply_queue.end ())
7108 result = nullptr;
7109 else
7110 {
7111 result = iter->release ();
7112 rs->stop_reply_queue.erase (iter);
7113 }
722247f1 7114
722247f1
YQ
7115 if (notif_debug)
7116 fprintf_unfiltered (gdb_stdlog,
7117 "notif: discard queued event: 'Stop' in %s\n",
7118 target_pid_to_str (ptid));
a744cf53 7119
953edf2b 7120 return result;
74531fed 7121}
75c99385 7122
74531fed
PA
7123/* Look for a queued stop reply belonging to PTID. If one is found,
7124 remove it from the queue, and return it. Returns NULL if none is
7125 found. If there are still queued events left to process, tell the
7126 event loop to get back to target_wait soon. */
e24a49d8 7127
6b8edb51
PA
7128struct stop_reply *
7129remote_target::queued_stop_reply (ptid_t ptid)
74531fed 7130{
953edf2b 7131 remote_state *rs = get_remote_state ();
722247f1 7132 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 7133
953edf2b 7134 if (!rs->stop_reply_queue.empty ())
6b8edb51 7135 {
6b8edb51
PA
7136 /* There's still at least an event left. */
7137 mark_async_event_handler (rs->remote_async_inferior_event_token);
7138 }
74531fed 7139
722247f1 7140 return r;
74531fed
PA
7141}
7142
7143/* Push a fully parsed stop reply in the stop reply queue. Since we
7144 know that we now have at least one queued event left to pass to the
7145 core side, tell the event loop to get back to target_wait soon. */
7146
6b8edb51
PA
7147void
7148remote_target::push_stop_reply (struct stop_reply *new_event)
74531fed 7149{
6b8edb51 7150 remote_state *rs = get_remote_state ();
953edf2b 7151 rs->stop_reply_queue.push_back (stop_reply_up (new_event));
74531fed 7152
722247f1
YQ
7153 if (notif_debug)
7154 fprintf_unfiltered (gdb_stdlog,
7155 "notif: push 'Stop' %s to queue %d\n",
7156 target_pid_to_str (new_event->ptid),
953edf2b 7157 int (rs->stop_reply_queue.size ()));
74531fed 7158
6b8edb51 7159 mark_async_event_handler (rs->remote_async_inferior_event_token);
74531fed
PA
7160}
7161
7162/* Returns true if we have a stop reply for PTID. */
7163
6b8edb51
PA
7164int
7165remote_target::peek_stop_reply (ptid_t ptid)
74531fed 7166{
6b8edb51 7167 remote_state *rs = get_remote_state ();
953edf2b
TT
7168 for (auto &event : rs->stop_reply_queue)
7169 if (ptid == event->ptid
7170 && event->ws.kind == TARGET_WAITKIND_STOPPED)
7171 return 1;
7172 return 0;
74531fed
PA
7173}
7174
26d56a93
SL
7175/* Helper for remote_parse_stop_reply. Return nonzero if the substring
7176 starting with P and ending with PEND matches PREFIX. */
7177
7178static int
7179strprefix (const char *p, const char *pend, const char *prefix)
7180{
7181 for ( ; p < pend; p++, prefix++)
7182 if (*p != *prefix)
7183 return 0;
7184 return *prefix == '\0';
7185}
7186
74531fed
PA
7187/* Parse the stop reply in BUF. Either the function succeeds, and the
7188 result is stored in EVENT, or throws an error. */
7189
6b8edb51
PA
7190void
7191remote_target::remote_parse_stop_reply (char *buf, stop_reply *event)
74531fed 7192{
5cd63fda 7193 remote_arch_state *rsa = NULL;
74531fed 7194 ULONGEST addr;
256642e8 7195 const char *p;
94585166 7196 int skipregs = 0;
74531fed
PA
7197
7198 event->ptid = null_ptid;
bcc75809 7199 event->rs = get_remote_state ();
74531fed
PA
7200 event->ws.kind = TARGET_WAITKIND_IGNORE;
7201 event->ws.value.integer = 0;
f7e6eed5 7202 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
74531fed 7203 event->regcache = NULL;
dc146f7c 7204 event->core = -1;
74531fed
PA
7205
7206 switch (buf[0])
7207 {
7208 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
7209 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7210 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7211 ss = signal number
7212 n... = register number
7213 r... = register contents
7214 */
7215
7216 p = &buf[3]; /* after Txx */
7217 while (*p)
7218 {
256642e8 7219 const char *p1;
cea39f65 7220 int fieldsize;
43ff13b4 7221
1f10ba14
PA
7222 p1 = strchr (p, ':');
7223 if (p1 == NULL)
7224 error (_("Malformed packet(a) (missing colon): %s\n\
7225Packet: '%s'\n"),
7226 p, buf);
7227 if (p == p1)
7228 error (_("Malformed packet(a) (missing register number): %s\n\
7229Packet: '%s'\n"),
7230 p, buf);
3c3bea1c 7231
1f10ba14
PA
7232 /* Some "registers" are actually extended stop information.
7233 Note if you're adding a new entry here: GDB 7.9 and
7234 earlier assume that all register "numbers" that start
7235 with an hex digit are real register numbers. Make sure
7236 the server only sends such a packet if it knows the
7237 client understands it. */
c8e38a49 7238
26d56a93 7239 if (strprefix (p, p1, "thread"))
1f10ba14 7240 event->ptid = read_ptid (++p1, &p);
82075af2
JS
7241 else if (strprefix (p, p1, "syscall_entry"))
7242 {
7243 ULONGEST sysno;
7244
7245 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7246 p = unpack_varlen_hex (++p1, &sysno);
7247 event->ws.value.syscall_number = (int) sysno;
7248 }
7249 else if (strprefix (p, p1, "syscall_return"))
7250 {
7251 ULONGEST sysno;
7252
7253 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7254 p = unpack_varlen_hex (++p1, &sysno);
7255 event->ws.value.syscall_number = (int) sysno;
7256 }
26d56a93
SL
7257 else if (strprefix (p, p1, "watch")
7258 || strprefix (p, p1, "rwatch")
7259 || strprefix (p, p1, "awatch"))
cea39f65 7260 {
f7e6eed5 7261 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
7262 p = unpack_varlen_hex (++p1, &addr);
7263 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 7264 }
26d56a93 7265 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
7266 {
7267 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7268
7269 /* Make sure the stub doesn't forget to indicate support
7270 with qSupported. */
7271 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7272 error (_("Unexpected swbreak stop reason"));
7273
7274 /* The value part is documented as "must be empty",
7275 though we ignore it, in case we ever decide to make
7276 use of it in a backward compatible way. */
8424cc97 7277 p = strchrnul (p1 + 1, ';');
f7e6eed5 7278 }
26d56a93 7279 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
7280 {
7281 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7282
7283 /* Make sure the stub doesn't forget to indicate support
7284 with qSupported. */
7285 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7286 error (_("Unexpected hwbreak stop reason"));
7287
7288 /* See above. */
8424cc97 7289 p = strchrnul (p1 + 1, ';');
f7e6eed5 7290 }
26d56a93 7291 else if (strprefix (p, p1, "library"))
cea39f65 7292 {
1f10ba14 7293 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 7294 p = strchrnul (p1 + 1, ';');
1f10ba14 7295 }
26d56a93 7296 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
7297 {
7298 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7299 /* p1 will indicate "begin" or "end", but it makes
7300 no difference for now, so ignore it. */
8424cc97 7301 p = strchrnul (p1 + 1, ';');
1f10ba14 7302 }
26d56a93 7303 else if (strprefix (p, p1, "core"))
1f10ba14
PA
7304 {
7305 ULONGEST c;
a744cf53 7306
1f10ba14
PA
7307 p = unpack_varlen_hex (++p1, &c);
7308 event->core = c;
cea39f65 7309 }
26d56a93 7310 else if (strprefix (p, p1, "fork"))
de0d863e
DB
7311 {
7312 event->ws.value.related_pid = read_ptid (++p1, &p);
7313 event->ws.kind = TARGET_WAITKIND_FORKED;
7314 }
26d56a93 7315 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
7316 {
7317 event->ws.value.related_pid = read_ptid (++p1, &p);
7318 event->ws.kind = TARGET_WAITKIND_VFORKED;
7319 }
26d56a93 7320 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
7321 {
7322 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 7323 p = strchrnul (p1 + 1, ';');
c269dbdb 7324 }
6ab24463 7325 else if (strprefix (p, p1, "exec"))
94585166
DB
7326 {
7327 ULONGEST ignored;
7328 char pathname[PATH_MAX];
7329 int pathlen;
7330
7331 /* Determine the length of the execd pathname. */
7332 p = unpack_varlen_hex (++p1, &ignored);
7333 pathlen = (p - p1) / 2;
7334
7335 /* Save the pathname for event reporting and for
7336 the next run command. */
7337 hex2bin (p1, (gdb_byte *) pathname, pathlen);
7338 pathname[pathlen] = '\0';
7339
7340 /* This is freed during event handling. */
7341 event->ws.value.execd_pathname = xstrdup (pathname);
7342 event->ws.kind = TARGET_WAITKIND_EXECD;
7343
7344 /* Skip the registers included in this packet, since
7345 they may be for an architecture different from the
7346 one used by the original program. */
7347 skipregs = 1;
7348 }
65706a29
PA
7349 else if (strprefix (p, p1, "create"))
7350 {
7351 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 7352 p = strchrnul (p1 + 1, ';');
65706a29 7353 }
cea39f65
MS
7354 else
7355 {
1f10ba14 7356 ULONGEST pnum;
256642e8 7357 const char *p_temp;
1f10ba14 7358
94585166
DB
7359 if (skipregs)
7360 {
8424cc97 7361 p = strchrnul (p1 + 1, ';');
94585166
DB
7362 p++;
7363 continue;
7364 }
7365
1f10ba14
PA
7366 /* Maybe a real ``P'' register number. */
7367 p_temp = unpack_varlen_hex (p, &pnum);
7368 /* If the first invalid character is the colon, we got a
7369 register number. Otherwise, it's an unknown stop
7370 reason. */
7371 if (p_temp == p1)
7372 {
5cd63fda
PA
7373 /* If we haven't parsed the event's thread yet, find
7374 it now, in order to find the architecture of the
7375 reported expedited registers. */
7376 if (event->ptid == null_ptid)
7377 {
7378 const char *thr = strstr (p1 + 1, ";thread:");
7379 if (thr != NULL)
7380 event->ptid = read_ptid (thr + strlen (";thread:"),
7381 NULL);
7382 else
3cada740
PA
7383 {
7384 /* Either the current thread hasn't changed,
7385 or the inferior is not multi-threaded.
7386 The event must be for the thread we last
7387 set as (or learned as being) current. */
7388 event->ptid = event->rs->general_thread;
7389 }
5cd63fda
PA
7390 }
7391
7392 if (rsa == NULL)
7393 {
7394 inferior *inf = (event->ptid == null_ptid
7395 ? NULL
7396 : find_inferior_ptid (event->ptid));
7397 /* If this is the first time we learn anything
7398 about this process, skip the registers
7399 included in this packet, since we don't yet
7400 know which architecture to use to parse them.
7401 We'll determine the architecture later when
7402 we process the stop reply and retrieve the
7403 target description, via
7404 remote_notice_new_inferior ->
7405 post_create_inferior. */
7406 if (inf == NULL)
7407 {
7408 p = strchrnul (p1 + 1, ';');
7409 p++;
7410 continue;
7411 }
7412
7413 event->arch = inf->gdbarch;
9d6eea31 7414 rsa = event->rs->get_remote_arch_state (event->arch);
5cd63fda
PA
7415 }
7416
7417 packet_reg *reg
7418 = packet_reg_from_pnum (event->arch, rsa, pnum);
1f10ba14 7419 cached_reg_t cached_reg;
43ff13b4 7420
1f10ba14
PA
7421 if (reg == NULL)
7422 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 7423Packet: '%s'\n"),
1f10ba14 7424 hex_string (pnum), p, buf);
c8e38a49 7425
1f10ba14 7426 cached_reg.num = reg->regnum;
d1dff226 7427 cached_reg.data = (gdb_byte *)
5cd63fda 7428 xmalloc (register_size (event->arch, reg->regnum));
4100683b 7429
1f10ba14
PA
7430 p = p1 + 1;
7431 fieldsize = hex2bin (p, cached_reg.data,
5cd63fda 7432 register_size (event->arch, reg->regnum));
1f10ba14 7433 p += 2 * fieldsize;
5cd63fda 7434 if (fieldsize < register_size (event->arch, reg->regnum))
1f10ba14 7435 warning (_("Remote reply is too short: %s"), buf);
74531fed 7436
1f10ba14
PA
7437 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7438 }
7439 else
7440 {
7441 /* Not a number. Silently skip unknown optional
7442 info. */
8424cc97 7443 p = strchrnul (p1 + 1, ';');
1f10ba14 7444 }
cea39f65 7445 }
c8e38a49 7446
cea39f65
MS
7447 if (*p != ';')
7448 error (_("Remote register badly formatted: %s\nhere: %s"),
7449 buf, p);
7450 ++p;
7451 }
5b5596ff
PA
7452
7453 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7454 break;
7455
c8e38a49
PA
7456 /* fall through */
7457 case 'S': /* Old style status, just signal only. */
3a09da41
PA
7458 {
7459 int sig;
7460
7461 event->ws.kind = TARGET_WAITKIND_STOPPED;
7462 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7463 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7464 event->ws.value.sig = (enum gdb_signal) sig;
7465 else
7466 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7467 }
c8e38a49 7468 break;
65706a29
PA
7469 case 'w': /* Thread exited. */
7470 {
256642e8 7471 const char *p;
65706a29
PA
7472 ULONGEST value;
7473
7474 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7475 p = unpack_varlen_hex (&buf[1], &value);
7476 event->ws.value.integer = value;
7477 if (*p != ';')
7478 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 7479 event->ptid = read_ptid (++p, NULL);
65706a29
PA
7480 break;
7481 }
c8e38a49
PA
7482 case 'W': /* Target exited. */
7483 case 'X':
7484 {
256642e8 7485 const char *p;
c8e38a49
PA
7486 int pid;
7487 ULONGEST value;
82f73884 7488
c8e38a49
PA
7489 /* GDB used to accept only 2 hex chars here. Stubs should
7490 only send more if they detect GDB supports multi-process
7491 support. */
7492 p = unpack_varlen_hex (&buf[1], &value);
82f73884 7493
c8e38a49
PA
7494 if (buf[0] == 'W')
7495 {
7496 /* The remote process exited. */
74531fed
PA
7497 event->ws.kind = TARGET_WAITKIND_EXITED;
7498 event->ws.value.integer = value;
c8e38a49
PA
7499 }
7500 else
7501 {
7502 /* The remote process exited with a signal. */
74531fed 7503 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
7504 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7505 event->ws.value.sig = (enum gdb_signal) value;
7506 else
7507 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 7508 }
82f73884 7509
c8e38a49 7510 /* If no process is specified, assume inferior_ptid. */
e99b03dc 7511 pid = inferior_ptid.pid ();
c8e38a49
PA
7512 if (*p == '\0')
7513 ;
7514 else if (*p == ';')
7515 {
7516 p++;
7517
0b24eb2d 7518 if (*p == '\0')
82f73884 7519 ;
61012eef 7520 else if (startswith (p, "process:"))
82f73884 7521 {
c8e38a49 7522 ULONGEST upid;
a744cf53 7523
c8e38a49
PA
7524 p += sizeof ("process:") - 1;
7525 unpack_varlen_hex (p, &upid);
7526 pid = upid;
82f73884
PA
7527 }
7528 else
7529 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 7530 }
c8e38a49
PA
7531 else
7532 error (_("unknown stop reply packet: %s"), buf);
f2907e49 7533 event->ptid = ptid_t (pid);
74531fed
PA
7534 }
7535 break;
f2faf941
PA
7536 case 'N':
7537 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7538 event->ptid = minus_one_ptid;
7539 break;
74531fed
PA
7540 }
7541
d7e15655 7542 if (target_is_non_stop_p () && event->ptid == null_ptid)
74531fed
PA
7543 error (_("No process or thread specified in stop reply: %s"), buf);
7544}
7545
722247f1
YQ
7546/* When the stub wants to tell GDB about a new notification reply, it
7547 sends a notification (%Stop, for example). Those can come it at
7548 any time, hence, we have to make sure that any pending
7549 putpkt/getpkt sequence we're making is finished, before querying
7550 the stub for more events with the corresponding ack command
7551 (vStopped, for example). E.g., if we started a vStopped sequence
7552 immediately upon receiving the notification, something like this
7553 could happen:
74531fed
PA
7554
7555 1.1) --> Hg 1
7556 1.2) <-- OK
7557 1.3) --> g
7558 1.4) <-- %Stop
7559 1.5) --> vStopped
7560 1.6) <-- (registers reply to step #1.3)
7561
7562 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7563 query.
7564
796cb314 7565 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
7566 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7567 doing whatever we were doing:
7568
7569 2.1) --> Hg 1
7570 2.2) <-- OK
7571 2.3) --> g
7572 2.4) <-- %Stop
7573 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7574 2.5) <-- (registers reply to step #2.3)
7575
7576 Eventualy after step #2.5, we return to the event loop, which
7577 notices there's an event on the
7578 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7579 associated callback --- the function below. At this point, we're
7580 always safe to start a vStopped sequence. :
7581
7582 2.6) --> vStopped
7583 2.7) <-- T05 thread:2
7584 2.8) --> vStopped
7585 2.9) --> OK
7586*/
7587
722247f1 7588void
6b8edb51 7589remote_target::remote_notif_get_pending_events (notif_client *nc)
74531fed
PA
7590{
7591 struct remote_state *rs = get_remote_state ();
74531fed 7592
f48ff2a7 7593 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 7594 {
722247f1
YQ
7595 if (notif_debug)
7596 fprintf_unfiltered (gdb_stdlog,
7597 "notif: process: '%s' ack pending event\n",
7598 nc->name);
74531fed 7599
722247f1 7600 /* acknowledge */
6b8edb51 7601 nc->ack (this, nc, rs->buf, rs->notif_state->pending_event[nc->id]);
f48ff2a7 7602 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
7603
7604 while (1)
7605 {
7606 getpkt (&rs->buf, &rs->buf_size, 0);
7607 if (strcmp (rs->buf, "OK") == 0)
7608 break;
7609 else
6b8edb51 7610 remote_notif_ack (this, nc, rs->buf);
74531fed
PA
7611 }
7612 }
722247f1
YQ
7613 else
7614 {
7615 if (notif_debug)
7616 fprintf_unfiltered (gdb_stdlog,
7617 "notif: process: '%s' no pending reply\n",
7618 nc->name);
7619 }
74531fed
PA
7620}
7621
6b8edb51
PA
7622/* Wrapper around remote_target::remote_notif_get_pending_events to
7623 avoid having to export the whole remote_target class. */
7624
7625void
7626remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7627{
7628 remote->remote_notif_get_pending_events (nc);
7629}
7630
74531fed
PA
7631/* Called when it is decided that STOP_REPLY holds the info of the
7632 event that is to be returned to the core. This function always
7633 destroys STOP_REPLY. */
7634
6b8edb51
PA
7635ptid_t
7636remote_target::process_stop_reply (struct stop_reply *stop_reply,
7637 struct target_waitstatus *status)
74531fed
PA
7638{
7639 ptid_t ptid;
7640
7641 *status = stop_reply->ws;
7642 ptid = stop_reply->ptid;
7643
7644 /* If no thread/process was reported by the stub, assume the current
7645 inferior. */
d7e15655 7646 if (ptid == null_ptid)
74531fed
PA
7647 ptid = inferior_ptid;
7648
5f3563ea 7649 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
7650 && status->kind != TARGET_WAITKIND_SIGNALLED
7651 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 7652 {
5f3563ea
PA
7653 /* Expedited registers. */
7654 if (stop_reply->regcache)
7655 {
217f1f79 7656 struct regcache *regcache
5cd63fda 7657 = get_thread_arch_regcache (ptid, stop_reply->arch);
5f3563ea
PA
7658 cached_reg_t *reg;
7659 int ix;
7660
7661 for (ix = 0;
d1dff226 7662 VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
5f3563ea 7663 ix++)
d1dff226 7664 {
73e1c03f 7665 regcache->raw_supply (reg->num, reg->data);
d1dff226
AH
7666 xfree (reg->data);
7667 }
7668
5f3563ea
PA
7669 VEC_free (cached_reg_t, stop_reply->regcache);
7670 }
74531fed 7671
1941c569 7672 remote_notice_new_inferior (ptid, 0);
7aabaf9d 7673 remote_thread_info *remote_thr = get_remote_thread_info (ptid);
799a2abe
PA
7674 remote_thr->core = stop_reply->core;
7675 remote_thr->stop_reason = stop_reply->stop_reason;
7676 remote_thr->watch_data_address = stop_reply->watch_data_address;
85ad3aaf 7677 remote_thr->vcont_resumed = 0;
74531fed
PA
7678 }
7679
74531fed
PA
7680 stop_reply_xfree (stop_reply);
7681 return ptid;
7682}
7683
7684/* The non-stop mode version of target_wait. */
7685
6b8edb51
PA
7686ptid_t
7687remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
7688{
7689 struct remote_state *rs = get_remote_state ();
74531fed
PA
7690 struct stop_reply *stop_reply;
7691 int ret;
fee9eda9 7692 int is_notif = 0;
74531fed
PA
7693
7694 /* If in non-stop mode, get out of getpkt even if a
7695 notification is received. */
7696
7697 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 7698 0 /* forever */, &is_notif);
74531fed
PA
7699 while (1)
7700 {
fee9eda9 7701 if (ret != -1 && !is_notif)
74531fed
PA
7702 switch (rs->buf[0])
7703 {
7704 case 'E': /* Error of some sort. */
7705 /* We're out of sync with the target now. Did it continue
7706 or not? We can't tell which thread it was in non-stop,
7707 so just ignore this. */
7708 warning (_("Remote failure reply: %s"), rs->buf);
7709 break;
7710 case 'O': /* Console output. */
7711 remote_console_output (rs->buf + 1);
7712 break;
7713 default:
7714 warning (_("Invalid remote reply: %s"), rs->buf);
7715 break;
7716 }
7717
7718 /* Acknowledge a pending stop reply that may have arrived in the
7719 mean time. */
f48ff2a7 7720 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 7721 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
7722
7723 /* If indeed we noticed a stop reply, we're done. */
7724 stop_reply = queued_stop_reply (ptid);
7725 if (stop_reply != NULL)
7726 return process_stop_reply (stop_reply, status);
7727
47608cb1 7728 /* Still no event. If we're just polling for an event, then
74531fed 7729 return to the event loop. */
47608cb1 7730 if (options & TARGET_WNOHANG)
74531fed
PA
7731 {
7732 status->kind = TARGET_WAITKIND_IGNORE;
7733 return minus_one_ptid;
7734 }
7735
47608cb1 7736 /* Otherwise do a blocking wait. */
74531fed 7737 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 7738 1 /* forever */, &is_notif);
74531fed
PA
7739 }
7740}
7741
7742/* Wait until the remote machine stops, then return, storing status in
7743 STATUS just as `wait' would. */
7744
6b8edb51
PA
7745ptid_t
7746remote_target::wait_as (ptid_t ptid, target_waitstatus *status, int options)
74531fed
PA
7747{
7748 struct remote_state *rs = get_remote_state ();
74531fed 7749 ptid_t event_ptid = null_ptid;
cea39f65 7750 char *buf;
74531fed
PA
7751 struct stop_reply *stop_reply;
7752
47608cb1
PA
7753 again:
7754
74531fed
PA
7755 status->kind = TARGET_WAITKIND_IGNORE;
7756 status->value.integer = 0;
7757
7758 stop_reply = queued_stop_reply (ptid);
7759 if (stop_reply != NULL)
7760 return process_stop_reply (stop_reply, status);
7761
7762 if (rs->cached_wait_status)
7763 /* Use the cached wait status, but only once. */
7764 rs->cached_wait_status = 0;
7765 else
7766 {
7767 int ret;
722247f1 7768 int is_notif;
567420d1 7769 int forever = ((options & TARGET_WNOHANG) == 0
6b8edb51 7770 && rs->wait_forever_enabled_p);
567420d1
PA
7771
7772 if (!rs->waiting_for_stop_reply)
7773 {
7774 status->kind = TARGET_WAITKIND_NO_RESUMED;
7775 return minus_one_ptid;
7776 }
74531fed 7777
74531fed
PA
7778 /* FIXME: cagney/1999-09-27: If we're in async mode we should
7779 _never_ wait for ever -> test on target_is_async_p().
7780 However, before we do that we need to ensure that the caller
7781 knows how to take the target into/out of async mode. */
722247f1 7782 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
567420d1 7783 forever, &is_notif);
722247f1
YQ
7784
7785 /* GDB gets a notification. Return to core as this event is
7786 not interesting. */
7787 if (ret != -1 && is_notif)
7788 return minus_one_ptid;
567420d1
PA
7789
7790 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7791 return minus_one_ptid;
74531fed
PA
7792 }
7793
7794 buf = rs->buf;
7795
3a29589a
DJ
7796 /* Assume that the target has acknowledged Ctrl-C unless we receive
7797 an 'F' or 'O' packet. */
7798 if (buf[0] != 'F' && buf[0] != 'O')
7799 rs->ctrlc_pending_p = 0;
7800
74531fed
PA
7801 switch (buf[0])
7802 {
7803 case 'E': /* Error of some sort. */
7804 /* We're out of sync with the target now. Did it continue or
7805 not? Not is more likely, so report a stop. */
29090fb6
LM
7806 rs->waiting_for_stop_reply = 0;
7807
74531fed
PA
7808 warning (_("Remote failure reply: %s"), buf);
7809 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 7810 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
7811 break;
7812 case 'F': /* File-I/O request. */
e42e5352
YQ
7813 /* GDB may access the inferior memory while handling the File-I/O
7814 request, but we don't want GDB accessing memory while waiting
7815 for a stop reply. See the comments in putpkt_binary. Set
7816 waiting_for_stop_reply to 0 temporarily. */
7817 rs->waiting_for_stop_reply = 0;
6b8edb51 7818 remote_fileio_request (this, buf, rs->ctrlc_pending_p);
3a29589a 7819 rs->ctrlc_pending_p = 0;
e42e5352
YQ
7820 /* GDB handled the File-I/O request, and the target is running
7821 again. Keep waiting for events. */
7822 rs->waiting_for_stop_reply = 1;
74531fed 7823 break;
f2faf941 7824 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 7825 {
29090fb6
LM
7826 struct stop_reply *stop_reply;
7827
7828 /* There is a stop reply to handle. */
7829 rs->waiting_for_stop_reply = 0;
7830
7831 stop_reply
6b8edb51
PA
7832 = (struct stop_reply *) remote_notif_parse (this,
7833 &notif_client_stop,
722247f1 7834 rs->buf);
74531fed 7835
74531fed 7836 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
7837 break;
7838 }
7839 case 'O': /* Console output. */
7840 remote_console_output (buf + 1);
c8e38a49
PA
7841 break;
7842 case '\0':
b73be471 7843 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
7844 {
7845 /* Zero length reply means that we tried 'S' or 'C' and the
7846 remote system doesn't support it. */
223ffa71 7847 target_terminal::ours_for_output ();
c8e38a49
PA
7848 printf_filtered
7849 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
7850 gdb_signal_to_name (rs->last_sent_signal));
7851 rs->last_sent_signal = GDB_SIGNAL_0;
223ffa71 7852 target_terminal::inferior ();
c8e38a49 7853
f5c4fcd9
TT
7854 strcpy (buf, rs->last_sent_step ? "s" : "c");
7855 putpkt (buf);
c8e38a49 7856 break;
43ff13b4 7857 }
86a73007 7858 /* fallthrough */
c8e38a49
PA
7859 default:
7860 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 7861 break;
43ff13b4 7862 }
c8e38a49 7863
f2faf941
PA
7864 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7865 return minus_one_ptid;
7866 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
7867 {
7868 /* Nothing interesting happened. If we're doing a non-blocking
7869 poll, we're done. Otherwise, go back to waiting. */
7870 if (options & TARGET_WNOHANG)
7871 return minus_one_ptid;
7872 else
7873 goto again;
7874 }
74531fed
PA
7875 else if (status->kind != TARGET_WAITKIND_EXITED
7876 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884 7877 {
d7e15655 7878 if (event_ptid != null_ptid)
47f8a51d 7879 record_currthread (rs, event_ptid);
82f73884
PA
7880 else
7881 event_ptid = inferior_ptid;
43ff13b4 7882 }
74531fed
PA
7883 else
7884 /* A process exit. Invalidate our notion of current thread. */
47f8a51d 7885 record_currthread (rs, minus_one_ptid);
79d7f229 7886
82f73884 7887 return event_ptid;
43ff13b4
JM
7888}
7889
74531fed
PA
7890/* Wait until the remote machine stops, then return, storing status in
7891 STATUS just as `wait' would. */
7892
f6ac5f3d
PA
7893ptid_t
7894remote_target::wait (ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
7895{
7896 ptid_t event_ptid;
7897
6efcd9a8 7898 if (target_is_non_stop_p ())
6b8edb51 7899 event_ptid = wait_ns (ptid, status, options);
74531fed 7900 else
6b8edb51 7901 event_ptid = wait_as (ptid, status, options);
c8e38a49 7902
d9d41e78 7903 if (target_is_async_p ())
c8e38a49 7904 {
6b8edb51
PA
7905 remote_state *rs = get_remote_state ();
7906
74531fed
PA
7907 /* If there are are events left in the queue tell the event loop
7908 to return here. */
953edf2b 7909 if (!rs->stop_reply_queue.empty ())
6b8edb51 7910 mark_async_event_handler (rs->remote_async_inferior_event_token);
c8e38a49 7911 }
c8e38a49
PA
7912
7913 return event_ptid;
7914}
7915
74ca34ce 7916/* Fetch a single register using a 'p' packet. */
c906108c 7917
6b8edb51
PA
7918int
7919remote_target::fetch_register_using_p (struct regcache *regcache,
7920 packet_reg *reg)
b96ec7ac 7921{
ac7936df 7922 struct gdbarch *gdbarch = regcache->arch ();
b96ec7ac 7923 struct remote_state *rs = get_remote_state ();
2e9f7625 7924 char *buf, *p;
9890e433 7925 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
b96ec7ac
AC
7926 int i;
7927
4082afcc 7928 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
7929 return 0;
7930
7931 if (reg->pnum == -1)
7932 return 0;
7933
2e9f7625 7934 p = rs->buf;
fcad0fa4 7935 *p++ = 'p';
74ca34ce 7936 p += hexnumstr (p, reg->pnum);
fcad0fa4 7937 *p++ = '\0';
1f4437a4
MS
7938 putpkt (rs->buf);
7939 getpkt (&rs->buf, &rs->buf_size, 0);
3f9a994c 7940
2e9f7625
DJ
7941 buf = rs->buf;
7942
74ca34ce
DJ
7943 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7944 {
7945 case PACKET_OK:
7946 break;
7947 case PACKET_UNKNOWN:
7948 return 0;
7949 case PACKET_ERROR:
27a9c0bf 7950 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
ac7936df 7951 gdbarch_register_name (regcache->arch (),
27a9c0bf
MS
7952 reg->regnum),
7953 buf);
74ca34ce 7954 }
3f9a994c
JB
7955
7956 /* If this register is unfetchable, tell the regcache. */
7957 if (buf[0] == 'x')
8480adf2 7958 {
73e1c03f 7959 regcache->raw_supply (reg->regnum, NULL);
8480adf2 7960 return 1;
b96ec7ac 7961 }
b96ec7ac 7962
3f9a994c
JB
7963 /* Otherwise, parse and supply the value. */
7964 p = buf;
7965 i = 0;
7966 while (p[0] != 0)
7967 {
7968 if (p[1] == 0)
74ca34ce 7969 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
7970
7971 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7972 p += 2;
7973 }
73e1c03f 7974 regcache->raw_supply (reg->regnum, regp);
3f9a994c 7975 return 1;
b96ec7ac
AC
7976}
7977
74ca34ce
DJ
7978/* Fetch the registers included in the target's 'g' packet. */
7979
6b8edb51
PA
7980int
7981remote_target::send_g_packet ()
c906108c 7982{
d01949b6 7983 struct remote_state *rs = get_remote_state ();
cea39f65 7984 int buf_len;
c906108c 7985
bba74b36 7986 xsnprintf (rs->buf, get_remote_packet_size (), "g");
b75abf5b
AK
7987 putpkt (rs->buf);
7988 getpkt (&rs->buf, &rs->buf_size, 0);
7989 if (packet_check_result (rs->buf) == PACKET_ERROR)
7990 error (_("Could not read registers; remote failure reply '%s'"),
7991 rs->buf);
c906108c 7992
29709017
DJ
7993 /* We can get out of synch in various cases. If the first character
7994 in the buffer is not a hex character, assume that has happened
7995 and try to fetch another packet to read. */
7996 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7997 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7998 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7999 && rs->buf[0] != 'x') /* New: unavailable register value. */
8000 {
8001 if (remote_debug)
8002 fprintf_unfiltered (gdb_stdlog,
8003 "Bad register packet; fetching a new packet\n");
8004 getpkt (&rs->buf, &rs->buf_size, 0);
8005 }
8006
74ca34ce
DJ
8007 buf_len = strlen (rs->buf);
8008
8009 /* Sanity check the received packet. */
8010 if (buf_len % 2 != 0)
8011 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
8012
8013 return buf_len / 2;
8014}
8015
6b8edb51
PA
8016void
8017remote_target::process_g_packet (struct regcache *regcache)
29709017 8018{
ac7936df 8019 struct gdbarch *gdbarch = regcache->arch ();
29709017 8020 struct remote_state *rs = get_remote_state ();
9d6eea31 8021 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
29709017
DJ
8022 int i, buf_len;
8023 char *p;
8024 char *regs;
8025
8026 buf_len = strlen (rs->buf);
8027
8028 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce 8029 if (buf_len > 2 * rsa->sizeof_g_packet)
fc809827
SM
8030 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8031 "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
74ca34ce
DJ
8032
8033 /* Save the size of the packet sent to us by the target. It is used
8034 as a heuristic when determining the max size of packets that the
8035 target can safely receive. */
8036 if (rsa->actual_register_packet_size == 0)
8037 rsa->actual_register_packet_size = buf_len;
8038
8039 /* If this is smaller than we guessed the 'g' packet would be,
8040 update our records. A 'g' reply that doesn't include a register's
8041 value implies either that the register is not available, or that
8042 the 'p' packet must be used. */
8043 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 8044 {
9dc193c3 8045 long sizeof_g_packet = buf_len / 2;
74ca34ce 8046
4a22f64d 8047 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 8048 {
9dc193c3
LF
8049 long offset = rsa->regs[i].offset;
8050 long reg_size = register_size (gdbarch, i);
8051
74ca34ce
DJ
8052 if (rsa->regs[i].pnum == -1)
8053 continue;
8054
9dc193c3 8055 if (offset >= sizeof_g_packet)
74ca34ce 8056 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
8057 else if (offset + reg_size > sizeof_g_packet)
8058 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 8059 else
74ca34ce 8060 rsa->regs[i].in_g_packet = 1;
b96ec7ac 8061 }
9dc193c3
LF
8062
8063 /* Looks valid enough, we can assume this is the correct length
8064 for a 'g' packet. It's important not to adjust
8065 rsa->sizeof_g_packet if we have truncated registers otherwise
8066 this "if" won't be run the next time the method is called
8067 with a packet of the same size and one of the internal errors
8068 below will trigger instead. */
8069 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 8070 }
b323314b 8071
224c3ddb 8072 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
8073
8074 /* Unimplemented registers read as all bits zero. */
ea9c271d 8075 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 8076
c906108c
SS
8077 /* Reply describes registers byte by byte, each byte encoded as two
8078 hex characters. Suck them all up, then supply them to the
8079 register cacheing/storage mechanism. */
8080
74ca34ce 8081 p = rs->buf;
ea9c271d 8082 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 8083 {
74ca34ce
DJ
8084 if (p[0] == 0 || p[1] == 0)
8085 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8086 internal_error (__FILE__, __LINE__,
9b20d036 8087 _("unexpected end of 'g' packet reply"));
74ca34ce 8088
c906108c 8089 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 8090 regs[i] = 0; /* 'x' */
c906108c
SS
8091 else
8092 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8093 p += 2;
8094 }
8095
a744cf53
MS
8096 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8097 {
8098 struct packet_reg *r = &rsa->regs[i];
9dc193c3 8099 long reg_size = register_size (gdbarch, i);
a744cf53
MS
8100
8101 if (r->in_g_packet)
8102 {
9dc193c3 8103 if ((r->offset + reg_size) * 2 > strlen (rs->buf))
a744cf53
MS
8104 /* This shouldn't happen - we adjusted in_g_packet above. */
8105 internal_error (__FILE__, __LINE__,
9b20d036 8106 _("unexpected end of 'g' packet reply"));
a744cf53
MS
8107 else if (rs->buf[r->offset * 2] == 'x')
8108 {
8109 gdb_assert (r->offset * 2 < strlen (rs->buf));
8110 /* The register isn't available, mark it as such (at
8111 the same time setting the value to zero). */
73e1c03f 8112 regcache->raw_supply (r->regnum, NULL);
a744cf53
MS
8113 }
8114 else
73e1c03f 8115 regcache->raw_supply (r->regnum, regs + r->offset);
a744cf53
MS
8116 }
8117 }
c906108c
SS
8118}
8119
6b8edb51
PA
8120void
8121remote_target::fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
8122{
8123 send_g_packet ();
56be3814 8124 process_g_packet (regcache);
29709017
DJ
8125}
8126
e6e4e701
PA
8127/* Make the remote selected traceframe match GDB's selected
8128 traceframe. */
8129
6b8edb51
PA
8130void
8131remote_target::set_remote_traceframe ()
e6e4e701
PA
8132{
8133 int newnum;
262e1174 8134 struct remote_state *rs = get_remote_state ();
e6e4e701 8135
262e1174 8136 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
8137 return;
8138
8139 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 8140 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
8141
8142 newnum = target_trace_find (tfind_number,
8143 get_traceframe_number (), 0, 0, NULL);
8144
8145 /* Should not happen. If it does, all bets are off. */
8146 if (newnum != get_traceframe_number ())
8147 warning (_("could not set remote traceframe"));
8148}
8149
f6ac5f3d
PA
8150void
8151remote_target::fetch_registers (struct regcache *regcache, int regnum)
74ca34ce 8152{
ac7936df 8153 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8154 struct remote_state *rs = get_remote_state ();
8155 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8156 int i;
8157
e6e4e701 8158 set_remote_traceframe ();
222312d3 8159 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8160
8161 if (regnum >= 0)
8162 {
5cd63fda 8163 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8164
74ca34ce
DJ
8165 gdb_assert (reg != NULL);
8166
8167 /* If this register might be in the 'g' packet, try that first -
8168 we are likely to read more than one register. If this is the
8169 first 'g' packet, we might be overly optimistic about its
8170 contents, so fall back to 'p'. */
8171 if (reg->in_g_packet)
8172 {
56be3814 8173 fetch_registers_using_g (regcache);
74ca34ce
DJ
8174 if (reg->in_g_packet)
8175 return;
8176 }
8177
56be3814 8178 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
8179 return;
8180
8181 /* This register is not available. */
73e1c03f 8182 regcache->raw_supply (reg->regnum, NULL);
74ca34ce
DJ
8183
8184 return;
8185 }
8186
56be3814 8187 fetch_registers_using_g (regcache);
74ca34ce 8188
5cd63fda 8189 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8190 if (!rsa->regs[i].in_g_packet)
56be3814 8191 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
8192 {
8193 /* This register is not available. */
73e1c03f 8194 regcache->raw_supply (i, NULL);
74ca34ce
DJ
8195 }
8196}
8197
c906108c
SS
8198/* Prepare to store registers. Since we may send them all (using a
8199 'G' request), we have to read out the ones we don't want to change
8200 first. */
8201
f6ac5f3d
PA
8202void
8203remote_target::prepare_to_store (struct regcache *regcache)
c906108c 8204{
9d6eea31
PA
8205 struct remote_state *rs = get_remote_state ();
8206 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cf0e1e0d 8207 int i;
cf0e1e0d 8208
c906108c 8209 /* Make sure the entire registers array is valid. */
4082afcc 8210 switch (packet_support (PACKET_P))
5a2468f5
JM
8211 {
8212 case PACKET_DISABLE:
8213 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 8214 /* Make sure all the necessary registers are cached. */
ac7936df 8215 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
ea9c271d 8216 if (rsa->regs[i].in_g_packet)
0b47d985 8217 regcache->raw_update (rsa->regs[i].regnum);
5a2468f5
JM
8218 break;
8219 case PACKET_ENABLE:
8220 break;
8221 }
8222}
8223
ad10f812 8224/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 8225 packet was not recognized. */
5a2468f5 8226
6b8edb51
PA
8227int
8228remote_target::store_register_using_P (const struct regcache *regcache,
8229 packet_reg *reg)
5a2468f5 8230{
ac7936df 8231 struct gdbarch *gdbarch = regcache->arch ();
d01949b6 8232 struct remote_state *rs = get_remote_state ();
5a2468f5 8233 /* Try storing a single register. */
6d820c5c 8234 char *buf = rs->buf;
9890e433 8235 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 8236 char *p;
5a2468f5 8237
4082afcc 8238 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
8239 return 0;
8240
8241 if (reg->pnum == -1)
8242 return 0;
8243
ea9c271d 8244 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 8245 p = buf + strlen (buf);
34a79281 8246 regcache->raw_collect (reg->regnum, regp);
4a22f64d 8247 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4
MS
8248 putpkt (rs->buf);
8249 getpkt (&rs->buf, &rs->buf_size, 0);
5a2468f5 8250
74ca34ce
DJ
8251 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8252 {
8253 case PACKET_OK:
8254 return 1;
8255 case PACKET_ERROR:
27a9c0bf
MS
8256 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8257 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
74ca34ce
DJ
8258 case PACKET_UNKNOWN:
8259 return 0;
8260 default:
8261 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8262 }
c906108c
SS
8263}
8264
23860348
MS
8265/* Store register REGNUM, or all registers if REGNUM == -1, from the
8266 contents of the register cache buffer. FIXME: ignores errors. */
c906108c 8267
6b8edb51
PA
8268void
8269remote_target::store_registers_using_G (const struct regcache *regcache)
c906108c 8270{
d01949b6 8271 struct remote_state *rs = get_remote_state ();
9d6eea31 8272 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
cfd77fa1 8273 gdb_byte *regs;
c906108c
SS
8274 char *p;
8275
193cb69f
AC
8276 /* Extract all the registers in the regcache copying them into a
8277 local buffer. */
8278 {
b323314b 8279 int i;
a744cf53 8280
224c3ddb 8281 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 8282 memset (regs, 0, rsa->sizeof_g_packet);
ac7936df 8283 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
193cb69f 8284 {
ea9c271d 8285 struct packet_reg *r = &rsa->regs[i];
a744cf53 8286
b323314b 8287 if (r->in_g_packet)
34a79281 8288 regcache->raw_collect (r->regnum, regs + r->offset);
193cb69f
AC
8289 }
8290 }
c906108c
SS
8291
8292 /* Command describes registers byte by byte,
8293 each byte encoded as two hex characters. */
6d820c5c 8294 p = rs->buf;
193cb69f 8295 *p++ = 'G';
74ca34ce 8296 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4
MS
8297 putpkt (rs->buf);
8298 getpkt (&rs->buf, &rs->buf_size, 0);
8299 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf
MS
8300 error (_("Could not write registers; remote failure reply '%s'"),
8301 rs->buf);
c906108c 8302}
74ca34ce
DJ
8303
8304/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8305 of the register cache buffer. FIXME: ignores errors. */
8306
f6ac5f3d
PA
8307void
8308remote_target::store_registers (struct regcache *regcache, int regnum)
74ca34ce 8309{
5cd63fda 8310 struct gdbarch *gdbarch = regcache->arch ();
9d6eea31
PA
8311 struct remote_state *rs = get_remote_state ();
8312 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
74ca34ce
DJ
8313 int i;
8314
e6e4e701 8315 set_remote_traceframe ();
222312d3 8316 set_general_thread (regcache->ptid ());
74ca34ce
DJ
8317
8318 if (regnum >= 0)
8319 {
5cd63fda 8320 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
a744cf53 8321
74ca34ce
DJ
8322 gdb_assert (reg != NULL);
8323
8324 /* Always prefer to store registers using the 'P' packet if
8325 possible; we often change only a small number of registers.
8326 Sometimes we change a larger number; we'd need help from a
8327 higher layer to know to use 'G'. */
56be3814 8328 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
8329 return;
8330
8331 /* For now, don't complain if we have no way to write the
8332 register. GDB loses track of unavailable registers too
8333 easily. Some day, this may be an error. We don't have
0df8b418 8334 any way to read the register, either... */
74ca34ce
DJ
8335 if (!reg->in_g_packet)
8336 return;
8337
56be3814 8338 store_registers_using_G (regcache);
74ca34ce
DJ
8339 return;
8340 }
8341
56be3814 8342 store_registers_using_G (regcache);
74ca34ce 8343
5cd63fda 8344 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
74ca34ce 8345 if (!rsa->regs[i].in_g_packet)
56be3814 8346 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
8347 /* See above for why we do not issue an error here. */
8348 continue;
8349}
c906108c
SS
8350\f
8351
8352/* Return the number of hex digits in num. */
8353
8354static int
fba45db2 8355hexnumlen (ULONGEST num)
c906108c
SS
8356{
8357 int i;
8358
8359 for (i = 0; num != 0; i++)
8360 num >>= 4;
8361
325fac50 8362 return std::max (i, 1);
c906108c
SS
8363}
8364
2df3850c 8365/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
8366
8367static int
fba45db2 8368hexnumstr (char *buf, ULONGEST num)
c906108c 8369{
c906108c 8370 int len = hexnumlen (num);
a744cf53 8371
2df3850c
JM
8372 return hexnumnstr (buf, num, len);
8373}
8374
c906108c 8375
2df3850c 8376/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 8377
2df3850c 8378static int
fba45db2 8379hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
8380{
8381 int i;
8382
8383 buf[width] = '\0';
8384
8385 for (i = width - 1; i >= 0; i--)
c906108c 8386 {
c5aa993b 8387 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
8388 num >>= 4;
8389 }
8390
2df3850c 8391 return width;
c906108c
SS
8392}
8393
23860348 8394/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
8395
8396static CORE_ADDR
fba45db2 8397remote_address_masked (CORE_ADDR addr)
c906108c 8398{
883b9c6c 8399 unsigned int address_size = remote_address_size;
a744cf53 8400
911c95a5
UW
8401 /* If "remoteaddresssize" was not set, default to target address size. */
8402 if (!address_size)
f5656ead 8403 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
8404
8405 if (address_size > 0
8406 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
8407 {
8408 /* Only create a mask when that mask can safely be constructed
23860348 8409 in a ULONGEST variable. */
c906108c 8410 ULONGEST mask = 1;
a744cf53 8411
911c95a5 8412 mask = (mask << address_size) - 1;
c906108c
SS
8413 addr &= mask;
8414 }
8415 return addr;
8416}
8417
8418/* Determine whether the remote target supports binary downloading.
8419 This is accomplished by sending a no-op memory write of zero length
8420 to the target at the specified address. It does not suffice to send
23860348
MS
8421 the whole packet, since many stubs strip the eighth bit and
8422 subsequently compute a wrong checksum, which causes real havoc with
8423 remote_write_bytes.
7a292a7a 8424
96baa820 8425 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 8426 clean. In cases like this, the user should clear "remote
23860348 8427 X-packet". */
96baa820 8428
6b8edb51
PA
8429void
8430remote_target::check_binary_download (CORE_ADDR addr)
c906108c 8431{
d01949b6 8432 struct remote_state *rs = get_remote_state ();
24b06219 8433
4082afcc 8434 switch (packet_support (PACKET_X))
c906108c 8435 {
96baa820
JM
8436 case PACKET_DISABLE:
8437 break;
8438 case PACKET_ENABLE:
8439 break;
8440 case PACKET_SUPPORT_UNKNOWN:
8441 {
96baa820 8442 char *p;
802188a7 8443
2e9f7625 8444 p = rs->buf;
96baa820
JM
8445 *p++ = 'X';
8446 p += hexnumstr (p, (ULONGEST) addr);
8447 *p++ = ',';
8448 p += hexnumstr (p, (ULONGEST) 0);
8449 *p++ = ':';
8450 *p = '\0';
802188a7 8451
2e9f7625 8452 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8453 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 8454
2e9f7625 8455 if (rs->buf[0] == '\0')
96baa820
JM
8456 {
8457 if (remote_debug)
8458 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8459 "binary downloading NOT "
8460 "supported by target\n");
444abaca 8461 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8462 }
8463 else
8464 {
8465 if (remote_debug)
8466 fprintf_unfiltered (gdb_stdlog,
64b9b334 8467 "binary downloading supported by target\n");
444abaca 8468 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8469 }
8470 break;
8471 }
c906108c
SS
8472 }
8473}
8474
124e13d9
SM
8475/* Helper function to resize the payload in order to try to get a good
8476 alignment. We try to write an amount of data such that the next write will
8477 start on an address aligned on REMOTE_ALIGN_WRITES. */
8478
8479static int
8480align_for_efficient_write (int todo, CORE_ADDR memaddr)
8481{
8482 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8483}
8484
c906108c
SS
8485/* Write memory data directly to the remote machine.
8486 This does not inform the data cache; the data cache uses this.
a76d924d 8487 HEADER is the starting part of the packet.
c906108c
SS
8488 MEMADDR is the address in the remote memory space.
8489 MYADDR is the address of the buffer in our space.
124e13d9
SM
8490 LEN_UNITS is the number of addressable units to write.
8491 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8492 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8493 should send data as binary ('X'), or hex-encoded ('M').
8494
8495 The function creates packet of the form
8496 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8497
124e13d9 8498 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8499
8500 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8501 are omitted.
8502
9b409511 8503 Return the transferred status, error or OK (an
124e13d9
SM
8504 'enum target_xfer_status' value). Save the number of addressable units
8505 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8506
8507 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8508 exchange between gdb and the stub could look like (?? in place of the
8509 checksum):
8510
8511 -> $m1000,4#??
8512 <- aaaabbbbccccdddd
8513
8514 -> $M1000,3:eeeeffffeeee#??
8515 <- OK
8516
8517 -> $m1000,4#??
8518 <- eeeeffffeeeedddd */
c906108c 8519
6b8edb51
PA
8520target_xfer_status
8521remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8522 const gdb_byte *myaddr,
8523 ULONGEST len_units,
8524 int unit_size,
8525 ULONGEST *xfered_len_units,
8526 char packet_format, int use_length)
c906108c 8527{
6d820c5c 8528 struct remote_state *rs = get_remote_state ();
cfd77fa1 8529 char *p;
a76d924d
DJ
8530 char *plen = NULL;
8531 int plenlen = 0;
124e13d9
SM
8532 int todo_units;
8533 int units_written;
8534 int payload_capacity_bytes;
8535 int payload_length_bytes;
a76d924d
DJ
8536
8537 if (packet_format != 'X' && packet_format != 'M')
8538 internal_error (__FILE__, __LINE__,
9b20d036 8539 _("remote_write_bytes_aux: bad packet format"));
c906108c 8540
124e13d9 8541 if (len_units == 0)
9b409511 8542 return TARGET_XFER_EOF;
b2182ed2 8543
124e13d9 8544 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8545
6d820c5c
DJ
8546 /* The packet buffer will be large enough for the payload;
8547 get_memory_packet_size ensures this. */
a76d924d 8548 rs->buf[0] = '\0';
c906108c 8549
a257b5bb 8550 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8551 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8552
124e13d9 8553 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8554 if (!use_length)
0df8b418 8555 /* The comma won't be used. */
124e13d9
SM
8556 payload_capacity_bytes += 1;
8557 payload_capacity_bytes -= strlen (header);
8558 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8559
a76d924d 8560 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8561
a76d924d
DJ
8562 strcat (rs->buf, header);
8563 p = rs->buf + strlen (header);
8564
8565 /* Compute a best guess of the number of bytes actually transfered. */
8566 if (packet_format == 'X')
c906108c 8567 {
23860348 8568 /* Best guess at number of bytes that will fit. */
325fac50
PA
8569 todo_units = std::min (len_units,
8570 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8571 if (use_length)
124e13d9 8572 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8573 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8574 }
8575 else
8576 {
124e13d9 8577 /* Number of bytes that will fit. */
325fac50
PA
8578 todo_units
8579 = std::min (len_units,
8580 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8581 if (use_length)
124e13d9 8582 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8583 todo_units = std::min (todo_units,
8584 (payload_capacity_bytes / unit_size) / 2);
917317f4 8585 }
a76d924d 8586
124e13d9 8587 if (todo_units <= 0)
3de11b2e 8588 internal_error (__FILE__, __LINE__,
405f8e94 8589 _("minimum packet size too small to write data"));
802188a7 8590
6765f3e5
DJ
8591 /* If we already need another packet, then try to align the end
8592 of this packet to a useful boundary. */
124e13d9
SM
8593 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8594 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8595
a257b5bb 8596 /* Append "<memaddr>". */
917317f4
JM
8597 memaddr = remote_address_masked (memaddr);
8598 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8599
a76d924d
DJ
8600 if (use_length)
8601 {
8602 /* Append ",". */
8603 *p++ = ',';
802188a7 8604
124e13d9
SM
8605 /* Append the length and retain its location and size. It may need to be
8606 adjusted once the packet body has been created. */
a76d924d 8607 plen = p;
124e13d9 8608 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8609 p += plenlen;
8610 }
a257b5bb
AC
8611
8612 /* Append ":". */
917317f4
JM
8613 *p++ = ':';
8614 *p = '\0';
802188a7 8615
a257b5bb 8616 /* Append the packet body. */
a76d924d 8617 if (packet_format == 'X')
917317f4 8618 {
917317f4
JM
8619 /* Binary mode. Send target system values byte by byte, in
8620 increasing byte addresses. Only escape certain critical
8621 characters. */
124e13d9
SM
8622 payload_length_bytes =
8623 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8624 &units_written, payload_capacity_bytes);
6765f3e5 8625
124e13d9 8626 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8627 a second try to keep the end of the packet aligned. Don't do
8628 this if the packet is tiny. */
124e13d9 8629 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8630 {
124e13d9
SM
8631 int new_todo_units;
8632
8633 new_todo_units = align_for_efficient_write (units_written, memaddr);
8634
8635 if (new_todo_units != units_written)
8636 payload_length_bytes =
8637 remote_escape_output (myaddr, new_todo_units, unit_size,
8638 (gdb_byte *) p, &units_written,
8639 payload_capacity_bytes);
6765f3e5
DJ
8640 }
8641
124e13d9
SM
8642 p += payload_length_bytes;
8643 if (use_length && units_written < todo_units)
c906108c 8644 {
802188a7 8645 /* Escape chars have filled up the buffer prematurely,
124e13d9 8646 and we have actually sent fewer units than planned.
917317f4
JM
8647 Fix-up the length field of the packet. Use the same
8648 number of characters as before. */
124e13d9
SM
8649 plen += hexnumnstr (plen, (ULONGEST) units_written,
8650 plenlen);
917317f4 8651 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8652 }
a76d924d
DJ
8653 }
8654 else
8655 {
917317f4
JM
8656 /* Normal mode: Send target system values byte by byte, in
8657 increasing byte addresses. Each byte is encoded as a two hex
8658 value. */
124e13d9
SM
8659 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8660 units_written = todo_units;
c906108c 8661 }
802188a7 8662
2e9f7625 8663 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8664 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 8665
2e9f7625 8666 if (rs->buf[0] == 'E')
00d84524 8667 return TARGET_XFER_E_IO;
802188a7 8668
124e13d9
SM
8669 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8670 send fewer units than we'd planned. */
8671 *xfered_len_units = (ULONGEST) units_written;
92ffd475 8672 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
8673}
8674
a76d924d
DJ
8675/* Write memory data directly to the remote machine.
8676 This does not inform the data cache; the data cache uses this.
8677 MEMADDR is the address in the remote memory space.
8678 MYADDR is the address of the buffer in our space.
8679 LEN is the number of bytes.
8680
9b409511
YQ
8681 Return the transferred status, error or OK (an
8682 'enum target_xfer_status' value). Save the number of bytes
8683 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8684
6b8edb51
PA
8685target_xfer_status
8686remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8687 ULONGEST len, int unit_size,
8688 ULONGEST *xfered_len)
a76d924d 8689{
a121b7c1 8690 const char *packet_format = NULL;
a76d924d
DJ
8691
8692 /* Check whether the target supports binary download. */
8693 check_binary_download (memaddr);
8694
4082afcc 8695 switch (packet_support (PACKET_X))
a76d924d
DJ
8696 {
8697 case PACKET_ENABLE:
8698 packet_format = "X";
8699 break;
8700 case PACKET_DISABLE:
8701 packet_format = "M";
8702 break;
8703 case PACKET_SUPPORT_UNKNOWN:
8704 internal_error (__FILE__, __LINE__,
8705 _("remote_write_bytes: bad internal state"));
8706 default:
8707 internal_error (__FILE__, __LINE__, _("bad switch"));
8708 }
8709
8710 return remote_write_bytes_aux (packet_format,
124e13d9 8711 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8712 packet_format[0], 1);
a76d924d
DJ
8713}
8714
9217e74e
YQ
8715/* Read memory data directly from the remote machine.
8716 This does not use the data cache; the data cache uses this.
8717 MEMADDR is the address in the remote memory space.
8718 MYADDR is the address of the buffer in our space.
124e13d9
SM
8719 LEN_UNITS is the number of addressable memory units to read..
8720 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8721
8722 Return the transferred status, error or OK (an
8723 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8724 transferred in *XFERED_LEN_UNITS.
8725
8726 See the comment of remote_write_bytes_aux for an example of
8727 memory read/write exchange between gdb and the stub. */
9217e74e 8728
6b8edb51
PA
8729target_xfer_status
8730remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8731 ULONGEST len_units,
8732 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
8733{
8734 struct remote_state *rs = get_remote_state ();
124e13d9 8735 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 8736 char *p;
124e13d9
SM
8737 int todo_units;
8738 int decoded_bytes;
9217e74e 8739
124e13d9 8740 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
8741 /* The packet buffer will be large enough for the payload;
8742 get_memory_packet_size ensures this. */
8743
124e13d9 8744 /* Number of units that will fit. */
325fac50
PA
8745 todo_units = std::min (len_units,
8746 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
8747
8748 /* Construct "m"<memaddr>","<len>". */
8749 memaddr = remote_address_masked (memaddr);
8750 p = rs->buf;
8751 *p++ = 'm';
8752 p += hexnumstr (p, (ULONGEST) memaddr);
8753 *p++ = ',';
124e13d9 8754 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
8755 *p = '\0';
8756 putpkt (rs->buf);
8757 getpkt (&rs->buf, &rs->buf_size, 0);
8758 if (rs->buf[0] == 'E'
8759 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8760 && rs->buf[3] == '\0')
8761 return TARGET_XFER_E_IO;
8762 /* Reply describes memory byte by byte, each byte encoded as two hex
8763 characters. */
8764 p = rs->buf;
124e13d9 8765 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 8766 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 8767 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
92ffd475 8768 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
9217e74e
YQ
8769}
8770
b55fbac4
YQ
8771/* Using the set of read-only target sections of remote, read live
8772 read-only memory.
8acf9577
YQ
8773
8774 For interface/parameters/return description see target.h,
8775 to_xfer_partial. */
8776
6b8edb51
PA
8777target_xfer_status
8778remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
8779 ULONGEST memaddr,
8780 ULONGEST len,
8781 int unit_size,
8782 ULONGEST *xfered_len)
8acf9577
YQ
8783{
8784 struct target_section *secp;
8785 struct target_section_table *table;
8786
6b8edb51 8787 secp = target_section_by_addr (this, memaddr);
8acf9577
YQ
8788 if (secp != NULL
8789 && (bfd_get_section_flags (secp->the_bfd_section->owner,
8790 secp->the_bfd_section)
8791 & SEC_READONLY))
8792 {
8793 struct target_section *p;
8794 ULONGEST memend = memaddr + len;
8795
6b8edb51 8796 table = target_get_section_table (this);
8acf9577
YQ
8797
8798 for (p = table->sections; p < table->sections_end; p++)
8799 {
8800 if (memaddr >= p->addr)
8801 {
8802 if (memend <= p->endaddr)
8803 {
8804 /* Entire transfer is within this section. */
124e13d9 8805 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8806 xfered_len);
8acf9577
YQ
8807 }
8808 else if (memaddr >= p->endaddr)
8809 {
8810 /* This section ends before the transfer starts. */
8811 continue;
8812 }
8813 else
8814 {
8815 /* This section overlaps the transfer. Just do half. */
8816 len = p->endaddr - memaddr;
124e13d9 8817 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8818 xfered_len);
8acf9577
YQ
8819 }
8820 }
8821 }
8822 }
8823
8824 return TARGET_XFER_EOF;
8825}
8826
9217e74e
YQ
8827/* Similar to remote_read_bytes_1, but it reads from the remote stub
8828 first if the requested memory is unavailable in traceframe.
8829 Otherwise, fall back to remote_read_bytes_1. */
c906108c 8830
6b8edb51
PA
8831target_xfer_status
8832remote_target::remote_read_bytes (CORE_ADDR memaddr,
8833 gdb_byte *myaddr, ULONGEST len, int unit_size,
8834 ULONGEST *xfered_len)
c906108c 8835{
6b6aa828 8836 if (len == 0)
96c4f946 8837 return TARGET_XFER_EOF;
b2182ed2 8838
8acf9577
YQ
8839 if (get_traceframe_number () != -1)
8840 {
a79b1bc6 8841 std::vector<mem_range> available;
8acf9577
YQ
8842
8843 /* If we fail to get the set of available memory, then the
8844 target does not support querying traceframe info, and so we
8845 attempt reading from the traceframe anyway (assuming the
8846 target implements the old QTro packet then). */
8847 if (traceframe_available_memory (&available, memaddr, len))
8848 {
a79b1bc6 8849 if (available.empty () || available[0].start != memaddr)
8acf9577
YQ
8850 {
8851 enum target_xfer_status res;
8852
8853 /* Don't read into the traceframe's available
8854 memory. */
a79b1bc6 8855 if (!available.empty ())
8acf9577
YQ
8856 {
8857 LONGEST oldlen = len;
8858
a79b1bc6 8859 len = available[0].start - memaddr;
8acf9577
YQ
8860 gdb_assert (len <= oldlen);
8861 }
8862
8acf9577 8863 /* This goes through the topmost target again. */
6b8edb51 8864 res = remote_xfer_live_readonly_partial (myaddr, memaddr,
124e13d9 8865 len, unit_size, xfered_len);
8acf9577
YQ
8866 if (res == TARGET_XFER_OK)
8867 return TARGET_XFER_OK;
8868 else
8869 {
8870 /* No use trying further, we know some memory starting
8871 at MEMADDR isn't available. */
8872 *xfered_len = len;
92ffd475
PC
8873 return (*xfered_len != 0) ?
8874 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8acf9577
YQ
8875 }
8876 }
8877
8878 /* Don't try to read more than how much is available, in
8879 case the target implements the deprecated QTro packet to
8880 cater for older GDBs (the target's knowledge of read-only
8881 sections may be outdated by now). */
a79b1bc6 8882 len = available[0].length;
8acf9577
YQ
8883 }
8884 }
8885
124e13d9 8886 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 8887}
74531fed 8888
c906108c 8889\f
c906108c 8890
a76d924d
DJ
8891/* Sends a packet with content determined by the printf format string
8892 FORMAT and the remaining arguments, then gets the reply. Returns
8893 whether the packet was a success, a failure, or unknown. */
8894
6b8edb51
PA
8895packet_result
8896remote_target::remote_send_printf (const char *format, ...)
a76d924d
DJ
8897{
8898 struct remote_state *rs = get_remote_state ();
8899 int max_size = get_remote_packet_size ();
a76d924d 8900 va_list ap;
a744cf53 8901
a76d924d
DJ
8902 va_start (ap, format);
8903
8904 rs->buf[0] = '\0';
8905 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9b20d036 8906 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
8907
8908 if (putpkt (rs->buf) < 0)
8909 error (_("Communication problem with target."));
8910
8911 rs->buf[0] = '\0';
8912 getpkt (&rs->buf, &rs->buf_size, 0);
8913
8914 return packet_check_result (rs->buf);
8915}
8916
a76d924d
DJ
8917/* Flash writing can take quite some time. We'll set
8918 effectively infinite timeout for flash operations.
8919 In future, we'll need to decide on a better approach. */
8920static const int remote_flash_timeout = 1000;
8921
f6ac5f3d
PA
8922void
8923remote_target::flash_erase (ULONGEST address, LONGEST length)
a76d924d 8924{
f5656ead 8925 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d 8926 enum packet_result ret;
2ec845e7
TT
8927 scoped_restore restore_timeout
8928 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
a76d924d
DJ
8929
8930 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 8931 phex (address, addr_size),
a76d924d
DJ
8932 phex (length, 4));
8933 switch (ret)
8934 {
8935 case PACKET_UNKNOWN:
8936 error (_("Remote target does not support flash erase"));
8937 case PACKET_ERROR:
8938 error (_("Error erasing flash with vFlashErase packet"));
8939 default:
8940 break;
8941 }
a76d924d
DJ
8942}
8943
6b8edb51
PA
8944target_xfer_status
8945remote_target::remote_flash_write (ULONGEST address,
8946 ULONGEST length, ULONGEST *xfered_len,
8947 const gdb_byte *data)
a76d924d 8948{
2ec845e7
TT
8949 scoped_restore restore_timeout
8950 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8951 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8952 xfered_len,'X', 0);
a76d924d
DJ
8953}
8954
f6ac5f3d
PA
8955void
8956remote_target::flash_done ()
a76d924d 8957{
a76d924d 8958 int ret;
a76d924d 8959
2ec845e7
TT
8960 scoped_restore restore_timeout
8961 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8962
a76d924d 8963 ret = remote_send_printf ("vFlashDone");
a76d924d
DJ
8964
8965 switch (ret)
8966 {
8967 case PACKET_UNKNOWN:
8968 error (_("Remote target does not support vFlashDone"));
8969 case PACKET_ERROR:
8970 error (_("Error finishing flash operation"));
8971 default:
8972 break;
8973 }
8974}
8975
f6ac5f3d
PA
8976void
8977remote_target::files_info ()
c906108c
SS
8978{
8979 puts_filtered ("Debugging a target over a serial line.\n");
8980}
8981\f
8982/* Stuff for dealing with the packets which are part of this protocol.
8983 See comment at top of file for details. */
8984
1927e618
PA
8985/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8986 error to higher layers. Called when a serial error is detected.
8987 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
8988 the system error message for errno at function entry and final dot
8989 for output compatibility with throw_perror_with_name. */
1927e618
PA
8990
8991static void
8992unpush_and_perror (const char *string)
8993{
d6cb50a2 8994 int saved_errno = errno;
1927e618
PA
8995
8996 remote_unpush_target ();
d6cb50a2
JK
8997 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8998 safe_strerror (saved_errno));
1927e618
PA
8999}
9000
048094ac
PA
9001/* Read a single character from the remote end. The current quit
9002 handler is overridden to avoid quitting in the middle of packet
9003 sequence, as that would break communication with the remote server.
9004 See remote_serial_quit_handler for more detail. */
c906108c 9005
6b8edb51
PA
9006int
9007remote_target::readchar (int timeout)
c906108c
SS
9008{
9009 int ch;
5d93a237 9010 struct remote_state *rs = get_remote_state ();
048094ac 9011
2ec845e7 9012 {
6b8edb51
PA
9013 scoped_restore restore_quit_target
9014 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9015 scoped_restore restore_quit
6b8edb51 9016 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
c906108c 9017
2ec845e7 9018 rs->got_ctrlc_during_io = 0;
c906108c 9019
2ec845e7 9020 ch = serial_readchar (rs->remote_desc, timeout);
048094ac 9021
2ec845e7
TT
9022 if (rs->got_ctrlc_during_io)
9023 set_quit_flag ();
9024 }
048094ac 9025
2acceee2 9026 if (ch >= 0)
0876f84a 9027 return ch;
2acceee2
JM
9028
9029 switch ((enum serial_rc) ch)
c906108c
SS
9030 {
9031 case SERIAL_EOF:
78a095c3 9032 remote_unpush_target ();
598d3636 9033 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 9034 /* no return */
c906108c 9035 case SERIAL_ERROR:
1927e618
PA
9036 unpush_and_perror (_("Remote communication error. "
9037 "Target disconnected."));
2acceee2 9038 /* no return */
c906108c 9039 case SERIAL_TIMEOUT:
2acceee2 9040 break;
c906108c 9041 }
2acceee2 9042 return ch;
c906108c
SS
9043}
9044
c33e31fd 9045/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
9046 writing fails. The current quit handler is overridden to avoid
9047 quitting in the middle of packet sequence, as that would break
9048 communication with the remote server. See
9049 remote_serial_quit_handler for more detail. */
c33e31fd 9050
6b8edb51
PA
9051void
9052remote_target::remote_serial_write (const char *str, int len)
c33e31fd 9053{
5d93a237 9054 struct remote_state *rs = get_remote_state ();
048094ac 9055
6b8edb51
PA
9056 scoped_restore restore_quit_target
9057 = make_scoped_restore (&curr_quit_handler_target, this);
2ec845e7 9058 scoped_restore restore_quit
6b8edb51 9059 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
048094ac
PA
9060
9061 rs->got_ctrlc_during_io = 0;
5d93a237
TT
9062
9063 if (serial_write (rs->remote_desc, str, len))
c33e31fd 9064 {
1927e618
PA
9065 unpush_and_perror (_("Remote communication error. "
9066 "Target disconnected."));
c33e31fd 9067 }
048094ac
PA
9068
9069 if (rs->got_ctrlc_during_io)
9070 set_quit_flag ();
c33e31fd
PA
9071}
9072
b3ced9ba
PA
9073/* Return a string representing an escaped version of BUF, of len N.
9074 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 9075
b3ced9ba 9076static std::string
6e5abd65
PA
9077escape_buffer (const char *buf, int n)
9078{
d7e74731 9079 string_file stb;
6e5abd65 9080
d7e74731
PA
9081 stb.putstrn (buf, n, '\\');
9082 return std::move (stb.string ());
6e5abd65
PA
9083}
9084
c906108c
SS
9085/* Display a null-terminated packet on stdout, for debugging, using C
9086 string notation. */
9087
9088static void
baa336ce 9089print_packet (const char *buf)
c906108c
SS
9090{
9091 puts_filtered ("\"");
43e526b9 9092 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
9093 puts_filtered ("\"");
9094}
9095
9096int
6b8edb51 9097remote_target::putpkt (const char *buf)
c906108c
SS
9098{
9099 return putpkt_binary (buf, strlen (buf));
9100}
9101
6b8edb51
PA
9102/* Wrapper around remote_target::putpkt to avoid exporting
9103 remote_target. */
9104
9105int
9106putpkt (remote_target *remote, const char *buf)
9107{
9108 return remote->putpkt (buf);
9109}
9110
c906108c 9111/* Send a packet to the remote machine, with error checking. The data
23860348 9112 of the packet is in BUF. The string in BUF can be at most
ea9c271d 9113 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
9114 and for a possible /0 if we are debugging (remote_debug) and want
9115 to print the sent packet as a string. */
c906108c 9116
6b8edb51
PA
9117int
9118remote_target::putpkt_binary (const char *buf, int cnt)
c906108c 9119{
2d717e4f 9120 struct remote_state *rs = get_remote_state ();
c906108c
SS
9121 int i;
9122 unsigned char csum = 0;
b80406ac
TT
9123 gdb::def_vector<char> data (cnt + 6);
9124 char *buf2 = data.data ();
085dd6e6 9125
c906108c
SS
9126 int ch;
9127 int tcount = 0;
9128 char *p;
9129
e24a49d8
PA
9130 /* Catch cases like trying to read memory or listing threads while
9131 we're waiting for a stop reply. The remote server wouldn't be
9132 ready to handle this request, so we'd hang and timeout. We don't
9133 have to worry about this in synchronous mode, because in that
9134 case it's not possible to issue a command while the target is
74531fed
PA
9135 running. This is not a problem in non-stop mode, because in that
9136 case, the stub is always ready to process serial input. */
6efcd9a8
PA
9137 if (!target_is_non_stop_p ()
9138 && target_is_async_p ()
9139 && rs->waiting_for_stop_reply)
9597b22a
DE
9140 {
9141 error (_("Cannot execute this command while the target is running.\n"
9142 "Use the \"interrupt\" command to stop the target\n"
9143 "and then try again."));
9144 }
e24a49d8 9145
2d717e4f
DJ
9146 /* We're sending out a new packet. Make sure we don't look at a
9147 stale cached response. */
9148 rs->cached_wait_status = 0;
9149
c906108c
SS
9150 /* Copy the packet into buffer BUF2, encapsulating it
9151 and giving it a checksum. */
9152
c906108c
SS
9153 p = buf2;
9154 *p++ = '$';
9155
9156 for (i = 0; i < cnt; i++)
9157 {
9158 csum += buf[i];
9159 *p++ = buf[i];
9160 }
9161 *p++ = '#';
9162 *p++ = tohex ((csum >> 4) & 0xf);
9163 *p++ = tohex (csum & 0xf);
9164
9165 /* Send it over and over until we get a positive ack. */
9166
9167 while (1)
9168 {
9169 int started_error_output = 0;
9170
9171 if (remote_debug)
9172 {
9173 *p = '\0';
b3ced9ba 9174
6f8976bf
YQ
9175 int len = (int) (p - buf2);
9176
9177 std::string str
9178 = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
9179
9180 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
9181
567a3e54
SM
9182 if (len > REMOTE_DEBUG_MAX_CHAR)
9183 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9184 len - REMOTE_DEBUG_MAX_CHAR);
6f8976bf
YQ
9185
9186 fprintf_unfiltered (gdb_stdlog, "...");
b3ced9ba 9187
0f71a2f6 9188 gdb_flush (gdb_stdlog);
c906108c 9189 }
c33e31fd 9190 remote_serial_write (buf2, p - buf2);
c906108c 9191
a6f3e723
SL
9192 /* If this is a no acks version of the remote protocol, send the
9193 packet and move on. */
9194 if (rs->noack_mode)
9195 break;
9196
74531fed
PA
9197 /* Read until either a timeout occurs (-2) or '+' is read.
9198 Handle any notification that arrives in the mean time. */
c906108c
SS
9199 while (1)
9200 {
9201 ch = readchar (remote_timeout);
9202
c5aa993b 9203 if (remote_debug)
c906108c
SS
9204 {
9205 switch (ch)
9206 {
9207 case '+':
1216fa2c 9208 case '-':
c906108c
SS
9209 case SERIAL_TIMEOUT:
9210 case '$':
74531fed 9211 case '%':
c906108c
SS
9212 if (started_error_output)
9213 {
9214 putchar_unfiltered ('\n');
9215 started_error_output = 0;
9216 }
9217 }
9218 }
9219
9220 switch (ch)
9221 {
9222 case '+':
9223 if (remote_debug)
0f71a2f6 9224 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 9225 return 1;
1216fa2c
AC
9226 case '-':
9227 if (remote_debug)
9228 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 9229 /* FALLTHROUGH */
c906108c 9230 case SERIAL_TIMEOUT:
c5aa993b 9231 tcount++;
c906108c 9232 if (tcount > 3)
b80406ac 9233 return 0;
23860348 9234 break; /* Retransmit buffer. */
c906108c
SS
9235 case '$':
9236 {
40e3f985 9237 if (remote_debug)
2bc416ba 9238 fprintf_unfiltered (gdb_stdlog,
23860348 9239 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
9240 /* It's probably an old response sent because an ACK
9241 was lost. Gobble up the packet and ack it so it
9242 doesn't get retransmitted when we resend this
9243 packet. */
6d820c5c 9244 skip_frame ();
c33e31fd 9245 remote_serial_write ("+", 1);
23860348 9246 continue; /* Now, go look for +. */
c906108c 9247 }
74531fed
PA
9248
9249 case '%':
9250 {
9251 int val;
9252
9253 /* If we got a notification, handle it, and go back to looking
9254 for an ack. */
9255 /* We've found the start of a notification. Now
9256 collect the data. */
9257 val = read_frame (&rs->buf, &rs->buf_size);
9258 if (val >= 0)
9259 {
9260 if (remote_debug)
9261 {
b3ced9ba 9262 std::string str = escape_buffer (rs->buf, val);
6e5abd65 9263
6e5abd65
PA
9264 fprintf_unfiltered (gdb_stdlog,
9265 " Notification received: %s\n",
b3ced9ba 9266 str.c_str ());
74531fed 9267 }
5965e028 9268 handle_notification (rs->notif_state, rs->buf);
74531fed
PA
9269 /* We're in sync now, rewait for the ack. */
9270 tcount = 0;
9271 }
9272 else
9273 {
9274 if (remote_debug)
9275 {
9276 if (!started_error_output)
9277 {
9278 started_error_output = 1;
9279 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9280 }
9281 fputc_unfiltered (ch & 0177, gdb_stdlog);
9282 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
9283 }
9284 }
9285 continue;
9286 }
9287 /* fall-through */
c906108c
SS
9288 default:
9289 if (remote_debug)
9290 {
9291 if (!started_error_output)
9292 {
9293 started_error_output = 1;
0f71a2f6 9294 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 9295 }
0f71a2f6 9296 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
9297 }
9298 continue;
9299 }
23860348 9300 break; /* Here to retransmit. */
c906108c
SS
9301 }
9302
9303#if 0
9304 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
9305 able to get out next time we call QUIT, without anything as
9306 violent as interrupt_query. If we want to provide a way out of
9307 here without getting to the next QUIT, it should be based on
9308 hitting ^C twice as in remote_wait. */
c906108c
SS
9309 if (quit_flag)
9310 {
9311 quit_flag = 0;
9312 interrupt_query ();
9313 }
9314#endif
9315 }
a5c0808e 9316
a6f3e723 9317 return 0;
c906108c
SS
9318}
9319
6d820c5c
DJ
9320/* Come here after finding the start of a frame when we expected an
9321 ack. Do our best to discard the rest of this packet. */
9322
6b8edb51
PA
9323void
9324remote_target::skip_frame ()
6d820c5c
DJ
9325{
9326 int c;
9327
9328 while (1)
9329 {
9330 c = readchar (remote_timeout);
9331 switch (c)
9332 {
9333 case SERIAL_TIMEOUT:
9334 /* Nothing we can do. */
9335 return;
9336 case '#':
9337 /* Discard the two bytes of checksum and stop. */
9338 c = readchar (remote_timeout);
9339 if (c >= 0)
9340 c = readchar (remote_timeout);
9341
9342 return;
9343 case '*': /* Run length encoding. */
9344 /* Discard the repeat count. */
9345 c = readchar (remote_timeout);
9346 if (c < 0)
9347 return;
9348 break;
9349 default:
9350 /* A regular character. */
9351 break;
9352 }
9353 }
9354}
9355
c906108c 9356/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
9357 into *BUF, verifying the checksum, length, and handling run-length
9358 compression. NUL terminate the buffer. If there is not enough room,
9359 expand *BUF using xrealloc.
c906108c 9360
c2d11a7d
JM
9361 Returns -1 on error, number of characters in buffer (ignoring the
9362 trailing NULL) on success. (could be extended to return one of the
23860348 9363 SERIAL status indications). */
c2d11a7d 9364
6b8edb51
PA
9365long
9366remote_target::read_frame (char **buf_p, long *sizeof_buf)
c906108c
SS
9367{
9368 unsigned char csum;
c2d11a7d 9369 long bc;
c906108c 9370 int c;
6d820c5c 9371 char *buf = *buf_p;
a6f3e723 9372 struct remote_state *rs = get_remote_state ();
c906108c
SS
9373
9374 csum = 0;
c2d11a7d 9375 bc = 0;
c906108c
SS
9376
9377 while (1)
9378 {
9379 c = readchar (remote_timeout);
c906108c
SS
9380 switch (c)
9381 {
9382 case SERIAL_TIMEOUT:
9383 if (remote_debug)
0f71a2f6 9384 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 9385 return -1;
c906108c
SS
9386 case '$':
9387 if (remote_debug)
0f71a2f6
JM
9388 fputs_filtered ("Saw new packet start in middle of old one\n",
9389 gdb_stdlog);
23860348 9390 return -1; /* Start a new packet, count retries. */
c906108c
SS
9391 case '#':
9392 {
9393 unsigned char pktcsum;
e1b09194
AC
9394 int check_0 = 0;
9395 int check_1 = 0;
c906108c 9396
c2d11a7d 9397 buf[bc] = '\0';
c906108c 9398
e1b09194
AC
9399 check_0 = readchar (remote_timeout);
9400 if (check_0 >= 0)
9401 check_1 = readchar (remote_timeout);
802188a7 9402
e1b09194
AC
9403 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9404 {
9405 if (remote_debug)
2bc416ba 9406 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 9407 gdb_stdlog);
e1b09194
AC
9408 return -1;
9409 }
9410 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
9411 {
9412 if (remote_debug)
2bc416ba 9413 fputs_filtered ("Communication error in checksum\n",
23860348 9414 gdb_stdlog);
40e3f985
FN
9415 return -1;
9416 }
c906108c 9417
a6f3e723
SL
9418 /* Don't recompute the checksum; with no ack packets we
9419 don't have any way to indicate a packet retransmission
9420 is necessary. */
9421 if (rs->noack_mode)
9422 return bc;
9423
e1b09194 9424 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9425 if (csum == pktcsum)
c2d11a7d 9426 return bc;
c906108c 9427
c5aa993b 9428 if (remote_debug)
c906108c 9429 {
b3ced9ba 9430 std::string str = escape_buffer (buf, bc);
6e5abd65 9431
6e5abd65 9432 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
9433 "Bad checksum, sentsum=0x%x, "
9434 "csum=0x%x, buf=%s\n",
b3ced9ba 9435 pktcsum, csum, str.c_str ());
c906108c 9436 }
c2d11a7d 9437 /* Number of characters in buffer ignoring trailing
23860348 9438 NULL. */
c2d11a7d 9439 return -1;
c906108c 9440 }
23860348 9441 case '*': /* Run length encoding. */
c2c6d25f
JM
9442 {
9443 int repeat;
c906108c 9444
a744cf53 9445 csum += c;
b4501125
AC
9446 c = readchar (remote_timeout);
9447 csum += c;
23860348 9448 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9449
23860348 9450 /* The character before ``*'' is repeated. */
c2d11a7d 9451
6d820c5c 9452 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9453 {
6d820c5c
DJ
9454 if (bc + repeat - 1 >= *sizeof_buf - 1)
9455 {
9456 /* Make some more room in the buffer. */
9457 *sizeof_buf += repeat;
224c3ddb 9458 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c
DJ
9459 buf = *buf_p;
9460 }
9461
c2d11a7d
JM
9462 memset (&buf[bc], buf[bc - 1], repeat);
9463 bc += repeat;
c2c6d25f
JM
9464 continue;
9465 }
9466
c2d11a7d 9467 buf[bc] = '\0';
6d820c5c 9468 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9469 return -1;
c2c6d25f 9470 }
c906108c 9471 default:
6d820c5c 9472 if (bc >= *sizeof_buf - 1)
c906108c 9473 {
6d820c5c
DJ
9474 /* Make some more room in the buffer. */
9475 *sizeof_buf *= 2;
224c3ddb 9476 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c 9477 buf = *buf_p;
c906108c
SS
9478 }
9479
6d820c5c
DJ
9480 buf[bc++] = c;
9481 csum += c;
9482 continue;
c906108c
SS
9483 }
9484 }
9485}
9486
9487/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9488 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9489 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9490 rather than timing out; this is used (in synchronous mode) to wait
9491 for a target that is is executing user code to stop. */
d9fcf2fb
JM
9492/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9493 don't have to change all the calls to getpkt to deal with the
9494 return value, because at the moment I don't know what the right
23860348 9495 thing to do it for those. */
6b8edb51 9496
c906108c 9497void
6b8edb51 9498remote_target::getpkt (char **buf, long *sizeof_buf, int forever)
d9fcf2fb 9499{
54887903 9500 getpkt_sane (buf, sizeof_buf, forever);
d9fcf2fb
JM
9501}
9502
9503
9504/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9505 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9506 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9507 rather than timing out; this is used (in synchronous mode) to wait
9508 for a target that is is executing user code to stop. If FOREVER ==
9509 0, this function is allowed to time out gracefully and return an
74531fed
PA
9510 indication of this to the caller. Otherwise return the number of
9511 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
9512 enough reason to return to the caller. *IS_NOTIF is an output
9513 boolean that indicates whether *BUF holds a notification or not
9514 (a regular packet). */
74531fed 9515
6b8edb51
PA
9516int
9517remote_target::getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf,
9518 int forever, int expecting_notif,
9519 int *is_notif)
c906108c 9520{
2d717e4f 9521 struct remote_state *rs = get_remote_state ();
c906108c
SS
9522 int c;
9523 int tries;
9524 int timeout;
df4b58fe 9525 int val = -1;
c906108c 9526
2d717e4f
DJ
9527 /* We're reading a new response. Make sure we don't look at a
9528 previously cached response. */
9529 rs->cached_wait_status = 0;
9530
6d820c5c 9531 strcpy (*buf, "timeout");
c906108c
SS
9532
9533 if (forever)
74531fed
PA
9534 timeout = watchdog > 0 ? watchdog : -1;
9535 else if (expecting_notif)
9536 timeout = 0; /* There should already be a char in the buffer. If
9537 not, bail out. */
c906108c
SS
9538 else
9539 timeout = remote_timeout;
9540
9541#define MAX_TRIES 3
9542
74531fed
PA
9543 /* Process any number of notifications, and then return when
9544 we get a packet. */
9545 for (;;)
c906108c 9546 {
d9c43928 9547 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9548 times. */
9549 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9550 {
74531fed
PA
9551 /* This can loop forever if the remote side sends us
9552 characters continuously, but if it pauses, we'll get
9553 SERIAL_TIMEOUT from readchar because of timeout. Then
9554 we'll count that as a retry.
9555
9556 Note that even when forever is set, we will only wait
9557 forever prior to the start of a packet. After that, we
9558 expect characters to arrive at a brisk pace. They should
9559 show up within remote_timeout intervals. */
9560 do
9561 c = readchar (timeout);
9562 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9563
9564 if (c == SERIAL_TIMEOUT)
9565 {
74531fed
PA
9566 if (expecting_notif)
9567 return -1; /* Don't complain, it's normal to not get
9568 anything in this case. */
9569
23860348 9570 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9571 {
78a095c3 9572 remote_unpush_target ();
598d3636
JK
9573 throw_error (TARGET_CLOSE_ERROR,
9574 _("Watchdog timeout has expired. "
9575 "Target detached."));
c906108c 9576 }
c906108c 9577 if (remote_debug)
0f71a2f6 9578 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 9579 }
74531fed
PA
9580 else
9581 {
9582 /* We've found the start of a packet or notification.
9583 Now collect the data. */
9584 val = read_frame (buf, sizeof_buf);
9585 if (val >= 0)
9586 break;
9587 }
9588
c33e31fd 9589 remote_serial_write ("-", 1);
c906108c 9590 }
c906108c 9591
74531fed
PA
9592 if (tries > MAX_TRIES)
9593 {
9594 /* We have tried hard enough, and just can't receive the
9595 packet/notification. Give up. */
9596 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9597
74531fed
PA
9598 /* Skip the ack char if we're in no-ack mode. */
9599 if (!rs->noack_mode)
c33e31fd 9600 remote_serial_write ("+", 1);
74531fed
PA
9601 return -1;
9602 }
c906108c 9603
74531fed
PA
9604 /* If we got an ordinary packet, return that to our caller. */
9605 if (c == '$')
c906108c
SS
9606 {
9607 if (remote_debug)
43e526b9 9608 {
6f8976bf
YQ
9609 std::string str
9610 = escape_buffer (*buf,
9611 std::min (val, REMOTE_DEBUG_MAX_CHAR));
9612
9613 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9614 str.c_str ());
9615
567a3e54
SM
9616 if (val > REMOTE_DEBUG_MAX_CHAR)
9617 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9618 val - REMOTE_DEBUG_MAX_CHAR);
6e5abd65 9619
6f8976bf 9620 fprintf_unfiltered (gdb_stdlog, "\n");
43e526b9 9621 }
a6f3e723
SL
9622
9623 /* Skip the ack char if we're in no-ack mode. */
9624 if (!rs->noack_mode)
c33e31fd 9625 remote_serial_write ("+", 1);
fee9eda9
YQ
9626 if (is_notif != NULL)
9627 *is_notif = 0;
0876f84a 9628 return val;
c906108c
SS
9629 }
9630
74531fed
PA
9631 /* If we got a notification, handle it, and go back to looking
9632 for a packet. */
9633 else
9634 {
9635 gdb_assert (c == '%');
9636
9637 if (remote_debug)
9638 {
b3ced9ba 9639 std::string str = escape_buffer (*buf, val);
6e5abd65 9640
6e5abd65
PA
9641 fprintf_unfiltered (gdb_stdlog,
9642 " Notification received: %s\n",
b3ced9ba 9643 str.c_str ());
74531fed 9644 }
fee9eda9
YQ
9645 if (is_notif != NULL)
9646 *is_notif = 1;
c906108c 9647
5965e028 9648 handle_notification (rs->notif_state, *buf);
c906108c 9649
74531fed 9650 /* Notifications require no acknowledgement. */
a6f3e723 9651
74531fed 9652 if (expecting_notif)
fee9eda9 9653 return val;
74531fed
PA
9654 }
9655 }
9656}
9657
6b8edb51
PA
9658int
9659remote_target::getpkt_sane (char **buf, long *sizeof_buf, int forever)
74531fed 9660{
fee9eda9 9661 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
9662}
9663
6b8edb51
PA
9664int
9665remote_target::getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9666 int *is_notif)
74531fed 9667{
fee9eda9
YQ
9668 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9669 is_notif);
c906108c 9670}
74531fed 9671
cbb8991c
DB
9672/* Kill any new fork children of process PID that haven't been
9673 processed by follow_fork. */
9674
6b8edb51
PA
9675void
9676remote_target::kill_new_fork_children (int pid)
cbb8991c 9677{
6b8edb51 9678 remote_state *rs = get_remote_state ();
cbb8991c
DB
9679 struct thread_info *thread;
9680 struct notif_client *notif = &notif_client_stop;
cbb8991c
DB
9681
9682 /* Kill the fork child threads of any threads in process PID
9683 that are stopped at a fork event. */
9684 ALL_NON_EXITED_THREADS (thread)
9685 {
9686 struct target_waitstatus *ws = &thread->pending_follow;
9687
9688 if (is_pending_fork_parent (ws, pid, thread->ptid))
9689 {
953edf2b 9690 int child_pid = ws->value.related_pid.pid ();
cbb8991c
DB
9691 int res;
9692
6b8edb51 9693 res = remote_vkill (child_pid);
cbb8991c
DB
9694 if (res != 0)
9695 error (_("Can't kill fork child process %d"), child_pid);
9696 }
9697 }
9698
9699 /* Check for any pending fork events (not reported or processed yet)
9700 in process PID and kill those fork child threads as well. */
9701 remote_notif_get_pending_events (notif);
953edf2b
TT
9702 for (auto &event : rs->stop_reply_queue)
9703 if (is_pending_fork_parent (&event->ws, pid, event->ptid))
9704 {
9705 int child_pid = event->ws.value.related_pid.pid ();
9706 int res;
9707
9708 res = remote_vkill (child_pid);
9709 if (res != 0)
9710 error (_("Can't kill fork child process %d"), child_pid);
9711 }
cbb8991c
DB
9712}
9713
c906108c 9714\f
8020350c
DB
9715/* Target hook to kill the current inferior. */
9716
f6ac5f3d
PA
9717void
9718remote_target::kill ()
43ff13b4 9719{
8020350c 9720 int res = -1;
e99b03dc 9721 int pid = inferior_ptid.pid ();
8020350c 9722 struct remote_state *rs = get_remote_state ();
0fdf84ca 9723
8020350c 9724 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9725 {
8020350c
DB
9726 /* If we're stopped while forking and we haven't followed yet,
9727 kill the child task. We need to do this before killing the
9728 parent task because if this is a vfork then the parent will
9729 be sleeping. */
6b8edb51 9730 kill_new_fork_children (pid);
8020350c 9731
6b8edb51 9732 res = remote_vkill (pid);
8020350c 9733 if (res == 0)
0fdf84ca 9734 {
bc1e6c81 9735 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
9736 return;
9737 }
8020350c 9738 }
0fdf84ca 9739
8020350c
DB
9740 /* If we are in 'target remote' mode and we are killing the only
9741 inferior, then we will tell gdbserver to exit and unpush the
9742 target. */
9743 if (res == -1 && !remote_multi_process_p (rs)
9744 && number_of_live_inferiors () == 1)
9745 {
9746 remote_kill_k ();
9747
9748 /* We've killed the remote end, we get to mourn it. If we are
9749 not in extended mode, mourning the inferior also unpushes
9750 remote_ops from the target stack, which closes the remote
9751 connection. */
bc1e6c81 9752 target_mourn_inferior (inferior_ptid);
8020350c
DB
9753
9754 return;
0fdf84ca 9755 }
43ff13b4 9756
8020350c 9757 error (_("Can't kill process"));
43ff13b4
JM
9758}
9759
8020350c
DB
9760/* Send a kill request to the target using the 'vKill' packet. */
9761
6b8edb51
PA
9762int
9763remote_target::remote_vkill (int pid)
82f73884 9764{
4082afcc 9765 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
9766 return -1;
9767
6b8edb51
PA
9768 remote_state *rs = get_remote_state ();
9769
82f73884 9770 /* Tell the remote target to detach. */
bba74b36 9771 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
9772 putpkt (rs->buf);
9773 getpkt (&rs->buf, &rs->buf_size, 0);
9774
4082afcc
PA
9775 switch (packet_ok (rs->buf,
9776 &remote_protocol_packets[PACKET_vKill]))
9777 {
9778 case PACKET_OK:
9779 return 0;
9780 case PACKET_ERROR:
9781 return 1;
9782 case PACKET_UNKNOWN:
9783 return -1;
9784 default:
9785 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9786 }
82f73884
PA
9787}
9788
8020350c
DB
9789/* Send a kill request to the target using the 'k' packet. */
9790
6b8edb51
PA
9791void
9792remote_target::remote_kill_k ()
82f73884 9793{
8020350c
DB
9794 /* Catch errors so the user can quit from gdb even when we
9795 aren't on speaking terms with the remote system. */
9796 TRY
82f73884 9797 {
82f73884 9798 putpkt ("k");
82f73884 9799 }
8020350c
DB
9800 CATCH (ex, RETURN_MASK_ERROR)
9801 {
9802 if (ex.error == TARGET_CLOSE_ERROR)
9803 {
9804 /* If we got an (EOF) error that caused the target
9805 to go away, then we're done, that's what we wanted.
9806 "k" is susceptible to cause a premature EOF, given
9807 that the remote server isn't actually required to
9808 reply to "k", and it can happen that it doesn't
9809 even get to reply ACK to the "k". */
9810 return;
9811 }
82f73884 9812
8020350c
DB
9813 /* Otherwise, something went wrong. We didn't actually kill
9814 the target. Just propagate the exception, and let the
9815 user or higher layers decide what to do. */
9816 throw_exception (ex);
9817 }
9818 END_CATCH
82f73884
PA
9819}
9820
f6ac5f3d
PA
9821void
9822remote_target::mourn_inferior ()
c906108c 9823{
8020350c 9824 struct remote_state *rs = get_remote_state ();
ce5ce7ed 9825
9607784a
PA
9826 /* We're no longer interested in notification events of an inferior
9827 that exited or was killed/detached. */
9828 discard_pending_stop_replies (current_inferior ());
9829
8020350c
DB
9830 /* In 'target remote' mode with one inferior, we close the connection. */
9831 if (!rs->extended && number_of_live_inferiors () <= 1)
9832 {
f6ac5f3d 9833 unpush_target (this);
c906108c 9834
8020350c
DB
9835 /* remote_close takes care of doing most of the clean up. */
9836 generic_mourn_inferior ();
9837 return;
9838 }
c906108c 9839
e24a49d8
PA
9840 /* In case we got here due to an error, but we're going to stay
9841 connected. */
9842 rs->waiting_for_stop_reply = 0;
9843
dc1981d7
PA
9844 /* If the current general thread belonged to the process we just
9845 detached from or has exited, the remote side current general
9846 thread becomes undefined. Considering a case like this:
9847
9848 - We just got here due to a detach.
9849 - The process that we're detaching from happens to immediately
9850 report a global breakpoint being hit in non-stop mode, in the
9851 same thread we had selected before.
9852 - GDB attaches to this process again.
9853 - This event happens to be the next event we handle.
9854
9855 GDB would consider that the current general thread didn't need to
9856 be set on the stub side (with Hg), since for all it knew,
9857 GENERAL_THREAD hadn't changed.
9858
9859 Notice that although in all-stop mode, the remote server always
9860 sets the current thread to the thread reporting the stop event,
9861 that doesn't happen in non-stop mode; in non-stop, the stub *must
9862 not* change the current thread when reporting a breakpoint hit,
9863 due to the decoupling of event reporting and event handling.
9864
9865 To keep things simple, we always invalidate our notion of the
9866 current thread. */
47f8a51d 9867 record_currthread (rs, minus_one_ptid);
dc1981d7 9868
8020350c 9869 /* Call common code to mark the inferior as not running. */
48aa3c27
PA
9870 generic_mourn_inferior ();
9871
d729566a 9872 if (!have_inferiors ())
2d717e4f 9873 {
82f73884
PA
9874 if (!remote_multi_process_p (rs))
9875 {
9876 /* Check whether the target is running now - some remote stubs
9877 automatically restart after kill. */
9878 putpkt ("?");
9879 getpkt (&rs->buf, &rs->buf_size, 0);
9880
9881 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9882 {
3e43a32a
MS
9883 /* Assume that the target has been restarted. Set
9884 inferior_ptid so that bits of core GDB realizes
9885 there's something here, e.g., so that the user can
9886 say "kill" again. */
82f73884
PA
9887 inferior_ptid = magic_null_ptid;
9888 }
82f73884 9889 }
2d717e4f
DJ
9890 }
9891}
c906108c 9892
57810aa7 9893bool
f6ac5f3d 9894extended_remote_target::supports_disable_randomization ()
03583c20 9895{
4082afcc 9896 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
9897}
9898
6b8edb51
PA
9899void
9900remote_target::extended_remote_disable_randomization (int val)
03583c20
UW
9901{
9902 struct remote_state *rs = get_remote_state ();
9903 char *reply;
9904
bba74b36
YQ
9905 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9906 val);
03583c20 9907 putpkt (rs->buf);
b6bb3468 9908 reply = remote_get_noisy_reply ();
03583c20
UW
9909 if (*reply == '\0')
9910 error (_("Target does not support QDisableRandomization."));
9911 if (strcmp (reply, "OK") != 0)
9912 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9913}
9914
6b8edb51
PA
9915int
9916remote_target::extended_remote_run (const std::string &args)
2d717e4f
DJ
9917{
9918 struct remote_state *rs = get_remote_state ();
2d717e4f 9919 int len;
94585166 9920 const char *remote_exec_file = get_remote_exec_file ();
c906108c 9921
2d717e4f
DJ
9922 /* If the user has disabled vRun support, or we have detected that
9923 support is not available, do not try it. */
4082afcc 9924 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 9925 return -1;
424163ea 9926
2d717e4f
DJ
9927 strcpy (rs->buf, "vRun;");
9928 len = strlen (rs->buf);
c906108c 9929
2d717e4f
DJ
9930 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9931 error (_("Remote file name too long for run packet"));
9f1b45b0
TT
9932 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9933 strlen (remote_exec_file));
2d717e4f 9934
7c5ded6a 9935 if (!args.empty ())
2d717e4f 9936 {
2d717e4f 9937 int i;
2d717e4f 9938
773a1edc 9939 gdb_argv argv (args.c_str ());
2d717e4f
DJ
9940 for (i = 0; argv[i] != NULL; i++)
9941 {
9942 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9943 error (_("Argument list too long for run packet"));
9944 rs->buf[len++] = ';';
9f1b45b0
TT
9945 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9946 strlen (argv[i]));
2d717e4f 9947 }
2d717e4f
DJ
9948 }
9949
9950 rs->buf[len++] = '\0';
9951
9952 putpkt (rs->buf);
9953 getpkt (&rs->buf, &rs->buf_size, 0);
9954
4082afcc 9955 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 9956 {
4082afcc 9957 case PACKET_OK:
3405876a 9958 /* We have a wait response. All is well. */
2d717e4f 9959 return 0;
4082afcc
PA
9960 case PACKET_UNKNOWN:
9961 return -1;
9962 case PACKET_ERROR:
2d717e4f
DJ
9963 if (remote_exec_file[0] == '\0')
9964 error (_("Running the default executable on the remote target failed; "
9965 "try \"set remote exec-file\"?"));
9966 else
9967 error (_("Running \"%s\" on the remote target failed"),
9968 remote_exec_file);
4082afcc
PA
9969 default:
9970 gdb_assert_not_reached (_("bad switch"));
2d717e4f 9971 }
c906108c
SS
9972}
9973
0a2dde4a
SDJ
9974/* Helper function to send set/unset environment packets. ACTION is
9975 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
9976 or "QEnvironmentUnsetVariable". VALUE is the variable to be
9977 sent. */
9978
6b8edb51
PA
9979void
9980remote_target::send_environment_packet (const char *action,
9981 const char *packet,
9982 const char *value)
0a2dde4a 9983{
6b8edb51
PA
9984 remote_state *rs = get_remote_state ();
9985
0a2dde4a
SDJ
9986 /* Convert the environment variable to an hex string, which
9987 is the best format to be transmitted over the wire. */
9988 std::string encoded_value = bin2hex ((const gdb_byte *) value,
9989 strlen (value));
9990
9991 xsnprintf (rs->buf, get_remote_packet_size (),
9992 "%s:%s", packet, encoded_value.c_str ());
9993
9994 putpkt (rs->buf);
9995 getpkt (&rs->buf, &rs->buf_size, 0);
9996 if (strcmp (rs->buf, "OK") != 0)
9997 warning (_("Unable to %s environment variable '%s' on remote."),
9998 action, value);
9999}
10000
10001/* Helper function to handle the QEnvironment* packets. */
10002
6b8edb51
PA
10003void
10004remote_target::extended_remote_environment_support ()
0a2dde4a 10005{
6b8edb51
PA
10006 remote_state *rs = get_remote_state ();
10007
0a2dde4a
SDJ
10008 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10009 {
10010 putpkt ("QEnvironmentReset");
10011 getpkt (&rs->buf, &rs->buf_size, 0);
10012 if (strcmp (rs->buf, "OK") != 0)
10013 warning (_("Unable to reset environment on remote."));
10014 }
10015
10016 gdb_environ *e = &current_inferior ()->environment;
10017
10018 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10019 for (const std::string &el : e->user_set_env ())
6b8edb51 10020 send_environment_packet ("set", "QEnvironmentHexEncoded",
0a2dde4a
SDJ
10021 el.c_str ());
10022
10023 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10024 for (const std::string &el : e->user_unset_env ())
6b8edb51 10025 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
0a2dde4a
SDJ
10026}
10027
bc3b087d
SDJ
10028/* Helper function to set the current working directory for the
10029 inferior in the remote target. */
10030
6b8edb51
PA
10031void
10032remote_target::extended_remote_set_inferior_cwd ()
bc3b087d
SDJ
10033{
10034 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10035 {
10036 const char *inferior_cwd = get_inferior_cwd ();
6b8edb51 10037 remote_state *rs = get_remote_state ();
bc3b087d
SDJ
10038
10039 if (inferior_cwd != NULL)
10040 {
10041 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10042 strlen (inferior_cwd));
10043
10044 xsnprintf (rs->buf, get_remote_packet_size (),
10045 "QSetWorkingDir:%s", hexpath.c_str ());
10046 }
10047 else
10048 {
10049 /* An empty inferior_cwd means that the user wants us to
10050 reset the remote server's inferior's cwd. */
10051 xsnprintf (rs->buf, get_remote_packet_size (),
10052 "QSetWorkingDir:");
10053 }
10054
10055 putpkt (rs->buf);
10056 getpkt (&rs->buf, &rs->buf_size, 0);
10057 if (packet_ok (rs->buf,
10058 &remote_protocol_packets[PACKET_QSetWorkingDir])
10059 != PACKET_OK)
10060 error (_("\
10061Remote replied unexpectedly while setting the inferior's working\n\
10062directory: %s"),
10063 rs->buf);
10064
10065 }
10066}
10067
2d717e4f
DJ
10068/* In the extended protocol we want to be able to do things like
10069 "run" and have them basically work as expected. So we need
10070 a special create_inferior function. We support changing the
10071 executable file and the command line arguments, but not the
10072 environment. */
10073
f6ac5f3d
PA
10074void
10075extended_remote_target::create_inferior (const char *exec_file,
10076 const std::string &args,
10077 char **env, int from_tty)
43ff13b4 10078{
3405876a
PA
10079 int run_worked;
10080 char *stop_reply;
10081 struct remote_state *rs = get_remote_state ();
94585166 10082 const char *remote_exec_file = get_remote_exec_file ();
3405876a 10083
43ff13b4 10084 /* If running asynchronously, register the target file descriptor
23860348 10085 with the event loop. */
75c99385 10086 if (target_can_async_p ())
6a3753b3 10087 target_async (1);
43ff13b4 10088
03583c20 10089 /* Disable address space randomization if requested (and supported). */
f6ac5f3d 10090 if (supports_disable_randomization ())
03583c20
UW
10091 extended_remote_disable_randomization (disable_randomization);
10092
aefd8b33
SDJ
10093 /* If startup-with-shell is on, we inform gdbserver to start the
10094 remote inferior using a shell. */
10095 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10096 {
10097 xsnprintf (rs->buf, get_remote_packet_size (),
10098 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10099 putpkt (rs->buf);
10100 getpkt (&rs->buf, &rs->buf_size, 0);
10101 if (strcmp (rs->buf, "OK") != 0)
10102 error (_("\
10103Remote replied unexpectedly while setting startup-with-shell: %s"),
10104 rs->buf);
10105 }
10106
6b8edb51 10107 extended_remote_environment_support ();
0a2dde4a 10108
6b8edb51 10109 extended_remote_set_inferior_cwd ();
bc3b087d 10110
43ff13b4 10111 /* Now restart the remote server. */
3405876a
PA
10112 run_worked = extended_remote_run (args) != -1;
10113 if (!run_worked)
2d717e4f
DJ
10114 {
10115 /* vRun was not supported. Fail if we need it to do what the
10116 user requested. */
10117 if (remote_exec_file[0])
10118 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 10119 if (!args.empty ())
2d717e4f 10120 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 10121
2d717e4f
DJ
10122 /* Fall back to "R". */
10123 extended_remote_restart ();
10124 }
424163ea 10125
6c95b8df
PA
10126 if (!have_inferiors ())
10127 {
10128 /* Clean up from the last time we ran, before we mark the target
10129 running again. This will mark breakpoints uninserted, and
10130 get_offsets may insert breakpoints. */
10131 init_thread_list ();
10132 init_wait_for_inferior ();
10133 }
45280a52 10134
3405876a
PA
10135 /* vRun's success return is a stop reply. */
10136 stop_reply = run_worked ? rs->buf : NULL;
10137 add_current_inferior_and_thread (stop_reply);
c0a2216e 10138
2d717e4f
DJ
10139 /* Get updated offsets, if the stub uses qOffsets. */
10140 get_offsets ();
2d717e4f 10141}
c906108c 10142\f
c5aa993b 10143
b775012e
LM
10144/* Given a location's target info BP_TGT and the packet buffer BUF, output
10145 the list of conditions (in agent expression bytecode format), if any, the
10146 target needs to evaluate. The output is placed into the packet buffer
bba74b36 10147 started from BUF and ended at BUF_END. */
b775012e
LM
10148
10149static int
10150remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
10151 struct bp_target_info *bp_tgt, char *buf,
10152 char *buf_end)
b775012e 10153{
3cde5c42 10154 if (bp_tgt->conditions.empty ())
b775012e
LM
10155 return 0;
10156
10157 buf += strlen (buf);
bba74b36 10158 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
10159 buf++;
10160
83621223 10161 /* Send conditions to the target. */
d538e36d 10162 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 10163 {
bba74b36 10164 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 10165 buf += strlen (buf);
3cde5c42 10166 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
10167 buf = pack_hex_byte (buf, aexpr->buf[i]);
10168 *buf = '\0';
10169 }
b775012e
LM
10170 return 0;
10171}
10172
d3ce09f5
SS
10173static void
10174remote_add_target_side_commands (struct gdbarch *gdbarch,
10175 struct bp_target_info *bp_tgt, char *buf)
10176{
3cde5c42 10177 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
10178 return;
10179
10180 buf += strlen (buf);
10181
10182 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10183 buf += strlen (buf);
10184
10185 /* Concatenate all the agent expressions that are commands into the
10186 cmds parameter. */
df97be55 10187 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
10188 {
10189 sprintf (buf, "X%x,", aexpr->len);
10190 buf += strlen (buf);
3cde5c42 10191 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
10192 buf = pack_hex_byte (buf, aexpr->buf[i]);
10193 *buf = '\0';
10194 }
d3ce09f5
SS
10195}
10196
8181d85f
DJ
10197/* Insert a breakpoint. On targets that have software breakpoint
10198 support, we ask the remote target to do the work; on targets
10199 which don't, we insert a traditional memory breakpoint. */
c906108c 10200
f6ac5f3d
PA
10201int
10202remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10203 struct bp_target_info *bp_tgt)
c906108c 10204{
d471ea57
AC
10205 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10206 If it succeeds, then set the support to PACKET_ENABLE. If it
10207 fails, and the user has explicitly requested the Z support then
23860348 10208 report an error, otherwise, mark it disabled and go on. */
802188a7 10209
4082afcc 10210 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10211 {
0d5ed153 10212 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10213 struct remote_state *rs;
bba74b36 10214 char *p, *endbuf;
4fff2411 10215
28439a30
PA
10216 /* Make sure the remote is pointing at the right process, if
10217 necessary. */
10218 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10219 set_general_process ();
10220
4fff2411
JZ
10221 rs = get_remote_state ();
10222 p = rs->buf;
bba74b36 10223 endbuf = rs->buf + get_remote_packet_size ();
802188a7 10224
96baa820
JM
10225 *(p++) = 'Z';
10226 *(p++) = '0';
10227 *(p++) = ',';
7c0f6dcc 10228 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 10229 p += hexnumstr (p, addr);
579c6ad9 10230 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10231
f6ac5f3d 10232 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10233 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10234
f6ac5f3d 10235 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10236 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10237
6d820c5c
DJ
10238 putpkt (rs->buf);
10239 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10240
6d820c5c 10241 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 10242 {
d471ea57
AC
10243 case PACKET_ERROR:
10244 return -1;
10245 case PACKET_OK:
10246 return 0;
10247 case PACKET_UNKNOWN:
10248 break;
96baa820
JM
10249 }
10250 }
c906108c 10251
0000e5cc
PA
10252 /* If this breakpoint has target-side commands but this stub doesn't
10253 support Z0 packets, throw error. */
3cde5c42 10254 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
10255 throw_error (NOT_SUPPORTED_ERROR, _("\
10256Target doesn't support breakpoints that have target side commands."));
10257
f6ac5f3d 10258 return memory_insert_breakpoint (this, gdbarch, bp_tgt);
c906108c
SS
10259}
10260
f6ac5f3d
PA
10261int
10262remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10263 struct bp_target_info *bp_tgt,
10264 enum remove_bp_reason reason)
c906108c 10265{
8181d85f 10266 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 10267 struct remote_state *rs = get_remote_state ();
96baa820 10268
4082afcc 10269 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 10270 {
6d820c5c 10271 char *p = rs->buf;
bba74b36 10272 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 10273
28439a30
PA
10274 /* Make sure the remote is pointing at the right process, if
10275 necessary. */
10276 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10277 set_general_process ();
10278
96baa820
JM
10279 *(p++) = 'z';
10280 *(p++) = '0';
10281 *(p++) = ',';
10282
8181d85f
DJ
10283 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10284 p += hexnumstr (p, addr);
579c6ad9 10285 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 10286
6d820c5c
DJ
10287 putpkt (rs->buf);
10288 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10289
6d820c5c 10290 return (rs->buf[0] == 'E');
96baa820
JM
10291 }
10292
f6ac5f3d 10293 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
c906108c
SS
10294}
10295
f486487f 10296static enum Z_packet_type
d471ea57
AC
10297watchpoint_to_Z_packet (int type)
10298{
10299 switch (type)
10300 {
10301 case hw_write:
bb858e6a 10302 return Z_PACKET_WRITE_WP;
d471ea57
AC
10303 break;
10304 case hw_read:
bb858e6a 10305 return Z_PACKET_READ_WP;
d471ea57
AC
10306 break;
10307 case hw_access:
bb858e6a 10308 return Z_PACKET_ACCESS_WP;
d471ea57
AC
10309 break;
10310 default:
8e65ff28 10311 internal_error (__FILE__, __LINE__,
e2e0b3e5 10312 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
10313 }
10314}
10315
f6ac5f3d
PA
10316int
10317remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10318 enum target_hw_bp_type type, struct expression *cond)
96baa820 10319{
d01949b6 10320 struct remote_state *rs = get_remote_state ();
bba74b36 10321 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 10322 char *p;
d471ea57 10323 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 10324
4082afcc 10325 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 10326 return 1;
802188a7 10327
28439a30
PA
10328 /* Make sure the remote is pointing at the right process, if
10329 necessary. */
10330 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10331 set_general_process ();
10332
bba74b36 10333 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 10334 p = strchr (rs->buf, '\0');
96baa820
JM
10335 addr = remote_address_masked (addr);
10336 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10337 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 10338
6d820c5c
DJ
10339 putpkt (rs->buf);
10340 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10341
6d820c5c 10342 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10343 {
10344 case PACKET_ERROR:
d471ea57 10345 return -1;
85d721b8
PA
10346 case PACKET_UNKNOWN:
10347 return 1;
d471ea57
AC
10348 case PACKET_OK:
10349 return 0;
10350 }
8e65ff28 10351 internal_error (__FILE__, __LINE__,
e2e0b3e5 10352 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
10353}
10354
57810aa7 10355bool
f6ac5f3d
PA
10356remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10357 CORE_ADDR start, int length)
283002cf
MR
10358{
10359 CORE_ADDR diff = remote_address_masked (addr - start);
10360
10361 return diff < length;
10362}
10363
d471ea57 10364
f6ac5f3d
PA
10365int
10366remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10367 enum target_hw_bp_type type, struct expression *cond)
96baa820 10368{
d01949b6 10369 struct remote_state *rs = get_remote_state ();
bba74b36 10370 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 10371 char *p;
d471ea57
AC
10372 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10373
4082afcc 10374 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 10375 return -1;
802188a7 10376
28439a30
PA
10377 /* Make sure the remote is pointing at the right process, if
10378 necessary. */
10379 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10380 set_general_process ();
10381
bba74b36 10382 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 10383 p = strchr (rs->buf, '\0');
96baa820
JM
10384 addr = remote_address_masked (addr);
10385 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 10386 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
10387 putpkt (rs->buf);
10388 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10389
6d820c5c 10390 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
10391 {
10392 case PACKET_ERROR:
10393 case PACKET_UNKNOWN:
10394 return -1;
10395 case PACKET_OK:
10396 return 0;
10397 }
8e65ff28 10398 internal_error (__FILE__, __LINE__,
e2e0b3e5 10399 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
10400}
10401
3c3bea1c 10402
501eef12 10403int remote_hw_watchpoint_limit = -1;
480a3f21 10404int remote_hw_watchpoint_length_limit = -1;
501eef12 10405int remote_hw_breakpoint_limit = -1;
d471ea57 10406
f6ac5f3d
PA
10407int
10408remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
480a3f21
PW
10409{
10410 if (remote_hw_watchpoint_length_limit == 0)
10411 return 0;
10412 else if (remote_hw_watchpoint_length_limit < 0)
10413 return 1;
10414 else if (len <= remote_hw_watchpoint_length_limit)
10415 return 1;
10416 else
10417 return 0;
10418}
10419
f6ac5f3d
PA
10420int
10421remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
96baa820 10422{
3c3bea1c
GS
10423 if (type == bp_hardware_breakpoint)
10424 {
10425 if (remote_hw_breakpoint_limit == 0)
10426 return 0;
501eef12
AC
10427 else if (remote_hw_breakpoint_limit < 0)
10428 return 1;
3c3bea1c
GS
10429 else if (cnt <= remote_hw_breakpoint_limit)
10430 return 1;
10431 }
10432 else
10433 {
10434 if (remote_hw_watchpoint_limit == 0)
10435 return 0;
501eef12
AC
10436 else if (remote_hw_watchpoint_limit < 0)
10437 return 1;
3c3bea1c
GS
10438 else if (ot)
10439 return -1;
10440 else if (cnt <= remote_hw_watchpoint_limit)
10441 return 1;
10442 }
10443 return -1;
10444}
10445
f7e6eed5
PA
10446/* The to_stopped_by_sw_breakpoint method of target remote. */
10447
57810aa7 10448bool
f6ac5f3d 10449remote_target::stopped_by_sw_breakpoint ()
f7e6eed5 10450{
799a2abe 10451 struct thread_info *thread = inferior_thread ();
f7e6eed5 10452
799a2abe 10453 return (thread->priv != NULL
7aabaf9d
SM
10454 && (get_remote_thread_info (thread)->stop_reason
10455 == TARGET_STOPPED_BY_SW_BREAKPOINT));
f7e6eed5
PA
10456}
10457
10458/* The to_supports_stopped_by_sw_breakpoint method of target
10459 remote. */
10460
57810aa7 10461bool
f6ac5f3d 10462remote_target::supports_stopped_by_sw_breakpoint ()
f7e6eed5 10463{
f7e6eed5
PA
10464 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10465}
10466
10467/* The to_stopped_by_hw_breakpoint method of target remote. */
10468
57810aa7 10469bool
f6ac5f3d 10470remote_target::stopped_by_hw_breakpoint ()
f7e6eed5 10471{
799a2abe 10472 struct thread_info *thread = inferior_thread ();
f7e6eed5 10473
799a2abe 10474 return (thread->priv != NULL
7aabaf9d
SM
10475 && (get_remote_thread_info (thread)->stop_reason
10476 == TARGET_STOPPED_BY_HW_BREAKPOINT));
f7e6eed5
PA
10477}
10478
10479/* The to_supports_stopped_by_hw_breakpoint method of target
10480 remote. */
10481
57810aa7 10482bool
f6ac5f3d 10483remote_target::supports_stopped_by_hw_breakpoint ()
f7e6eed5 10484{
f7e6eed5
PA
10485 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10486}
10487
57810aa7 10488bool
f6ac5f3d 10489remote_target::stopped_by_watchpoint ()
3c3bea1c 10490{
799a2abe 10491 struct thread_info *thread = inferior_thread ();
ee154bee 10492
799a2abe 10493 return (thread->priv != NULL
7aabaf9d
SM
10494 && (get_remote_thread_info (thread)->stop_reason
10495 == TARGET_STOPPED_BY_WATCHPOINT));
3c3bea1c
GS
10496}
10497
57810aa7 10498bool
f6ac5f3d 10499remote_target::stopped_data_address (CORE_ADDR *addr_p)
3c3bea1c 10500{
799a2abe 10501 struct thread_info *thread = inferior_thread ();
a744cf53 10502
799a2abe 10503 if (thread->priv != NULL
7aabaf9d
SM
10504 && (get_remote_thread_info (thread)->stop_reason
10505 == TARGET_STOPPED_BY_WATCHPOINT))
4aa7a7f5 10506 {
7aabaf9d 10507 *addr_p = get_remote_thread_info (thread)->watch_data_address;
57810aa7 10508 return true;
4aa7a7f5
JJ
10509 }
10510
57810aa7 10511 return false;
3c3bea1c
GS
10512}
10513
10514
f6ac5f3d
PA
10515int
10516remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10517 struct bp_target_info *bp_tgt)
3c3bea1c 10518{
0d5ed153 10519 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10520 struct remote_state *rs;
bba74b36 10521 char *p, *endbuf;
dd61ec5c 10522 char *message;
3c3bea1c 10523
4082afcc 10524 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10525 return -1;
2bc416ba 10526
28439a30
PA
10527 /* Make sure the remote is pointing at the right process, if
10528 necessary. */
10529 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10530 set_general_process ();
10531
4fff2411
JZ
10532 rs = get_remote_state ();
10533 p = rs->buf;
bba74b36 10534 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 10535
96baa820
JM
10536 *(p++) = 'Z';
10537 *(p++) = '1';
10538 *(p++) = ',';
802188a7 10539
0d5ed153 10540 addr = remote_address_masked (addr);
96baa820 10541 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10542 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10543
f6ac5f3d 10544 if (supports_evaluation_of_breakpoint_conditions ())
bba74b36 10545 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10546
f6ac5f3d 10547 if (can_run_breakpoint_commands ())
d3ce09f5
SS
10548 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10549
6d820c5c
DJ
10550 putpkt (rs->buf);
10551 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10552
6d820c5c 10553 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10554 {
10555 case PACKET_ERROR:
dd61ec5c
MW
10556 if (rs->buf[1] == '.')
10557 {
10558 message = strchr (rs->buf + 2, '.');
10559 if (message)
0316657e 10560 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
10561 }
10562 return -1;
d471ea57
AC
10563 case PACKET_UNKNOWN:
10564 return -1;
10565 case PACKET_OK:
10566 return 0;
10567 }
8e65ff28 10568 internal_error (__FILE__, __LINE__,
e2e0b3e5 10569 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10570}
10571
d471ea57 10572
f6ac5f3d
PA
10573int
10574remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10575 struct bp_target_info *bp_tgt)
96baa820 10576{
8181d85f 10577 CORE_ADDR addr;
d01949b6 10578 struct remote_state *rs = get_remote_state ();
6d820c5c 10579 char *p = rs->buf;
bba74b36 10580 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 10581
4082afcc 10582 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10583 return -1;
802188a7 10584
28439a30
PA
10585 /* Make sure the remote is pointing at the right process, if
10586 necessary. */
10587 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10588 set_general_process ();
10589
96baa820
JM
10590 *(p++) = 'z';
10591 *(p++) = '1';
10592 *(p++) = ',';
802188a7 10593
8181d85f 10594 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10595 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10596 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10597
6d820c5c
DJ
10598 putpkt (rs->buf);
10599 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 10600
6d820c5c 10601 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10602 {
10603 case PACKET_ERROR:
10604 case PACKET_UNKNOWN:
10605 return -1;
10606 case PACKET_OK:
10607 return 0;
10608 }
8e65ff28 10609 internal_error (__FILE__, __LINE__,
e2e0b3e5 10610 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10611}
96baa820 10612
4a5e7a5b
PA
10613/* Verify memory using the "qCRC:" request. */
10614
f6ac5f3d
PA
10615int
10616remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
4a5e7a5b
PA
10617{
10618 struct remote_state *rs = get_remote_state ();
10619 unsigned long host_crc, target_crc;
10620 char *tmp;
10621
936d2992
PA
10622 /* It doesn't make sense to use qCRC if the remote target is
10623 connected but not running. */
10624 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10625 {
10626 enum packet_result result;
28439a30 10627
936d2992
PA
10628 /* Make sure the remote is pointing at the right process. */
10629 set_general_process ();
4a5e7a5b 10630
936d2992
PA
10631 /* FIXME: assumes lma can fit into long. */
10632 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10633 (long) lma, (long) size);
10634 putpkt (rs->buf);
4a5e7a5b 10635
936d2992
PA
10636 /* Be clever; compute the host_crc before waiting for target
10637 reply. */
10638 host_crc = xcrc32 (data, size, 0xffffffff);
10639
10640 getpkt (&rs->buf, &rs->buf_size, 0);
4a5e7a5b 10641
936d2992
PA
10642 result = packet_ok (rs->buf,
10643 &remote_protocol_packets[PACKET_qCRC]);
10644 if (result == PACKET_ERROR)
10645 return -1;
10646 else if (result == PACKET_OK)
10647 {
10648 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10649 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10650
936d2992
PA
10651 return (host_crc == target_crc);
10652 }
10653 }
4a5e7a5b 10654
f6ac5f3d 10655 return simple_verify_memory (this, data, lma, size);
4a5e7a5b
PA
10656}
10657
c906108c
SS
10658/* compare-sections command
10659
10660 With no arguments, compares each loadable section in the exec bfd
10661 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10662 Useful for verifying the image on the target against the exec file. */
e514a9d6 10663
c906108c 10664static void
ac88e2de 10665compare_sections_command (const char *args, int from_tty)
c906108c
SS
10666{
10667 asection *s;
ce359b09 10668 const char *sectname;
c906108c
SS
10669 bfd_size_type size;
10670 bfd_vma lma;
10671 int matched = 0;
10672 int mismatched = 0;
4a5e7a5b 10673 int res;
95cf3b38 10674 int read_only = 0;
c906108c
SS
10675
10676 if (!exec_bfd)
8a3fe4f8 10677 error (_("command cannot be used without an exec file"));
c906108c 10678
95cf3b38
DT
10679 if (args != NULL && strcmp (args, "-r") == 0)
10680 {
10681 read_only = 1;
10682 args = NULL;
10683 }
10684
c5aa993b 10685 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
10686 {
10687 if (!(s->flags & SEC_LOAD))
0df8b418 10688 continue; /* Skip non-loadable section. */
c906108c 10689
95cf3b38
DT
10690 if (read_only && (s->flags & SEC_READONLY) == 0)
10691 continue; /* Skip writeable sections */
10692
2c500098 10693 size = bfd_get_section_size (s);
c906108c 10694 if (size == 0)
0df8b418 10695 continue; /* Skip zero-length section. */
c906108c 10696
ce359b09 10697 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 10698 if (args && strcmp (args, sectname) != 0)
0df8b418 10699 continue; /* Not the section selected by user. */
c906108c 10700
0df8b418 10701 matched = 1; /* Do this section. */
c906108c 10702 lma = s->lma;
c906108c 10703
b80406ac
TT
10704 gdb::byte_vector sectdata (size);
10705 bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
c906108c 10706
b80406ac 10707 res = target_verify_memory (sectdata.data (), lma, size);
4a5e7a5b
PA
10708
10709 if (res == -1)
5af949e3 10710 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10711 paddress (target_gdbarch (), lma),
10712 paddress (target_gdbarch (), lma + size));
c906108c 10713
5af949e3 10714 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10715 paddress (target_gdbarch (), lma),
10716 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10717 if (res)
c906108c
SS
10718 printf_filtered ("matched.\n");
10719 else
c5aa993b
JM
10720 {
10721 printf_filtered ("MIS-MATCHED!\n");
10722 mismatched++;
10723 }
c906108c
SS
10724 }
10725 if (mismatched > 0)
936d2992 10726 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10727the loaded file\n"));
c906108c 10728 if (args && !matched)
a3f17187 10729 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10730}
10731
0e7f50da
UW
10732/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10733 into remote target. The number of bytes written to the remote
10734 target is returned, or -1 for error. */
10735
6b8edb51
PA
10736target_xfer_status
10737remote_target::remote_write_qxfer (const char *object_name,
10738 const char *annex, const gdb_byte *writebuf,
10739 ULONGEST offset, LONGEST len,
10740 ULONGEST *xfered_len,
10741 struct packet_config *packet)
0e7f50da
UW
10742{
10743 int i, buf_len;
10744 ULONGEST n;
0e7f50da
UW
10745 struct remote_state *rs = get_remote_state ();
10746 int max_size = get_memory_write_packet_size ();
10747
7cc244de 10748 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10749 return TARGET_XFER_E_IO;
0e7f50da
UW
10750
10751 /* Insert header. */
10752 i = snprintf (rs->buf, max_size,
10753 "qXfer:%s:write:%s:%s:",
10754 object_name, annex ? annex : "",
10755 phex_nz (offset, sizeof offset));
10756 max_size -= (i + 1);
10757
10758 /* Escape as much data as fits into rs->buf. */
10759 buf_len = remote_escape_output
124e13d9 10760 (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
0e7f50da
UW
10761
10762 if (putpkt_binary (rs->buf, i + buf_len) < 0
10763 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10764 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10765 return TARGET_XFER_E_IO;
0e7f50da
UW
10766
10767 unpack_varlen_hex (rs->buf, &n);
9b409511
YQ
10768
10769 *xfered_len = n;
92ffd475 10770 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
0e7f50da
UW
10771}
10772
0876f84a
DJ
10773/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10774 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10775 number of bytes read is returned, or 0 for EOF, or -1 for error.
10776 The number of bytes read may be less than LEN without indicating an
10777 EOF. PACKET is checked and updated to indicate whether the remote
10778 target supports this object. */
10779
6b8edb51
PA
10780target_xfer_status
10781remote_target::remote_read_qxfer (const char *object_name,
10782 const char *annex,
10783 gdb_byte *readbuf, ULONGEST offset,
10784 LONGEST len,
10785 ULONGEST *xfered_len,
10786 struct packet_config *packet)
0876f84a 10787{
0876f84a 10788 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
10789 LONGEST i, n, packet_len;
10790
7cc244de 10791 if (packet_config_support (packet) == PACKET_DISABLE)
2ed4b548 10792 return TARGET_XFER_E_IO;
0876f84a
DJ
10793
10794 /* Check whether we've cached an end-of-object packet that matches
10795 this request. */
8e88304f 10796 if (rs->finished_object)
0876f84a 10797 {
8e88304f
TT
10798 if (strcmp (object_name, rs->finished_object) == 0
10799 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10800 && offset == rs->finished_offset)
9b409511
YQ
10801 return TARGET_XFER_EOF;
10802
0876f84a
DJ
10803
10804 /* Otherwise, we're now reading something different. Discard
10805 the cache. */
8e88304f
TT
10806 xfree (rs->finished_object);
10807 xfree (rs->finished_annex);
10808 rs->finished_object = NULL;
10809 rs->finished_annex = NULL;
0876f84a
DJ
10810 }
10811
10812 /* Request only enough to fit in a single packet. The actual data
10813 may not, since we don't know how much of it will need to be escaped;
10814 the target is free to respond with slightly less data. We subtract
10815 five to account for the response type and the protocol frame. */
768adc05 10816 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
0876f84a
DJ
10817 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10818 object_name, annex ? annex : "",
10819 phex_nz (offset, sizeof offset),
10820 phex_nz (n, sizeof n));
10821 i = putpkt (rs->buf);
10822 if (i < 0)
2ed4b548 10823 return TARGET_XFER_E_IO;
0876f84a
DJ
10824
10825 rs->buf[0] = '\0';
10826 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10827 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10828 return TARGET_XFER_E_IO;
0876f84a
DJ
10829
10830 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10831 error (_("Unknown remote qXfer reply: %s"), rs->buf);
10832
10833 /* 'm' means there is (or at least might be) more data after this
10834 batch. That does not make sense unless there's at least one byte
10835 of data in this reply. */
10836 if (rs->buf[0] == 'm' && packet_len == 1)
10837 error (_("Remote qXfer reply contained no data."));
10838
10839 /* Got some data. */
bc20a4af
PA
10840 i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10841 packet_len - 1, readbuf, n);
0876f84a
DJ
10842
10843 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
10844 or possibly empty. If we have the final block of a non-empty
10845 object, record this fact to bypass a subsequent partial read. */
10846 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 10847 {
8e88304f
TT
10848 rs->finished_object = xstrdup (object_name);
10849 rs->finished_annex = xstrdup (annex ? annex : "");
10850 rs->finished_offset = offset + i;
0876f84a
DJ
10851 }
10852
9b409511
YQ
10853 if (i == 0)
10854 return TARGET_XFER_EOF;
10855 else
10856 {
10857 *xfered_len = i;
10858 return TARGET_XFER_OK;
10859 }
0876f84a
DJ
10860}
10861
f6ac5f3d
PA
10862enum target_xfer_status
10863remote_target::xfer_partial (enum target_object object,
10864 const char *annex, gdb_byte *readbuf,
10865 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10866 ULONGEST *xfered_len)
c906108c 10867{
82f73884 10868 struct remote_state *rs;
c906108c 10869 int i;
6d820c5c 10870 char *p2;
1e3ff5ad 10871 char query_type;
124e13d9 10872 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 10873
e6e4e701 10874 set_remote_traceframe ();
82f73884
PA
10875 set_general_thread (inferior_ptid);
10876
10877 rs = get_remote_state ();
10878
b2182ed2 10879 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
10880 if (object == TARGET_OBJECT_MEMORY)
10881 {
2d717e4f
DJ
10882 /* If the remote target is connected but not running, we should
10883 pass this request down to a lower stratum (e.g. the executable
10884 file). */
10885 if (!target_has_execution)
9b409511 10886 return TARGET_XFER_EOF;
2d717e4f 10887
21e3b9b9 10888 if (writebuf != NULL)
124e13d9
SM
10889 return remote_write_bytes (offset, writebuf, len, unit_size,
10890 xfered_len);
21e3b9b9 10891 else
6b8edb51 10892 return remote_read_bytes (offset, readbuf, len, unit_size,
124e13d9 10893 xfered_len);
21e3b9b9
DJ
10894 }
10895
0df8b418 10896 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
10897 if (object == TARGET_OBJECT_SPU)
10898 {
10899 if (readbuf)
f6ac5f3d 10900 return remote_read_qxfer ("spu", annex, readbuf, offset, len,
9b409511
YQ
10901 xfered_len, &remote_protocol_packets
10902 [PACKET_qXfer_spu_read]);
0e7f50da 10903 else
f6ac5f3d 10904 return remote_write_qxfer ("spu", annex, writebuf, offset, len,
9b409511
YQ
10905 xfered_len, &remote_protocol_packets
10906 [PACKET_qXfer_spu_write]);
0e7f50da
UW
10907 }
10908
4aa995e1
PA
10909 /* Handle extra signal info using qxfer packets. */
10910 if (object == TARGET_OBJECT_SIGNAL_INFO)
10911 {
10912 if (readbuf)
f6ac5f3d 10913 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
9b409511 10914 xfered_len, &remote_protocol_packets
4aa995e1
PA
10915 [PACKET_qXfer_siginfo_read]);
10916 else
f6ac5f3d 10917 return remote_write_qxfer ("siginfo", annex,
9b409511 10918 writebuf, offset, len, xfered_len,
4aa995e1
PA
10919 &remote_protocol_packets
10920 [PACKET_qXfer_siginfo_write]);
10921 }
10922
0fb4aa4b
PA
10923 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10924 {
10925 if (readbuf)
f6ac5f3d 10926 return remote_read_qxfer ("statictrace", annex,
9b409511 10927 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
10928 &remote_protocol_packets
10929 [PACKET_qXfer_statictrace_read]);
10930 else
2ed4b548 10931 return TARGET_XFER_E_IO;
0fb4aa4b
PA
10932 }
10933
a76d924d
DJ
10934 /* Only handle flash writes. */
10935 if (writebuf != NULL)
10936 {
a76d924d
DJ
10937 switch (object)
10938 {
10939 case TARGET_OBJECT_FLASH:
6b8edb51 10940 return remote_flash_write (offset, len, xfered_len,
9b409511 10941 writebuf);
a76d924d
DJ
10942
10943 default:
2ed4b548 10944 return TARGET_XFER_E_IO;
a76d924d
DJ
10945 }
10946 }
4b8a223f 10947
1e3ff5ad
AC
10948 /* Map pre-existing objects onto letters. DO NOT do this for new
10949 objects!!! Instead specify new query packets. */
10950 switch (object)
c906108c 10951 {
1e3ff5ad
AC
10952 case TARGET_OBJECT_AVR:
10953 query_type = 'R';
10954 break;
802188a7
RM
10955
10956 case TARGET_OBJECT_AUXV:
0876f84a 10957 gdb_assert (annex == NULL);
f6ac5f3d 10958 return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
9b409511 10959 xfered_len,
0876f84a 10960 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 10961
23181151
DJ
10962 case TARGET_OBJECT_AVAILABLE_FEATURES:
10963 return remote_read_qxfer
f6ac5f3d 10964 ("features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
10965 &remote_protocol_packets[PACKET_qXfer_features]);
10966
cfa9d6d9
DJ
10967 case TARGET_OBJECT_LIBRARIES:
10968 return remote_read_qxfer
f6ac5f3d 10969 ("libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
10970 &remote_protocol_packets[PACKET_qXfer_libraries]);
10971
2268b414
JK
10972 case TARGET_OBJECT_LIBRARIES_SVR4:
10973 return remote_read_qxfer
f6ac5f3d 10974 ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
10975 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10976
fd79ecee
DJ
10977 case TARGET_OBJECT_MEMORY_MAP:
10978 gdb_assert (annex == NULL);
f6ac5f3d 10979 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
9b409511 10980 xfered_len,
fd79ecee
DJ
10981 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10982
07e059b5
VP
10983 case TARGET_OBJECT_OSDATA:
10984 /* Should only get here if we're connected. */
5d93a237 10985 gdb_assert (rs->remote_desc);
07e059b5 10986 return remote_read_qxfer
f6ac5f3d 10987 ("osdata", annex, readbuf, offset, len, xfered_len,
07e059b5
VP
10988 &remote_protocol_packets[PACKET_qXfer_osdata]);
10989
dc146f7c
VP
10990 case TARGET_OBJECT_THREADS:
10991 gdb_assert (annex == NULL);
f6ac5f3d 10992 return remote_read_qxfer ("threads", annex, readbuf, offset, len,
9b409511 10993 xfered_len,
dc146f7c
VP
10994 &remote_protocol_packets[PACKET_qXfer_threads]);
10995
b3b9301e
PA
10996 case TARGET_OBJECT_TRACEFRAME_INFO:
10997 gdb_assert (annex == NULL);
10998 return remote_read_qxfer
f6ac5f3d 10999 ("traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 11000 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
11001
11002 case TARGET_OBJECT_FDPIC:
f6ac5f3d 11003 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
9b409511 11004 xfered_len,
78d85199 11005 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
11006
11007 case TARGET_OBJECT_OPENVMS_UIB:
f6ac5f3d 11008 return remote_read_qxfer ("uib", annex, readbuf, offset, len,
9b409511 11009 xfered_len,
169081d0
TG
11010 &remote_protocol_packets[PACKET_qXfer_uib]);
11011
9accd112 11012 case TARGET_OBJECT_BTRACE:
f6ac5f3d 11013 return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
9b409511 11014 xfered_len,
9accd112
MM
11015 &remote_protocol_packets[PACKET_qXfer_btrace]);
11016
f4abbc16 11017 case TARGET_OBJECT_BTRACE_CONF:
f6ac5f3d 11018 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
f4abbc16
MM
11019 len, xfered_len,
11020 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11021
c78fa86a 11022 case TARGET_OBJECT_EXEC_FILE:
f6ac5f3d 11023 return remote_read_qxfer ("exec-file", annex, readbuf, offset,
c78fa86a
GB
11024 len, xfered_len,
11025 &remote_protocol_packets[PACKET_qXfer_exec_file]);
11026
1e3ff5ad 11027 default:
2ed4b548 11028 return TARGET_XFER_E_IO;
c906108c
SS
11029 }
11030
0df8b418 11031 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 11032 large enough let the caller deal with it. */
ea9c271d 11033 if (len < get_remote_packet_size ())
2ed4b548 11034 return TARGET_XFER_E_IO;
ea9c271d 11035 len = get_remote_packet_size ();
1e3ff5ad 11036
23860348 11037 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 11038 if (!rs->remote_desc)
8a3fe4f8 11039 error (_("remote query is only available after target open"));
c906108c 11040
1e3ff5ad 11041 gdb_assert (annex != NULL);
4b8a223f 11042 gdb_assert (readbuf != NULL);
c906108c 11043
6d820c5c 11044 p2 = rs->buf;
c906108c
SS
11045 *p2++ = 'q';
11046 *p2++ = query_type;
11047
23860348
MS
11048 /* We used one buffer char for the remote protocol q command and
11049 another for the query type. As the remote protocol encapsulation
11050 uses 4 chars plus one extra in case we are debugging
11051 (remote_debug), we have PBUFZIZ - 7 left to pack the query
11052 string. */
c906108c 11053 i = 0;
ea9c271d 11054 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 11055 {
1e3ff5ad
AC
11056 /* Bad caller may have sent forbidden characters. */
11057 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11058 *p2++ = annex[i];
c906108c
SS
11059 i++;
11060 }
1e3ff5ad
AC
11061 *p2 = '\0';
11062 gdb_assert (annex[i] == '\0');
c906108c 11063
6d820c5c 11064 i = putpkt (rs->buf);
c5aa993b 11065 if (i < 0)
2ed4b548 11066 return TARGET_XFER_E_IO;
c906108c 11067
6d820c5c
DJ
11068 getpkt (&rs->buf, &rs->buf_size, 0);
11069 strcpy ((char *) readbuf, rs->buf);
c906108c 11070
9b409511 11071 *xfered_len = strlen ((char *) readbuf);
92ffd475 11072 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
c906108c
SS
11073}
11074
09c98b44
DB
11075/* Implementation of to_get_memory_xfer_limit. */
11076
f6ac5f3d
PA
11077ULONGEST
11078remote_target::get_memory_xfer_limit ()
09c98b44
DB
11079{
11080 return get_memory_write_packet_size ();
11081}
11082
f6ac5f3d
PA
11083int
11084remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11085 const gdb_byte *pattern, ULONGEST pattern_len,
11086 CORE_ADDR *found_addrp)
08388c79 11087{
f5656ead 11088 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
11089 struct remote_state *rs = get_remote_state ();
11090 int max_size = get_memory_write_packet_size ();
11091 struct packet_config *packet =
11092 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
11093 /* Number of packet bytes used to encode the pattern;
11094 this could be more than PATTERN_LEN due to escape characters. */
08388c79 11095 int escaped_pattern_len;
0df8b418 11096 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
11097 int used_pattern_len;
11098 int i;
11099 int found;
11100 ULONGEST found_addr;
11101
7cc244de
PA
11102 /* Don't go to the target if we don't have to. This is done before
11103 checking packet_config_support to avoid the possibility that a
11104 success for this edge case means the facility works in
11105 general. */
08388c79
DE
11106 if (pattern_len > search_space_len)
11107 return 0;
11108 if (pattern_len == 0)
11109 {
11110 *found_addrp = start_addr;
11111 return 1;
11112 }
11113
11114 /* If we already know the packet isn't supported, fall back to the simple
11115 way of searching memory. */
11116
4082afcc 11117 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
11118 {
11119 /* Target doesn't provided special support, fall back and use the
11120 standard support (copy memory and do the search here). */
f6ac5f3d 11121 return simple_search_memory (this, start_addr, search_space_len,
08388c79
DE
11122 pattern, pattern_len, found_addrp);
11123 }
11124
28439a30
PA
11125 /* Make sure the remote is pointing at the right process. */
11126 set_general_process ();
11127
08388c79
DE
11128 /* Insert header. */
11129 i = snprintf (rs->buf, max_size,
11130 "qSearch:memory:%s;%s;",
5af949e3 11131 phex_nz (start_addr, addr_size),
08388c79
DE
11132 phex_nz (search_space_len, sizeof (search_space_len)));
11133 max_size -= (i + 1);
11134
11135 /* Escape as much data as fits into rs->buf. */
11136 escaped_pattern_len =
124e13d9 11137 remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
08388c79
DE
11138 &used_pattern_len, max_size);
11139
11140 /* Bail if the pattern is too large. */
11141 if (used_pattern_len != pattern_len)
9b20d036 11142 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
11143
11144 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
11145 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
11146 || packet_ok (rs->buf, packet) != PACKET_OK)
11147 {
11148 /* The request may not have worked because the command is not
11149 supported. If so, fall back to the simple way. */
7cc244de 11150 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79 11151 {
f6ac5f3d 11152 return simple_search_memory (this, start_addr, search_space_len,
08388c79
DE
11153 pattern, pattern_len, found_addrp);
11154 }
11155 return -1;
11156 }
11157
11158 if (rs->buf[0] == '0')
11159 found = 0;
11160 else if (rs->buf[0] == '1')
11161 {
11162 found = 1;
11163 if (rs->buf[1] != ',')
10e0fa18 11164 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
11165 unpack_varlen_hex (rs->buf + 2, &found_addr);
11166 *found_addrp = found_addr;
11167 }
11168 else
10e0fa18 11169 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
11170
11171 return found;
11172}
11173
f6ac5f3d
PA
11174void
11175remote_target::rcmd (const char *command, struct ui_file *outbuf)
96baa820 11176{
d01949b6 11177 struct remote_state *rs = get_remote_state ();
2e9f7625 11178 char *p = rs->buf;
96baa820 11179
5d93a237 11180 if (!rs->remote_desc)
8a3fe4f8 11181 error (_("remote rcmd is only available after target open"));
96baa820 11182
23860348 11183 /* Send a NULL command across as an empty command. */
7be570e7
JM
11184 if (command == NULL)
11185 command = "";
11186
23860348 11187 /* The query prefix. */
2e9f7625
DJ
11188 strcpy (rs->buf, "qRcmd,");
11189 p = strchr (rs->buf, '\0');
96baa820 11190
3e43a32a
MS
11191 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
11192 > get_remote_packet_size ())
8a3fe4f8 11193 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 11194
23860348 11195 /* Encode the actual command. */
a30bf1f1 11196 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 11197
6d820c5c 11198 if (putpkt (rs->buf) < 0)
8a3fe4f8 11199 error (_("Communication problem with target."));
96baa820
JM
11200
11201 /* get/display the response */
11202 while (1)
11203 {
2e9f7625
DJ
11204 char *buf;
11205
00bf0b85 11206 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 11207 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 11208 rs->buf[0] = '\0';
5b37825d
PW
11209 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
11210 {
11211 /* Timeout. Continue to (try to) read responses.
11212 This is better than stopping with an error, assuming the stub
11213 is still executing the (long) monitor command.
11214 If needed, the user can interrupt gdb using C-c, obtaining
11215 an effect similar to stop on timeout. */
11216 continue;
11217 }
2e9f7625 11218 buf = rs->buf;
96baa820 11219 if (buf[0] == '\0')
8a3fe4f8 11220 error (_("Target does not support this command."));
96baa820
JM
11221 if (buf[0] == 'O' && buf[1] != 'K')
11222 {
23860348 11223 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
11224 continue;
11225 }
11226 if (strcmp (buf, "OK") == 0)
11227 break;
7be570e7
JM
11228 if (strlen (buf) == 3 && buf[0] == 'E'
11229 && isdigit (buf[1]) && isdigit (buf[2]))
11230 {
8a3fe4f8 11231 error (_("Protocol error with Rcmd"));
7be570e7 11232 }
96baa820
JM
11233 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11234 {
11235 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 11236
96baa820
JM
11237 fputc_unfiltered (c, outbuf);
11238 }
11239 break;
11240 }
11241}
11242
f6ac5f3d
PA
11243std::vector<mem_region>
11244remote_target::memory_map ()
fd79ecee 11245{
a664f67e 11246 std::vector<mem_region> result;
9018be22 11247 gdb::optional<gdb::char_vector> text
8b88a78e 11248 = target_read_stralloc (current_top_target (), TARGET_OBJECT_MEMORY_MAP, NULL);
fd79ecee
DJ
11249
11250 if (text)
9018be22 11251 result = parse_memory_map (text->data ());
fd79ecee
DJ
11252
11253 return result;
11254}
11255
c906108c 11256static void
ac88e2de 11257packet_command (const char *args, int from_tty)
c906108c 11258{
6b8edb51 11259 remote_target *remote = get_current_remote_target ();
c906108c 11260
6b8edb51 11261 if (remote == nullptr)
8a3fe4f8 11262 error (_("command can only be used with remote target"));
c906108c 11263
6b8edb51
PA
11264 remote->packet_command (args, from_tty);
11265}
11266
11267void
11268remote_target::packet_command (const char *args, int from_tty)
11269{
c5aa993b 11270 if (!args)
8a3fe4f8 11271 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
11272
11273 puts_filtered ("sending: ");
11274 print_packet (args);
11275 puts_filtered ("\n");
11276 putpkt (args);
11277
6b8edb51
PA
11278 remote_state *rs = get_remote_state ();
11279
6d820c5c 11280 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 11281 puts_filtered ("received: ");
6d820c5c 11282 print_packet (rs->buf);
c906108c
SS
11283 puts_filtered ("\n");
11284}
11285
11286#if 0
23860348 11287/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 11288
a14ed312 11289static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 11290
a14ed312 11291static void threadset_test_cmd (char *cmd, int tty);
c906108c 11292
a14ed312 11293static void threadalive_test (char *cmd, int tty);
c906108c 11294
a14ed312 11295static void threadlist_test_cmd (char *cmd, int tty);
c906108c 11296
23860348 11297int get_and_display_threadinfo (threadref *ref);
c906108c 11298
a14ed312 11299static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 11300
23860348 11301static int thread_display_step (threadref *ref, void *context);
c906108c 11302
a14ed312 11303static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 11304
a14ed312 11305static void init_remote_threadtests (void);
c906108c 11306
23860348 11307#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
11308
11309static void
0b39b52e 11310threadset_test_cmd (const char *cmd, int tty)
c906108c
SS
11311{
11312 int sample_thread = SAMPLE_THREAD;
11313
a3f17187 11314 printf_filtered (_("Remote threadset test\n"));
79d7f229 11315 set_general_thread (sample_thread);
c906108c
SS
11316}
11317
11318
11319static void
0b39b52e 11320threadalive_test (const char *cmd, int tty)
c906108c
SS
11321{
11322 int sample_thread = SAMPLE_THREAD;
e99b03dc 11323 int pid = inferior_ptid.pid ();
fd79271b 11324 ptid_t ptid = ptid_t (pid, sample_thread, 0);
c906108c 11325
79d7f229 11326 if (remote_thread_alive (ptid))
c906108c
SS
11327 printf_filtered ("PASS: Thread alive test\n");
11328 else
11329 printf_filtered ("FAIL: Thread alive test\n");
11330}
11331
23860348 11332void output_threadid (char *title, threadref *ref);
c906108c
SS
11333
11334void
fba45db2 11335output_threadid (char *title, threadref *ref)
c906108c
SS
11336{
11337 char hexid[20];
11338
23860348 11339 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
11340 hexid[16] = 0;
11341 printf_filtered ("%s %s\n", title, (&hexid[0]));
11342}
11343
11344static void
0b39b52e 11345threadlist_test_cmd (const char *cmd, int tty)
c906108c
SS
11346{
11347 int startflag = 1;
11348 threadref nextthread;
11349 int done, result_count;
11350 threadref threadlist[3];
11351
11352 printf_filtered ("Remote Threadlist test\n");
11353 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11354 &result_count, &threadlist[0]))
11355 printf_filtered ("FAIL: threadlist test\n");
11356 else
11357 {
11358 threadref *scan = threadlist;
11359 threadref *limit = scan + result_count;
11360
11361 while (scan < limit)
11362 output_threadid (" thread ", scan++);
11363 }
11364}
11365
11366void
fba45db2 11367display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
11368{
11369 output_threadid ("Threadid: ", &info->threadid);
11370 printf_filtered ("Name: %s\n ", info->shortname);
11371 printf_filtered ("State: %s\n", info->display);
11372 printf_filtered ("other: %s\n\n", info->more_display);
11373}
11374
11375int
fba45db2 11376get_and_display_threadinfo (threadref *ref)
c906108c
SS
11377{
11378 int result;
11379 int set;
11380 struct gdb_ext_thread_info threadinfo;
11381
11382 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11383 | TAG_MOREDISPLAY | TAG_DISPLAY;
11384 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11385 display_thread_info (&threadinfo);
11386 return result;
11387}
11388
11389static void
0b39b52e 11390threadinfo_test_cmd (const char *cmd, int tty)
c906108c
SS
11391{
11392 int athread = SAMPLE_THREAD;
11393 threadref thread;
11394 int set;
11395
11396 int_to_threadref (&thread, athread);
11397 printf_filtered ("Remote Threadinfo test\n");
11398 if (!get_and_display_threadinfo (&thread))
11399 printf_filtered ("FAIL cannot get thread info\n");
11400}
11401
11402static int
fba45db2 11403thread_display_step (threadref *ref, void *context)
c906108c
SS
11404{
11405 /* output_threadid(" threadstep ",ref); *//* simple test */
11406 return get_and_display_threadinfo (ref);
11407}
11408
11409static void
0b39b52e 11410threadlist_update_test_cmd (const char *cmd, int tty)
c906108c
SS
11411{
11412 printf_filtered ("Remote Threadlist update test\n");
11413 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11414}
11415
11416static void
11417init_remote_threadtests (void)
11418{
3e43a32a
MS
11419 add_com ("tlist", class_obscure, threadlist_test_cmd,
11420 _("Fetch and print the remote list of "
11421 "thread identifiers, one pkt only"));
c906108c 11422 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 11423 _("Fetch and display info about one thread"));
c906108c 11424 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 11425 _("Test setting to a different thread"));
c906108c 11426 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 11427 _("Iterate through updating all remote thread info"));
c906108c 11428 add_com ("talive", class_obscure, threadalive_test,
1bedd215 11429 _(" Remote thread alive test "));
c906108c
SS
11430}
11431
11432#endif /* 0 */
11433
f3fb8c85
MS
11434/* Convert a thread ID to a string. Returns the string in a static
11435 buffer. */
11436
f6ac5f3d
PA
11437const char *
11438remote_target::pid_to_str (ptid_t ptid)
f3fb8c85 11439{
79d7f229 11440 static char buf[64];
82f73884 11441 struct remote_state *rs = get_remote_state ();
f3fb8c85 11442
d7e15655 11443 if (ptid == null_ptid)
7cee1e54 11444 return normal_pid_to_str (ptid);
0e998d96 11445 else if (ptid.is_pid ())
ecd0ada5
PA
11446 {
11447 /* Printing an inferior target id. */
11448
11449 /* When multi-process extensions are off, there's no way in the
11450 remote protocol to know the remote process id, if there's any
11451 at all. There's one exception --- when we're connected with
11452 target extended-remote, and we manually attached to a process
11453 with "attach PID". We don't record anywhere a flag that
11454 allows us to distinguish that case from the case of
11455 connecting with extended-remote and the stub already being
11456 attached to a process, and reporting yes to qAttached, hence
11457 no smart special casing here. */
11458 if (!remote_multi_process_p (rs))
11459 {
11460 xsnprintf (buf, sizeof buf, "Remote target");
11461 return buf;
11462 }
11463
11464 return normal_pid_to_str (ptid);
82f73884 11465 }
ecd0ada5 11466 else
79d7f229 11467 {
d7e15655 11468 if (magic_null_ptid == ptid)
ecd0ada5 11469 xsnprintf (buf, sizeof buf, "Thread <main>");
8020350c 11470 else if (remote_multi_process_p (rs))
e38504b3 11471 if (ptid.lwp () == 0)
de0d863e
DB
11472 return normal_pid_to_str (ptid);
11473 else
11474 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
e38504b3 11475 ptid.pid (), ptid.lwp ());
ecd0ada5
PA
11476 else
11477 xsnprintf (buf, sizeof buf, "Thread %ld",
e38504b3 11478 ptid.lwp ());
79d7f229
PA
11479 return buf;
11480 }
f3fb8c85
MS
11481}
11482
38691318
KB
11483/* Get the address of the thread local variable in OBJFILE which is
11484 stored at OFFSET within the thread local storage for thread PTID. */
11485
f6ac5f3d
PA
11486CORE_ADDR
11487remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11488 CORE_ADDR offset)
38691318 11489{
4082afcc 11490 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
11491 {
11492 struct remote_state *rs = get_remote_state ();
6d820c5c 11493 char *p = rs->buf;
82f73884 11494 char *endp = rs->buf + get_remote_packet_size ();
571dd617 11495 enum packet_result result;
38691318
KB
11496
11497 strcpy (p, "qGetTLSAddr:");
11498 p += strlen (p);
82f73884 11499 p = write_ptid (p, endp, ptid);
38691318
KB
11500 *p++ = ',';
11501 p += hexnumstr (p, offset);
11502 *p++ = ',';
11503 p += hexnumstr (p, lm);
11504 *p++ = '\0';
11505
6d820c5c
DJ
11506 putpkt (rs->buf);
11507 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
11508 result = packet_ok (rs->buf,
11509 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11510 if (result == PACKET_OK)
38691318
KB
11511 {
11512 ULONGEST result;
11513
6d820c5c 11514 unpack_varlen_hex (rs->buf, &result);
38691318
KB
11515 return result;
11516 }
571dd617 11517 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11518 throw_error (TLS_GENERIC_ERROR,
11519 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11520 else
109c3e39
AC
11521 throw_error (TLS_GENERIC_ERROR,
11522 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11523 }
11524 else
109c3e39
AC
11525 throw_error (TLS_GENERIC_ERROR,
11526 _("TLS not supported or disabled on this target"));
38691318
KB
11527 /* Not reached. */
11528 return 0;
11529}
11530
711e434b
PM
11531/* Provide thread local base, i.e. Thread Information Block address.
11532 Returns 1 if ptid is found and thread_local_base is non zero. */
11533
57810aa7 11534bool
f6ac5f3d 11535remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
711e434b 11536{
4082afcc 11537 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11538 {
11539 struct remote_state *rs = get_remote_state ();
11540 char *p = rs->buf;
11541 char *endp = rs->buf + get_remote_packet_size ();
11542 enum packet_result result;
11543
11544 strcpy (p, "qGetTIBAddr:");
11545 p += strlen (p);
11546 p = write_ptid (p, endp, ptid);
11547 *p++ = '\0';
11548
11549 putpkt (rs->buf);
11550 getpkt (&rs->buf, &rs->buf_size, 0);
11551 result = packet_ok (rs->buf,
11552 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11553 if (result == PACKET_OK)
11554 {
11555 ULONGEST result;
11556
11557 unpack_varlen_hex (rs->buf, &result);
11558 if (addr)
11559 *addr = (CORE_ADDR) result;
57810aa7 11560 return true;
711e434b
PM
11561 }
11562 else if (result == PACKET_UNKNOWN)
11563 error (_("Remote target doesn't support qGetTIBAddr packet"));
11564 else
11565 error (_("Remote target failed to process qGetTIBAddr request"));
11566 }
11567 else
11568 error (_("qGetTIBAddr not supported or disabled on this target"));
11569 /* Not reached. */
57810aa7 11570 return false;
711e434b
PM
11571}
11572
29709017
DJ
11573/* Support for inferring a target description based on the current
11574 architecture and the size of a 'g' packet. While the 'g' packet
11575 can have any size (since optional registers can be left off the
11576 end), some sizes are easily recognizable given knowledge of the
11577 approximate architecture. */
11578
11579struct remote_g_packet_guess
11580{
11581 int bytes;
11582 const struct target_desc *tdesc;
11583};
11584typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11585DEF_VEC_O(remote_g_packet_guess_s);
11586
11587struct remote_g_packet_data
11588{
11589 VEC(remote_g_packet_guess_s) *guesses;
11590};
11591
11592static struct gdbarch_data *remote_g_packet_data_handle;
11593
11594static void *
11595remote_g_packet_data_init (struct obstack *obstack)
11596{
11597 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11598}
11599
11600void
11601register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11602 const struct target_desc *tdesc)
11603{
11604 struct remote_g_packet_data *data
19ba03f4
SM
11605 = ((struct remote_g_packet_data *)
11606 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11607 struct remote_g_packet_guess new_guess, *guess;
11608 int ix;
11609
11610 gdb_assert (tdesc != NULL);
11611
11612 for (ix = 0;
11613 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11614 ix++)
11615 if (guess->bytes == bytes)
11616 internal_error (__FILE__, __LINE__,
9b20d036 11617 _("Duplicate g packet description added for size %d"),
29709017
DJ
11618 bytes);
11619
11620 new_guess.bytes = bytes;
11621 new_guess.tdesc = tdesc;
11622 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11623}
11624
d962ef82
DJ
11625/* Return 1 if remote_read_description would do anything on this target
11626 and architecture, 0 otherwise. */
11627
11628static int
11629remote_read_description_p (struct target_ops *target)
11630{
11631 struct remote_g_packet_data *data
19ba03f4
SM
11632 = ((struct remote_g_packet_data *)
11633 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82
DJ
11634
11635 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11636 return 1;
11637
11638 return 0;
11639}
11640
f6ac5f3d
PA
11641const struct target_desc *
11642remote_target::read_description ()
29709017
DJ
11643{
11644 struct remote_g_packet_data *data
19ba03f4
SM
11645 = ((struct remote_g_packet_data *)
11646 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11647
d962ef82
DJ
11648 /* Do not try this during initial connection, when we do not know
11649 whether there is a running but stopped thread. */
d7e15655 11650 if (!target_has_execution || inferior_ptid == null_ptid)
b6a8c27b 11651 return beneath ()->read_description ();
d962ef82 11652
29709017
DJ
11653 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11654 {
11655 struct remote_g_packet_guess *guess;
11656 int ix;
11657 int bytes = send_g_packet ();
11658
11659 for (ix = 0;
11660 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11661 ix++)
11662 if (guess->bytes == bytes)
11663 return guess->tdesc;
11664
11665 /* We discard the g packet. A minor optimization would be to
11666 hold on to it, and fill the register cache once we have selected
11667 an architecture, but it's too tricky to do safely. */
11668 }
11669
b6a8c27b 11670 return beneath ()->read_description ();
29709017
DJ
11671}
11672
a6b151f1
DJ
11673/* Remote file transfer support. This is host-initiated I/O, not
11674 target-initiated; for target-initiated, see remote-fileio.c. */
11675
11676/* If *LEFT is at least the length of STRING, copy STRING to
11677 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11678 decrease *LEFT. Otherwise raise an error. */
11679
11680static void
a121b7c1 11681remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11682{
11683 int len = strlen (string);
11684
11685 if (len > *left)
11686 error (_("Packet too long for target."));
11687
11688 memcpy (*buffer, string, len);
11689 *buffer += len;
11690 *left -= len;
11691
11692 /* NUL-terminate the buffer as a convenience, if there is
11693 room. */
11694 if (*left)
11695 **buffer = '\0';
11696}
11697
11698/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11699 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11700 decrease *LEFT. Otherwise raise an error. */
11701
11702static void
11703remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11704 int len)
11705{
11706 if (2 * len > *left)
11707 error (_("Packet too long for target."));
11708
11709 bin2hex (bytes, *buffer, len);
11710 *buffer += 2 * len;
11711 *left -= 2 * len;
11712
11713 /* NUL-terminate the buffer as a convenience, if there is
11714 room. */
11715 if (*left)
11716 **buffer = '\0';
11717}
11718
11719/* If *LEFT is large enough, convert VALUE to hex and add it to
11720 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11721 decrease *LEFT. Otherwise raise an error. */
11722
11723static void
11724remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11725{
11726 int len = hexnumlen (value);
11727
11728 if (len > *left)
11729 error (_("Packet too long for target."));
11730
11731 hexnumstr (*buffer, value);
11732 *buffer += len;
11733 *left -= len;
11734
11735 /* NUL-terminate the buffer as a convenience, if there is
11736 room. */
11737 if (*left)
11738 **buffer = '\0';
11739}
11740
11741/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11742 value, *REMOTE_ERRNO to the remote error number or zero if none
11743 was included, and *ATTACHMENT to point to the start of the annex
11744 if any. The length of the packet isn't needed here; there may
11745 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11746
11747 Return 0 if the packet could be parsed, -1 if it could not. If
11748 -1 is returned, the other variables may not be initialized. */
11749
11750static int
11751remote_hostio_parse_result (char *buffer, int *retcode,
11752 int *remote_errno, char **attachment)
11753{
11754 char *p, *p2;
11755
11756 *remote_errno = 0;
11757 *attachment = NULL;
11758
11759 if (buffer[0] != 'F')
11760 return -1;
11761
11762 errno = 0;
11763 *retcode = strtol (&buffer[1], &p, 16);
11764 if (errno != 0 || p == &buffer[1])
11765 return -1;
11766
11767 /* Check for ",errno". */
11768 if (*p == ',')
11769 {
11770 errno = 0;
11771 *remote_errno = strtol (p + 1, &p2, 16);
11772 if (errno != 0 || p + 1 == p2)
11773 return -1;
11774 p = p2;
11775 }
11776
11777 /* Check for ";attachment". If there is no attachment, the
11778 packet should end here. */
11779 if (*p == ';')
11780 {
11781 *attachment = p + 1;
11782 return 0;
11783 }
11784 else if (*p == '\0')
11785 return 0;
11786 else
11787 return -1;
11788}
11789
11790/* Send a prepared I/O packet to the target and read its response.
11791 The prepared packet is in the global RS->BUF before this function
11792 is called, and the answer is there when we return.
11793
11794 COMMAND_BYTES is the length of the request to send, which may include
11795 binary data. WHICH_PACKET is the packet configuration to check
11796 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11797 is set to the error number and -1 is returned. Otherwise the value
11798 returned by the function is returned.
11799
11800 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11801 attachment is expected; an error will be reported if there's a
11802 mismatch. If one is found, *ATTACHMENT will be set to point into
11803 the packet buffer and *ATTACHMENT_LEN will be set to the
11804 attachment's length. */
11805
6b8edb51
PA
11806int
11807remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
11808 int *remote_errno, char **attachment,
11809 int *attachment_len)
a6b151f1
DJ
11810{
11811 struct remote_state *rs = get_remote_state ();
11812 int ret, bytes_read;
11813 char *attachment_tmp;
11814
20db9c52 11815 if (packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
11816 {
11817 *remote_errno = FILEIO_ENOSYS;
11818 return -1;
11819 }
11820
11821 putpkt_binary (rs->buf, command_bytes);
11822 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11823
11824 /* If it timed out, something is wrong. Don't try to parse the
11825 buffer. */
11826 if (bytes_read < 0)
11827 {
11828 *remote_errno = FILEIO_EINVAL;
11829 return -1;
11830 }
11831
11832 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11833 {
11834 case PACKET_ERROR:
11835 *remote_errno = FILEIO_EINVAL;
11836 return -1;
11837 case PACKET_UNKNOWN:
11838 *remote_errno = FILEIO_ENOSYS;
11839 return -1;
11840 case PACKET_OK:
11841 break;
11842 }
11843
11844 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11845 &attachment_tmp))
11846 {
11847 *remote_errno = FILEIO_EINVAL;
11848 return -1;
11849 }
11850
11851 /* Make sure we saw an attachment if and only if we expected one. */
11852 if ((attachment_tmp == NULL && attachment != NULL)
11853 || (attachment_tmp != NULL && attachment == NULL))
11854 {
11855 *remote_errno = FILEIO_EINVAL;
11856 return -1;
11857 }
11858
11859 /* If an attachment was found, it must point into the packet buffer;
11860 work out how many bytes there were. */
11861 if (attachment_tmp != NULL)
11862 {
11863 *attachment = attachment_tmp;
11864 *attachment_len = bytes_read - (*attachment - rs->buf);
11865 }
11866
11867 return ret;
11868}
11869
dd194f6b 11870/* See declaration.h. */
80152258 11871
dd194f6b
PA
11872void
11873readahead_cache::invalidate ()
80152258 11874{
dd194f6b 11875 this->fd = -1;
80152258
PA
11876}
11877
dd194f6b 11878/* See declaration.h. */
80152258 11879
dd194f6b
PA
11880void
11881readahead_cache::invalidate_fd (int fd)
80152258 11882{
dd194f6b
PA
11883 if (this->fd == fd)
11884 this->fd = -1;
80152258
PA
11885}
11886
15a201c8
GB
11887/* Set the filesystem remote_hostio functions that take FILENAME
11888 arguments will use. Return 0 on success, or -1 if an error
11889 occurs (and set *REMOTE_ERRNO). */
11890
6b8edb51
PA
11891int
11892remote_target::remote_hostio_set_filesystem (struct inferior *inf,
11893 int *remote_errno)
15a201c8
GB
11894{
11895 struct remote_state *rs = get_remote_state ();
11896 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11897 char *p = rs->buf;
11898 int left = get_remote_packet_size () - 1;
11899 char arg[9];
11900 int ret;
11901
11902 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11903 return 0;
11904
11905 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11906 return 0;
11907
11908 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11909
11910 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11911 remote_buffer_add_string (&p, &left, arg);
11912
11913 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11914 remote_errno, NULL, NULL);
11915
11916 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11917 return 0;
11918
11919 if (ret == 0)
11920 rs->fs_pid = required_pid;
11921
11922 return ret;
11923}
11924
12e2a5fd 11925/* Implementation of to_fileio_open. */
a6b151f1 11926
6b8edb51
PA
11927int
11928remote_target::remote_hostio_open (inferior *inf, const char *filename,
11929 int flags, int mode, int warn_if_slow,
11930 int *remote_errno)
a6b151f1
DJ
11931{
11932 struct remote_state *rs = get_remote_state ();
11933 char *p = rs->buf;
11934 int left = get_remote_packet_size () - 1;
11935
4313b8c0
GB
11936 if (warn_if_slow)
11937 {
11938 static int warning_issued = 0;
11939
11940 printf_unfiltered (_("Reading %s from remote target...\n"),
11941 filename);
11942
11943 if (!warning_issued)
11944 {
11945 warning (_("File transfers from remote targets can be slow."
11946 " Use \"set sysroot\" to access files locally"
11947 " instead."));
11948 warning_issued = 1;
11949 }
11950 }
11951
15a201c8
GB
11952 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11953 return -1;
11954
a6b151f1
DJ
11955 remote_buffer_add_string (&p, &left, "vFile:open:");
11956
11957 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11958 strlen (filename));
11959 remote_buffer_add_string (&p, &left, ",");
11960
11961 remote_buffer_add_int (&p, &left, flags);
11962 remote_buffer_add_string (&p, &left, ",");
11963
11964 remote_buffer_add_int (&p, &left, mode);
11965
11966 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11967 remote_errno, NULL, NULL);
11968}
11969
f6ac5f3d
PA
11970int
11971remote_target::fileio_open (struct inferior *inf, const char *filename,
11972 int flags, int mode, int warn_if_slow,
11973 int *remote_errno)
11974{
6b8edb51 11975 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
f6ac5f3d
PA
11976 remote_errno);
11977}
11978
12e2a5fd 11979/* Implementation of to_fileio_pwrite. */
a6b151f1 11980
6b8edb51
PA
11981int
11982remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
11983 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11984{
11985 struct remote_state *rs = get_remote_state ();
11986 char *p = rs->buf;
11987 int left = get_remote_packet_size ();
11988 int out_len;
11989
dd194f6b 11990 rs->readahead_cache.invalidate_fd (fd);
80152258 11991
a6b151f1
DJ
11992 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11993
11994 remote_buffer_add_int (&p, &left, fd);
11995 remote_buffer_add_string (&p, &left, ",");
11996
11997 remote_buffer_add_int (&p, &left, offset);
11998 remote_buffer_add_string (&p, &left, ",");
11999
124e13d9 12000 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
a6b151f1
DJ
12001 get_remote_packet_size () - (p - rs->buf));
12002
12003 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
12004 remote_errno, NULL, NULL);
12005}
12006
f6ac5f3d
PA
12007int
12008remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12009 ULONGEST offset, int *remote_errno)
12010{
6b8edb51 12011 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
f6ac5f3d
PA
12012}
12013
80152258
PA
12014/* Helper for the implementation of to_fileio_pread. Read the file
12015 from the remote side with vFile:pread. */
a6b151f1 12016
6b8edb51
PA
12017int
12018remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12019 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
12020{
12021 struct remote_state *rs = get_remote_state ();
12022 char *p = rs->buf;
12023 char *attachment;
12024 int left = get_remote_packet_size ();
12025 int ret, attachment_len;
12026 int read_len;
12027
12028 remote_buffer_add_string (&p, &left, "vFile:pread:");
12029
12030 remote_buffer_add_int (&p, &left, fd);
12031 remote_buffer_add_string (&p, &left, ",");
12032
12033 remote_buffer_add_int (&p, &left, len);
12034 remote_buffer_add_string (&p, &left, ",");
12035
12036 remote_buffer_add_int (&p, &left, offset);
12037
12038 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
12039 remote_errno, &attachment,
12040 &attachment_len);
12041
12042 if (ret < 0)
12043 return ret;
12044
bc20a4af 12045 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
12046 read_buf, len);
12047 if (read_len != ret)
12048 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12049
12050 return ret;
12051}
12052
dd194f6b 12053/* See declaration.h. */
80152258 12054
dd194f6b
PA
12055int
12056readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12057 ULONGEST offset)
80152258 12058{
dd194f6b
PA
12059 if (this->fd == fd
12060 && this->offset <= offset
12061 && offset < this->offset + this->bufsize)
80152258 12062 {
dd194f6b 12063 ULONGEST max = this->offset + this->bufsize;
80152258
PA
12064
12065 if (offset + len > max)
12066 len = max - offset;
12067
dd194f6b 12068 memcpy (read_buf, this->buf + offset - this->offset, len);
80152258
PA
12069 return len;
12070 }
12071
12072 return 0;
12073}
12074
12075/* Implementation of to_fileio_pread. */
12076
6b8edb51
PA
12077int
12078remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12079 ULONGEST offset, int *remote_errno)
80152258
PA
12080{
12081 int ret;
12082 struct remote_state *rs = get_remote_state ();
dd194f6b 12083 readahead_cache *cache = &rs->readahead_cache;
80152258 12084
dd194f6b 12085 ret = cache->pread (fd, read_buf, len, offset);
80152258
PA
12086 if (ret > 0)
12087 {
12088 cache->hit_count++;
12089
12090 if (remote_debug)
12091 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
12092 pulongest (cache->hit_count));
12093 return ret;
12094 }
12095
12096 cache->miss_count++;
12097 if (remote_debug)
12098 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
12099 pulongest (cache->miss_count));
12100
12101 cache->fd = fd;
12102 cache->offset = offset;
12103 cache->bufsize = get_remote_packet_size ();
224c3ddb 12104 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258 12105
6b8edb51 12106 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
80152258
PA
12107 cache->offset, remote_errno);
12108 if (ret <= 0)
12109 {
dd194f6b 12110 cache->invalidate_fd (fd);
80152258
PA
12111 return ret;
12112 }
12113
12114 cache->bufsize = ret;
dd194f6b 12115 return cache->pread (fd, read_buf, len, offset);
80152258
PA
12116}
12117
f6ac5f3d
PA
12118int
12119remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12120 ULONGEST offset, int *remote_errno)
12121{
6b8edb51 12122 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
f6ac5f3d
PA
12123}
12124
12e2a5fd 12125/* Implementation of to_fileio_close. */
a6b151f1 12126
6b8edb51
PA
12127int
12128remote_target::remote_hostio_close (int fd, int *remote_errno)
a6b151f1
DJ
12129{
12130 struct remote_state *rs = get_remote_state ();
12131 char *p = rs->buf;
12132 int left = get_remote_packet_size () - 1;
12133
dd194f6b 12134 rs->readahead_cache.invalidate_fd (fd);
80152258 12135
a6b151f1
DJ
12136 remote_buffer_add_string (&p, &left, "vFile:close:");
12137
12138 remote_buffer_add_int (&p, &left, fd);
12139
12140 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
12141 remote_errno, NULL, NULL);
12142}
12143
f6ac5f3d
PA
12144int
12145remote_target::fileio_close (int fd, int *remote_errno)
12146{
6b8edb51 12147 return remote_hostio_close (fd, remote_errno);
f6ac5f3d
PA
12148}
12149
12e2a5fd 12150/* Implementation of to_fileio_unlink. */
a6b151f1 12151
6b8edb51
PA
12152int
12153remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12154 int *remote_errno)
a6b151f1
DJ
12155{
12156 struct remote_state *rs = get_remote_state ();
12157 char *p = rs->buf;
12158 int left = get_remote_packet_size () - 1;
12159
15a201c8
GB
12160 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12161 return -1;
12162
a6b151f1
DJ
12163 remote_buffer_add_string (&p, &left, "vFile:unlink:");
12164
12165 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12166 strlen (filename));
12167
12168 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
12169 remote_errno, NULL, NULL);
12170}
12171
f6ac5f3d
PA
12172int
12173remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12174 int *remote_errno)
12175{
6b8edb51 12176 return remote_hostio_unlink (inf, filename, remote_errno);
f6ac5f3d
PA
12177}
12178
12e2a5fd 12179/* Implementation of to_fileio_readlink. */
b9e7b9c3 12180
f6ac5f3d
PA
12181gdb::optional<std::string>
12182remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12183 int *remote_errno)
b9e7b9c3
UW
12184{
12185 struct remote_state *rs = get_remote_state ();
12186 char *p = rs->buf;
12187 char *attachment;
12188 int left = get_remote_packet_size ();
12189 int len, attachment_len;
12190 int read_len;
b9e7b9c3 12191
15a201c8 12192 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
e0d3522b 12193 return {};
15a201c8 12194
b9e7b9c3
UW
12195 remote_buffer_add_string (&p, &left, "vFile:readlink:");
12196
12197 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12198 strlen (filename));
12199
12200 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
12201 remote_errno, &attachment,
12202 &attachment_len);
12203
12204 if (len < 0)
e0d3522b 12205 return {};
b9e7b9c3 12206
e0d3522b 12207 std::string ret (len, '\0');
b9e7b9c3 12208
bc20a4af 12209 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
e0d3522b 12210 (gdb_byte *) &ret[0], len);
b9e7b9c3
UW
12211 if (read_len != len)
12212 error (_("Readlink returned %d, but %d bytes."), len, read_len);
12213
b9e7b9c3
UW
12214 return ret;
12215}
12216
12e2a5fd 12217/* Implementation of to_fileio_fstat. */
0a93529c 12218
f6ac5f3d
PA
12219int
12220remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
0a93529c
GB
12221{
12222 struct remote_state *rs = get_remote_state ();
12223 char *p = rs->buf;
12224 int left = get_remote_packet_size ();
12225 int attachment_len, ret;
12226 char *attachment;
12227 struct fio_stat fst;
12228 int read_len;
12229
464b0089
GB
12230 remote_buffer_add_string (&p, &left, "vFile:fstat:");
12231
12232 remote_buffer_add_int (&p, &left, fd);
12233
12234 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
12235 remote_errno, &attachment,
12236 &attachment_len);
12237 if (ret < 0)
0a93529c 12238 {
464b0089
GB
12239 if (*remote_errno != FILEIO_ENOSYS)
12240 return ret;
12241
0a93529c
GB
12242 /* Strictly we should return -1, ENOSYS here, but when
12243 "set sysroot remote:" was implemented in August 2008
12244 BFD's need for a stat function was sidestepped with
12245 this hack. This was not remedied until March 2015
12246 so we retain the previous behavior to avoid breaking
12247 compatibility.
12248
12249 Note that the memset is a March 2015 addition; older
12250 GDBs set st_size *and nothing else* so the structure
12251 would have garbage in all other fields. This might
12252 break something but retaining the previous behavior
12253 here would be just too wrong. */
12254
12255 memset (st, 0, sizeof (struct stat));
12256 st->st_size = INT_MAX;
12257 return 0;
12258 }
12259
0a93529c
GB
12260 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12261 (gdb_byte *) &fst, sizeof (fst));
12262
12263 if (read_len != ret)
12264 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12265
12266 if (read_len != sizeof (fst))
12267 error (_("vFile:fstat returned %d bytes, but expecting %d."),
12268 read_len, (int) sizeof (fst));
12269
12270 remote_fileio_to_host_stat (&fst, st);
12271
12272 return 0;
12273}
12274
12e2a5fd 12275/* Implementation of to_filesystem_is_local. */
e3dd7556 12276
57810aa7 12277bool
f6ac5f3d 12278remote_target::filesystem_is_local ()
e3dd7556
GB
12279{
12280 /* Valgrind GDB presents itself as a remote target but works
12281 on the local filesystem: it does not implement remote get
12282 and users are not expected to set a sysroot. To handle
12283 this case we treat the remote filesystem as local if the
12284 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12285 does not support vFile:open. */
a3be80c3 12286 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
12287 {
12288 enum packet_support ps = packet_support (PACKET_vFile_open);
12289
12290 if (ps == PACKET_SUPPORT_UNKNOWN)
12291 {
12292 int fd, remote_errno;
12293
12294 /* Try opening a file to probe support. The supplied
12295 filename is irrelevant, we only care about whether
12296 the stub recognizes the packet or not. */
6b8edb51 12297 fd = remote_hostio_open (NULL, "just probing",
4313b8c0 12298 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
12299 &remote_errno);
12300
12301 if (fd >= 0)
6b8edb51 12302 remote_hostio_close (fd, &remote_errno);
e3dd7556
GB
12303
12304 ps = packet_support (PACKET_vFile_open);
12305 }
12306
12307 if (ps == PACKET_DISABLE)
12308 {
12309 static int warning_issued = 0;
12310
12311 if (!warning_issued)
12312 {
12313 warning (_("remote target does not support file"
12314 " transfer, attempting to access files"
12315 " from local filesystem."));
12316 warning_issued = 1;
12317 }
12318
57810aa7 12319 return true;
e3dd7556
GB
12320 }
12321 }
12322
57810aa7 12323 return false;
e3dd7556
GB
12324}
12325
a6b151f1
DJ
12326static int
12327remote_fileio_errno_to_host (int errnum)
12328{
12329 switch (errnum)
12330 {
12331 case FILEIO_EPERM:
12332 return EPERM;
12333 case FILEIO_ENOENT:
12334 return ENOENT;
12335 case FILEIO_EINTR:
12336 return EINTR;
12337 case FILEIO_EIO:
12338 return EIO;
12339 case FILEIO_EBADF:
12340 return EBADF;
12341 case FILEIO_EACCES:
12342 return EACCES;
12343 case FILEIO_EFAULT:
12344 return EFAULT;
12345 case FILEIO_EBUSY:
12346 return EBUSY;
12347 case FILEIO_EEXIST:
12348 return EEXIST;
12349 case FILEIO_ENODEV:
12350 return ENODEV;
12351 case FILEIO_ENOTDIR:
12352 return ENOTDIR;
12353 case FILEIO_EISDIR:
12354 return EISDIR;
12355 case FILEIO_EINVAL:
12356 return EINVAL;
12357 case FILEIO_ENFILE:
12358 return ENFILE;
12359 case FILEIO_EMFILE:
12360 return EMFILE;
12361 case FILEIO_EFBIG:
12362 return EFBIG;
12363 case FILEIO_ENOSPC:
12364 return ENOSPC;
12365 case FILEIO_ESPIPE:
12366 return ESPIPE;
12367 case FILEIO_EROFS:
12368 return EROFS;
12369 case FILEIO_ENOSYS:
12370 return ENOSYS;
12371 case FILEIO_ENAMETOOLONG:
12372 return ENAMETOOLONG;
12373 }
12374 return -1;
12375}
12376
12377static char *
12378remote_hostio_error (int errnum)
12379{
12380 int host_error = remote_fileio_errno_to_host (errnum);
12381
12382 if (host_error == -1)
12383 error (_("Unknown remote I/O error %d"), errnum);
12384 else
12385 error (_("Remote I/O error: %s"), safe_strerror (host_error));
12386}
12387
440b7aec
PA
12388/* A RAII wrapper around a remote file descriptor. */
12389
12390class scoped_remote_fd
a6b151f1 12391{
440b7aec 12392public:
6b8edb51
PA
12393 scoped_remote_fd (remote_target *remote, int fd)
12394 : m_remote (remote), m_fd (fd)
440b7aec
PA
12395 {
12396 }
a6b151f1 12397
440b7aec
PA
12398 ~scoped_remote_fd ()
12399 {
12400 if (m_fd != -1)
12401 {
12402 try
12403 {
12404 int remote_errno;
6b8edb51 12405 m_remote->remote_hostio_close (m_fd, &remote_errno);
440b7aec
PA
12406 }
12407 catch (...)
12408 {
12409 /* Swallow exception before it escapes the dtor. If
12410 something goes wrong, likely the connection is gone,
12411 and there's nothing else that can be done. */
12412 }
12413 }
12414 }
12415
12416 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12417
12418 /* Release ownership of the file descriptor, and return it. */
12419 int release () noexcept
12420 {
12421 int fd = m_fd;
12422 m_fd = -1;
12423 return fd;
12424 }
12425
12426 /* Return the owned file descriptor. */
12427 int get () const noexcept
12428 {
12429 return m_fd;
12430 }
12431
12432private:
6b8edb51
PA
12433 /* The remote target. */
12434 remote_target *m_remote;
12435
440b7aec
PA
12436 /* The owned remote I/O file descriptor. */
12437 int m_fd;
12438};
a6b151f1
DJ
12439
12440void
12441remote_file_put (const char *local_file, const char *remote_file, int from_tty)
6b8edb51
PA
12442{
12443 remote_target *remote = get_current_remote_target ();
12444
12445 if (remote == nullptr)
12446 error (_("command can only be used with remote target"));
12447
12448 remote->remote_file_put (local_file, remote_file, from_tty);
12449}
12450
12451void
12452remote_target::remote_file_put (const char *local_file, const char *remote_file,
12453 int from_tty)
a6b151f1 12454{
440b7aec 12455 int retcode, remote_errno, bytes, io_size;
a6b151f1
DJ
12456 int bytes_in_buffer;
12457 int saw_eof;
12458 ULONGEST offset;
a6b151f1 12459
d419f42d 12460 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
12461 if (file == NULL)
12462 perror_with_name (local_file);
a6b151f1 12463
440b7aec 12464 scoped_remote_fd fd
6b8edb51
PA
12465 (this, remote_hostio_open (NULL,
12466 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12467 | FILEIO_O_TRUNC),
12468 0700, 0, &remote_errno));
440b7aec 12469 if (fd.get () == -1)
a6b151f1
DJ
12470 remote_hostio_error (remote_errno);
12471
12472 /* Send up to this many bytes at once. They won't all fit in the
12473 remote packet limit, so we'll transfer slightly fewer. */
12474 io_size = get_remote_packet_size ();
5ca3b260 12475 gdb::byte_vector buffer (io_size);
a6b151f1 12476
a6b151f1
DJ
12477 bytes_in_buffer = 0;
12478 saw_eof = 0;
12479 offset = 0;
12480 while (bytes_in_buffer || !saw_eof)
12481 {
12482 if (!saw_eof)
12483 {
5ca3b260 12484 bytes = fread (buffer.data () + bytes_in_buffer, 1,
3e43a32a 12485 io_size - bytes_in_buffer,
d419f42d 12486 file.get ());
a6b151f1
DJ
12487 if (bytes == 0)
12488 {
d419f42d 12489 if (ferror (file.get ()))
a6b151f1
DJ
12490 error (_("Error reading %s."), local_file);
12491 else
12492 {
12493 /* EOF. Unless there is something still in the
12494 buffer from the last iteration, we are done. */
12495 saw_eof = 1;
12496 if (bytes_in_buffer == 0)
12497 break;
12498 }
12499 }
12500 }
12501 else
12502 bytes = 0;
12503
12504 bytes += bytes_in_buffer;
12505 bytes_in_buffer = 0;
12506
5ca3b260 12507 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
3e43a32a 12508 offset, &remote_errno);
a6b151f1
DJ
12509
12510 if (retcode < 0)
12511 remote_hostio_error (remote_errno);
12512 else if (retcode == 0)
12513 error (_("Remote write of %d bytes returned 0!"), bytes);
12514 else if (retcode < bytes)
12515 {
12516 /* Short write. Save the rest of the read data for the next
12517 write. */
12518 bytes_in_buffer = bytes - retcode;
5ca3b260 12519 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
a6b151f1
DJ
12520 }
12521
12522 offset += retcode;
12523 }
12524
6b8edb51 12525 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12526 remote_hostio_error (remote_errno);
12527
12528 if (from_tty)
12529 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
a6b151f1
DJ
12530}
12531
12532void
12533remote_file_get (const char *remote_file, const char *local_file, int from_tty)
6b8edb51
PA
12534{
12535 remote_target *remote = get_current_remote_target ();
12536
12537 if (remote == nullptr)
12538 error (_("command can only be used with remote target"));
12539
12540 remote->remote_file_get (remote_file, local_file, from_tty);
12541}
12542
12543void
12544remote_target::remote_file_get (const char *remote_file, const char *local_file,
12545 int from_tty)
a6b151f1 12546{
440b7aec 12547 int remote_errno, bytes, io_size;
a6b151f1 12548 ULONGEST offset;
a6b151f1 12549
440b7aec 12550 scoped_remote_fd fd
6b8edb51
PA
12551 (this, remote_hostio_open (NULL,
12552 remote_file, FILEIO_O_RDONLY, 0, 0,
12553 &remote_errno));
440b7aec 12554 if (fd.get () == -1)
a6b151f1
DJ
12555 remote_hostio_error (remote_errno);
12556
d419f42d 12557 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12558 if (file == NULL)
12559 perror_with_name (local_file);
a6b151f1
DJ
12560
12561 /* Send up to this many bytes at once. They won't all fit in the
12562 remote packet limit, so we'll transfer slightly fewer. */
12563 io_size = get_remote_packet_size ();
5ca3b260 12564 gdb::byte_vector buffer (io_size);
a6b151f1 12565
a6b151f1
DJ
12566 offset = 0;
12567 while (1)
12568 {
5ca3b260 12569 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
440b7aec 12570 &remote_errno);
a6b151f1
DJ
12571 if (bytes == 0)
12572 /* Success, but no bytes, means end-of-file. */
12573 break;
12574 if (bytes == -1)
12575 remote_hostio_error (remote_errno);
12576
12577 offset += bytes;
12578
5ca3b260 12579 bytes = fwrite (buffer.data (), 1, bytes, file.get ());
a6b151f1
DJ
12580 if (bytes == 0)
12581 perror_with_name (local_file);
12582 }
12583
6b8edb51 12584 if (remote_hostio_close (fd.release (), &remote_errno))
a6b151f1
DJ
12585 remote_hostio_error (remote_errno);
12586
12587 if (from_tty)
12588 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
a6b151f1
DJ
12589}
12590
12591void
12592remote_file_delete (const char *remote_file, int from_tty)
12593{
6b8edb51 12594 remote_target *remote = get_current_remote_target ();
a6b151f1 12595
6b8edb51 12596 if (remote == nullptr)
a6b151f1
DJ
12597 error (_("command can only be used with remote target"));
12598
6b8edb51
PA
12599 remote->remote_file_delete (remote_file, from_tty);
12600}
12601
12602void
12603remote_target::remote_file_delete (const char *remote_file, int from_tty)
12604{
12605 int retcode, remote_errno;
12606
12607 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
a6b151f1
DJ
12608 if (retcode == -1)
12609 remote_hostio_error (remote_errno);
12610
12611 if (from_tty)
12612 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12613}
12614
12615static void
ac88e2de 12616remote_put_command (const char *args, int from_tty)
a6b151f1 12617{
d1a41061
PP
12618 if (args == NULL)
12619 error_no_arg (_("file to put"));
12620
773a1edc 12621 gdb_argv argv (args);
a6b151f1
DJ
12622 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12623 error (_("Invalid parameters to remote put"));
12624
12625 remote_file_put (argv[0], argv[1], from_tty);
a6b151f1
DJ
12626}
12627
12628static void
ac88e2de 12629remote_get_command (const char *args, int from_tty)
a6b151f1 12630{
d1a41061
PP
12631 if (args == NULL)
12632 error_no_arg (_("file to get"));
12633
773a1edc 12634 gdb_argv argv (args);
a6b151f1
DJ
12635 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12636 error (_("Invalid parameters to remote get"));
12637
12638 remote_file_get (argv[0], argv[1], from_tty);
a6b151f1
DJ
12639}
12640
12641static void
ac88e2de 12642remote_delete_command (const char *args, int from_tty)
a6b151f1 12643{
d1a41061
PP
12644 if (args == NULL)
12645 error_no_arg (_("file to delete"));
12646
773a1edc 12647 gdb_argv argv (args);
a6b151f1
DJ
12648 if (argv[0] == NULL || argv[1] != NULL)
12649 error (_("Invalid parameters to remote delete"));
12650
12651 remote_file_delete (argv[0], from_tty);
a6b151f1
DJ
12652}
12653
12654static void
981a3fb3 12655remote_command (const char *args, int from_tty)
a6b151f1 12656{
635c7e8a 12657 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
a6b151f1
DJ
12658}
12659
57810aa7 12660bool
f6ac5f3d 12661remote_target::can_execute_reverse ()
b2175913 12662{
4082afcc
PA
12663 if (packet_support (PACKET_bs) == PACKET_ENABLE
12664 || packet_support (PACKET_bc) == PACKET_ENABLE)
57810aa7 12665 return true;
40ab02ce 12666 else
57810aa7 12667 return false;
b2175913
MS
12668}
12669
57810aa7 12670bool
f6ac5f3d 12671remote_target::supports_non_stop ()
74531fed 12672{
57810aa7 12673 return true;
74531fed
PA
12674}
12675
57810aa7 12676bool
f6ac5f3d 12677remote_target::supports_disable_randomization ()
03583c20
UW
12678{
12679 /* Only supported in extended mode. */
57810aa7 12680 return false;
03583c20
UW
12681}
12682
57810aa7 12683bool
f6ac5f3d 12684remote_target::supports_multi_process ()
8a305172
PA
12685{
12686 struct remote_state *rs = get_remote_state ();
a744cf53 12687
8020350c 12688 return remote_multi_process_p (rs);
8a305172
PA
12689}
12690
70221824 12691static int
f6ac5f3d 12692remote_supports_cond_tracepoints ()
782b2b07 12693{
4082afcc 12694 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12695}
12696
57810aa7 12697bool
f6ac5f3d 12698remote_target::supports_evaluation_of_breakpoint_conditions ()
3788aec7 12699{
4082afcc 12700 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12701}
12702
70221824 12703static int
f6ac5f3d 12704remote_supports_fast_tracepoints ()
7a697b8d 12705{
4082afcc 12706 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12707}
12708
0fb4aa4b 12709static int
f6ac5f3d 12710remote_supports_static_tracepoints ()
0fb4aa4b 12711{
4082afcc 12712 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12713}
12714
1e4d1764 12715static int
f6ac5f3d 12716remote_supports_install_in_trace ()
1e4d1764 12717{
4082afcc 12718 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12719}
12720
57810aa7 12721bool
f6ac5f3d 12722remote_target::supports_enable_disable_tracepoint ()
d248b706 12723{
4082afcc
PA
12724 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12725 == PACKET_ENABLE);
d248b706
KY
12726}
12727
57810aa7 12728bool
f6ac5f3d 12729remote_target::supports_string_tracing ()
3065dfb6 12730{
4082afcc 12731 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12732}
12733
57810aa7 12734bool
f6ac5f3d 12735remote_target::can_run_breakpoint_commands ()
d3ce09f5 12736{
4082afcc 12737 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12738}
12739
f6ac5f3d
PA
12740void
12741remote_target::trace_init ()
35b1e5cc 12742{
b6bb3468
PA
12743 struct remote_state *rs = get_remote_state ();
12744
35b1e5cc 12745 putpkt ("QTinit");
b6bb3468
PA
12746 remote_get_noisy_reply ();
12747 if (strcmp (rs->buf, "OK") != 0)
35b1e5cc
SS
12748 error (_("Target does not support this command."));
12749}
12750
409873ef
SS
12751/* Recursive routine to walk through command list including loops, and
12752 download packets for each command. */
12753
6b8edb51
PA
12754void
12755remote_target::remote_download_command_source (int num, ULONGEST addr,
12756 struct command_line *cmds)
409873ef
SS
12757{
12758 struct remote_state *rs = get_remote_state ();
12759 struct command_line *cmd;
12760
12761 for (cmd = cmds; cmd; cmd = cmd->next)
12762 {
0df8b418 12763 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12764 strcpy (rs->buf, "QTDPsrc:");
12765 encode_source_string (num, addr, "cmd", cmd->line,
12766 rs->buf + strlen (rs->buf),
12767 rs->buf_size - strlen (rs->buf));
12768 putpkt (rs->buf);
b6bb3468
PA
12769 remote_get_noisy_reply ();
12770 if (strcmp (rs->buf, "OK"))
409873ef
SS
12771 warning (_("Target does not support source download."));
12772
12773 if (cmd->control_type == while_control
12774 || cmd->control_type == while_stepping_control)
12775 {
12973681 12776 remote_download_command_source (num, addr, cmd->body_list_0.get ());
409873ef 12777
0df8b418 12778 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12779 strcpy (rs->buf, "QTDPsrc:");
12780 encode_source_string (num, addr, "cmd", "end",
12781 rs->buf + strlen (rs->buf),
12782 rs->buf_size - strlen (rs->buf));
12783 putpkt (rs->buf);
b6bb3468
PA
12784 remote_get_noisy_reply ();
12785 if (strcmp (rs->buf, "OK"))
409873ef
SS
12786 warning (_("Target does not support source download."));
12787 }
12788 }
12789}
12790
f6ac5f3d
PA
12791void
12792remote_target::download_tracepoint (struct bp_location *loc)
35b1e5cc 12793{
bba74b36 12794#define BUF_SIZE 2048
e8ba3115 12795
35b1e5cc 12796 CORE_ADDR tpaddr;
409873ef 12797 char addrbuf[40];
bba74b36 12798 char buf[BUF_SIZE];
b44ec619
SM
12799 std::vector<std::string> tdp_actions;
12800 std::vector<std::string> stepping_actions;
35b1e5cc 12801 char *pkt;
e8ba3115 12802 struct breakpoint *b = loc->owner;
d9b3f62e 12803 struct tracepoint *t = (struct tracepoint *) b;
b6bb3468 12804 struct remote_state *rs = get_remote_state ();
35b1e5cc 12805
dc673c81 12806 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
12807
12808 tpaddr = loc->address;
12809 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
12810 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12811 addrbuf, /* address */
12812 (b->enable_state == bp_enabled ? 'E' : 'D'),
12813 t->step_count, t->pass_count);
e8ba3115
YQ
12814 /* Fast tracepoints are mostly handled by the target, but we can
12815 tell the target how big of an instruction block should be moved
12816 around. */
12817 if (b->type == bp_fast_tracepoint)
12818 {
12819 /* Only test for support at download time; we may not know
12820 target capabilities at definition time. */
12821 if (remote_supports_fast_tracepoints ())
35b1e5cc 12822 {
6b940e6a
PL
12823 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12824 NULL))
bba74b36 12825 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
6b940e6a 12826 gdb_insn_length (loc->gdbarch, tpaddr));
35b1e5cc 12827 else
e8ba3115
YQ
12828 /* If it passed validation at definition but fails now,
12829 something is very wrong. */
12830 internal_error (__FILE__, __LINE__,
12831 _("Fast tracepoint not "
12832 "valid during download"));
35b1e5cc 12833 }
e8ba3115
YQ
12834 else
12835 /* Fast tracepoints are functionally identical to regular
12836 tracepoints, so don't take lack of support as a reason to
12837 give up on the trace run. */
12838 warning (_("Target does not support fast tracepoints, "
12839 "downloading %d as regular tracepoint"), b->number);
12840 }
12841 else if (b->type == bp_static_tracepoint)
12842 {
12843 /* Only test for support at download time; we may not know
12844 target capabilities at definition time. */
12845 if (remote_supports_static_tracepoints ())
0fb4aa4b 12846 {
e8ba3115 12847 struct static_tracepoint_marker marker;
0fb4aa4b 12848
e8ba3115
YQ
12849 if (target_static_tracepoint_marker_at (tpaddr, &marker))
12850 strcat (buf, ":S");
0fb4aa4b 12851 else
e8ba3115 12852 error (_("Static tracepoint not valid during download"));
0fb4aa4b 12853 }
e8ba3115
YQ
12854 else
12855 /* Fast tracepoints are functionally identical to regular
12856 tracepoints, so don't take lack of support as a reason
12857 to give up on the trace run. */
12858 error (_("Target does not support static tracepoints"));
12859 }
12860 /* If the tracepoint has a conditional, make it into an agent
12861 expression and append to the definition. */
12862 if (loc->cond)
12863 {
12864 /* Only test support at download time, we may not know target
12865 capabilities at definition time. */
12866 if (remote_supports_cond_tracepoints ())
35b1e5cc 12867 {
833177a4 12868 agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
bba74b36
YQ
12869 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12870 aexpr->len);
e8ba3115 12871 pkt = buf + strlen (buf);
b44ec619 12872 for (int ndx = 0; ndx < aexpr->len; ++ndx)
e8ba3115
YQ
12873 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12874 *pkt = '\0';
35b1e5cc 12875 }
e8ba3115
YQ
12876 else
12877 warning (_("Target does not support conditional tracepoints, "
12878 "ignoring tp %d cond"), b->number);
12879 }
35b1e5cc 12880
d9b3f62e 12881 if (b->commands || *default_collect)
e8ba3115
YQ
12882 strcat (buf, "-");
12883 putpkt (buf);
b6bb3468
PA
12884 remote_get_noisy_reply ();
12885 if (strcmp (rs->buf, "OK"))
e8ba3115 12886 error (_("Target does not support tracepoints."));
35b1e5cc 12887
e8ba3115 12888 /* do_single_steps (t); */
b44ec619
SM
12889 for (auto action_it = tdp_actions.begin ();
12890 action_it != tdp_actions.end (); action_it++)
e8ba3115 12891 {
b44ec619
SM
12892 QUIT; /* Allow user to bail out with ^C. */
12893
12894 bool has_more = (action_it != tdp_actions.end ()
12895 || !stepping_actions.empty ());
12896
12897 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12898 b->number, addrbuf, /* address */
12899 action_it->c_str (),
12900 has_more ? '-' : 0);
12901 putpkt (buf);
12902 remote_get_noisy_reply ();
12903 if (strcmp (rs->buf, "OK"))
12904 error (_("Error on target while setting tracepoints."));
e8ba3115 12905 }
409873ef 12906
b44ec619
SM
12907 for (auto action_it = stepping_actions.begin ();
12908 action_it != stepping_actions.end (); action_it++)
12909 {
12910 QUIT; /* Allow user to bail out with ^C. */
12911
12912 bool is_first = action_it == stepping_actions.begin ();
12913 bool has_more = action_it != stepping_actions.end ();
12914
12915 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12916 b->number, addrbuf, /* address */
12917 is_first ? "S" : "",
12918 action_it->c_str (),
12919 has_more ? "-" : "");
12920 putpkt (buf);
12921 remote_get_noisy_reply ();
12922 if (strcmp (rs->buf, "OK"))
12923 error (_("Error on target while setting tracepoints."));
12924 }
12925
4082afcc 12926 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 12927 {
f00aae0f 12928 if (b->location != NULL)
409873ef 12929 {
e8ba3115 12930 strcpy (buf, "QTDPsrc:");
f00aae0f 12931 encode_source_string (b->number, loc->address, "at",
d28cd78a 12932 event_location_to_string (b->location.get ()),
f00aae0f 12933 buf + strlen (buf), 2048 - strlen (buf));
e8ba3115 12934 putpkt (buf);
b6bb3468
PA
12935 remote_get_noisy_reply ();
12936 if (strcmp (rs->buf, "OK"))
e8ba3115 12937 warning (_("Target does not support source download."));
409873ef 12938 }
e8ba3115
YQ
12939 if (b->cond_string)
12940 {
12941 strcpy (buf, "QTDPsrc:");
12942 encode_source_string (b->number, loc->address,
12943 "cond", b->cond_string, buf + strlen (buf),
12944 2048 - strlen (buf));
12945 putpkt (buf);
b6bb3468
PA
12946 remote_get_noisy_reply ();
12947 if (strcmp (rs->buf, "OK"))
e8ba3115
YQ
12948 warning (_("Target does not support source download."));
12949 }
12950 remote_download_command_source (b->number, loc->address,
12951 breakpoint_commands (b));
35b1e5cc 12952 }
35b1e5cc
SS
12953}
12954
57810aa7 12955bool
f6ac5f3d 12956remote_target::can_download_tracepoint ()
1e4d1764 12957{
1e51243a
PA
12958 struct remote_state *rs = get_remote_state ();
12959 struct trace_status *ts;
12960 int status;
12961
12962 /* Don't try to install tracepoints until we've relocated our
12963 symbols, and fetched and merged the target's tracepoint list with
12964 ours. */
12965 if (rs->starting_up)
57810aa7 12966 return false;
1e51243a
PA
12967
12968 ts = current_trace_status ();
f6ac5f3d 12969 status = get_trace_status (ts);
1e4d1764
YQ
12970
12971 if (status == -1 || !ts->running_known || !ts->running)
57810aa7 12972 return false;
1e4d1764
YQ
12973
12974 /* If we are in a tracing experiment, but remote stub doesn't support
12975 installing tracepoint in trace, we have to return. */
12976 if (!remote_supports_install_in_trace ())
57810aa7 12977 return false;
1e4d1764 12978
57810aa7 12979 return true;
1e4d1764
YQ
12980}
12981
12982
f6ac5f3d
PA
12983void
12984remote_target::download_trace_state_variable (const trace_state_variable &tsv)
35b1e5cc
SS
12985{
12986 struct remote_state *rs = get_remote_state ();
00bf0b85 12987 char *p;
35b1e5cc 12988
bba74b36 12989 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
c252925c
SM
12990 tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
12991 tsv.builtin);
00bf0b85 12992 p = rs->buf + strlen (rs->buf);
c252925c 12993 if ((p - rs->buf) + tsv.name.length () * 2 >= get_remote_packet_size ())
00bf0b85 12994 error (_("Trace state variable name too long for tsv definition packet"));
c252925c 12995 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
00bf0b85 12996 *p++ = '\0';
35b1e5cc 12997 putpkt (rs->buf);
b6bb3468
PA
12998 remote_get_noisy_reply ();
12999 if (*rs->buf == '\0')
ad91cd99 13000 error (_("Target does not support this command."));
b6bb3468 13001 if (strcmp (rs->buf, "OK") != 0)
ad91cd99 13002 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
13003}
13004
f6ac5f3d
PA
13005void
13006remote_target::enable_tracepoint (struct bp_location *location)
d248b706
KY
13007{
13008 struct remote_state *rs = get_remote_state ();
13009 char addr_buf[40];
13010
13011 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
13012 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
13013 location->owner->number, addr_buf);
d248b706 13014 putpkt (rs->buf);
b6bb3468 13015 remote_get_noisy_reply ();
d248b706
KY
13016 if (*rs->buf == '\0')
13017 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13018 if (strcmp (rs->buf, "OK") != 0)
13019 error (_("Error on target while enabling tracepoint."));
13020}
13021
f6ac5f3d
PA
13022void
13023remote_target::disable_tracepoint (struct bp_location *location)
d248b706
KY
13024{
13025 struct remote_state *rs = get_remote_state ();
13026 char addr_buf[40];
13027
13028 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
13029 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
13030 location->owner->number, addr_buf);
d248b706 13031 putpkt (rs->buf);
b6bb3468 13032 remote_get_noisy_reply ();
d248b706
KY
13033 if (*rs->buf == '\0')
13034 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13035 if (strcmp (rs->buf, "OK") != 0)
13036 error (_("Error on target while disabling tracepoint."));
13037}
13038
f6ac5f3d
PA
13039void
13040remote_target::trace_set_readonly_regions ()
35b1e5cc
SS
13041{
13042 asection *s;
81b9b86e 13043 bfd *abfd = NULL;
35b1e5cc 13044 bfd_size_type size;
608bcef2 13045 bfd_vma vma;
35b1e5cc 13046 int anysecs = 0;
c2fa21f1 13047 int offset = 0;
35b1e5cc
SS
13048
13049 if (!exec_bfd)
13050 return; /* No information to give. */
13051
b6bb3468
PA
13052 struct remote_state *rs = get_remote_state ();
13053
13054 strcpy (rs->buf, "QTro");
13055 offset = strlen (rs->buf);
35b1e5cc
SS
13056 for (s = exec_bfd->sections; s; s = s->next)
13057 {
13058 char tmp1[40], tmp2[40];
c2fa21f1 13059 int sec_length;
35b1e5cc
SS
13060
13061 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 13062 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
13063 (s->flags & SEC_READONLY) == 0)
13064 continue;
13065
13066 anysecs = 1;
81b9b86e 13067 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 13068 size = bfd_get_section_size (s);
608bcef2
HZ
13069 sprintf_vma (tmp1, vma);
13070 sprintf_vma (tmp2, vma + size);
c2fa21f1 13071 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
b6bb3468 13072 if (offset + sec_length + 1 > rs->buf_size)
c2fa21f1 13073 {
4082afcc 13074 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 13075 warning (_("\
c2fa21f1
HZ
13076Too many sections for read-only sections definition packet."));
13077 break;
13078 }
b6bb3468 13079 xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
bba74b36 13080 tmp1, tmp2);
c2fa21f1 13081 offset += sec_length;
35b1e5cc
SS
13082 }
13083 if (anysecs)
13084 {
b6bb3468
PA
13085 putpkt (rs->buf);
13086 getpkt (&rs->buf, &rs->buf_size, 0);
35b1e5cc
SS
13087 }
13088}
13089
f6ac5f3d
PA
13090void
13091remote_target::trace_start ()
35b1e5cc 13092{
b6bb3468
PA
13093 struct remote_state *rs = get_remote_state ();
13094
35b1e5cc 13095 putpkt ("QTStart");
b6bb3468
PA
13096 remote_get_noisy_reply ();
13097 if (*rs->buf == '\0')
ad91cd99 13098 error (_("Target does not support this command."));
b6bb3468
PA
13099 if (strcmp (rs->buf, "OK") != 0)
13100 error (_("Bogus reply from target: %s"), rs->buf);
35b1e5cc
SS
13101}
13102
f6ac5f3d
PA
13103int
13104remote_target::get_trace_status (struct trace_status *ts)
35b1e5cc 13105{
953b98d1 13106 /* Initialize it just to avoid a GCC false warning. */
f652de6f 13107 char *p = NULL;
0df8b418 13108 /* FIXME we need to get register block size some other way. */
00bf0b85 13109 extern int trace_regblock_size;
bd3eecc3 13110 enum packet_result result;
b6bb3468 13111 struct remote_state *rs = get_remote_state ();
bd3eecc3 13112
4082afcc 13113 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 13114 return -1;
a744cf53 13115
5cd63fda 13116 trace_regblock_size
9d6eea31 13117 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
00bf0b85 13118
049dc89b
JK
13119 putpkt ("qTStatus");
13120
492d29ea 13121 TRY
67f41397 13122 {
b6bb3468 13123 p = remote_get_noisy_reply ();
67f41397 13124 }
492d29ea 13125 CATCH (ex, RETURN_MASK_ERROR)
67f41397 13126 {
598d3636
JK
13127 if (ex.error != TARGET_CLOSE_ERROR)
13128 {
13129 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13130 return -1;
13131 }
13132 throw_exception (ex);
67f41397 13133 }
492d29ea 13134 END_CATCH
00bf0b85 13135
bd3eecc3
PA
13136 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13137
00bf0b85 13138 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 13139 if (result == PACKET_UNKNOWN)
00bf0b85 13140 return -1;
35b1e5cc 13141
00bf0b85 13142 /* We're working with a live target. */
f5911ea1 13143 ts->filename = NULL;
00bf0b85 13144
00bf0b85 13145 if (*p++ != 'T')
b6bb3468 13146 error (_("Bogus trace status reply from target: %s"), rs->buf);
35b1e5cc 13147
84cebc4a
YQ
13148 /* Function 'parse_trace_status' sets default value of each field of
13149 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
13150 parse_trace_status (p, ts);
13151
13152 return ts->running;
35b1e5cc
SS
13153}
13154
f6ac5f3d
PA
13155void
13156remote_target::get_tracepoint_status (struct breakpoint *bp,
13157 struct uploaded_tp *utp)
f196051f
SS
13158{
13159 struct remote_state *rs = get_remote_state ();
f196051f
SS
13160 char *reply;
13161 struct bp_location *loc;
13162 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 13163 size_t size = get_remote_packet_size ();
f196051f
SS
13164
13165 if (tp)
13166 {
c1fc2657 13167 tp->hit_count = 0;
f196051f 13168 tp->traceframe_usage = 0;
c1fc2657 13169 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
13170 {
13171 /* If the tracepoint was never downloaded, don't go asking for
13172 any status. */
13173 if (tp->number_on_target == 0)
13174 continue;
bba74b36
YQ
13175 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
13176 phex_nz (loc->address, 0));
f196051f 13177 putpkt (rs->buf);
b6bb3468 13178 reply = remote_get_noisy_reply ();
f196051f
SS
13179 if (reply && *reply)
13180 {
13181 if (*reply == 'V')
13182 parse_tracepoint_status (reply + 1, bp, utp);
13183 }
13184 }
13185 }
13186 else if (utp)
13187 {
13188 utp->hit_count = 0;
13189 utp->traceframe_usage = 0;
bba74b36
YQ
13190 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
13191 phex_nz (utp->addr, 0));
f196051f 13192 putpkt (rs->buf);
b6bb3468 13193 reply = remote_get_noisy_reply ();
f196051f
SS
13194 if (reply && *reply)
13195 {
13196 if (*reply == 'V')
13197 parse_tracepoint_status (reply + 1, bp, utp);
13198 }
13199 }
13200}
13201
f6ac5f3d
PA
13202void
13203remote_target::trace_stop ()
35b1e5cc 13204{
b6bb3468
PA
13205 struct remote_state *rs = get_remote_state ();
13206
35b1e5cc 13207 putpkt ("QTStop");
b6bb3468
PA
13208 remote_get_noisy_reply ();
13209 if (*rs->buf == '\0')
ad91cd99 13210 error (_("Target does not support this command."));
b6bb3468
PA
13211 if (strcmp (rs->buf, "OK") != 0)
13212 error (_("Bogus reply from target: %s"), rs->buf);
35b1e5cc
SS
13213}
13214
f6ac5f3d
PA
13215int
13216remote_target::trace_find (enum trace_find_type type, int num,
13217 CORE_ADDR addr1, CORE_ADDR addr2,
13218 int *tpp)
35b1e5cc
SS
13219{
13220 struct remote_state *rs = get_remote_state ();
bba74b36 13221 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
13222 char *p, *reply;
13223 int target_frameno = -1, target_tracept = -1;
13224
e6e4e701
PA
13225 /* Lookups other than by absolute frame number depend on the current
13226 trace selected, so make sure it is correct on the remote end
13227 first. */
13228 if (type != tfind_number)
13229 set_remote_traceframe ();
13230
35b1e5cc
SS
13231 p = rs->buf;
13232 strcpy (p, "QTFrame:");
13233 p = strchr (p, '\0');
13234 switch (type)
13235 {
13236 case tfind_number:
bba74b36 13237 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
13238 break;
13239 case tfind_pc:
bba74b36 13240 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
13241 break;
13242 case tfind_tp:
bba74b36 13243 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
13244 break;
13245 case tfind_range:
bba74b36
YQ
13246 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13247 phex_nz (addr2, 0));
35b1e5cc
SS
13248 break;
13249 case tfind_outside:
bba74b36
YQ
13250 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13251 phex_nz (addr2, 0));
35b1e5cc
SS
13252 break;
13253 default:
9b20d036 13254 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
13255 }
13256
13257 putpkt (rs->buf);
b6bb3468 13258 reply = remote_get_noisy_reply ();
ad91cd99
PA
13259 if (*reply == '\0')
13260 error (_("Target does not support this command."));
35b1e5cc
SS
13261
13262 while (reply && *reply)
13263 switch (*reply)
13264 {
13265 case 'F':
f197e0f1
VP
13266 p = ++reply;
13267 target_frameno = (int) strtol (p, &reply, 16);
13268 if (reply == p)
13269 error (_("Unable to parse trace frame number"));
e6e4e701
PA
13270 /* Don't update our remote traceframe number cache on failure
13271 to select a remote traceframe. */
f197e0f1
VP
13272 if (target_frameno == -1)
13273 return -1;
35b1e5cc
SS
13274 break;
13275 case 'T':
f197e0f1
VP
13276 p = ++reply;
13277 target_tracept = (int) strtol (p, &reply, 16);
13278 if (reply == p)
13279 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
13280 break;
13281 case 'O': /* "OK"? */
13282 if (reply[1] == 'K' && reply[2] == '\0')
13283 reply += 2;
13284 else
13285 error (_("Bogus reply from target: %s"), reply);
13286 break;
13287 default:
13288 error (_("Bogus reply from target: %s"), reply);
13289 }
13290 if (tpp)
13291 *tpp = target_tracept;
e6e4e701 13292
262e1174 13293 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
13294 return target_frameno;
13295}
13296
57810aa7 13297bool
f6ac5f3d 13298remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
35b1e5cc
SS
13299{
13300 struct remote_state *rs = get_remote_state ();
13301 char *reply;
13302 ULONGEST uval;
13303
e6e4e701
PA
13304 set_remote_traceframe ();
13305
bba74b36 13306 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc 13307 putpkt (rs->buf);
b6bb3468 13308 reply = remote_get_noisy_reply ();
35b1e5cc
SS
13309 if (reply && *reply)
13310 {
13311 if (*reply == 'V')
13312 {
13313 unpack_varlen_hex (reply + 1, &uval);
13314 *val = (LONGEST) uval;
57810aa7 13315 return true;
35b1e5cc
SS
13316 }
13317 }
57810aa7 13318 return false;
35b1e5cc
SS
13319}
13320
f6ac5f3d
PA
13321int
13322remote_target::save_trace_data (const char *filename)
00bf0b85
SS
13323{
13324 struct remote_state *rs = get_remote_state ();
13325 char *p, *reply;
13326
13327 p = rs->buf;
13328 strcpy (p, "QTSave:");
13329 p += strlen (p);
13330 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
13331 error (_("Remote file name too long for trace save packet"));
9f1b45b0 13332 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
13333 *p++ = '\0';
13334 putpkt (rs->buf);
b6bb3468 13335 reply = remote_get_noisy_reply ();
d6c5869f 13336 if (*reply == '\0')
ad91cd99
PA
13337 error (_("Target does not support this command."));
13338 if (strcmp (reply, "OK") != 0)
13339 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
13340 return 0;
13341}
13342
13343/* This is basically a memory transfer, but needs to be its own packet
13344 because we don't know how the target actually organizes its trace
13345 memory, plus we want to be able to ask for as much as possible, but
13346 not be unhappy if we don't get as much as we ask for. */
13347
f6ac5f3d
PA
13348LONGEST
13349remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
13350{
13351 struct remote_state *rs = get_remote_state ();
13352 char *reply;
13353 char *p;
13354 int rslt;
13355
13356 p = rs->buf;
13357 strcpy (p, "qTBuffer:");
13358 p += strlen (p);
13359 p += hexnumstr (p, offset);
13360 *p++ = ',';
13361 p += hexnumstr (p, len);
13362 *p++ = '\0';
13363
13364 putpkt (rs->buf);
b6bb3468 13365 reply = remote_get_noisy_reply ();
00bf0b85
SS
13366 if (reply && *reply)
13367 {
13368 /* 'l' by itself means we're at the end of the buffer and
13369 there is nothing more to get. */
13370 if (*reply == 'l')
13371 return 0;
13372
13373 /* Convert the reply into binary. Limit the number of bytes to
13374 convert according to our passed-in buffer size, rather than
13375 what was returned in the packet; if the target is
13376 unexpectedly generous and gives us a bigger reply than we
13377 asked for, we don't want to crash. */
b6bb3468 13378 rslt = hex2bin (reply, buf, len);
00bf0b85
SS
13379 return rslt;
13380 }
13381
13382 /* Something went wrong, flag as an error. */
13383 return -1;
13384}
13385
f6ac5f3d
PA
13386void
13387remote_target::set_disconnected_tracing (int val)
35b1e5cc
SS
13388{
13389 struct remote_state *rs = get_remote_state ();
13390
4082afcc 13391 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 13392 {
ad91cd99
PA
13393 char *reply;
13394
bba74b36 13395 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 13396 putpkt (rs->buf);
b6bb3468 13397 reply = remote_get_noisy_reply ();
ad91cd99 13398 if (*reply == '\0')
33da3f1c 13399 error (_("Target does not support this command."));
ad91cd99
PA
13400 if (strcmp (reply, "OK") != 0)
13401 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
13402 }
13403 else if (val)
13404 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
13405}
13406
f6ac5f3d
PA
13407int
13408remote_target::core_of_thread (ptid_t ptid)
dc146f7c
VP
13409{
13410 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 13411
7aabaf9d
SM
13412 if (info != NULL && info->priv != NULL)
13413 return get_remote_thread_info (info)->core;
13414
dc146f7c
VP
13415 return -1;
13416}
13417
f6ac5f3d
PA
13418void
13419remote_target::set_circular_trace_buffer (int val)
4daf5ac0
SS
13420{
13421 struct remote_state *rs = get_remote_state ();
ad91cd99 13422 char *reply;
4daf5ac0 13423
bba74b36 13424 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 13425 putpkt (rs->buf);
b6bb3468 13426 reply = remote_get_noisy_reply ();
ad91cd99 13427 if (*reply == '\0')
4daf5ac0 13428 error (_("Target does not support this command."));
ad91cd99
PA
13429 if (strcmp (reply, "OK") != 0)
13430 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
13431}
13432
f6ac5f3d
PA
13433traceframe_info_up
13434remote_target::traceframe_info ()
b3b9301e 13435{
9018be22 13436 gdb::optional<gdb::char_vector> text
8b88a78e 13437 = target_read_stralloc (current_top_target (), TARGET_OBJECT_TRACEFRAME_INFO,
b7b030ad 13438 NULL);
9018be22
SM
13439 if (text)
13440 return parse_traceframe_info (text->data ());
b3b9301e
PA
13441
13442 return NULL;
13443}
13444
405f8e94
SS
13445/* Handle the qTMinFTPILen packet. Returns the minimum length of
13446 instruction on which a fast tracepoint may be placed. Returns -1
13447 if the packet is not supported, and 0 if the minimum instruction
13448 length is unknown. */
13449
f6ac5f3d
PA
13450int
13451remote_target::get_min_fast_tracepoint_insn_len ()
405f8e94
SS
13452{
13453 struct remote_state *rs = get_remote_state ();
13454 char *reply;
13455
e886a173
PA
13456 /* If we're not debugging a process yet, the IPA can't be
13457 loaded. */
13458 if (!target_has_execution)
13459 return 0;
13460
13461 /* Make sure the remote is pointing at the right process. */
13462 set_general_process ();
13463
bba74b36 13464 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94 13465 putpkt (rs->buf);
b6bb3468 13466 reply = remote_get_noisy_reply ();
405f8e94
SS
13467 if (*reply == '\0')
13468 return -1;
13469 else
13470 {
13471 ULONGEST min_insn_len;
13472
13473 unpack_varlen_hex (reply, &min_insn_len);
13474
13475 return (int) min_insn_len;
13476 }
13477}
13478
f6ac5f3d
PA
13479void
13480remote_target::set_trace_buffer_size (LONGEST val)
f6f899bf 13481{
4082afcc 13482 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
13483 {
13484 struct remote_state *rs = get_remote_state ();
13485 char *buf = rs->buf;
13486 char *endbuf = rs->buf + get_remote_packet_size ();
13487 enum packet_result result;
13488
13489 gdb_assert (val >= 0 || val == -1);
13490 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13491 /* Send -1 as literal "-1" to avoid host size dependency. */
13492 if (val < 0)
13493 {
13494 *buf++ = '-';
13495 buf += hexnumstr (buf, (ULONGEST) -val);
13496 }
13497 else
13498 buf += hexnumstr (buf, (ULONGEST) val);
13499
13500 putpkt (rs->buf);
b6bb3468 13501 remote_get_noisy_reply ();
f6f899bf
HAQ
13502 result = packet_ok (rs->buf,
13503 &remote_protocol_packets[PACKET_QTBuffer_size]);
13504
13505 if (result != PACKET_OK)
13506 warning (_("Bogus reply from target: %s"), rs->buf);
13507 }
13508}
13509
57810aa7 13510bool
f6ac5f3d
PA
13511remote_target::set_trace_notes (const char *user, const char *notes,
13512 const char *stop_notes)
f196051f
SS
13513{
13514 struct remote_state *rs = get_remote_state ();
13515 char *reply;
13516 char *buf = rs->buf;
13517 char *endbuf = rs->buf + get_remote_packet_size ();
13518 int nbytes;
13519
13520 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13521 if (user)
13522 {
13523 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13524 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13525 buf += 2 * nbytes;
13526 *buf++ = ';';
13527 }
13528 if (notes)
13529 {
13530 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13531 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13532 buf += 2 * nbytes;
13533 *buf++ = ';';
13534 }
13535 if (stop_notes)
13536 {
13537 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13538 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13539 buf += 2 * nbytes;
13540 *buf++ = ';';
13541 }
13542 /* Ensure the buffer is terminated. */
13543 *buf = '\0';
13544
13545 putpkt (rs->buf);
b6bb3468 13546 reply = remote_get_noisy_reply ();
f196051f 13547 if (*reply == '\0')
57810aa7 13548 return false;
f196051f
SS
13549
13550 if (strcmp (reply, "OK") != 0)
13551 error (_("Bogus reply from target: %s"), reply);
13552
57810aa7 13553 return true;
f196051f
SS
13554}
13555
57810aa7
PA
13556bool
13557remote_target::use_agent (bool use)
d1feda86 13558{
4082afcc 13559 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13560 {
13561 struct remote_state *rs = get_remote_state ();
13562
13563 /* If the stub supports QAgent. */
bba74b36 13564 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
13565 putpkt (rs->buf);
13566 getpkt (&rs->buf, &rs->buf_size, 0);
13567
13568 if (strcmp (rs->buf, "OK") == 0)
13569 {
f6ac5f3d 13570 ::use_agent = use;
57810aa7 13571 return true;
d1feda86
YQ
13572 }
13573 }
13574
57810aa7 13575 return false;
d1feda86
YQ
13576}
13577
57810aa7 13578bool
f6ac5f3d 13579remote_target::can_use_agent ()
d1feda86 13580{
4082afcc 13581 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13582}
13583
9accd112
MM
13584struct btrace_target_info
13585{
13586 /* The ptid of the traced thread. */
13587 ptid_t ptid;
f4abbc16
MM
13588
13589 /* The obtained branch trace configuration. */
13590 struct btrace_config conf;
9accd112
MM
13591};
13592
f4abbc16
MM
13593/* Reset our idea of our target's btrace configuration. */
13594
13595static void
6b8edb51 13596remote_btrace_reset (remote_state *rs)
f4abbc16 13597{
f4abbc16
MM
13598 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13599}
13600
f4abbc16
MM
13601/* Synchronize the configuration with the target. */
13602
6b8edb51
PA
13603void
13604remote_target::btrace_sync_conf (const btrace_config *conf)
f4abbc16 13605{
d33501a5
MM
13606 struct packet_config *packet;
13607 struct remote_state *rs;
13608 char *buf, *pos, *endbuf;
13609
13610 rs = get_remote_state ();
13611 buf = rs->buf;
13612 endbuf = buf + get_remote_packet_size ();
13613
13614 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13615 if (packet_config_support (packet) == PACKET_ENABLE
13616 && conf->bts.size != rs->btrace_config.bts.size)
13617 {
13618 pos = buf;
13619 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13620 conf->bts.size);
13621
13622 putpkt (buf);
13623 getpkt (&buf, &rs->buf_size, 0);
13624
13625 if (packet_ok (buf, packet) == PACKET_ERROR)
13626 {
13627 if (buf[0] == 'E' && buf[1] == '.')
13628 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13629 else
13630 error (_("Failed to configure the BTS buffer size."));
13631 }
13632
13633 rs->btrace_config.bts.size = conf->bts.size;
13634 }
b20a6524
MM
13635
13636 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13637 if (packet_config_support (packet) == PACKET_ENABLE
13638 && conf->pt.size != rs->btrace_config.pt.size)
13639 {
13640 pos = buf;
13641 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13642 conf->pt.size);
13643
13644 putpkt (buf);
13645 getpkt (&buf, &rs->buf_size, 0);
13646
13647 if (packet_ok (buf, packet) == PACKET_ERROR)
13648 {
13649 if (buf[0] == 'E' && buf[1] == '.')
13650 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13651 else
13652 error (_("Failed to configure the trace buffer size."));
13653 }
13654
13655 rs->btrace_config.pt.size = conf->pt.size;
13656 }
f4abbc16
MM
13657}
13658
13659/* Read the current thread's btrace configuration from the target and
13660 store it into CONF. */
13661
13662static void
13663btrace_read_config (struct btrace_config *conf)
13664{
9018be22 13665 gdb::optional<gdb::char_vector> xml
8b88a78e 13666 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE_CONF, "");
9018be22
SM
13667 if (xml)
13668 parse_xml_btrace_conf (conf, xml->data ());
f4abbc16
MM
13669}
13670
c0272db5
TW
13671/* Maybe reopen target btrace. */
13672
6b8edb51
PA
13673void
13674remote_target::remote_btrace_maybe_reopen ()
c0272db5
TW
13675{
13676 struct remote_state *rs = get_remote_state ();
c0272db5
TW
13677 struct thread_info *tp;
13678 int btrace_target_pushed = 0;
13679 int warned = 0;
13680
5ed8105e
PA
13681 scoped_restore_current_thread restore_thread;
13682
c0272db5
TW
13683 ALL_NON_EXITED_THREADS (tp)
13684 {
13685 set_general_thread (tp->ptid);
13686
13687 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13688 btrace_read_config (&rs->btrace_config);
13689
13690 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13691 continue;
13692
13693#if !defined (HAVE_LIBIPT)
13694 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13695 {
13696 if (!warned)
13697 {
13698 warned = 1;
c4e12631
MM
13699 warning (_("Target is recording using Intel Processor Trace "
13700 "but support was disabled at compile time."));
c0272db5
TW
13701 }
13702
13703 continue;
13704 }
13705#endif /* !defined (HAVE_LIBIPT) */
13706
13707 /* Push target, once, but before anything else happens. This way our
13708 changes to the threads will be cleaned up by unpushing the target
13709 in case btrace_read_config () throws. */
13710 if (!btrace_target_pushed)
13711 {
13712 btrace_target_pushed = 1;
13713 record_btrace_push_target ();
13714 printf_filtered (_("Target is recording using %s.\n"),
13715 btrace_format_string (rs->btrace_config.format));
13716 }
13717
13718 tp->btrace.target = XCNEW (struct btrace_target_info);
13719 tp->btrace.target->ptid = tp->ptid;
13720 tp->btrace.target->conf = rs->btrace_config;
13721 }
c0272db5
TW
13722}
13723
9accd112
MM
13724/* Enable branch tracing. */
13725
f6ac5f3d
PA
13726struct btrace_target_info *
13727remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
9accd112
MM
13728{
13729 struct btrace_target_info *tinfo = NULL;
b20a6524 13730 struct packet_config *packet = NULL;
9accd112
MM
13731 struct remote_state *rs = get_remote_state ();
13732 char *buf = rs->buf;
13733 char *endbuf = rs->buf + get_remote_packet_size ();
13734
b20a6524
MM
13735 switch (conf->format)
13736 {
13737 case BTRACE_FORMAT_BTS:
13738 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13739 break;
13740
13741 case BTRACE_FORMAT_PT:
13742 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13743 break;
13744 }
13745
13746 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13747 error (_("Target does not support branch tracing."));
13748
f4abbc16
MM
13749 btrace_sync_conf (conf);
13750
9accd112
MM
13751 set_general_thread (ptid);
13752
13753 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13754 putpkt (rs->buf);
13755 getpkt (&rs->buf, &rs->buf_size, 0);
13756
13757 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13758 {
13759 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13760 error (_("Could not enable branch tracing for %s: %s"),
13761 target_pid_to_str (ptid), rs->buf + 2);
13762 else
13763 error (_("Could not enable branch tracing for %s."),
13764 target_pid_to_str (ptid));
13765 }
13766
8d749320 13767 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
13768 tinfo->ptid = ptid;
13769
f4abbc16
MM
13770 /* If we fail to read the configuration, we lose some information, but the
13771 tracing itself is not impacted. */
492d29ea
PA
13772 TRY
13773 {
13774 btrace_read_config (&tinfo->conf);
13775 }
13776 CATCH (err, RETURN_MASK_ERROR)
13777 {
13778 if (err.message != NULL)
13779 warning ("%s", err.message);
13780 }
13781 END_CATCH
f4abbc16 13782
9accd112
MM
13783 return tinfo;
13784}
13785
13786/* Disable branch tracing. */
13787
f6ac5f3d
PA
13788void
13789remote_target::disable_btrace (struct btrace_target_info *tinfo)
9accd112
MM
13790{
13791 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13792 struct remote_state *rs = get_remote_state ();
13793 char *buf = rs->buf;
13794 char *endbuf = rs->buf + get_remote_packet_size ();
13795
4082afcc 13796 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13797 error (_("Target does not support branch tracing."));
13798
13799 set_general_thread (tinfo->ptid);
13800
13801 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13802 putpkt (rs->buf);
13803 getpkt (&rs->buf, &rs->buf_size, 0);
13804
13805 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13806 {
13807 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13808 error (_("Could not disable branch tracing for %s: %s"),
13809 target_pid_to_str (tinfo->ptid), rs->buf + 2);
13810 else
13811 error (_("Could not disable branch tracing for %s."),
13812 target_pid_to_str (tinfo->ptid));
13813 }
13814
13815 xfree (tinfo);
13816}
13817
13818/* Teardown branch tracing. */
13819
f6ac5f3d
PA
13820void
13821remote_target::teardown_btrace (struct btrace_target_info *tinfo)
9accd112
MM
13822{
13823 /* We must not talk to the target during teardown. */
13824 xfree (tinfo);
13825}
13826
13827/* Read the branch trace. */
13828
f6ac5f3d
PA
13829enum btrace_error
13830remote_target::read_btrace (struct btrace_data *btrace,
13831 struct btrace_target_info *tinfo,
13832 enum btrace_read_type type)
9accd112
MM
13833{
13834 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
9accd112 13835 const char *annex;
9accd112 13836
4082afcc 13837 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13838 error (_("Target does not support branch tracing."));
13839
13840#if !defined(HAVE_LIBEXPAT)
13841 error (_("Cannot process branch tracing result. XML parsing not supported."));
13842#endif
13843
13844 switch (type)
13845 {
864089d2 13846 case BTRACE_READ_ALL:
9accd112
MM
13847 annex = "all";
13848 break;
864089d2 13849 case BTRACE_READ_NEW:
9accd112
MM
13850 annex = "new";
13851 break;
969c39fb
MM
13852 case BTRACE_READ_DELTA:
13853 annex = "delta";
13854 break;
9accd112
MM
13855 default:
13856 internal_error (__FILE__, __LINE__,
13857 _("Bad branch tracing read type: %u."),
13858 (unsigned int) type);
13859 }
13860
9018be22 13861 gdb::optional<gdb::char_vector> xml
8b88a78e 13862 = target_read_stralloc (current_top_target (), TARGET_OBJECT_BTRACE, annex);
9018be22 13863 if (!xml)
969c39fb 13864 return BTRACE_ERR_UNKNOWN;
9accd112 13865
9018be22 13866 parse_xml_btrace (btrace, xml->data ());
9accd112 13867
969c39fb 13868 return BTRACE_ERR_NONE;
9accd112
MM
13869}
13870
f6ac5f3d
PA
13871const struct btrace_config *
13872remote_target::btrace_conf (const struct btrace_target_info *tinfo)
f4abbc16
MM
13873{
13874 return &tinfo->conf;
13875}
13876
57810aa7 13877bool
f6ac5f3d 13878remote_target::augmented_libraries_svr4_read ()
ced63ec0 13879{
4082afcc
PA
13880 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13881 == PACKET_ENABLE);
ced63ec0
GB
13882}
13883
9dd130a0
TT
13884/* Implementation of to_load. */
13885
f6ac5f3d
PA
13886void
13887remote_target::load (const char *name, int from_tty)
9dd130a0
TT
13888{
13889 generic_load (name, from_tty);
13890}
13891
c78fa86a
GB
13892/* Accepts an integer PID; returns a string representing a file that
13893 can be opened on the remote side to get the symbols for the child
13894 process. Returns NULL if the operation is not supported. */
13895
f6ac5f3d
PA
13896char *
13897remote_target::pid_to_exec_file (int pid)
c78fa86a 13898{
9018be22 13899 static gdb::optional<gdb::char_vector> filename;
835205d0
GB
13900 struct inferior *inf;
13901 char *annex = NULL;
c78fa86a
GB
13902
13903 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13904 return NULL;
13905
835205d0
GB
13906 inf = find_inferior_pid (pid);
13907 if (inf == NULL)
13908 internal_error (__FILE__, __LINE__,
13909 _("not currently attached to process %d"), pid);
13910
13911 if (!inf->fake_pid_p)
13912 {
13913 const int annex_size = 9;
13914
224c3ddb 13915 annex = (char *) alloca (annex_size);
835205d0
GB
13916 xsnprintf (annex, annex_size, "%x", pid);
13917 }
13918
8b88a78e 13919 filename = target_read_stralloc (current_top_target (),
c78fa86a
GB
13920 TARGET_OBJECT_EXEC_FILE, annex);
13921
9018be22 13922 return filename ? filename->data () : nullptr;
c78fa86a
GB
13923}
13924
750ce8d1
YQ
13925/* Implement the to_can_do_single_step target_ops method. */
13926
f6ac5f3d
PA
13927int
13928remote_target::can_do_single_step ()
750ce8d1
YQ
13929{
13930 /* We can only tell whether target supports single step or not by
13931 supported s and S vCont actions if the stub supports vContSupported
13932 feature. If the stub doesn't support vContSupported feature,
13933 we have conservatively to think target doesn't supports single
13934 step. */
13935 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13936 {
13937 struct remote_state *rs = get_remote_state ();
13938
13939 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6b8edb51 13940 remote_vcont_probe ();
750ce8d1
YQ
13941
13942 return rs->supports_vCont.s && rs->supports_vCont.S;
13943 }
13944 else
13945 return 0;
13946}
13947
3a00c802
PA
13948/* Implementation of the to_execution_direction method for the remote
13949 target. */
13950
f6ac5f3d
PA
13951enum exec_direction_kind
13952remote_target::execution_direction ()
3a00c802
PA
13953{
13954 struct remote_state *rs = get_remote_state ();
13955
13956 return rs->last_resume_exec_dir;
13957}
13958
f6327dcb
KB
13959/* Return pointer to the thread_info struct which corresponds to
13960 THREAD_HANDLE (having length HANDLE_LEN). */
13961
f6ac5f3d
PA
13962thread_info *
13963remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
13964 int handle_len,
13965 inferior *inf)
f6327dcb
KB
13966{
13967 struct thread_info *tp;
13968
13969 ALL_NON_EXITED_THREADS (tp)
13970 {
7aabaf9d 13971 remote_thread_info *priv = get_remote_thread_info (tp);
f6327dcb
KB
13972
13973 if (tp->inf == inf && priv != NULL)
13974 {
7aabaf9d 13975 if (handle_len != priv->thread_handle.size ())
f6327dcb 13976 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
7aabaf9d
SM
13977 handle_len, priv->thread_handle.size ());
13978 if (memcmp (thread_handle, priv->thread_handle.data (),
f6327dcb
KB
13979 handle_len) == 0)
13980 return tp;
13981 }
13982 }
13983
13984 return NULL;
13985}
13986
57810aa7 13987bool
f6ac5f3d 13988remote_target::can_async_p ()
6426a772 13989{
5d93a237
TT
13990 struct remote_state *rs = get_remote_state ();
13991
3015c064
SM
13992 /* We don't go async if the user has explicitly prevented it with the
13993 "maint set target-async" command. */
c6ebd6cf 13994 if (!target_async_permitted)
57810aa7 13995 return false;
75c99385 13996
23860348 13997 /* We're async whenever the serial device is. */
5d93a237 13998 return serial_can_async_p (rs->remote_desc);
6426a772
JM
13999}
14000
57810aa7 14001bool
f6ac5f3d 14002remote_target::is_async_p ()
6426a772 14003{
5d93a237
TT
14004 struct remote_state *rs = get_remote_state ();
14005
c6ebd6cf 14006 if (!target_async_permitted)
75c99385 14007 /* We only enable async when the user specifically asks for it. */
57810aa7 14008 return false;
75c99385 14009
23860348 14010 /* We're async whenever the serial device is. */
5d93a237 14011 return serial_is_async_p (rs->remote_desc);
6426a772
JM
14012}
14013
2acceee2
JM
14014/* Pass the SERIAL event on and up to the client. One day this code
14015 will be able to delay notifying the client of an event until the
23860348 14016 point where an entire packet has been received. */
2acceee2 14017
2acceee2
JM
14018static serial_event_ftype remote_async_serial_handler;
14019
6426a772 14020static void
819cc324 14021remote_async_serial_handler (struct serial *scb, void *context)
6426a772 14022{
2acceee2
JM
14023 /* Don't propogate error information up to the client. Instead let
14024 the client find out about the error by querying the target. */
6a3753b3 14025 inferior_event_handler (INF_REG_EVENT, NULL);
2acceee2
JM
14026}
14027
74531fed
PA
14028static void
14029remote_async_inferior_event_handler (gdb_client_data data)
14030{
6b8edb51 14031 inferior_event_handler (INF_REG_EVENT, data);
74531fed
PA
14032}
14033
f6ac5f3d
PA
14034void
14035remote_target::async (int enable)
2acceee2 14036{
5d93a237
TT
14037 struct remote_state *rs = get_remote_state ();
14038
6a3753b3 14039 if (enable)
2acceee2 14040 {
88b496c3 14041 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
14042
14043 /* If there are pending events in the stop reply queue tell the
14044 event loop to process them. */
953edf2b 14045 if (!rs->stop_reply_queue.empty ())
6b8edb51 14046 mark_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14047 /* For simplicity, below we clear the pending events token
14048 without remembering whether it is marked, so here we always
14049 mark it. If there's actually no pending notification to
14050 process, this ends up being a no-op (other than a spurious
14051 event-loop wakeup). */
14052 if (target_is_non_stop_p ())
14053 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
14054 }
14055 else
b7d2e916
PA
14056 {
14057 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
14058 /* If the core is disabling async, it doesn't want to be
14059 disturbed with target events. Clear all async event sources
14060 too. */
6b8edb51 14061 clear_async_event_handler (rs->remote_async_inferior_event_token);
6efcd9a8
PA
14062 if (target_is_non_stop_p ())
14063 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 14064 }
6426a772
JM
14065}
14066
65706a29
PA
14067/* Implementation of the to_thread_events method. */
14068
f6ac5f3d
PA
14069void
14070remote_target::thread_events (int enable)
65706a29
PA
14071{
14072 struct remote_state *rs = get_remote_state ();
14073 size_t size = get_remote_packet_size ();
65706a29
PA
14074
14075 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14076 return;
14077
14078 xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
14079 putpkt (rs->buf);
14080 getpkt (&rs->buf, &rs->buf_size, 0);
14081
14082 switch (packet_ok (rs->buf,
14083 &remote_protocol_packets[PACKET_QThreadEvents]))
14084 {
14085 case PACKET_OK:
14086 if (strcmp (rs->buf, "OK") != 0)
14087 error (_("Remote refused setting thread events: %s"), rs->buf);
14088 break;
14089 case PACKET_ERROR:
14090 warning (_("Remote failure reply: %s"), rs->buf);
14091 break;
14092 case PACKET_UNKNOWN:
14093 break;
14094 }
14095}
14096
5a2468f5 14097static void
981a3fb3 14098set_remote_cmd (const char *args, int from_tty)
5a2468f5 14099{
635c7e8a 14100 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
5a2468f5
JM
14101}
14102
d471ea57 14103static void
981a3fb3 14104show_remote_cmd (const char *args, int from_tty)
d471ea57 14105{
37a105a1 14106 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 14107 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 14108 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 14109 struct ui_out *uiout = current_uiout;
37a105a1 14110
2e783024 14111 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
14112 for (; list != NULL; list = list->next)
14113 if (strcmp (list->name, "Z-packet") == 0)
14114 continue;
427c3a89
DJ
14115 else if (list->type == not_set_cmd)
14116 /* Alias commands are exactly like the original, except they
14117 don't have the normal type. */
14118 continue;
14119 else
37a105a1 14120 {
2e783024 14121 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 14122
112e8700
SM
14123 uiout->field_string ("name", list->name);
14124 uiout->text (": ");
427c3a89 14125 if (list->type == show_cmd)
f5c4fcd9 14126 do_show_command (NULL, from_tty, list);
427c3a89
DJ
14127 else
14128 cmd_func (list, NULL, from_tty);
37a105a1 14129 }
d471ea57 14130}
5a2468f5 14131
0f71a2f6 14132
23860348 14133/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
14134static void
14135remote_new_objfile (struct objfile *objfile)
14136{
6b8edb51 14137 remote_target *remote = get_current_remote_target ();
5d93a237 14138
6b8edb51
PA
14139 if (remote != NULL) /* Have a remote connection. */
14140 remote->remote_check_symbols ();
dc8acb97
MS
14141}
14142
00bf0b85
SS
14143/* Pull all the tracepoints defined on the target and create local
14144 data structures representing them. We don't want to create real
14145 tracepoints yet, we don't want to mess up the user's existing
14146 collection. */
14147
f6ac5f3d
PA
14148int
14149remote_target::upload_tracepoints (struct uploaded_tp **utpp)
d5551862 14150{
00bf0b85
SS
14151 struct remote_state *rs = get_remote_state ();
14152 char *p;
d5551862 14153
00bf0b85
SS
14154 /* Ask for a first packet of tracepoint definition. */
14155 putpkt ("qTfP");
14156 getpkt (&rs->buf, &rs->buf_size, 0);
14157 p = rs->buf;
14158 while (*p && *p != 'l')
d5551862 14159 {
00bf0b85
SS
14160 parse_tracepoint_definition (p, utpp);
14161 /* Ask for another packet of tracepoint definition. */
14162 putpkt ("qTsP");
14163 getpkt (&rs->buf, &rs->buf_size, 0);
14164 p = rs->buf;
d5551862 14165 }
00bf0b85 14166 return 0;
d5551862
SS
14167}
14168
f6ac5f3d
PA
14169int
14170remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
d5551862 14171{
00bf0b85 14172 struct remote_state *rs = get_remote_state ();
d5551862 14173 char *p;
d5551862 14174
00bf0b85
SS
14175 /* Ask for a first packet of variable definition. */
14176 putpkt ("qTfV");
d5551862
SS
14177 getpkt (&rs->buf, &rs->buf_size, 0);
14178 p = rs->buf;
00bf0b85 14179 while (*p && *p != 'l')
d5551862 14180 {
00bf0b85
SS
14181 parse_tsv_definition (p, utsvp);
14182 /* Ask for another packet of variable definition. */
14183 putpkt ("qTsV");
d5551862
SS
14184 getpkt (&rs->buf, &rs->buf_size, 0);
14185 p = rs->buf;
14186 }
00bf0b85 14187 return 0;
d5551862
SS
14188}
14189
c1e36e3e
PA
14190/* The "set/show range-stepping" show hook. */
14191
14192static void
14193show_range_stepping (struct ui_file *file, int from_tty,
14194 struct cmd_list_element *c,
14195 const char *value)
14196{
14197 fprintf_filtered (file,
14198 _("Debugger's willingness to use range stepping "
14199 "is %s.\n"), value);
14200}
14201
6b8edb51
PA
14202/* Return true if the vCont;r action is supported by the remote
14203 stub. */
14204
14205bool
14206remote_target::vcont_r_supported ()
14207{
14208 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14209 remote_vcont_probe ();
14210
14211 return (packet_support (PACKET_vCont) == PACKET_ENABLE
14212 && get_remote_state ()->supports_vCont.r);
14213}
14214
c1e36e3e
PA
14215/* The "set/show range-stepping" set hook. */
14216
14217static void
eb4c3f4a 14218set_range_stepping (const char *ignore_args, int from_tty,
c1e36e3e
PA
14219 struct cmd_list_element *c)
14220{
6b8edb51
PA
14221 /* When enabling, check whether range stepping is actually supported
14222 by the target, and warn if not. */
c1e36e3e
PA
14223 if (use_range_stepping)
14224 {
6b8edb51
PA
14225 remote_target *remote = get_current_remote_target ();
14226 if (remote == NULL
14227 || !remote->vcont_r_supported ())
14228 warning (_("Range stepping is not supported by the current target"));
c1e36e3e
PA
14229 }
14230}
14231
c906108c 14232void
fba45db2 14233_initialize_remote (void)
c906108c 14234{
9a7071a8 14235 struct cmd_list_element *cmd;
6f937416 14236 const char *cmd_name;
ea9c271d 14237
0f71a2f6 14238 /* architecture specific data */
29709017
DJ
14239 remote_g_packet_data_handle =
14240 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 14241
94585166
DB
14242 remote_pspace_data
14243 = register_program_space_data_with_cleanup (NULL,
14244 remote_pspace_data_cleanup);
14245
d9f719f1
PA
14246 add_target (remote_target_info, remote_target::open);
14247 add_target (extended_remote_target_info, extended_remote_target::open);
cce74817 14248
dc8acb97 14249 /* Hook into new objfile notification. */
76727919 14250 gdb::observers::new_objfile.attach (remote_new_objfile);
dc8acb97 14251
c906108c
SS
14252#if 0
14253 init_remote_threadtests ();
14254#endif
14255
23860348 14256 /* set/show remote ... */
d471ea57 14257
1bedd215 14258 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
14259Remote protocol specific variables\n\
14260Configure various remote-protocol specific variables such as\n\
1bedd215 14261the packets being used"),
cff3e48b 14262 &remote_set_cmdlist, "set remote ",
23860348 14263 0 /* allow-unknown */, &setlist);
1bedd215 14264 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
14265Remote protocol specific variables\n\
14266Configure various remote-protocol specific variables such as\n\
1bedd215 14267the packets being used"),
cff3e48b 14268 &remote_show_cmdlist, "show remote ",
23860348 14269 0 /* allow-unknown */, &showlist);
5a2468f5 14270
1a966eab
AC
14271 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14272Compare section data on target to the exec file.\n\
95cf3b38
DT
14273Argument is a single section name (default: all loaded sections).\n\
14274To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
14275 &cmdlist);
14276
1a966eab
AC
14277 add_cmd ("packet", class_maintenance, packet_command, _("\
14278Send an arbitrary packet to a remote target.\n\
c906108c
SS
14279 maintenance packet TEXT\n\
14280If GDB is talking to an inferior via the GDB serial protocol, then\n\
14281this command sends the string TEXT to the inferior, and displays the\n\
14282response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 14283terminating `#' character and checksum."),
c906108c
SS
14284 &maintenancelist);
14285
7915a72c
AC
14286 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14287Set whether to send break if interrupted."), _("\
14288Show whether to send break if interrupted."), _("\
14289If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14290 set_remotebreak, show_remotebreak,
e707bbc2 14291 &setlist, &showlist);
9a7071a8
JB
14292 cmd_name = "remotebreak";
14293 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14294 deprecate_cmd (cmd, "set remote interrupt-sequence");
14295 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14296 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14297 deprecate_cmd (cmd, "show remote interrupt-sequence");
14298
14299 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14300 interrupt_sequence_modes, &interrupt_sequence_mode,
14301 _("\
9a7071a8
JB
14302Set interrupt sequence to remote target."), _("\
14303Show interrupt sequence to remote target."), _("\
14304Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14305 NULL, show_interrupt_sequence,
14306 &remote_set_cmdlist,
14307 &remote_show_cmdlist);
14308
14309 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14310 &interrupt_on_connect, _("\
14311Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14312Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14313If set, interrupt sequence is sent to remote target."),
14314 NULL, NULL,
14315 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14316
23860348 14317 /* Install commands for configuring memory read/write packets. */
11cf8741 14318
1a966eab
AC
14319 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14320Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14321 &setlist);
1a966eab
AC
14322 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14323Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14324 &showlist);
14325 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14326 set_memory_write_packet_size, _("\
14327Set the maximum number of bytes per memory-write packet.\n\
14328Specify the number of bytes in a packet or 0 (zero) for the\n\
14329default packet size. The actual limit is further reduced\n\
14330dependent on the target. Specify ``fixed'' to disable the\n\
14331further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14332 &remote_set_cmdlist);
14333 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14334 set_memory_read_packet_size, _("\
14335Set the maximum number of bytes per memory-read packet.\n\
14336Specify the number of bytes in a packet or 0 (zero) for the\n\
14337default packet size. The actual limit is further reduced\n\
14338dependent on the target. Specify ``fixed'' to disable the\n\
14339further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14340 &remote_set_cmdlist);
14341 add_cmd ("memory-write-packet-size", no_class,
14342 show_memory_write_packet_size,
1a966eab 14343 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14344 &remote_show_cmdlist);
14345 add_cmd ("memory-read-packet-size", no_class,
14346 show_memory_read_packet_size,
1a966eab 14347 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14348 &remote_show_cmdlist);
c906108c 14349
b3f42336 14350 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14351 &remote_hw_watchpoint_limit, _("\
14352Set the maximum number of target hardware watchpoints."), _("\
14353Show the maximum number of target hardware watchpoints."), _("\
14354Specify a negative limit for unlimited."),
3e43a32a
MS
14355 NULL, NULL, /* FIXME: i18n: The maximum
14356 number of target hardware
14357 watchpoints is %s. */
b3f42336 14358 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
14359 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14360 &remote_hw_watchpoint_length_limit, _("\
14361Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14362Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14363Specify a negative limit for unlimited."),
14364 NULL, NULL, /* FIXME: i18n: The maximum
14365 length (in bytes) of a target
14366 hardware watchpoint is %s. */
14367 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 14368 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14369 &remote_hw_breakpoint_limit, _("\
14370Set the maximum number of target hardware breakpoints."), _("\
14371Show the maximum number of target hardware breakpoints."), _("\
14372Specify a negative limit for unlimited."),
3e43a32a
MS
14373 NULL, NULL, /* FIXME: i18n: The maximum
14374 number of target hardware
14375 breakpoints is %s. */
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
0e7f50da
UW
14464 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14465 "qXfer:spu:read", "read-spu-object", 0);
14466
14467 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14468 "qXfer:spu:write", "write-spu-object", 0);
14469
07e059b5
VP
14470 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14471 "qXfer:osdata:read", "osdata", 0);
14472
dc146f7c
VP
14473 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14474 "qXfer:threads:read", "threads", 0);
14475
4aa995e1
PA
14476 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14477 "qXfer:siginfo:read", "read-siginfo-object", 0);
14478
14479 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14480 "qXfer:siginfo:write", "write-siginfo-object", 0);
14481
b3b9301e
PA
14482 add_packet_config_cmd
14483 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14484 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14485
169081d0
TG
14486 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14487 "qXfer:uib:read", "unwind-info-block", 0);
14488
444abaca 14489 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14490 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14491 0);
14492
711e434b
PM
14493 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14494 "qGetTIBAddr", "get-thread-information-block-address",
14495 0);
14496
40ab02ce
MS
14497 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14498 "bc", "reverse-continue", 0);
14499
14500 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14501 "bs", "reverse-step", 0);
14502
be2a5f71
DJ
14503 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14504 "qSupported", "supported-packets", 0);
14505
08388c79
DE
14506 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14507 "qSearch:memory", "search-memory", 0);
14508
bd3eecc3
PA
14509 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14510 "qTStatus", "trace-status", 0);
14511
15a201c8
GB
14512 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14513 "vFile:setfs", "hostio-setfs", 0);
14514
a6b151f1
DJ
14515 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14516 "vFile:open", "hostio-open", 0);
14517
14518 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14519 "vFile:pread", "hostio-pread", 0);
14520
14521 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14522 "vFile:pwrite", "hostio-pwrite", 0);
14523
14524 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14525 "vFile:close", "hostio-close", 0);
14526
14527 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14528 "vFile:unlink", "hostio-unlink", 0);
14529
b9e7b9c3
UW
14530 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14531 "vFile:readlink", "hostio-readlink", 0);
14532
0a93529c
GB
14533 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14534 "vFile:fstat", "hostio-fstat", 0);
14535
2d717e4f
DJ
14536 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14537 "vAttach", "attach", 0);
14538
14539 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14540 "vRun", "run", 0);
14541
a6f3e723
SL
14542 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14543 "QStartNoAckMode", "noack", 0);
14544
82f73884
PA
14545 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14546 "vKill", "kill", 0);
14547
0b16c5cf
PA
14548 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14549 "qAttached", "query-attached", 0);
14550
782b2b07 14551 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14552 "ConditionalTracepoints",
14553 "conditional-tracepoints", 0);
3788aec7
LM
14554
14555 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14556 "ConditionalBreakpoints",
14557 "conditional-breakpoints", 0);
14558
d3ce09f5
SS
14559 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14560 "BreakpointCommands",
14561 "breakpoint-commands", 0);
14562
7a697b8d
SS
14563 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14564 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14565
409873ef
SS
14566 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14567 "TracepointSource", "TracepointSource", 0);
14568
d914c394
SS
14569 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14570 "QAllow", "allow", 0);
14571
0fb4aa4b
PA
14572 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14573 "StaticTracepoints", "static-tracepoints", 0);
14574
1e4d1764
YQ
14575 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14576 "InstallInTrace", "install-in-trace", 0);
14577
0fb4aa4b
PA
14578 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14579 "qXfer:statictrace:read", "read-sdata-object", 0);
14580
78d85199
YQ
14581 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14582 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14583
03583c20
UW
14584 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14585 "QDisableRandomization", "disable-randomization", 0);
14586
d1feda86
YQ
14587 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14588 "QAgent", "agent", 0);
14589
f6f899bf
HAQ
14590 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14591 "QTBuffer:size", "trace-buffer-size", 0);
14592
9accd112
MM
14593 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14594 "Qbtrace:off", "disable-btrace", 0);
14595
14596 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14597 "Qbtrace:bts", "enable-btrace-bts", 0);
14598
14599 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14600 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14601
14602 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14603 "qXfer:btrace", "read-btrace", 0);
14604
f4abbc16
MM
14605 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14606 "qXfer:btrace-conf", "read-btrace-conf", 0);
14607
d33501a5
MM
14608 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14609 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14610
73b8c1fd
PA
14611 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14612 "multiprocess-feature", "multiprocess-feature", 0);
14613
f7e6eed5
PA
14614 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14615 "swbreak-feature", "swbreak-feature", 0);
14616
14617 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14618 "hwbreak-feature", "hwbreak-feature", 0);
14619
89245bc0
DB
14620 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14621 "fork-event-feature", "fork-event-feature", 0);
14622
14623 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14624 "vfork-event-feature", "vfork-event-feature", 0);
14625
b20a6524
MM
14626 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14627 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14628
750ce8d1
YQ
14629 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14630 "vContSupported", "verbose-resume-supported", 0);
14631
94585166
DB
14632 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14633 "exec-event-feature", "exec-event-feature", 0);
14634
de979965
PA
14635 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14636 "vCtrlC", "ctrl-c", 0);
14637
65706a29
PA
14638 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14639 "QThreadEvents", "thread-events", 0);
14640
f2faf941
PA
14641 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14642 "N stop reply", "no-resumed-stop-reply", 0);
14643
0b736949
DB
14644 /* Assert that we've registered "set remote foo-packet" commands
14645 for all packet configs. */
ca4f7f8b
PA
14646 {
14647 int i;
14648
14649 for (i = 0; i < PACKET_MAX; i++)
14650 {
14651 /* Ideally all configs would have a command associated. Some
14652 still don't though. */
14653 int excepted;
14654
14655 switch (i)
14656 {
14657 case PACKET_QNonStop:
ca4f7f8b
PA
14658 case PACKET_EnableDisableTracepoints_feature:
14659 case PACKET_tracenz_feature:
14660 case PACKET_DisconnectedTracing_feature:
14661 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14662 case PACKET_qCRC:
14663 /* Additions to this list need to be well justified:
14664 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14665 excepted = 1;
14666 break;
14667 default:
14668 excepted = 0;
14669 break;
14670 }
14671
14672 /* This catches both forgetting to add a config command, and
14673 forgetting to remove a packet from the exception list. */
14674 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14675 }
14676 }
14677
37a105a1
DJ
14678 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14679 Z sub-packet has its own set and show commands, but users may
14680 have sets to this variable in their .gdbinit files (or in their
14681 documentation). */
e9e68a56 14682 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
14683 &remote_Z_packet_detect, _("\
14684Set use of remote protocol `Z' packets"), _("\
14685Show use of remote protocol `Z' packets "), _("\
3b64bf98 14686When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14687packets."),
e9e68a56 14688 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14689 show_remote_protocol_Z_packet_cmd,
14690 /* FIXME: i18n: Use of remote protocol
14691 `Z' packets is %s. */
e9e68a56 14692 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14693
a6b151f1
DJ
14694 add_prefix_cmd ("remote", class_files, remote_command, _("\
14695Manipulate files on the remote system\n\
14696Transfer files to and from the remote target system."),
14697 &remote_cmdlist, "remote ",
14698 0 /* allow-unknown */, &cmdlist);
14699
14700 add_cmd ("put", class_files, remote_put_command,
14701 _("Copy a local file to the remote system."),
14702 &remote_cmdlist);
14703
14704 add_cmd ("get", class_files, remote_get_command,
14705 _("Copy a remote file to the local system."),
14706 &remote_cmdlist);
14707
14708 add_cmd ("delete", class_files, remote_delete_command,
14709 _("Delete a remote file."),
14710 &remote_cmdlist);
14711
2d717e4f 14712 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 14713 &remote_exec_file_var, _("\
2d717e4f 14714Set the remote pathname for \"run\""), _("\
94585166
DB
14715Show the remote pathname for \"run\""), NULL,
14716 set_remote_exec_file,
14717 show_remote_exec_file,
14718 &remote_set_cmdlist,
14719 &remote_show_cmdlist);
2d717e4f 14720
c1e36e3e
PA
14721 add_setshow_boolean_cmd ("range-stepping", class_run,
14722 &use_range_stepping, _("\
14723Enable or disable range stepping."), _("\
14724Show whether target-assisted range stepping is enabled."), _("\
14725If on, and the target supports it, when stepping a source line, GDB\n\
14726tells the target to step the corresponding range of addresses itself instead\n\
14727of issuing multiple single-steps. This speeds up source level\n\
14728stepping. If off, GDB always issues single-steps, even if range\n\
14729stepping is supported by the target. The default is on."),
14730 set_range_stepping,
14731 show_range_stepping,
14732 &setlist,
14733 &showlist);
14734
449092f6
CV
14735 /* Eventually initialize fileio. See fileio.c */
14736 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229 14737
ba348170 14738 /* Take advantage of the fact that the TID field is not used, to tag
79d7f229 14739 special ptids with it set to != 0. */
fd79271b
TT
14740 magic_null_ptid = ptid_t (42000, -1, 1);
14741 not_sent_ptid = ptid_t (42000, -2, 1);
14742 any_thread_ptid = ptid_t (42000, 0, 1);
c906108c 14743}