1 /* Remote target communications for serial-line targets in custom GDB protocol 2 3 Copyright (C) 1988-2021 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 /* See the GDB User Guide for details of the GDB remote protocol. */ 21 22 #include "defs.h" 23 #include <ctype.h> 24 #include <fcntl.h> 25 #include "inferior.h" 26 #include "infrun.h" 27 #include "bfd.h" 28 #include "symfile.h" 29 #include "target.h" 30 #include "process-stratum-target.h" 31 #include "gdbcmd.h" 32 #include "objfiles.h" 33 #include "gdb-stabs.h" 34 #include "gdbthread.h" 35 #include "remote.h" 36 #include "remote-notif.h" 37 #include "regcache.h" 38 #include "value.h" 39 #include "observable.h" 40 #include "solib.h" 41 #include "cli/cli-decode.h" 42 #include "cli/cli-setshow.h" 43 #include "target-descriptions.h" 44 #include "gdb_bfd.h" 45 #include "gdbsupport/filestuff.h" 46 #include "gdbsupport/rsp-low.h" 47 #include "disasm.h" 48 #include "location.h" 49 50 #include "gdbsupport/gdb_sys_time.h" 51 52 #include "gdbsupport/event-loop.h" 53 #include "event-top.h" 54 #include "inf-loop.h" 55 56 #include <signal.h> 57 #include "serial.h" 58 59 #include "gdbcore.h" 60 61 #include "remote-fileio.h" 62 #include "gdb/fileio.h" 63 #include <sys/stat.h> 64 #include "xml-support.h" 65 66 #include "memory-map.h" 67 68 #include "tracepoint.h" 69 #include "ax.h" 70 #include "ax-gdb.h" 71 #include "gdbsupport/agent.h" 72 #include "btrace.h" 73 #include "record-btrace.h" 74 #include <algorithm> 75 #include "gdbsupport/scoped_restore.h" 76 #include "gdbsupport/environ.h" 77 #include "gdbsupport/byte-vector.h" 78 #include "gdbsupport/search.h" 79 #include <algorithm> 80 #include <unordered_map> 81 #include "async-event.h" 82 #include "gdbsupport/selftest.h" 83 84 /* The remote target. */ 85 86 static const char remote_doc[] = N_("\ 87 Use a remote computer via a serial line, using a gdb-specific protocol.\n\ 88 Specify the serial device it is connected to\n\ 89 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."); 90 91 /* See remote.h */ 92 93 bool remote_debug = false; 94 95 #define OPAQUETHREADBYTES 8 96 97 /* a 64 bit opaque identifier */ 98 typedef unsigned char threadref[OPAQUETHREADBYTES]; 99 100 struct gdb_ext_thread_info; 101 struct threads_listing_context; 102 typedef int (*rmt_thread_action) (threadref *ref, void *context); 103 struct protocol_feature; 104 struct packet_reg; 105 106 struct stop_reply; 107 typedef std::unique_ptr<stop_reply> stop_reply_up; 108 109 /* Generic configuration support for packets the stub optionally 110 supports. Allows the user to specify the use of the packet as well 111 as allowing GDB to auto-detect support in the remote stub. */ 112 113 enum packet_support 114 { 115 PACKET_SUPPORT_UNKNOWN = 0, 116 PACKET_ENABLE, 117 PACKET_DISABLE 118 }; 119 120 /* Analyze a packet's return value and update the packet config 121 accordingly. */ 122 123 enum packet_result 124 { 125 PACKET_ERROR, 126 PACKET_OK, 127 PACKET_UNKNOWN 128 }; 129 130 struct threads_listing_context; 131 132 /* Stub vCont actions support. 133 134 Each field is a boolean flag indicating whether the stub reports 135 support for the corresponding action. */ 136 137 struct vCont_action_support 138 { 139 /* vCont;t */ 140 bool t = false; 141 142 /* vCont;r */ 143 bool r = false; 144 145 /* vCont;s */ 146 bool s = false; 147 148 /* vCont;S */ 149 bool S = false; 150 }; 151 152 /* About this many threadids fit in a packet. */ 153 154 #define MAXTHREADLISTRESULTS 32 155 156 /* Data for the vFile:pread readahead cache. */ 157 158 struct readahead_cache 159 { 160 /* Invalidate the readahead cache. */ 161 void invalidate (); 162 163 /* Invalidate the readahead cache if it is holding data for FD. */ 164 void invalidate_fd (int fd); 165 166 /* Serve pread from the readahead cache. Returns number of bytes 167 read, or 0 if the request can't be served from the cache. */ 168 int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset); 169 170 /* The file descriptor for the file that is being cached. -1 if the 171 cache is invalid. */ 172 int fd = -1; 173 174 /* The offset into the file that the cache buffer corresponds 175 to. */ 176 ULONGEST offset = 0; 177 178 /* The buffer holding the cache contents. */ 179 gdb_byte *buf = nullptr; 180 /* The buffer's size. We try to read as much as fits into a packet 181 at a time. */ 182 size_t bufsize = 0; 183 184 /* Cache hit and miss counters. */ 185 ULONGEST hit_count = 0; 186 ULONGEST miss_count = 0; 187 }; 188 189 /* Description of the remote protocol for a given architecture. */ 190 191 struct packet_reg 192 { 193 long offset; /* Offset into G packet. */ 194 long regnum; /* GDB's internal register number. */ 195 LONGEST pnum; /* Remote protocol register number. */ 196 int in_g_packet; /* Always part of G packet. */ 197 /* long size in bytes; == register_size (target_gdbarch (), regnum); 198 at present. */ 199 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum); 200 at present. */ 201 }; 202 203 struct remote_arch_state 204 { 205 explicit remote_arch_state (struct gdbarch *gdbarch); 206 207 /* Description of the remote protocol registers. */ 208 long sizeof_g_packet; 209 210 /* Description of the remote protocol registers indexed by REGNUM 211 (making an array gdbarch_num_regs in size). */ 212 std::unique_ptr<packet_reg[]> regs; 213 214 /* This is the size (in chars) of the first response to the ``g'' 215 packet. It is used as a heuristic when determining the maximum 216 size of memory-read and memory-write packets. A target will 217 typically only reserve a buffer large enough to hold the ``g'' 218 packet. The size does not include packet overhead (headers and 219 trailers). */ 220 long actual_register_packet_size; 221 222 /* This is the maximum size (in chars) of a non read/write packet. 223 It is also used as a cap on the size of read/write packets. */ 224 long remote_packet_size; 225 }; 226 227 /* Description of the remote protocol state for the currently 228 connected target. This is per-target state, and independent of the 229 selected architecture. */ 230 231 class remote_state 232 { 233 public: 234 235 remote_state (); 236 ~remote_state (); 237 238 /* Get the remote arch state for GDBARCH. */ 239 struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch); 240 241 public: /* data */ 242 243 /* A buffer to use for incoming packets, and its current size. The 244 buffer is grown dynamically for larger incoming packets. 245 Outgoing packets may also be constructed in this buffer. 246 The size of the buffer is always at least REMOTE_PACKET_SIZE; 247 REMOTE_PACKET_SIZE should be used to limit the length of outgoing 248 packets. */ 249 gdb::char_vector buf; 250 251 /* True if we're going through initial connection setup (finding out 252 about the remote side's threads, relocating symbols, etc.). */ 253 bool starting_up = false; 254 255 /* If we negotiated packet size explicitly (and thus can bypass 256 heuristics for the largest packet size that will not overflow 257 a buffer in the stub), this will be set to that packet size. 258 Otherwise zero, meaning to use the guessed size. */ 259 long explicit_packet_size = 0; 260 261 /* remote_wait is normally called when the target is running and 262 waits for a stop reply packet. But sometimes we need to call it 263 when the target is already stopped. We can send a "?" packet 264 and have remote_wait read the response. Or, if we already have 265 the response, we can stash it in BUF and tell remote_wait to 266 skip calling getpkt. This flag is set when BUF contains a 267 stop reply packet and the target is not waiting. */ 268 int cached_wait_status = 0; 269 270 /* True, if in no ack mode. That is, neither GDB nor the stub will 271 expect acks from each other. The connection is assumed to be 272 reliable. */ 273 bool noack_mode = false; 274 275 /* True if we're connected in extended remote mode. */ 276 bool extended = false; 277 278 /* True if we resumed the target and we're waiting for the target to 279 stop. In the mean time, we can't start another command/query. 280 The remote server wouldn't be ready to process it, so we'd 281 timeout waiting for a reply that would never come and eventually 282 we'd close the connection. This can happen in asynchronous mode 283 because we allow GDB commands while the target is running. */ 284 bool waiting_for_stop_reply = false; 285 286 /* The status of the stub support for the various vCont actions. */ 287 vCont_action_support supports_vCont; 288 /* Whether vCont support was probed already. This is a workaround 289 until packet_support is per-connection. */ 290 bool supports_vCont_probed; 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. */ 378 std::vector<stop_reply_up> stop_reply_queue; 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 393 private: 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 }; 400 401 static const target_info remote_target_info = { 402 "remote", 403 N_("Remote serial target in gdb-specific protocol"), 404 remote_doc 405 }; 406 407 class remote_target : public process_stratum_target 408 { 409 public: 410 remote_target () = default; 411 ~remote_target () override; 412 info()413 const target_info &info () const override 414 { return remote_target_info; } 415 416 const char *connection_string () override; 417 get_thread_control_capabilities()418 thread_control_capabilities get_thread_control_capabilities () override 419 { return tc_schedlock; } 420 421 /* Open a remote connection. */ 422 static void open (const char *, int); 423 424 void close () override; 425 426 void detach (inferior *, int) override; 427 void disconnect (const char *, int) override; 428 429 void commit_resumed () override; 430 void resume (ptid_t, int, enum gdb_signal) override; 431 ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override; 432 bool has_pending_events () 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 446 bool stopped_by_sw_breakpoint () override; 447 bool supports_stopped_by_sw_breakpoint () override; 448 449 bool stopped_by_hw_breakpoint () override; 450 451 bool supports_stopped_by_hw_breakpoint () override; 452 453 bool stopped_by_watchpoint () override; 454 455 bool stopped_data_address (CORE_ADDR *) override; 456 457 bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override; 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 (gdb::array_view<const unsigned char>) override; 480 481 int set_syscall_catchpoint (int, bool, int, 482 gdb::array_view<const int>) override; 483 484 void program_signals (gdb::array_view<const unsigned char>) override; 485 486 bool thread_alive (ptid_t ptid) override; 487 488 const char *thread_name (struct thread_info *) override; 489 490 void update_thread_list () override; 491 492 std::string 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 gdb::byte_vector thread_info_to_thread_handle (struct thread_info *tp) 503 override; 504 505 void stop (ptid_t) override; 506 507 void interrupt () override; 508 509 void pass_ctrlc () override; 510 511 enum target_xfer_status xfer_partial (enum target_object object, 512 const char *annex, 513 gdb_byte *readbuf, 514 const gdb_byte *writebuf, 515 ULONGEST offset, ULONGEST len, 516 ULONGEST *xfered_len) override; 517 518 ULONGEST get_memory_xfer_limit () override; 519 520 void rcmd (const char *command, struct ui_file *output) override; 521 522 char *pid_to_exec_file (int pid) override; 523 log_command(const char * cmd)524 void log_command (const char *cmd) override 525 { 526 serial_log_command (this, cmd); 527 } 528 529 CORE_ADDR get_thread_local_address (ptid_t ptid, 530 CORE_ADDR load_module_addr, 531 CORE_ADDR offset) override; 532 533 bool can_execute_reverse () override; 534 535 std::vector<mem_region> memory_map () override; 536 537 void flash_erase (ULONGEST address, LONGEST length) override; 538 539 void flash_done () override; 540 541 const struct target_desc *read_description () override; 542 543 int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len, 544 const gdb_byte *pattern, ULONGEST pattern_len, 545 CORE_ADDR *found_addrp) override; 546 547 bool can_async_p () override; 548 549 bool is_async_p () override; 550 551 void async (int) override; 552 553 int async_wait_fd () override; 554 555 void thread_events (int) override; 556 557 int can_do_single_step () override; 558 559 void terminal_inferior () override; 560 561 void terminal_ours () override; 562 563 bool supports_non_stop () override; 564 565 bool supports_multi_process () override; 566 567 bool supports_disable_randomization () override; 568 569 bool filesystem_is_local () override; 570 571 572 int fileio_open (struct inferior *inf, const char *filename, 573 int flags, int mode, int warn_if_slow, 574 int *target_errno) override; 575 576 int fileio_pwrite (int fd, const gdb_byte *write_buf, int len, 577 ULONGEST offset, int *target_errno) override; 578 579 int fileio_pread (int fd, gdb_byte *read_buf, int len, 580 ULONGEST offset, int *target_errno) override; 581 582 int fileio_fstat (int fd, struct stat *sb, int *target_errno) override; 583 584 int fileio_close (int fd, int *target_errno) override; 585 586 int fileio_unlink (struct inferior *inf, 587 const char *filename, 588 int *target_errno) override; 589 590 gdb::optional<std::string> 591 fileio_readlink (struct inferior *inf, 592 const char *filename, 593 int *target_errno) override; 594 595 bool supports_enable_disable_tracepoint () override; 596 597 bool supports_string_tracing () override; 598 599 bool supports_evaluation_of_breakpoint_conditions () override; 600 601 bool can_run_breakpoint_commands () override; 602 603 void trace_init () override; 604 605 void download_tracepoint (struct bp_location *location) override; 606 607 bool can_download_tracepoint () override; 608 609 void download_trace_state_variable (const trace_state_variable &tsv) override; 610 611 void enable_tracepoint (struct bp_location *location) override; 612 613 void disable_tracepoint (struct bp_location *location) override; 614 615 void trace_set_readonly_regions () override; 616 617 void trace_start () override; 618 619 int get_trace_status (struct trace_status *ts) override; 620 621 void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp) 622 override; 623 624 void trace_stop () override; 625 626 int trace_find (enum trace_find_type type, int num, 627 CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override; 628 629 bool get_trace_state_variable_value (int tsv, LONGEST *val) override; 630 631 int save_trace_data (const char *filename) override; 632 633 int upload_tracepoints (struct uploaded_tp **utpp) override; 634 635 int upload_trace_state_variables (struct uploaded_tsv **utsvp) override; 636 637 LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override; 638 639 int get_min_fast_tracepoint_insn_len () override; 640 641 void set_disconnected_tracing (int val) override; 642 643 void set_circular_trace_buffer (int val) override; 644 645 void set_trace_buffer_size (LONGEST val) override; 646 647 bool set_trace_notes (const char *user, const char *notes, 648 const char *stopnotes) override; 649 650 int core_of_thread (ptid_t ptid) override; 651 652 int verify_memory (const gdb_byte *data, 653 CORE_ADDR memaddr, ULONGEST size) override; 654 655 656 bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override; 657 658 void set_permissions () override; 659 660 bool static_tracepoint_marker_at (CORE_ADDR, 661 struct static_tracepoint_marker *marker) 662 override; 663 664 std::vector<static_tracepoint_marker> 665 static_tracepoint_markers_by_strid (const char *id) override; 666 667 traceframe_info_up traceframe_info () override; 668 669 bool use_agent (bool use) override; 670 bool can_use_agent () override; 671 672 struct btrace_target_info *enable_btrace (ptid_t ptid, 673 const struct btrace_config *conf) override; 674 675 void disable_btrace (struct btrace_target_info *tinfo) override; 676 677 void teardown_btrace (struct btrace_target_info *tinfo) override; 678 679 enum btrace_error read_btrace (struct btrace_data *data, 680 struct btrace_target_info *btinfo, 681 enum btrace_read_type type) override; 682 683 const struct btrace_config *btrace_conf (const struct btrace_target_info *) override; 684 bool augmented_libraries_svr4_read () override; 685 void follow_fork (bool, bool) override; 686 void follow_exec (inferior *, ptid_t, const char *) override; 687 int insert_fork_catchpoint (int) override; 688 int remove_fork_catchpoint (int) override; 689 int insert_vfork_catchpoint (int) override; 690 int remove_vfork_catchpoint (int) override; 691 int insert_exec_catchpoint (int) override; 692 int remove_exec_catchpoint (int) override; 693 enum exec_direction_kind execution_direction () override; 694 695 bool supports_memory_tagging () override; 696 697 bool fetch_memtags (CORE_ADDR address, size_t len, 698 gdb::byte_vector &tags, int type) override; 699 700 bool store_memtags (CORE_ADDR address, size_t len, 701 const gdb::byte_vector &tags, int type) override; 702 703 public: /* Remote specific methods. */ 704 705 void remote_download_command_source (int num, ULONGEST addr, 706 struct command_line *cmds); 707 708 void remote_file_put (const char *local_file, const char *remote_file, 709 int from_tty); 710 void remote_file_get (const char *remote_file, const char *local_file, 711 int from_tty); 712 void remote_file_delete (const char *remote_file, int from_tty); 713 714 int remote_hostio_pread (int fd, gdb_byte *read_buf, int len, 715 ULONGEST offset, int *remote_errno); 716 int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len, 717 ULONGEST offset, int *remote_errno); 718 int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len, 719 ULONGEST offset, int *remote_errno); 720 721 int remote_hostio_send_command (int command_bytes, int which_packet, 722 int *remote_errno, const char **attachment, 723 int *attachment_len); 724 int remote_hostio_set_filesystem (struct inferior *inf, 725 int *remote_errno); 726 /* We should get rid of this and use fileio_open directly. */ 727 int remote_hostio_open (struct inferior *inf, const char *filename, 728 int flags, int mode, int warn_if_slow, 729 int *remote_errno); 730 int remote_hostio_close (int fd, int *remote_errno); 731 732 int remote_hostio_unlink (inferior *inf, const char *filename, 733 int *remote_errno); 734 735 struct remote_state *get_remote_state (); 736 737 long get_remote_packet_size (void); 738 long get_memory_packet_size (struct memory_packet_config *config); 739 740 long get_memory_write_packet_size (); 741 long get_memory_read_packet_size (); 742 743 char *append_pending_thread_resumptions (char *p, char *endp, 744 ptid_t ptid); 745 static void open_1 (const char *name, int from_tty, int extended_p); 746 void start_remote (int from_tty, int extended_p); 747 void remote_detach_1 (struct inferior *inf, int from_tty); 748 749 char *append_resumption (char *p, char *endp, 750 ptid_t ptid, int step, gdb_signal siggnal); 751 int remote_resume_with_vcont (ptid_t ptid, int step, 752 gdb_signal siggnal); 753 754 thread_info *add_current_inferior_and_thread (const char *wait_status); 755 756 ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status, 757 target_wait_flags options); 758 ptid_t wait_as (ptid_t ptid, target_waitstatus *status, 759 target_wait_flags options); 760 761 ptid_t process_stop_reply (struct stop_reply *stop_reply, 762 target_waitstatus *status); 763 764 ptid_t select_thread_for_ambiguous_stop_reply 765 (const struct target_waitstatus *status); 766 767 void remote_notice_new_inferior (ptid_t currthread, bool executing); 768 769 void process_initial_stop_replies (int from_tty); 770 771 thread_info *remote_add_thread (ptid_t ptid, bool running, bool executing); 772 773 void btrace_sync_conf (const btrace_config *conf); 774 775 void remote_btrace_maybe_reopen (); 776 777 void remove_new_fork_children (threads_listing_context *context); 778 void kill_new_fork_children (int pid); 779 void discard_pending_stop_replies (struct inferior *inf); 780 int stop_reply_queue_length (); 781 782 void check_pending_events_prevent_wildcard_vcont 783 (bool *may_global_wildcard_vcont); 784 785 void discard_pending_stop_replies_in_queue (); 786 struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid); 787 struct stop_reply *queued_stop_reply (ptid_t ptid); 788 int peek_stop_reply (ptid_t ptid); 789 void remote_parse_stop_reply (const char *buf, stop_reply *event); 790 791 void remote_stop_ns (ptid_t ptid); 792 void remote_interrupt_as (); 793 void remote_interrupt_ns (); 794 795 char *remote_get_noisy_reply (); 796 int remote_query_attached (int pid); 797 inferior *remote_add_inferior (bool fake_pid_p, int pid, int attached, 798 int try_open_exec); 799 800 ptid_t remote_current_thread (ptid_t oldpid); 801 ptid_t get_current_thread (const char *wait_status); 802 803 void set_thread (ptid_t ptid, int gen); 804 void set_general_thread (ptid_t ptid); 805 void set_continue_thread (ptid_t ptid); 806 void set_general_process (); 807 808 char *write_ptid (char *buf, const char *endbuf, ptid_t ptid); 809 810 int remote_unpack_thread_info_response (const char *pkt, threadref *expectedref, 811 gdb_ext_thread_info *info); 812 int remote_get_threadinfo (threadref *threadid, int fieldset, 813 gdb_ext_thread_info *info); 814 815 int parse_threadlist_response (const char *pkt, int result_limit, 816 threadref *original_echo, 817 threadref *resultlist, 818 int *doneflag); 819 int remote_get_threadlist (int startflag, threadref *nextthread, 820 int result_limit, int *done, int *result_count, 821 threadref *threadlist); 822 823 int remote_threadlist_iterator (rmt_thread_action stepfunction, 824 void *context, int looplimit); 825 826 int remote_get_threads_with_ql (threads_listing_context *context); 827 int remote_get_threads_with_qxfer (threads_listing_context *context); 828 int remote_get_threads_with_qthreadinfo (threads_listing_context *context); 829 830 void extended_remote_restart (); 831 832 void get_offsets (); 833 834 void remote_check_symbols (); 835 836 void remote_supported_packet (const struct protocol_feature *feature, 837 enum packet_support support, 838 const char *argument); 839 840 void remote_query_supported (); 841 842 void remote_packet_size (const protocol_feature *feature, 843 packet_support support, const char *value); 844 845 void remote_serial_quit_handler (); 846 847 void remote_detach_pid (int pid); 848 849 void remote_vcont_probe (); 850 851 void remote_resume_with_hc (ptid_t ptid, int step, 852 gdb_signal siggnal); 853 854 void send_interrupt_sequence (); 855 void interrupt_query (); 856 857 void remote_notif_get_pending_events (notif_client *nc); 858 859 int fetch_register_using_p (struct regcache *regcache, 860 packet_reg *reg); 861 int send_g_packet (); 862 void process_g_packet (struct regcache *regcache); 863 void fetch_registers_using_g (struct regcache *regcache); 864 int store_register_using_P (const struct regcache *regcache, 865 packet_reg *reg); 866 void store_registers_using_G (const struct regcache *regcache); 867 868 void set_remote_traceframe (); 869 870 void check_binary_download (CORE_ADDR addr); 871 872 target_xfer_status remote_write_bytes_aux (const char *header, 873 CORE_ADDR memaddr, 874 const gdb_byte *myaddr, 875 ULONGEST len_units, 876 int unit_size, 877 ULONGEST *xfered_len_units, 878 char packet_format, 879 int use_length); 880 881 target_xfer_status remote_write_bytes (CORE_ADDR memaddr, 882 const gdb_byte *myaddr, ULONGEST len, 883 int unit_size, ULONGEST *xfered_len); 884 885 target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, 886 ULONGEST len_units, 887 int unit_size, ULONGEST *xfered_len_units); 888 889 target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf, 890 ULONGEST memaddr, 891 ULONGEST len, 892 int unit_size, 893 ULONGEST *xfered_len); 894 895 target_xfer_status remote_read_bytes (CORE_ADDR memaddr, 896 gdb_byte *myaddr, ULONGEST len, 897 int unit_size, 898 ULONGEST *xfered_len); 899 900 packet_result remote_send_printf (const char *format, ...) 901 ATTRIBUTE_PRINTF (2, 3); 902 903 target_xfer_status remote_flash_write (ULONGEST address, 904 ULONGEST length, ULONGEST *xfered_len, 905 const gdb_byte *data); 906 907 int readchar (int timeout); 908 909 void remote_serial_write (const char *str, int len); 910 911 int putpkt (const char *buf); 912 int putpkt_binary (const char *buf, int cnt); 913 putpkt(const gdb::char_vector & buf)914 int putpkt (const gdb::char_vector &buf) 915 { 916 return putpkt (buf.data ()); 917 } 918 919 void skip_frame (); 920 long read_frame (gdb::char_vector *buf_p); 921 void getpkt (gdb::char_vector *buf, int forever); 922 int getpkt_or_notif_sane_1 (gdb::char_vector *buf, int forever, 923 int expecting_notif, int *is_notif); 924 int getpkt_sane (gdb::char_vector *buf, int forever); 925 int getpkt_or_notif_sane (gdb::char_vector *buf, int forever, 926 int *is_notif); 927 int remote_vkill (int pid); 928 void remote_kill_k (); 929 930 void extended_remote_disable_randomization (int val); 931 int extended_remote_run (const std::string &args); 932 933 void send_environment_packet (const char *action, 934 const char *packet, 935 const char *value); 936 937 void extended_remote_environment_support (); 938 void extended_remote_set_inferior_cwd (); 939 940 target_xfer_status remote_write_qxfer (const char *object_name, 941 const char *annex, 942 const gdb_byte *writebuf, 943 ULONGEST offset, LONGEST len, 944 ULONGEST *xfered_len, 945 struct packet_config *packet); 946 947 target_xfer_status remote_read_qxfer (const char *object_name, 948 const char *annex, 949 gdb_byte *readbuf, ULONGEST offset, 950 LONGEST len, 951 ULONGEST *xfered_len, 952 struct packet_config *packet); 953 954 void push_stop_reply (struct stop_reply *new_event); 955 956 bool vcont_r_supported (); 957 958 void packet_command (const char *args, int from_tty); 959 960 private: /* data fields */ 961 962 /* The remote state. Don't reference this directly. Use the 963 get_remote_state method instead. */ 964 remote_state m_remote_state; 965 }; 966 967 static const target_info extended_remote_target_info = { 968 "extended-remote", 969 N_("Extended remote serial target in gdb-specific protocol"), 970 remote_doc 971 }; 972 973 /* Set up the extended remote target by extending the standard remote 974 target and adding to it. */ 975 976 class extended_remote_target final : public remote_target 977 { 978 public: info()979 const target_info &info () const override 980 { return extended_remote_target_info; } 981 982 /* Open an extended-remote connection. */ 983 static void open (const char *, int); 984 can_create_inferior()985 bool can_create_inferior () override { return true; } 986 void create_inferior (const char *, const std::string &, 987 char **, int) override; 988 989 void detach (inferior *, int) override; 990 can_attach()991 bool can_attach () override { return true; } 992 void attach (const char *, int) override; 993 994 void post_attach (int) override; 995 bool supports_disable_randomization () override; 996 }; 997 998 /* Per-program-space data key. */ 999 static const struct program_space_key<char, gdb::xfree_deleter<char>> 1000 remote_pspace_data; 1001 1002 /* The variable registered as the control variable used by the 1003 remote exec-file commands. While the remote exec-file setting is 1004 per-program-space, the set/show machinery uses this as the 1005 location of the remote exec-file value. */ 1006 static char *remote_exec_file_var; 1007 1008 /* The size to align memory write packets, when practical. The protocol 1009 does not guarantee any alignment, and gdb will generate short 1010 writes and unaligned writes, but even as a best-effort attempt this 1011 can improve bulk transfers. For instance, if a write is misaligned 1012 relative to the target's data bus, the stub may need to make an extra 1013 round trip fetching data from the target. This doesn't make a 1014 huge difference, but it's easy to do, so we try to be helpful. 1015 1016 The alignment chosen is arbitrary; usually data bus width is 1017 important here, not the possibly larger cache line size. */ 1018 enum { REMOTE_ALIGN_WRITES = 16 }; 1019 1020 /* Prototypes for local functions. */ 1021 1022 static int hexnumlen (ULONGEST num); 1023 1024 static int stubhex (int ch); 1025 1026 static int hexnumstr (char *, ULONGEST); 1027 1028 static int hexnumnstr (char *, ULONGEST, int); 1029 1030 static CORE_ADDR remote_address_masked (CORE_ADDR); 1031 1032 static void print_packet (const char *); 1033 1034 static int stub_unpack_int (const char *buff, int fieldlength); 1035 1036 struct packet_config; 1037 1038 static void show_packet_config_cmd (struct packet_config *config); 1039 1040 static void show_remote_protocol_packet_cmd (struct ui_file *file, 1041 int from_tty, 1042 struct cmd_list_element *c, 1043 const char *value); 1044 1045 static ptid_t read_ptid (const char *buf, const char **obuf); 1046 1047 static void remote_async_inferior_event_handler (gdb_client_data); 1048 1049 static bool remote_read_description_p (struct target_ops *target); 1050 1051 static void remote_console_output (const char *msg); 1052 1053 static void remote_btrace_reset (remote_state *rs); 1054 1055 static void remote_unpush_and_throw (remote_target *target); 1056 1057 /* For "remote". */ 1058 1059 static struct cmd_list_element *remote_cmdlist; 1060 1061 /* For "set remote" and "show remote". */ 1062 1063 static struct cmd_list_element *remote_set_cmdlist; 1064 static struct cmd_list_element *remote_show_cmdlist; 1065 1066 /* Controls whether GDB is willing to use range stepping. */ 1067 1068 static bool use_range_stepping = true; 1069 1070 /* From the remote target's point of view, each thread is in one of these three 1071 states. */ 1072 enum class resume_state 1073 { 1074 /* Not resumed - we haven't been asked to resume this thread. */ 1075 NOT_RESUMED, 1076 1077 /* We have been asked to resume this thread, but haven't sent a vCont action 1078 for it yet. We'll need to consider it next time commit_resume is 1079 called. */ 1080 RESUMED_PENDING_VCONT, 1081 1082 /* We have been asked to resume this thread, and we have sent a vCont action 1083 for it. */ 1084 RESUMED, 1085 }; 1086 1087 /* Information about a thread's pending vCont-resume. Used when a thread is in 1088 the remote_resume_state::RESUMED_PENDING_VCONT state. remote_target::resume 1089 stores this information which is then picked up by 1090 remote_target::commit_resume to know which is the proper action for this 1091 thread to include in the vCont packet. */ 1092 struct resumed_pending_vcont_info 1093 { 1094 /* True if the last resume call for this thread was a step request, false 1095 if a continue request. */ 1096 bool step; 1097 1098 /* The signal specified in the last resume call for this thread. */ 1099 gdb_signal sig; 1100 }; 1101 1102 /* Private data that we'll store in (struct thread_info)->priv. */ 1103 struct remote_thread_info : public private_thread_info 1104 { 1105 std::string extra; 1106 std::string name; 1107 int core = -1; 1108 1109 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a 1110 sequence of bytes. */ 1111 gdb::byte_vector thread_handle; 1112 1113 /* Whether the target stopped for a breakpoint/watchpoint. */ 1114 enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON; 1115 1116 /* This is set to the data address of the access causing the target 1117 to stop for a watchpoint. */ 1118 CORE_ADDR watch_data_address = 0; 1119 1120 /* Get the thread's resume state. */ 1121 enum resume_state get_resume_state () const 1122 { 1123 return m_resume_state; 1124 } 1125 1126 /* Put the thread in the NOT_RESUMED state. */ 1127 void set_not_resumed () 1128 { 1129 m_resume_state = resume_state::NOT_RESUMED; 1130 } 1131 1132 /* Put the thread in the RESUMED_PENDING_VCONT state. */ 1133 void set_resumed_pending_vcont (bool step, gdb_signal sig) 1134 { 1135 m_resume_state = resume_state::RESUMED_PENDING_VCONT; 1136 m_resumed_pending_vcont_info.step = step; 1137 m_resumed_pending_vcont_info.sig = sig; 1138 } 1139 1140 /* Get the information this thread's pending vCont-resumption. 1141 1142 Must only be called if the thread is in the RESUMED_PENDING_VCONT resume 1143 state. */ 1144 const struct resumed_pending_vcont_info &resumed_pending_vcont_info () const 1145 { 1146 gdb_assert (m_resume_state == resume_state::RESUMED_PENDING_VCONT); 1147 1148 return m_resumed_pending_vcont_info; 1149 } 1150 1151 /* Put the thread in the VCONT_RESUMED state. */ 1152 void set_resumed () 1153 { 1154 m_resume_state = resume_state::RESUMED; 1155 } 1156 1157 private: 1158 /* Resume state for this thread. This is used to implement vCont action 1159 coalescing (only when the target operates in non-stop mode). 1160 1161 remote_target::resume moves the thread to the RESUMED_PENDING_VCONT state, 1162 which notes that this thread must be considered in the next commit_resume 1163 call. 1164 1165 remote_target::commit_resume sends a vCont packet with actions for the 1166 threads in the RESUMED_PENDING_VCONT state and moves them to the 1167 VCONT_RESUMED state. 1168 1169 When reporting a stop to the core for a thread, that thread is moved back 1170 to the NOT_RESUMED state. */ 1171 enum resume_state m_resume_state = resume_state::NOT_RESUMED; 1172 1173 /* Extra info used if the thread is in the RESUMED_PENDING_VCONT state. */ 1174 struct resumed_pending_vcont_info m_resumed_pending_vcont_info; 1175 }; 1176 1177 remote_state::remote_state () 1178 : buf (400) 1179 { 1180 } 1181 1182 remote_state::~remote_state () 1183 { 1184 xfree (this->last_pass_packet); 1185 xfree (this->last_program_signals_packet); 1186 xfree (this->finished_object); 1187 xfree (this->finished_annex); 1188 } 1189 1190 /* Utility: generate error from an incoming stub packet. */ 1191 static void 1192 trace_error (char *buf) 1193 { 1194 if (*buf++ != 'E') 1195 return; /* not an error msg */ 1196 switch (*buf) 1197 { 1198 case '1': /* malformed packet error */ 1199 if (*++buf == '0') /* general case: */ 1200 error (_("remote.c: error in outgoing packet.")); 1201 else 1202 error (_("remote.c: error in outgoing packet at field #%ld."), 1203 strtol (buf, NULL, 16)); 1204 default: 1205 error (_("Target returns error code '%s'."), buf); 1206 } 1207 } 1208 1209 /* Utility: wait for reply from stub, while accepting "O" packets. */ 1210 1211 char * 1212 remote_target::remote_get_noisy_reply () 1213 { 1214 struct remote_state *rs = get_remote_state (); 1215 1216 do /* Loop on reply from remote stub. */ 1217 { 1218 char *buf; 1219 1220 QUIT; /* Allow user to bail out with ^C. */ 1221 getpkt (&rs->buf, 0); 1222 buf = rs->buf.data (); 1223 if (buf[0] == 'E') 1224 trace_error (buf); 1225 else if (startswith (buf, "qRelocInsn:")) 1226 { 1227 ULONGEST ul; 1228 CORE_ADDR from, to, org_to; 1229 const char *p, *pp; 1230 int adjusted_size = 0; 1231 int relocated = 0; 1232 1233 p = buf + strlen ("qRelocInsn:"); 1234 pp = unpack_varlen_hex (p, &ul); 1235 if (*pp != ';') 1236 error (_("invalid qRelocInsn packet: %s"), buf); 1237 from = ul; 1238 1239 p = pp + 1; 1240 unpack_varlen_hex (p, &ul); 1241 to = ul; 1242 1243 org_to = to; 1244 1245 try 1246 { 1247 gdbarch_relocate_instruction (target_gdbarch (), &to, from); 1248 relocated = 1; 1249 } 1250 catch (const gdb_exception &ex) 1251 { 1252 if (ex.error == MEMORY_ERROR) 1253 { 1254 /* Propagate memory errors silently back to the 1255 target. The stub may have limited the range of 1256 addresses we can write to, for example. */ 1257 } 1258 else 1259 { 1260 /* Something unexpectedly bad happened. Be verbose 1261 so we can tell what, and propagate the error back 1262 to the stub, so it doesn't get stuck waiting for 1263 a response. */ 1264 exception_fprintf (gdb_stderr, ex, 1265 _("warning: relocating instruction: ")); 1266 } 1267 putpkt ("E01"); 1268 } 1269 1270 if (relocated) 1271 { 1272 adjusted_size = to - org_to; 1273 1274 xsnprintf (buf, rs->buf.size (), "qRelocInsn:%x", adjusted_size); 1275 putpkt (buf); 1276 } 1277 } 1278 else if (buf[0] == 'O' && buf[1] != 'K') 1279 remote_console_output (buf + 1); /* 'O' message from stub */ 1280 else 1281 return buf; /* Here's the actual reply. */ 1282 } 1283 while (1); 1284 } 1285 1286 struct remote_arch_state * 1287 remote_state::get_remote_arch_state (struct gdbarch *gdbarch) 1288 { 1289 remote_arch_state *rsa; 1290 1291 auto it = this->m_arch_states.find (gdbarch); 1292 if (it == this->m_arch_states.end ()) 1293 { 1294 auto p = this->m_arch_states.emplace (std::piecewise_construct, 1295 std::forward_as_tuple (gdbarch), 1296 std::forward_as_tuple (gdbarch)); 1297 rsa = &p.first->second; 1298 1299 /* Make sure that the packet buffer is plenty big enough for 1300 this architecture. */ 1301 if (this->buf.size () < rsa->remote_packet_size) 1302 this->buf.resize (2 * rsa->remote_packet_size); 1303 } 1304 else 1305 rsa = &it->second; 1306 1307 return rsa; 1308 } 1309 1310 /* Fetch the global remote target state. */ 1311 1312 remote_state * 1313 remote_target::get_remote_state () 1314 { 1315 /* Make sure that the remote architecture state has been 1316 initialized, because doing so might reallocate rs->buf. Any 1317 function which calls getpkt also needs to be mindful of changes 1318 to rs->buf, but this call limits the number of places which run 1319 into trouble. */ 1320 m_remote_state.get_remote_arch_state (target_gdbarch ()); 1321 1322 return &m_remote_state; 1323 } 1324 1325 /* Fetch the remote exec-file from the current program space. */ 1326 1327 static const char * 1328 get_remote_exec_file (void) 1329 { 1330 char *remote_exec_file; 1331 1332 remote_exec_file = remote_pspace_data.get (current_program_space); 1333 if (remote_exec_file == NULL) 1334 return ""; 1335 1336 return remote_exec_file; 1337 } 1338 1339 /* Set the remote exec file for PSPACE. */ 1340 1341 static void 1342 set_pspace_remote_exec_file (struct program_space *pspace, 1343 const char *remote_exec_file) 1344 { 1345 char *old_file = remote_pspace_data.get (pspace); 1346 1347 xfree (old_file); 1348 remote_pspace_data.set (pspace, xstrdup (remote_exec_file)); 1349 } 1350 1351 /* The "set/show remote exec-file" set command hook. */ 1352 1353 static void 1354 set_remote_exec_file (const char *ignored, int from_tty, 1355 struct cmd_list_element *c) 1356 { 1357 gdb_assert (remote_exec_file_var != NULL); 1358 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var); 1359 } 1360 1361 /* The "set/show remote exec-file" show command hook. */ 1362 1363 static void 1364 show_remote_exec_file (struct ui_file *file, int from_tty, 1365 struct cmd_list_element *cmd, const char *value) 1366 { 1367 fprintf_filtered (file, "%s\n", get_remote_exec_file ()); 1368 } 1369 1370 static int 1371 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs) 1372 { 1373 int regnum, num_remote_regs, offset; 1374 struct packet_reg **remote_regs; 1375 1376 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++) 1377 { 1378 struct packet_reg *r = ®s[regnum]; 1379 1380 if (register_size (gdbarch, regnum) == 0) 1381 /* Do not try to fetch zero-sized (placeholder) registers. */ 1382 r->pnum = -1; 1383 else 1384 r->pnum = gdbarch_remote_register_number (gdbarch, regnum); 1385 1386 r->regnum = regnum; 1387 } 1388 1389 /* Define the g/G packet format as the contents of each register 1390 with a remote protocol number, in order of ascending protocol 1391 number. */ 1392 1393 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch)); 1394 for (num_remote_regs = 0, regnum = 0; 1395 regnum < gdbarch_num_regs (gdbarch); 1396 regnum++) 1397 if (regs[regnum].pnum != -1) 1398 remote_regs[num_remote_regs++] = ®s[regnum]; 1399 1400 std::sort (remote_regs, remote_regs + num_remote_regs, 1401 [] (const packet_reg *a, const packet_reg *b) 1402 { return a->pnum < b->pnum; }); 1403 1404 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++) 1405 { 1406 remote_regs[regnum]->in_g_packet = 1; 1407 remote_regs[regnum]->offset = offset; 1408 offset += register_size (gdbarch, remote_regs[regnum]->regnum); 1409 } 1410 1411 return offset; 1412 } 1413 1414 /* Given the architecture described by GDBARCH, return the remote 1415 protocol register's number and the register's offset in the g/G 1416 packets of GDB register REGNUM, in PNUM and POFFSET respectively. 1417 If the target does not have a mapping for REGNUM, return false, 1418 otherwise, return true. */ 1419 1420 int 1421 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum, 1422 int *pnum, int *poffset) 1423 { 1424 gdb_assert (regnum < gdbarch_num_regs (gdbarch)); 1425 1426 std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch)); 1427 1428 map_regcache_remote_table (gdbarch, regs.data ()); 1429 1430 *pnum = regs[regnum].pnum; 1431 *poffset = regs[regnum].offset; 1432 1433 return *pnum != -1; 1434 } 1435 1436 remote_arch_state::remote_arch_state (struct gdbarch *gdbarch) 1437 { 1438 /* Use the architecture to build a regnum<->pnum table, which will be 1439 1:1 unless a feature set specifies otherwise. */ 1440 this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ()); 1441 1442 /* Record the maximum possible size of the g packet - it may turn out 1443 to be smaller. */ 1444 this->sizeof_g_packet 1445 = map_regcache_remote_table (gdbarch, this->regs.get ()); 1446 1447 /* Default maximum number of characters in a packet body. Many 1448 remote stubs have a hardwired buffer size of 400 bytes 1449 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used 1450 as the maximum packet-size to ensure that the packet and an extra 1451 NUL character can always fit in the buffer. This stops GDB 1452 trashing stubs that try to squeeze an extra NUL into what is 1453 already a full buffer (As of 1999-12-04 that was most stubs). */ 1454 this->remote_packet_size = 400 - 1; 1455 1456 /* This one is filled in when a ``g'' packet is received. */ 1457 this->actual_register_packet_size = 0; 1458 1459 /* Should rsa->sizeof_g_packet needs more space than the 1460 default, adjust the size accordingly. Remember that each byte is 1461 encoded as two characters. 32 is the overhead for the packet 1462 header / footer. NOTE: cagney/1999-10-26: I suspect that 8 1463 (``$NN:G...#NN'') is a better guess, the below has been padded a 1464 little. */ 1465 if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2)) 1466 this->remote_packet_size = (this->sizeof_g_packet * 2 + 32); 1467 } 1468 1469 /* Get a pointer to the current remote target. If not connected to a 1470 remote target, return NULL. */ 1471 1472 static remote_target * 1473 get_current_remote_target () 1474 { 1475 target_ops *proc_target = current_inferior ()->process_target (); 1476 return dynamic_cast<remote_target *> (proc_target); 1477 } 1478 1479 /* Return the current allowed size of a remote packet. This is 1480 inferred from the current architecture, and should be used to 1481 limit the length of outgoing packets. */ 1482 long 1483 remote_target::get_remote_packet_size () 1484 { 1485 struct remote_state *rs = get_remote_state (); 1486 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ()); 1487 1488 if (rs->explicit_packet_size) 1489 return rs->explicit_packet_size; 1490 1491 return rsa->remote_packet_size; 1492 } 1493 1494 static struct packet_reg * 1495 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa, 1496 long regnum) 1497 { 1498 if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch)) 1499 return NULL; 1500 else 1501 { 1502 struct packet_reg *r = &rsa->regs[regnum]; 1503 1504 gdb_assert (r->regnum == regnum); 1505 return r; 1506 } 1507 } 1508 1509 static struct packet_reg * 1510 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa, 1511 LONGEST pnum) 1512 { 1513 int i; 1514 1515 for (i = 0; i < gdbarch_num_regs (gdbarch); i++) 1516 { 1517 struct packet_reg *r = &rsa->regs[i]; 1518 1519 if (r->pnum == pnum) 1520 return r; 1521 } 1522 return NULL; 1523 } 1524 1525 /* Allow the user to specify what sequence to send to the remote 1526 when he requests a program interruption: Although ^C is usually 1527 what remote systems expect (this is the default, here), it is 1528 sometimes preferable to send a break. On other systems such 1529 as the Linux kernel, a break followed by g, which is Magic SysRq g 1530 is required in order to interrupt the execution. */ 1531 const char interrupt_sequence_control_c[] = "Ctrl-C"; 1532 const char interrupt_sequence_break[] = "BREAK"; 1533 const char interrupt_sequence_break_g[] = "BREAK-g"; 1534 static const char *const interrupt_sequence_modes[] = 1535 { 1536 interrupt_sequence_control_c, 1537 interrupt_sequence_break, 1538 interrupt_sequence_break_g, 1539 NULL 1540 }; 1541 static const char *interrupt_sequence_mode = interrupt_sequence_control_c; 1542 1543 static void 1544 show_interrupt_sequence (struct ui_file *file, int from_tty, 1545 struct cmd_list_element *c, 1546 const char *value) 1547 { 1548 if (interrupt_sequence_mode == interrupt_sequence_control_c) 1549 fprintf_filtered (file, 1550 _("Send the ASCII ETX character (Ctrl-c) " 1551 "to the remote target to interrupt the " 1552 "execution of the program.\n")); 1553 else if (interrupt_sequence_mode == interrupt_sequence_break) 1554 fprintf_filtered (file, 1555 _("send a break signal to the remote target " 1556 "to interrupt the execution of the program.\n")); 1557 else if (interrupt_sequence_mode == interrupt_sequence_break_g) 1558 fprintf_filtered (file, 1559 _("Send a break signal and 'g' a.k.a. Magic SysRq g to " 1560 "the remote target to interrupt the execution " 1561 "of Linux kernel.\n")); 1562 else 1563 internal_error (__FILE__, __LINE__, 1564 _("Invalid value for interrupt_sequence_mode: %s."), 1565 interrupt_sequence_mode); 1566 } 1567 1568 /* This boolean variable specifies whether interrupt_sequence is sent 1569 to the remote target when gdb connects to it. 1570 This is mostly needed when you debug the Linux kernel: The Linux kernel 1571 expects BREAK g which is Magic SysRq g for connecting gdb. */ 1572 static bool interrupt_on_connect = false; 1573 1574 /* This variable is used to implement the "set/show remotebreak" commands. 1575 Since these commands are now deprecated in favor of "set/show remote 1576 interrupt-sequence", it no longer has any effect on the code. */ 1577 static bool remote_break; 1578 1579 static void 1580 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c) 1581 { 1582 if (remote_break) 1583 interrupt_sequence_mode = interrupt_sequence_break; 1584 else 1585 interrupt_sequence_mode = interrupt_sequence_control_c; 1586 } 1587 1588 static void 1589 show_remotebreak (struct ui_file *file, int from_tty, 1590 struct cmd_list_element *c, 1591 const char *value) 1592 { 1593 } 1594 1595 /* This variable sets the number of bits in an address that are to be 1596 sent in a memory ("M" or "m") packet. Normally, after stripping 1597 leading zeros, the entire address would be sent. This variable 1598 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The 1599 initial implementation of remote.c restricted the address sent in 1600 memory packets to ``host::sizeof long'' bytes - (typically 32 1601 bits). Consequently, for 64 bit targets, the upper 32 bits of an 1602 address was never sent. Since fixing this bug may cause a break in 1603 some remote targets this variable is principally provided to 1604 facilitate backward compatibility. */ 1605 1606 static unsigned int remote_address_size; 1607 1608 1609 /* User configurable variables for the number of characters in a 1610 memory read/write packet. MIN (rsa->remote_packet_size, 1611 rsa->sizeof_g_packet) is the default. Some targets need smaller 1612 values (fifo overruns, et.al.) and some users need larger values 1613 (speed up transfers). The variables ``preferred_*'' (the user 1614 request), ``current_*'' (what was actually set) and ``forced_*'' 1615 (Positive - a soft limit, negative - a hard limit). */ 1616 1617 struct memory_packet_config 1618 { 1619 const char *name; 1620 long size; 1621 int fixed_p; 1622 }; 1623 1624 /* The default max memory-write-packet-size, when the setting is 1625 "fixed". The 16k is historical. (It came from older GDB's using 1626 alloca for buffers and the knowledge (folklore?) that some hosts 1627 don't cope very well with large alloca calls.) */ 1628 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384 1629 1630 /* The minimum remote packet size for memory transfers. Ensures we 1631 can write at least one byte. */ 1632 #define MIN_MEMORY_PACKET_SIZE 20 1633 1634 /* Get the memory packet size, assuming it is fixed. */ 1635 1636 static long 1637 get_fixed_memory_packet_size (struct memory_packet_config *config) 1638 { 1639 gdb_assert (config->fixed_p); 1640 1641 if (config->size <= 0) 1642 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED; 1643 else 1644 return config->size; 1645 } 1646 1647 /* Compute the current size of a read/write packet. Since this makes 1648 use of ``actual_register_packet_size'' the computation is dynamic. */ 1649 1650 long 1651 remote_target::get_memory_packet_size (struct memory_packet_config *config) 1652 { 1653 struct remote_state *rs = get_remote_state (); 1654 remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ()); 1655 1656 long what_they_get; 1657 if (config->fixed_p) 1658 what_they_get = get_fixed_memory_packet_size (config); 1659 else 1660 { 1661 what_they_get = get_remote_packet_size (); 1662 /* Limit the packet to the size specified by the user. */ 1663 if (config->size > 0 1664 && what_they_get > config->size) 1665 what_they_get = config->size; 1666 1667 /* Limit it to the size of the targets ``g'' response unless we have 1668 permission from the stub to use a larger packet size. */ 1669 if (rs->explicit_packet_size == 0 1670 && rsa->actual_register_packet_size > 0 1671 && what_they_get > rsa->actual_register_packet_size) 1672 what_they_get = rsa->actual_register_packet_size; 1673 } 1674 if (what_they_get < MIN_MEMORY_PACKET_SIZE) 1675 what_they_get = MIN_MEMORY_PACKET_SIZE; 1676 1677 /* Make sure there is room in the global buffer for this packet 1678 (including its trailing NUL byte). */ 1679 if (rs->buf.size () < what_they_get + 1) 1680 rs->buf.resize (2 * what_they_get); 1681 1682 return what_they_get; 1683 } 1684 1685 /* Update the size of a read/write packet. If they user wants 1686 something really big then do a sanity check. */ 1687 1688 static void 1689 set_memory_packet_size (const char *args, struct memory_packet_config *config) 1690 { 1691 int fixed_p = config->fixed_p; 1692 long size = config->size; 1693 1694 if (args == NULL) 1695 error (_("Argument required (integer, `fixed' or `limited').")); 1696 else if (strcmp (args, "hard") == 0 1697 || strcmp (args, "fixed") == 0) 1698 fixed_p = 1; 1699 else if (strcmp (args, "soft") == 0 1700 || strcmp (args, "limit") == 0) 1701 fixed_p = 0; 1702 else 1703 { 1704 char *end; 1705 1706 size = strtoul (args, &end, 0); 1707 if (args == end) 1708 error (_("Invalid %s (bad syntax)."), config->name); 1709 1710 /* Instead of explicitly capping the size of a packet to or 1711 disallowing it, the user is allowed to set the size to 1712 something arbitrarily large. */ 1713 } 1714 1715 /* Extra checks? */ 1716 if (fixed_p && !config->fixed_p) 1717 { 1718 /* So that the query shows the correct value. */ 1719 long query_size = (size <= 0 1720 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 1721 : size); 1722 1723 if (! query (_("The target may not be able to correctly handle a %s\n" 1724 "of %ld bytes. Change the packet size? "), 1725 config->name, query_size)) 1726 error (_("Packet size not changed.")); 1727 } 1728 /* Update the config. */ 1729 config->fixed_p = fixed_p; 1730 config->size = size; 1731 } 1732 1733 static void 1734 show_memory_packet_size (struct memory_packet_config *config) 1735 { 1736 if (config->size == 0) 1737 printf_filtered (_("The %s is 0 (default). "), config->name); 1738 else 1739 printf_filtered (_("The %s is %ld. "), config->name, config->size); 1740 if (config->fixed_p) 1741 printf_filtered (_("Packets are fixed at %ld bytes.\n"), 1742 get_fixed_memory_packet_size (config)); 1743 else 1744 { 1745 remote_target *remote = get_current_remote_target (); 1746 1747 if (remote != NULL) 1748 printf_filtered (_("Packets are limited to %ld bytes.\n"), 1749 remote->get_memory_packet_size (config)); 1750 else 1751 puts_filtered ("The actual limit will be further reduced " 1752 "dependent on the target.\n"); 1753 } 1754 } 1755 1756 /* FIXME: needs to be per-remote-target. */ 1757 static struct memory_packet_config memory_write_packet_config = 1758 { 1759 "memory-write-packet-size", 1760 }; 1761 1762 static void 1763 set_memory_write_packet_size (const char *args, int from_tty) 1764 { 1765 set_memory_packet_size (args, &memory_write_packet_config); 1766 } 1767 1768 static void 1769 show_memory_write_packet_size (const char *args, int from_tty) 1770 { 1771 show_memory_packet_size (&memory_write_packet_config); 1772 } 1773 1774 /* Show the number of hardware watchpoints that can be used. */ 1775 1776 static void 1777 show_hardware_watchpoint_limit (struct ui_file *file, int from_tty, 1778 struct cmd_list_element *c, 1779 const char *value) 1780 { 1781 fprintf_filtered (file, _("The maximum number of target hardware " 1782 "watchpoints is %s.\n"), value); 1783 } 1784 1785 /* Show the length limit (in bytes) for hardware watchpoints. */ 1786 1787 static void 1788 show_hardware_watchpoint_length_limit (struct ui_file *file, int from_tty, 1789 struct cmd_list_element *c, 1790 const char *value) 1791 { 1792 fprintf_filtered (file, _("The maximum length (in bytes) of a target " 1793 "hardware watchpoint is %s.\n"), value); 1794 } 1795 1796 /* Show the number of hardware breakpoints that can be used. */ 1797 1798 static void 1799 show_hardware_breakpoint_limit (struct ui_file *file, int from_tty, 1800 struct cmd_list_element *c, 1801 const char *value) 1802 { 1803 fprintf_filtered (file, _("The maximum number of target hardware " 1804 "breakpoints is %s.\n"), value); 1805 } 1806 1807 /* Controls the maximum number of characters to display in the debug output 1808 for each remote packet. The remaining characters are omitted. */ 1809 1810 static int remote_packet_max_chars = 512; 1811 1812 /* Show the maximum number of characters to display for each remote packet 1813 when remote debugging is enabled. */ 1814 1815 static void 1816 show_remote_packet_max_chars (struct ui_file *file, int from_tty, 1817 struct cmd_list_element *c, 1818 const char *value) 1819 { 1820 fprintf_filtered (file, _("Number of remote packet characters to " 1821 "display is %s.\n"), value); 1822 } 1823 1824 long 1825 remote_target::get_memory_write_packet_size () 1826 { 1827 return get_memory_packet_size (&memory_write_packet_config); 1828 } 1829 1830 /* FIXME: needs to be per-remote-target. */ 1831 static struct memory_packet_config memory_read_packet_config = 1832 { 1833 "memory-read-packet-size", 1834 }; 1835 1836 static void 1837 set_memory_read_packet_size (const char *args, int from_tty) 1838 { 1839 set_memory_packet_size (args, &memory_read_packet_config); 1840 } 1841 1842 static void 1843 show_memory_read_packet_size (const char *args, int from_tty) 1844 { 1845 show_memory_packet_size (&memory_read_packet_config); 1846 } 1847 1848 long 1849 remote_target::get_memory_read_packet_size () 1850 { 1851 long size = get_memory_packet_size (&memory_read_packet_config); 1852 1853 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an 1854 extra buffer size argument before the memory read size can be 1855 increased beyond this. */ 1856 if (size > get_remote_packet_size ()) 1857 size = get_remote_packet_size (); 1858 return size; 1859 } 1860 1861 1862 1863 struct packet_config 1864 { 1865 const char *name; 1866 const char *title; 1867 1868 /* If auto, GDB auto-detects support for this packet or feature, 1869 either through qSupported, or by trying the packet and looking 1870 at the response. If true, GDB assumes the target supports this 1871 packet. If false, the packet is disabled. Configs that don't 1872 have an associated command always have this set to auto. */ 1873 enum auto_boolean detect; 1874 1875 /* Does the target support this packet? */ 1876 enum packet_support support; 1877 }; 1878 1879 static enum packet_support packet_config_support (struct packet_config *config); 1880 static enum packet_support packet_support (int packet); 1881 1882 static void 1883 show_packet_config_cmd (struct packet_config *config) 1884 { 1885 const char *support = "internal-error"; 1886 1887 switch (packet_config_support (config)) 1888 { 1889 case PACKET_ENABLE: 1890 support = "enabled"; 1891 break; 1892 case PACKET_DISABLE: 1893 support = "disabled"; 1894 break; 1895 case PACKET_SUPPORT_UNKNOWN: 1896 support = "unknown"; 1897 break; 1898 } 1899 switch (config->detect) 1900 { 1901 case AUTO_BOOLEAN_AUTO: 1902 printf_filtered (_("Support for the `%s' packet " 1903 "is auto-detected, currently %s.\n"), 1904 config->name, support); 1905 break; 1906 case AUTO_BOOLEAN_TRUE: 1907 case AUTO_BOOLEAN_FALSE: 1908 printf_filtered (_("Support for the `%s' packet is currently %s.\n"), 1909 config->name, support); 1910 break; 1911 } 1912 } 1913 1914 static void 1915 add_packet_config_cmd (struct packet_config *config, const char *name, 1916 const char *title, int legacy) 1917 { 1918 char *set_doc; 1919 char *show_doc; 1920 char *cmd_name; 1921 1922 config->name = name; 1923 config->title = title; 1924 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet.", 1925 name, title); 1926 show_doc = xstrprintf ("Show current use of remote " 1927 "protocol `%s' (%s) packet.", 1928 name, title); 1929 /* set/show TITLE-packet {auto,on,off} */ 1930 cmd_name = xstrprintf ("%s-packet", title); 1931 set_show_commands cmds 1932 = add_setshow_auto_boolean_cmd (cmd_name, class_obscure, 1933 &config->detect, set_doc, 1934 show_doc, NULL, /* help_doc */ 1935 NULL, 1936 show_remote_protocol_packet_cmd, 1937 &remote_set_cmdlist, &remote_show_cmdlist); 1938 1939 /* The command code copies the documentation strings. */ 1940 xfree (set_doc); 1941 xfree (show_doc); 1942 1943 /* set/show remote NAME-packet {auto,on,off} -- legacy. */ 1944 if (legacy) 1945 { 1946 char *legacy_name; 1947 1948 legacy_name = xstrprintf ("%s-packet", name); 1949 add_alias_cmd (legacy_name, cmds.set, class_obscure, 0, 1950 &remote_set_cmdlist); 1951 add_alias_cmd (legacy_name, cmds.show, class_obscure, 0, 1952 &remote_show_cmdlist); 1953 } 1954 } 1955 1956 static enum packet_result 1957 packet_check_result (const char *buf) 1958 { 1959 if (buf[0] != '\0') 1960 { 1961 /* The stub recognized the packet request. Check that the 1962 operation succeeded. */ 1963 if (buf[0] == 'E' 1964 && isxdigit (buf[1]) && isxdigit (buf[2]) 1965 && buf[3] == '\0') 1966 /* "Enn" - definitely an error. */ 1967 return PACKET_ERROR; 1968 1969 /* Always treat "E." as an error. This will be used for 1970 more verbose error messages, such as E.memtypes. */ 1971 if (buf[0] == 'E' && buf[1] == '.') 1972 return PACKET_ERROR; 1973 1974 /* The packet may or may not be OK. Just assume it is. */ 1975 return PACKET_OK; 1976 } 1977 else 1978 /* The stub does not support the packet. */ 1979 return PACKET_UNKNOWN; 1980 } 1981 1982 static enum packet_result 1983 packet_check_result (const gdb::char_vector &buf) 1984 { 1985 return packet_check_result (buf.data ()); 1986 } 1987 1988 static enum packet_result 1989 packet_ok (const char *buf, struct packet_config *config) 1990 { 1991 enum packet_result result; 1992 1993 if (config->detect != AUTO_BOOLEAN_TRUE 1994 && config->support == PACKET_DISABLE) 1995 internal_error (__FILE__, __LINE__, 1996 _("packet_ok: attempt to use a disabled packet")); 1997 1998 result = packet_check_result (buf); 1999 switch (result) 2000 { 2001 case PACKET_OK: 2002 case PACKET_ERROR: 2003 /* The stub recognized the packet request. */ 2004 if (config->support == PACKET_SUPPORT_UNKNOWN) 2005 { 2006 remote_debug_printf ("Packet %s (%s) is supported", 2007 config->name, config->title); 2008 config->support = PACKET_ENABLE; 2009 } 2010 break; 2011 case PACKET_UNKNOWN: 2012 /* The stub does not support the packet. */ 2013 if (config->detect == AUTO_BOOLEAN_AUTO 2014 && config->support == PACKET_ENABLE) 2015 { 2016 /* If the stub previously indicated that the packet was 2017 supported then there is a protocol error. */ 2018 error (_("Protocol error: %s (%s) conflicting enabled responses."), 2019 config->name, config->title); 2020 } 2021 else if (config->detect == AUTO_BOOLEAN_TRUE) 2022 { 2023 /* The user set it wrong. */ 2024 error (_("Enabled packet %s (%s) not recognized by stub"), 2025 config->name, config->title); 2026 } 2027 2028 remote_debug_printf ("Packet %s (%s) is NOT supported", 2029 config->name, config->title); 2030 config->support = PACKET_DISABLE; 2031 break; 2032 } 2033 2034 return result; 2035 } 2036 2037 static enum packet_result 2038 packet_ok (const gdb::char_vector &buf, struct packet_config *config) 2039 { 2040 return packet_ok (buf.data (), config); 2041 } 2042 2043 enum { 2044 PACKET_vCont = 0, 2045 PACKET_X, 2046 PACKET_qSymbol, 2047 PACKET_P, 2048 PACKET_p, 2049 PACKET_Z0, 2050 PACKET_Z1, 2051 PACKET_Z2, 2052 PACKET_Z3, 2053 PACKET_Z4, 2054 PACKET_vFile_setfs, 2055 PACKET_vFile_open, 2056 PACKET_vFile_pread, 2057 PACKET_vFile_pwrite, 2058 PACKET_vFile_close, 2059 PACKET_vFile_unlink, 2060 PACKET_vFile_readlink, 2061 PACKET_vFile_fstat, 2062 PACKET_qXfer_auxv, 2063 PACKET_qXfer_features, 2064 PACKET_qXfer_exec_file, 2065 PACKET_qXfer_libraries, 2066 PACKET_qXfer_libraries_svr4, 2067 PACKET_qXfer_memory_map, 2068 PACKET_qXfer_osdata, 2069 PACKET_qXfer_threads, 2070 PACKET_qXfer_statictrace_read, 2071 PACKET_qXfer_traceframe_info, 2072 PACKET_qXfer_uib, 2073 PACKET_qGetTIBAddr, 2074 PACKET_qGetTLSAddr, 2075 PACKET_qSupported, 2076 PACKET_qTStatus, 2077 PACKET_QPassSignals, 2078 PACKET_QCatchSyscalls, 2079 PACKET_QProgramSignals, 2080 PACKET_QSetWorkingDir, 2081 PACKET_QStartupWithShell, 2082 PACKET_QEnvironmentHexEncoded, 2083 PACKET_QEnvironmentReset, 2084 PACKET_QEnvironmentUnset, 2085 PACKET_qCRC, 2086 PACKET_qSearch_memory, 2087 PACKET_vAttach, 2088 PACKET_vRun, 2089 PACKET_QStartNoAckMode, 2090 PACKET_vKill, 2091 PACKET_qXfer_siginfo_read, 2092 PACKET_qXfer_siginfo_write, 2093 PACKET_qAttached, 2094 2095 /* Support for conditional tracepoints. */ 2096 PACKET_ConditionalTracepoints, 2097 2098 /* Support for target-side breakpoint conditions. */ 2099 PACKET_ConditionalBreakpoints, 2100 2101 /* Support for target-side breakpoint commands. */ 2102 PACKET_BreakpointCommands, 2103 2104 /* Support for fast tracepoints. */ 2105 PACKET_FastTracepoints, 2106 2107 /* Support for static tracepoints. */ 2108 PACKET_StaticTracepoints, 2109 2110 /* Support for installing tracepoints while a trace experiment is 2111 running. */ 2112 PACKET_InstallInTrace, 2113 2114 PACKET_bc, 2115 PACKET_bs, 2116 PACKET_TracepointSource, 2117 PACKET_QAllow, 2118 PACKET_qXfer_fdpic, 2119 PACKET_QDisableRandomization, 2120 PACKET_QAgent, 2121 PACKET_QTBuffer_size, 2122 PACKET_Qbtrace_off, 2123 PACKET_Qbtrace_bts, 2124 PACKET_Qbtrace_pt, 2125 PACKET_qXfer_btrace, 2126 2127 /* Support for the QNonStop packet. */ 2128 PACKET_QNonStop, 2129 2130 /* Support for the QThreadEvents packet. */ 2131 PACKET_QThreadEvents, 2132 2133 /* Support for multi-process extensions. */ 2134 PACKET_multiprocess_feature, 2135 2136 /* Support for enabling and disabling tracepoints while a trace 2137 experiment is running. */ 2138 PACKET_EnableDisableTracepoints_feature, 2139 2140 /* Support for collecting strings using the tracenz bytecode. */ 2141 PACKET_tracenz_feature, 2142 2143 /* Support for continuing to run a trace experiment while GDB is 2144 disconnected. */ 2145 PACKET_DisconnectedTracing_feature, 2146 2147 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */ 2148 PACKET_augmented_libraries_svr4_read_feature, 2149 2150 /* Support for the qXfer:btrace-conf:read packet. */ 2151 PACKET_qXfer_btrace_conf, 2152 2153 /* Support for the Qbtrace-conf:bts:size packet. */ 2154 PACKET_Qbtrace_conf_bts_size, 2155 2156 /* Support for swbreak+ feature. */ 2157 PACKET_swbreak_feature, 2158 2159 /* Support for hwbreak+ feature. */ 2160 PACKET_hwbreak_feature, 2161 2162 /* Support for fork events. */ 2163 PACKET_fork_event_feature, 2164 2165 /* Support for vfork events. */ 2166 PACKET_vfork_event_feature, 2167 2168 /* Support for the Qbtrace-conf:pt:size packet. */ 2169 PACKET_Qbtrace_conf_pt_size, 2170 2171 /* Support for exec events. */ 2172 PACKET_exec_event_feature, 2173 2174 /* Support for query supported vCont actions. */ 2175 PACKET_vContSupported, 2176 2177 /* Support remote CTRL-C. */ 2178 PACKET_vCtrlC, 2179 2180 /* Support TARGET_WAITKIND_NO_RESUMED. */ 2181 PACKET_no_resumed, 2182 2183 /* Support for memory tagging, allocation tag fetch/store 2184 packets and the tag violation stop replies. */ 2185 PACKET_memory_tagging_feature, 2186 2187 PACKET_MAX 2188 }; 2189 2190 /* FIXME: needs to be per-remote-target. Ignoring this for now, 2191 assuming all remote targets are the same server (thus all support 2192 the same packets). */ 2193 static struct packet_config remote_protocol_packets[PACKET_MAX]; 2194 2195 /* Returns the packet's corresponding "set remote foo-packet" command 2196 state. See struct packet_config for more details. */ 2197 2198 static enum auto_boolean 2199 packet_set_cmd_state (int packet) 2200 { 2201 return remote_protocol_packets[packet].detect; 2202 } 2203 2204 /* Returns whether a given packet or feature is supported. This takes 2205 into account the state of the corresponding "set remote foo-packet" 2206 command, which may be used to bypass auto-detection. */ 2207 2208 static enum packet_support 2209 packet_config_support (struct packet_config *config) 2210 { 2211 switch (config->detect) 2212 { 2213 case AUTO_BOOLEAN_TRUE: 2214 return PACKET_ENABLE; 2215 case AUTO_BOOLEAN_FALSE: 2216 return PACKET_DISABLE; 2217 case AUTO_BOOLEAN_AUTO: 2218 return config->support; 2219 default: 2220 gdb_assert_not_reached (_("bad switch")); 2221 } 2222 } 2223 2224 /* Same as packet_config_support, but takes the packet's enum value as 2225 argument. */ 2226 2227 static enum packet_support 2228 packet_support (int packet) 2229 { 2230 struct packet_config *config = &remote_protocol_packets[packet]; 2231 2232 return packet_config_support (config); 2233 } 2234 2235 static void 2236 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty, 2237 struct cmd_list_element *c, 2238 const char *value) 2239 { 2240 struct packet_config *packet; 2241 2242 for (packet = remote_protocol_packets; 2243 packet < &remote_protocol_packets[PACKET_MAX]; 2244 packet++) 2245 { 2246 if (&packet->detect == c->var) 2247 { 2248 show_packet_config_cmd (packet); 2249 return; 2250 } 2251 } 2252 internal_error (__FILE__, __LINE__, _("Could not find config for %s"), 2253 c->name); 2254 } 2255 2256 /* Should we try one of the 'Z' requests? */ 2257 2258 enum Z_packet_type 2259 { 2260 Z_PACKET_SOFTWARE_BP, 2261 Z_PACKET_HARDWARE_BP, 2262 Z_PACKET_WRITE_WP, 2263 Z_PACKET_READ_WP, 2264 Z_PACKET_ACCESS_WP, 2265 NR_Z_PACKET_TYPES 2266 }; 2267 2268 /* For compatibility with older distributions. Provide a ``set remote 2269 Z-packet ...'' command that updates all the Z packet types. */ 2270 2271 static enum auto_boolean remote_Z_packet_detect; 2272 2273 static void 2274 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty, 2275 struct cmd_list_element *c) 2276 { 2277 int i; 2278 2279 for (i = 0; i < NR_Z_PACKET_TYPES; i++) 2280 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect; 2281 } 2282 2283 static void 2284 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty, 2285 struct cmd_list_element *c, 2286 const char *value) 2287 { 2288 int i; 2289 2290 for (i = 0; i < NR_Z_PACKET_TYPES; i++) 2291 { 2292 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]); 2293 } 2294 } 2295 2296 /* Returns true if the multi-process extensions are in effect. */ 2297 2298 static int 2299 remote_multi_process_p (struct remote_state *rs) 2300 { 2301 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE; 2302 } 2303 2304 /* Returns true if fork events are supported. */ 2305 2306 static int 2307 remote_fork_event_p (struct remote_state *rs) 2308 { 2309 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE; 2310 } 2311 2312 /* Returns true if vfork events are supported. */ 2313 2314 static int 2315 remote_vfork_event_p (struct remote_state *rs) 2316 { 2317 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE; 2318 } 2319 2320 /* Returns true if exec events are supported. */ 2321 2322 static int 2323 remote_exec_event_p (struct remote_state *rs) 2324 { 2325 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE; 2326 } 2327 2328 /* Returns true if memory tagging is supported, false otherwise. */ 2329 2330 static bool 2331 remote_memory_tagging_p () 2332 { 2333 return packet_support (PACKET_memory_tagging_feature) == PACKET_ENABLE; 2334 } 2335 2336 /* Insert fork catchpoint target routine. If fork events are enabled 2337 then return success, nothing more to do. */ 2338 2339 int 2340 remote_target::insert_fork_catchpoint (int pid) 2341 { 2342 struct remote_state *rs = get_remote_state (); 2343 2344 return !remote_fork_event_p (rs); 2345 } 2346 2347 /* Remove fork catchpoint target routine. Nothing to do, just 2348 return success. */ 2349 2350 int 2351 remote_target::remove_fork_catchpoint (int pid) 2352 { 2353 return 0; 2354 } 2355 2356 /* Insert vfork catchpoint target routine. If vfork events are enabled 2357 then return success, nothing more to do. */ 2358 2359 int 2360 remote_target::insert_vfork_catchpoint (int pid) 2361 { 2362 struct remote_state *rs = get_remote_state (); 2363 2364 return !remote_vfork_event_p (rs); 2365 } 2366 2367 /* Remove vfork catchpoint target routine. Nothing to do, just 2368 return success. */ 2369 2370 int 2371 remote_target::remove_vfork_catchpoint (int pid) 2372 { 2373 return 0; 2374 } 2375 2376 /* Insert exec catchpoint target routine. If exec events are 2377 enabled, just return success. */ 2378 2379 int 2380 remote_target::insert_exec_catchpoint (int pid) 2381 { 2382 struct remote_state *rs = get_remote_state (); 2383 2384 return !remote_exec_event_p (rs); 2385 } 2386 2387 /* Remove exec catchpoint target routine. Nothing to do, just 2388 return success. */ 2389 2390 int 2391 remote_target::remove_exec_catchpoint (int pid) 2392 { 2393 return 0; 2394 } 2395 2396 2397 2398 /* Take advantage of the fact that the TID field is not used, to tag 2399 special ptids with it set to != 0. */ 2400 static const ptid_t magic_null_ptid (42000, -1, 1); 2401 static const ptid_t not_sent_ptid (42000, -2, 1); 2402 static const ptid_t any_thread_ptid (42000, 0, 1); 2403 2404 /* Find out if the stub attached to PID (and hence GDB should offer to 2405 detach instead of killing it when bailing out). */ 2406 2407 int 2408 remote_target::remote_query_attached (int pid) 2409 { 2410 struct remote_state *rs = get_remote_state (); 2411 size_t size = get_remote_packet_size (); 2412 2413 if (packet_support (PACKET_qAttached) == PACKET_DISABLE) 2414 return 0; 2415 2416 if (remote_multi_process_p (rs)) 2417 xsnprintf (rs->buf.data (), size, "qAttached:%x", pid); 2418 else 2419 xsnprintf (rs->buf.data (), size, "qAttached"); 2420 2421 putpkt (rs->buf); 2422 getpkt (&rs->buf, 0); 2423 2424 switch (packet_ok (rs->buf, 2425 &remote_protocol_packets[PACKET_qAttached])) 2426 { 2427 case PACKET_OK: 2428 if (strcmp (rs->buf.data (), "1") == 0) 2429 return 1; 2430 break; 2431 case PACKET_ERROR: 2432 warning (_("Remote failure reply: %s"), rs->buf.data ()); 2433 break; 2434 case PACKET_UNKNOWN: 2435 break; 2436 } 2437 2438 return 0; 2439 } 2440 2441 /* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID 2442 has been invented by GDB, instead of reported by the target. Since 2443 we can be connected to a remote system before before knowing about 2444 any inferior, mark the target with execution when we find the first 2445 inferior. If ATTACHED is 1, then we had just attached to this 2446 inferior. If it is 0, then we just created this inferior. If it 2447 is -1, then try querying the remote stub to find out if it had 2448 attached to the inferior or not. If TRY_OPEN_EXEC is true then 2449 attempt to open this inferior's executable as the main executable 2450 if no main executable is open already. */ 2451 2452 inferior * 2453 remote_target::remote_add_inferior (bool fake_pid_p, int pid, int attached, 2454 int try_open_exec) 2455 { 2456 struct inferior *inf; 2457 2458 /* Check whether this process we're learning about is to be 2459 considered attached, or if is to be considered to have been 2460 spawned by the stub. */ 2461 if (attached == -1) 2462 attached = remote_query_attached (pid); 2463 2464 if (gdbarch_has_global_solist (target_gdbarch ())) 2465 { 2466 /* If the target shares code across all inferiors, then every 2467 attach adds a new inferior. */ 2468 inf = add_inferior (pid); 2469 2470 /* ... and every inferior is bound to the same program space. 2471 However, each inferior may still have its own address 2472 space. */ 2473 inf->aspace = maybe_new_address_space (); 2474 inf->pspace = current_program_space; 2475 } 2476 else 2477 { 2478 /* In the traditional debugging scenario, there's a 1-1 match 2479 between program/address spaces. We simply bind the inferior 2480 to the program space's address space. */ 2481 inf = current_inferior (); 2482 2483 /* However, if the current inferior is already bound to a 2484 process, find some other empty inferior. */ 2485 if (inf->pid != 0) 2486 { 2487 inf = nullptr; 2488 for (inferior *it : all_inferiors ()) 2489 if (it->pid == 0) 2490 { 2491 inf = it; 2492 break; 2493 } 2494 } 2495 if (inf == nullptr) 2496 { 2497 /* Since all inferiors were already bound to a process, add 2498 a new inferior. */ 2499 inf = add_inferior_with_spaces (); 2500 } 2501 switch_to_inferior_no_thread (inf); 2502 inf->push_target (this); 2503 inferior_appeared (inf, pid); 2504 } 2505 2506 inf->attach_flag = attached; 2507 inf->fake_pid_p = fake_pid_p; 2508 2509 /* If no main executable is currently open then attempt to 2510 open the file that was executed to create this inferior. */ 2511 if (try_open_exec && get_exec_file (0) == NULL) 2512 exec_file_locate_attach (pid, 0, 1); 2513 2514 /* Check for exec file mismatch, and let the user solve it. */ 2515 validate_exec_file (1); 2516 2517 return inf; 2518 } 2519 2520 static remote_thread_info *get_remote_thread_info (thread_info *thread); 2521 static remote_thread_info *get_remote_thread_info (remote_target *target, 2522 ptid_t ptid); 2523 2524 /* Add thread PTID to GDB's thread list. Tag it as executing/running 2525 according to RUNNING. */ 2526 2527 thread_info * 2528 remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing) 2529 { 2530 struct remote_state *rs = get_remote_state (); 2531 struct thread_info *thread; 2532 2533 /* GDB historically didn't pull threads in the initial connection 2534 setup. If the remote target doesn't even have a concept of 2535 threads (e.g., a bare-metal target), even if internally we 2536 consider that a single-threaded target, mentioning a new thread 2537 might be confusing to the user. Be silent then, preserving the 2538 age old behavior. */ 2539 if (rs->starting_up) 2540 thread = add_thread_silent (this, ptid); 2541 else 2542 thread = add_thread (this, ptid); 2543 2544 /* We start by assuming threads are resumed. That state then gets updated 2545 when we process a matching stop reply. */ 2546 get_remote_thread_info (thread)->set_resumed (); 2547 2548 set_executing (this, ptid, executing); 2549 set_running (this, ptid, running); 2550 2551 return thread; 2552 } 2553 2554 /* Come here when we learn about a thread id from the remote target. 2555 It may be the first time we hear about such thread, so take the 2556 opportunity to add it to GDB's thread list. In case this is the 2557 first time we're noticing its corresponding inferior, add it to 2558 GDB's inferior list as well. EXECUTING indicates whether the 2559 thread is (internally) executing or stopped. */ 2560 2561 void 2562 remote_target::remote_notice_new_inferior (ptid_t currthread, bool executing) 2563 { 2564 /* In non-stop mode, we assume new found threads are (externally) 2565 running until proven otherwise with a stop reply. In all-stop, 2566 we can only get here if all threads are stopped. */ 2567 bool running = target_is_non_stop_p (); 2568 2569 /* If this is a new thread, add it to GDB's thread list. 2570 If we leave it up to WFI to do this, bad things will happen. */ 2571 2572 thread_info *tp = find_thread_ptid (this, currthread); 2573 if (tp != NULL && tp->state == THREAD_EXITED) 2574 { 2575 /* We're seeing an event on a thread id we knew had exited. 2576 This has to be a new thread reusing the old id. Add it. */ 2577 remote_add_thread (currthread, running, executing); 2578 return; 2579 } 2580 2581 if (!in_thread_list (this, currthread)) 2582 { 2583 struct inferior *inf = NULL; 2584 int pid = currthread.pid (); 2585 2586 if (inferior_ptid.is_pid () 2587 && pid == inferior_ptid.pid ()) 2588 { 2589 /* inferior_ptid has no thread member yet. This can happen 2590 with the vAttach -> remote_wait,"TAAthread:" path if the 2591 stub doesn't support qC. This is the first stop reported 2592 after an attach, so this is the main thread. Update the 2593 ptid in the thread list. */ 2594 if (in_thread_list (this, ptid_t (pid))) 2595 thread_change_ptid (this, inferior_ptid, currthread); 2596 else 2597 { 2598 thread_info *thr 2599 = remote_add_thread (currthread, running, executing); 2600 switch_to_thread (thr); 2601 } 2602 return; 2603 } 2604 2605 if (magic_null_ptid == inferior_ptid) 2606 { 2607 /* inferior_ptid is not set yet. This can happen with the 2608 vRun -> remote_wait,"TAAthread:" path if the stub 2609 doesn't support qC. This is the first stop reported 2610 after an attach, so this is the main thread. Update the 2611 ptid in the thread list. */ 2612 thread_change_ptid (this, inferior_ptid, currthread); 2613 return; 2614 } 2615 2616 /* When connecting to a target remote, or to a target 2617 extended-remote which already was debugging an inferior, we 2618 may not know about it yet. Add it before adding its child 2619 thread, so notifications are emitted in a sensible order. */ 2620 if (find_inferior_pid (this, currthread.pid ()) == NULL) 2621 { 2622 struct remote_state *rs = get_remote_state (); 2623 bool fake_pid_p = !remote_multi_process_p (rs); 2624 2625 inf = remote_add_inferior (fake_pid_p, 2626 currthread.pid (), -1, 1); 2627 } 2628 2629 /* This is really a new thread. Add it. */ 2630 thread_info *new_thr 2631 = remote_add_thread (currthread, running, executing); 2632 2633 /* If we found a new inferior, let the common code do whatever 2634 it needs to with it (e.g., read shared libraries, insert 2635 breakpoints), unless we're just setting up an all-stop 2636 connection. */ 2637 if (inf != NULL) 2638 { 2639 struct remote_state *rs = get_remote_state (); 2640 2641 if (!rs->starting_up) 2642 notice_new_inferior (new_thr, executing, 0); 2643 } 2644 } 2645 } 2646 2647 /* Return THREAD's private thread data, creating it if necessary. */ 2648 2649 static remote_thread_info * 2650 get_remote_thread_info (thread_info *thread) 2651 { 2652 gdb_assert (thread != NULL); 2653 2654 if (thread->priv == NULL) 2655 thread->priv.reset (new remote_thread_info); 2656 2657 return static_cast<remote_thread_info *> (thread->priv.get ()); 2658 } 2659 2660 /* Return PTID's private thread data, creating it if necessary. */ 2661 2662 static remote_thread_info * 2663 get_remote_thread_info (remote_target *target, ptid_t ptid) 2664 { 2665 thread_info *thr = find_thread_ptid (target, ptid); 2666 return get_remote_thread_info (thr); 2667 } 2668 2669 /* Call this function as a result of 2670 1) A halt indication (T packet) containing a thread id 2671 2) A direct query of currthread 2672 3) Successful execution of set thread */ 2673 2674 static void 2675 record_currthread (struct remote_state *rs, ptid_t currthread) 2676 { 2677 rs->general_thread = currthread; 2678 } 2679 2680 /* If 'QPassSignals' is supported, tell the remote stub what signals 2681 it can simply pass through to the inferior without reporting. */ 2682 2683 void 2684 remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals) 2685 { 2686 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE) 2687 { 2688 char *pass_packet, *p; 2689 int count = 0; 2690 struct remote_state *rs = get_remote_state (); 2691 2692 gdb_assert (pass_signals.size () < 256); 2693 for (size_t i = 0; i < pass_signals.size (); i++) 2694 { 2695 if (pass_signals[i]) 2696 count++; 2697 } 2698 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1); 2699 strcpy (pass_packet, "QPassSignals:"); 2700 p = pass_packet + strlen (pass_packet); 2701 for (size_t i = 0; i < pass_signals.size (); i++) 2702 { 2703 if (pass_signals[i]) 2704 { 2705 if (i >= 16) 2706 *p++ = tohex (i >> 4); 2707 *p++ = tohex (i & 15); 2708 if (count) 2709 *p++ = ';'; 2710 else 2711 break; 2712 count--; 2713 } 2714 } 2715 *p = 0; 2716 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet)) 2717 { 2718 putpkt (pass_packet); 2719 getpkt (&rs->buf, 0); 2720 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]); 2721 xfree (rs->last_pass_packet); 2722 rs->last_pass_packet = pass_packet; 2723 } 2724 else 2725 xfree (pass_packet); 2726 } 2727 } 2728 2729 /* If 'QCatchSyscalls' is supported, tell the remote stub 2730 to report syscalls to GDB. */ 2731 2732 int 2733 remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count, 2734 gdb::array_view<const int> syscall_counts) 2735 { 2736 const char *catch_packet; 2737 enum packet_result result; 2738 int n_sysno = 0; 2739 2740 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE) 2741 { 2742 /* Not supported. */ 2743 return 1; 2744 } 2745 2746 if (needed && any_count == 0) 2747 { 2748 /* Count how many syscalls are to be caught. */ 2749 for (size_t i = 0; i < syscall_counts.size (); i++) 2750 { 2751 if (syscall_counts[i] != 0) 2752 n_sysno++; 2753 } 2754 } 2755 2756 remote_debug_printf ("pid %d needed %d any_count %d n_sysno %d", 2757 pid, needed, any_count, n_sysno); 2758 2759 std::string built_packet; 2760 if (needed) 2761 { 2762 /* Prepare a packet with the sysno list, assuming max 8+1 2763 characters for a sysno. If the resulting packet size is too 2764 big, fallback on the non-selective packet. */ 2765 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1; 2766 built_packet.reserve (maxpktsz); 2767 built_packet = "QCatchSyscalls:1"; 2768 if (any_count == 0) 2769 { 2770 /* Add in each syscall to be caught. */ 2771 for (size_t i = 0; i < syscall_counts.size (); i++) 2772 { 2773 if (syscall_counts[i] != 0) 2774 string_appendf (built_packet, ";%zx", i); 2775 } 2776 } 2777 if (built_packet.size () > get_remote_packet_size ()) 2778 { 2779 /* catch_packet too big. Fallback to less efficient 2780 non selective mode, with GDB doing the filtering. */ 2781 catch_packet = "QCatchSyscalls:1"; 2782 } 2783 else 2784 catch_packet = built_packet.c_str (); 2785 } 2786 else 2787 catch_packet = "QCatchSyscalls:0"; 2788 2789 struct remote_state *rs = get_remote_state (); 2790 2791 putpkt (catch_packet); 2792 getpkt (&rs->buf, 0); 2793 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]); 2794 if (result == PACKET_OK) 2795 return 0; 2796 else 2797 return -1; 2798 } 2799 2800 /* If 'QProgramSignals' is supported, tell the remote stub what 2801 signals it should pass through to the inferior when detaching. */ 2802 2803 void 2804 remote_target::program_signals (gdb::array_view<const unsigned char> signals) 2805 { 2806 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE) 2807 { 2808 char *packet, *p; 2809 int count = 0; 2810 struct remote_state *rs = get_remote_state (); 2811 2812 gdb_assert (signals.size () < 256); 2813 for (size_t i = 0; i < signals.size (); i++) 2814 { 2815 if (signals[i]) 2816 count++; 2817 } 2818 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1); 2819 strcpy (packet, "QProgramSignals:"); 2820 p = packet + strlen (packet); 2821 for (size_t i = 0; i < signals.size (); i++) 2822 { 2823 if (signal_pass_state (i)) 2824 { 2825 if (i >= 16) 2826 *p++ = tohex (i >> 4); 2827 *p++ = tohex (i & 15); 2828 if (count) 2829 *p++ = ';'; 2830 else 2831 break; 2832 count--; 2833 } 2834 } 2835 *p = 0; 2836 if (!rs->last_program_signals_packet 2837 || strcmp (rs->last_program_signals_packet, packet) != 0) 2838 { 2839 putpkt (packet); 2840 getpkt (&rs->buf, 0); 2841 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]); 2842 xfree (rs->last_program_signals_packet); 2843 rs->last_program_signals_packet = packet; 2844 } 2845 else 2846 xfree (packet); 2847 } 2848 } 2849 2850 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is 2851 MINUS_ONE_PTID, set the thread to -1, so the stub returns the 2852 thread. If GEN is set, set the general thread, if not, then set 2853 the step/continue thread. */ 2854 void 2855 remote_target::set_thread (ptid_t ptid, int gen) 2856 { 2857 struct remote_state *rs = get_remote_state (); 2858 ptid_t state = gen ? rs->general_thread : rs->continue_thread; 2859 char *buf = rs->buf.data (); 2860 char *endbuf = buf + get_remote_packet_size (); 2861 2862 if (state == ptid) 2863 return; 2864 2865 *buf++ = 'H'; 2866 *buf++ = gen ? 'g' : 'c'; 2867 if (ptid == magic_null_ptid) 2868 xsnprintf (buf, endbuf - buf, "0"); 2869 else if (ptid == any_thread_ptid) 2870 xsnprintf (buf, endbuf - buf, "0"); 2871 else if (ptid == minus_one_ptid) 2872 xsnprintf (buf, endbuf - buf, "-1"); 2873 else 2874 write_ptid (buf, endbuf, ptid); 2875 putpkt (rs->buf); 2876 getpkt (&rs->buf, 0); 2877 if (gen) 2878 rs->general_thread = ptid; 2879 else 2880 rs->continue_thread = ptid; 2881 } 2882 2883 void 2884 remote_target::set_general_thread (ptid_t ptid) 2885 { 2886 set_thread (ptid, 1); 2887 } 2888 2889 void 2890 remote_target::set_continue_thread (ptid_t ptid) 2891 { 2892 set_thread (ptid, 0); 2893 } 2894 2895 /* Change the remote current process. Which thread within the process 2896 ends up selected isn't important, as long as it is the same process 2897 as what INFERIOR_PTID points to. 2898 2899 This comes from that fact that there is no explicit notion of 2900 "selected process" in the protocol. The selected process for 2901 general operations is the process the selected general thread 2902 belongs to. */ 2903 2904 void 2905 remote_target::set_general_process () 2906 { 2907 struct remote_state *rs = get_remote_state (); 2908 2909 /* If the remote can't handle multiple processes, don't bother. */ 2910 if (!remote_multi_process_p (rs)) 2911 return; 2912 2913 /* We only need to change the remote current thread if it's pointing 2914 at some other process. */ 2915 if (rs->general_thread.pid () != inferior_ptid.pid ()) 2916 set_general_thread (inferior_ptid); 2917 } 2918 2919 2920 /* Return nonzero if this is the main thread that we made up ourselves 2921 to model non-threaded targets as single-threaded. */ 2922 2923 static int 2924 remote_thread_always_alive (ptid_t ptid) 2925 { 2926 if (ptid == magic_null_ptid) 2927 /* The main thread is always alive. */ 2928 return 1; 2929 2930 if (ptid.pid () != 0 && ptid.lwp () == 0) 2931 /* The main thread is always alive. This can happen after a 2932 vAttach, if the remote side doesn't support 2933 multi-threading. */ 2934 return 1; 2935 2936 return 0; 2937 } 2938 2939 /* Return nonzero if the thread PTID is still alive on the remote 2940 system. */ 2941 2942 bool 2943 remote_target::thread_alive (ptid_t ptid) 2944 { 2945 struct remote_state *rs = get_remote_state (); 2946 char *p, *endp; 2947 2948 /* Check if this is a thread that we made up ourselves to model 2949 non-threaded targets as single-threaded. */ 2950 if (remote_thread_always_alive (ptid)) 2951 return 1; 2952 2953 p = rs->buf.data (); 2954 endp = p + get_remote_packet_size (); 2955 2956 *p++ = 'T'; 2957 write_ptid (p, endp, ptid); 2958 2959 putpkt (rs->buf); 2960 getpkt (&rs->buf, 0); 2961 return (rs->buf[0] == 'O' && rs->buf[1] == 'K'); 2962 } 2963 2964 /* Return a pointer to a thread name if we know it and NULL otherwise. 2965 The thread_info object owns the memory for the name. */ 2966 2967 const char * 2968 remote_target::thread_name (struct thread_info *info) 2969 { 2970 if (info->priv != NULL) 2971 { 2972 const std::string &name = get_remote_thread_info (info)->name; 2973 return !name.empty () ? name.c_str () : NULL; 2974 } 2975 2976 return NULL; 2977 } 2978 2979 /* About these extended threadlist and threadinfo packets. They are 2980 variable length packets but, the fields within them are often fixed 2981 length. They are redundant enough to send over UDP as is the 2982 remote protocol in general. There is a matching unit test module 2983 in libstub. */ 2984 2985 /* WARNING: This threadref data structure comes from the remote O.S., 2986 libstub protocol encoding, and remote.c. It is not particularly 2987 changable. */ 2988 2989 /* Right now, the internal structure is int. We want it to be bigger. 2990 Plan to fix this. */ 2991 2992 typedef int gdb_threadref; /* Internal GDB thread reference. */ 2993 2994 /* gdb_ext_thread_info is an internal GDB data structure which is 2995 equivalent to the reply of the remote threadinfo packet. */ 2996 2997 struct gdb_ext_thread_info 2998 { 2999 threadref threadid; /* External form of thread reference. */ 3000 int active; /* Has state interesting to GDB? 3001 regs, stack. */ 3002 char display[256]; /* Brief state display, name, 3003 blocked/suspended. */ 3004 char shortname[32]; /* To be used to name threads. */ 3005 char more_display[256]; /* Long info, statistics, queue depth, 3006 whatever. */ 3007 }; 3008 3009 /* The volume of remote transfers can be limited by submitting 3010 a mask containing bits specifying the desired information. 3011 Use a union of these values as the 'selection' parameter to 3012 get_thread_info. FIXME: Make these TAG names more thread specific. */ 3013 3014 #define TAG_THREADID 1 3015 #define TAG_EXISTS 2 3016 #define TAG_DISPLAY 4 3017 #define TAG_THREADNAME 8 3018 #define TAG_MOREDISPLAY 16 3019 3020 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2) 3021 3022 static const char *unpack_nibble (const char *buf, int *val); 3023 3024 static const char *unpack_byte (const char *buf, int *value); 3025 3026 static char *pack_int (char *buf, int value); 3027 3028 static const char *unpack_int (const char *buf, int *value); 3029 3030 static const char *unpack_string (const char *src, char *dest, int length); 3031 3032 static char *pack_threadid (char *pkt, threadref *id); 3033 3034 static const char *unpack_threadid (const char *inbuf, threadref *id); 3035 3036 void int_to_threadref (threadref *id, int value); 3037 3038 static int threadref_to_int (threadref *ref); 3039 3040 static void copy_threadref (threadref *dest, threadref *src); 3041 3042 static int threadmatch (threadref *dest, threadref *src); 3043 3044 static char *pack_threadinfo_request (char *pkt, int mode, 3045 threadref *id); 3046 3047 static char *pack_threadlist_request (char *pkt, int startflag, 3048 int threadcount, 3049 threadref *nextthread); 3050 3051 static int remote_newthread_step (threadref *ref, void *context); 3052 3053 3054 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the 3055 buffer we're allowed to write to. Returns 3056 BUF+CHARACTERS_WRITTEN. */ 3057 3058 char * 3059 remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid) 3060 { 3061 int pid, tid; 3062 struct remote_state *rs = get_remote_state (); 3063 3064 if (remote_multi_process_p (rs)) 3065 { 3066 pid = ptid.pid (); 3067 if (pid < 0) 3068 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid); 3069 else 3070 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid); 3071 } 3072 tid = ptid.lwp (); 3073 if (tid < 0) 3074 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid); 3075 else 3076 buf += xsnprintf (buf, endbuf - buf, "%x", tid); 3077 3078 return buf; 3079 } 3080 3081 /* Extract a PTID from BUF. If non-null, OBUF is set to one past the 3082 last parsed char. Returns null_ptid if no thread id is found, and 3083 throws an error if the thread id has an invalid format. */ 3084 3085 static ptid_t 3086 read_ptid (const char *buf, const char **obuf) 3087 { 3088 const char *p = buf; 3089 const char *pp; 3090 ULONGEST pid = 0, tid = 0; 3091 3092 if (*p == 'p') 3093 { 3094 /* Multi-process ptid. */ 3095 pp = unpack_varlen_hex (p + 1, &pid); 3096 if (*pp != '.') 3097 error (_("invalid remote ptid: %s"), p); 3098 3099 p = pp; 3100 pp = unpack_varlen_hex (p + 1, &tid); 3101 if (obuf) 3102 *obuf = pp; 3103 return ptid_t (pid, tid, 0); 3104 } 3105 3106 /* No multi-process. Just a tid. */ 3107 pp = unpack_varlen_hex (p, &tid); 3108 3109 /* Return null_ptid when no thread id is found. */ 3110 if (p == pp) 3111 { 3112 if (obuf) 3113 *obuf = pp; 3114 return null_ptid; 3115 } 3116 3117 /* Since the stub is not sending a process id, then default to 3118 what's in inferior_ptid, unless it's null at this point. If so, 3119 then since there's no way to know the pid of the reported 3120 threads, use the magic number. */ 3121 if (inferior_ptid == null_ptid) 3122 pid = magic_null_ptid.pid (); 3123 else 3124 pid = inferior_ptid.pid (); 3125 3126 if (obuf) 3127 *obuf = pp; 3128 return ptid_t (pid, tid, 0); 3129 } 3130 3131 static int 3132 stubhex (int ch) 3133 { 3134 if (ch >= 'a' && ch <= 'f') 3135 return ch - 'a' + 10; 3136 if (ch >= '0' && ch <= '9') 3137 return ch - '0'; 3138 if (ch >= 'A' && ch <= 'F') 3139 return ch - 'A' + 10; 3140 return -1; 3141 } 3142 3143 static int 3144 stub_unpack_int (const char *buff, int fieldlength) 3145 { 3146 int nibble; 3147 int retval = 0; 3148 3149 while (fieldlength) 3150 { 3151 nibble = stubhex (*buff++); 3152 retval |= nibble; 3153 fieldlength--; 3154 if (fieldlength) 3155 retval = retval << 4; 3156 } 3157 return retval; 3158 } 3159 3160 static const char * 3161 unpack_nibble (const char *buf, int *val) 3162 { 3163 *val = fromhex (*buf++); 3164 return buf; 3165 } 3166 3167 static const char * 3168 unpack_byte (const char *buf, int *value) 3169 { 3170 *value = stub_unpack_int (buf, 2); 3171 return buf + 2; 3172 } 3173 3174 static char * 3175 pack_int (char *buf, int value) 3176 { 3177 buf = pack_hex_byte (buf, (value >> 24) & 0xff); 3178 buf = pack_hex_byte (buf, (value >> 16) & 0xff); 3179 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff); 3180 buf = pack_hex_byte (buf, (value & 0xff)); 3181 return buf; 3182 } 3183 3184 static const char * 3185 unpack_int (const char *buf, int *value) 3186 { 3187 *value = stub_unpack_int (buf, 8); 3188 return buf + 8; 3189 } 3190 3191 #if 0 /* Currently unused, uncomment when needed. */ 3192 static char *pack_string (char *pkt, char *string); 3193 3194 static char * 3195 pack_string (char *pkt, char *string) 3196 { 3197 char ch; 3198 int len; 3199 3200 len = strlen (string); 3201 if (len > 200) 3202 len = 200; /* Bigger than most GDB packets, junk??? */ 3203 pkt = pack_hex_byte (pkt, len); 3204 while (len-- > 0) 3205 { 3206 ch = *string++; 3207 if ((ch == '\0') || (ch == '#')) 3208 ch = '*'; /* Protect encapsulation. */ 3209 *pkt++ = ch; 3210 } 3211 return pkt; 3212 } 3213 #endif /* 0 (unused) */ 3214 3215 static const char * 3216 unpack_string (const char *src, char *dest, int length) 3217 { 3218 while (length--) 3219 *dest++ = *src++; 3220 *dest = '\0'; 3221 return src; 3222 } 3223 3224 static char * 3225 pack_threadid (char *pkt, threadref *id) 3226 { 3227 char *limit; 3228 unsigned char *altid; 3229 3230 altid = (unsigned char *) id; 3231 limit = pkt + BUF_THREAD_ID_SIZE; 3232 while (pkt < limit) 3233 pkt = pack_hex_byte (pkt, *altid++); 3234 return pkt; 3235 } 3236 3237 3238 static const char * 3239 unpack_threadid (const char *inbuf, threadref *id) 3240 { 3241 char *altref; 3242 const char *limit = inbuf + BUF_THREAD_ID_SIZE; 3243 int x, y; 3244 3245 altref = (char *) id; 3246 3247 while (inbuf < limit) 3248 { 3249 x = stubhex (*inbuf++); 3250 y = stubhex (*inbuf++); 3251 *altref++ = (x << 4) | y; 3252 } 3253 return inbuf; 3254 } 3255 3256 /* Externally, threadrefs are 64 bits but internally, they are still 3257 ints. This is due to a mismatch of specifications. We would like 3258 to use 64bit thread references internally. This is an adapter 3259 function. */ 3260 3261 void 3262 int_to_threadref (threadref *id, int value) 3263 { 3264 unsigned char *scan; 3265 3266 scan = (unsigned char *) id; 3267 { 3268 int i = 4; 3269 while (i--) 3270 *scan++ = 0; 3271 } 3272 *scan++ = (value >> 24) & 0xff; 3273 *scan++ = (value >> 16) & 0xff; 3274 *scan++ = (value >> 8) & 0xff; 3275 *scan++ = (value & 0xff); 3276 } 3277 3278 static int 3279 threadref_to_int (threadref *ref) 3280 { 3281 int i, value = 0; 3282 unsigned char *scan; 3283 3284 scan = *ref; 3285 scan += 4; 3286 i = 4; 3287 while (i-- > 0) 3288 value = (value << 8) | ((*scan++) & 0xff); 3289 return value; 3290 } 3291 3292 static void 3293 copy_threadref (threadref *dest, threadref *src) 3294 { 3295 int i; 3296 unsigned char *csrc, *cdest; 3297 3298 csrc = (unsigned char *) src; 3299 cdest = (unsigned char *) dest; 3300 i = 8; 3301 while (i--) 3302 *cdest++ = *csrc++; 3303 } 3304 3305 static int 3306 threadmatch (threadref *dest, threadref *src) 3307 { 3308 /* Things are broken right now, so just assume we got a match. */ 3309 #if 0 3310 unsigned char *srcp, *destp; 3311 int i, result; 3312 srcp = (char *) src; 3313 destp = (char *) dest; 3314 3315 result = 1; 3316 while (i-- > 0) 3317 result &= (*srcp++ == *destp++) ? 1 : 0; 3318 return result; 3319 #endif 3320 return 1; 3321 } 3322 3323 /* 3324 threadid:1, # always request threadid 3325 context_exists:2, 3326 display:4, 3327 unique_name:8, 3328 more_display:16 3329 */ 3330 3331 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */ 3332 3333 static char * 3334 pack_threadinfo_request (char *pkt, int mode, threadref *id) 3335 { 3336 *pkt++ = 'q'; /* Info Query */ 3337 *pkt++ = 'P'; /* process or thread info */ 3338 pkt = pack_int (pkt, mode); /* mode */ 3339 pkt = pack_threadid (pkt, id); /* threadid */ 3340 *pkt = '\0'; /* terminate */ 3341 return pkt; 3342 } 3343 3344 /* These values tag the fields in a thread info response packet. */ 3345 /* Tagging the fields allows us to request specific fields and to 3346 add more fields as time goes by. */ 3347 3348 #define TAG_THREADID 1 /* Echo the thread identifier. */ 3349 #define TAG_EXISTS 2 /* Is this process defined enough to 3350 fetch registers and its stack? */ 3351 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */ 3352 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */ 3353 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about 3354 the process. */ 3355 3356 int 3357 remote_target::remote_unpack_thread_info_response (const char *pkt, 3358 threadref *expectedref, 3359 gdb_ext_thread_info *info) 3360 { 3361 struct remote_state *rs = get_remote_state (); 3362 int mask, length; 3363 int tag; 3364 threadref ref; 3365 const char *limit = pkt + rs->buf.size (); /* Plausible parsing limit. */ 3366 int retval = 1; 3367 3368 /* info->threadid = 0; FIXME: implement zero_threadref. */ 3369 info->active = 0; 3370 info->display[0] = '\0'; 3371 info->shortname[0] = '\0'; 3372 info->more_display[0] = '\0'; 3373 3374 /* Assume the characters indicating the packet type have been 3375 stripped. */ 3376 pkt = unpack_int (pkt, &mask); /* arg mask */ 3377 pkt = unpack_threadid (pkt, &ref); 3378 3379 if (mask == 0) 3380 warning (_("Incomplete response to threadinfo request.")); 3381 if (!threadmatch (&ref, expectedref)) 3382 { /* This is an answer to a different request. */ 3383 warning (_("ERROR RMT Thread info mismatch.")); 3384 return 0; 3385 } 3386 copy_threadref (&info->threadid, &ref); 3387 3388 /* Loop on tagged fields , try to bail if something goes wrong. */ 3389 3390 /* Packets are terminated with nulls. */ 3391 while ((pkt < limit) && mask && *pkt) 3392 { 3393 pkt = unpack_int (pkt, &tag); /* tag */ 3394 pkt = unpack_byte (pkt, &length); /* length */ 3395 if (!(tag & mask)) /* Tags out of synch with mask. */ 3396 { 3397 warning (_("ERROR RMT: threadinfo tag mismatch.")); 3398 retval = 0; 3399 break; 3400 } 3401 if (tag == TAG_THREADID) 3402 { 3403 if (length != 16) 3404 { 3405 warning (_("ERROR RMT: length of threadid is not 16.")); 3406 retval = 0; 3407 break; 3408 } 3409 pkt = unpack_threadid (pkt, &ref); 3410 mask = mask & ~TAG_THREADID; 3411 continue; 3412 } 3413 if (tag == TAG_EXISTS) 3414 { 3415 info->active = stub_unpack_int (pkt, length); 3416 pkt += length; 3417 mask = mask & ~(TAG_EXISTS); 3418 if (length > 8) 3419 { 3420 warning (_("ERROR RMT: 'exists' length too long.")); 3421 retval = 0; 3422 break; 3423 } 3424 continue; 3425 } 3426 if (tag == TAG_THREADNAME) 3427 { 3428 pkt = unpack_string (pkt, &info->shortname[0], length); 3429 mask = mask & ~TAG_THREADNAME; 3430 continue; 3431 } 3432 if (tag == TAG_DISPLAY) 3433 { 3434 pkt = unpack_string (pkt, &info->display[0], length); 3435 mask = mask & ~TAG_DISPLAY; 3436 continue; 3437 } 3438 if (tag == TAG_MOREDISPLAY) 3439 { 3440 pkt = unpack_string (pkt, &info->more_display[0], length); 3441 mask = mask & ~TAG_MOREDISPLAY; 3442 continue; 3443 } 3444 warning (_("ERROR RMT: unknown thread info tag.")); 3445 break; /* Not a tag we know about. */ 3446 } 3447 return retval; 3448 } 3449 3450 int 3451 remote_target::remote_get_threadinfo (threadref *threadid, 3452 int fieldset, 3453 gdb_ext_thread_info *info) 3454 { 3455 struct remote_state *rs = get_remote_state (); 3456 int result; 3457 3458 pack_threadinfo_request (rs->buf.data (), fieldset, threadid); 3459 putpkt (rs->buf); 3460 getpkt (&rs->buf, 0); 3461 3462 if (rs->buf[0] == '\0') 3463 return 0; 3464 3465 result = remote_unpack_thread_info_response (&rs->buf[2], 3466 threadid, info); 3467 return result; 3468 } 3469 3470 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */ 3471 3472 static char * 3473 pack_threadlist_request (char *pkt, int startflag, int threadcount, 3474 threadref *nextthread) 3475 { 3476 *pkt++ = 'q'; /* info query packet */ 3477 *pkt++ = 'L'; /* Process LIST or threadLIST request */ 3478 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */ 3479 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */ 3480 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */ 3481 *pkt = '\0'; 3482 return pkt; 3483 } 3484 3485 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */ 3486 3487 int 3488 remote_target::parse_threadlist_response (const char *pkt, int result_limit, 3489 threadref *original_echo, 3490 threadref *resultlist, 3491 int *doneflag) 3492 { 3493 struct remote_state *rs = get_remote_state (); 3494 int count, resultcount, done; 3495 3496 resultcount = 0; 3497 /* Assume the 'q' and 'M chars have been stripped. */ 3498 const char *limit = pkt + (rs->buf.size () - BUF_THREAD_ID_SIZE); 3499 /* done parse past here */ 3500 pkt = unpack_byte (pkt, &count); /* count field */ 3501 pkt = unpack_nibble (pkt, &done); 3502 /* The first threadid is the argument threadid. */ 3503 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */ 3504 while ((count-- > 0) && (pkt < limit)) 3505 { 3506 pkt = unpack_threadid (pkt, resultlist++); 3507 if (resultcount++ >= result_limit) 3508 break; 3509 } 3510 if (doneflag) 3511 *doneflag = done; 3512 return resultcount; 3513 } 3514 3515 /* Fetch the next batch of threads from the remote. Returns -1 if the 3516 qL packet is not supported, 0 on error and 1 on success. */ 3517 3518 int 3519 remote_target::remote_get_threadlist (int startflag, threadref *nextthread, 3520 int result_limit, int *done, int *result_count, 3521 threadref *threadlist) 3522 { 3523 struct remote_state *rs = get_remote_state (); 3524 int result = 1; 3525 3526 /* Truncate result limit to be smaller than the packet size. */ 3527 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) 3528 >= get_remote_packet_size ()) 3529 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2; 3530 3531 pack_threadlist_request (rs->buf.data (), startflag, result_limit, 3532 nextthread); 3533 putpkt (rs->buf); 3534 getpkt (&rs->buf, 0); 3535 if (rs->buf[0] == '\0') 3536 { 3537 /* Packet not supported. */ 3538 return -1; 3539 } 3540 3541 *result_count = 3542 parse_threadlist_response (&rs->buf[2], result_limit, 3543 &rs->echo_nextthread, threadlist, done); 3544 3545 if (!threadmatch (&rs->echo_nextthread, nextthread)) 3546 { 3547 /* FIXME: This is a good reason to drop the packet. */ 3548 /* Possibly, there is a duplicate response. */ 3549 /* Possibilities : 3550 retransmit immediatly - race conditions 3551 retransmit after timeout - yes 3552 exit 3553 wait for packet, then exit 3554 */ 3555 warning (_("HMM: threadlist did not echo arg thread, dropping it.")); 3556 return 0; /* I choose simply exiting. */ 3557 } 3558 if (*result_count <= 0) 3559 { 3560 if (*done != 1) 3561 { 3562 warning (_("RMT ERROR : failed to get remote thread list.")); 3563 result = 0; 3564 } 3565 return result; /* break; */ 3566 } 3567 if (*result_count > result_limit) 3568 { 3569 *result_count = 0; 3570 warning (_("RMT ERROR: threadlist response longer than requested.")); 3571 return 0; 3572 } 3573 return result; 3574 } 3575 3576 /* Fetch the list of remote threads, with the qL packet, and call 3577 STEPFUNCTION for each thread found. Stops iterating and returns 1 3578 if STEPFUNCTION returns true. Stops iterating and returns 0 if the 3579 STEPFUNCTION returns false. If the packet is not supported, 3580 returns -1. */ 3581 3582 int 3583 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction, 3584 void *context, int looplimit) 3585 { 3586 struct remote_state *rs = get_remote_state (); 3587 int done, i, result_count; 3588 int startflag = 1; 3589 int result = 1; 3590 int loopcount = 0; 3591 3592 done = 0; 3593 while (!done) 3594 { 3595 if (loopcount++ > looplimit) 3596 { 3597 result = 0; 3598 warning (_("Remote fetch threadlist -infinite loop-.")); 3599 break; 3600 } 3601 result = remote_get_threadlist (startflag, &rs->nextthread, 3602 MAXTHREADLISTRESULTS, 3603 &done, &result_count, 3604 rs->resultthreadlist); 3605 if (result <= 0) 3606 break; 3607 /* Clear for later iterations. */ 3608 startflag = 0; 3609 /* Setup to resume next batch of thread references, set nextthread. */ 3610 if (result_count >= 1) 3611 copy_threadref (&rs->nextthread, 3612 &rs->resultthreadlist[result_count - 1]); 3613 i = 0; 3614 while (result_count--) 3615 { 3616 if (!(*stepfunction) (&rs->resultthreadlist[i++], context)) 3617 { 3618 result = 0; 3619 break; 3620 } 3621 } 3622 } 3623 return result; 3624 } 3625 3626 /* A thread found on the remote target. */ 3627 3628 struct thread_item 3629 { 3630 explicit thread_item (ptid_t ptid_) 3631 : ptid (ptid_) 3632 {} 3633 3634 thread_item (thread_item &&other) = default; 3635 thread_item &operator= (thread_item &&other) = default; 3636 3637 DISABLE_COPY_AND_ASSIGN (thread_item); 3638 3639 /* The thread's PTID. */ 3640 ptid_t ptid; 3641 3642 /* The thread's extra info. */ 3643 std::string extra; 3644 3645 /* The thread's name. */ 3646 std::string name; 3647 3648 /* The core the thread was running on. -1 if not known. */ 3649 int core = -1; 3650 3651 /* The thread handle associated with the thread. */ 3652 gdb::byte_vector thread_handle; 3653 }; 3654 3655 /* Context passed around to the various methods listing remote 3656 threads. As new threads are found, they're added to the ITEMS 3657 vector. */ 3658 3659 struct threads_listing_context 3660 { 3661 /* Return true if this object contains an entry for a thread with ptid 3662 PTID. */ 3663 3664 bool contains_thread (ptid_t ptid) const 3665 { 3666 auto match_ptid = [&] (const thread_item &item) 3667 { 3668 return item.ptid == ptid; 3669 }; 3670 3671 auto it = std::find_if (this->items.begin (), 3672 this->items.end (), 3673 match_ptid); 3674 3675 return it != this->items.end (); 3676 } 3677 3678 /* Remove the thread with ptid PTID. */ 3679 3680 void remove_thread (ptid_t ptid) 3681 { 3682 auto match_ptid = [&] (const thread_item &item) 3683 { 3684 return item.ptid == ptid; 3685 }; 3686 3687 auto it = std::remove_if (this->items.begin (), 3688 this->items.end (), 3689 match_ptid); 3690 3691 if (it != this->items.end ()) 3692 this->items.erase (it); 3693 } 3694 3695 /* The threads found on the remote target. */ 3696 std::vector<thread_item> items; 3697 }; 3698 3699 static int 3700 remote_newthread_step (threadref *ref, void *data) 3701 { 3702 struct threads_listing_context *context 3703 = (struct threads_listing_context *) data; 3704 int pid = inferior_ptid.pid (); 3705 int lwp = threadref_to_int (ref); 3706 ptid_t ptid (pid, lwp); 3707 3708 context->items.emplace_back (ptid); 3709 3710 return 1; /* continue iterator */ 3711 } 3712 3713 #define CRAZY_MAX_THREADS 1000 3714 3715 ptid_t 3716 remote_target::remote_current_thread (ptid_t oldpid) 3717 { 3718 struct remote_state *rs = get_remote_state (); 3719 3720 putpkt ("qC"); 3721 getpkt (&rs->buf, 0); 3722 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C') 3723 { 3724 const char *obuf; 3725 ptid_t result; 3726 3727 result = read_ptid (&rs->buf[2], &obuf); 3728 if (*obuf != '\0') 3729 remote_debug_printf ("warning: garbage in qC reply"); 3730 3731 return result; 3732 } 3733 else 3734 return oldpid; 3735 } 3736 3737 /* List remote threads using the deprecated qL packet. */ 3738 3739 int 3740 remote_target::remote_get_threads_with_ql (threads_listing_context *context) 3741 { 3742 if (remote_threadlist_iterator (remote_newthread_step, context, 3743 CRAZY_MAX_THREADS) >= 0) 3744 return 1; 3745 3746 return 0; 3747 } 3748 3749 #if defined(HAVE_LIBEXPAT) 3750 3751 static void 3752 start_thread (struct gdb_xml_parser *parser, 3753 const struct gdb_xml_element *element, 3754 void *user_data, 3755 std::vector<gdb_xml_value> &attributes) 3756 { 3757 struct threads_listing_context *data 3758 = (struct threads_listing_context *) user_data; 3759 struct gdb_xml_value *attr; 3760 3761 char *id = (char *) xml_find_attribute (attributes, "id")->value.get (); 3762 ptid_t ptid = read_ptid (id, NULL); 3763 3764 data->items.emplace_back (ptid); 3765 thread_item &item = data->items.back (); 3766 3767 attr = xml_find_attribute (attributes, "core"); 3768 if (attr != NULL) 3769 item.core = *(ULONGEST *) attr->value.get (); 3770 3771 attr = xml_find_attribute (attributes, "name"); 3772 if (attr != NULL) 3773 item.name = (const char *) attr->value.get (); 3774 3775 attr = xml_find_attribute (attributes, "handle"); 3776 if (attr != NULL) 3777 item.thread_handle = hex2bin ((const char *) attr->value.get ()); 3778 } 3779 3780 static void 3781 end_thread (struct gdb_xml_parser *parser, 3782 const struct gdb_xml_element *element, 3783 void *user_data, const char *body_text) 3784 { 3785 struct threads_listing_context *data 3786 = (struct threads_listing_context *) user_data; 3787 3788 if (body_text != NULL && *body_text != '\0') 3789 data->items.back ().extra = body_text; 3790 } 3791 3792 const struct gdb_xml_attribute thread_attributes[] = { 3793 { "id", GDB_XML_AF_NONE, NULL, NULL }, 3794 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL }, 3795 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL }, 3796 { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL }, 3797 { NULL, GDB_XML_AF_NONE, NULL, NULL } 3798 }; 3799 3800 const struct gdb_xml_element thread_children[] = { 3801 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } 3802 }; 3803 3804 const struct gdb_xml_element threads_children[] = { 3805 { "thread", thread_attributes, thread_children, 3806 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL, 3807 start_thread, end_thread }, 3808 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } 3809 }; 3810 3811 const struct gdb_xml_element threads_elements[] = { 3812 { "threads", NULL, threads_children, 3813 GDB_XML_EF_NONE, NULL, NULL }, 3814 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } 3815 }; 3816 3817 #endif 3818 3819 /* List remote threads using qXfer:threads:read. */ 3820 3821 int 3822 remote_target::remote_get_threads_with_qxfer (threads_listing_context *context) 3823 { 3824 #if defined(HAVE_LIBEXPAT) 3825 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE) 3826 { 3827 gdb::optional<gdb::char_vector> xml 3828 = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL); 3829 3830 if (xml && (*xml)[0] != '\0') 3831 { 3832 gdb_xml_parse_quick (_("threads"), "threads.dtd", 3833 threads_elements, xml->data (), context); 3834 } 3835 3836 return 1; 3837 } 3838 #endif 3839 3840 return 0; 3841 } 3842 3843 /* List remote threads using qfThreadInfo/qsThreadInfo. */ 3844 3845 int 3846 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context) 3847 { 3848 struct remote_state *rs = get_remote_state (); 3849 3850 if (rs->use_threadinfo_query) 3851 { 3852 const char *bufp; 3853 3854 putpkt ("qfThreadInfo"); 3855 getpkt (&rs->buf, 0); 3856 bufp = rs->buf.data (); 3857 if (bufp[0] != '\0') /* q packet recognized */ 3858 { 3859 while (*bufp++ == 'm') /* reply contains one or more TID */ 3860 { 3861 do 3862 { 3863 ptid_t ptid = read_ptid (bufp, &bufp); 3864 context->items.emplace_back (ptid); 3865 } 3866 while (*bufp++ == ','); /* comma-separated list */ 3867 putpkt ("qsThreadInfo"); 3868 getpkt (&rs->buf, 0); 3869 bufp = rs->buf.data (); 3870 } 3871 return 1; 3872 } 3873 else 3874 { 3875 /* Packet not recognized. */ 3876 rs->use_threadinfo_query = 0; 3877 } 3878 } 3879 3880 return 0; 3881 } 3882 3883 /* Return true if INF only has one non-exited thread. */ 3884 3885 static bool 3886 has_single_non_exited_thread (inferior *inf) 3887 { 3888 int count = 0; 3889 for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ()) 3890 if (++count > 1) 3891 break; 3892 return count == 1; 3893 } 3894 3895 /* Implement the to_update_thread_list function for the remote 3896 targets. */ 3897 3898 void 3899 remote_target::update_thread_list () 3900 { 3901 struct threads_listing_context context; 3902 int got_list = 0; 3903 3904 /* We have a few different mechanisms to fetch the thread list. Try 3905 them all, starting with the most preferred one first, falling 3906 back to older methods. */ 3907 if (remote_get_threads_with_qxfer (&context) 3908 || remote_get_threads_with_qthreadinfo (&context) 3909 || remote_get_threads_with_ql (&context)) 3910 { 3911 got_list = 1; 3912 3913 if (context.items.empty () 3914 && remote_thread_always_alive (inferior_ptid)) 3915 { 3916 /* Some targets don't really support threads, but still 3917 reply an (empty) thread list in response to the thread 3918 listing packets, instead of replying "packet not 3919 supported". Exit early so we don't delete the main 3920 thread. */ 3921 return; 3922 } 3923 3924 /* CONTEXT now holds the current thread list on the remote 3925 target end. Delete GDB-side threads no longer found on the 3926 target. */ 3927 for (thread_info *tp : all_threads_safe ()) 3928 { 3929 if (tp->inf->process_target () != this) 3930 continue; 3931 3932 if (!context.contains_thread (tp->ptid)) 3933 { 3934 /* Do not remove the thread if it is the last thread in 3935 the inferior. This situation happens when we have a 3936 pending exit process status to process. Otherwise we 3937 may end up with a seemingly live inferior (i.e. pid 3938 != 0) that has no threads. */ 3939 if (has_single_non_exited_thread (tp->inf)) 3940 continue; 3941 3942 /* Not found. */ 3943 delete_thread (tp); 3944 } 3945 } 3946 3947 /* Remove any unreported fork child threads from CONTEXT so 3948 that we don't interfere with follow fork, which is where 3949 creation of such threads is handled. */ 3950 remove_new_fork_children (&context); 3951 3952 /* And now add threads we don't know about yet to our list. */ 3953 for (thread_item &item : context.items) 3954 { 3955 if (item.ptid != null_ptid) 3956 { 3957 /* In non-stop mode, we assume new found threads are 3958 executing until proven otherwise with a stop reply. 3959 In all-stop, we can only get here if all threads are 3960 stopped. */ 3961 bool executing = target_is_non_stop_p (); 3962 3963 remote_notice_new_inferior (item.ptid, executing); 3964 3965 thread_info *tp = find_thread_ptid (this, item.ptid); 3966 remote_thread_info *info = get_remote_thread_info (tp); 3967 info->core = item.core; 3968 info->extra = std::move (item.extra); 3969 info->name = std::move (item.name); 3970 info->thread_handle = std::move (item.thread_handle); 3971 } 3972 } 3973 } 3974 3975 if (!got_list) 3976 { 3977 /* If no thread listing method is supported, then query whether 3978 each known thread is alive, one by one, with the T packet. 3979 If the target doesn't support threads at all, then this is a 3980 no-op. See remote_thread_alive. */ 3981 prune_threads (); 3982 } 3983 } 3984 3985 /* 3986 * Collect a descriptive string about the given thread. 3987 * The target may say anything it wants to about the thread 3988 * (typically info about its blocked / runnable state, name, etc.). 3989 * This string will appear in the info threads display. 3990 * 3991 * Optional: targets are not required to implement this function. 3992 */ 3993 3994 const char * 3995 remote_target::extra_thread_info (thread_info *tp) 3996 { 3997 struct remote_state *rs = get_remote_state (); 3998 int set; 3999 threadref id; 4000 struct gdb_ext_thread_info threadinfo; 4001 4002 if (rs->remote_desc == 0) /* paranoia */ 4003 internal_error (__FILE__, __LINE__, 4004 _("remote_threads_extra_info")); 4005 4006 if (tp->ptid == magic_null_ptid 4007 || (tp->ptid.pid () != 0 && tp->ptid.lwp () == 0)) 4008 /* This is the main thread which was added by GDB. The remote 4009 server doesn't know about it. */ 4010 return NULL; 4011 4012 std::string &extra = get_remote_thread_info (tp)->extra; 4013 4014 /* If already have cached info, use it. */ 4015 if (!extra.empty ()) 4016 return extra.c_str (); 4017 4018 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE) 4019 { 4020 /* If we're using qXfer:threads:read, then the extra info is 4021 included in the XML. So if we didn't have anything cached, 4022 it's because there's really no extra info. */ 4023 return NULL; 4024 } 4025 4026 if (rs->use_threadextra_query) 4027 { 4028 char *b = rs->buf.data (); 4029 char *endb = b + get_remote_packet_size (); 4030 4031 xsnprintf (b, endb - b, "qThreadExtraInfo,"); 4032 b += strlen (b); 4033 write_ptid (b, endb, tp->ptid); 4034 4035 putpkt (rs->buf); 4036 getpkt (&rs->buf, 0); 4037 if (rs->buf[0] != 0) 4038 { 4039 extra.resize (strlen (rs->buf.data ()) / 2); 4040 hex2bin (rs->buf.data (), (gdb_byte *) &extra[0], extra.size ()); 4041 return extra.c_str (); 4042 } 4043 } 4044 4045 /* If the above query fails, fall back to the old method. */ 4046 rs->use_threadextra_query = 0; 4047 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME 4048 | TAG_MOREDISPLAY | TAG_DISPLAY; 4049 int_to_threadref (&id, tp->ptid.lwp ()); 4050 if (remote_get_threadinfo (&id, set, &threadinfo)) 4051 if (threadinfo.active) 4052 { 4053 if (*threadinfo.shortname) 4054 string_appendf (extra, " Name: %s", threadinfo.shortname); 4055 if (*threadinfo.display) 4056 { 4057 if (!extra.empty ()) 4058 extra += ','; 4059 string_appendf (extra, " State: %s", threadinfo.display); 4060 } 4061 if (*threadinfo.more_display) 4062 { 4063 if (!extra.empty ()) 4064 extra += ','; 4065 string_appendf (extra, " Priority: %s", threadinfo.more_display); 4066 } 4067 return extra.c_str (); 4068 } 4069 return NULL; 4070 } 4071 4072 4073 bool 4074 remote_target::static_tracepoint_marker_at (CORE_ADDR addr, 4075 struct static_tracepoint_marker *marker) 4076 { 4077 struct remote_state *rs = get_remote_state (); 4078 char *p = rs->buf.data (); 4079 4080 xsnprintf (p, get_remote_packet_size (), "qTSTMat:"); 4081 p += strlen (p); 4082 p += hexnumstr (p, addr); 4083 putpkt (rs->buf); 4084 getpkt (&rs->buf, 0); 4085 p = rs->buf.data (); 4086 4087 if (*p == 'E') 4088 error (_("Remote failure reply: %s"), p); 4089 4090 if (*p++ == 'm') 4091 { 4092 parse_static_tracepoint_marker_definition (p, NULL, marker); 4093 return true; 4094 } 4095 4096 return false; 4097 } 4098 4099 std::vector<static_tracepoint_marker> 4100 remote_target::static_tracepoint_markers_by_strid (const char *strid) 4101 { 4102 struct remote_state *rs = get_remote_state (); 4103 std::vector<static_tracepoint_marker> markers; 4104 const char *p; 4105 static_tracepoint_marker marker; 4106 4107 /* Ask for a first packet of static tracepoint marker 4108 definition. */ 4109 putpkt ("qTfSTM"); 4110 getpkt (&rs->buf, 0); 4111 p = rs->buf.data (); 4112 if (*p == 'E') 4113 error (_("Remote failure reply: %s"), p); 4114 4115 while (*p++ == 'm') 4116 { 4117 do 4118 { 4119 parse_static_tracepoint_marker_definition (p, &p, &marker); 4120 4121 if (strid == NULL || marker.str_id == strid) 4122 markers.push_back (std::move (marker)); 4123 } 4124 while (*p++ == ','); /* comma-separated list */ 4125 /* Ask for another packet of static tracepoint definition. */ 4126 putpkt ("qTsSTM"); 4127 getpkt (&rs->buf, 0); 4128 p = rs->buf.data (); 4129 } 4130 4131 return markers; 4132 } 4133 4134 4135 /* Implement the to_get_ada_task_ptid function for the remote targets. */ 4136 4137 ptid_t 4138 remote_target::get_ada_task_ptid (long lwp, long thread) 4139 { 4140 return ptid_t (inferior_ptid.pid (), lwp, 0); 4141 } 4142 4143 4144 /* Restart the remote side; this is an extended protocol operation. */ 4145 4146 void 4147 remote_target::extended_remote_restart () 4148 { 4149 struct remote_state *rs = get_remote_state (); 4150 4151 /* Send the restart command; for reasons I don't understand the 4152 remote side really expects a number after the "R". */ 4153 xsnprintf (rs->buf.data (), get_remote_packet_size (), "R%x", 0); 4154 putpkt (rs->buf); 4155 4156 remote_fileio_reset (); 4157 } 4158 4159 /* Clean up connection to a remote debugger. */ 4160 4161 void 4162 remote_target::close () 4163 { 4164 /* Make sure we leave stdin registered in the event loop. */ 4165 terminal_ours (); 4166 4167 trace_reset_local_state (); 4168 4169 delete this; 4170 } 4171 4172 remote_target::~remote_target () 4173 { 4174 struct remote_state *rs = get_remote_state (); 4175 4176 /* Check for NULL because we may get here with a partially 4177 constructed target/connection. */ 4178 if (rs->remote_desc == nullptr) 4179 return; 4180 4181 serial_close (rs->remote_desc); 4182 4183 /* We are destroying the remote target, so we should discard 4184 everything of this target. */ 4185 discard_pending_stop_replies_in_queue (); 4186 4187 if (rs->remote_async_inferior_event_token) 4188 delete_async_event_handler (&rs->remote_async_inferior_event_token); 4189 4190 delete rs->notif_state; 4191 } 4192 4193 /* Query the remote side for the text, data and bss offsets. */ 4194 4195 void 4196 remote_target::get_offsets () 4197 { 4198 struct remote_state *rs = get_remote_state (); 4199 char *buf; 4200 char *ptr; 4201 int lose, num_segments = 0, do_sections, do_segments; 4202 CORE_ADDR text_addr, data_addr, bss_addr, segments[2]; 4203 4204 if (current_program_space->symfile_object_file == NULL) 4205 return; 4206 4207 putpkt ("qOffsets"); 4208 getpkt (&rs->buf, 0); 4209 buf = rs->buf.data (); 4210 4211 if (buf[0] == '\000') 4212 return; /* Return silently. Stub doesn't support 4213 this command. */ 4214 if (buf[0] == 'E') 4215 { 4216 warning (_("Remote failure reply: %s"), buf); 4217 return; 4218 } 4219 4220 /* Pick up each field in turn. This used to be done with scanf, but 4221 scanf will make trouble if CORE_ADDR size doesn't match 4222 conversion directives correctly. The following code will work 4223 with any size of CORE_ADDR. */ 4224 text_addr = data_addr = bss_addr = 0; 4225 ptr = buf; 4226 lose = 0; 4227 4228 if (startswith (ptr, "Text=")) 4229 { 4230 ptr += 5; 4231 /* Don't use strtol, could lose on big values. */ 4232 while (*ptr && *ptr != ';') 4233 text_addr = (text_addr << 4) + fromhex (*ptr++); 4234 4235 if (startswith (ptr, ";Data=")) 4236 { 4237 ptr += 6; 4238 while (*ptr && *ptr != ';') 4239 data_addr = (data_addr << 4) + fromhex (*ptr++); 4240 } 4241 else 4242 lose = 1; 4243 4244 if (!lose && startswith (ptr, ";Bss=")) 4245 { 4246 ptr += 5; 4247 while (*ptr && *ptr != ';') 4248 bss_addr = (bss_addr << 4) + fromhex (*ptr++); 4249 4250 if (bss_addr != data_addr) 4251 warning (_("Target reported unsupported offsets: %s"), buf); 4252 } 4253 else 4254 lose = 1; 4255 } 4256 else if (startswith (ptr, "TextSeg=")) 4257 { 4258 ptr += 8; 4259 /* Don't use strtol, could lose on big values. */ 4260 while (*ptr && *ptr != ';') 4261 text_addr = (text_addr << 4) + fromhex (*ptr++); 4262 num_segments = 1; 4263 4264 if (startswith (ptr, ";DataSeg=")) 4265 { 4266 ptr += 9; 4267 while (*ptr && *ptr != ';') 4268 data_addr = (data_addr << 4) + fromhex (*ptr++); 4269 num_segments++; 4270 } 4271 } 4272 else 4273 lose = 1; 4274 4275 if (lose) 4276 error (_("Malformed response to offset query, %s"), buf); 4277 else if (*ptr != '\0') 4278 warning (_("Target reported unsupported offsets: %s"), buf); 4279 4280 objfile *objf = current_program_space->symfile_object_file; 4281 section_offsets offs = objf->section_offsets; 4282 4283 symfile_segment_data_up data = get_symfile_segment_data (objf->obfd); 4284 do_segments = (data != NULL); 4285 do_sections = num_segments == 0; 4286 4287 if (num_segments > 0) 4288 { 4289 segments[0] = text_addr; 4290 segments[1] = data_addr; 4291 } 4292 /* If we have two segments, we can still try to relocate everything 4293 by assuming that the .text and .data offsets apply to the whole 4294 text and data segments. Convert the offsets given in the packet 4295 to base addresses for symfile_map_offsets_to_segments. */ 4296 else if (data != nullptr && data->segments.size () == 2) 4297 { 4298 segments[0] = data->segments[0].base + text_addr; 4299 segments[1] = data->segments[1].base + data_addr; 4300 num_segments = 2; 4301 } 4302 /* If the object file has only one segment, assume that it is text 4303 rather than data; main programs with no writable data are rare, 4304 but programs with no code are useless. Of course the code might 4305 have ended up in the data segment... to detect that we would need 4306 the permissions here. */ 4307 else if (data && data->segments.size () == 1) 4308 { 4309 segments[0] = data->segments[0].base + text_addr; 4310 num_segments = 1; 4311 } 4312 /* There's no way to relocate by segment. */ 4313 else 4314 do_segments = 0; 4315 4316 if (do_segments) 4317 { 4318 int ret = symfile_map_offsets_to_segments (objf->obfd, 4319 data.get (), offs, 4320 num_segments, segments); 4321 4322 if (ret == 0 && !do_sections) 4323 error (_("Can not handle qOffsets TextSeg " 4324 "response with this symbol file")); 4325 4326 if (ret > 0) 4327 do_sections = 0; 4328 } 4329 4330 if (do_sections) 4331 { 4332 offs[SECT_OFF_TEXT (objf)] = text_addr; 4333 4334 /* This is a temporary kludge to force data and bss to use the 4335 same offsets because that's what nlmconv does now. The real 4336 solution requires changes to the stub and remote.c that I 4337 don't have time to do right now. */ 4338 4339 offs[SECT_OFF_DATA (objf)] = data_addr; 4340 offs[SECT_OFF_BSS (objf)] = data_addr; 4341 } 4342 4343 objfile_relocate (objf, offs); 4344 } 4345 4346 /* Send interrupt_sequence to remote target. */ 4347 4348 void 4349 remote_target::send_interrupt_sequence () 4350 { 4351 struct remote_state *rs = get_remote_state (); 4352 4353 if (interrupt_sequence_mode == interrupt_sequence_control_c) 4354 remote_serial_write ("\x03", 1); 4355 else if (interrupt_sequence_mode == interrupt_sequence_break) 4356 serial_send_break (rs->remote_desc); 4357 else if (interrupt_sequence_mode == interrupt_sequence_break_g) 4358 { 4359 serial_send_break (rs->remote_desc); 4360 remote_serial_write ("g", 1); 4361 } 4362 else 4363 internal_error (__FILE__, __LINE__, 4364 _("Invalid value for interrupt_sequence_mode: %s."), 4365 interrupt_sequence_mode); 4366 } 4367 4368 4369 /* If STOP_REPLY is a T stop reply, look for the "thread" register, 4370 and extract the PTID. Returns NULL_PTID if not found. */ 4371 4372 static ptid_t 4373 stop_reply_extract_thread (const char *stop_reply) 4374 { 4375 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3) 4376 { 4377 const char *p; 4378 4379 /* Txx r:val ; r:val (...) */ 4380 p = &stop_reply[3]; 4381 4382 /* Look for "register" named "thread". */ 4383 while (*p != '\0') 4384 { 4385 const char *p1; 4386 4387 p1 = strchr (p, ':'); 4388 if (p1 == NULL) 4389 return null_ptid; 4390 4391 if (strncmp (p, "thread", p1 - p) == 0) 4392 return read_ptid (++p1, &p); 4393 4394 p1 = strchr (p, ';'); 4395 if (p1 == NULL) 4396 return null_ptid; 4397 p1++; 4398 4399 p = p1; 4400 } 4401 } 4402 4403 return null_ptid; 4404 } 4405 4406 /* Determine the remote side's current thread. If we have a stop 4407 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a 4408 "thread" register we can extract the current thread from. If not, 4409 ask the remote which is the current thread with qC. The former 4410 method avoids a roundtrip. */ 4411 4412 ptid_t 4413 remote_target::get_current_thread (const char *wait_status) 4414 { 4415 ptid_t ptid = null_ptid; 4416 4417 /* Note we don't use remote_parse_stop_reply as that makes use of 4418 the target architecture, which we haven't yet fully determined at 4419 this point. */ 4420 if (wait_status != NULL) 4421 ptid = stop_reply_extract_thread (wait_status); 4422 if (ptid == null_ptid) 4423 ptid = remote_current_thread (inferior_ptid); 4424 4425 return ptid; 4426 } 4427 4428 /* Query the remote target for which is the current thread/process, 4429 add it to our tables, and update INFERIOR_PTID. The caller is 4430 responsible for setting the state such that the remote end is ready 4431 to return the current thread. 4432 4433 This function is called after handling the '?' or 'vRun' packets, 4434 whose response is a stop reply from which we can also try 4435 extracting the thread. If the target doesn't support the explicit 4436 qC query, we infer the current thread from that stop reply, passed 4437 in in WAIT_STATUS, which may be NULL. 4438 4439 The function returns pointer to the main thread of the inferior. */ 4440 4441 thread_info * 4442 remote_target::add_current_inferior_and_thread (const char *wait_status) 4443 { 4444 struct remote_state *rs = get_remote_state (); 4445 bool fake_pid_p = false; 4446 4447 switch_to_no_thread (); 4448 4449 /* Now, if we have thread information, update the current thread's 4450 ptid. */ 4451 ptid_t curr_ptid = get_current_thread (wait_status); 4452 4453 if (curr_ptid != null_ptid) 4454 { 4455 if (!remote_multi_process_p (rs)) 4456 fake_pid_p = true; 4457 } 4458 else 4459 { 4460 /* Without this, some commands which require an active target 4461 (such as kill) won't work. This variable serves (at least) 4462 double duty as both the pid of the target process (if it has 4463 such), and as a flag indicating that a target is active. */ 4464 curr_ptid = magic_null_ptid; 4465 fake_pid_p = true; 4466 } 4467 4468 remote_add_inferior (fake_pid_p, curr_ptid.pid (), -1, 1); 4469 4470 /* Add the main thread and switch to it. Don't try reading 4471 registers yet, since we haven't fetched the target description 4472 yet. */ 4473 thread_info *tp = add_thread_silent (this, curr_ptid); 4474 switch_to_thread_no_regs (tp); 4475 4476 return tp; 4477 } 4478 4479 /* Print info about a thread that was found already stopped on 4480 connection. */ 4481 4482 static void 4483 print_one_stopped_thread (struct thread_info *thread) 4484 { 4485 struct target_waitstatus *ws = &thread->suspend.waitstatus; 4486 4487 switch_to_thread (thread); 4488 thread->suspend.stop_pc = get_frame_pc (get_current_frame ()); 4489 set_current_sal_from_frame (get_current_frame ()); 4490 4491 thread->suspend.waitstatus_pending_p = 0; 4492 4493 if (ws->kind == TARGET_WAITKIND_STOPPED) 4494 { 4495 enum gdb_signal sig = ws->value.sig; 4496 4497 if (signal_print_state (sig)) 4498 gdb::observers::signal_received.notify (sig); 4499 } 4500 gdb::observers::normal_stop.notify (NULL, 1); 4501 } 4502 4503 /* Process all initial stop replies the remote side sent in response 4504 to the ? packet. These indicate threads that were already stopped 4505 on initial connection. We mark these threads as stopped and print 4506 their current frame before giving the user the prompt. */ 4507 4508 void 4509 remote_target::process_initial_stop_replies (int from_tty) 4510 { 4511 int pending_stop_replies = stop_reply_queue_length (); 4512 struct thread_info *selected = NULL; 4513 struct thread_info *lowest_stopped = NULL; 4514 struct thread_info *first = NULL; 4515 4516 /* Consume the initial pending events. */ 4517 while (pending_stop_replies-- > 0) 4518 { 4519 ptid_t waiton_ptid = minus_one_ptid; 4520 ptid_t event_ptid; 4521 struct target_waitstatus ws; 4522 int ignore_event = 0; 4523 4524 memset (&ws, 0, sizeof (ws)); 4525 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG); 4526 if (remote_debug) 4527 print_target_wait_results (waiton_ptid, event_ptid, &ws); 4528 4529 switch (ws.kind) 4530 { 4531 case TARGET_WAITKIND_IGNORE: 4532 case TARGET_WAITKIND_NO_RESUMED: 4533 case TARGET_WAITKIND_SIGNALLED: 4534 case TARGET_WAITKIND_EXITED: 4535 /* We shouldn't see these, but if we do, just ignore. */ 4536 remote_debug_printf ("event ignored"); 4537 ignore_event = 1; 4538 break; 4539 4540 case TARGET_WAITKIND_EXECD: 4541 xfree (ws.value.execd_pathname); 4542 break; 4543 default: 4544 break; 4545 } 4546 4547 if (ignore_event) 4548 continue; 4549 4550 thread_info *evthread = find_thread_ptid (this, event_ptid); 4551 4552 if (ws.kind == TARGET_WAITKIND_STOPPED) 4553 { 4554 enum gdb_signal sig = ws.value.sig; 4555 4556 /* Stubs traditionally report SIGTRAP as initial signal, 4557 instead of signal 0. Suppress it. */ 4558 if (sig == GDB_SIGNAL_TRAP) 4559 sig = GDB_SIGNAL_0; 4560 evthread->suspend.stop_signal = sig; 4561 ws.value.sig = sig; 4562 } 4563 4564 evthread->suspend.waitstatus = ws; 4565 4566 if (ws.kind != TARGET_WAITKIND_STOPPED 4567 || ws.value.sig != GDB_SIGNAL_0) 4568 evthread->suspend.waitstatus_pending_p = 1; 4569 4570 set_executing (this, event_ptid, false); 4571 set_running (this, event_ptid, false); 4572 get_remote_thread_info (evthread)->set_not_resumed (); 4573 } 4574 4575 /* "Notice" the new inferiors before anything related to 4576 registers/memory. */ 4577 for (inferior *inf : all_non_exited_inferiors (this)) 4578 { 4579 inf->needs_setup = 1; 4580 4581 if (non_stop) 4582 { 4583 thread_info *thread = any_live_thread_of_inferior (inf); 4584 notice_new_inferior (thread, thread->state == THREAD_RUNNING, 4585 from_tty); 4586 } 4587 } 4588 4589 /* If all-stop on top of non-stop, pause all threads. Note this 4590 records the threads' stop pc, so must be done after "noticing" 4591 the inferiors. */ 4592 if (!non_stop) 4593 { 4594 stop_all_threads (); 4595 4596 /* If all threads of an inferior were already stopped, we 4597 haven't setup the inferior yet. */ 4598 for (inferior *inf : all_non_exited_inferiors (this)) 4599 { 4600 if (inf->needs_setup) 4601 { 4602 thread_info *thread = any_live_thread_of_inferior (inf); 4603 switch_to_thread_no_regs (thread); 4604 setup_inferior (0); 4605 } 4606 } 4607 } 4608 4609 /* Now go over all threads that are stopped, and print their current 4610 frame. If all-stop, then if there's a signalled thread, pick 4611 that as current. */ 4612 for (thread_info *thread : all_non_exited_threads (this)) 4613 { 4614 if (first == NULL) 4615 first = thread; 4616 4617 if (!non_stop) 4618 thread->set_running (false); 4619 else if (thread->state != THREAD_STOPPED) 4620 continue; 4621 4622 if (selected == NULL 4623 && thread->suspend.waitstatus_pending_p) 4624 selected = thread; 4625 4626 if (lowest_stopped == NULL 4627 || thread->inf->num < lowest_stopped->inf->num 4628 || thread->per_inf_num < lowest_stopped->per_inf_num) 4629 lowest_stopped = thread; 4630 4631 if (non_stop) 4632 print_one_stopped_thread (thread); 4633 } 4634 4635 /* In all-stop, we only print the status of one thread, and leave 4636 others with their status pending. */ 4637 if (!non_stop) 4638 { 4639 thread_info *thread = selected; 4640 if (thread == NULL) 4641 thread = lowest_stopped; 4642 if (thread == NULL) 4643 thread = first; 4644 4645 print_one_stopped_thread (thread); 4646 } 4647 4648 /* For "info program". */ 4649 thread_info *thread = inferior_thread (); 4650 if (thread->state == THREAD_STOPPED) 4651 set_last_target_status (this, inferior_ptid, thread->suspend.waitstatus); 4652 } 4653 4654 /* Start the remote connection and sync state. */ 4655 4656 void 4657 remote_target::start_remote (int from_tty, int extended_p) 4658 { 4659 REMOTE_SCOPED_DEBUG_ENTER_EXIT; 4660 4661 struct remote_state *rs = get_remote_state (); 4662 struct packet_config *noack_config; 4663 4664 /* Signal other parts that we're going through the initial setup, 4665 and so things may not be stable yet. E.g., we don't try to 4666 install tracepoints until we've relocated symbols. Also, a 4667 Ctrl-C before we're connected and synced up can't interrupt the 4668 target. Instead, it offers to drop the (potentially wedged) 4669 connection. */ 4670 rs->starting_up = true; 4671 4672 QUIT; 4673 4674 if (interrupt_on_connect) 4675 send_interrupt_sequence (); 4676 4677 /* Ack any packet which the remote side has already sent. */ 4678 remote_serial_write ("+", 1); 4679 4680 /* The first packet we send to the target is the optional "supported 4681 packets" request. If the target can answer this, it will tell us 4682 which later probes to skip. */ 4683 remote_query_supported (); 4684 4685 /* If the stub wants to get a QAllow, compose one and send it. */ 4686 if (packet_support (PACKET_QAllow) != PACKET_DISABLE) 4687 set_permissions (); 4688 4689 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any 4690 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB 4691 as a reply to known packet. For packet "vFile:setfs:" it is an 4692 invalid reply and GDB would return error in 4693 remote_hostio_set_filesystem, making remote files access impossible. 4694 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as 4695 other "vFile" packets get correctly detected even on gdbserver < 7.7. */ 4696 { 4697 const char v_mustreplyempty[] = "vMustReplyEmpty"; 4698 4699 putpkt (v_mustreplyempty); 4700 getpkt (&rs->buf, 0); 4701 if (strcmp (rs->buf.data (), "OK") == 0) 4702 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE; 4703 else if (strcmp (rs->buf.data (), "") != 0) 4704 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty, 4705 rs->buf.data ()); 4706 } 4707 4708 /* Next, we possibly activate noack mode. 4709 4710 If the QStartNoAckMode packet configuration is set to AUTO, 4711 enable noack mode if the stub reported a wish for it with 4712 qSupported. 4713 4714 If set to TRUE, then enable noack mode even if the stub didn't 4715 report it in qSupported. If the stub doesn't reply OK, the 4716 session ends with an error. 4717 4718 If FALSE, then don't activate noack mode, regardless of what the 4719 stub claimed should be the default with qSupported. */ 4720 4721 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode]; 4722 if (packet_config_support (noack_config) != PACKET_DISABLE) 4723 { 4724 putpkt ("QStartNoAckMode"); 4725 getpkt (&rs->buf, 0); 4726 if (packet_ok (rs->buf, noack_config) == PACKET_OK) 4727 rs->noack_mode = 1; 4728 } 4729 4730 if (extended_p) 4731 { 4732 /* Tell the remote that we are using the extended protocol. */ 4733 putpkt ("!"); 4734 getpkt (&rs->buf, 0); 4735 } 4736 4737 /* Let the target know which signals it is allowed to pass down to 4738 the program. */ 4739 update_signals_program_target (); 4740 4741 /* Next, if the target can specify a description, read it. We do 4742 this before anything involving memory or registers. */ 4743 target_find_description (); 4744 4745 /* Next, now that we know something about the target, update the 4746 address spaces in the program spaces. */ 4747 update_address_spaces (); 4748 4749 /* On OSs where the list of libraries is global to all 4750 processes, we fetch them early. */ 4751 if (gdbarch_has_global_solist (target_gdbarch ())) 4752 solib_add (NULL, from_tty, auto_solib_add); 4753 4754 if (target_is_non_stop_p ()) 4755 { 4756 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE) 4757 error (_("Non-stop mode requested, but remote " 4758 "does not support non-stop")); 4759 4760 putpkt ("QNonStop:1"); 4761 getpkt (&rs->buf, 0); 4762 4763 if (strcmp (rs->buf.data (), "OK") != 0) 4764 error (_("Remote refused setting non-stop mode with: %s"), 4765 rs->buf.data ()); 4766 4767 /* Find about threads and processes the stub is already 4768 controlling. We default to adding them in the running state. 4769 The '?' query below will then tell us about which threads are 4770 stopped. */ 4771 this->update_thread_list (); 4772 } 4773 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE) 4774 { 4775 /* Don't assume that the stub can operate in all-stop mode. 4776 Request it explicitly. */ 4777 putpkt ("QNonStop:0"); 4778 getpkt (&rs->buf, 0); 4779 4780 if (strcmp (rs->buf.data (), "OK") != 0) 4781 error (_("Remote refused setting all-stop mode with: %s"), 4782 rs->buf.data ()); 4783 } 4784 4785 /* Upload TSVs regardless of whether the target is running or not. The 4786 remote stub, such as GDBserver, may have some predefined or builtin 4787 TSVs, even if the target is not running. */ 4788 if (get_trace_status (current_trace_status ()) != -1) 4789 { 4790 struct uploaded_tsv *uploaded_tsvs = NULL; 4791 4792 upload_trace_state_variables (&uploaded_tsvs); 4793 merge_uploaded_trace_state_variables (&uploaded_tsvs); 4794 } 4795 4796 /* Check whether the target is running now. */ 4797 putpkt ("?"); 4798 getpkt (&rs->buf, 0); 4799 4800 if (!target_is_non_stop_p ()) 4801 { 4802 char *wait_status = NULL; 4803 4804 if (rs->buf[0] == 'W' || rs->buf[0] == 'X') 4805 { 4806 if (!extended_p) 4807 error (_("The target is not running (try extended-remote?)")); 4808 4809 /* We're connected, but not running. Drop out before we 4810 call start_remote. */ 4811 rs->starting_up = false; 4812 return; 4813 } 4814 else 4815 { 4816 /* Save the reply for later. */ 4817 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1); 4818 strcpy (wait_status, rs->buf.data ()); 4819 } 4820 4821 /* Fetch thread list. */ 4822 target_update_thread_list (); 4823 4824 /* Let the stub know that we want it to return the thread. */ 4825 set_continue_thread (minus_one_ptid); 4826 4827 if (thread_count (this) == 0) 4828 { 4829 /* Target has no concept of threads at all. GDB treats 4830 non-threaded target as single-threaded; add a main 4831 thread. */ 4832 thread_info *tp = add_current_inferior_and_thread (wait_status); 4833 get_remote_thread_info (tp)->set_resumed (); 4834 } 4835 else 4836 { 4837 /* We have thread information; select the thread the target 4838 says should be current. If we're reconnecting to a 4839 multi-threaded program, this will ideally be the thread 4840 that last reported an event before GDB disconnected. */ 4841 ptid_t curr_thread = get_current_thread (wait_status); 4842 if (curr_thread == null_ptid) 4843 { 4844 /* Odd... The target was able to list threads, but not 4845 tell us which thread was current (no "thread" 4846 register in T stop reply?). Just pick the first 4847 thread in the thread list then. */ 4848 4849 remote_debug_printf ("warning: couldn't determine remote " 4850 "current thread; picking first in list."); 4851 4852 for (thread_info *tp : all_non_exited_threads (this, 4853 minus_one_ptid)) 4854 { 4855 switch_to_thread (tp); 4856 break; 4857 } 4858 } 4859 else 4860 switch_to_thread (find_thread_ptid (this, curr_thread)); 4861 } 4862 4863 /* init_wait_for_inferior should be called before get_offsets in order 4864 to manage `inserted' flag in bp loc in a correct state. 4865 breakpoint_init_inferior, called from init_wait_for_inferior, set 4866 `inserted' flag to 0, while before breakpoint_re_set, called from 4867 start_remote, set `inserted' flag to 1. In the initialization of 4868 inferior, breakpoint_init_inferior should be called first, and then 4869 breakpoint_re_set can be called. If this order is broken, state of 4870 `inserted' flag is wrong, and cause some problems on breakpoint 4871 manipulation. */ 4872 init_wait_for_inferior (); 4873 4874 get_offsets (); /* Get text, data & bss offsets. */ 4875 4876 /* If we could not find a description using qXfer, and we know 4877 how to do it some other way, try again. This is not 4878 supported for non-stop; it could be, but it is tricky if 4879 there are no stopped threads when we connect. */ 4880 if (remote_read_description_p (this) 4881 && gdbarch_target_desc (target_gdbarch ()) == NULL) 4882 { 4883 target_clear_description (); 4884 target_find_description (); 4885 } 4886 4887 /* Use the previously fetched status. */ 4888 gdb_assert (wait_status != NULL); 4889 strcpy (rs->buf.data (), wait_status); 4890 rs->cached_wait_status = 1; 4891 4892 ::start_remote (from_tty); /* Initialize gdb process mechanisms. */ 4893 } 4894 else 4895 { 4896 /* Clear WFI global state. Do this before finding about new 4897 threads and inferiors, and setting the current inferior. 4898 Otherwise we would clear the proceed status of the current 4899 inferior when we want its stop_soon state to be preserved 4900 (see notice_new_inferior). */ 4901 init_wait_for_inferior (); 4902 4903 /* In non-stop, we will either get an "OK", meaning that there 4904 are no stopped threads at this time; or, a regular stop 4905 reply. In the latter case, there may be more than one thread 4906 stopped --- we pull them all out using the vStopped 4907 mechanism. */ 4908 if (strcmp (rs->buf.data (), "OK") != 0) 4909 { 4910 struct notif_client *notif = ¬if_client_stop; 4911 4912 /* remote_notif_get_pending_replies acks this one, and gets 4913 the rest out. */ 4914 rs->notif_state->pending_event[notif_client_stop.id] 4915 = remote_notif_parse (this, notif, rs->buf.data ()); 4916 remote_notif_get_pending_events (notif); 4917 } 4918 4919 if (thread_count (this) == 0) 4920 { 4921 if (!extended_p) 4922 error (_("The target is not running (try extended-remote?)")); 4923 4924 /* We're connected, but not running. Drop out before we 4925 call start_remote. */ 4926 rs->starting_up = false; 4927 return; 4928 } 4929 4930 /* Report all signals during attach/startup. */ 4931 pass_signals ({}); 4932 4933 /* If there are already stopped threads, mark them stopped and 4934 report their stops before giving the prompt to the user. */ 4935 process_initial_stop_replies (from_tty); 4936 4937 if (target_can_async_p ()) 4938 target_async (1); 4939 } 4940 4941 /* If we connected to a live target, do some additional setup. */ 4942 if (target_has_execution ()) 4943 { 4944 /* No use without a symbol-file. */ 4945 if (current_program_space->symfile_object_file) 4946 remote_check_symbols (); 4947 } 4948 4949 /* Possibly the target has been engaged in a trace run started 4950 previously; find out where things are at. */ 4951 if (get_trace_status (current_trace_status ()) != -1) 4952 { 4953 struct uploaded_tp *uploaded_tps = NULL; 4954 4955 if (current_trace_status ()->running) 4956 printf_filtered (_("Trace is already running on the target.\n")); 4957 4958 upload_tracepoints (&uploaded_tps); 4959 4960 merge_uploaded_tracepoints (&uploaded_tps); 4961 } 4962 4963 /* Possibly the target has been engaged in a btrace record started 4964 previously; find out where things are at. */ 4965 remote_btrace_maybe_reopen (); 4966 4967 /* The thread and inferior lists are now synchronized with the 4968 target, our symbols have been relocated, and we're merged the 4969 target's tracepoints with ours. We're done with basic start 4970 up. */ 4971 rs->starting_up = false; 4972 4973 /* Maybe breakpoints are global and need to be inserted now. */ 4974 if (breakpoints_should_be_inserted_now ()) 4975 insert_breakpoints (); 4976 } 4977 4978 const char * 4979 remote_target::connection_string () 4980 { 4981 remote_state *rs = get_remote_state (); 4982 4983 if (rs->remote_desc->name != NULL) 4984 return rs->remote_desc->name; 4985 else 4986 return NULL; 4987 } 4988 4989 /* Open a connection to a remote debugger. 4990 NAME is the filename used for communication. */ 4991 4992 void 4993 remote_target::open (const char *name, int from_tty) 4994 { 4995 open_1 (name, from_tty, 0); 4996 } 4997 4998 /* Open a connection to a remote debugger using the extended 4999 remote gdb protocol. NAME is the filename used for communication. */ 5000 5001 void 5002 extended_remote_target::open (const char *name, int from_tty) 5003 { 5004 open_1 (name, from_tty, 1 /*extended_p */); 5005 } 5006 5007 /* Reset all packets back to "unknown support". Called when opening a 5008 new connection to a remote target. */ 5009 5010 static void 5011 reset_all_packet_configs_support (void) 5012 { 5013 int i; 5014 5015 for (i = 0; i < PACKET_MAX; i++) 5016 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN; 5017 } 5018 5019 /* Initialize all packet configs. */ 5020 5021 static void 5022 init_all_packet_configs (void) 5023 { 5024 int i; 5025 5026 for (i = 0; i < PACKET_MAX; i++) 5027 { 5028 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO; 5029 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN; 5030 } 5031 } 5032 5033 /* Symbol look-up. */ 5034 5035 void 5036 remote_target::remote_check_symbols () 5037 { 5038 char *tmp; 5039 int end; 5040 5041 /* The remote side has no concept of inferiors that aren't running 5042 yet, it only knows about running processes. If we're connected 5043 but our current inferior is not running, we should not invite the 5044 remote target to request symbol lookups related to its 5045 (unrelated) current process. */ 5046 if (!target_has_execution ()) 5047 return; 5048 5049 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE) 5050 return; 5051 5052 /* Make sure the remote is pointing at the right process. Note 5053 there's no way to select "no process". */ 5054 set_general_process (); 5055 5056 /* Allocate a message buffer. We can't reuse the input buffer in RS, 5057 because we need both at the same time. */ 5058 gdb::char_vector msg (get_remote_packet_size ()); 5059 gdb::char_vector reply (get_remote_packet_size ()); 5060 5061 /* Invite target to request symbol lookups. */ 5062 5063 putpkt ("qSymbol::"); 5064 getpkt (&reply, 0); 5065 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]); 5066 5067 while (startswith (reply.data (), "qSymbol:")) 5068 { 5069 struct bound_minimal_symbol sym; 5070 5071 tmp = &reply[8]; 5072 end = hex2bin (tmp, reinterpret_cast <gdb_byte *> (msg.data ()), 5073 strlen (tmp) / 2); 5074 msg[end] = '\0'; 5075 sym = lookup_minimal_symbol (msg.data (), NULL, NULL); 5076 if (sym.minsym == NULL) 5077 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol::%s", 5078 &reply[8]); 5079 else 5080 { 5081 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; 5082 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym); 5083 5084 /* If this is a function address, return the start of code 5085 instead of any data function descriptor. */ 5086 sym_addr = gdbarch_convert_from_func_ptr_addr 5087 (target_gdbarch (), sym_addr, current_inferior ()->top_target ()); 5088 5089 xsnprintf (msg.data (), get_remote_packet_size (), "qSymbol:%s:%s", 5090 phex_nz (sym_addr, addr_size), &reply[8]); 5091 } 5092 5093 putpkt (msg.data ()); 5094 getpkt (&reply, 0); 5095 } 5096 } 5097 5098 static struct serial * 5099 remote_serial_open (const char *name) 5100 { 5101 static int udp_warning = 0; 5102 5103 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead 5104 of in ser-tcp.c, because it is the remote protocol assuming that the 5105 serial connection is reliable and not the serial connection promising 5106 to be. */ 5107 if (!udp_warning && startswith (name, "udp:")) 5108 { 5109 warning (_("The remote protocol may be unreliable over UDP.\n" 5110 "Some events may be lost, rendering further debugging " 5111 "impossible.")); 5112 udp_warning = 1; 5113 } 5114 5115 return serial_open (name); 5116 } 5117 5118 /* Inform the target of our permission settings. The permission flags 5119 work without this, but if the target knows the settings, it can do 5120 a couple things. First, it can add its own check, to catch cases 5121 that somehow manage to get by the permissions checks in target 5122 methods. Second, if the target is wired to disallow particular 5123 settings (for instance, a system in the field that is not set up to 5124 be able to stop at a breakpoint), it can object to any unavailable 5125 permissions. */ 5126 5127 void 5128 remote_target::set_permissions () 5129 { 5130 struct remote_state *rs = get_remote_state (); 5131 5132 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAllow:" 5133 "WriteReg:%x;WriteMem:%x;" 5134 "InsertBreak:%x;InsertTrace:%x;" 5135 "InsertFastTrace:%x;Stop:%x", 5136 may_write_registers, may_write_memory, 5137 may_insert_breakpoints, may_insert_tracepoints, 5138 may_insert_fast_tracepoints, may_stop); 5139 putpkt (rs->buf); 5140 getpkt (&rs->buf, 0); 5141 5142 /* If the target didn't like the packet, warn the user. Do not try 5143 to undo the user's settings, that would just be maddening. */ 5144 if (strcmp (rs->buf.data (), "OK") != 0) 5145 warning (_("Remote refused setting permissions with: %s"), 5146 rs->buf.data ()); 5147 } 5148 5149 /* This type describes each known response to the qSupported 5150 packet. */ 5151 struct protocol_feature 5152 { 5153 /* The name of this protocol feature. */ 5154 const char *name; 5155 5156 /* The default for this protocol feature. */ 5157 enum packet_support default_support; 5158 5159 /* The function to call when this feature is reported, or after 5160 qSupported processing if the feature is not supported. 5161 The first argument points to this structure. The second 5162 argument indicates whether the packet requested support be 5163 enabled, disabled, or probed (or the default, if this function 5164 is being called at the end of processing and this feature was 5165 not reported). The third argument may be NULL; if not NULL, it 5166 is a NUL-terminated string taken from the packet following 5167 this feature's name and an equals sign. */ 5168 void (*func) (remote_target *remote, const struct protocol_feature *, 5169 enum packet_support, const char *); 5170 5171 /* The corresponding packet for this feature. Only used if 5172 FUNC is remote_supported_packet. */ 5173 int packet; 5174 }; 5175 5176 static void 5177 remote_supported_packet (remote_target *remote, 5178 const struct protocol_feature *feature, 5179 enum packet_support support, 5180 const char *argument) 5181 { 5182 if (argument) 5183 { 5184 warning (_("Remote qSupported response supplied an unexpected value for" 5185 " \"%s\"."), feature->name); 5186 return; 5187 } 5188 5189 remote_protocol_packets[feature->packet].support = support; 5190 } 5191 5192 void 5193 remote_target::remote_packet_size (const protocol_feature *feature, 5194 enum packet_support support, const char *value) 5195 { 5196 struct remote_state *rs = get_remote_state (); 5197 5198 int packet_size; 5199 char *value_end; 5200 5201 if (support != PACKET_ENABLE) 5202 return; 5203 5204 if (value == NULL || *value == '\0') 5205 { 5206 warning (_("Remote target reported \"%s\" without a size."), 5207 feature->name); 5208 return; 5209 } 5210 5211 errno = 0; 5212 packet_size = strtol (value, &value_end, 16); 5213 if (errno != 0 || *value_end != '\0' || packet_size < 0) 5214 { 5215 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."), 5216 feature->name, value); 5217 return; 5218 } 5219 5220 /* Record the new maximum packet size. */ 5221 rs->explicit_packet_size = packet_size; 5222 } 5223 5224 static void 5225 remote_packet_size (remote_target *remote, const protocol_feature *feature, 5226 enum packet_support support, const char *value) 5227 { 5228 remote->remote_packet_size (feature, support, value); 5229 } 5230 5231 static const struct protocol_feature remote_protocol_features[] = { 5232 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 }, 5233 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet, 5234 PACKET_qXfer_auxv }, 5235 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet, 5236 PACKET_qXfer_exec_file }, 5237 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet, 5238 PACKET_qXfer_features }, 5239 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet, 5240 PACKET_qXfer_libraries }, 5241 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet, 5242 PACKET_qXfer_libraries_svr4 }, 5243 { "augmented-libraries-svr4-read", PACKET_DISABLE, 5244 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature }, 5245 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet, 5246 PACKET_qXfer_memory_map }, 5247 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet, 5248 PACKET_qXfer_osdata }, 5249 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet, 5250 PACKET_qXfer_threads }, 5251 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet, 5252 PACKET_qXfer_traceframe_info }, 5253 { "QPassSignals", PACKET_DISABLE, remote_supported_packet, 5254 PACKET_QPassSignals }, 5255 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet, 5256 PACKET_QCatchSyscalls }, 5257 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet, 5258 PACKET_QProgramSignals }, 5259 { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet, 5260 PACKET_QSetWorkingDir }, 5261 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet, 5262 PACKET_QStartupWithShell }, 5263 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet, 5264 PACKET_QEnvironmentHexEncoded }, 5265 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet, 5266 PACKET_QEnvironmentReset }, 5267 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet, 5268 PACKET_QEnvironmentUnset }, 5269 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet, 5270 PACKET_QStartNoAckMode }, 5271 { "multiprocess", PACKET_DISABLE, remote_supported_packet, 5272 PACKET_multiprocess_feature }, 5273 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop }, 5274 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet, 5275 PACKET_qXfer_siginfo_read }, 5276 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet, 5277 PACKET_qXfer_siginfo_write }, 5278 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet, 5279 PACKET_ConditionalTracepoints }, 5280 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet, 5281 PACKET_ConditionalBreakpoints }, 5282 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet, 5283 PACKET_BreakpointCommands }, 5284 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet, 5285 PACKET_FastTracepoints }, 5286 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet, 5287 PACKET_StaticTracepoints }, 5288 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet, 5289 PACKET_InstallInTrace}, 5290 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet, 5291 PACKET_DisconnectedTracing_feature }, 5292 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet, 5293 PACKET_bc }, 5294 { "ReverseStep", PACKET_DISABLE, remote_supported_packet, 5295 PACKET_bs }, 5296 { "TracepointSource", PACKET_DISABLE, remote_supported_packet, 5297 PACKET_TracepointSource }, 5298 { "QAllow", PACKET_DISABLE, remote_supported_packet, 5299 PACKET_QAllow }, 5300 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet, 5301 PACKET_EnableDisableTracepoints_feature }, 5302 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet, 5303 PACKET_qXfer_fdpic }, 5304 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet, 5305 PACKET_qXfer_uib }, 5306 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet, 5307 PACKET_QDisableRandomization }, 5308 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent}, 5309 { "QTBuffer:size", PACKET_DISABLE, 5310 remote_supported_packet, PACKET_QTBuffer_size}, 5311 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature }, 5312 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off }, 5313 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts }, 5314 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt }, 5315 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet, 5316 PACKET_qXfer_btrace }, 5317 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet, 5318 PACKET_qXfer_btrace_conf }, 5319 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet, 5320 PACKET_Qbtrace_conf_bts_size }, 5321 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature }, 5322 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature }, 5323 { "fork-events", PACKET_DISABLE, remote_supported_packet, 5324 PACKET_fork_event_feature }, 5325 { "vfork-events", PACKET_DISABLE, remote_supported_packet, 5326 PACKET_vfork_event_feature }, 5327 { "exec-events", PACKET_DISABLE, remote_supported_packet, 5328 PACKET_exec_event_feature }, 5329 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet, 5330 PACKET_Qbtrace_conf_pt_size }, 5331 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported }, 5332 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents }, 5333 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed }, 5334 { "memory-tagging", PACKET_DISABLE, remote_supported_packet, 5335 PACKET_memory_tagging_feature }, 5336 }; 5337 5338 static char *remote_support_xml; 5339 5340 /* Register string appended to "xmlRegisters=" in qSupported query. */ 5341 5342 void 5343 register_remote_support_xml (const char *xml) 5344 { 5345 #if defined(HAVE_LIBEXPAT) 5346 if (remote_support_xml == NULL) 5347 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL); 5348 else 5349 { 5350 char *copy = xstrdup (remote_support_xml + 13); 5351 char *saveptr; 5352 char *p = strtok_r (copy, ",", &saveptr); 5353 5354 do 5355 { 5356 if (strcmp (p, xml) == 0) 5357 { 5358 /* already there */ 5359 xfree (copy); 5360 return; 5361 } 5362 } 5363 while ((p = strtok_r (NULL, ",", &saveptr)) != NULL); 5364 xfree (copy); 5365 5366 remote_support_xml = reconcat (remote_support_xml, 5367 remote_support_xml, ",", xml, 5368 (char *) NULL); 5369 } 5370 #endif 5371 } 5372 5373 static void 5374 remote_query_supported_append (std::string *msg, const char *append) 5375 { 5376 if (!msg->empty ()) 5377 msg->append (";"); 5378 msg->append (append); 5379 } 5380 5381 void 5382 remote_target::remote_query_supported () 5383 { 5384 struct remote_state *rs = get_remote_state (); 5385 char *next; 5386 int i; 5387 unsigned char seen [ARRAY_SIZE (remote_protocol_features)]; 5388 5389 /* The packet support flags are handled differently for this packet 5390 than for most others. We treat an error, a disabled packet, and 5391 an empty response identically: any features which must be reported 5392 to be used will be automatically disabled. An empty buffer 5393 accomplishes this, since that is also the representation for a list 5394 containing no features. */ 5395 5396 rs->buf[0] = 0; 5397 if (packet_support (PACKET_qSupported) != PACKET_DISABLE) 5398 { 5399 std::string q; 5400 5401 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE) 5402 remote_query_supported_append (&q, "multiprocess+"); 5403 5404 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE) 5405 remote_query_supported_append (&q, "swbreak+"); 5406 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE) 5407 remote_query_supported_append (&q, "hwbreak+"); 5408 5409 remote_query_supported_append (&q, "qRelocInsn+"); 5410 5411 if (packet_set_cmd_state (PACKET_fork_event_feature) 5412 != AUTO_BOOLEAN_FALSE) 5413 remote_query_supported_append (&q, "fork-events+"); 5414 if (packet_set_cmd_state (PACKET_vfork_event_feature) 5415 != AUTO_BOOLEAN_FALSE) 5416 remote_query_supported_append (&q, "vfork-events+"); 5417 if (packet_set_cmd_state (PACKET_exec_event_feature) 5418 != AUTO_BOOLEAN_FALSE) 5419 remote_query_supported_append (&q, "exec-events+"); 5420 5421 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE) 5422 remote_query_supported_append (&q, "vContSupported+"); 5423 5424 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE) 5425 remote_query_supported_append (&q, "QThreadEvents+"); 5426 5427 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE) 5428 remote_query_supported_append (&q, "no-resumed+"); 5429 5430 if (packet_set_cmd_state (PACKET_memory_tagging_feature) 5431 != AUTO_BOOLEAN_FALSE) 5432 remote_query_supported_append (&q, "memory-tagging+"); 5433 5434 /* Keep this one last to work around a gdbserver <= 7.10 bug in 5435 the qSupported:xmlRegisters=i386 handling. */ 5436 if (remote_support_xml != NULL 5437 && packet_support (PACKET_qXfer_features) != PACKET_DISABLE) 5438 remote_query_supported_append (&q, remote_support_xml); 5439 5440 q = "qSupported:" + q; 5441 putpkt (q.c_str ()); 5442 5443 getpkt (&rs->buf, 0); 5444 5445 /* If an error occured, warn, but do not return - just reset the 5446 buffer to empty and go on to disable features. */ 5447 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported]) 5448 == PACKET_ERROR) 5449 { 5450 warning (_("Remote failure reply: %s"), rs->buf.data ()); 5451 rs->buf[0] = 0; 5452 } 5453 } 5454 5455 memset (seen, 0, sizeof (seen)); 5456 5457 next = rs->buf.data (); 5458 while (*next) 5459 { 5460 enum packet_support is_supported; 5461 char *p, *end, *name_end, *value; 5462 5463 /* First separate out this item from the rest of the packet. If 5464 there's another item after this, we overwrite the separator 5465 (terminated strings are much easier to work with). */ 5466 p = next; 5467 end = strchr (p, ';'); 5468 if (end == NULL) 5469 { 5470 end = p + strlen (p); 5471 next = end; 5472 } 5473 else 5474 { 5475 *end = '\0'; 5476 next = end + 1; 5477 5478 if (end == p) 5479 { 5480 warning (_("empty item in \"qSupported\" response")); 5481 continue; 5482 } 5483 } 5484 5485 name_end = strchr (p, '='); 5486 if (name_end) 5487 { 5488 /* This is a name=value entry. */ 5489 is_supported = PACKET_ENABLE; 5490 value = name_end + 1; 5491 *name_end = '\0'; 5492 } 5493 else 5494 { 5495 value = NULL; 5496 switch (end[-1]) 5497 { 5498 case '+': 5499 is_supported = PACKET_ENABLE; 5500 break; 5501 5502 case '-': 5503 is_supported = PACKET_DISABLE; 5504 break; 5505 5506 case '?': 5507 is_supported = PACKET_SUPPORT_UNKNOWN; 5508 break; 5509 5510 default: 5511 warning (_("unrecognized item \"%s\" " 5512 "in \"qSupported\" response"), p); 5513 continue; 5514 } 5515 end[-1] = '\0'; 5516 } 5517 5518 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++) 5519 if (strcmp (remote_protocol_features[i].name, p) == 0) 5520 { 5521 const struct protocol_feature *feature; 5522 5523 seen[i] = 1; 5524 feature = &remote_protocol_features[i]; 5525 feature->func (this, feature, is_supported, value); 5526 break; 5527 } 5528 } 5529 5530 /* If we increased the packet size, make sure to increase the global 5531 buffer size also. We delay this until after parsing the entire 5532 qSupported packet, because this is the same buffer we were 5533 parsing. */ 5534 if (rs->buf.size () < rs->explicit_packet_size) 5535 rs->buf.resize (rs->explicit_packet_size); 5536 5537 /* Handle the defaults for unmentioned features. */ 5538 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++) 5539 if (!seen[i]) 5540 { 5541 const struct protocol_feature *feature; 5542 5543 feature = &remote_protocol_features[i]; 5544 feature->func (this, feature, feature->default_support, NULL); 5545 } 5546 } 5547 5548 /* Serial QUIT handler for the remote serial descriptor. 5549 5550 Defers handling a Ctrl-C until we're done with the current 5551 command/response packet sequence, unless: 5552 5553 - We're setting up the connection. Don't send a remote interrupt 5554 request, as we're not fully synced yet. Quit immediately 5555 instead. 5556 5557 - The target has been resumed in the foreground 5558 (target_terminal::is_ours is false) with a synchronous resume 5559 packet, and we're blocked waiting for the stop reply, thus a 5560 Ctrl-C should be immediately sent to the target. 5561 5562 - We get a second Ctrl-C while still within the same serial read or 5563 write. In that case the serial is seemingly wedged --- offer to 5564 quit/disconnect. 5565 5566 - We see a second Ctrl-C without target response, after having 5567 previously interrupted the target. In that case the target/stub 5568 is probably wedged --- offer to quit/disconnect. 5569 */ 5570 5571 void 5572 remote_target::remote_serial_quit_handler () 5573 { 5574 struct remote_state *rs = get_remote_state (); 5575 5576 if (check_quit_flag ()) 5577 { 5578 /* If we're starting up, we're not fully synced yet. Quit 5579 immediately. */ 5580 if (rs->starting_up) 5581 quit (); 5582 else if (rs->got_ctrlc_during_io) 5583 { 5584 if (query (_("The target is not responding to GDB commands.\n" 5585 "Stop debugging it? "))) 5586 remote_unpush_and_throw (this); 5587 } 5588 /* If ^C has already been sent once, offer to disconnect. */ 5589 else if (!target_terminal::is_ours () && rs->ctrlc_pending_p) 5590 interrupt_query (); 5591 /* All-stop protocol, and blocked waiting for stop reply. Send 5592 an interrupt request. */ 5593 else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply) 5594 target_interrupt (); 5595 else 5596 rs->got_ctrlc_during_io = 1; 5597 } 5598 } 5599 5600 /* The remote_target that is current while the quit handler is 5601 overridden with remote_serial_quit_handler. */ 5602 static remote_target *curr_quit_handler_target; 5603 5604 static void 5605 remote_serial_quit_handler () 5606 { 5607 curr_quit_handler_target->remote_serial_quit_handler (); 5608 } 5609 5610 /* Remove the remote target from the target stack of each inferior 5611 that is using it. Upper targets depend on it so remove them 5612 first. */ 5613 5614 static void 5615 remote_unpush_target (remote_target *target) 5616 { 5617 /* We have to unpush the target from all inferiors, even those that 5618 aren't running. */ 5619 scoped_restore_current_inferior restore_current_inferior; 5620 5621 for (inferior *inf : all_inferiors (target)) 5622 { 5623 switch_to_inferior_no_thread (inf); 5624 pop_all_targets_at_and_above (process_stratum); 5625 generic_mourn_inferior (); 5626 } 5627 5628 /* Don't rely on target_close doing this when the target is popped 5629 from the last remote inferior above, because something may be 5630 holding a reference to the target higher up on the stack, meaning 5631 target_close won't be called yet. We lost the connection to the 5632 target, so clear these now, otherwise we may later throw 5633 TARGET_CLOSE_ERROR while trying to tell the remote target to 5634 close the file. */ 5635 fileio_handles_invalidate_target (target); 5636 } 5637 5638 static void 5639 remote_unpush_and_throw (remote_target *target) 5640 { 5641 remote_unpush_target (target); 5642 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target.")); 5643 } 5644 5645 void 5646 remote_target::open_1 (const char *name, int from_tty, int extended_p) 5647 { 5648 remote_target *curr_remote = get_current_remote_target (); 5649 5650 if (name == 0) 5651 error (_("To open a remote debug connection, you need to specify what\n" 5652 "serial device is attached to the remote system\n" 5653 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).")); 5654 5655 /* If we're connected to a running target, target_preopen will kill it. 5656 Ask this question first, before target_preopen has a chance to kill 5657 anything. */ 5658 if (curr_remote != NULL && !target_has_execution ()) 5659 { 5660 if (from_tty 5661 && !query (_("Already connected to a remote target. Disconnect? "))) 5662 error (_("Still connected.")); 5663 } 5664 5665 /* Here the possibly existing remote target gets unpushed. */ 5666 target_preopen (from_tty); 5667 5668 remote_fileio_reset (); 5669 reopen_exec_file (); 5670 reread_symbols (); 5671 5672 remote_target *remote 5673 = (extended_p ? new extended_remote_target () : new remote_target ()); 5674 target_ops_up target_holder (remote); 5675 5676 remote_state *rs = remote->get_remote_state (); 5677 5678 /* See FIXME above. */ 5679 if (!target_async_permitted) 5680 rs->wait_forever_enabled_p = 1; 5681 5682 rs->remote_desc = remote_serial_open (name); 5683 if (!rs->remote_desc) 5684 perror_with_name (name); 5685 5686 if (baud_rate != -1) 5687 { 5688 if (serial_setbaudrate (rs->remote_desc, baud_rate)) 5689 { 5690 /* The requested speed could not be set. Error out to 5691 top level after closing remote_desc. Take care to 5692 set remote_desc to NULL to avoid closing remote_desc 5693 more than once. */ 5694 serial_close (rs->remote_desc); 5695 rs->remote_desc = NULL; 5696 perror_with_name (name); 5697 } 5698 } 5699 5700 serial_setparity (rs->remote_desc, serial_parity); 5701 serial_raw (rs->remote_desc); 5702 5703 /* If there is something sitting in the buffer we might take it as a 5704 response to a command, which would be bad. */ 5705 serial_flush_input (rs->remote_desc); 5706 5707 if (from_tty) 5708 { 5709 puts_filtered ("Remote debugging using "); 5710 puts_filtered (name); 5711 puts_filtered ("\n"); 5712 } 5713 5714 /* Switch to using the remote target now. */ 5715 current_inferior ()->push_target (std::move (target_holder)); 5716 5717 /* Register extra event sources in the event loop. */ 5718 rs->remote_async_inferior_event_token 5719 = create_async_event_handler (remote_async_inferior_event_handler, nullptr, 5720 "remote"); 5721 rs->notif_state = remote_notif_state_allocate (remote); 5722 5723 /* Reset the target state; these things will be queried either by 5724 remote_query_supported or as they are needed. */ 5725 reset_all_packet_configs_support (); 5726 rs->cached_wait_status = 0; 5727 rs->explicit_packet_size = 0; 5728 rs->noack_mode = 0; 5729 rs->extended = extended_p; 5730 rs->waiting_for_stop_reply = 0; 5731 rs->ctrlc_pending_p = 0; 5732 rs->got_ctrlc_during_io = 0; 5733 5734 rs->general_thread = not_sent_ptid; 5735 rs->continue_thread = not_sent_ptid; 5736 rs->remote_traceframe_number = -1; 5737 5738 rs->last_resume_exec_dir = EXEC_FORWARD; 5739 5740 /* Probe for ability to use "ThreadInfo" query, as required. */ 5741 rs->use_threadinfo_query = 1; 5742 rs->use_threadextra_query = 1; 5743 5744 rs->readahead_cache.invalidate (); 5745 5746 if (target_async_permitted) 5747 { 5748 /* FIXME: cagney/1999-09-23: During the initial connection it is 5749 assumed that the target is already ready and able to respond to 5750 requests. Unfortunately remote_start_remote() eventually calls 5751 wait_for_inferior() with no timeout. wait_forever_enabled_p gets 5752 around this. Eventually a mechanism that allows 5753 wait_for_inferior() to expect/get timeouts will be 5754 implemented. */ 5755 rs->wait_forever_enabled_p = 0; 5756 } 5757 5758 /* First delete any symbols previously loaded from shared libraries. */ 5759 no_shared_libraries (NULL, 0); 5760 5761 /* Start the remote connection. If error() or QUIT, discard this 5762 target (we'd otherwise be in an inconsistent state) and then 5763 propogate the error on up the exception chain. This ensures that 5764 the caller doesn't stumble along blindly assuming that the 5765 function succeeded. The CLI doesn't have this problem but other 5766 UI's, such as MI do. 5767 5768 FIXME: cagney/2002-05-19: Instead of re-throwing the exception, 5769 this function should return an error indication letting the 5770 caller restore the previous state. Unfortunately the command 5771 ``target remote'' is directly wired to this function making that 5772 impossible. On a positive note, the CLI side of this problem has 5773 been fixed - the function set_cmd_context() makes it possible for 5774 all the ``target ....'' commands to share a common callback 5775 function. See cli-dump.c. */ 5776 { 5777 5778 try 5779 { 5780 remote->start_remote (from_tty, extended_p); 5781 } 5782 catch (const gdb_exception &ex) 5783 { 5784 /* Pop the partially set up target - unless something else did 5785 already before throwing the exception. */ 5786 if (ex.error != TARGET_CLOSE_ERROR) 5787 remote_unpush_target (remote); 5788 throw; 5789 } 5790 } 5791 5792 remote_btrace_reset (rs); 5793 5794 if (target_async_permitted) 5795 rs->wait_forever_enabled_p = 1; 5796 } 5797 5798 /* Detach the specified process. */ 5799 5800 void 5801 remote_target::remote_detach_pid (int pid) 5802 { 5803 struct remote_state *rs = get_remote_state (); 5804 5805 /* This should not be necessary, but the handling for D;PID in 5806 GDBserver versions prior to 8.2 incorrectly assumes that the 5807 selected process points to the same process we're detaching, 5808 leading to misbehavior (and possibly GDBserver crashing) when it 5809 does not. Since it's easy and cheap, work around it by forcing 5810 GDBserver to select GDB's current process. */ 5811 set_general_process (); 5812 5813 if (remote_multi_process_p (rs)) 5814 xsnprintf (rs->buf.data (), get_remote_packet_size (), "D;%x", pid); 5815 else 5816 strcpy (rs->buf.data (), "D"); 5817 5818 putpkt (rs->buf); 5819 getpkt (&rs->buf, 0); 5820 5821 if (rs->buf[0] == 'O' && rs->buf[1] == 'K') 5822 ; 5823 else if (rs->buf[0] == '\0') 5824 error (_("Remote doesn't know how to detach")); 5825 else 5826 error (_("Can't detach process.")); 5827 } 5828 5829 /* This detaches a program to which we previously attached, using 5830 inferior_ptid to identify the process. After this is done, GDB 5831 can be used to debug some other program. We better not have left 5832 any breakpoints in the target program or it'll die when it hits 5833 one. */ 5834 5835 void 5836 remote_target::remote_detach_1 (inferior *inf, int from_tty) 5837 { 5838 int pid = inferior_ptid.pid (); 5839 struct remote_state *rs = get_remote_state (); 5840 int is_fork_parent; 5841 5842 if (!target_has_execution ()) 5843 error (_("No process to detach from.")); 5844 5845 target_announce_detach (from_tty); 5846 5847 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 5848 { 5849 /* If we're in breakpoints-always-inserted mode, or the inferior 5850 is running, we have to remove breakpoints before detaching. 5851 We don't do this in common code instead because not all 5852 targets support removing breakpoints while the target is 5853 running. The remote target / gdbserver does, though. */ 5854 remove_breakpoints_inf (current_inferior ()); 5855 } 5856 5857 /* Tell the remote target to detach. */ 5858 remote_detach_pid (pid); 5859 5860 /* Exit only if this is the only active inferior. */ 5861 if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1) 5862 puts_filtered (_("Ending remote debugging.\n")); 5863 5864 thread_info *tp = find_thread_ptid (this, inferior_ptid); 5865 5866 /* Check to see if we are detaching a fork parent. Note that if we 5867 are detaching a fork child, tp == NULL. */ 5868 is_fork_parent = (tp != NULL 5869 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED); 5870 5871 /* If doing detach-on-fork, we don't mourn, because that will delete 5872 breakpoints that should be available for the followed inferior. */ 5873 if (!is_fork_parent) 5874 { 5875 /* Save the pid as a string before mourning, since that will 5876 unpush the remote target, and we need the string after. */ 5877 std::string infpid = target_pid_to_str (ptid_t (pid)); 5878 5879 target_mourn_inferior (inferior_ptid); 5880 if (print_inferior_events) 5881 printf_unfiltered (_("[Inferior %d (%s) detached]\n"), 5882 inf->num, infpid.c_str ()); 5883 } 5884 else 5885 { 5886 switch_to_no_thread (); 5887 detach_inferior (current_inferior ()); 5888 } 5889 } 5890 5891 void 5892 remote_target::detach (inferior *inf, int from_tty) 5893 { 5894 remote_detach_1 (inf, from_tty); 5895 } 5896 5897 void 5898 extended_remote_target::detach (inferior *inf, int from_tty) 5899 { 5900 remote_detach_1 (inf, from_tty); 5901 } 5902 5903 /* Target follow-fork function for remote targets. On entry, and 5904 at return, the current inferior is the fork parent. 5905 5906 Note that although this is currently only used for extended-remote, 5907 it is named remote_follow_fork in anticipation of using it for the 5908 remote target as well. */ 5909 5910 void 5911 remote_target::follow_fork (bool follow_child, bool detach_fork) 5912 { 5913 struct remote_state *rs = get_remote_state (); 5914 enum target_waitkind kind = inferior_thread ()->pending_follow.kind; 5915 5916 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs)) 5917 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs))) 5918 { 5919 /* When following the parent and detaching the child, we detach 5920 the child here. For the case of following the child and 5921 detaching the parent, the detach is done in the target- 5922 independent follow fork code in infrun.c. We can't use 5923 target_detach when detaching an unfollowed child because 5924 the client side doesn't know anything about the child. */ 5925 if (detach_fork && !follow_child) 5926 { 5927 /* Detach the fork child. */ 5928 ptid_t child_ptid; 5929 pid_t child_pid; 5930 5931 child_ptid = inferior_thread ()->pending_follow.value.related_pid; 5932 child_pid = child_ptid.pid (); 5933 5934 remote_detach_pid (child_pid); 5935 } 5936 } 5937 } 5938 5939 /* Target follow-exec function for remote targets. Save EXECD_PATHNAME 5940 in the program space of the new inferior. */ 5941 5942 void 5943 remote_target::follow_exec (inferior *follow_inf, ptid_t ptid, 5944 const char *execd_pathname) 5945 { 5946 process_stratum_target::follow_exec (follow_inf, ptid, execd_pathname); 5947 5948 /* We know that this is a target file name, so if it has the "target:" 5949 prefix we strip it off before saving it in the program space. */ 5950 if (is_target_filename (execd_pathname)) 5951 execd_pathname += strlen (TARGET_SYSROOT_PREFIX); 5952 5953 set_pspace_remote_exec_file (follow_inf->pspace, execd_pathname); 5954 } 5955 5956 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */ 5957 5958 void 5959 remote_target::disconnect (const char *args, int from_tty) 5960 { 5961 if (args) 5962 error (_("Argument given to \"disconnect\" when remotely debugging.")); 5963 5964 /* Make sure we unpush even the extended remote targets. Calling 5965 target_mourn_inferior won't unpush, and 5966 remote_target::mourn_inferior won't unpush if there is more than 5967 one inferior left. */ 5968 remote_unpush_target (this); 5969 5970 if (from_tty) 5971 puts_filtered ("Ending remote debugging.\n"); 5972 } 5973 5974 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero, 5975 be chatty about it. */ 5976 5977 void 5978 extended_remote_target::attach (const char *args, int from_tty) 5979 { 5980 struct remote_state *rs = get_remote_state (); 5981 int pid; 5982 char *wait_status = NULL; 5983 5984 pid = parse_pid_to_attach (args); 5985 5986 /* Remote PID can be freely equal to getpid, do not check it here the same 5987 way as in other targets. */ 5988 5989 if (packet_support (PACKET_vAttach) == PACKET_DISABLE) 5990 error (_("This target does not support attaching to a process")); 5991 5992 if (from_tty) 5993 { 5994 const char *exec_file = get_exec_file (0); 5995 5996 if (exec_file) 5997 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file, 5998 target_pid_to_str (ptid_t (pid)).c_str ()); 5999 else 6000 printf_unfiltered (_("Attaching to %s\n"), 6001 target_pid_to_str (ptid_t (pid)).c_str ()); 6002 } 6003 6004 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid); 6005 putpkt (rs->buf); 6006 getpkt (&rs->buf, 0); 6007 6008 switch (packet_ok (rs->buf, 6009 &remote_protocol_packets[PACKET_vAttach])) 6010 { 6011 case PACKET_OK: 6012 if (!target_is_non_stop_p ()) 6013 { 6014 /* Save the reply for later. */ 6015 wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1); 6016 strcpy (wait_status, rs->buf.data ()); 6017 } 6018 else if (strcmp (rs->buf.data (), "OK") != 0) 6019 error (_("Attaching to %s failed with: %s"), 6020 target_pid_to_str (ptid_t (pid)).c_str (), 6021 rs->buf.data ()); 6022 break; 6023 case PACKET_UNKNOWN: 6024 error (_("This target does not support attaching to a process")); 6025 default: 6026 error (_("Attaching to %s failed"), 6027 target_pid_to_str (ptid_t (pid)).c_str ()); 6028 } 6029 6030 switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0)); 6031 6032 inferior_ptid = ptid_t (pid); 6033 6034 if (target_is_non_stop_p ()) 6035 { 6036 /* Get list of threads. */ 6037 update_thread_list (); 6038 6039 thread_info *thread = first_thread_of_inferior (current_inferior ()); 6040 if (thread != nullptr) 6041 switch_to_thread (thread); 6042 6043 /* Invalidate our notion of the remote current thread. */ 6044 record_currthread (rs, minus_one_ptid); 6045 } 6046 else 6047 { 6048 /* Now, if we have thread information, update the main thread's 6049 ptid. */ 6050 ptid_t curr_ptid = remote_current_thread (ptid_t (pid)); 6051 6052 /* Add the main thread to the thread list. */ 6053 thread_info *thr = add_thread_silent (this, curr_ptid); 6054 6055 switch_to_thread (thr); 6056 6057 /* Don't consider the thread stopped until we've processed the 6058 saved stop reply. */ 6059 set_executing (this, thr->ptid, true); 6060 } 6061 6062 /* Next, if the target can specify a description, read it. We do 6063 this before anything involving memory or registers. */ 6064 target_find_description (); 6065 6066 if (!target_is_non_stop_p ()) 6067 { 6068 /* Use the previously fetched status. */ 6069 gdb_assert (wait_status != NULL); 6070 6071 if (target_can_async_p ()) 6072 { 6073 struct notif_event *reply 6074 = remote_notif_parse (this, ¬if_client_stop, wait_status); 6075 6076 push_stop_reply ((struct stop_reply *) reply); 6077 6078 target_async (1); 6079 } 6080 else 6081 { 6082 gdb_assert (wait_status != NULL); 6083 strcpy (rs->buf.data (), wait_status); 6084 rs->cached_wait_status = 1; 6085 } 6086 } 6087 else 6088 { 6089 gdb_assert (wait_status == NULL); 6090 6091 gdb_assert (target_can_async_p ()); 6092 target_async (1); 6093 } 6094 } 6095 6096 /* Implementation of the to_post_attach method. */ 6097 6098 void 6099 extended_remote_target::post_attach (int pid) 6100 { 6101 /* Get text, data & bss offsets. */ 6102 get_offsets (); 6103 6104 /* In certain cases GDB might not have had the chance to start 6105 symbol lookup up until now. This could happen if the debugged 6106 binary is not using shared libraries, the vsyscall page is not 6107 present (on Linux) and the binary itself hadn't changed since the 6108 debugging process was started. */ 6109 if (current_program_space->symfile_object_file != NULL) 6110 remote_check_symbols(); 6111 } 6112 6113 6114 /* Check for the availability of vCont. This function should also check 6115 the response. */ 6116 6117 void 6118 remote_target::remote_vcont_probe () 6119 { 6120 remote_state *rs = get_remote_state (); 6121 char *buf; 6122 6123 strcpy (rs->buf.data (), "vCont?"); 6124 putpkt (rs->buf); 6125 getpkt (&rs->buf, 0); 6126 buf = rs->buf.data (); 6127 6128 /* Make sure that the features we assume are supported. */ 6129 if (startswith (buf, "vCont")) 6130 { 6131 char *p = &buf[5]; 6132 int support_c, support_C; 6133 6134 rs->supports_vCont.s = 0; 6135 rs->supports_vCont.S = 0; 6136 support_c = 0; 6137 support_C = 0; 6138 rs->supports_vCont.t = 0; 6139 rs->supports_vCont.r = 0; 6140 while (p && *p == ';') 6141 { 6142 p++; 6143 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0)) 6144 rs->supports_vCont.s = 1; 6145 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0)) 6146 rs->supports_vCont.S = 1; 6147 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0)) 6148 support_c = 1; 6149 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0)) 6150 support_C = 1; 6151 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0)) 6152 rs->supports_vCont.t = 1; 6153 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0)) 6154 rs->supports_vCont.r = 1; 6155 6156 p = strchr (p, ';'); 6157 } 6158 6159 /* If c, and C are not all supported, we can't use vCont. Clearing 6160 BUF will make packet_ok disable the packet. */ 6161 if (!support_c || !support_C) 6162 buf[0] = 0; 6163 } 6164 6165 packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]); 6166 rs->supports_vCont_probed = true; 6167 } 6168 6169 /* Helper function for building "vCont" resumptions. Write a 6170 resumption to P. ENDP points to one-passed-the-end of the buffer 6171 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The 6172 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the 6173 resumed thread should be single-stepped and/or signalled. If PTID 6174 equals minus_one_ptid, then all threads are resumed; if PTID 6175 represents a process, then all threads of the process are resumed; 6176 the thread to be stepped and/or signalled is given in the global 6177 INFERIOR_PTID. */ 6178 6179 char * 6180 remote_target::append_resumption (char *p, char *endp, 6181 ptid_t ptid, int step, gdb_signal siggnal) 6182 { 6183 struct remote_state *rs = get_remote_state (); 6184 6185 if (step && siggnal != GDB_SIGNAL_0) 6186 p += xsnprintf (p, endp - p, ";S%02x", siggnal); 6187 else if (step 6188 /* GDB is willing to range step. */ 6189 && use_range_stepping 6190 /* Target supports range stepping. */ 6191 && rs->supports_vCont.r 6192 /* We don't currently support range stepping multiple 6193 threads with a wildcard (though the protocol allows it, 6194 so stubs shouldn't make an active effort to forbid 6195 it). */ 6196 && !(remote_multi_process_p (rs) && ptid.is_pid ())) 6197 { 6198 struct thread_info *tp; 6199 6200 if (ptid == minus_one_ptid) 6201 { 6202 /* If we don't know about the target thread's tid, then 6203 we're resuming magic_null_ptid (see caller). */ 6204 tp = find_thread_ptid (this, magic_null_ptid); 6205 } 6206 else 6207 tp = find_thread_ptid (this, ptid); 6208 gdb_assert (tp != NULL); 6209 6210 if (tp->control.may_range_step) 6211 { 6212 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; 6213 6214 p += xsnprintf (p, endp - p, ";r%s,%s", 6215 phex_nz (tp->control.step_range_start, 6216 addr_size), 6217 phex_nz (tp->control.step_range_end, 6218 addr_size)); 6219 } 6220 else 6221 p += xsnprintf (p, endp - p, ";s"); 6222 } 6223 else if (step) 6224 p += xsnprintf (p, endp - p, ";s"); 6225 else if (siggnal != GDB_SIGNAL_0) 6226 p += xsnprintf (p, endp - p, ";C%02x", siggnal); 6227 else 6228 p += xsnprintf (p, endp - p, ";c"); 6229 6230 if (remote_multi_process_p (rs) && ptid.is_pid ()) 6231 { 6232 ptid_t nptid; 6233 6234 /* All (-1) threads of process. */ 6235 nptid = ptid_t (ptid.pid (), -1, 0); 6236 6237 p += xsnprintf (p, endp - p, ":"); 6238 p = write_ptid (p, endp, nptid); 6239 } 6240 else if (ptid != minus_one_ptid) 6241 { 6242 p += xsnprintf (p, endp - p, ":"); 6243 p = write_ptid (p, endp, ptid); 6244 } 6245 6246 return p; 6247 } 6248 6249 /* Clear the thread's private info on resume. */ 6250 6251 static void 6252 resume_clear_thread_private_info (struct thread_info *thread) 6253 { 6254 if (thread->priv != NULL) 6255 { 6256 remote_thread_info *priv = get_remote_thread_info (thread); 6257 6258 priv->stop_reason = TARGET_STOPPED_BY_NO_REASON; 6259 priv->watch_data_address = 0; 6260 } 6261 } 6262 6263 /* Append a vCont continue-with-signal action for threads that have a 6264 non-zero stop signal. */ 6265 6266 char * 6267 remote_target::append_pending_thread_resumptions (char *p, char *endp, 6268 ptid_t ptid) 6269 { 6270 for (thread_info *thread : all_non_exited_threads (this, ptid)) 6271 if (inferior_ptid != thread->ptid 6272 && thread->suspend.stop_signal != GDB_SIGNAL_0) 6273 { 6274 p = append_resumption (p, endp, thread->ptid, 6275 0, thread->suspend.stop_signal); 6276 thread->suspend.stop_signal = GDB_SIGNAL_0; 6277 resume_clear_thread_private_info (thread); 6278 } 6279 6280 return p; 6281 } 6282 6283 /* Set the target running, using the packets that use Hc 6284 (c/s/C/S). */ 6285 6286 void 6287 remote_target::remote_resume_with_hc (ptid_t ptid, int step, 6288 gdb_signal siggnal) 6289 { 6290 struct remote_state *rs = get_remote_state (); 6291 char *buf; 6292 6293 rs->last_sent_signal = siggnal; 6294 rs->last_sent_step = step; 6295 6296 /* The c/s/C/S resume packets use Hc, so set the continue 6297 thread. */ 6298 if (ptid == minus_one_ptid) 6299 set_continue_thread (any_thread_ptid); 6300 else 6301 set_continue_thread (ptid); 6302 6303 for (thread_info *thread : all_non_exited_threads (this)) 6304 resume_clear_thread_private_info (thread); 6305 6306 buf = rs->buf.data (); 6307 if (::execution_direction == EXEC_REVERSE) 6308 { 6309 /* We don't pass signals to the target in reverse exec mode. */ 6310 if (info_verbose && siggnal != GDB_SIGNAL_0) 6311 warning (_(" - Can't pass signal %d to target in reverse: ignored."), 6312 siggnal); 6313 6314 if (step && packet_support (PACKET_bs) == PACKET_DISABLE) 6315 error (_("Remote reverse-step not supported.")); 6316 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE) 6317 error (_("Remote reverse-continue not supported.")); 6318 6319 strcpy (buf, step ? "bs" : "bc"); 6320 } 6321 else if (siggnal != GDB_SIGNAL_0) 6322 { 6323 buf[0] = step ? 'S' : 'C'; 6324 buf[1] = tohex (((int) siggnal >> 4) & 0xf); 6325 buf[2] = tohex (((int) siggnal) & 0xf); 6326 buf[3] = '\0'; 6327 } 6328 else 6329 strcpy (buf, step ? "s" : "c"); 6330 6331 putpkt (buf); 6332 } 6333 6334 /* Resume the remote inferior by using a "vCont" packet. The thread 6335 to be resumed is PTID; STEP and SIGGNAL indicate whether the 6336 resumed thread should be single-stepped and/or signalled. If PTID 6337 equals minus_one_ptid, then all threads are resumed; the thread to 6338 be stepped and/or signalled is given in the global INFERIOR_PTID. 6339 This function returns non-zero iff it resumes the inferior. 6340 6341 This function issues a strict subset of all possible vCont commands 6342 at the moment. */ 6343 6344 int 6345 remote_target::remote_resume_with_vcont (ptid_t ptid, int step, 6346 enum gdb_signal siggnal) 6347 { 6348 struct remote_state *rs = get_remote_state (); 6349 char *p; 6350 char *endp; 6351 6352 /* No reverse execution actions defined for vCont. */ 6353 if (::execution_direction == EXEC_REVERSE) 6354 return 0; 6355 6356 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN) 6357 remote_vcont_probe (); 6358 6359 if (packet_support (PACKET_vCont) == PACKET_DISABLE) 6360 return 0; 6361 6362 p = rs->buf.data (); 6363 endp = p + get_remote_packet_size (); 6364 6365 /* If we could generate a wider range of packets, we'd have to worry 6366 about overflowing BUF. Should there be a generic 6367 "multi-part-packet" packet? */ 6368 6369 p += xsnprintf (p, endp - p, "vCont"); 6370 6371 if (ptid == magic_null_ptid) 6372 { 6373 /* MAGIC_NULL_PTID means that we don't have any active threads, 6374 so we don't have any TID numbers the inferior will 6375 understand. Make sure to only send forms that do not specify 6376 a TID. */ 6377 append_resumption (p, endp, minus_one_ptid, step, siggnal); 6378 } 6379 else if (ptid == minus_one_ptid || ptid.is_pid ()) 6380 { 6381 /* Resume all threads (of all processes, or of a single 6382 process), with preference for INFERIOR_PTID. This assumes 6383 inferior_ptid belongs to the set of all threads we are about 6384 to resume. */ 6385 if (step || siggnal != GDB_SIGNAL_0) 6386 { 6387 /* Step inferior_ptid, with or without signal. */ 6388 p = append_resumption (p, endp, inferior_ptid, step, siggnal); 6389 } 6390 6391 /* Also pass down any pending signaled resumption for other 6392 threads not the current. */ 6393 p = append_pending_thread_resumptions (p, endp, ptid); 6394 6395 /* And continue others without a signal. */ 6396 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0); 6397 } 6398 else 6399 { 6400 /* Scheduler locking; resume only PTID. */ 6401 append_resumption (p, endp, ptid, step, siggnal); 6402 } 6403 6404 gdb_assert (strlen (rs->buf.data ()) < get_remote_packet_size ()); 6405 putpkt (rs->buf); 6406 6407 if (target_is_non_stop_p ()) 6408 { 6409 /* In non-stop, the stub replies to vCont with "OK". The stop 6410 reply will be reported asynchronously by means of a `%Stop' 6411 notification. */ 6412 getpkt (&rs->buf, 0); 6413 if (strcmp (rs->buf.data (), "OK") != 0) 6414 error (_("Unexpected vCont reply in non-stop mode: %s"), 6415 rs->buf.data ()); 6416 } 6417 6418 return 1; 6419 } 6420 6421 /* Tell the remote machine to resume. */ 6422 6423 void 6424 remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal) 6425 { 6426 struct remote_state *rs = get_remote_state (); 6427 6428 /* When connected in non-stop mode, the core resumes threads 6429 individually. Resuming remote threads directly in target_resume 6430 would thus result in sending one packet per thread. Instead, to 6431 minimize roundtrip latency, here we just store the resume 6432 request (put the thread in RESUMED_PENDING_VCONT state); the actual remote 6433 resumption will be done in remote_target::commit_resume, where we'll be 6434 able to do vCont action coalescing. */ 6435 if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE) 6436 { 6437 remote_thread_info *remote_thr; 6438 6439 if (minus_one_ptid == ptid || ptid.is_pid ()) 6440 remote_thr = get_remote_thread_info (this, inferior_ptid); 6441 else 6442 remote_thr = get_remote_thread_info (this, ptid); 6443 6444 /* We don't expect the core to ask to resume an already resumed (from 6445 its point of view) thread. */ 6446 gdb_assert (remote_thr->get_resume_state () == resume_state::NOT_RESUMED); 6447 6448 remote_thr->set_resumed_pending_vcont (step, siggnal); 6449 return; 6450 } 6451 6452 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN 6453 (explained in remote-notif.c:handle_notification) so 6454 remote_notif_process is not called. We need find a place where 6455 it is safe to start a 'vNotif' sequence. It is good to do it 6456 before resuming inferior, because inferior was stopped and no RSP 6457 traffic at that moment. */ 6458 if (!target_is_non_stop_p ()) 6459 remote_notif_process (rs->notif_state, ¬if_client_stop); 6460 6461 rs->last_resume_exec_dir = ::execution_direction; 6462 6463 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */ 6464 if (!remote_resume_with_vcont (ptid, step, siggnal)) 6465 remote_resume_with_hc (ptid, step, siggnal); 6466 6467 /* Update resumed state tracked by the remote target. */ 6468 for (thread_info *tp : all_non_exited_threads (this, ptid)) 6469 get_remote_thread_info (tp)->set_resumed (); 6470 6471 /* We are about to start executing the inferior, let's register it 6472 with the event loop. NOTE: this is the one place where all the 6473 execution commands end up. We could alternatively do this in each 6474 of the execution commands in infcmd.c. */ 6475 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here 6476 into infcmd.c in order to allow inferior function calls to work 6477 NOT asynchronously. */ 6478 if (target_can_async_p ()) 6479 target_async (1); 6480 6481 /* We've just told the target to resume. The remote server will 6482 wait for the inferior to stop, and then send a stop reply. In 6483 the mean time, we can't start another command/query ourselves 6484 because the stub wouldn't be ready to process it. This applies 6485 only to the base all-stop protocol, however. In non-stop (which 6486 only supports vCont), the stub replies with an "OK", and is 6487 immediate able to process further serial input. */ 6488 if (!target_is_non_stop_p ()) 6489 rs->waiting_for_stop_reply = 1; 6490 } 6491 6492 static int is_pending_fork_parent_thread (struct thread_info *thread); 6493 6494 /* Private per-inferior info for target remote processes. */ 6495 6496 struct remote_inferior : public private_inferior 6497 { 6498 /* Whether we can send a wildcard vCont for this process. */ 6499 bool may_wildcard_vcont = true; 6500 }; 6501 6502 /* Get the remote private inferior data associated to INF. */ 6503 6504 static remote_inferior * 6505 get_remote_inferior (inferior *inf) 6506 { 6507 if (inf->priv == NULL) 6508 inf->priv.reset (new remote_inferior); 6509 6510 return static_cast<remote_inferior *> (inf->priv.get ()); 6511 } 6512 6513 struct stop_reply : public notif_event 6514 { 6515 ~stop_reply (); 6516 6517 /* The identifier of the thread about this event */ 6518 ptid_t ptid; 6519 6520 /* The remote state this event is associated with. When the remote 6521 connection, represented by a remote_state object, is closed, 6522 all the associated stop_reply events should be released. */ 6523 struct remote_state *rs; 6524 6525 struct target_waitstatus ws; 6526 6527 /* The architecture associated with the expedited registers. */ 6528 gdbarch *arch; 6529 6530 /* Expedited registers. This makes remote debugging a bit more 6531 efficient for those targets that provide critical registers as 6532 part of their normal status mechanism (as another roundtrip to 6533 fetch them is avoided). */ 6534 std::vector<cached_reg_t> regcache; 6535 6536 enum target_stop_reason stop_reason; 6537 6538 CORE_ADDR watch_data_address; 6539 6540 int core; 6541 }; 6542 6543 /* Class used to track the construction of a vCont packet in the 6544 outgoing packet buffer. This is used to send multiple vCont 6545 packets if we have more actions than would fit a single packet. */ 6546 6547 class vcont_builder 6548 { 6549 public: 6550 explicit vcont_builder (remote_target *remote) 6551 : m_remote (remote) 6552 { 6553 restart (); 6554 } 6555 6556 void flush (); 6557 void push_action (ptid_t ptid, bool step, gdb_signal siggnal); 6558 6559 private: 6560 void restart (); 6561 6562 /* The remote target. */ 6563 remote_target *m_remote; 6564 6565 /* Pointer to the first action. P points here if no action has been 6566 appended yet. */ 6567 char *m_first_action; 6568 6569 /* Where the next action will be appended. */ 6570 char *m_p; 6571 6572 /* The end of the buffer. Must never write past this. */ 6573 char *m_endp; 6574 }; 6575 6576 /* Prepare the outgoing buffer for a new vCont packet. */ 6577 6578 void 6579 vcont_builder::restart () 6580 { 6581 struct remote_state *rs = m_remote->get_remote_state (); 6582 6583 m_p = rs->buf.data (); 6584 m_endp = m_p + m_remote->get_remote_packet_size (); 6585 m_p += xsnprintf (m_p, m_endp - m_p, "vCont"); 6586 m_first_action = m_p; 6587 } 6588 6589 /* If the vCont packet being built has any action, send it to the 6590 remote end. */ 6591 6592 void 6593 vcont_builder::flush () 6594 { 6595 struct remote_state *rs; 6596 6597 if (m_p == m_first_action) 6598 return; 6599 6600 rs = m_remote->get_remote_state (); 6601 m_remote->putpkt (rs->buf); 6602 m_remote->getpkt (&rs->buf, 0); 6603 if (strcmp (rs->buf.data (), "OK") != 0) 6604 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ()); 6605 } 6606 6607 /* The largest action is range-stepping, with its two addresses. This 6608 is more than sufficient. If a new, bigger action is created, it'll 6609 quickly trigger a failed assertion in append_resumption (and we'll 6610 just bump this). */ 6611 #define MAX_ACTION_SIZE 200 6612 6613 /* Append a new vCont action in the outgoing packet being built. If 6614 the action doesn't fit the packet along with previous actions, push 6615 what we've got so far to the remote end and start over a new vCont 6616 packet (with the new action). */ 6617 6618 void 6619 vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal) 6620 { 6621 char buf[MAX_ACTION_SIZE + 1]; 6622 6623 char *endp = m_remote->append_resumption (buf, buf + sizeof (buf), 6624 ptid, step, siggnal); 6625 6626 /* Check whether this new action would fit in the vCont packet along 6627 with previous actions. If not, send what we've got so far and 6628 start a new vCont packet. */ 6629 size_t rsize = endp - buf; 6630 if (rsize > m_endp - m_p) 6631 { 6632 flush (); 6633 restart (); 6634 6635 /* Should now fit. */ 6636 gdb_assert (rsize <= m_endp - m_p); 6637 } 6638 6639 memcpy (m_p, buf, rsize); 6640 m_p += rsize; 6641 *m_p = '\0'; 6642 } 6643 6644 /* to_commit_resume implementation. */ 6645 6646 void 6647 remote_target::commit_resumed () 6648 { 6649 /* If connected in all-stop mode, we'd send the remote resume 6650 request directly from remote_resume. Likewise if 6651 reverse-debugging, as there are no defined vCont actions for 6652 reverse execution. */ 6653 if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE) 6654 return; 6655 6656 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1") 6657 instead of resuming all threads of each process individually. 6658 However, if any thread of a process must remain halted, we can't 6659 send wildcard resumes and must send one action per thread. 6660 6661 Care must be taken to not resume threads/processes the server 6662 side already told us are stopped, but the core doesn't know about 6663 yet, because the events are still in the vStopped notification 6664 queue. For example: 6665 6666 #1 => vCont s:p1.1;c 6667 #2 <= OK 6668 #3 <= %Stopped T05 p1.1 6669 #4 => vStopped 6670 #5 <= T05 p1.2 6671 #6 => vStopped 6672 #7 <= OK 6673 #8 (infrun handles the stop for p1.1 and continues stepping) 6674 #9 => vCont s:p1.1;c 6675 6676 The last vCont above would resume thread p1.2 by mistake, because 6677 the server has no idea that the event for p1.2 had not been 6678 handled yet. 6679 6680 The server side must similarly ignore resume actions for the 6681 thread that has a pending %Stopped notification (and any other 6682 threads with events pending), until GDB acks the notification 6683 with vStopped. Otherwise, e.g., the following case is 6684 mishandled: 6685 6686 #1 => g (or any other packet) 6687 #2 <= [registers] 6688 #3 <= %Stopped T05 p1.2 6689 #4 => vCont s:p1.1;c 6690 #5 <= OK 6691 6692 Above, the server must not resume thread p1.2. GDB can't know 6693 that p1.2 stopped until it acks the %Stopped notification, and 6694 since from GDB's perspective all threads should be running, it 6695 sends a "c" action. 6696 6697 Finally, special care must also be given to handling fork/vfork 6698 events. A (v)fork event actually tells us that two processes 6699 stopped -- the parent and the child. Until we follow the fork, 6700 we must not resume the child. Therefore, if we have a pending 6701 fork follow, we must not send a global wildcard resume action 6702 (vCont;c). We can still send process-wide wildcards though. */ 6703 6704 /* Start by assuming a global wildcard (vCont;c) is possible. */ 6705 bool may_global_wildcard_vcont = true; 6706 6707 /* And assume every process is individually wildcard-able too. */ 6708 for (inferior *inf : all_non_exited_inferiors (this)) 6709 { 6710 remote_inferior *priv = get_remote_inferior (inf); 6711 6712 priv->may_wildcard_vcont = true; 6713 } 6714 6715 /* Check for any pending events (not reported or processed yet) and 6716 disable process and global wildcard resumes appropriately. */ 6717 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont); 6718 6719 bool any_pending_vcont_resume = false; 6720 6721 for (thread_info *tp : all_non_exited_threads (this)) 6722 { 6723 remote_thread_info *priv = get_remote_thread_info (tp); 6724 6725 /* If a thread of a process is not meant to be resumed, then we 6726 can't wildcard that process. */ 6727 if (priv->get_resume_state () == resume_state::NOT_RESUMED) 6728 { 6729 get_remote_inferior (tp->inf)->may_wildcard_vcont = false; 6730 6731 /* And if we can't wildcard a process, we can't wildcard 6732 everything either. */ 6733 may_global_wildcard_vcont = false; 6734 continue; 6735 } 6736 6737 if (priv->get_resume_state () == resume_state::RESUMED_PENDING_VCONT) 6738 any_pending_vcont_resume = true; 6739 6740 /* If a thread is the parent of an unfollowed fork, then we 6741 can't do a global wildcard, as that would resume the fork 6742 child. */ 6743 if (is_pending_fork_parent_thread (tp)) 6744 may_global_wildcard_vcont = false; 6745 } 6746 6747 /* We didn't have any resumed thread pending a vCont resume, so nothing to 6748 do. */ 6749 if (!any_pending_vcont_resume) 6750 return; 6751 6752 /* Now let's build the vCont packet(s). Actions must be appended 6753 from narrower to wider scopes (thread -> process -> global). If 6754 we end up with too many actions for a single packet vcont_builder 6755 flushes the current vCont packet to the remote side and starts a 6756 new one. */ 6757 struct vcont_builder vcont_builder (this); 6758 6759 /* Threads first. */ 6760 for (thread_info *tp : all_non_exited_threads (this)) 6761 { 6762 remote_thread_info *remote_thr = get_remote_thread_info (tp); 6763 6764 /* If the thread was previously vCont-resumed, no need to send a specific 6765 action for it. If we didn't receive a resume request for it, don't 6766 send an action for it either. */ 6767 if (remote_thr->get_resume_state () != resume_state::RESUMED_PENDING_VCONT) 6768 continue; 6769 6770 gdb_assert (!thread_is_in_step_over_chain (tp)); 6771 6772 /* We should never be commit-resuming a thread that has a stop reply. 6773 Otherwise, we would end up reporting a stop event for a thread while 6774 it is running on the remote target. */ 6775 remote_state *rs = get_remote_state (); 6776 for (const auto &stop_reply : rs->stop_reply_queue) 6777 gdb_assert (stop_reply->ptid != tp->ptid); 6778 6779 const resumed_pending_vcont_info &info 6780 = remote_thr->resumed_pending_vcont_info (); 6781 6782 /* Check if we need to send a specific action for this thread. If not, 6783 it will be included in a wildcard resume instead. */ 6784 if (info.step || info.sig != GDB_SIGNAL_0 6785 || !get_remote_inferior (tp->inf)->may_wildcard_vcont) 6786 vcont_builder.push_action (tp->ptid, info.step, info.sig); 6787 6788 remote_thr->set_resumed (); 6789 } 6790 6791 /* Now check whether we can send any process-wide wildcard. This is 6792 to avoid sending a global wildcard in the case nothing is 6793 supposed to be resumed. */ 6794 bool any_process_wildcard = false; 6795 6796 for (inferior *inf : all_non_exited_inferiors (this)) 6797 { 6798 if (get_remote_inferior (inf)->may_wildcard_vcont) 6799 { 6800 any_process_wildcard = true; 6801 break; 6802 } 6803 } 6804 6805 if (any_process_wildcard) 6806 { 6807 /* If all processes are wildcard-able, then send a single "c" 6808 action, otherwise, send an "all (-1) threads of process" 6809 continue action for each running process, if any. */ 6810 if (may_global_wildcard_vcont) 6811 { 6812 vcont_builder.push_action (minus_one_ptid, 6813 false, GDB_SIGNAL_0); 6814 } 6815 else 6816 { 6817 for (inferior *inf : all_non_exited_inferiors (this)) 6818 { 6819 if (get_remote_inferior (inf)->may_wildcard_vcont) 6820 { 6821 vcont_builder.push_action (ptid_t (inf->pid), 6822 false, GDB_SIGNAL_0); 6823 } 6824 } 6825 } 6826 } 6827 6828 vcont_builder.flush (); 6829 } 6830 6831 /* Implementation of target_has_pending_events. */ 6832 6833 bool 6834 remote_target::has_pending_events () 6835 { 6836 if (target_can_async_p ()) 6837 { 6838 remote_state *rs = get_remote_state (); 6839 6840 if (async_event_handler_marked (rs->remote_async_inferior_event_token)) 6841 return true; 6842 6843 /* Note that BUFCNT can be negative, indicating sticky 6844 error. */ 6845 if (rs->remote_desc->bufcnt != 0) 6846 return true; 6847 } 6848 return false; 6849 } 6850 6851 6852 6853 /* Non-stop version of target_stop. Uses `vCont;t' to stop a remote 6854 thread, all threads of a remote process, or all threads of all 6855 processes. */ 6856 6857 void 6858 remote_target::remote_stop_ns (ptid_t ptid) 6859 { 6860 struct remote_state *rs = get_remote_state (); 6861 char *p = rs->buf.data (); 6862 char *endp = p + get_remote_packet_size (); 6863 6864 /* If any thread that needs to stop was resumed but pending a vCont 6865 resume, generate a phony stop_reply. However, first check 6866 whether the thread wasn't resumed with a signal. Generating a 6867 phony stop in that case would result in losing the signal. */ 6868 bool needs_commit = false; 6869 for (thread_info *tp : all_non_exited_threads (this, ptid)) 6870 { 6871 remote_thread_info *remote_thr = get_remote_thread_info (tp); 6872 6873 if (remote_thr->get_resume_state () 6874 == resume_state::RESUMED_PENDING_VCONT) 6875 { 6876 const resumed_pending_vcont_info &info 6877 = remote_thr->resumed_pending_vcont_info (); 6878 if (info.sig != GDB_SIGNAL_0) 6879 { 6880 /* This signal must be forwarded to the inferior. We 6881 could commit-resume just this thread, but its simpler 6882 to just commit-resume everything. */ 6883 needs_commit = true; 6884 break; 6885 } 6886 } 6887 } 6888 6889 if (needs_commit) 6890 commit_resumed (); 6891 else 6892 for (thread_info *tp : all_non_exited_threads (this, ptid)) 6893 { 6894 remote_thread_info *remote_thr = get_remote_thread_info (tp); 6895 6896 if (remote_thr->get_resume_state () 6897 == resume_state::RESUMED_PENDING_VCONT) 6898 { 6899 remote_debug_printf ("Enqueueing phony stop reply for thread pending " 6900 "vCont-resume (%d, %ld, %ld)", tp->ptid.pid(), 6901 tp->ptid.lwp (), tp->ptid.tid ()); 6902 6903 /* Check that the thread wasn't resumed with a signal. 6904 Generating a phony stop would result in losing the 6905 signal. */ 6906 const resumed_pending_vcont_info &info 6907 = remote_thr->resumed_pending_vcont_info (); 6908 gdb_assert (info.sig == GDB_SIGNAL_0); 6909 6910 stop_reply *sr = new stop_reply (); 6911 sr->ptid = tp->ptid; 6912 sr->rs = rs; 6913 sr->ws.kind = TARGET_WAITKIND_STOPPED; 6914 sr->ws.value.sig = GDB_SIGNAL_0; 6915 sr->arch = tp->inf->gdbarch; 6916 sr->stop_reason = TARGET_STOPPED_BY_NO_REASON; 6917 sr->watch_data_address = 0; 6918 sr->core = 0; 6919 this->push_stop_reply (sr); 6920 6921 /* Pretend that this thread was actually resumed on the 6922 remote target, then stopped. If we leave it in the 6923 RESUMED_PENDING_VCONT state and the commit_resumed 6924 method is called while the stop reply is still in the 6925 queue, we'll end up reporting a stop event to the core 6926 for that thread while it is running on the remote 6927 target... that would be bad. */ 6928 remote_thr->set_resumed (); 6929 } 6930 } 6931 6932 /* FIXME: This supports_vCont_probed check is a workaround until 6933 packet_support is per-connection. */ 6934 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN 6935 || !rs->supports_vCont_probed) 6936 remote_vcont_probe (); 6937 6938 if (!rs->supports_vCont.t) 6939 error (_("Remote server does not support stopping threads")); 6940 6941 if (ptid == minus_one_ptid 6942 || (!remote_multi_process_p (rs) && ptid.is_pid ())) 6943 p += xsnprintf (p, endp - p, "vCont;t"); 6944 else 6945 { 6946 ptid_t nptid; 6947 6948 p += xsnprintf (p, endp - p, "vCont;t:"); 6949 6950 if (ptid.is_pid ()) 6951 /* All (-1) threads of process. */ 6952 nptid = ptid_t (ptid.pid (), -1, 0); 6953 else 6954 { 6955 /* Small optimization: if we already have a stop reply for 6956 this thread, no use in telling the stub we want this 6957 stopped. */ 6958 if (peek_stop_reply (ptid)) 6959 return; 6960 6961 nptid = ptid; 6962 } 6963 6964 write_ptid (p, endp, nptid); 6965 } 6966 6967 /* In non-stop, we get an immediate OK reply. The stop reply will 6968 come in asynchronously by notification. */ 6969 putpkt (rs->buf); 6970 getpkt (&rs->buf, 0); 6971 if (strcmp (rs->buf.data (), "OK") != 0) 6972 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (), 6973 rs->buf.data ()); 6974 } 6975 6976 /* All-stop version of target_interrupt. Sends a break or a ^C to 6977 interrupt the remote target. It is undefined which thread of which 6978 process reports the interrupt. */ 6979 6980 void 6981 remote_target::remote_interrupt_as () 6982 { 6983 struct remote_state *rs = get_remote_state (); 6984 6985 rs->ctrlc_pending_p = 1; 6986 6987 /* If the inferior is stopped already, but the core didn't know 6988 about it yet, just ignore the request. The cached wait status 6989 will be collected in remote_wait. */ 6990 if (rs->cached_wait_status) 6991 return; 6992 6993 /* Send interrupt_sequence to remote target. */ 6994 send_interrupt_sequence (); 6995 } 6996 6997 /* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt 6998 the remote target. It is undefined which thread of which process 6999 reports the interrupt. Throws an error if the packet is not 7000 supported by the server. */ 7001 7002 void 7003 remote_target::remote_interrupt_ns () 7004 { 7005 struct remote_state *rs = get_remote_state (); 7006 char *p = rs->buf.data (); 7007 char *endp = p + get_remote_packet_size (); 7008 7009 xsnprintf (p, endp - p, "vCtrlC"); 7010 7011 /* In non-stop, we get an immediate OK reply. The stop reply will 7012 come in asynchronously by notification. */ 7013 putpkt (rs->buf); 7014 getpkt (&rs->buf, 0); 7015 7016 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC])) 7017 { 7018 case PACKET_OK: 7019 break; 7020 case PACKET_UNKNOWN: 7021 error (_("No support for interrupting the remote target.")); 7022 case PACKET_ERROR: 7023 error (_("Interrupting target failed: %s"), rs->buf.data ()); 7024 } 7025 } 7026 7027 /* Implement the to_stop function for the remote targets. */ 7028 7029 void 7030 remote_target::stop (ptid_t ptid) 7031 { 7032 REMOTE_SCOPED_DEBUG_ENTER_EXIT; 7033 7034 if (target_is_non_stop_p ()) 7035 remote_stop_ns (ptid); 7036 else 7037 { 7038 /* We don't currently have a way to transparently pause the 7039 remote target in all-stop mode. Interrupt it instead. */ 7040 remote_interrupt_as (); 7041 } 7042 } 7043 7044 /* Implement the to_interrupt function for the remote targets. */ 7045 7046 void 7047 remote_target::interrupt () 7048 { 7049 REMOTE_SCOPED_DEBUG_ENTER_EXIT; 7050 7051 if (target_is_non_stop_p ()) 7052 remote_interrupt_ns (); 7053 else 7054 remote_interrupt_as (); 7055 } 7056 7057 /* Implement the to_pass_ctrlc function for the remote targets. */ 7058 7059 void 7060 remote_target::pass_ctrlc () 7061 { 7062 REMOTE_SCOPED_DEBUG_ENTER_EXIT; 7063 7064 struct remote_state *rs = get_remote_state (); 7065 7066 /* If we're starting up, we're not fully synced yet. Quit 7067 immediately. */ 7068 if (rs->starting_up) 7069 quit (); 7070 /* If ^C has already been sent once, offer to disconnect. */ 7071 else if (rs->ctrlc_pending_p) 7072 interrupt_query (); 7073 else 7074 target_interrupt (); 7075 } 7076 7077 /* Ask the user what to do when an interrupt is received. */ 7078 7079 void 7080 remote_target::interrupt_query () 7081 { 7082 struct remote_state *rs = get_remote_state (); 7083 7084 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p) 7085 { 7086 if (query (_("The target is not responding to interrupt requests.\n" 7087 "Stop debugging it? "))) 7088 { 7089 remote_unpush_target (this); 7090 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target.")); 7091 } 7092 } 7093 else 7094 { 7095 if (query (_("Interrupted while waiting for the program.\n" 7096 "Give up waiting? "))) 7097 quit (); 7098 } 7099 } 7100 7101 /* Enable/disable target terminal ownership. Most targets can use 7102 terminal groups to control terminal ownership. Remote targets are 7103 different in that explicit transfer of ownership to/from GDB/target 7104 is required. */ 7105 7106 void 7107 remote_target::terminal_inferior () 7108 { 7109 /* NOTE: At this point we could also register our selves as the 7110 recipient of all input. Any characters typed could then be 7111 passed on down to the target. */ 7112 } 7113 7114 void 7115 remote_target::terminal_ours () 7116 { 7117 } 7118 7119 static void 7120 remote_console_output (const char *msg) 7121 { 7122 const char *p; 7123 7124 for (p = msg; p[0] && p[1]; p += 2) 7125 { 7126 char tb[2]; 7127 char c = fromhex (p[0]) * 16 + fromhex (p[1]); 7128 7129 tb[0] = c; 7130 tb[1] = 0; 7131 gdb_stdtarg->puts (tb); 7132 } 7133 gdb_stdtarg->flush (); 7134 } 7135 7136 /* Return the length of the stop reply queue. */ 7137 7138 int 7139 remote_target::stop_reply_queue_length () 7140 { 7141 remote_state *rs = get_remote_state (); 7142 return rs->stop_reply_queue.size (); 7143 } 7144 7145 static void 7146 remote_notif_stop_parse (remote_target *remote, 7147 struct notif_client *self, const char *buf, 7148 struct notif_event *event) 7149 { 7150 remote->remote_parse_stop_reply (buf, (struct stop_reply *) event); 7151 } 7152 7153 static void 7154 remote_notif_stop_ack (remote_target *remote, 7155 struct notif_client *self, const char *buf, 7156 struct notif_event *event) 7157 { 7158 struct stop_reply *stop_reply = (struct stop_reply *) event; 7159 7160 /* acknowledge */ 7161 putpkt (remote, self->ack_command); 7162 7163 /* Kind can be TARGET_WAITKIND_IGNORE if we have meanwhile discarded 7164 the notification. It was left in the queue because we need to 7165 acknowledge it and pull the rest of the notifications out. */ 7166 if (stop_reply->ws.kind != TARGET_WAITKIND_IGNORE) 7167 remote->push_stop_reply (stop_reply); 7168 } 7169 7170 static int 7171 remote_notif_stop_can_get_pending_events (remote_target *remote, 7172 struct notif_client *self) 7173 { 7174 /* We can't get pending events in remote_notif_process for 7175 notification stop, and we have to do this in remote_wait_ns 7176 instead. If we fetch all queued events from stub, remote stub 7177 may exit and we have no chance to process them back in 7178 remote_wait_ns. */ 7179 remote_state *rs = remote->get_remote_state (); 7180 mark_async_event_handler (rs->remote_async_inferior_event_token); 7181 return 0; 7182 } 7183 7184 stop_reply::~stop_reply () 7185 { 7186 for (cached_reg_t ® : regcache) 7187 xfree (reg.data); 7188 } 7189 7190 static notif_event_up 7191 remote_notif_stop_alloc_reply () 7192 { 7193 return notif_event_up (new struct stop_reply ()); 7194 } 7195 7196 /* A client of notification Stop. */ 7197 7198 struct notif_client notif_client_stop = 7199 { 7200 "Stop", 7201 "vStopped", 7202 remote_notif_stop_parse, 7203 remote_notif_stop_ack, 7204 remote_notif_stop_can_get_pending_events, 7205 remote_notif_stop_alloc_reply, 7206 REMOTE_NOTIF_STOP, 7207 }; 7208 7209 /* Determine if THREAD_PTID is a pending fork parent thread. ARG contains 7210 the pid of the process that owns the threads we want to check, or 7211 -1 if we want to check all threads. */ 7212 7213 static int 7214 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid, 7215 ptid_t thread_ptid) 7216 { 7217 if (ws->kind == TARGET_WAITKIND_FORKED 7218 || ws->kind == TARGET_WAITKIND_VFORKED) 7219 { 7220 if (event_pid == -1 || event_pid == thread_ptid.pid ()) 7221 return 1; 7222 } 7223 7224 return 0; 7225 } 7226 7227 /* Return the thread's pending status used to determine whether the 7228 thread is a fork parent stopped at a fork event. */ 7229 7230 static struct target_waitstatus * 7231 thread_pending_fork_status (struct thread_info *thread) 7232 { 7233 if (thread->suspend.waitstatus_pending_p) 7234 return &thread->suspend.waitstatus; 7235 else 7236 return &thread->pending_follow; 7237 } 7238 7239 /* Determine if THREAD is a pending fork parent thread. */ 7240 7241 static int 7242 is_pending_fork_parent_thread (struct thread_info *thread) 7243 { 7244 struct target_waitstatus *ws = thread_pending_fork_status (thread); 7245 int pid = -1; 7246 7247 return is_pending_fork_parent (ws, pid, thread->ptid); 7248 } 7249 7250 /* If CONTEXT contains any fork child threads that have not been 7251 reported yet, remove them from the CONTEXT list. If such a 7252 thread exists it is because we are stopped at a fork catchpoint 7253 and have not yet called follow_fork, which will set up the 7254 host-side data structures for the new process. */ 7255 7256 void 7257 remote_target::remove_new_fork_children (threads_listing_context *context) 7258 { 7259 int pid = -1; 7260 struct notif_client *notif = ¬if_client_stop; 7261 7262 /* For any threads stopped at a fork event, remove the corresponding 7263 fork child threads from the CONTEXT list. */ 7264 for (thread_info *thread : all_non_exited_threads (this)) 7265 { 7266 struct target_waitstatus *ws = thread_pending_fork_status (thread); 7267 7268 if (is_pending_fork_parent (ws, pid, thread->ptid)) 7269 context->remove_thread (ws->value.related_pid); 7270 } 7271 7272 /* Check for any pending fork events (not reported or processed yet) 7273 in process PID and remove those fork child threads from the 7274 CONTEXT list as well. */ 7275 remote_notif_get_pending_events (notif); 7276 for (auto &event : get_remote_state ()->stop_reply_queue) 7277 if (event->ws.kind == TARGET_WAITKIND_FORKED 7278 || event->ws.kind == TARGET_WAITKIND_VFORKED 7279 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED) 7280 context->remove_thread (event->ws.value.related_pid); 7281 } 7282 7283 /* Check whether any event pending in the vStopped queue would prevent a 7284 global or process wildcard vCont action. Set *may_global_wildcard to 7285 false if we can't do a global wildcard (vCont;c), and clear the event 7286 inferior's may_wildcard_vcont flag if we can't do a process-wide 7287 wildcard resume (vCont;c:pPID.-1). */ 7288 7289 void 7290 remote_target::check_pending_events_prevent_wildcard_vcont 7291 (bool *may_global_wildcard) 7292 { 7293 struct notif_client *notif = ¬if_client_stop; 7294 7295 remote_notif_get_pending_events (notif); 7296 for (auto &event : get_remote_state ()->stop_reply_queue) 7297 { 7298 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED 7299 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY) 7300 continue; 7301 7302 if (event->ws.kind == TARGET_WAITKIND_FORKED 7303 || event->ws.kind == TARGET_WAITKIND_VFORKED) 7304 *may_global_wildcard = false; 7305 7306 /* This may be the first time we heard about this process. 7307 Regardless, we must not do a global wildcard resume, otherwise 7308 we'd resume this process too. */ 7309 *may_global_wildcard = false; 7310 if (event->ptid != null_ptid) 7311 { 7312 inferior *inf = find_inferior_ptid (this, event->ptid); 7313 if (inf != NULL) 7314 get_remote_inferior (inf)->may_wildcard_vcont = false; 7315 } 7316 } 7317 } 7318 7319 /* Discard all pending stop replies of inferior INF. */ 7320 7321 void 7322 remote_target::discard_pending_stop_replies (struct inferior *inf) 7323 { 7324 struct stop_reply *reply; 7325 struct remote_state *rs = get_remote_state (); 7326 struct remote_notif_state *rns = rs->notif_state; 7327 7328 /* This function can be notified when an inferior exists. When the 7329 target is not remote, the notification state is NULL. */ 7330 if (rs->remote_desc == NULL) 7331 return; 7332 7333 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id]; 7334 7335 /* Discard the in-flight notification. */ 7336 if (reply != NULL && reply->ptid.pid () == inf->pid) 7337 { 7338 /* Leave the notification pending, since the server expects that 7339 we acknowledge it with vStopped. But clear its contents, so 7340 that later on when we acknowledge it, we also discard it. */ 7341 reply->ws.kind = TARGET_WAITKIND_IGNORE; 7342 7343 if (remote_debug) 7344 fprintf_unfiltered (gdb_stdlog, 7345 "discarded in-flight notification\n"); 7346 } 7347 7348 /* Discard the stop replies we have already pulled with 7349 vStopped. */ 7350 auto iter = std::remove_if (rs->stop_reply_queue.begin (), 7351 rs->stop_reply_queue.end (), 7352 [=] (const stop_reply_up &event) 7353 { 7354 return event->ptid.pid () == inf->pid; 7355 }); 7356 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ()); 7357 } 7358 7359 /* Discard the stop replies for RS in stop_reply_queue. */ 7360 7361 void 7362 remote_target::discard_pending_stop_replies_in_queue () 7363 { 7364 remote_state *rs = get_remote_state (); 7365 7366 /* Discard the stop replies we have already pulled with 7367 vStopped. */ 7368 auto iter = std::remove_if (rs->stop_reply_queue.begin (), 7369 rs->stop_reply_queue.end (), 7370 [=] (const stop_reply_up &event) 7371 { 7372 return event->rs == rs; 7373 }); 7374 rs->stop_reply_queue.erase (iter, rs->stop_reply_queue.end ()); 7375 } 7376 7377 /* Remove the first reply in 'stop_reply_queue' which matches 7378 PTID. */ 7379 7380 struct stop_reply * 7381 remote_target::remote_notif_remove_queued_reply (ptid_t ptid) 7382 { 7383 remote_state *rs = get_remote_state (); 7384 7385 auto iter = std::find_if (rs->stop_reply_queue.begin (), 7386 rs->stop_reply_queue.end (), 7387 [=] (const stop_reply_up &event) 7388 { 7389 return event->ptid.matches (ptid); 7390 }); 7391 struct stop_reply *result; 7392 if (iter == rs->stop_reply_queue.end ()) 7393 result = nullptr; 7394 else 7395 { 7396 result = iter->release (); 7397 rs->stop_reply_queue.erase (iter); 7398 } 7399 7400 if (notif_debug) 7401 fprintf_unfiltered (gdb_stdlog, 7402 "notif: discard queued event: 'Stop' in %s\n", 7403 target_pid_to_str (ptid).c_str ()); 7404 7405 return result; 7406 } 7407 7408 /* Look for a queued stop reply belonging to PTID. If one is found, 7409 remove it from the queue, and return it. Returns NULL if none is 7410 found. If there are still queued events left to process, tell the 7411 event loop to get back to target_wait soon. */ 7412 7413 struct stop_reply * 7414 remote_target::queued_stop_reply (ptid_t ptid) 7415 { 7416 remote_state *rs = get_remote_state (); 7417 struct stop_reply *r = remote_notif_remove_queued_reply (ptid); 7418 7419 if (!rs->stop_reply_queue.empty ()) 7420 { 7421 /* There's still at least an event left. */ 7422 mark_async_event_handler (rs->remote_async_inferior_event_token); 7423 } 7424 7425 return r; 7426 } 7427 7428 /* Push a fully parsed stop reply in the stop reply queue. Since we 7429 know that we now have at least one queued event left to pass to the 7430 core side, tell the event loop to get back to target_wait soon. */ 7431 7432 void 7433 remote_target::push_stop_reply (struct stop_reply *new_event) 7434 { 7435 remote_state *rs = get_remote_state (); 7436 rs->stop_reply_queue.push_back (stop_reply_up (new_event)); 7437 7438 if (notif_debug) 7439 fprintf_unfiltered (gdb_stdlog, 7440 "notif: push 'Stop' %s to queue %d\n", 7441 target_pid_to_str (new_event->ptid).c_str (), 7442 int (rs->stop_reply_queue.size ())); 7443 7444 mark_async_event_handler (rs->remote_async_inferior_event_token); 7445 } 7446 7447 /* Returns true if we have a stop reply for PTID. */ 7448 7449 int 7450 remote_target::peek_stop_reply (ptid_t ptid) 7451 { 7452 remote_state *rs = get_remote_state (); 7453 for (auto &event : rs->stop_reply_queue) 7454 if (ptid == event->ptid 7455 && event->ws.kind == TARGET_WAITKIND_STOPPED) 7456 return 1; 7457 return 0; 7458 } 7459 7460 /* Helper for remote_parse_stop_reply. Return nonzero if the substring 7461 starting with P and ending with PEND matches PREFIX. */ 7462 7463 static int 7464 strprefix (const char *p, const char *pend, const char *prefix) 7465 { 7466 for ( ; p < pend; p++, prefix++) 7467 if (*p != *prefix) 7468 return 0; 7469 return *prefix == '\0'; 7470 } 7471 7472 /* Parse the stop reply in BUF. Either the function succeeds, and the 7473 result is stored in EVENT, or throws an error. */ 7474 7475 void 7476 remote_target::remote_parse_stop_reply (const char *buf, stop_reply *event) 7477 { 7478 remote_arch_state *rsa = NULL; 7479 ULONGEST addr; 7480 const char *p; 7481 int skipregs = 0; 7482 7483 event->ptid = null_ptid; 7484 event->rs = get_remote_state (); 7485 event->ws.kind = TARGET_WAITKIND_IGNORE; 7486 event->ws.value.integer = 0; 7487 event->stop_reason = TARGET_STOPPED_BY_NO_REASON; 7488 event->regcache.clear (); 7489 event->core = -1; 7490 7491 switch (buf[0]) 7492 { 7493 case 'T': /* Status with PC, SP, FP, ... */ 7494 /* Expedited reply, containing Signal, {regno, reg} repeat. */ 7495 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where 7496 ss = signal number 7497 n... = register number 7498 r... = register contents 7499 */ 7500 7501 p = &buf[3]; /* after Txx */ 7502 while (*p) 7503 { 7504 const char *p1; 7505 int fieldsize; 7506 7507 p1 = strchr (p, ':'); 7508 if (p1 == NULL) 7509 error (_("Malformed packet(a) (missing colon): %s\n\ 7510 Packet: '%s'\n"), 7511 p, buf); 7512 if (p == p1) 7513 error (_("Malformed packet(a) (missing register number): %s\n\ 7514 Packet: '%s'\n"), 7515 p, buf); 7516 7517 /* Some "registers" are actually extended stop information. 7518 Note if you're adding a new entry here: GDB 7.9 and 7519 earlier assume that all register "numbers" that start 7520 with an hex digit are real register numbers. Make sure 7521 the server only sends such a packet if it knows the 7522 client understands it. */ 7523 7524 if (strprefix (p, p1, "thread")) 7525 event->ptid = read_ptid (++p1, &p); 7526 else if (strprefix (p, p1, "syscall_entry")) 7527 { 7528 ULONGEST sysno; 7529 7530 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY; 7531 p = unpack_varlen_hex (++p1, &sysno); 7532 event->ws.value.syscall_number = (int) sysno; 7533 } 7534 else if (strprefix (p, p1, "syscall_return")) 7535 { 7536 ULONGEST sysno; 7537 7538 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN; 7539 p = unpack_varlen_hex (++p1, &sysno); 7540 event->ws.value.syscall_number = (int) sysno; 7541 } 7542 else if (strprefix (p, p1, "watch") 7543 || strprefix (p, p1, "rwatch") 7544 || strprefix (p, p1, "awatch")) 7545 { 7546 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT; 7547 p = unpack_varlen_hex (++p1, &addr); 7548 event->watch_data_address = (CORE_ADDR) addr; 7549 } 7550 else if (strprefix (p, p1, "swbreak")) 7551 { 7552 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; 7553 7554 /* Make sure the stub doesn't forget to indicate support 7555 with qSupported. */ 7556 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE) 7557 error (_("Unexpected swbreak stop reason")); 7558 7559 /* The value part is documented as "must be empty", 7560 though we ignore it, in case we ever decide to make 7561 use of it in a backward compatible way. */ 7562 p = strchrnul (p1 + 1, ';'); 7563 } 7564 else if (strprefix (p, p1, "hwbreak")) 7565 { 7566 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; 7567 7568 /* Make sure the stub doesn't forget to indicate support 7569 with qSupported. */ 7570 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE) 7571 error (_("Unexpected hwbreak stop reason")); 7572 7573 /* See above. */ 7574 p = strchrnul (p1 + 1, ';'); 7575 } 7576 else if (strprefix (p, p1, "library")) 7577 { 7578 event->ws.kind = TARGET_WAITKIND_LOADED; 7579 p = strchrnul (p1 + 1, ';'); 7580 } 7581 else if (strprefix (p, p1, "replaylog")) 7582 { 7583 event->ws.kind = TARGET_WAITKIND_NO_HISTORY; 7584 /* p1 will indicate "begin" or "end", but it makes 7585 no difference for now, so ignore it. */ 7586 p = strchrnul (p1 + 1, ';'); 7587 } 7588 else if (strprefix (p, p1, "core")) 7589 { 7590 ULONGEST c; 7591 7592 p = unpack_varlen_hex (++p1, &c); 7593 event->core = c; 7594 } 7595 else if (strprefix (p, p1, "fork")) 7596 { 7597 event->ws.value.related_pid = read_ptid (++p1, &p); 7598 event->ws.kind = TARGET_WAITKIND_FORKED; 7599 } 7600 else if (strprefix (p, p1, "vfork")) 7601 { 7602 event->ws.value.related_pid = read_ptid (++p1, &p); 7603 event->ws.kind = TARGET_WAITKIND_VFORKED; 7604 } 7605 else if (strprefix (p, p1, "vforkdone")) 7606 { 7607 event->ws.kind = TARGET_WAITKIND_VFORK_DONE; 7608 p = strchrnul (p1 + 1, ';'); 7609 } 7610 else if (strprefix (p, p1, "exec")) 7611 { 7612 ULONGEST ignored; 7613 int pathlen; 7614 7615 /* Determine the length of the execd pathname. */ 7616 p = unpack_varlen_hex (++p1, &ignored); 7617 pathlen = (p - p1) / 2; 7618 7619 /* Save the pathname for event reporting and for 7620 the next run command. */ 7621 gdb::unique_xmalloc_ptr<char[]> pathname 7622 ((char *) xmalloc (pathlen + 1)); 7623 hex2bin (p1, (gdb_byte *) pathname.get (), pathlen); 7624 pathname[pathlen] = '\0'; 7625 7626 /* This is freed during event handling. */ 7627 event->ws.value.execd_pathname = pathname.release (); 7628 event->ws.kind = TARGET_WAITKIND_EXECD; 7629 7630 /* Skip the registers included in this packet, since 7631 they may be for an architecture different from the 7632 one used by the original program. */ 7633 skipregs = 1; 7634 } 7635 else if (strprefix (p, p1, "create")) 7636 { 7637 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED; 7638 p = strchrnul (p1 + 1, ';'); 7639 } 7640 else 7641 { 7642 ULONGEST pnum; 7643 const char *p_temp; 7644 7645 if (skipregs) 7646 { 7647 p = strchrnul (p1 + 1, ';'); 7648 p++; 7649 continue; 7650 } 7651 7652 /* Maybe a real ``P'' register number. */ 7653 p_temp = unpack_varlen_hex (p, &pnum); 7654 /* If the first invalid character is the colon, we got a 7655 register number. Otherwise, it's an unknown stop 7656 reason. */ 7657 if (p_temp == p1) 7658 { 7659 /* If we haven't parsed the event's thread yet, find 7660 it now, in order to find the architecture of the 7661 reported expedited registers. */ 7662 if (event->ptid == null_ptid) 7663 { 7664 /* If there is no thread-id information then leave 7665 the event->ptid as null_ptid. Later in 7666 process_stop_reply we will pick a suitable 7667 thread. */ 7668 const char *thr = strstr (p1 + 1, ";thread:"); 7669 if (thr != NULL) 7670 event->ptid = read_ptid (thr + strlen (";thread:"), 7671 NULL); 7672 } 7673 7674 if (rsa == NULL) 7675 { 7676 inferior *inf 7677 = (event->ptid == null_ptid 7678 ? NULL 7679 : find_inferior_ptid (this, event->ptid)); 7680 /* If this is the first time we learn anything 7681 about this process, skip the registers 7682 included in this packet, since we don't yet 7683 know which architecture to use to parse them. 7684 We'll determine the architecture later when 7685 we process the stop reply and retrieve the 7686 target description, via 7687 remote_notice_new_inferior -> 7688 post_create_inferior. */ 7689 if (inf == NULL) 7690 { 7691 p = strchrnul (p1 + 1, ';'); 7692 p++; 7693 continue; 7694 } 7695 7696 event->arch = inf->gdbarch; 7697 rsa = event->rs->get_remote_arch_state (event->arch); 7698 } 7699 7700 packet_reg *reg 7701 = packet_reg_from_pnum (event->arch, rsa, pnum); 7702 cached_reg_t cached_reg; 7703 7704 if (reg == NULL) 7705 error (_("Remote sent bad register number %s: %s\n\ 7706 Packet: '%s'\n"), 7707 hex_string (pnum), p, buf); 7708 7709 cached_reg.num = reg->regnum; 7710 cached_reg.data = (gdb_byte *) 7711 xmalloc (register_size (event->arch, reg->regnum)); 7712 7713 p = p1 + 1; 7714 fieldsize = hex2bin (p, cached_reg.data, 7715 register_size (event->arch, reg->regnum)); 7716 p += 2 * fieldsize; 7717 if (fieldsize < register_size (event->arch, reg->regnum)) 7718 warning (_("Remote reply is too short: %s"), buf); 7719 7720 event->regcache.push_back (cached_reg); 7721 } 7722 else 7723 { 7724 /* Not a number. Silently skip unknown optional 7725 info. */ 7726 p = strchrnul (p1 + 1, ';'); 7727 } 7728 } 7729 7730 if (*p != ';') 7731 error (_("Remote register badly formatted: %s\nhere: %s"), 7732 buf, p); 7733 ++p; 7734 } 7735 7736 if (event->ws.kind != TARGET_WAITKIND_IGNORE) 7737 break; 7738 7739 /* fall through */ 7740 case 'S': /* Old style status, just signal only. */ 7741 { 7742 int sig; 7743 7744 event->ws.kind = TARGET_WAITKIND_STOPPED; 7745 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]); 7746 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST) 7747 event->ws.value.sig = (enum gdb_signal) sig; 7748 else 7749 event->ws.value.sig = GDB_SIGNAL_UNKNOWN; 7750 } 7751 break; 7752 case 'w': /* Thread exited. */ 7753 { 7754 ULONGEST value; 7755 7756 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED; 7757 p = unpack_varlen_hex (&buf[1], &value); 7758 event->ws.value.integer = value; 7759 if (*p != ';') 7760 error (_("stop reply packet badly formatted: %s"), buf); 7761 event->ptid = read_ptid (++p, NULL); 7762 break; 7763 } 7764 case 'W': /* Target exited. */ 7765 case 'X': 7766 { 7767 ULONGEST value; 7768 7769 /* GDB used to accept only 2 hex chars here. Stubs should 7770 only send more if they detect GDB supports multi-process 7771 support. */ 7772 p = unpack_varlen_hex (&buf[1], &value); 7773 7774 if (buf[0] == 'W') 7775 { 7776 /* The remote process exited. */ 7777 event->ws.kind = TARGET_WAITKIND_EXITED; 7778 event->ws.value.integer = value; 7779 } 7780 else 7781 { 7782 /* The remote process exited with a signal. */ 7783 event->ws.kind = TARGET_WAITKIND_SIGNALLED; 7784 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST) 7785 event->ws.value.sig = (enum gdb_signal) value; 7786 else 7787 event->ws.value.sig = GDB_SIGNAL_UNKNOWN; 7788 } 7789 7790 /* If no process is specified, return null_ptid, and let the 7791 caller figure out the right process to use. */ 7792 int pid = 0; 7793 if (*p == '\0') 7794 ; 7795 else if (*p == ';') 7796 { 7797 p++; 7798 7799 if (*p == '\0') 7800 ; 7801 else if (startswith (p, "process:")) 7802 { 7803 ULONGEST upid; 7804 7805 p += sizeof ("process:") - 1; 7806 unpack_varlen_hex (p, &upid); 7807 pid = upid; 7808 } 7809 else 7810 error (_("unknown stop reply packet: %s"), buf); 7811 } 7812 else 7813 error (_("unknown stop reply packet: %s"), buf); 7814 event->ptid = ptid_t (pid); 7815 } 7816 break; 7817 case 'N': 7818 event->ws.kind = TARGET_WAITKIND_NO_RESUMED; 7819 event->ptid = minus_one_ptid; 7820 break; 7821 } 7822 } 7823 7824 /* When the stub wants to tell GDB about a new notification reply, it 7825 sends a notification (%Stop, for example). Those can come it at 7826 any time, hence, we have to make sure that any pending 7827 putpkt/getpkt sequence we're making is finished, before querying 7828 the stub for more events with the corresponding ack command 7829 (vStopped, for example). E.g., if we started a vStopped sequence 7830 immediately upon receiving the notification, something like this 7831 could happen: 7832 7833 1.1) --> Hg 1 7834 1.2) <-- OK 7835 1.3) --> g 7836 1.4) <-- %Stop 7837 1.5) --> vStopped 7838 1.6) <-- (registers reply to step #1.3) 7839 7840 Obviously, the reply in step #1.6 would be unexpected to a vStopped 7841 query. 7842 7843 To solve this, whenever we parse a %Stop notification successfully, 7844 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on 7845 doing whatever we were doing: 7846 7847 2.1) --> Hg 1 7848 2.2) <-- OK 7849 2.3) --> g 7850 2.4) <-- %Stop 7851 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN> 7852 2.5) <-- (registers reply to step #2.3) 7853 7854 Eventually after step #2.5, we return to the event loop, which 7855 notices there's an event on the 7856 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the 7857 associated callback --- the function below. At this point, we're 7858 always safe to start a vStopped sequence. : 7859 7860 2.6) --> vStopped 7861 2.7) <-- T05 thread:2 7862 2.8) --> vStopped 7863 2.9) --> OK 7864 */ 7865 7866 void 7867 remote_target::remote_notif_get_pending_events (notif_client *nc) 7868 { 7869 struct remote_state *rs = get_remote_state (); 7870 7871 if (rs->notif_state->pending_event[nc->id] != NULL) 7872 { 7873 if (notif_debug) 7874 fprintf_unfiltered (gdb_stdlog, 7875 "notif: process: '%s' ack pending event\n", 7876 nc->name); 7877 7878 /* acknowledge */ 7879 nc->ack (this, nc, rs->buf.data (), 7880 rs->notif_state->pending_event[nc->id]); 7881 rs->notif_state->pending_event[nc->id] = NULL; 7882 7883 while (1) 7884 { 7885 getpkt (&rs->buf, 0); 7886 if (strcmp (rs->buf.data (), "OK") == 0) 7887 break; 7888 else 7889 remote_notif_ack (this, nc, rs->buf.data ()); 7890 } 7891 } 7892 else 7893 { 7894 if (notif_debug) 7895 fprintf_unfiltered (gdb_stdlog, 7896 "notif: process: '%s' no pending reply\n", 7897 nc->name); 7898 } 7899 } 7900 7901 /* Wrapper around remote_target::remote_notif_get_pending_events to 7902 avoid having to export the whole remote_target class. */ 7903 7904 void 7905 remote_notif_get_pending_events (remote_target *remote, notif_client *nc) 7906 { 7907 remote->remote_notif_get_pending_events (nc); 7908 } 7909 7910 /* Called from process_stop_reply when the stop packet we are responding 7911 to didn't include a process-id or thread-id. STATUS is the stop event 7912 we are responding to. 7913 7914 It is the task of this function to select a suitable thread (or process) 7915 and return its ptid, this is the thread (or process) we will assume the 7916 stop event came from. 7917 7918 In some cases there isn't really any choice about which thread (or 7919 process) is selected, a basic remote with a single process containing a 7920 single thread might choose not to send any process-id or thread-id in 7921 its stop packets, this function will select and return the one and only 7922 thread. 7923 7924 However, if a target supports multiple threads (or processes) and still 7925 doesn't include a thread-id (or process-id) in its stop packet then 7926 first, this is a badly behaving target, and second, we're going to have 7927 to select a thread (or process) at random and use that. This function 7928 will print a warning to the user if it detects that there is the 7929 possibility that GDB is guessing which thread (or process) to 7930 report. 7931 7932 Note that this is called before GDB fetches the updated thread list from the 7933 target. So it's possible for the stop reply to be ambiguous and for GDB to 7934 not realize it. For example, if there's initially one thread, the target 7935 spawns a second thread, and then sends a stop reply without an id that 7936 concerns the first thread. GDB will assume the stop reply is about the 7937 first thread - the only thread it knows about - without printing a warning. 7938 Anyway, if the remote meant for the stop reply to be about the second thread, 7939 then it would be really broken, because GDB doesn't know about that thread 7940 yet. */ 7941 7942 ptid_t 7943 remote_target::select_thread_for_ambiguous_stop_reply 7944 (const struct target_waitstatus *status) 7945 { 7946 REMOTE_SCOPED_DEBUG_ENTER_EXIT; 7947 7948 /* Some stop events apply to all threads in an inferior, while others 7949 only apply to a single thread. */ 7950 bool process_wide_stop 7951 = (status->kind == TARGET_WAITKIND_EXITED 7952 || status->kind == TARGET_WAITKIND_SIGNALLED); 7953 7954 remote_debug_printf ("process_wide_stop = %d", process_wide_stop); 7955 7956 thread_info *first_resumed_thread = nullptr; 7957 bool ambiguous = false; 7958 7959 /* Consider all non-exited threads of the target, find the first resumed 7960 one. */ 7961 for (thread_info *thr : all_non_exited_threads (this)) 7962 { 7963 remote_thread_info *remote_thr = get_remote_thread_info (thr); 7964 7965 if (remote_thr->get_resume_state () != resume_state::RESUMED) 7966 continue; 7967 7968 if (first_resumed_thread == nullptr) 7969 first_resumed_thread = thr; 7970 else if (!process_wide_stop 7971 || first_resumed_thread->ptid.pid () != thr->ptid.pid ()) 7972 ambiguous = true; 7973 } 7974 7975 remote_debug_printf ("first resumed thread is %s", 7976 pid_to_str (first_resumed_thread->ptid).c_str ()); 7977 remote_debug_printf ("is this guess ambiguous? = %d", ambiguous); 7978 7979 gdb_assert (first_resumed_thread != nullptr); 7980 7981 /* Warn if the remote target is sending ambiguous stop replies. */ 7982 if (ambiguous) 7983 { 7984 static bool warned = false; 7985 7986 if (!warned) 7987 { 7988 /* If you are seeing this warning then the remote target has 7989 stopped without specifying a thread-id, but the target 7990 does have multiple threads (or inferiors), and so GDB is 7991 having to guess which thread stopped. 7992 7993 Examples of what might cause this are the target sending 7994 and 'S' stop packet, or a 'T' stop packet and not 7995 including a thread-id. 7996 7997 Additionally, the target might send a 'W' or 'X packet 7998 without including a process-id, when the target has 7999 multiple running inferiors. */ 8000 if (process_wide_stop) 8001 warning (_("multi-inferior target stopped without " 8002 "sending a process-id, using first " 8003 "non-exited inferior")); 8004 else 8005 warning (_("multi-threaded target stopped without " 8006 "sending a thread-id, using first " 8007 "non-exited thread")); 8008 warned = true; 8009 } 8010 } 8011 8012 /* If this is a stop for all threads then don't use a particular threads 8013 ptid, instead create a new ptid where only the pid field is set. */ 8014 if (process_wide_stop) 8015 return ptid_t (first_resumed_thread->ptid.pid ()); 8016 else 8017 return first_resumed_thread->ptid; 8018 } 8019 8020 /* Called when it is decided that STOP_REPLY holds the info of the 8021 event that is to be returned to the core. This function always 8022 destroys STOP_REPLY. */ 8023 8024 ptid_t 8025 remote_target::process_stop_reply (struct stop_reply *stop_reply, 8026 struct target_waitstatus *status) 8027 { 8028 *status = stop_reply->ws; 8029 ptid_t ptid = stop_reply->ptid; 8030 8031 /* If no thread/process was reported by the stub then select a suitable 8032 thread/process. */ 8033 if (ptid == null_ptid) 8034 ptid = select_thread_for_ambiguous_stop_reply (status); 8035 gdb_assert (ptid != null_ptid); 8036 8037 if (status->kind != TARGET_WAITKIND_EXITED 8038 && status->kind != TARGET_WAITKIND_SIGNALLED 8039 && status->kind != TARGET_WAITKIND_NO_RESUMED) 8040 { 8041 /* Expedited registers. */ 8042 if (!stop_reply->regcache.empty ()) 8043 { 8044 struct regcache *regcache 8045 = get_thread_arch_regcache (this, ptid, stop_reply->arch); 8046 8047 for (cached_reg_t ® : stop_reply->regcache) 8048 { 8049 regcache->raw_supply (reg.num, reg.data); 8050 xfree (reg.data); 8051 } 8052 8053 stop_reply->regcache.clear (); 8054 } 8055 8056 remote_notice_new_inferior (ptid, false); 8057 remote_thread_info *remote_thr = get_remote_thread_info (this, ptid); 8058 remote_thr->core = stop_reply->core; 8059 remote_thr->stop_reason = stop_reply->stop_reason; 8060 remote_thr->watch_data_address = stop_reply->watch_data_address; 8061 8062 if (target_is_non_stop_p ()) 8063 { 8064 /* If the target works in non-stop mode, a stop-reply indicates that 8065 only this thread stopped. */ 8066 remote_thr->set_not_resumed (); 8067 } 8068 else 8069 { 8070 /* If the target works in all-stop mode, a stop-reply indicates that 8071 all the target's threads stopped. */ 8072 for (thread_info *tp : all_non_exited_threads (this)) 8073 get_remote_thread_info (tp)->set_not_resumed (); 8074 } 8075 } 8076 8077 delete stop_reply; 8078 return ptid; 8079 } 8080 8081 /* The non-stop mode version of target_wait. */ 8082 8083 ptid_t 8084 remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status, 8085 target_wait_flags options) 8086 { 8087 struct remote_state *rs = get_remote_state (); 8088 struct stop_reply *stop_reply; 8089 int ret; 8090 int is_notif = 0; 8091 8092 /* If in non-stop mode, get out of getpkt even if a 8093 notification is received. */ 8094 8095 ret = getpkt_or_notif_sane (&rs->buf, 0 /* forever */, &is_notif); 8096 while (1) 8097 { 8098 if (ret != -1 && !is_notif) 8099 switch (rs->buf[0]) 8100 { 8101 case 'E': /* Error of some sort. */ 8102 /* We're out of sync with the target now. Did it continue 8103 or not? We can't tell which thread it was in non-stop, 8104 so just ignore this. */ 8105 warning (_("Remote failure reply: %s"), rs->buf.data ()); 8106 break; 8107 case 'O': /* Console output. */ 8108 remote_console_output (&rs->buf[1]); 8109 break; 8110 default: 8111 warning (_("Invalid remote reply: %s"), rs->buf.data ()); 8112 break; 8113 } 8114 8115 /* Acknowledge a pending stop reply that may have arrived in the 8116 mean time. */ 8117 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL) 8118 remote_notif_get_pending_events (¬if_client_stop); 8119 8120 /* If indeed we noticed a stop reply, we're done. */ 8121 stop_reply = queued_stop_reply (ptid); 8122 if (stop_reply != NULL) 8123 return process_stop_reply (stop_reply, status); 8124 8125 /* Still no event. If we're just polling for an event, then 8126 return to the event loop. */ 8127 if (options & TARGET_WNOHANG) 8128 { 8129 status->kind = TARGET_WAITKIND_IGNORE; 8130 return minus_one_ptid; 8131 } 8132 8133 /* Otherwise do a blocking wait. */ 8134 ret = getpkt_or_notif_sane (&rs->buf, 1 /* forever */, &is_notif); 8135 } 8136 } 8137 8138 /* Return the first resumed thread. */ 8139 8140 static ptid_t 8141 first_remote_resumed_thread (remote_target *target) 8142 { 8143 for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid)) 8144 if (tp->resumed) 8145 return tp->ptid; 8146 return null_ptid; 8147 } 8148 8149 /* Wait until the remote machine stops, then return, storing status in 8150 STATUS just as `wait' would. */ 8151 8152 ptid_t 8153 remote_target::wait_as (ptid_t ptid, target_waitstatus *status, 8154 target_wait_flags options) 8155 { 8156 struct remote_state *rs = get_remote_state (); 8157 ptid_t event_ptid = null_ptid; 8158 char *buf; 8159 struct stop_reply *stop_reply; 8160 8161 again: 8162 8163 status->kind = TARGET_WAITKIND_IGNORE; 8164 status->value.integer = 0; 8165 8166 stop_reply = queued_stop_reply (ptid); 8167 if (stop_reply != NULL) 8168 return process_stop_reply (stop_reply, status); 8169 8170 if (rs->cached_wait_status) 8171 /* Use the cached wait status, but only once. */ 8172 rs->cached_wait_status = 0; 8173 else 8174 { 8175 int ret; 8176 int is_notif; 8177 int forever = ((options & TARGET_WNOHANG) == 0 8178 && rs->wait_forever_enabled_p); 8179 8180 if (!rs->waiting_for_stop_reply) 8181 { 8182 status->kind = TARGET_WAITKIND_NO_RESUMED; 8183 return minus_one_ptid; 8184 } 8185 8186 /* FIXME: cagney/1999-09-27: If we're in async mode we should 8187 _never_ wait for ever -> test on target_is_async_p(). 8188 However, before we do that we need to ensure that the caller 8189 knows how to take the target into/out of async mode. */ 8190 ret = getpkt_or_notif_sane (&rs->buf, forever, &is_notif); 8191 8192 /* GDB gets a notification. Return to core as this event is 8193 not interesting. */ 8194 if (ret != -1 && is_notif) 8195 return minus_one_ptid; 8196 8197 if (ret == -1 && (options & TARGET_WNOHANG) != 0) 8198 return minus_one_ptid; 8199 } 8200 8201 buf = rs->buf.data (); 8202 8203 /* Assume that the target has acknowledged Ctrl-C unless we receive 8204 an 'F' or 'O' packet. */ 8205 if (buf[0] != 'F' && buf[0] != 'O') 8206 rs->ctrlc_pending_p = 0; 8207 8208 switch (buf[0]) 8209 { 8210 case 'E': /* Error of some sort. */ 8211 /* We're out of sync with the target now. Did it continue or 8212 not? Not is more likely, so report a stop. */ 8213 rs->waiting_for_stop_reply = 0; 8214 8215 warning (_("Remote failure reply: %s"), buf); 8216 status->kind = TARGET_WAITKIND_STOPPED; 8217 status->value.sig = GDB_SIGNAL_0; 8218 break; 8219 case 'F': /* File-I/O request. */ 8220 /* GDB may access the inferior memory while handling the File-I/O 8221 request, but we don't want GDB accessing memory while waiting 8222 for a stop reply. See the comments in putpkt_binary. Set 8223 waiting_for_stop_reply to 0 temporarily. */ 8224 rs->waiting_for_stop_reply = 0; 8225 remote_fileio_request (this, buf, rs->ctrlc_pending_p); 8226 rs->ctrlc_pending_p = 0; 8227 /* GDB handled the File-I/O request, and the target is running 8228 again. Keep waiting for events. */ 8229 rs->waiting_for_stop_reply = 1; 8230 break; 8231 case 'N': case 'T': case 'S': case 'X': case 'W': 8232 { 8233 /* There is a stop reply to handle. */ 8234 rs->waiting_for_stop_reply = 0; 8235 8236 stop_reply 8237 = (struct stop_reply *) remote_notif_parse (this, 8238 ¬if_client_stop, 8239 rs->buf.data ()); 8240 8241 event_ptid = process_stop_reply (stop_reply, status); 8242 break; 8243 } 8244 case 'O': /* Console output. */ 8245 remote_console_output (buf + 1); 8246 break; 8247 case '\0': 8248 if (rs->last_sent_signal != GDB_SIGNAL_0) 8249 { 8250 /* Zero length reply means that we tried 'S' or 'C' and the 8251 remote system doesn't support it. */ 8252 target_terminal::ours_for_output (); 8253 printf_filtered 8254 ("Can't send signals to this remote system. %s not sent.\n", 8255 gdb_signal_to_name (rs->last_sent_signal)); 8256 rs->last_sent_signal = GDB_SIGNAL_0; 8257 target_terminal::inferior (); 8258 8259 strcpy (buf, rs->last_sent_step ? "s" : "c"); 8260 putpkt (buf); 8261 break; 8262 } 8263 /* fallthrough */ 8264 default: 8265 warning (_("Invalid remote reply: %s"), buf); 8266 break; 8267 } 8268 8269 if (status->kind == TARGET_WAITKIND_NO_RESUMED) 8270 return minus_one_ptid; 8271 else if (status->kind == TARGET_WAITKIND_IGNORE) 8272 { 8273 /* Nothing interesting happened. If we're doing a non-blocking 8274 poll, we're done. Otherwise, go back to waiting. */ 8275 if (options & TARGET_WNOHANG) 8276 return minus_one_ptid; 8277 else 8278 goto again; 8279 } 8280 else if (status->kind != TARGET_WAITKIND_EXITED 8281 && status->kind != TARGET_WAITKIND_SIGNALLED) 8282 { 8283 if (event_ptid != null_ptid) 8284 record_currthread (rs, event_ptid); 8285 else 8286 event_ptid = first_remote_resumed_thread (this); 8287 } 8288 else 8289 { 8290 /* A process exit. Invalidate our notion of current thread. */ 8291 record_currthread (rs, minus_one_ptid); 8292 /* It's possible that the packet did not include a pid. */ 8293 if (event_ptid == null_ptid) 8294 event_ptid = first_remote_resumed_thread (this); 8295 /* EVENT_PTID could still be NULL_PTID. Double-check. */ 8296 if (event_ptid == null_ptid) 8297 event_ptid = magic_null_ptid; 8298 } 8299 8300 return event_ptid; 8301 } 8302 8303 /* Wait until the remote machine stops, then return, storing status in 8304 STATUS just as `wait' would. */ 8305 8306 ptid_t 8307 remote_target::wait (ptid_t ptid, struct target_waitstatus *status, 8308 target_wait_flags options) 8309 { 8310 REMOTE_SCOPED_DEBUG_ENTER_EXIT; 8311 8312 remote_state *rs = get_remote_state (); 8313 8314 /* Start by clearing the flag that asks for our wait method to be called, 8315 we'll mark it again at the end if needed. */ 8316 if (target_is_async_p ()) 8317 clear_async_event_handler (rs->remote_async_inferior_event_token); 8318 8319 ptid_t event_ptid; 8320 8321 if (target_is_non_stop_p ()) 8322 event_ptid = wait_ns (ptid, status, options); 8323 else 8324 event_ptid = wait_as (ptid, status, options); 8325 8326 if (target_is_async_p ()) 8327 { 8328 /* If there are events left in the queue, or unacknowledged 8329 notifications, then tell the event loop to call us again. */ 8330 if (!rs->stop_reply_queue.empty () 8331 || rs->notif_state->pending_event[notif_client_stop.id] != nullptr) 8332 mark_async_event_handler (rs->remote_async_inferior_event_token); 8333 } 8334 8335 return event_ptid; 8336 } 8337 8338 /* Fetch a single register using a 'p' packet. */ 8339 8340 int 8341 remote_target::fetch_register_using_p (struct regcache *regcache, 8342 packet_reg *reg) 8343 { 8344 struct gdbarch *gdbarch = regcache->arch (); 8345 struct remote_state *rs = get_remote_state (); 8346 char *buf, *p; 8347 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum)); 8348 int i; 8349 8350 if (packet_support (PACKET_p) == PACKET_DISABLE) 8351 return 0; 8352 8353 if (reg->pnum == -1) 8354 return 0; 8355 8356 p = rs->buf.data (); 8357 *p++ = 'p'; 8358 p += hexnumstr (p, reg->pnum); 8359 *p++ = '\0'; 8360 putpkt (rs->buf); 8361 getpkt (&rs->buf, 0); 8362 8363 buf = rs->buf.data (); 8364 8365 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_p])) 8366 { 8367 case PACKET_OK: 8368 break; 8369 case PACKET_UNKNOWN: 8370 return 0; 8371 case PACKET_ERROR: 8372 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"), 8373 gdbarch_register_name (regcache->arch (), 8374 reg->regnum), 8375 buf); 8376 } 8377 8378 /* If this register is unfetchable, tell the regcache. */ 8379 if (buf[0] == 'x') 8380 { 8381 regcache->raw_supply (reg->regnum, NULL); 8382 return 1; 8383 } 8384 8385 /* Otherwise, parse and supply the value. */ 8386 p = buf; 8387 i = 0; 8388 while (p[0] != 0) 8389 { 8390 if (p[1] == 0) 8391 error (_("fetch_register_using_p: early buf termination")); 8392 8393 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]); 8394 p += 2; 8395 } 8396 regcache->raw_supply (reg->regnum, regp); 8397 return 1; 8398 } 8399 8400 /* Fetch the registers included in the target's 'g' packet. */ 8401 8402 int 8403 remote_target::send_g_packet () 8404 { 8405 struct remote_state *rs = get_remote_state (); 8406 int buf_len; 8407 8408 xsnprintf (rs->buf.data (), get_remote_packet_size (), "g"); 8409 putpkt (rs->buf); 8410 getpkt (&rs->buf, 0); 8411 if (packet_check_result (rs->buf) == PACKET_ERROR) 8412 error (_("Could not read registers; remote failure reply '%s'"), 8413 rs->buf.data ()); 8414 8415 /* We can get out of synch in various cases. If the first character 8416 in the buffer is not a hex character, assume that has happened 8417 and try to fetch another packet to read. */ 8418 while ((rs->buf[0] < '0' || rs->buf[0] > '9') 8419 && (rs->buf[0] < 'A' || rs->buf[0] > 'F') 8420 && (rs->buf[0] < 'a' || rs->buf[0] > 'f') 8421 && rs->buf[0] != 'x') /* New: unavailable register value. */ 8422 { 8423 remote_debug_printf ("Bad register packet; fetching a new packet"); 8424 getpkt (&rs->buf, 0); 8425 } 8426 8427 buf_len = strlen (rs->buf.data ()); 8428 8429 /* Sanity check the received packet. */ 8430 if (buf_len % 2 != 0) 8431 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf.data ()); 8432 8433 return buf_len / 2; 8434 } 8435 8436 void 8437 remote_target::process_g_packet (struct regcache *regcache) 8438 { 8439 struct gdbarch *gdbarch = regcache->arch (); 8440 struct remote_state *rs = get_remote_state (); 8441 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch); 8442 int i, buf_len; 8443 char *p; 8444 char *regs; 8445 8446 buf_len = strlen (rs->buf.data ()); 8447 8448 /* Further sanity checks, with knowledge of the architecture. */ 8449 if (buf_len > 2 * rsa->sizeof_g_packet) 8450 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d " 8451 "bytes): %s"), 8452 rsa->sizeof_g_packet, buf_len / 2, 8453 rs->buf.data ()); 8454 8455 /* Save the size of the packet sent to us by the target. It is used 8456 as a heuristic when determining the max size of packets that the 8457 target can safely receive. */ 8458 if (rsa->actual_register_packet_size == 0) 8459 rsa->actual_register_packet_size = buf_len; 8460 8461 /* If this is smaller than we guessed the 'g' packet would be, 8462 update our records. A 'g' reply that doesn't include a register's 8463 value implies either that the register is not available, or that 8464 the 'p' packet must be used. */ 8465 if (buf_len < 2 * rsa->sizeof_g_packet) 8466 { 8467 long sizeof_g_packet = buf_len / 2; 8468 8469 for (i = 0; i < gdbarch_num_regs (gdbarch); i++) 8470 { 8471 long offset = rsa->regs[i].offset; 8472 long reg_size = register_size (gdbarch, i); 8473 8474 if (rsa->regs[i].pnum == -1) 8475 continue; 8476 8477 if (offset >= sizeof_g_packet) 8478 rsa->regs[i].in_g_packet = 0; 8479 else if (offset + reg_size > sizeof_g_packet) 8480 error (_("Truncated register %d in remote 'g' packet"), i); 8481 else 8482 rsa->regs[i].in_g_packet = 1; 8483 } 8484 8485 /* Looks valid enough, we can assume this is the correct length 8486 for a 'g' packet. It's important not to adjust 8487 rsa->sizeof_g_packet if we have truncated registers otherwise 8488 this "if" won't be run the next time the method is called 8489 with a packet of the same size and one of the internal errors 8490 below will trigger instead. */ 8491 rsa->sizeof_g_packet = sizeof_g_packet; 8492 } 8493 8494 regs = (char *) alloca (rsa->sizeof_g_packet); 8495 8496 /* Unimplemented registers read as all bits zero. */ 8497 memset (regs, 0, rsa->sizeof_g_packet); 8498 8499 /* Reply describes registers byte by byte, each byte encoded as two 8500 hex characters. Suck them all up, then supply them to the 8501 register cacheing/storage mechanism. */ 8502 8503 p = rs->buf.data (); 8504 for (i = 0; i < rsa->sizeof_g_packet; i++) 8505 { 8506 if (p[0] == 0 || p[1] == 0) 8507 /* This shouldn't happen - we adjusted sizeof_g_packet above. */ 8508 internal_error (__FILE__, __LINE__, 8509 _("unexpected end of 'g' packet reply")); 8510 8511 if (p[0] == 'x' && p[1] == 'x') 8512 regs[i] = 0; /* 'x' */ 8513 else 8514 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]); 8515 p += 2; 8516 } 8517 8518 for (i = 0; i < gdbarch_num_regs (gdbarch); i++) 8519 { 8520 struct packet_reg *r = &rsa->regs[i]; 8521 long reg_size = register_size (gdbarch, i); 8522 8523 if (r->in_g_packet) 8524 { 8525 if ((r->offset + reg_size) * 2 > strlen (rs->buf.data ())) 8526 /* This shouldn't happen - we adjusted in_g_packet above. */ 8527 internal_error (__FILE__, __LINE__, 8528 _("unexpected end of 'g' packet reply")); 8529 else if (rs->buf[r->offset * 2] == 'x') 8530 { 8531 gdb_assert (r->offset * 2 < strlen (rs->buf.data ())); 8532 /* The register isn't available, mark it as such (at 8533 the same time setting the value to zero). */ 8534 regcache->raw_supply (r->regnum, NULL); 8535 } 8536 else 8537 regcache->raw_supply (r->regnum, regs + r->offset); 8538 } 8539 } 8540 } 8541 8542 void 8543 remote_target::fetch_registers_using_g (struct regcache *regcache) 8544 { 8545 send_g_packet (); 8546 process_g_packet (regcache); 8547 } 8548 8549 /* Make the remote selected traceframe match GDB's selected 8550 traceframe. */ 8551 8552 void 8553 remote_target::set_remote_traceframe () 8554 { 8555 int newnum; 8556 struct remote_state *rs = get_remote_state (); 8557 8558 if (rs->remote_traceframe_number == get_traceframe_number ()) 8559 return; 8560 8561 /* Avoid recursion, remote_trace_find calls us again. */ 8562 rs->remote_traceframe_number = get_traceframe_number (); 8563 8564 newnum = target_trace_find (tfind_number, 8565 get_traceframe_number (), 0, 0, NULL); 8566 8567 /* Should not happen. If it does, all bets are off. */ 8568 if (newnum != get_traceframe_number ()) 8569 warning (_("could not set remote traceframe")); 8570 } 8571 8572 void 8573 remote_target::fetch_registers (struct regcache *regcache, int regnum) 8574 { 8575 struct gdbarch *gdbarch = regcache->arch (); 8576 struct remote_state *rs = get_remote_state (); 8577 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch); 8578 int i; 8579 8580 set_remote_traceframe (); 8581 set_general_thread (regcache->ptid ()); 8582 8583 if (regnum >= 0) 8584 { 8585 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum); 8586 8587 gdb_assert (reg != NULL); 8588 8589 /* If this register might be in the 'g' packet, try that first - 8590 we are likely to read more than one register. If this is the 8591 first 'g' packet, we might be overly optimistic about its 8592 contents, so fall back to 'p'. */ 8593 if (reg->in_g_packet) 8594 { 8595 fetch_registers_using_g (regcache); 8596 if (reg->in_g_packet) 8597 return; 8598 } 8599 8600 if (fetch_register_using_p (regcache, reg)) 8601 return; 8602 8603 /* This register is not available. */ 8604 regcache->raw_supply (reg->regnum, NULL); 8605 8606 return; 8607 } 8608 8609 fetch_registers_using_g (regcache); 8610 8611 for (i = 0; i < gdbarch_num_regs (gdbarch); i++) 8612 if (!rsa->regs[i].in_g_packet) 8613 if (!fetch_register_using_p (regcache, &rsa->regs[i])) 8614 { 8615 /* This register is not available. */ 8616 regcache->raw_supply (i, NULL); 8617 } 8618 } 8619 8620 /* Prepare to store registers. Since we may send them all (using a 8621 'G' request), we have to read out the ones we don't want to change 8622 first. */ 8623 8624 void 8625 remote_target::prepare_to_store (struct regcache *regcache) 8626 { 8627 struct remote_state *rs = get_remote_state (); 8628 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ()); 8629 int i; 8630 8631 /* Make sure the entire registers array is valid. */ 8632 switch (packet_support (PACKET_P)) 8633 { 8634 case PACKET_DISABLE: 8635 case PACKET_SUPPORT_UNKNOWN: 8636 /* Make sure all the necessary registers are cached. */ 8637 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++) 8638 if (rsa->regs[i].in_g_packet) 8639 regcache->raw_update (rsa->regs[i].regnum); 8640 break; 8641 case PACKET_ENABLE: 8642 break; 8643 } 8644 } 8645 8646 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF 8647 packet was not recognized. */ 8648 8649 int 8650 remote_target::store_register_using_P (const struct regcache *regcache, 8651 packet_reg *reg) 8652 { 8653 struct gdbarch *gdbarch = regcache->arch (); 8654 struct remote_state *rs = get_remote_state (); 8655 /* Try storing a single register. */ 8656 char *buf = rs->buf.data (); 8657 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum)); 8658 char *p; 8659 8660 if (packet_support (PACKET_P) == PACKET_DISABLE) 8661 return 0; 8662 8663 if (reg->pnum == -1) 8664 return 0; 8665 8666 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0)); 8667 p = buf + strlen (buf); 8668 regcache->raw_collect (reg->regnum, regp); 8669 bin2hex (regp, p, register_size (gdbarch, reg->regnum)); 8670 putpkt (rs->buf); 8671 getpkt (&rs->buf, 0); 8672 8673 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P])) 8674 { 8675 case PACKET_OK: 8676 return 1; 8677 case PACKET_ERROR: 8678 error (_("Could not write register \"%s\"; remote failure reply '%s'"), 8679 gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ()); 8680 case PACKET_UNKNOWN: 8681 return 0; 8682 default: 8683 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok")); 8684 } 8685 } 8686 8687 /* Store register REGNUM, or all registers if REGNUM == -1, from the 8688 contents of the register cache buffer. FIXME: ignores errors. */ 8689 8690 void 8691 remote_target::store_registers_using_G (const struct regcache *regcache) 8692 { 8693 struct remote_state *rs = get_remote_state (); 8694 remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ()); 8695 gdb_byte *regs; 8696 char *p; 8697 8698 /* Extract all the registers in the regcache copying them into a 8699 local buffer. */ 8700 { 8701 int i; 8702 8703 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet); 8704 memset (regs, 0, rsa->sizeof_g_packet); 8705 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++) 8706 { 8707 struct packet_reg *r = &rsa->regs[i]; 8708 8709 if (r->in_g_packet) 8710 regcache->raw_collect (r->regnum, regs + r->offset); 8711 } 8712 } 8713 8714 /* Command describes registers byte by byte, 8715 each byte encoded as two hex characters. */ 8716 p = rs->buf.data (); 8717 *p++ = 'G'; 8718 bin2hex (regs, p, rsa->sizeof_g_packet); 8719 putpkt (rs->buf); 8720 getpkt (&rs->buf, 0); 8721 if (packet_check_result (rs->buf) == PACKET_ERROR) 8722 error (_("Could not write registers; remote failure reply '%s'"), 8723 rs->buf.data ()); 8724 } 8725 8726 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents 8727 of the register cache buffer. FIXME: ignores errors. */ 8728 8729 void 8730 remote_target::store_registers (struct regcache *regcache, int regnum) 8731 { 8732 struct gdbarch *gdbarch = regcache->arch (); 8733 struct remote_state *rs = get_remote_state (); 8734 remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch); 8735 int i; 8736 8737 set_remote_traceframe (); 8738 set_general_thread (regcache->ptid ()); 8739 8740 if (regnum >= 0) 8741 { 8742 packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum); 8743 8744 gdb_assert (reg != NULL); 8745 8746 /* Always prefer to store registers using the 'P' packet if 8747 possible; we often change only a small number of registers. 8748 Sometimes we change a larger number; we'd need help from a 8749 higher layer to know to use 'G'. */ 8750 if (store_register_using_P (regcache, reg)) 8751 return; 8752 8753 /* For now, don't complain if we have no way to write the 8754 register. GDB loses track of unavailable registers too 8755 easily. Some day, this may be an error. We don't have 8756 any way to read the register, either... */ 8757 if (!reg->in_g_packet) 8758 return; 8759 8760 store_registers_using_G (regcache); 8761 return; 8762 } 8763 8764 store_registers_using_G (regcache); 8765 8766 for (i = 0; i < gdbarch_num_regs (gdbarch); i++) 8767 if (!rsa->regs[i].in_g_packet) 8768 if (!store_register_using_P (regcache, &rsa->regs[i])) 8769 /* See above for why we do not issue an error here. */ 8770 continue; 8771 } 8772 8773 8774 /* Return the number of hex digits in num. */ 8775 8776 static int 8777 hexnumlen (ULONGEST num) 8778 { 8779 int i; 8780 8781 for (i = 0; num != 0; i++) 8782 num >>= 4; 8783 8784 return std::max (i, 1); 8785 } 8786 8787 /* Set BUF to the minimum number of hex digits representing NUM. */ 8788 8789 static int 8790 hexnumstr (char *buf, ULONGEST num) 8791 { 8792 int len = hexnumlen (num); 8793 8794 return hexnumnstr (buf, num, len); 8795 } 8796 8797 8798 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */ 8799 8800 static int 8801 hexnumnstr (char *buf, ULONGEST num, int width) 8802 { 8803 int i; 8804 8805 buf[width] = '\0'; 8806 8807 for (i = width - 1; i >= 0; i--) 8808 { 8809 buf[i] = "0123456789abcdef"[(num & 0xf)]; 8810 num >>= 4; 8811 } 8812 8813 return width; 8814 } 8815 8816 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */ 8817 8818 static CORE_ADDR 8819 remote_address_masked (CORE_ADDR addr) 8820 { 8821 unsigned int address_size = remote_address_size; 8822 8823 /* If "remoteaddresssize" was not set, default to target address size. */ 8824 if (!address_size) 8825 address_size = gdbarch_addr_bit (target_gdbarch ()); 8826 8827 if (address_size > 0 8828 && address_size < (sizeof (ULONGEST) * 8)) 8829 { 8830 /* Only create a mask when that mask can safely be constructed 8831 in a ULONGEST variable. */ 8832 ULONGEST mask = 1; 8833 8834 mask = (mask << address_size) - 1; 8835 addr &= mask; 8836 } 8837 return addr; 8838 } 8839 8840 /* Determine whether the remote target supports binary downloading. 8841 This is accomplished by sending a no-op memory write of zero length 8842 to the target at the specified address. It does not suffice to send 8843 the whole packet, since many stubs strip the eighth bit and 8844 subsequently compute a wrong checksum, which causes real havoc with 8845 remote_write_bytes. 8846 8847 NOTE: This can still lose if the serial line is not eight-bit 8848 clean. In cases like this, the user should clear "remote 8849 X-packet". */ 8850 8851 void 8852 remote_target::check_binary_download (CORE_ADDR addr) 8853 { 8854 struct remote_state *rs = get_remote_state (); 8855 8856 switch (packet_support (PACKET_X)) 8857 { 8858 case PACKET_DISABLE: 8859 break; 8860 case PACKET_ENABLE: 8861 break; 8862 case PACKET_SUPPORT_UNKNOWN: 8863 { 8864 char *p; 8865 8866 p = rs->buf.data (); 8867 *p++ = 'X'; 8868 p += hexnumstr (p, (ULONGEST) addr); 8869 *p++ = ','; 8870 p += hexnumstr (p, (ULONGEST) 0); 8871 *p++ = ':'; 8872 *p = '\0'; 8873 8874 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ())); 8875 getpkt (&rs->buf, 0); 8876 8877 if (rs->buf[0] == '\0') 8878 { 8879 remote_debug_printf ("binary downloading NOT supported by target"); 8880 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE; 8881 } 8882 else 8883 { 8884 remote_debug_printf ("binary downloading supported by target"); 8885 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE; 8886 } 8887 break; 8888 } 8889 } 8890 } 8891 8892 /* Helper function to resize the payload in order to try to get a good 8893 alignment. We try to write an amount of data such that the next write will 8894 start on an address aligned on REMOTE_ALIGN_WRITES. */ 8895 8896 static int 8897 align_for_efficient_write (int todo, CORE_ADDR memaddr) 8898 { 8899 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr; 8900 } 8901 8902 /* Write memory data directly to the remote machine. 8903 This does not inform the data cache; the data cache uses this. 8904 HEADER is the starting part of the packet. 8905 MEMADDR is the address in the remote memory space. 8906 MYADDR is the address of the buffer in our space. 8907 LEN_UNITS is the number of addressable units to write. 8908 UNIT_SIZE is the length in bytes of an addressable unit. 8909 PACKET_FORMAT should be either 'X' or 'M', and indicates if we 8910 should send data as binary ('X'), or hex-encoded ('M'). 8911 8912 The function creates packet of the form 8913 <HEADER><ADDRESS>,<LENGTH>:<DATA> 8914 8915 where encoding of <DATA> is terminated by PACKET_FORMAT. 8916 8917 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma 8918 are omitted. 8919 8920 Return the transferred status, error or OK (an 8921 'enum target_xfer_status' value). Save the number of addressable units 8922 transferred in *XFERED_LEN_UNITS. Only transfer a single packet. 8923 8924 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an 8925 exchange between gdb and the stub could look like (?? in place of the 8926 checksum): 8927 8928 -> $m1000,4#?? 8929 <- aaaabbbbccccdddd 8930 8931 -> $M1000,3:eeeeffffeeee#?? 8932 <- OK 8933 8934 -> $m1000,4#?? 8935 <- eeeeffffeeeedddd */ 8936 8937 target_xfer_status 8938 remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr, 8939 const gdb_byte *myaddr, 8940 ULONGEST len_units, 8941 int unit_size, 8942 ULONGEST *xfered_len_units, 8943 char packet_format, int use_length) 8944 { 8945 struct remote_state *rs = get_remote_state (); 8946 char *p; 8947 char *plen = NULL; 8948 int plenlen = 0; 8949 int todo_units; 8950 int units_written; 8951 int payload_capacity_bytes; 8952 int payload_length_bytes; 8953 8954 if (packet_format != 'X' && packet_format != 'M') 8955 internal_error (__FILE__, __LINE__, 8956 _("remote_write_bytes_aux: bad packet format")); 8957 8958 if (len_units == 0) 8959 return TARGET_XFER_EOF; 8960 8961 payload_capacity_bytes = get_memory_write_packet_size (); 8962 8963 /* The packet buffer will be large enough for the payload; 8964 get_memory_packet_size ensures this. */ 8965 rs->buf[0] = '\0'; 8966 8967 /* Compute the size of the actual payload by subtracting out the 8968 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */ 8969 8970 payload_capacity_bytes -= strlen ("$,:#NN"); 8971 if (!use_length) 8972 /* The comma won't be used. */ 8973 payload_capacity_bytes += 1; 8974 payload_capacity_bytes -= strlen (header); 8975 payload_capacity_bytes -= hexnumlen (memaddr); 8976 8977 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */ 8978 8979 strcat (rs->buf.data (), header); 8980 p = rs->buf.data () + strlen (header); 8981 8982 /* Compute a best guess of the number of bytes actually transfered. */ 8983 if (packet_format == 'X') 8984 { 8985 /* Best guess at number of bytes that will fit. */ 8986 todo_units = std::min (len_units, 8987 (ULONGEST) payload_capacity_bytes / unit_size); 8988 if (use_length) 8989 payload_capacity_bytes -= hexnumlen (todo_units); 8990 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size); 8991 } 8992 else 8993 { 8994 /* Number of bytes that will fit. */ 8995 todo_units 8996 = std::min (len_units, 8997 (ULONGEST) (payload_capacity_bytes / unit_size) / 2); 8998 if (use_length) 8999 payload_capacity_bytes -= hexnumlen (todo_units); 9000 todo_units = std::min (todo_units, 9001 (payload_capacity_bytes / unit_size) / 2); 9002 } 9003 9004 if (todo_units <= 0) 9005 internal_error (__FILE__, __LINE__, 9006 _("minimum packet size too small to write data")); 9007 9008 /* If we already need another packet, then try to align the end 9009 of this packet to a useful boundary. */ 9010 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units) 9011 todo_units = align_for_efficient_write (todo_units, memaddr); 9012 9013 /* Append "<memaddr>". */ 9014 memaddr = remote_address_masked (memaddr); 9015 p += hexnumstr (p, (ULONGEST) memaddr); 9016 9017 if (use_length) 9018 { 9019 /* Append ",". */ 9020 *p++ = ','; 9021 9022 /* Append the length and retain its location and size. It may need to be 9023 adjusted once the packet body has been created. */ 9024 plen = p; 9025 plenlen = hexnumstr (p, (ULONGEST) todo_units); 9026 p += plenlen; 9027 } 9028 9029 /* Append ":". */ 9030 *p++ = ':'; 9031 *p = '\0'; 9032 9033 /* Append the packet body. */ 9034 if (packet_format == 'X') 9035 { 9036 /* Binary mode. Send target system values byte by byte, in 9037 increasing byte addresses. Only escape certain critical 9038 characters. */ 9039 payload_length_bytes = 9040 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p, 9041 &units_written, payload_capacity_bytes); 9042 9043 /* If not all TODO units fit, then we'll need another packet. Make 9044 a second try to keep the end of the packet aligned. Don't do 9045 this if the packet is tiny. */ 9046 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES) 9047 { 9048 int new_todo_units; 9049 9050 new_todo_units = align_for_efficient_write (units_written, memaddr); 9051 9052 if (new_todo_units != units_written) 9053 payload_length_bytes = 9054 remote_escape_output (myaddr, new_todo_units, unit_size, 9055 (gdb_byte *) p, &units_written, 9056 payload_capacity_bytes); 9057 } 9058 9059 p += payload_length_bytes; 9060 if (use_length && units_written < todo_units) 9061 { 9062 /* Escape chars have filled up the buffer prematurely, 9063 and we have actually sent fewer units than planned. 9064 Fix-up the length field of the packet. Use the same 9065 number of characters as before. */ 9066 plen += hexnumnstr (plen, (ULONGEST) units_written, 9067 plenlen); 9068 *plen = ':'; /* overwrite \0 from hexnumnstr() */ 9069 } 9070 } 9071 else 9072 { 9073 /* Normal mode: Send target system values byte by byte, in 9074 increasing byte addresses. Each byte is encoded as a two hex 9075 value. */ 9076 p += 2 * bin2hex (myaddr, p, todo_units * unit_size); 9077 units_written = todo_units; 9078 } 9079 9080 putpkt_binary (rs->buf.data (), (int) (p - rs->buf.data ())); 9081 getpkt (&rs->buf, 0); 9082 9083 if (rs->buf[0] == 'E') 9084 return TARGET_XFER_E_IO; 9085 9086 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to 9087 send fewer units than we'd planned. */ 9088 *xfered_len_units = (ULONGEST) units_written; 9089 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF; 9090 } 9091 9092 /* Write memory data directly to the remote machine. 9093 This does not inform the data cache; the data cache uses this. 9094 MEMADDR is the address in the remote memory space. 9095 MYADDR is the address of the buffer in our space. 9096 LEN is the number of bytes. 9097 9098 Return the transferred status, error or OK (an 9099 'enum target_xfer_status' value). Save the number of bytes 9100 transferred in *XFERED_LEN. Only transfer a single packet. */ 9101 9102 target_xfer_status 9103 remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, 9104 ULONGEST len, int unit_size, 9105 ULONGEST *xfered_len) 9106 { 9107 const char *packet_format = NULL; 9108 9109 /* Check whether the target supports binary download. */ 9110 check_binary_download (memaddr); 9111 9112 switch (packet_support (PACKET_X)) 9113 { 9114 case PACKET_ENABLE: 9115 packet_format = "X"; 9116 break; 9117 case PACKET_DISABLE: 9118 packet_format = "M"; 9119 break; 9120 case PACKET_SUPPORT_UNKNOWN: 9121 internal_error (__FILE__, __LINE__, 9122 _("remote_write_bytes: bad internal state")); 9123 default: 9124 internal_error (__FILE__, __LINE__, _("bad switch")); 9125 } 9126 9127 return remote_write_bytes_aux (packet_format, 9128 memaddr, myaddr, len, unit_size, xfered_len, 9129 packet_format[0], 1); 9130 } 9131 9132 /* Read memory data directly from the remote machine. 9133 This does not use the data cache; the data cache uses this. 9134 MEMADDR is the address in the remote memory space. 9135 MYADDR is the address of the buffer in our space. 9136 LEN_UNITS is the number of addressable memory units to read.. 9137 UNIT_SIZE is the length in bytes of an addressable unit. 9138 9139 Return the transferred status, error or OK (an 9140 'enum target_xfer_status' value). Save the number of bytes 9141 transferred in *XFERED_LEN_UNITS. 9142 9143 See the comment of remote_write_bytes_aux for an example of 9144 memory read/write exchange between gdb and the stub. */ 9145 9146 target_xfer_status 9147 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, 9148 ULONGEST len_units, 9149 int unit_size, ULONGEST *xfered_len_units) 9150 { 9151 struct remote_state *rs = get_remote_state (); 9152 int buf_size_bytes; /* Max size of packet output buffer. */ 9153 char *p; 9154 int todo_units; 9155 int decoded_bytes; 9156 9157 buf_size_bytes = get_memory_read_packet_size (); 9158 /* The packet buffer will be large enough for the payload; 9159 get_memory_packet_size ensures this. */ 9160 9161 /* Number of units that will fit. */ 9162 todo_units = std::min (len_units, 9163 (ULONGEST) (buf_size_bytes / unit_size) / 2); 9164 9165 /* Construct "m"<memaddr>","<len>". */ 9166 memaddr = remote_address_masked (memaddr); 9167 p = rs->buf.data (); 9168 *p++ = 'm'; 9169 p += hexnumstr (p, (ULONGEST) memaddr); 9170 *p++ = ','; 9171 p += hexnumstr (p, (ULONGEST) todo_units); 9172 *p = '\0'; 9173 putpkt (rs->buf); 9174 getpkt (&rs->buf, 0); 9175 if (rs->buf[0] == 'E' 9176 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2]) 9177 && rs->buf[3] == '\0') 9178 return TARGET_XFER_E_IO; 9179 /* Reply describes memory byte by byte, each byte encoded as two hex 9180 characters. */ 9181 p = rs->buf.data (); 9182 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size); 9183 /* Return what we have. Let higher layers handle partial reads. */ 9184 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size); 9185 return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF; 9186 } 9187 9188 /* Using the set of read-only target sections of remote, read live 9189 read-only memory. 9190 9191 For interface/parameters/return description see target.h, 9192 to_xfer_partial. */ 9193 9194 target_xfer_status 9195 remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf, 9196 ULONGEST memaddr, 9197 ULONGEST len, 9198 int unit_size, 9199 ULONGEST *xfered_len) 9200 { 9201 const struct target_section *secp; 9202 9203 secp = target_section_by_addr (this, memaddr); 9204 if (secp != NULL 9205 && (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY)) 9206 { 9207 ULONGEST memend = memaddr + len; 9208 9209 const target_section_table *table = target_get_section_table (this); 9210 for (const target_section &p : *table) 9211 { 9212 if (memaddr >= p.addr) 9213 { 9214 if (memend <= p.endaddr) 9215 { 9216 /* Entire transfer is within this section. */ 9217 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size, 9218 xfered_len); 9219 } 9220 else if (memaddr >= p.endaddr) 9221 { 9222 /* This section ends before the transfer starts. */ 9223 continue; 9224 } 9225 else 9226 { 9227 /* This section overlaps the transfer. Just do half. */ 9228 len = p.endaddr - memaddr; 9229 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size, 9230 xfered_len); 9231 } 9232 } 9233 } 9234 } 9235 9236 return TARGET_XFER_EOF; 9237 } 9238 9239 /* Similar to remote_read_bytes_1, but it reads from the remote stub 9240 first if the requested memory is unavailable in traceframe. 9241 Otherwise, fall back to remote_read_bytes_1. */ 9242 9243 target_xfer_status 9244 remote_target::remote_read_bytes (CORE_ADDR memaddr, 9245 gdb_byte *myaddr, ULONGEST len, int unit_size, 9246 ULONGEST *xfered_len) 9247 { 9248 if (len == 0) 9249 return TARGET_XFER_EOF; 9250 9251 if (get_traceframe_number () != -1) 9252 { 9253 std::vector<mem_range> available; 9254 9255 /* If we fail to get the set of available memory, then the 9256 target does not support querying traceframe info, and so we 9257 attempt reading from the traceframe anyway (assuming the 9258 target implements the old QTro packet then). */ 9259 if (traceframe_available_memory (&available, memaddr, len)) 9260 { 9261 if (available.empty () || available[0].start != memaddr) 9262 { 9263 enum target_xfer_status res; 9264 9265 /* Don't read into the traceframe's available 9266 memory. */ 9267 if (!available.empty ()) 9268 { 9269 LONGEST oldlen = len; 9270 9271 len = available[0].start - memaddr; 9272 gdb_assert (len <= oldlen); 9273 } 9274 9275 /* This goes through the topmost target again. */ 9276 res = remote_xfer_live_readonly_partial (myaddr, memaddr, 9277 len, unit_size, xfered_len); 9278 if (res == TARGET_XFER_OK) 9279 return TARGET_XFER_OK; 9280 else 9281 { 9282 /* No use trying further, we know some memory starting 9283 at MEMADDR isn't available. */ 9284 *xfered_len = len; 9285 return (*xfered_len != 0) ? 9286 TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF; 9287 } 9288 } 9289 9290 /* Don't try to read more than how much is available, in 9291 case the target implements the deprecated QTro packet to 9292 cater for older GDBs (the target's knowledge of read-only 9293 sections may be outdated by now). */ 9294 len = available[0].length; 9295 } 9296 } 9297 9298 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len); 9299 } 9300 9301 9302 9303 /* Sends a packet with content determined by the printf format string 9304 FORMAT and the remaining arguments, then gets the reply. Returns 9305 whether the packet was a success, a failure, or unknown. */ 9306 9307 packet_result 9308 remote_target::remote_send_printf (const char *format, ...) 9309 { 9310 struct remote_state *rs = get_remote_state (); 9311 int max_size = get_remote_packet_size (); 9312 va_list ap; 9313 9314 va_start (ap, format); 9315 9316 rs->buf[0] = '\0'; 9317 int size = vsnprintf (rs->buf.data (), max_size, format, ap); 9318 9319 va_end (ap); 9320 9321 if (size >= max_size) 9322 internal_error (__FILE__, __LINE__, _("Too long remote packet.")); 9323 9324 if (putpkt (rs->buf) < 0) 9325 error (_("Communication problem with target.")); 9326 9327 rs->buf[0] = '\0'; 9328 getpkt (&rs->buf, 0); 9329 9330 return packet_check_result (rs->buf); 9331 } 9332 9333 /* Flash writing can take quite some time. We'll set 9334 effectively infinite timeout for flash operations. 9335 In future, we'll need to decide on a better approach. */ 9336 static const int remote_flash_timeout = 1000; 9337 9338 void 9339 remote_target::flash_erase (ULONGEST address, LONGEST length) 9340 { 9341 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; 9342 enum packet_result ret; 9343 scoped_restore restore_timeout 9344 = make_scoped_restore (&remote_timeout, remote_flash_timeout); 9345 9346 ret = remote_send_printf ("vFlashErase:%s,%s", 9347 phex (address, addr_size), 9348 phex (length, 4)); 9349 switch (ret) 9350 { 9351 case PACKET_UNKNOWN: 9352 error (_("Remote target does not support flash erase")); 9353 case PACKET_ERROR: 9354 error (_("Error erasing flash with vFlashErase packet")); 9355 default: 9356 break; 9357 } 9358 } 9359 9360 target_xfer_status 9361 remote_target::remote_flash_write (ULONGEST address, 9362 ULONGEST length, ULONGEST *xfered_len, 9363 const gdb_byte *data) 9364 { 9365 scoped_restore restore_timeout 9366 = make_scoped_restore (&remote_timeout, remote_flash_timeout); 9367 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1, 9368 xfered_len,'X', 0); 9369 } 9370 9371 void 9372 remote_target::flash_done () 9373 { 9374 int ret; 9375 9376 scoped_restore restore_timeout 9377 = make_scoped_restore (&remote_timeout, remote_flash_timeout); 9378 9379 ret = remote_send_printf ("vFlashDone"); 9380 9381 switch (ret) 9382 { 9383 case PACKET_UNKNOWN: 9384 error (_("Remote target does not support vFlashDone")); 9385 case PACKET_ERROR: 9386 error (_("Error finishing flash operation")); 9387 default: 9388 break; 9389 } 9390 } 9391 9392 void 9393 remote_target::files_info () 9394 { 9395 puts_filtered ("Debugging a target over a serial line.\n"); 9396 } 9397 9398 /* Stuff for dealing with the packets which are part of this protocol. 9399 See comment at top of file for details. */ 9400 9401 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR 9402 error to higher layers. Called when a serial error is detected. 9403 The exception message is STRING, followed by a colon and a blank, 9404 the system error message for errno at function entry and final dot 9405 for output compatibility with throw_perror_with_name. */ 9406 9407 static void 9408 unpush_and_perror (remote_target *target, const char *string) 9409 { 9410 int saved_errno = errno; 9411 9412 remote_unpush_target (target); 9413 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string, 9414 safe_strerror (saved_errno)); 9415 } 9416 9417 /* Read a single character from the remote end. The current quit 9418 handler is overridden to avoid quitting in the middle of packet 9419 sequence, as that would break communication with the remote server. 9420 See remote_serial_quit_handler for more detail. */ 9421 9422 int 9423 remote_target::readchar (int timeout) 9424 { 9425 int ch; 9426 struct remote_state *rs = get_remote_state (); 9427 9428 { 9429 scoped_restore restore_quit_target 9430 = make_scoped_restore (&curr_quit_handler_target, this); 9431 scoped_restore restore_quit 9432 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler); 9433 9434 rs->got_ctrlc_during_io = 0; 9435 9436 ch = serial_readchar (rs->remote_desc, timeout); 9437 9438 if (rs->got_ctrlc_during_io) 9439 set_quit_flag (); 9440 } 9441 9442 if (ch >= 0) 9443 return ch; 9444 9445 switch ((enum serial_rc) ch) 9446 { 9447 case SERIAL_EOF: 9448 remote_unpush_target (this); 9449 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed")); 9450 /* no return */ 9451 case SERIAL_ERROR: 9452 unpush_and_perror (this, _("Remote communication error. " 9453 "Target disconnected.")); 9454 /* no return */ 9455 case SERIAL_TIMEOUT: 9456 break; 9457 } 9458 return ch; 9459 } 9460 9461 /* Wrapper for serial_write that closes the target and throws if 9462 writing fails. The current quit handler is overridden to avoid 9463 quitting in the middle of packet sequence, as that would break 9464 communication with the remote server. See 9465 remote_serial_quit_handler for more detail. */ 9466 9467 void 9468 remote_target::remote_serial_write (const char *str, int len) 9469 { 9470 struct remote_state *rs = get_remote_state (); 9471 9472 scoped_restore restore_quit_target 9473 = make_scoped_restore (&curr_quit_handler_target, this); 9474 scoped_restore restore_quit 9475 = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler); 9476 9477 rs->got_ctrlc_during_io = 0; 9478 9479 if (serial_write (rs->remote_desc, str, len)) 9480 { 9481 unpush_and_perror (this, _("Remote communication error. " 9482 "Target disconnected.")); 9483 } 9484 9485 if (rs->got_ctrlc_during_io) 9486 set_quit_flag (); 9487 } 9488 9489 /* Return a string representing an escaped version of BUF, of len N. 9490 E.g. \n is converted to \\n, \t to \\t, etc. */ 9491 9492 static std::string 9493 escape_buffer (const char *buf, int n) 9494 { 9495 string_file stb; 9496 9497 stb.putstrn (buf, n, '\\'); 9498 return std::move (stb.string ()); 9499 } 9500 9501 /* Display a null-terminated packet on stdout, for debugging, using C 9502 string notation. */ 9503 9504 static void 9505 print_packet (const char *buf) 9506 { 9507 puts_filtered ("\""); 9508 fputstr_filtered (buf, '"', gdb_stdout); 9509 puts_filtered ("\""); 9510 } 9511 9512 int 9513 remote_target::putpkt (const char *buf) 9514 { 9515 return putpkt_binary (buf, strlen (buf)); 9516 } 9517 9518 /* Wrapper around remote_target::putpkt to avoid exporting 9519 remote_target. */ 9520 9521 int 9522 putpkt (remote_target *remote, const char *buf) 9523 { 9524 return remote->putpkt (buf); 9525 } 9526 9527 /* Send a packet to the remote machine, with error checking. The data 9528 of the packet is in BUF. The string in BUF can be at most 9529 get_remote_packet_size () - 5 to account for the $, # and checksum, 9530 and for a possible /0 if we are debugging (remote_debug) and want 9531 to print the sent packet as a string. */ 9532 9533 int 9534 remote_target::putpkt_binary (const char *buf, int cnt) 9535 { 9536 struct remote_state *rs = get_remote_state (); 9537 int i; 9538 unsigned char csum = 0; 9539 gdb::def_vector<char> data (cnt + 6); 9540 char *buf2 = data.data (); 9541 9542 int ch; 9543 int tcount = 0; 9544 char *p; 9545 9546 /* Catch cases like trying to read memory or listing threads while 9547 we're waiting for a stop reply. The remote server wouldn't be 9548 ready to handle this request, so we'd hang and timeout. We don't 9549 have to worry about this in synchronous mode, because in that 9550 case it's not possible to issue a command while the target is 9551 running. This is not a problem in non-stop mode, because in that 9552 case, the stub is always ready to process serial input. */ 9553 if (!target_is_non_stop_p () 9554 && target_is_async_p () 9555 && rs->waiting_for_stop_reply) 9556 { 9557 error (_("Cannot execute this command while the target is running.\n" 9558 "Use the \"interrupt\" command to stop the target\n" 9559 "and then try again.")); 9560 } 9561 9562 /* We're sending out a new packet. Make sure we don't look at a 9563 stale cached response. */ 9564 rs->cached_wait_status = 0; 9565 9566 /* Copy the packet into buffer BUF2, encapsulating it 9567 and giving it a checksum. */ 9568 9569 p = buf2; 9570 *p++ = '$'; 9571 9572 for (i = 0; i < cnt; i++) 9573 { 9574 csum += buf[i]; 9575 *p++ = buf[i]; 9576 } 9577 *p++ = '#'; 9578 *p++ = tohex ((csum >> 4) & 0xf); 9579 *p++ = tohex (csum & 0xf); 9580 9581 /* Send it over and over until we get a positive ack. */ 9582 9583 while (1) 9584 { 9585 if (remote_debug) 9586 { 9587 *p = '\0'; 9588 9589 int len = (int) (p - buf2); 9590 int max_chars; 9591 9592 if (remote_packet_max_chars < 0) 9593 max_chars = len; 9594 else 9595 max_chars = remote_packet_max_chars; 9596 9597 std::string str 9598 = escape_buffer (buf2, std::min (len, max_chars)); 9599 9600 if (len > max_chars) 9601 remote_debug_printf_nofunc 9602 ("Sending packet: %s [%d bytes omitted]", str.c_str (), 9603 len - max_chars); 9604 else 9605 remote_debug_printf_nofunc ("Sending packet: %s", str.c_str ()); 9606 } 9607 remote_serial_write (buf2, p - buf2); 9608 9609 /* If this is a no acks version of the remote protocol, send the 9610 packet and move on. */ 9611 if (rs->noack_mode) 9612 break; 9613 9614 /* Read until either a timeout occurs (-2) or '+' is read. 9615 Handle any notification that arrives in the mean time. */ 9616 while (1) 9617 { 9618 ch = readchar (remote_timeout); 9619 9620 switch (ch) 9621 { 9622 case '+': 9623 remote_debug_printf_nofunc ("Received Ack"); 9624 return 1; 9625 case '-': 9626 remote_debug_printf_nofunc ("Received Nak"); 9627 /* FALLTHROUGH */ 9628 case SERIAL_TIMEOUT: 9629 tcount++; 9630 if (tcount > 3) 9631 return 0; 9632 break; /* Retransmit buffer. */ 9633 case '$': 9634 { 9635 remote_debug_printf ("Packet instead of Ack, ignoring it"); 9636 /* It's probably an old response sent because an ACK 9637 was lost. Gobble up the packet and ack it so it 9638 doesn't get retransmitted when we resend this 9639 packet. */ 9640 skip_frame (); 9641 remote_serial_write ("+", 1); 9642 continue; /* Now, go look for +. */ 9643 } 9644 9645 case '%': 9646 { 9647 int val; 9648 9649 /* If we got a notification, handle it, and go back to looking 9650 for an ack. */ 9651 /* We've found the start of a notification. Now 9652 collect the data. */ 9653 val = read_frame (&rs->buf); 9654 if (val >= 0) 9655 { 9656 remote_debug_printf_nofunc 9657 (" Notification received: %s", 9658 escape_buffer (rs->buf.data (), val).c_str ()); 9659 9660 handle_notification (rs->notif_state, rs->buf.data ()); 9661 /* We're in sync now, rewait for the ack. */ 9662 tcount = 0; 9663 } 9664 else 9665 remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177, 9666 rs->buf.data ()); 9667 continue; 9668 } 9669 /* fall-through */ 9670 default: 9671 remote_debug_printf_nofunc ("Junk: %c%s", ch & 0177, 9672 rs->buf.data ()); 9673 continue; 9674 } 9675 break; /* Here to retransmit. */ 9676 } 9677 9678 #if 0 9679 /* This is wrong. If doing a long backtrace, the user should be 9680 able to get out next time we call QUIT, without anything as 9681 violent as interrupt_query. If we want to provide a way out of 9682 here without getting to the next QUIT, it should be based on 9683 hitting ^C twice as in remote_wait. */ 9684 if (quit_flag) 9685 { 9686 quit_flag = 0; 9687 interrupt_query (); 9688 } 9689 #endif 9690 } 9691 9692 return 0; 9693 } 9694 9695 /* Come here after finding the start of a frame when we expected an 9696 ack. Do our best to discard the rest of this packet. */ 9697 9698 void 9699 remote_target::skip_frame () 9700 { 9701 int c; 9702 9703 while (1) 9704 { 9705 c = readchar (remote_timeout); 9706 switch (c) 9707 { 9708 case SERIAL_TIMEOUT: 9709 /* Nothing we can do. */ 9710 return; 9711 case '#': 9712 /* Discard the two bytes of checksum and stop. */ 9713 c = readchar (remote_timeout); 9714 if (c >= 0) 9715 c = readchar (remote_timeout); 9716 9717 return; 9718 case '*': /* Run length encoding. */ 9719 /* Discard the repeat count. */ 9720 c = readchar (remote_timeout); 9721 if (c < 0) 9722 return; 9723 break; 9724 default: 9725 /* A regular character. */ 9726 break; 9727 } 9728 } 9729 } 9730 9731 /* Come here after finding the start of the frame. Collect the rest 9732 into *BUF, verifying the checksum, length, and handling run-length 9733 compression. NUL terminate the buffer. If there is not enough room, 9734 expand *BUF. 9735 9736 Returns -1 on error, number of characters in buffer (ignoring the 9737 trailing NULL) on success. (could be extended to return one of the 9738 SERIAL status indications). */ 9739 9740 long 9741 remote_target::read_frame (gdb::char_vector *buf_p) 9742 { 9743 unsigned char csum; 9744 long bc; 9745 int c; 9746 char *buf = buf_p->data (); 9747 struct remote_state *rs = get_remote_state (); 9748 9749 csum = 0; 9750 bc = 0; 9751 9752 while (1) 9753 { 9754 c = readchar (remote_timeout); 9755 switch (c) 9756 { 9757 case SERIAL_TIMEOUT: 9758 remote_debug_printf ("Timeout in mid-packet, retrying"); 9759 return -1; 9760 9761 case '$': 9762 remote_debug_printf ("Saw new packet start in middle of old one"); 9763 return -1; /* Start a new packet, count retries. */ 9764 9765 case '#': 9766 { 9767 unsigned char pktcsum; 9768 int check_0 = 0; 9769 int check_1 = 0; 9770 9771 buf[bc] = '\0'; 9772 9773 check_0 = readchar (remote_timeout); 9774 if (check_0 >= 0) 9775 check_1 = readchar (remote_timeout); 9776 9777 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT) 9778 { 9779 remote_debug_printf ("Timeout in checksum, retrying"); 9780 return -1; 9781 } 9782 else if (check_0 < 0 || check_1 < 0) 9783 { 9784 remote_debug_printf ("Communication error in checksum"); 9785 return -1; 9786 } 9787 9788 /* Don't recompute the checksum; with no ack packets we 9789 don't have any way to indicate a packet retransmission 9790 is necessary. */ 9791 if (rs->noack_mode) 9792 return bc; 9793 9794 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1); 9795 if (csum == pktcsum) 9796 return bc; 9797 9798 remote_debug_printf 9799 ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s", 9800 pktcsum, csum, escape_buffer (buf, bc).c_str ()); 9801 9802 /* Number of characters in buffer ignoring trailing 9803 NULL. */ 9804 return -1; 9805 } 9806 case '*': /* Run length encoding. */ 9807 { 9808 int repeat; 9809 9810 csum += c; 9811 c = readchar (remote_timeout); 9812 csum += c; 9813 repeat = c - ' ' + 3; /* Compute repeat count. */ 9814 9815 /* The character before ``*'' is repeated. */ 9816 9817 if (repeat > 0 && repeat <= 255 && bc > 0) 9818 { 9819 if (bc + repeat - 1 >= buf_p->size () - 1) 9820 { 9821 /* Make some more room in the buffer. */ 9822 buf_p->resize (buf_p->size () + repeat); 9823 buf = buf_p->data (); 9824 } 9825 9826 memset (&buf[bc], buf[bc - 1], repeat); 9827 bc += repeat; 9828 continue; 9829 } 9830 9831 buf[bc] = '\0'; 9832 printf_filtered (_("Invalid run length encoding: %s\n"), buf); 9833 return -1; 9834 } 9835 default: 9836 if (bc >= buf_p->size () - 1) 9837 { 9838 /* Make some more room in the buffer. */ 9839 buf_p->resize (buf_p->size () * 2); 9840 buf = buf_p->data (); 9841 } 9842 9843 buf[bc++] = c; 9844 csum += c; 9845 continue; 9846 } 9847 } 9848 } 9849 9850 /* Set this to the maximum number of seconds to wait instead of waiting forever 9851 in target_wait(). If this timer times out, then it generates an error and 9852 the command is aborted. This replaces most of the need for timeouts in the 9853 GDB test suite, and makes it possible to distinguish between a hung target 9854 and one with slow communications. */ 9855 9856 static int watchdog = 0; 9857 static void 9858 show_watchdog (struct ui_file *file, int from_tty, 9859 struct cmd_list_element *c, const char *value) 9860 { 9861 fprintf_filtered (file, _("Watchdog timer is %s.\n"), value); 9862 } 9863 9864 /* Read a packet from the remote machine, with error checking, and 9865 store it in *BUF. Resize *BUF if necessary to hold the result. If 9866 FOREVER, wait forever rather than timing out; this is used (in 9867 synchronous mode) to wait for a target that is is executing user 9868 code to stop. */ 9869 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we 9870 don't have to change all the calls to getpkt to deal with the 9871 return value, because at the moment I don't know what the right 9872 thing to do it for those. */ 9873 9874 void 9875 remote_target::getpkt (gdb::char_vector *buf, int forever) 9876 { 9877 getpkt_sane (buf, forever); 9878 } 9879 9880 9881 /* Read a packet from the remote machine, with error checking, and 9882 store it in *BUF. Resize *BUF if necessary to hold the result. If 9883 FOREVER, wait forever rather than timing out; this is used (in 9884 synchronous mode) to wait for a target that is is executing user 9885 code to stop. If FOREVER == 0, this function is allowed to time 9886 out gracefully and return an indication of this to the caller. 9887 Otherwise return the number of bytes read. If EXPECTING_NOTIF, 9888 consider receiving a notification enough reason to return to the 9889 caller. *IS_NOTIF is an output boolean that indicates whether *BUF 9890 holds a notification or not (a regular packet). */ 9891 9892 int 9893 remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf, 9894 int forever, int expecting_notif, 9895 int *is_notif) 9896 { 9897 struct remote_state *rs = get_remote_state (); 9898 int c; 9899 int tries; 9900 int timeout; 9901 int val = -1; 9902 9903 /* We're reading a new response. Make sure we don't look at a 9904 previously cached response. */ 9905 rs->cached_wait_status = 0; 9906 9907 strcpy (buf->data (), "timeout"); 9908 9909 if (forever) 9910 timeout = watchdog > 0 ? watchdog : -1; 9911 else if (expecting_notif) 9912 timeout = 0; /* There should already be a char in the buffer. If 9913 not, bail out. */ 9914 else 9915 timeout = remote_timeout; 9916 9917 #define MAX_TRIES 3 9918 9919 /* Process any number of notifications, and then return when 9920 we get a packet. */ 9921 for (;;) 9922 { 9923 /* If we get a timeout or bad checksum, retry up to MAX_TRIES 9924 times. */ 9925 for (tries = 1; tries <= MAX_TRIES; tries++) 9926 { 9927 /* This can loop forever if the remote side sends us 9928 characters continuously, but if it pauses, we'll get 9929 SERIAL_TIMEOUT from readchar because of timeout. Then 9930 we'll count that as a retry. 9931 9932 Note that even when forever is set, we will only wait 9933 forever prior to the start of a packet. After that, we 9934 expect characters to arrive at a brisk pace. They should 9935 show up within remote_timeout intervals. */ 9936 do 9937 c = readchar (timeout); 9938 while (c != SERIAL_TIMEOUT && c != '$' && c != '%'); 9939 9940 if (c == SERIAL_TIMEOUT) 9941 { 9942 if (expecting_notif) 9943 return -1; /* Don't complain, it's normal to not get 9944 anything in this case. */ 9945 9946 if (forever) /* Watchdog went off? Kill the target. */ 9947 { 9948 remote_unpush_target (this); 9949 throw_error (TARGET_CLOSE_ERROR, 9950 _("Watchdog timeout has expired. " 9951 "Target detached.")); 9952 } 9953 9954 remote_debug_printf ("Timed out."); 9955 } 9956 else 9957 { 9958 /* We've found the start of a packet or notification. 9959 Now collect the data. */ 9960 val = read_frame (buf); 9961 if (val >= 0) 9962 break; 9963 } 9964 9965 remote_serial_write ("-", 1); 9966 } 9967 9968 if (tries > MAX_TRIES) 9969 { 9970 /* We have tried hard enough, and just can't receive the 9971 packet/notification. Give up. */ 9972 printf_unfiltered (_("Ignoring packet error, continuing...\n")); 9973 9974 /* Skip the ack char if we're in no-ack mode. */ 9975 if (!rs->noack_mode) 9976 remote_serial_write ("+", 1); 9977 return -1; 9978 } 9979 9980 /* If we got an ordinary packet, return that to our caller. */ 9981 if (c == '$') 9982 { 9983 if (remote_debug) 9984 { 9985 int max_chars; 9986 9987 if (remote_packet_max_chars < 0) 9988 max_chars = val; 9989 else 9990 max_chars = remote_packet_max_chars; 9991 9992 std::string str 9993 = escape_buffer (buf->data (), 9994 std::min (val, max_chars)); 9995 9996 if (val > max_chars) 9997 remote_debug_printf_nofunc 9998 ("Packet received: %s [%d bytes omitted]", str.c_str (), 9999 val - max_chars); 10000 else 10001 remote_debug_printf_nofunc ("Packet received: %s", 10002 str.c_str ()); 10003 } 10004 10005 /* Skip the ack char if we're in no-ack mode. */ 10006 if (!rs->noack_mode) 10007 remote_serial_write ("+", 1); 10008 if (is_notif != NULL) 10009 *is_notif = 0; 10010 return val; 10011 } 10012 10013 /* If we got a notification, handle it, and go back to looking 10014 for a packet. */ 10015 else 10016 { 10017 gdb_assert (c == '%'); 10018 10019 remote_debug_printf_nofunc 10020 (" Notification received: %s", 10021 escape_buffer (buf->data (), val).c_str ()); 10022 10023 if (is_notif != NULL) 10024 *is_notif = 1; 10025 10026 handle_notification (rs->notif_state, buf->data ()); 10027 10028 /* Notifications require no acknowledgement. */ 10029 10030 if (expecting_notif) 10031 return val; 10032 } 10033 } 10034 } 10035 10036 int 10037 remote_target::getpkt_sane (gdb::char_vector *buf, int forever) 10038 { 10039 return getpkt_or_notif_sane_1 (buf, forever, 0, NULL); 10040 } 10041 10042 int 10043 remote_target::getpkt_or_notif_sane (gdb::char_vector *buf, int forever, 10044 int *is_notif) 10045 { 10046 return getpkt_or_notif_sane_1 (buf, forever, 1, is_notif); 10047 } 10048 10049 /* Kill any new fork children of process PID that haven't been 10050 processed by follow_fork. */ 10051 10052 void 10053 remote_target::kill_new_fork_children (int pid) 10054 { 10055 remote_state *rs = get_remote_state (); 10056 struct notif_client *notif = ¬if_client_stop; 10057 10058 /* Kill the fork child threads of any threads in process PID 10059 that are stopped at a fork event. */ 10060 for (thread_info *thread : all_non_exited_threads (this)) 10061 { 10062 struct target_waitstatus *ws = &thread->pending_follow; 10063 10064 if (is_pending_fork_parent (ws, pid, thread->ptid)) 10065 { 10066 int child_pid = ws->value.related_pid.pid (); 10067 int res; 10068 10069 res = remote_vkill (child_pid); 10070 if (res != 0) 10071 error (_("Can't kill fork child process %d"), child_pid); 10072 } 10073 } 10074 10075 /* Check for any pending fork events (not reported or processed yet) 10076 in process PID and kill those fork child threads as well. */ 10077 remote_notif_get_pending_events (notif); 10078 for (auto &event : rs->stop_reply_queue) 10079 if (is_pending_fork_parent (&event->ws, pid, event->ptid)) 10080 { 10081 int child_pid = event->ws.value.related_pid.pid (); 10082 int res; 10083 10084 res = remote_vkill (child_pid); 10085 if (res != 0) 10086 error (_("Can't kill fork child process %d"), child_pid); 10087 } 10088 } 10089 10090 10091 /* Target hook to kill the current inferior. */ 10092 10093 void 10094 remote_target::kill () 10095 { 10096 int res = -1; 10097 int pid = inferior_ptid.pid (); 10098 struct remote_state *rs = get_remote_state (); 10099 10100 if (packet_support (PACKET_vKill) != PACKET_DISABLE) 10101 { 10102 /* If we're stopped while forking and we haven't followed yet, 10103 kill the child task. We need to do this before killing the 10104 parent task because if this is a vfork then the parent will 10105 be sleeping. */ 10106 kill_new_fork_children (pid); 10107 10108 res = remote_vkill (pid); 10109 if (res == 0) 10110 { 10111 target_mourn_inferior (inferior_ptid); 10112 return; 10113 } 10114 } 10115 10116 /* If we are in 'target remote' mode and we are killing the only 10117 inferior, then we will tell gdbserver to exit and unpush the 10118 target. */ 10119 if (res == -1 && !remote_multi_process_p (rs) 10120 && number_of_live_inferiors (this) == 1) 10121 { 10122 remote_kill_k (); 10123 10124 /* We've killed the remote end, we get to mourn it. If we are 10125 not in extended mode, mourning the inferior also unpushes 10126 remote_ops from the target stack, which closes the remote 10127 connection. */ 10128 target_mourn_inferior (inferior_ptid); 10129 10130 return; 10131 } 10132 10133 error (_("Can't kill process")); 10134 } 10135 10136 /* Send a kill request to the target using the 'vKill' packet. */ 10137 10138 int 10139 remote_target::remote_vkill (int pid) 10140 { 10141 if (packet_support (PACKET_vKill) == PACKET_DISABLE) 10142 return -1; 10143 10144 remote_state *rs = get_remote_state (); 10145 10146 /* Tell the remote target to detach. */ 10147 xsnprintf (rs->buf.data (), get_remote_packet_size (), "vKill;%x", pid); 10148 putpkt (rs->buf); 10149 getpkt (&rs->buf, 0); 10150 10151 switch (packet_ok (rs->buf, 10152 &remote_protocol_packets[PACKET_vKill])) 10153 { 10154 case PACKET_OK: 10155 return 0; 10156 case PACKET_ERROR: 10157 return 1; 10158 case PACKET_UNKNOWN: 10159 return -1; 10160 default: 10161 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok")); 10162 } 10163 } 10164 10165 /* Send a kill request to the target using the 'k' packet. */ 10166 10167 void 10168 remote_target::remote_kill_k () 10169 { 10170 /* Catch errors so the user can quit from gdb even when we 10171 aren't on speaking terms with the remote system. */ 10172 try 10173 { 10174 putpkt ("k"); 10175 } 10176 catch (const gdb_exception_error &ex) 10177 { 10178 if (ex.error == TARGET_CLOSE_ERROR) 10179 { 10180 /* If we got an (EOF) error that caused the target 10181 to go away, then we're done, that's what we wanted. 10182 "k" is susceptible to cause a premature EOF, given 10183 that the remote server isn't actually required to 10184 reply to "k", and it can happen that it doesn't 10185 even get to reply ACK to the "k". */ 10186 return; 10187 } 10188 10189 /* Otherwise, something went wrong. We didn't actually kill 10190 the target. Just propagate the exception, and let the 10191 user or higher layers decide what to do. */ 10192 throw; 10193 } 10194 } 10195 10196 void 10197 remote_target::mourn_inferior () 10198 { 10199 struct remote_state *rs = get_remote_state (); 10200 10201 /* We're no longer interested in notification events of an inferior 10202 that exited or was killed/detached. */ 10203 discard_pending_stop_replies (current_inferior ()); 10204 10205 /* In 'target remote' mode with one inferior, we close the connection. */ 10206 if (!rs->extended && number_of_live_inferiors (this) <= 1) 10207 { 10208 remote_unpush_target (this); 10209 return; 10210 } 10211 10212 /* In case we got here due to an error, but we're going to stay 10213 connected. */ 10214 rs->waiting_for_stop_reply = 0; 10215 10216 /* If the current general thread belonged to the process we just 10217 detached from or has exited, the remote side current general 10218 thread becomes undefined. Considering a case like this: 10219 10220 - We just got here due to a detach. 10221 - The process that we're detaching from happens to immediately 10222 report a global breakpoint being hit in non-stop mode, in the 10223 same thread we had selected before. 10224 - GDB attaches to this process again. 10225 - This event happens to be the next event we handle. 10226 10227 GDB would consider that the current general thread didn't need to 10228 be set on the stub side (with Hg), since for all it knew, 10229 GENERAL_THREAD hadn't changed. 10230 10231 Notice that although in all-stop mode, the remote server always 10232 sets the current thread to the thread reporting the stop event, 10233 that doesn't happen in non-stop mode; in non-stop, the stub *must 10234 not* change the current thread when reporting a breakpoint hit, 10235 due to the decoupling of event reporting and event handling. 10236 10237 To keep things simple, we always invalidate our notion of the 10238 current thread. */ 10239 record_currthread (rs, minus_one_ptid); 10240 10241 /* Call common code to mark the inferior as not running. */ 10242 generic_mourn_inferior (); 10243 } 10244 10245 bool 10246 extended_remote_target::supports_disable_randomization () 10247 { 10248 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE; 10249 } 10250 10251 void 10252 remote_target::extended_remote_disable_randomization (int val) 10253 { 10254 struct remote_state *rs = get_remote_state (); 10255 char *reply; 10256 10257 xsnprintf (rs->buf.data (), get_remote_packet_size (), 10258 "QDisableRandomization:%x", val); 10259 putpkt (rs->buf); 10260 reply = remote_get_noisy_reply (); 10261 if (*reply == '\0') 10262 error (_("Target does not support QDisableRandomization.")); 10263 if (strcmp (reply, "OK") != 0) 10264 error (_("Bogus QDisableRandomization reply from target: %s"), reply); 10265 } 10266 10267 int 10268 remote_target::extended_remote_run (const std::string &args) 10269 { 10270 struct remote_state *rs = get_remote_state (); 10271 int len; 10272 const char *remote_exec_file = get_remote_exec_file (); 10273 10274 /* If the user has disabled vRun support, or we have detected that 10275 support is not available, do not try it. */ 10276 if (packet_support (PACKET_vRun) == PACKET_DISABLE) 10277 return -1; 10278 10279 strcpy (rs->buf.data (), "vRun;"); 10280 len = strlen (rs->buf.data ()); 10281 10282 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ()) 10283 error (_("Remote file name too long for run packet")); 10284 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf.data () + len, 10285 strlen (remote_exec_file)); 10286 10287 if (!args.empty ()) 10288 { 10289 int i; 10290 10291 gdb_argv argv (args.c_str ()); 10292 for (i = 0; argv[i] != NULL; i++) 10293 { 10294 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ()) 10295 error (_("Argument list too long for run packet")); 10296 rs->buf[len++] = ';'; 10297 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf.data () + len, 10298 strlen (argv[i])); 10299 } 10300 } 10301 10302 rs->buf[len++] = '\0'; 10303 10304 putpkt (rs->buf); 10305 getpkt (&rs->buf, 0); 10306 10307 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun])) 10308 { 10309 case PACKET_OK: 10310 /* We have a wait response. All is well. */ 10311 return 0; 10312 case PACKET_UNKNOWN: 10313 return -1; 10314 case PACKET_ERROR: 10315 if (remote_exec_file[0] == '\0') 10316 error (_("Running the default executable on the remote target failed; " 10317 "try \"set remote exec-file\"?")); 10318 else 10319 error (_("Running \"%s\" on the remote target failed"), 10320 remote_exec_file); 10321 default: 10322 gdb_assert_not_reached (_("bad switch")); 10323 } 10324 } 10325 10326 /* Helper function to send set/unset environment packets. ACTION is 10327 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded" 10328 or "QEnvironmentUnsetVariable". VALUE is the variable to be 10329 sent. */ 10330 10331 void 10332 remote_target::send_environment_packet (const char *action, 10333 const char *packet, 10334 const char *value) 10335 { 10336 remote_state *rs = get_remote_state (); 10337 10338 /* Convert the environment variable to an hex string, which 10339 is the best format to be transmitted over the wire. */ 10340 std::string encoded_value = bin2hex ((const gdb_byte *) value, 10341 strlen (value)); 10342 10343 xsnprintf (rs->buf.data (), get_remote_packet_size (), 10344 "%s:%s", packet, encoded_value.c_str ()); 10345 10346 putpkt (rs->buf); 10347 getpkt (&rs->buf, 0); 10348 if (strcmp (rs->buf.data (), "OK") != 0) 10349 warning (_("Unable to %s environment variable '%s' on remote."), 10350 action, value); 10351 } 10352 10353 /* Helper function to handle the QEnvironment* packets. */ 10354 10355 void 10356 remote_target::extended_remote_environment_support () 10357 { 10358 remote_state *rs = get_remote_state (); 10359 10360 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE) 10361 { 10362 putpkt ("QEnvironmentReset"); 10363 getpkt (&rs->buf, 0); 10364 if (strcmp (rs->buf.data (), "OK") != 0) 10365 warning (_("Unable to reset environment on remote.")); 10366 } 10367 10368 gdb_environ *e = ¤t_inferior ()->environment; 10369 10370 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE) 10371 for (const std::string &el : e->user_set_env ()) 10372 send_environment_packet ("set", "QEnvironmentHexEncoded", 10373 el.c_str ()); 10374 10375 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE) 10376 for (const std::string &el : e->user_unset_env ()) 10377 send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ()); 10378 } 10379 10380 /* Helper function to set the current working directory for the 10381 inferior in the remote target. */ 10382 10383 void 10384 remote_target::extended_remote_set_inferior_cwd () 10385 { 10386 if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE) 10387 { 10388 const char *inferior_cwd = get_inferior_cwd (); 10389 remote_state *rs = get_remote_state (); 10390 10391 if (inferior_cwd != NULL) 10392 { 10393 std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd, 10394 strlen (inferior_cwd)); 10395 10396 xsnprintf (rs->buf.data (), get_remote_packet_size (), 10397 "QSetWorkingDir:%s", hexpath.c_str ()); 10398 } 10399 else 10400 { 10401 /* An empty inferior_cwd means that the user wants us to 10402 reset the remote server's inferior's cwd. */ 10403 xsnprintf (rs->buf.data (), get_remote_packet_size (), 10404 "QSetWorkingDir:"); 10405 } 10406 10407 putpkt (rs->buf); 10408 getpkt (&rs->buf, 0); 10409 if (packet_ok (rs->buf, 10410 &remote_protocol_packets[PACKET_QSetWorkingDir]) 10411 != PACKET_OK) 10412 error (_("\ 10413 Remote replied unexpectedly while setting the inferior's working\n\ 10414 directory: %s"), 10415 rs->buf.data ()); 10416 10417 } 10418 } 10419 10420 /* In the extended protocol we want to be able to do things like 10421 "run" and have them basically work as expected. So we need 10422 a special create_inferior function. We support changing the 10423 executable file and the command line arguments, but not the 10424 environment. */ 10425 10426 void 10427 extended_remote_target::create_inferior (const char *exec_file, 10428 const std::string &args, 10429 char **env, int from_tty) 10430 { 10431 int run_worked; 10432 char *stop_reply; 10433 struct remote_state *rs = get_remote_state (); 10434 const char *remote_exec_file = get_remote_exec_file (); 10435 10436 /* If running asynchronously, register the target file descriptor 10437 with the event loop. */ 10438 if (target_can_async_p ()) 10439 target_async (1); 10440 10441 /* Disable address space randomization if requested (and supported). */ 10442 if (supports_disable_randomization ()) 10443 extended_remote_disable_randomization (disable_randomization); 10444 10445 /* If startup-with-shell is on, we inform gdbserver to start the 10446 remote inferior using a shell. */ 10447 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE) 10448 { 10449 xsnprintf (rs->buf.data (), get_remote_packet_size (), 10450 "QStartupWithShell:%d", startup_with_shell ? 1 : 0); 10451 putpkt (rs->buf); 10452 getpkt (&rs->buf, 0); 10453 if (strcmp (rs->buf.data (), "OK") != 0) 10454 error (_("\ 10455 Remote replied unexpectedly while setting startup-with-shell: %s"), 10456 rs->buf.data ()); 10457 } 10458 10459 extended_remote_environment_support (); 10460 10461 extended_remote_set_inferior_cwd (); 10462 10463 /* Now restart the remote server. */ 10464 run_worked = extended_remote_run (args) != -1; 10465 if (!run_worked) 10466 { 10467 /* vRun was not supported. Fail if we need it to do what the 10468 user requested. */ 10469 if (remote_exec_file[0]) 10470 error (_("Remote target does not support \"set remote exec-file\"")); 10471 if (!args.empty ()) 10472 error (_("Remote target does not support \"set args\" or run ARGS")); 10473 10474 /* Fall back to "R". */ 10475 extended_remote_restart (); 10476 } 10477 10478 /* vRun's success return is a stop reply. */ 10479 stop_reply = run_worked ? rs->buf.data () : NULL; 10480 add_current_inferior_and_thread (stop_reply); 10481 10482 /* Get updated offsets, if the stub uses qOffsets. */ 10483 get_offsets (); 10484 } 10485 10486 10487 /* Given a location's target info BP_TGT and the packet buffer BUF, output 10488 the list of conditions (in agent expression bytecode format), if any, the 10489 target needs to evaluate. The output is placed into the packet buffer 10490 started from BUF and ended at BUF_END. */ 10491 10492 static int 10493 remote_add_target_side_condition (struct gdbarch *gdbarch, 10494 struct bp_target_info *bp_tgt, char *buf, 10495 char *buf_end) 10496 { 10497 if (bp_tgt->conditions.empty ()) 10498 return 0; 10499 10500 buf += strlen (buf); 10501 xsnprintf (buf, buf_end - buf, "%s", ";"); 10502 buf++; 10503 10504 /* Send conditions to the target. */ 10505 for (agent_expr *aexpr : bp_tgt->conditions) 10506 { 10507 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len); 10508 buf += strlen (buf); 10509 for (int i = 0; i < aexpr->len; ++i) 10510 buf = pack_hex_byte (buf, aexpr->buf[i]); 10511 *buf = '\0'; 10512 } 10513 return 0; 10514 } 10515 10516 static void 10517 remote_add_target_side_commands (struct gdbarch *gdbarch, 10518 struct bp_target_info *bp_tgt, char *buf) 10519 { 10520 if (bp_tgt->tcommands.empty ()) 10521 return; 10522 10523 buf += strlen (buf); 10524 10525 sprintf (buf, ";cmds:%x,", bp_tgt->persist); 10526 buf += strlen (buf); 10527 10528 /* Concatenate all the agent expressions that are commands into the 10529 cmds parameter. */ 10530 for (agent_expr *aexpr : bp_tgt->tcommands) 10531 { 10532 sprintf (buf, "X%x,", aexpr->len); 10533 buf += strlen (buf); 10534 for (int i = 0; i < aexpr->len; ++i) 10535 buf = pack_hex_byte (buf, aexpr->buf[i]); 10536 *buf = '\0'; 10537 } 10538 } 10539 10540 /* Insert a breakpoint. On targets that have software breakpoint 10541 support, we ask the remote target to do the work; on targets 10542 which don't, we insert a traditional memory breakpoint. */ 10543 10544 int 10545 remote_target::insert_breakpoint (struct gdbarch *gdbarch, 10546 struct bp_target_info *bp_tgt) 10547 { 10548 /* Try the "Z" s/w breakpoint packet if it is not already disabled. 10549 If it succeeds, then set the support to PACKET_ENABLE. If it 10550 fails, and the user has explicitly requested the Z support then 10551 report an error, otherwise, mark it disabled and go on. */ 10552 10553 if (packet_support (PACKET_Z0) != PACKET_DISABLE) 10554 { 10555 CORE_ADDR addr = bp_tgt->reqstd_address; 10556 struct remote_state *rs; 10557 char *p, *endbuf; 10558 10559 /* Make sure the remote is pointing at the right process, if 10560 necessary. */ 10561 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 10562 set_general_process (); 10563 10564 rs = get_remote_state (); 10565 p = rs->buf.data (); 10566 endbuf = p + get_remote_packet_size (); 10567 10568 *(p++) = 'Z'; 10569 *(p++) = '0'; 10570 *(p++) = ','; 10571 addr = (ULONGEST) remote_address_masked (addr); 10572 p += hexnumstr (p, addr); 10573 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind); 10574 10575 if (supports_evaluation_of_breakpoint_conditions ()) 10576 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf); 10577 10578 if (can_run_breakpoint_commands ()) 10579 remote_add_target_side_commands (gdbarch, bp_tgt, p); 10580 10581 putpkt (rs->buf); 10582 getpkt (&rs->buf, 0); 10583 10584 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0])) 10585 { 10586 case PACKET_ERROR: 10587 return -1; 10588 case PACKET_OK: 10589 return 0; 10590 case PACKET_UNKNOWN: 10591 break; 10592 } 10593 } 10594 10595 /* If this breakpoint has target-side commands but this stub doesn't 10596 support Z0 packets, throw error. */ 10597 if (!bp_tgt->tcommands.empty ()) 10598 throw_error (NOT_SUPPORTED_ERROR, _("\ 10599 Target doesn't support breakpoints that have target side commands.")); 10600 10601 return memory_insert_breakpoint (this, gdbarch, bp_tgt); 10602 } 10603 10604 int 10605 remote_target::remove_breakpoint (struct gdbarch *gdbarch, 10606 struct bp_target_info *bp_tgt, 10607 enum remove_bp_reason reason) 10608 { 10609 CORE_ADDR addr = bp_tgt->placed_address; 10610 struct remote_state *rs = get_remote_state (); 10611 10612 if (packet_support (PACKET_Z0) != PACKET_DISABLE) 10613 { 10614 char *p = rs->buf.data (); 10615 char *endbuf = p + get_remote_packet_size (); 10616 10617 /* Make sure the remote is pointing at the right process, if 10618 necessary. */ 10619 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 10620 set_general_process (); 10621 10622 *(p++) = 'z'; 10623 *(p++) = '0'; 10624 *(p++) = ','; 10625 10626 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address); 10627 p += hexnumstr (p, addr); 10628 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind); 10629 10630 putpkt (rs->buf); 10631 getpkt (&rs->buf, 0); 10632 10633 return (rs->buf[0] == 'E'); 10634 } 10635 10636 return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason); 10637 } 10638 10639 static enum Z_packet_type 10640 watchpoint_to_Z_packet (int type) 10641 { 10642 switch (type) 10643 { 10644 case hw_write: 10645 return Z_PACKET_WRITE_WP; 10646 break; 10647 case hw_read: 10648 return Z_PACKET_READ_WP; 10649 break; 10650 case hw_access: 10651 return Z_PACKET_ACCESS_WP; 10652 break; 10653 default: 10654 internal_error (__FILE__, __LINE__, 10655 _("hw_bp_to_z: bad watchpoint type %d"), type); 10656 } 10657 } 10658 10659 int 10660 remote_target::insert_watchpoint (CORE_ADDR addr, int len, 10661 enum target_hw_bp_type type, struct expression *cond) 10662 { 10663 struct remote_state *rs = get_remote_state (); 10664 char *endbuf = rs->buf.data () + get_remote_packet_size (); 10665 char *p; 10666 enum Z_packet_type packet = watchpoint_to_Z_packet (type); 10667 10668 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE) 10669 return 1; 10670 10671 /* Make sure the remote is pointing at the right process, if 10672 necessary. */ 10673 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 10674 set_general_process (); 10675 10676 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "Z%x,", packet); 10677 p = strchr (rs->buf.data (), '\0'); 10678 addr = remote_address_masked (addr); 10679 p += hexnumstr (p, (ULONGEST) addr); 10680 xsnprintf (p, endbuf - p, ",%x", len); 10681 10682 putpkt (rs->buf); 10683 getpkt (&rs->buf, 0); 10684 10685 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet])) 10686 { 10687 case PACKET_ERROR: 10688 return -1; 10689 case PACKET_UNKNOWN: 10690 return 1; 10691 case PACKET_OK: 10692 return 0; 10693 } 10694 internal_error (__FILE__, __LINE__, 10695 _("remote_insert_watchpoint: reached end of function")); 10696 } 10697 10698 bool 10699 remote_target::watchpoint_addr_within_range (CORE_ADDR addr, 10700 CORE_ADDR start, int length) 10701 { 10702 CORE_ADDR diff = remote_address_masked (addr - start); 10703 10704 return diff < length; 10705 } 10706 10707 10708 int 10709 remote_target::remove_watchpoint (CORE_ADDR addr, int len, 10710 enum target_hw_bp_type type, struct expression *cond) 10711 { 10712 struct remote_state *rs = get_remote_state (); 10713 char *endbuf = rs->buf.data () + get_remote_packet_size (); 10714 char *p; 10715 enum Z_packet_type packet = watchpoint_to_Z_packet (type); 10716 10717 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE) 10718 return -1; 10719 10720 /* Make sure the remote is pointing at the right process, if 10721 necessary. */ 10722 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 10723 set_general_process (); 10724 10725 xsnprintf (rs->buf.data (), endbuf - rs->buf.data (), "z%x,", packet); 10726 p = strchr (rs->buf.data (), '\0'); 10727 addr = remote_address_masked (addr); 10728 p += hexnumstr (p, (ULONGEST) addr); 10729 xsnprintf (p, endbuf - p, ",%x", len); 10730 putpkt (rs->buf); 10731 getpkt (&rs->buf, 0); 10732 10733 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet])) 10734 { 10735 case PACKET_ERROR: 10736 case PACKET_UNKNOWN: 10737 return -1; 10738 case PACKET_OK: 10739 return 0; 10740 } 10741 internal_error (__FILE__, __LINE__, 10742 _("remote_remove_watchpoint: reached end of function")); 10743 } 10744 10745 10746 static int remote_hw_watchpoint_limit = -1; 10747 static int remote_hw_watchpoint_length_limit = -1; 10748 static int remote_hw_breakpoint_limit = -1; 10749 10750 int 10751 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) 10752 { 10753 if (remote_hw_watchpoint_length_limit == 0) 10754 return 0; 10755 else if (remote_hw_watchpoint_length_limit < 0) 10756 return 1; 10757 else if (len <= remote_hw_watchpoint_length_limit) 10758 return 1; 10759 else 10760 return 0; 10761 } 10762 10763 int 10764 remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot) 10765 { 10766 if (type == bp_hardware_breakpoint) 10767 { 10768 if (remote_hw_breakpoint_limit == 0) 10769 return 0; 10770 else if (remote_hw_breakpoint_limit < 0) 10771 return 1; 10772 else if (cnt <= remote_hw_breakpoint_limit) 10773 return 1; 10774 } 10775 else 10776 { 10777 if (remote_hw_watchpoint_limit == 0) 10778 return 0; 10779 else if (remote_hw_watchpoint_limit < 0) 10780 return 1; 10781 else if (ot) 10782 return -1; 10783 else if (cnt <= remote_hw_watchpoint_limit) 10784 return 1; 10785 } 10786 return -1; 10787 } 10788 10789 /* The to_stopped_by_sw_breakpoint method of target remote. */ 10790 10791 bool 10792 remote_target::stopped_by_sw_breakpoint () 10793 { 10794 struct thread_info *thread = inferior_thread (); 10795 10796 return (thread->priv != NULL 10797 && (get_remote_thread_info (thread)->stop_reason 10798 == TARGET_STOPPED_BY_SW_BREAKPOINT)); 10799 } 10800 10801 /* The to_supports_stopped_by_sw_breakpoint method of target 10802 remote. */ 10803 10804 bool 10805 remote_target::supports_stopped_by_sw_breakpoint () 10806 { 10807 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE); 10808 } 10809 10810 /* The to_stopped_by_hw_breakpoint method of target remote. */ 10811 10812 bool 10813 remote_target::stopped_by_hw_breakpoint () 10814 { 10815 struct thread_info *thread = inferior_thread (); 10816 10817 return (thread->priv != NULL 10818 && (get_remote_thread_info (thread)->stop_reason 10819 == TARGET_STOPPED_BY_HW_BREAKPOINT)); 10820 } 10821 10822 /* The to_supports_stopped_by_hw_breakpoint method of target 10823 remote. */ 10824 10825 bool 10826 remote_target::supports_stopped_by_hw_breakpoint () 10827 { 10828 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE); 10829 } 10830 10831 bool 10832 remote_target::stopped_by_watchpoint () 10833 { 10834 struct thread_info *thread = inferior_thread (); 10835 10836 return (thread->priv != NULL 10837 && (get_remote_thread_info (thread)->stop_reason 10838 == TARGET_STOPPED_BY_WATCHPOINT)); 10839 } 10840 10841 bool 10842 remote_target::stopped_data_address (CORE_ADDR *addr_p) 10843 { 10844 struct thread_info *thread = inferior_thread (); 10845 10846 if (thread->priv != NULL 10847 && (get_remote_thread_info (thread)->stop_reason 10848 == TARGET_STOPPED_BY_WATCHPOINT)) 10849 { 10850 *addr_p = get_remote_thread_info (thread)->watch_data_address; 10851 return true; 10852 } 10853 10854 return false; 10855 } 10856 10857 10858 int 10859 remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch, 10860 struct bp_target_info *bp_tgt) 10861 { 10862 CORE_ADDR addr = bp_tgt->reqstd_address; 10863 struct remote_state *rs; 10864 char *p, *endbuf; 10865 char *message; 10866 10867 if (packet_support (PACKET_Z1) == PACKET_DISABLE) 10868 return -1; 10869 10870 /* Make sure the remote is pointing at the right process, if 10871 necessary. */ 10872 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 10873 set_general_process (); 10874 10875 rs = get_remote_state (); 10876 p = rs->buf.data (); 10877 endbuf = p + get_remote_packet_size (); 10878 10879 *(p++) = 'Z'; 10880 *(p++) = '1'; 10881 *(p++) = ','; 10882 10883 addr = remote_address_masked (addr); 10884 p += hexnumstr (p, (ULONGEST) addr); 10885 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind); 10886 10887 if (supports_evaluation_of_breakpoint_conditions ()) 10888 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf); 10889 10890 if (can_run_breakpoint_commands ()) 10891 remote_add_target_side_commands (gdbarch, bp_tgt, p); 10892 10893 putpkt (rs->buf); 10894 getpkt (&rs->buf, 0); 10895 10896 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1])) 10897 { 10898 case PACKET_ERROR: 10899 if (rs->buf[1] == '.') 10900 { 10901 message = strchr (&rs->buf[2], '.'); 10902 if (message) 10903 error (_("Remote failure reply: %s"), message + 1); 10904 } 10905 return -1; 10906 case PACKET_UNKNOWN: 10907 return -1; 10908 case PACKET_OK: 10909 return 0; 10910 } 10911 internal_error (__FILE__, __LINE__, 10912 _("remote_insert_hw_breakpoint: reached end of function")); 10913 } 10914 10915 10916 int 10917 remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch, 10918 struct bp_target_info *bp_tgt) 10919 { 10920 CORE_ADDR addr; 10921 struct remote_state *rs = get_remote_state (); 10922 char *p = rs->buf.data (); 10923 char *endbuf = p + get_remote_packet_size (); 10924 10925 if (packet_support (PACKET_Z1) == PACKET_DISABLE) 10926 return -1; 10927 10928 /* Make sure the remote is pointing at the right process, if 10929 necessary. */ 10930 if (!gdbarch_has_global_breakpoints (target_gdbarch ())) 10931 set_general_process (); 10932 10933 *(p++) = 'z'; 10934 *(p++) = '1'; 10935 *(p++) = ','; 10936 10937 addr = remote_address_masked (bp_tgt->placed_address); 10938 p += hexnumstr (p, (ULONGEST) addr); 10939 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind); 10940 10941 putpkt (rs->buf); 10942 getpkt (&rs->buf, 0); 10943 10944 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1])) 10945 { 10946 case PACKET_ERROR: 10947 case PACKET_UNKNOWN: 10948 return -1; 10949 case PACKET_OK: 10950 return 0; 10951 } 10952 internal_error (__FILE__, __LINE__, 10953 _("remote_remove_hw_breakpoint: reached end of function")); 10954 } 10955 10956 /* Verify memory using the "qCRC:" request. */ 10957 10958 int 10959 remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size) 10960 { 10961 struct remote_state *rs = get_remote_state (); 10962 unsigned long host_crc, target_crc; 10963 char *tmp; 10964 10965 /* It doesn't make sense to use qCRC if the remote target is 10966 connected but not running. */ 10967 if (target_has_execution () 10968 && packet_support (PACKET_qCRC) != PACKET_DISABLE) 10969 { 10970 enum packet_result result; 10971 10972 /* Make sure the remote is pointing at the right process. */ 10973 set_general_process (); 10974 10975 /* FIXME: assumes lma can fit into long. */ 10976 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qCRC:%lx,%lx", 10977 (long) lma, (long) size); 10978 putpkt (rs->buf); 10979 10980 /* Be clever; compute the host_crc before waiting for target 10981 reply. */ 10982 host_crc = xcrc32 (data, size, 0xffffffff); 10983 10984 getpkt (&rs->buf, 0); 10985 10986 result = packet_ok (rs->buf, 10987 &remote_protocol_packets[PACKET_qCRC]); 10988 if (result == PACKET_ERROR) 10989 return -1; 10990 else if (result == PACKET_OK) 10991 { 10992 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++) 10993 target_crc = target_crc * 16 + fromhex (*tmp); 10994 10995 return (host_crc == target_crc); 10996 } 10997 } 10998 10999 return simple_verify_memory (this, data, lma, size); 11000 } 11001 11002 /* compare-sections command 11003 11004 With no arguments, compares each loadable section in the exec bfd 11005 with the same memory range on the target, and reports mismatches. 11006 Useful for verifying the image on the target against the exec file. */ 11007 11008 static void 11009 compare_sections_command (const char *args, int from_tty) 11010 { 11011 asection *s; 11012 const char *sectname; 11013 bfd_size_type size; 11014 bfd_vma lma; 11015 int matched = 0; 11016 int mismatched = 0; 11017 int res; 11018 int read_only = 0; 11019 11020 if (!current_program_space->exec_bfd ()) 11021 error (_("command cannot be used without an exec file")); 11022 11023 if (args != NULL && strcmp (args, "-r") == 0) 11024 { 11025 read_only = 1; 11026 args = NULL; 11027 } 11028 11029 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next) 11030 { 11031 if (!(s->flags & SEC_LOAD)) 11032 continue; /* Skip non-loadable section. */ 11033 11034 if (read_only && (s->flags & SEC_READONLY) == 0) 11035 continue; /* Skip writeable sections */ 11036 11037 size = bfd_section_size (s); 11038 if (size == 0) 11039 continue; /* Skip zero-length section. */ 11040 11041 sectname = bfd_section_name (s); 11042 if (args && strcmp (args, sectname) != 0) 11043 continue; /* Not the section selected by user. */ 11044 11045 matched = 1; /* Do this section. */ 11046 lma = s->lma; 11047 11048 gdb::byte_vector sectdata (size); 11049 bfd_get_section_contents (current_program_space->exec_bfd (), s, 11050 sectdata.data (), 0, size); 11051 11052 res = target_verify_memory (sectdata.data (), lma, size); 11053 11054 if (res == -1) 11055 error (_("target memory fault, section %s, range %s -- %s"), sectname, 11056 paddress (target_gdbarch (), lma), 11057 paddress (target_gdbarch (), lma + size)); 11058 11059 printf_filtered ("Section %s, range %s -- %s: ", sectname, 11060 paddress (target_gdbarch (), lma), 11061 paddress (target_gdbarch (), lma + size)); 11062 if (res) 11063 printf_filtered ("matched.\n"); 11064 else 11065 { 11066 printf_filtered ("MIS-MATCHED!\n"); 11067 mismatched++; 11068 } 11069 } 11070 if (mismatched > 0) 11071 warning (_("One or more sections of the target image does not match\n\ 11072 the loaded file\n")); 11073 if (args && !matched) 11074 printf_filtered (_("No loaded section named '%s'.\n"), args); 11075 } 11076 11077 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET 11078 into remote target. The number of bytes written to the remote 11079 target is returned, or -1 for error. */ 11080 11081 target_xfer_status 11082 remote_target::remote_write_qxfer (const char *object_name, 11083 const char *annex, const gdb_byte *writebuf, 11084 ULONGEST offset, LONGEST len, 11085 ULONGEST *xfered_len, 11086 struct packet_config *packet) 11087 { 11088 int i, buf_len; 11089 ULONGEST n; 11090 struct remote_state *rs = get_remote_state (); 11091 int max_size = get_memory_write_packet_size (); 11092 11093 if (packet_config_support (packet) == PACKET_DISABLE) 11094 return TARGET_XFER_E_IO; 11095 11096 /* Insert header. */ 11097 i = snprintf (rs->buf.data (), max_size, 11098 "qXfer:%s:write:%s:%s:", 11099 object_name, annex ? annex : "", 11100 phex_nz (offset, sizeof offset)); 11101 max_size -= (i + 1); 11102 11103 /* Escape as much data as fits into rs->buf. */ 11104 buf_len = remote_escape_output 11105 (writebuf, len, 1, (gdb_byte *) rs->buf.data () + i, &max_size, max_size); 11106 11107 if (putpkt_binary (rs->buf.data (), i + buf_len) < 0 11108 || getpkt_sane (&rs->buf, 0) < 0 11109 || packet_ok (rs->buf, packet) != PACKET_OK) 11110 return TARGET_XFER_E_IO; 11111 11112 unpack_varlen_hex (rs->buf.data (), &n); 11113 11114 *xfered_len = n; 11115 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF; 11116 } 11117 11118 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet. 11119 Data at OFFSET, of up to LEN bytes, is read into READBUF; the 11120 number of bytes read is returned, or 0 for EOF, or -1 for error. 11121 The number of bytes read may be less than LEN without indicating an 11122 EOF. PACKET is checked and updated to indicate whether the remote 11123 target supports this object. */ 11124 11125 target_xfer_status 11126 remote_target::remote_read_qxfer (const char *object_name, 11127 const char *annex, 11128 gdb_byte *readbuf, ULONGEST offset, 11129 LONGEST len, 11130 ULONGEST *xfered_len, 11131 struct packet_config *packet) 11132 { 11133 struct remote_state *rs = get_remote_state (); 11134 LONGEST i, n, packet_len; 11135 11136 if (packet_config_support (packet) == PACKET_DISABLE) 11137 return TARGET_XFER_E_IO; 11138 11139 /* Check whether we've cached an end-of-object packet that matches 11140 this request. */ 11141 if (rs->finished_object) 11142 { 11143 if (strcmp (object_name, rs->finished_object) == 0 11144 && strcmp (annex ? annex : "", rs->finished_annex) == 0 11145 && offset == rs->finished_offset) 11146 return TARGET_XFER_EOF; 11147 11148 11149 /* Otherwise, we're now reading something different. Discard 11150 the cache. */ 11151 xfree (rs->finished_object); 11152 xfree (rs->finished_annex); 11153 rs->finished_object = NULL; 11154 rs->finished_annex = NULL; 11155 } 11156 11157 /* Request only enough to fit in a single packet. The actual data 11158 may not, since we don't know how much of it will need to be escaped; 11159 the target is free to respond with slightly less data. We subtract 11160 five to account for the response type and the protocol frame. */ 11161 n = std::min<LONGEST> (get_remote_packet_size () - 5, len); 11162 snprintf (rs->buf.data (), get_remote_packet_size () - 4, 11163 "qXfer:%s:read:%s:%s,%s", 11164 object_name, annex ? annex : "", 11165 phex_nz (offset, sizeof offset), 11166 phex_nz (n, sizeof n)); 11167 i = putpkt (rs->buf); 11168 if (i < 0) 11169 return TARGET_XFER_E_IO; 11170 11171 rs->buf[0] = '\0'; 11172 packet_len = getpkt_sane (&rs->buf, 0); 11173 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK) 11174 return TARGET_XFER_E_IO; 11175 11176 if (rs->buf[0] != 'l' && rs->buf[0] != 'm') 11177 error (_("Unknown remote qXfer reply: %s"), rs->buf.data ()); 11178 11179 /* 'm' means there is (or at least might be) more data after this 11180 batch. That does not make sense unless there's at least one byte 11181 of data in this reply. */ 11182 if (rs->buf[0] == 'm' && packet_len == 1) 11183 error (_("Remote qXfer reply contained no data.")); 11184 11185 /* Got some data. */ 11186 i = remote_unescape_input ((gdb_byte *) rs->buf.data () + 1, 11187 packet_len - 1, readbuf, n); 11188 11189 /* 'l' is an EOF marker, possibly including a final block of data, 11190 or possibly empty. If we have the final block of a non-empty 11191 object, record this fact to bypass a subsequent partial read. */ 11192 if (rs->buf[0] == 'l' && offset + i > 0) 11193 { 11194 rs->finished_object = xstrdup (object_name); 11195 rs->finished_annex = xstrdup (annex ? annex : ""); 11196 rs->finished_offset = offset + i; 11197 } 11198 11199 if (i == 0) 11200 return TARGET_XFER_EOF; 11201 else 11202 { 11203 *xfered_len = i; 11204 return TARGET_XFER_OK; 11205 } 11206 } 11207 11208 enum target_xfer_status 11209 remote_target::xfer_partial (enum target_object object, 11210 const char *annex, gdb_byte *readbuf, 11211 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, 11212 ULONGEST *xfered_len) 11213 { 11214 struct remote_state *rs; 11215 int i; 11216 char *p2; 11217 char query_type; 11218 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ()); 11219 11220 set_remote_traceframe (); 11221 set_general_thread (inferior_ptid); 11222 11223 rs = get_remote_state (); 11224 11225 /* Handle memory using the standard memory routines. */ 11226 if (object == TARGET_OBJECT_MEMORY) 11227 { 11228 /* If the remote target is connected but not running, we should 11229 pass this request down to a lower stratum (e.g. the executable 11230 file). */ 11231 if (!target_has_execution ()) 11232 return TARGET_XFER_EOF; 11233 11234 if (writebuf != NULL) 11235 return remote_write_bytes (offset, writebuf, len, unit_size, 11236 xfered_len); 11237 else 11238 return remote_read_bytes (offset, readbuf, len, unit_size, 11239 xfered_len); 11240 } 11241 11242 /* Handle extra signal info using qxfer packets. */ 11243 if (object == TARGET_OBJECT_SIGNAL_INFO) 11244 { 11245 if (readbuf) 11246 return remote_read_qxfer ("siginfo", annex, readbuf, offset, len, 11247 xfered_len, &remote_protocol_packets 11248 [PACKET_qXfer_siginfo_read]); 11249 else 11250 return remote_write_qxfer ("siginfo", annex, 11251 writebuf, offset, len, xfered_len, 11252 &remote_protocol_packets 11253 [PACKET_qXfer_siginfo_write]); 11254 } 11255 11256 if (object == TARGET_OBJECT_STATIC_TRACE_DATA) 11257 { 11258 if (readbuf) 11259 return remote_read_qxfer ("statictrace", annex, 11260 readbuf, offset, len, xfered_len, 11261 &remote_protocol_packets 11262 [PACKET_qXfer_statictrace_read]); 11263 else 11264 return TARGET_XFER_E_IO; 11265 } 11266 11267 /* Only handle flash writes. */ 11268 if (writebuf != NULL) 11269 { 11270 switch (object) 11271 { 11272 case TARGET_OBJECT_FLASH: 11273 return remote_flash_write (offset, len, xfered_len, 11274 writebuf); 11275 11276 default: 11277 return TARGET_XFER_E_IO; 11278 } 11279 } 11280 11281 /* Map pre-existing objects onto letters. DO NOT do this for new 11282 objects!!! Instead specify new query packets. */ 11283 switch (object) 11284 { 11285 case TARGET_OBJECT_AVR: 11286 query_type = 'R'; 11287 break; 11288 11289 case TARGET_OBJECT_AUXV: 11290 gdb_assert (annex == NULL); 11291 return remote_read_qxfer ("auxv", annex, readbuf, offset, len, 11292 xfered_len, 11293 &remote_protocol_packets[PACKET_qXfer_auxv]); 11294 11295 case TARGET_OBJECT_AVAILABLE_FEATURES: 11296 return remote_read_qxfer 11297 ("features", annex, readbuf, offset, len, xfered_len, 11298 &remote_protocol_packets[PACKET_qXfer_features]); 11299 11300 case TARGET_OBJECT_LIBRARIES: 11301 return remote_read_qxfer 11302 ("libraries", annex, readbuf, offset, len, xfered_len, 11303 &remote_protocol_packets[PACKET_qXfer_libraries]); 11304 11305 case TARGET_OBJECT_LIBRARIES_SVR4: 11306 return remote_read_qxfer 11307 ("libraries-svr4", annex, readbuf, offset, len, xfered_len, 11308 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]); 11309 11310 case TARGET_OBJECT_MEMORY_MAP: 11311 gdb_assert (annex == NULL); 11312 return remote_read_qxfer ("memory-map", annex, readbuf, offset, len, 11313 xfered_len, 11314 &remote_protocol_packets[PACKET_qXfer_memory_map]); 11315 11316 case TARGET_OBJECT_OSDATA: 11317 /* Should only get here if we're connected. */ 11318 gdb_assert (rs->remote_desc); 11319 return remote_read_qxfer 11320 ("osdata", annex, readbuf, offset, len, xfered_len, 11321 &remote_protocol_packets[PACKET_qXfer_osdata]); 11322 11323 case TARGET_OBJECT_THREADS: 11324 gdb_assert (annex == NULL); 11325 return remote_read_qxfer ("threads", annex, readbuf, offset, len, 11326 xfered_len, 11327 &remote_protocol_packets[PACKET_qXfer_threads]); 11328 11329 case TARGET_OBJECT_TRACEFRAME_INFO: 11330 gdb_assert (annex == NULL); 11331 return remote_read_qxfer 11332 ("traceframe-info", annex, readbuf, offset, len, xfered_len, 11333 &remote_protocol_packets[PACKET_qXfer_traceframe_info]); 11334 11335 case TARGET_OBJECT_FDPIC: 11336 return remote_read_qxfer ("fdpic", annex, readbuf, offset, len, 11337 xfered_len, 11338 &remote_protocol_packets[PACKET_qXfer_fdpic]); 11339 11340 case TARGET_OBJECT_OPENVMS_UIB: 11341 return remote_read_qxfer ("uib", annex, readbuf, offset, len, 11342 xfered_len, 11343 &remote_protocol_packets[PACKET_qXfer_uib]); 11344 11345 case TARGET_OBJECT_BTRACE: 11346 return remote_read_qxfer ("btrace", annex, readbuf, offset, len, 11347 xfered_len, 11348 &remote_protocol_packets[PACKET_qXfer_btrace]); 11349 11350 case TARGET_OBJECT_BTRACE_CONF: 11351 return remote_read_qxfer ("btrace-conf", annex, readbuf, offset, 11352 len, xfered_len, 11353 &remote_protocol_packets[PACKET_qXfer_btrace_conf]); 11354 11355 case TARGET_OBJECT_EXEC_FILE: 11356 return remote_read_qxfer ("exec-file", annex, readbuf, offset, 11357 len, xfered_len, 11358 &remote_protocol_packets[PACKET_qXfer_exec_file]); 11359 11360 default: 11361 return TARGET_XFER_E_IO; 11362 } 11363 11364 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not 11365 large enough let the caller deal with it. */ 11366 if (len < get_remote_packet_size ()) 11367 return TARGET_XFER_E_IO; 11368 len = get_remote_packet_size (); 11369 11370 /* Except for querying the minimum buffer size, target must be open. */ 11371 if (!rs->remote_desc) 11372 error (_("remote query is only available after target open")); 11373 11374 gdb_assert (annex != NULL); 11375 gdb_assert (readbuf != NULL); 11376 11377 p2 = rs->buf.data (); 11378 *p2++ = 'q'; 11379 *p2++ = query_type; 11380 11381 /* We used one buffer char for the remote protocol q command and 11382 another for the query type. As the remote protocol encapsulation 11383 uses 4 chars plus one extra in case we are debugging 11384 (remote_debug), we have PBUFZIZ - 7 left to pack the query 11385 string. */ 11386 i = 0; 11387 while (annex[i] && (i < (get_remote_packet_size () - 8))) 11388 { 11389 /* Bad caller may have sent forbidden characters. */ 11390 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#'); 11391 *p2++ = annex[i]; 11392 i++; 11393 } 11394 *p2 = '\0'; 11395 gdb_assert (annex[i] == '\0'); 11396 11397 i = putpkt (rs->buf); 11398 if (i < 0) 11399 return TARGET_XFER_E_IO; 11400 11401 getpkt (&rs->buf, 0); 11402 strcpy ((char *) readbuf, rs->buf.data ()); 11403 11404 *xfered_len = strlen ((char *) readbuf); 11405 return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF; 11406 } 11407 11408 /* Implementation of to_get_memory_xfer_limit. */ 11409 11410 ULONGEST 11411 remote_target::get_memory_xfer_limit () 11412 { 11413 return get_memory_write_packet_size (); 11414 } 11415 11416 int 11417 remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len, 11418 const gdb_byte *pattern, ULONGEST pattern_len, 11419 CORE_ADDR *found_addrp) 11420 { 11421 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; 11422 struct remote_state *rs = get_remote_state (); 11423 int max_size = get_memory_write_packet_size (); 11424 struct packet_config *packet = 11425 &remote_protocol_packets[PACKET_qSearch_memory]; 11426 /* Number of packet bytes used to encode the pattern; 11427 this could be more than PATTERN_LEN due to escape characters. */ 11428 int escaped_pattern_len; 11429 /* Amount of pattern that was encodable in the packet. */ 11430 int used_pattern_len; 11431 int i; 11432 int found; 11433 ULONGEST found_addr; 11434 11435 auto read_memory = [=] (CORE_ADDR addr, gdb_byte *result, size_t len) 11436 { 11437 return (target_read (this, TARGET_OBJECT_MEMORY, NULL, result, addr, len) 11438 == len); 11439 }; 11440 11441 /* Don't go to the target if we don't have to. This is done before 11442 checking packet_config_support to avoid the possibility that a 11443 success for this edge case means the facility works in 11444 general. */ 11445 if (pattern_len > search_space_len) 11446 return 0; 11447 if (pattern_len == 0) 11448 { 11449 *found_addrp = start_addr; 11450 return 1; 11451 } 11452 11453 /* If we already know the packet isn't supported, fall back to the simple 11454 way of searching memory. */ 11455 11456 if (packet_config_support (packet) == PACKET_DISABLE) 11457 { 11458 /* Target doesn't provided special support, fall back and use the 11459 standard support (copy memory and do the search here). */ 11460 return simple_search_memory (read_memory, start_addr, search_space_len, 11461 pattern, pattern_len, found_addrp); 11462 } 11463 11464 /* Make sure the remote is pointing at the right process. */ 11465 set_general_process (); 11466 11467 /* Insert header. */ 11468 i = snprintf (rs->buf.data (), max_size, 11469 "qSearch:memory:%s;%s;", 11470 phex_nz (start_addr, addr_size), 11471 phex_nz (search_space_len, sizeof (search_space_len))); 11472 max_size -= (i + 1); 11473 11474 /* Escape as much data as fits into rs->buf. */ 11475 escaped_pattern_len = 11476 remote_escape_output (pattern, pattern_len, 1, 11477 (gdb_byte *) rs->buf.data () + i, 11478 &used_pattern_len, max_size); 11479 11480 /* Bail if the pattern is too large. */ 11481 if (used_pattern_len != pattern_len) 11482 error (_("Pattern is too large to transmit to remote target.")); 11483 11484 if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0 11485 || getpkt_sane (&rs->buf, 0) < 0 11486 || packet_ok (rs->buf, packet) != PACKET_OK) 11487 { 11488 /* The request may not have worked because the command is not 11489 supported. If so, fall back to the simple way. */ 11490 if (packet_config_support (packet) == PACKET_DISABLE) 11491 { 11492 return simple_search_memory (read_memory, start_addr, search_space_len, 11493 pattern, pattern_len, found_addrp); 11494 } 11495 return -1; 11496 } 11497 11498 if (rs->buf[0] == '0') 11499 found = 0; 11500 else if (rs->buf[0] == '1') 11501 { 11502 found = 1; 11503 if (rs->buf[1] != ',') 11504 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ()); 11505 unpack_varlen_hex (&rs->buf[2], &found_addr); 11506 *found_addrp = found_addr; 11507 } 11508 else 11509 error (_("Unknown qSearch:memory reply: %s"), rs->buf.data ()); 11510 11511 return found; 11512 } 11513 11514 void 11515 remote_target::rcmd (const char *command, struct ui_file *outbuf) 11516 { 11517 struct remote_state *rs = get_remote_state (); 11518 char *p = rs->buf.data (); 11519 11520 if (!rs->remote_desc) 11521 error (_("remote rcmd is only available after target open")); 11522 11523 /* Send a NULL command across as an empty command. */ 11524 if (command == NULL) 11525 command = ""; 11526 11527 /* The query prefix. */ 11528 strcpy (rs->buf.data (), "qRcmd,"); 11529 p = strchr (rs->buf.data (), '\0'); 11530 11531 if ((strlen (rs->buf.data ()) + strlen (command) * 2 + 8/*misc*/) 11532 > get_remote_packet_size ()) 11533 error (_("\"monitor\" command ``%s'' is too long."), command); 11534 11535 /* Encode the actual command. */ 11536 bin2hex ((const gdb_byte *) command, p, strlen (command)); 11537 11538 if (putpkt (rs->buf) < 0) 11539 error (_("Communication problem with target.")); 11540 11541 /* get/display the response */ 11542 while (1) 11543 { 11544 char *buf; 11545 11546 /* XXX - see also remote_get_noisy_reply(). */ 11547 QUIT; /* Allow user to bail out with ^C. */ 11548 rs->buf[0] = '\0'; 11549 if (getpkt_sane (&rs->buf, 0) == -1) 11550 { 11551 /* Timeout. Continue to (try to) read responses. 11552 This is better than stopping with an error, assuming the stub 11553 is still executing the (long) monitor command. 11554 If needed, the user can interrupt gdb using C-c, obtaining 11555 an effect similar to stop on timeout. */ 11556 continue; 11557 } 11558 buf = rs->buf.data (); 11559 if (buf[0] == '\0') 11560 error (_("Target does not support this command.")); 11561 if (buf[0] == 'O' && buf[1] != 'K') 11562 { 11563 remote_console_output (buf + 1); /* 'O' message from stub. */ 11564 continue; 11565 } 11566 if (strcmp (buf, "OK") == 0) 11567 break; 11568 if (strlen (buf) == 3 && buf[0] == 'E' 11569 && isdigit (buf[1]) && isdigit (buf[2])) 11570 { 11571 error (_("Protocol error with Rcmd")); 11572 } 11573 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2) 11574 { 11575 char c = (fromhex (p[0]) << 4) + fromhex (p[1]); 11576 11577 fputc_unfiltered (c, outbuf); 11578 } 11579 break; 11580 } 11581 } 11582 11583 std::vector<mem_region> 11584 remote_target::memory_map () 11585 { 11586 std::vector<mem_region> result; 11587 gdb::optional<gdb::char_vector> text 11588 = target_read_stralloc (current_inferior ()->top_target (), 11589 TARGET_OBJECT_MEMORY_MAP, NULL); 11590 11591 if (text) 11592 result = parse_memory_map (text->data ()); 11593 11594 return result; 11595 } 11596 11597 static void 11598 packet_command (const char *args, int from_tty) 11599 { 11600 remote_target *remote = get_current_remote_target (); 11601 11602 if (remote == nullptr) 11603 error (_("command can only be used with remote target")); 11604 11605 remote->packet_command (args, from_tty); 11606 } 11607 11608 void 11609 remote_target::packet_command (const char *args, int from_tty) 11610 { 11611 if (!args) 11612 error (_("remote-packet command requires packet text as argument")); 11613 11614 puts_filtered ("sending: "); 11615 print_packet (args); 11616 puts_filtered ("\n"); 11617 putpkt (args); 11618 11619 remote_state *rs = get_remote_state (); 11620 11621 getpkt (&rs->buf, 0); 11622 puts_filtered ("received: "); 11623 print_packet (rs->buf.data ()); 11624 puts_filtered ("\n"); 11625 } 11626 11627 #if 0 11628 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */ 11629 11630 static void display_thread_info (struct gdb_ext_thread_info *info); 11631 11632 static void threadset_test_cmd (char *cmd, int tty); 11633 11634 static void threadalive_test (char *cmd, int tty); 11635 11636 static void threadlist_test_cmd (char *cmd, int tty); 11637 11638 int get_and_display_threadinfo (threadref *ref); 11639 11640 static void threadinfo_test_cmd (char *cmd, int tty); 11641 11642 static int thread_display_step (threadref *ref, void *context); 11643 11644 static void threadlist_update_test_cmd (char *cmd, int tty); 11645 11646 static void init_remote_threadtests (void); 11647 11648 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */ 11649 11650 static void 11651 threadset_test_cmd (const char *cmd, int tty) 11652 { 11653 int sample_thread = SAMPLE_THREAD; 11654 11655 printf_filtered (_("Remote threadset test\n")); 11656 set_general_thread (sample_thread); 11657 } 11658 11659 11660 static void 11661 threadalive_test (const char *cmd, int tty) 11662 { 11663 int sample_thread = SAMPLE_THREAD; 11664 int pid = inferior_ptid.pid (); 11665 ptid_t ptid = ptid_t (pid, sample_thread, 0); 11666 11667 if (remote_thread_alive (ptid)) 11668 printf_filtered ("PASS: Thread alive test\n"); 11669 else 11670 printf_filtered ("FAIL: Thread alive test\n"); 11671 } 11672 11673 void output_threadid (char *title, threadref *ref); 11674 11675 void 11676 output_threadid (char *title, threadref *ref) 11677 { 11678 char hexid[20]; 11679 11680 pack_threadid (&hexid[0], ref); /* Convert thread id into hex. */ 11681 hexid[16] = 0; 11682 printf_filtered ("%s %s\n", title, (&hexid[0])); 11683 } 11684 11685 static void 11686 threadlist_test_cmd (const char *cmd, int tty) 11687 { 11688 int startflag = 1; 11689 threadref nextthread; 11690 int done, result_count; 11691 threadref threadlist[3]; 11692 11693 printf_filtered ("Remote Threadlist test\n"); 11694 if (!remote_get_threadlist (startflag, &nextthread, 3, &done, 11695 &result_count, &threadlist[0])) 11696 printf_filtered ("FAIL: threadlist test\n"); 11697 else 11698 { 11699 threadref *scan = threadlist; 11700 threadref *limit = scan + result_count; 11701 11702 while (scan < limit) 11703 output_threadid (" thread ", scan++); 11704 } 11705 } 11706 11707 void 11708 display_thread_info (struct gdb_ext_thread_info *info) 11709 { 11710 output_threadid ("Threadid: ", &info->threadid); 11711 printf_filtered ("Name: %s\n ", info->shortname); 11712 printf_filtered ("State: %s\n", info->display); 11713 printf_filtered ("other: %s\n\n", info->more_display); 11714 } 11715 11716 int 11717 get_and_display_threadinfo (threadref *ref) 11718 { 11719 int result; 11720 int set; 11721 struct gdb_ext_thread_info threadinfo; 11722 11723 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME 11724 | TAG_MOREDISPLAY | TAG_DISPLAY; 11725 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo))) 11726 display_thread_info (&threadinfo); 11727 return result; 11728 } 11729 11730 static void 11731 threadinfo_test_cmd (const char *cmd, int tty) 11732 { 11733 int athread = SAMPLE_THREAD; 11734 threadref thread; 11735 int set; 11736 11737 int_to_threadref (&thread, athread); 11738 printf_filtered ("Remote Threadinfo test\n"); 11739 if (!get_and_display_threadinfo (&thread)) 11740 printf_filtered ("FAIL cannot get thread info\n"); 11741 } 11742 11743 static int 11744 thread_display_step (threadref *ref, void *context) 11745 { 11746 /* output_threadid(" threadstep ",ref); *//* simple test */ 11747 return get_and_display_threadinfo (ref); 11748 } 11749 11750 static void 11751 threadlist_update_test_cmd (const char *cmd, int tty) 11752 { 11753 printf_filtered ("Remote Threadlist update test\n"); 11754 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS); 11755 } 11756 11757 static void 11758 init_remote_threadtests (void) 11759 { 11760 add_com ("tlist", class_obscure, threadlist_test_cmd, 11761 _("Fetch and print the remote list of " 11762 "thread identifiers, one pkt only.")); 11763 add_com ("tinfo", class_obscure, threadinfo_test_cmd, 11764 _("Fetch and display info about one thread.")); 11765 add_com ("tset", class_obscure, threadset_test_cmd, 11766 _("Test setting to a different thread.")); 11767 add_com ("tupd", class_obscure, threadlist_update_test_cmd, 11768 _("Iterate through updating all remote thread info.")); 11769 add_com ("talive", class_obscure, threadalive_test, 11770 _("Remote thread alive test.")); 11771 } 11772 11773 #endif /* 0 */ 11774 11775 /* Convert a thread ID to a string. */ 11776 11777 std::string 11778 remote_target::pid_to_str (ptid_t ptid) 11779 { 11780 struct remote_state *rs = get_remote_state (); 11781 11782 if (ptid == null_ptid) 11783 return normal_pid_to_str (ptid); 11784 else if (ptid.is_pid ()) 11785 { 11786 /* Printing an inferior target id. */ 11787 11788 /* When multi-process extensions are off, there's no way in the 11789 remote protocol to know the remote process id, if there's any 11790 at all. There's one exception --- when we're connected with 11791 target extended-remote, and we manually attached to a process 11792 with "attach PID". We don't record anywhere a flag that 11793 allows us to distinguish that case from the case of 11794 connecting with extended-remote and the stub already being 11795 attached to a process, and reporting yes to qAttached, hence 11796 no smart special casing here. */ 11797 if (!remote_multi_process_p (rs)) 11798 return "Remote target"; 11799 11800 return normal_pid_to_str (ptid); 11801 } 11802 else 11803 { 11804 if (magic_null_ptid == ptid) 11805 return "Thread <main>"; 11806 else if (remote_multi_process_p (rs)) 11807 if (ptid.lwp () == 0) 11808 return normal_pid_to_str (ptid); 11809 else 11810 return string_printf ("Thread %d.%ld", 11811 ptid.pid (), ptid.lwp ()); 11812 else 11813 return string_printf ("Thread %ld", ptid.lwp ()); 11814 } 11815 } 11816 11817 /* Get the address of the thread local variable in OBJFILE which is 11818 stored at OFFSET within the thread local storage for thread PTID. */ 11819 11820 CORE_ADDR 11821 remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm, 11822 CORE_ADDR offset) 11823 { 11824 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE) 11825 { 11826 struct remote_state *rs = get_remote_state (); 11827 char *p = rs->buf.data (); 11828 char *endp = p + get_remote_packet_size (); 11829 enum packet_result result; 11830 11831 strcpy (p, "qGetTLSAddr:"); 11832 p += strlen (p); 11833 p = write_ptid (p, endp, ptid); 11834 *p++ = ','; 11835 p += hexnumstr (p, offset); 11836 *p++ = ','; 11837 p += hexnumstr (p, lm); 11838 *p++ = '\0'; 11839 11840 putpkt (rs->buf); 11841 getpkt (&rs->buf, 0); 11842 result = packet_ok (rs->buf, 11843 &remote_protocol_packets[PACKET_qGetTLSAddr]); 11844 if (result == PACKET_OK) 11845 { 11846 ULONGEST addr; 11847 11848 unpack_varlen_hex (rs->buf.data (), &addr); 11849 return addr; 11850 } 11851 else if (result == PACKET_UNKNOWN) 11852 throw_error (TLS_GENERIC_ERROR, 11853 _("Remote target doesn't support qGetTLSAddr packet")); 11854 else 11855 throw_error (TLS_GENERIC_ERROR, 11856 _("Remote target failed to process qGetTLSAddr request")); 11857 } 11858 else 11859 throw_error (TLS_GENERIC_ERROR, 11860 _("TLS not supported or disabled on this target")); 11861 /* Not reached. */ 11862 return 0; 11863 } 11864 11865 /* Provide thread local base, i.e. Thread Information Block address. 11866 Returns 1 if ptid is found and thread_local_base is non zero. */ 11867 11868 bool 11869 remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr) 11870 { 11871 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE) 11872 { 11873 struct remote_state *rs = get_remote_state (); 11874 char *p = rs->buf.data (); 11875 char *endp = p + get_remote_packet_size (); 11876 enum packet_result result; 11877 11878 strcpy (p, "qGetTIBAddr:"); 11879 p += strlen (p); 11880 p = write_ptid (p, endp, ptid); 11881 *p++ = '\0'; 11882 11883 putpkt (rs->buf); 11884 getpkt (&rs->buf, 0); 11885 result = packet_ok (rs->buf, 11886 &remote_protocol_packets[PACKET_qGetTIBAddr]); 11887 if (result == PACKET_OK) 11888 { 11889 ULONGEST val; 11890 unpack_varlen_hex (rs->buf.data (), &val); 11891 if (addr) 11892 *addr = (CORE_ADDR) val; 11893 return true; 11894 } 11895 else if (result == PACKET_UNKNOWN) 11896 error (_("Remote target doesn't support qGetTIBAddr packet")); 11897 else 11898 error (_("Remote target failed to process qGetTIBAddr request")); 11899 } 11900 else 11901 error (_("qGetTIBAddr not supported or disabled on this target")); 11902 /* Not reached. */ 11903 return false; 11904 } 11905 11906 /* Support for inferring a target description based on the current 11907 architecture and the size of a 'g' packet. While the 'g' packet 11908 can have any size (since optional registers can be left off the 11909 end), some sizes are easily recognizable given knowledge of the 11910 approximate architecture. */ 11911 11912 struct remote_g_packet_guess 11913 { 11914 remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_) 11915 : bytes (bytes_), 11916 tdesc (tdesc_) 11917 { 11918 } 11919 11920 int bytes; 11921 const struct target_desc *tdesc; 11922 }; 11923 11924 struct remote_g_packet_data : public allocate_on_obstack 11925 { 11926 std::vector<remote_g_packet_guess> guesses; 11927 }; 11928 11929 static struct gdbarch_data *remote_g_packet_data_handle; 11930 11931 static void * 11932 remote_g_packet_data_init (struct obstack *obstack) 11933 { 11934 return new (obstack) remote_g_packet_data; 11935 } 11936 11937 void 11938 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes, 11939 const struct target_desc *tdesc) 11940 { 11941 struct remote_g_packet_data *data 11942 = ((struct remote_g_packet_data *) 11943 gdbarch_data (gdbarch, remote_g_packet_data_handle)); 11944 11945 gdb_assert (tdesc != NULL); 11946 11947 for (const remote_g_packet_guess &guess : data->guesses) 11948 if (guess.bytes == bytes) 11949 internal_error (__FILE__, __LINE__, 11950 _("Duplicate g packet description added for size %d"), 11951 bytes); 11952 11953 data->guesses.emplace_back (bytes, tdesc); 11954 } 11955 11956 /* Return true if remote_read_description would do anything on this target 11957 and architecture, false otherwise. */ 11958 11959 static bool 11960 remote_read_description_p (struct target_ops *target) 11961 { 11962 struct remote_g_packet_data *data 11963 = ((struct remote_g_packet_data *) 11964 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle)); 11965 11966 return !data->guesses.empty (); 11967 } 11968 11969 const struct target_desc * 11970 remote_target::read_description () 11971 { 11972 struct remote_g_packet_data *data 11973 = ((struct remote_g_packet_data *) 11974 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle)); 11975 11976 /* Do not try this during initial connection, when we do not know 11977 whether there is a running but stopped thread. */ 11978 if (!target_has_execution () || inferior_ptid == null_ptid) 11979 return beneath ()->read_description (); 11980 11981 if (!data->guesses.empty ()) 11982 { 11983 int bytes = send_g_packet (); 11984 11985 for (const remote_g_packet_guess &guess : data->guesses) 11986 if (guess.bytes == bytes) 11987 return guess.tdesc; 11988 11989 /* We discard the g packet. A minor optimization would be to 11990 hold on to it, and fill the register cache once we have selected 11991 an architecture, but it's too tricky to do safely. */ 11992 } 11993 11994 return beneath ()->read_description (); 11995 } 11996 11997 /* Remote file transfer support. This is host-initiated I/O, not 11998 target-initiated; for target-initiated, see remote-fileio.c. */ 11999 12000 /* If *LEFT is at least the length of STRING, copy STRING to 12001 *BUFFER, update *BUFFER to point to the new end of the buffer, and 12002 decrease *LEFT. Otherwise raise an error. */ 12003 12004 static void 12005 remote_buffer_add_string (char **buffer, int *left, const char *string) 12006 { 12007 int len = strlen (string); 12008 12009 if (len > *left) 12010 error (_("Packet too long for target.")); 12011 12012 memcpy (*buffer, string, len); 12013 *buffer += len; 12014 *left -= len; 12015 12016 /* NUL-terminate the buffer as a convenience, if there is 12017 room. */ 12018 if (*left) 12019 **buffer = '\0'; 12020 } 12021 12022 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into 12023 *BUFFER, update *BUFFER to point to the new end of the buffer, and 12024 decrease *LEFT. Otherwise raise an error. */ 12025 12026 static void 12027 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes, 12028 int len) 12029 { 12030 if (2 * len > *left) 12031 error (_("Packet too long for target.")); 12032 12033 bin2hex (bytes, *buffer, len); 12034 *buffer += 2 * len; 12035 *left -= 2 * len; 12036 12037 /* NUL-terminate the buffer as a convenience, if there is 12038 room. */ 12039 if (*left) 12040 **buffer = '\0'; 12041 } 12042 12043 /* If *LEFT is large enough, convert VALUE to hex and add it to 12044 *BUFFER, update *BUFFER to point to the new end of the buffer, and 12045 decrease *LEFT. Otherwise raise an error. */ 12046 12047 static void 12048 remote_buffer_add_int (char **buffer, int *left, ULONGEST value) 12049 { 12050 int len = hexnumlen (value); 12051 12052 if (len > *left) 12053 error (_("Packet too long for target.")); 12054 12055 hexnumstr (*buffer, value); 12056 *buffer += len; 12057 *left -= len; 12058 12059 /* NUL-terminate the buffer as a convenience, if there is 12060 room. */ 12061 if (*left) 12062 **buffer = '\0'; 12063 } 12064 12065 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return 12066 value, *REMOTE_ERRNO to the remote error number or zero if none 12067 was included, and *ATTACHMENT to point to the start of the annex 12068 if any. The length of the packet isn't needed here; there may 12069 be NUL bytes in BUFFER, but they will be after *ATTACHMENT. 12070 12071 Return 0 if the packet could be parsed, -1 if it could not. If 12072 -1 is returned, the other variables may not be initialized. */ 12073 12074 static int 12075 remote_hostio_parse_result (const char *buffer, int *retcode, 12076 int *remote_errno, const char **attachment) 12077 { 12078 char *p, *p2; 12079 12080 *remote_errno = 0; 12081 *attachment = NULL; 12082 12083 if (buffer[0] != 'F') 12084 return -1; 12085 12086 errno = 0; 12087 *retcode = strtol (&buffer[1], &p, 16); 12088 if (errno != 0 || p == &buffer[1]) 12089 return -1; 12090 12091 /* Check for ",errno". */ 12092 if (*p == ',') 12093 { 12094 errno = 0; 12095 *remote_errno = strtol (p + 1, &p2, 16); 12096 if (errno != 0 || p + 1 == p2) 12097 return -1; 12098 p = p2; 12099 } 12100 12101 /* Check for ";attachment". If there is no attachment, the 12102 packet should end here. */ 12103 if (*p == ';') 12104 { 12105 *attachment = p + 1; 12106 return 0; 12107 } 12108 else if (*p == '\0') 12109 return 0; 12110 else 12111 return -1; 12112 } 12113 12114 /* Send a prepared I/O packet to the target and read its response. 12115 The prepared packet is in the global RS->BUF before this function 12116 is called, and the answer is there when we return. 12117 12118 COMMAND_BYTES is the length of the request to send, which may include 12119 binary data. WHICH_PACKET is the packet configuration to check 12120 before attempting a packet. If an error occurs, *REMOTE_ERRNO 12121 is set to the error number and -1 is returned. Otherwise the value 12122 returned by the function is returned. 12123 12124 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an 12125 attachment is expected; an error will be reported if there's a 12126 mismatch. If one is found, *ATTACHMENT will be set to point into 12127 the packet buffer and *ATTACHMENT_LEN will be set to the 12128 attachment's length. */ 12129 12130 int 12131 remote_target::remote_hostio_send_command (int command_bytes, int which_packet, 12132 int *remote_errno, const char **attachment, 12133 int *attachment_len) 12134 { 12135 struct remote_state *rs = get_remote_state (); 12136 int ret, bytes_read; 12137 const char *attachment_tmp; 12138 12139 if (packet_support (which_packet) == PACKET_DISABLE) 12140 { 12141 *remote_errno = FILEIO_ENOSYS; 12142 return -1; 12143 } 12144 12145 putpkt_binary (rs->buf.data (), command_bytes); 12146 bytes_read = getpkt_sane (&rs->buf, 0); 12147 12148 /* If it timed out, something is wrong. Don't try to parse the 12149 buffer. */ 12150 if (bytes_read < 0) 12151 { 12152 *remote_errno = FILEIO_EINVAL; 12153 return -1; 12154 } 12155 12156 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet])) 12157 { 12158 case PACKET_ERROR: 12159 *remote_errno = FILEIO_EINVAL; 12160 return -1; 12161 case PACKET_UNKNOWN: 12162 *remote_errno = FILEIO_ENOSYS; 12163 return -1; 12164 case PACKET_OK: 12165 break; 12166 } 12167 12168 if (remote_hostio_parse_result (rs->buf.data (), &ret, remote_errno, 12169 &attachment_tmp)) 12170 { 12171 *remote_errno = FILEIO_EINVAL; 12172 return -1; 12173 } 12174 12175 /* Make sure we saw an attachment if and only if we expected one. */ 12176 if ((attachment_tmp == NULL && attachment != NULL) 12177 || (attachment_tmp != NULL && attachment == NULL)) 12178 { 12179 *remote_errno = FILEIO_EINVAL; 12180 return -1; 12181 } 12182 12183 /* If an attachment was found, it must point into the packet buffer; 12184 work out how many bytes there were. */ 12185 if (attachment_tmp != NULL) 12186 { 12187 *attachment = attachment_tmp; 12188 *attachment_len = bytes_read - (*attachment - rs->buf.data ()); 12189 } 12190 12191 return ret; 12192 } 12193 12194 /* See declaration.h. */ 12195 12196 void 12197 readahead_cache::invalidate () 12198 { 12199 this->fd = -1; 12200 } 12201 12202 /* See declaration.h. */ 12203 12204 void 12205 readahead_cache::invalidate_fd (int fd) 12206 { 12207 if (this->fd == fd) 12208 this->fd = -1; 12209 } 12210 12211 /* Set the filesystem remote_hostio functions that take FILENAME 12212 arguments will use. Return 0 on success, or -1 if an error 12213 occurs (and set *REMOTE_ERRNO). */ 12214 12215 int 12216 remote_target::remote_hostio_set_filesystem (struct inferior *inf, 12217 int *remote_errno) 12218 { 12219 struct remote_state *rs = get_remote_state (); 12220 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid; 12221 char *p = rs->buf.data (); 12222 int left = get_remote_packet_size () - 1; 12223 char arg[9]; 12224 int ret; 12225 12226 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE) 12227 return 0; 12228 12229 if (rs->fs_pid != -1 && required_pid == rs->fs_pid) 12230 return 0; 12231 12232 remote_buffer_add_string (&p, &left, "vFile:setfs:"); 12233 12234 xsnprintf (arg, sizeof (arg), "%x", required_pid); 12235 remote_buffer_add_string (&p, &left, arg); 12236 12237 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_setfs, 12238 remote_errno, NULL, NULL); 12239 12240 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE) 12241 return 0; 12242 12243 if (ret == 0) 12244 rs->fs_pid = required_pid; 12245 12246 return ret; 12247 } 12248 12249 /* Implementation of to_fileio_open. */ 12250 12251 int 12252 remote_target::remote_hostio_open (inferior *inf, const char *filename, 12253 int flags, int mode, int warn_if_slow, 12254 int *remote_errno) 12255 { 12256 struct remote_state *rs = get_remote_state (); 12257 char *p = rs->buf.data (); 12258 int left = get_remote_packet_size () - 1; 12259 12260 if (warn_if_slow) 12261 { 12262 static int warning_issued = 0; 12263 12264 printf_unfiltered (_("Reading %s from remote target...\n"), 12265 filename); 12266 12267 if (!warning_issued) 12268 { 12269 warning (_("File transfers from remote targets can be slow." 12270 " Use \"set sysroot\" to access files locally" 12271 " instead.")); 12272 warning_issued = 1; 12273 } 12274 } 12275 12276 if (remote_hostio_set_filesystem (inf, remote_errno) != 0) 12277 return -1; 12278 12279 remote_buffer_add_string (&p, &left, "vFile:open:"); 12280 12281 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename, 12282 strlen (filename)); 12283 remote_buffer_add_string (&p, &left, ","); 12284 12285 remote_buffer_add_int (&p, &left, flags); 12286 remote_buffer_add_string (&p, &left, ","); 12287 12288 remote_buffer_add_int (&p, &left, mode); 12289 12290 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_open, 12291 remote_errno, NULL, NULL); 12292 } 12293 12294 int 12295 remote_target::fileio_open (struct inferior *inf, const char *filename, 12296 int flags, int mode, int warn_if_slow, 12297 int *remote_errno) 12298 { 12299 return remote_hostio_open (inf, filename, flags, mode, warn_if_slow, 12300 remote_errno); 12301 } 12302 12303 /* Implementation of to_fileio_pwrite. */ 12304 12305 int 12306 remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len, 12307 ULONGEST offset, int *remote_errno) 12308 { 12309 struct remote_state *rs = get_remote_state (); 12310 char *p = rs->buf.data (); 12311 int left = get_remote_packet_size (); 12312 int out_len; 12313 12314 rs->readahead_cache.invalidate_fd (fd); 12315 12316 remote_buffer_add_string (&p, &left, "vFile:pwrite:"); 12317 12318 remote_buffer_add_int (&p, &left, fd); 12319 remote_buffer_add_string (&p, &left, ","); 12320 12321 remote_buffer_add_int (&p, &left, offset); 12322 remote_buffer_add_string (&p, &left, ","); 12323 12324 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len, 12325 (get_remote_packet_size () 12326 - (p - rs->buf.data ()))); 12327 12328 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pwrite, 12329 remote_errno, NULL, NULL); 12330 } 12331 12332 int 12333 remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len, 12334 ULONGEST offset, int *remote_errno) 12335 { 12336 return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno); 12337 } 12338 12339 /* Helper for the implementation of to_fileio_pread. Read the file 12340 from the remote side with vFile:pread. */ 12341 12342 int 12343 remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len, 12344 ULONGEST offset, int *remote_errno) 12345 { 12346 struct remote_state *rs = get_remote_state (); 12347 char *p = rs->buf.data (); 12348 const char *attachment; 12349 int left = get_remote_packet_size (); 12350 int ret, attachment_len; 12351 int read_len; 12352 12353 remote_buffer_add_string (&p, &left, "vFile:pread:"); 12354 12355 remote_buffer_add_int (&p, &left, fd); 12356 remote_buffer_add_string (&p, &left, ","); 12357 12358 remote_buffer_add_int (&p, &left, len); 12359 remote_buffer_add_string (&p, &left, ","); 12360 12361 remote_buffer_add_int (&p, &left, offset); 12362 12363 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_pread, 12364 remote_errno, &attachment, 12365 &attachment_len); 12366 12367 if (ret < 0) 12368 return ret; 12369 12370 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len, 12371 read_buf, len); 12372 if (read_len != ret) 12373 error (_("Read returned %d, but %d bytes."), ret, (int) read_len); 12374 12375 return ret; 12376 } 12377 12378 /* See declaration.h. */ 12379 12380 int 12381 readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len, 12382 ULONGEST offset) 12383 { 12384 if (this->fd == fd 12385 && this->offset <= offset 12386 && offset < this->offset + this->bufsize) 12387 { 12388 ULONGEST max = this->offset + this->bufsize; 12389 12390 if (offset + len > max) 12391 len = max - offset; 12392 12393 memcpy (read_buf, this->buf + offset - this->offset, len); 12394 return len; 12395 } 12396 12397 return 0; 12398 } 12399 12400 /* Implementation of to_fileio_pread. */ 12401 12402 int 12403 remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len, 12404 ULONGEST offset, int *remote_errno) 12405 { 12406 int ret; 12407 struct remote_state *rs = get_remote_state (); 12408 readahead_cache *cache = &rs->readahead_cache; 12409 12410 ret = cache->pread (fd, read_buf, len, offset); 12411 if (ret > 0) 12412 { 12413 cache->hit_count++; 12414 12415 remote_debug_printf ("readahead cache hit %s", 12416 pulongest (cache->hit_count)); 12417 return ret; 12418 } 12419 12420 cache->miss_count++; 12421 12422 remote_debug_printf ("readahead cache miss %s", 12423 pulongest (cache->miss_count)); 12424 12425 cache->fd = fd; 12426 cache->offset = offset; 12427 cache->bufsize = get_remote_packet_size (); 12428 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize); 12429 12430 ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize, 12431 cache->offset, remote_errno); 12432 if (ret <= 0) 12433 { 12434 cache->invalidate_fd (fd); 12435 return ret; 12436 } 12437 12438 cache->bufsize = ret; 12439 return cache->pread (fd, read_buf, len, offset); 12440 } 12441 12442 int 12443 remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len, 12444 ULONGEST offset, int *remote_errno) 12445 { 12446 return remote_hostio_pread (fd, read_buf, len, offset, remote_errno); 12447 } 12448 12449 /* Implementation of to_fileio_close. */ 12450 12451 int 12452 remote_target::remote_hostio_close (int fd, int *remote_errno) 12453 { 12454 struct remote_state *rs = get_remote_state (); 12455 char *p = rs->buf.data (); 12456 int left = get_remote_packet_size () - 1; 12457 12458 rs->readahead_cache.invalidate_fd (fd); 12459 12460 remote_buffer_add_string (&p, &left, "vFile:close:"); 12461 12462 remote_buffer_add_int (&p, &left, fd); 12463 12464 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_close, 12465 remote_errno, NULL, NULL); 12466 } 12467 12468 int 12469 remote_target::fileio_close (int fd, int *remote_errno) 12470 { 12471 return remote_hostio_close (fd, remote_errno); 12472 } 12473 12474 /* Implementation of to_fileio_unlink. */ 12475 12476 int 12477 remote_target::remote_hostio_unlink (inferior *inf, const char *filename, 12478 int *remote_errno) 12479 { 12480 struct remote_state *rs = get_remote_state (); 12481 char *p = rs->buf.data (); 12482 int left = get_remote_packet_size () - 1; 12483 12484 if (remote_hostio_set_filesystem (inf, remote_errno) != 0) 12485 return -1; 12486 12487 remote_buffer_add_string (&p, &left, "vFile:unlink:"); 12488 12489 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename, 12490 strlen (filename)); 12491 12492 return remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_unlink, 12493 remote_errno, NULL, NULL); 12494 } 12495 12496 int 12497 remote_target::fileio_unlink (struct inferior *inf, const char *filename, 12498 int *remote_errno) 12499 { 12500 return remote_hostio_unlink (inf, filename, remote_errno); 12501 } 12502 12503 /* Implementation of to_fileio_readlink. */ 12504 12505 gdb::optional<std::string> 12506 remote_target::fileio_readlink (struct inferior *inf, const char *filename, 12507 int *remote_errno) 12508 { 12509 struct remote_state *rs = get_remote_state (); 12510 char *p = rs->buf.data (); 12511 const char *attachment; 12512 int left = get_remote_packet_size (); 12513 int len, attachment_len; 12514 int read_len; 12515 12516 if (remote_hostio_set_filesystem (inf, remote_errno) != 0) 12517 return {}; 12518 12519 remote_buffer_add_string (&p, &left, "vFile:readlink:"); 12520 12521 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename, 12522 strlen (filename)); 12523 12524 len = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_readlink, 12525 remote_errno, &attachment, 12526 &attachment_len); 12527 12528 if (len < 0) 12529 return {}; 12530 12531 std::string ret (len, '\0'); 12532 12533 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len, 12534 (gdb_byte *) &ret[0], len); 12535 if (read_len != len) 12536 error (_("Readlink returned %d, but %d bytes."), len, read_len); 12537 12538 return ret; 12539 } 12540 12541 /* Implementation of to_fileio_fstat. */ 12542 12543 int 12544 remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno) 12545 { 12546 struct remote_state *rs = get_remote_state (); 12547 char *p = rs->buf.data (); 12548 int left = get_remote_packet_size (); 12549 int attachment_len, ret; 12550 const char *attachment; 12551 struct fio_stat fst; 12552 int read_len; 12553 12554 remote_buffer_add_string (&p, &left, "vFile:fstat:"); 12555 12556 remote_buffer_add_int (&p, &left, fd); 12557 12558 ret = remote_hostio_send_command (p - rs->buf.data (), PACKET_vFile_fstat, 12559 remote_errno, &attachment, 12560 &attachment_len); 12561 if (ret < 0) 12562 { 12563 if (*remote_errno != FILEIO_ENOSYS) 12564 return ret; 12565 12566 /* Strictly we should return -1, ENOSYS here, but when 12567 "set sysroot remote:" was implemented in August 2008 12568 BFD's need for a stat function was sidestepped with 12569 this hack. This was not remedied until March 2015 12570 so we retain the previous behavior to avoid breaking 12571 compatibility. 12572 12573 Note that the memset is a March 2015 addition; older 12574 GDBs set st_size *and nothing else* so the structure 12575 would have garbage in all other fields. This might 12576 break something but retaining the previous behavior 12577 here would be just too wrong. */ 12578 12579 memset (st, 0, sizeof (struct stat)); 12580 st->st_size = INT_MAX; 12581 return 0; 12582 } 12583 12584 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len, 12585 (gdb_byte *) &fst, sizeof (fst)); 12586 12587 if (read_len != ret) 12588 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len); 12589 12590 if (read_len != sizeof (fst)) 12591 error (_("vFile:fstat returned %d bytes, but expecting %d."), 12592 read_len, (int) sizeof (fst)); 12593 12594 remote_fileio_to_host_stat (&fst, st); 12595 12596 return 0; 12597 } 12598 12599 /* Implementation of to_filesystem_is_local. */ 12600 12601 bool 12602 remote_target::filesystem_is_local () 12603 { 12604 /* Valgrind GDB presents itself as a remote target but works 12605 on the local filesystem: it does not implement remote get 12606 and users are not expected to set a sysroot. To handle 12607 this case we treat the remote filesystem as local if the 12608 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub 12609 does not support vFile:open. */ 12610 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0) 12611 { 12612 enum packet_support ps = packet_support (PACKET_vFile_open); 12613 12614 if (ps == PACKET_SUPPORT_UNKNOWN) 12615 { 12616 int fd, remote_errno; 12617 12618 /* Try opening a file to probe support. The supplied 12619 filename is irrelevant, we only care about whether 12620 the stub recognizes the packet or not. */ 12621 fd = remote_hostio_open (NULL, "just probing", 12622 FILEIO_O_RDONLY, 0700, 0, 12623 &remote_errno); 12624 12625 if (fd >= 0) 12626 remote_hostio_close (fd, &remote_errno); 12627 12628 ps = packet_support (PACKET_vFile_open); 12629 } 12630 12631 if (ps == PACKET_DISABLE) 12632 { 12633 static int warning_issued = 0; 12634 12635 if (!warning_issued) 12636 { 12637 warning (_("remote target does not support file" 12638 " transfer, attempting to access files" 12639 " from local filesystem.")); 12640 warning_issued = 1; 12641 } 12642 12643 return true; 12644 } 12645 } 12646 12647 return false; 12648 } 12649 12650 static int 12651 remote_fileio_errno_to_host (int errnum) 12652 { 12653 switch (errnum) 12654 { 12655 case FILEIO_EPERM: 12656 return EPERM; 12657 case FILEIO_ENOENT: 12658 return ENOENT; 12659 case FILEIO_EINTR: 12660 return EINTR; 12661 case FILEIO_EIO: 12662 return EIO; 12663 case FILEIO_EBADF: 12664 return EBADF; 12665 case FILEIO_EACCES: 12666 return EACCES; 12667 case FILEIO_EFAULT: 12668 return EFAULT; 12669 case FILEIO_EBUSY: 12670 return EBUSY; 12671 case FILEIO_EEXIST: 12672 return EEXIST; 12673 case FILEIO_ENODEV: 12674 return ENODEV; 12675 case FILEIO_ENOTDIR: 12676 return ENOTDIR; 12677 case FILEIO_EISDIR: 12678 return EISDIR; 12679 case FILEIO_EINVAL: 12680 return EINVAL; 12681 case FILEIO_ENFILE: 12682 return ENFILE; 12683 case FILEIO_EMFILE: 12684 return EMFILE; 12685 case FILEIO_EFBIG: 12686 return EFBIG; 12687 case FILEIO_ENOSPC: 12688 return ENOSPC; 12689 case FILEIO_ESPIPE: 12690 return ESPIPE; 12691 case FILEIO_EROFS: 12692 return EROFS; 12693 case FILEIO_ENOSYS: 12694 return ENOSYS; 12695 case FILEIO_ENAMETOOLONG: 12696 return ENAMETOOLONG; 12697 } 12698 return -1; 12699 } 12700 12701 static char * 12702 remote_hostio_error (int errnum) 12703 { 12704 int host_error = remote_fileio_errno_to_host (errnum); 12705 12706 if (host_error == -1) 12707 error (_("Unknown remote I/O error %d"), errnum); 12708 else 12709 error (_("Remote I/O error: %s"), safe_strerror (host_error)); 12710 } 12711 12712 /* A RAII wrapper around a remote file descriptor. */ 12713 12714 class scoped_remote_fd 12715 { 12716 public: 12717 scoped_remote_fd (remote_target *remote, int fd) 12718 : m_remote (remote), m_fd (fd) 12719 { 12720 } 12721 12722 ~scoped_remote_fd () 12723 { 12724 if (m_fd != -1) 12725 { 12726 try 12727 { 12728 int remote_errno; 12729 m_remote->remote_hostio_close (m_fd, &remote_errno); 12730 } 12731 catch (...) 12732 { 12733 /* Swallow exception before it escapes the dtor. If 12734 something goes wrong, likely the connection is gone, 12735 and there's nothing else that can be done. */ 12736 } 12737 } 12738 } 12739 12740 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd); 12741 12742 /* Release ownership of the file descriptor, and return it. */ 12743 ATTRIBUTE_UNUSED_RESULT int release () noexcept 12744 { 12745 int fd = m_fd; 12746 m_fd = -1; 12747 return fd; 12748 } 12749 12750 /* Return the owned file descriptor. */ 12751 int get () const noexcept 12752 { 12753 return m_fd; 12754 } 12755 12756 private: 12757 /* The remote target. */ 12758 remote_target *m_remote; 12759 12760 /* The owned remote I/O file descriptor. */ 12761 int m_fd; 12762 }; 12763 12764 void 12765 remote_file_put (const char *local_file, const char *remote_file, int from_tty) 12766 { 12767 remote_target *remote = get_current_remote_target (); 12768 12769 if (remote == nullptr) 12770 error (_("command can only be used with remote target")); 12771 12772 remote->remote_file_put (local_file, remote_file, from_tty); 12773 } 12774 12775 void 12776 remote_target::remote_file_put (const char *local_file, const char *remote_file, 12777 int from_tty) 12778 { 12779 int retcode, remote_errno, bytes, io_size; 12780 int bytes_in_buffer; 12781 int saw_eof; 12782 ULONGEST offset; 12783 12784 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb"); 12785 if (file == NULL) 12786 perror_with_name (local_file); 12787 12788 scoped_remote_fd fd 12789 (this, remote_hostio_open (NULL, 12790 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT 12791 | FILEIO_O_TRUNC), 12792 0700, 0, &remote_errno)); 12793 if (fd.get () == -1) 12794 remote_hostio_error (remote_errno); 12795 12796 /* Send up to this many bytes at once. They won't all fit in the 12797 remote packet limit, so we'll transfer slightly fewer. */ 12798 io_size = get_remote_packet_size (); 12799 gdb::byte_vector buffer (io_size); 12800 12801 bytes_in_buffer = 0; 12802 saw_eof = 0; 12803 offset = 0; 12804 while (bytes_in_buffer || !saw_eof) 12805 { 12806 if (!saw_eof) 12807 { 12808 bytes = fread (buffer.data () + bytes_in_buffer, 1, 12809 io_size - bytes_in_buffer, 12810 file.get ()); 12811 if (bytes == 0) 12812 { 12813 if (ferror (file.get ())) 12814 error (_("Error reading %s."), local_file); 12815 else 12816 { 12817 /* EOF. Unless there is something still in the 12818 buffer from the last iteration, we are done. */ 12819 saw_eof = 1; 12820 if (bytes_in_buffer == 0) 12821 break; 12822 } 12823 } 12824 } 12825 else 12826 bytes = 0; 12827 12828 bytes += bytes_in_buffer; 12829 bytes_in_buffer = 0; 12830 12831 retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes, 12832 offset, &remote_errno); 12833 12834 if (retcode < 0) 12835 remote_hostio_error (remote_errno); 12836 else if (retcode == 0) 12837 error (_("Remote write of %d bytes returned 0!"), bytes); 12838 else if (retcode < bytes) 12839 { 12840 /* Short write. Save the rest of the read data for the next 12841 write. */ 12842 bytes_in_buffer = bytes - retcode; 12843 memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer); 12844 } 12845 12846 offset += retcode; 12847 } 12848 12849 if (remote_hostio_close (fd.release (), &remote_errno)) 12850 remote_hostio_error (remote_errno); 12851 12852 if (from_tty) 12853 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file); 12854 } 12855 12856 void 12857 remote_file_get (const char *remote_file, const char *local_file, int from_tty) 12858 { 12859 remote_target *remote = get_current_remote_target (); 12860 12861 if (remote == nullptr) 12862 error (_("command can only be used with remote target")); 12863 12864 remote->remote_file_get (remote_file, local_file, from_tty); 12865 } 12866 12867 void 12868 remote_target::remote_file_get (const char *remote_file, const char *local_file, 12869 int from_tty) 12870 { 12871 int remote_errno, bytes, io_size; 12872 ULONGEST offset; 12873 12874 scoped_remote_fd fd 12875 (this, remote_hostio_open (NULL, 12876 remote_file, FILEIO_O_RDONLY, 0, 0, 12877 &remote_errno)); 12878 if (fd.get () == -1) 12879 remote_hostio_error (remote_errno); 12880 12881 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb"); 12882 if (file == NULL) 12883 perror_with_name (local_file); 12884 12885 /* Send up to this many bytes at once. They won't all fit in the 12886 remote packet limit, so we'll transfer slightly fewer. */ 12887 io_size = get_remote_packet_size (); 12888 gdb::byte_vector buffer (io_size); 12889 12890 offset = 0; 12891 while (1) 12892 { 12893 bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset, 12894 &remote_errno); 12895 if (bytes == 0) 12896 /* Success, but no bytes, means end-of-file. */ 12897 break; 12898 if (bytes == -1) 12899 remote_hostio_error (remote_errno); 12900 12901 offset += bytes; 12902 12903 bytes = fwrite (buffer.data (), 1, bytes, file.get ()); 12904 if (bytes == 0) 12905 perror_with_name (local_file); 12906 } 12907 12908 if (remote_hostio_close (fd.release (), &remote_errno)) 12909 remote_hostio_error (remote_errno); 12910 12911 if (from_tty) 12912 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file); 12913 } 12914 12915 void 12916 remote_file_delete (const char *remote_file, int from_tty) 12917 { 12918 remote_target *remote = get_current_remote_target (); 12919 12920 if (remote == nullptr) 12921 error (_("command can only be used with remote target")); 12922 12923 remote->remote_file_delete (remote_file, from_tty); 12924 } 12925 12926 void 12927 remote_target::remote_file_delete (const char *remote_file, int from_tty) 12928 { 12929 int retcode, remote_errno; 12930 12931 retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno); 12932 if (retcode == -1) 12933 remote_hostio_error (remote_errno); 12934 12935 if (from_tty) 12936 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file); 12937 } 12938 12939 static void 12940 remote_put_command (const char *args, int from_tty) 12941 { 12942 if (args == NULL) 12943 error_no_arg (_("file to put")); 12944 12945 gdb_argv argv (args); 12946 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL) 12947 error (_("Invalid parameters to remote put")); 12948 12949 remote_file_put (argv[0], argv[1], from_tty); 12950 } 12951 12952 static void 12953 remote_get_command (const char *args, int from_tty) 12954 { 12955 if (args == NULL) 12956 error_no_arg (_("file to get")); 12957 12958 gdb_argv argv (args); 12959 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL) 12960 error (_("Invalid parameters to remote get")); 12961 12962 remote_file_get (argv[0], argv[1], from_tty); 12963 } 12964 12965 static void 12966 remote_delete_command (const char *args, int from_tty) 12967 { 12968 if (args == NULL) 12969 error_no_arg (_("file to delete")); 12970 12971 gdb_argv argv (args); 12972 if (argv[0] == NULL || argv[1] != NULL) 12973 error (_("Invalid parameters to remote delete")); 12974 12975 remote_file_delete (argv[0], from_tty); 12976 } 12977 12978 bool 12979 remote_target::can_execute_reverse () 12980 { 12981 if (packet_support (PACKET_bs) == PACKET_ENABLE 12982 || packet_support (PACKET_bc) == PACKET_ENABLE) 12983 return true; 12984 else 12985 return false; 12986 } 12987 12988 bool 12989 remote_target::supports_non_stop () 12990 { 12991 return true; 12992 } 12993 12994 bool 12995 remote_target::supports_disable_randomization () 12996 { 12997 /* Only supported in extended mode. */ 12998 return false; 12999 } 13000 13001 bool 13002 remote_target::supports_multi_process () 13003 { 13004 struct remote_state *rs = get_remote_state (); 13005 13006 return remote_multi_process_p (rs); 13007 } 13008 13009 static int 13010 remote_supports_cond_tracepoints () 13011 { 13012 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE; 13013 } 13014 13015 bool 13016 remote_target::supports_evaluation_of_breakpoint_conditions () 13017 { 13018 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE; 13019 } 13020 13021 static int 13022 remote_supports_fast_tracepoints () 13023 { 13024 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE; 13025 } 13026 13027 static int 13028 remote_supports_static_tracepoints () 13029 { 13030 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE; 13031 } 13032 13033 static int 13034 remote_supports_install_in_trace () 13035 { 13036 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE; 13037 } 13038 13039 bool 13040 remote_target::supports_enable_disable_tracepoint () 13041 { 13042 return (packet_support (PACKET_EnableDisableTracepoints_feature) 13043 == PACKET_ENABLE); 13044 } 13045 13046 bool 13047 remote_target::supports_string_tracing () 13048 { 13049 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE; 13050 } 13051 13052 bool 13053 remote_target::can_run_breakpoint_commands () 13054 { 13055 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE; 13056 } 13057 13058 void 13059 remote_target::trace_init () 13060 { 13061 struct remote_state *rs = get_remote_state (); 13062 13063 putpkt ("QTinit"); 13064 remote_get_noisy_reply (); 13065 if (strcmp (rs->buf.data (), "OK") != 0) 13066 error (_("Target does not support this command.")); 13067 } 13068 13069 /* Recursive routine to walk through command list including loops, and 13070 download packets for each command. */ 13071 13072 void 13073 remote_target::remote_download_command_source (int num, ULONGEST addr, 13074 struct command_line *cmds) 13075 { 13076 struct remote_state *rs = get_remote_state (); 13077 struct command_line *cmd; 13078 13079 for (cmd = cmds; cmd; cmd = cmd->next) 13080 { 13081 QUIT; /* Allow user to bail out with ^C. */ 13082 strcpy (rs->buf.data (), "QTDPsrc:"); 13083 encode_source_string (num, addr, "cmd", cmd->line, 13084 rs->buf.data () + strlen (rs->buf.data ()), 13085 rs->buf.size () - strlen (rs->buf.data ())); 13086 putpkt (rs->buf); 13087 remote_get_noisy_reply (); 13088 if (strcmp (rs->buf.data (), "OK")) 13089 warning (_("Target does not support source download.")); 13090 13091 if (cmd->control_type == while_control 13092 || cmd->control_type == while_stepping_control) 13093 { 13094 remote_download_command_source (num, addr, cmd->body_list_0.get ()); 13095 13096 QUIT; /* Allow user to bail out with ^C. */ 13097 strcpy (rs->buf.data (), "QTDPsrc:"); 13098 encode_source_string (num, addr, "cmd", "end", 13099 rs->buf.data () + strlen (rs->buf.data ()), 13100 rs->buf.size () - strlen (rs->buf.data ())); 13101 putpkt (rs->buf); 13102 remote_get_noisy_reply (); 13103 if (strcmp (rs->buf.data (), "OK")) 13104 warning (_("Target does not support source download.")); 13105 } 13106 } 13107 } 13108 13109 void 13110 remote_target::download_tracepoint (struct bp_location *loc) 13111 { 13112 CORE_ADDR tpaddr; 13113 char addrbuf[40]; 13114 std::vector<std::string> tdp_actions; 13115 std::vector<std::string> stepping_actions; 13116 char *pkt; 13117 struct breakpoint *b = loc->owner; 13118 struct tracepoint *t = (struct tracepoint *) b; 13119 struct remote_state *rs = get_remote_state (); 13120 int ret; 13121 const char *err_msg = _("Tracepoint packet too large for target."); 13122 size_t size_left; 13123 13124 /* We use a buffer other than rs->buf because we'll build strings 13125 across multiple statements, and other statements in between could 13126 modify rs->buf. */ 13127 gdb::char_vector buf (get_remote_packet_size ()); 13128 13129 encode_actions_rsp (loc, &tdp_actions, &stepping_actions); 13130 13131 tpaddr = loc->address; 13132 strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR))); 13133 ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x", 13134 b->number, addrbuf, /* address */ 13135 (b->enable_state == bp_enabled ? 'E' : 'D'), 13136 t->step_count, t->pass_count); 13137 13138 if (ret < 0 || ret >= buf.size ()) 13139 error ("%s", err_msg); 13140 13141 /* Fast tracepoints are mostly handled by the target, but we can 13142 tell the target how big of an instruction block should be moved 13143 around. */ 13144 if (b->type == bp_fast_tracepoint) 13145 { 13146 /* Only test for support at download time; we may not know 13147 target capabilities at definition time. */ 13148 if (remote_supports_fast_tracepoints ()) 13149 { 13150 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr, 13151 NULL)) 13152 { 13153 size_left = buf.size () - strlen (buf.data ()); 13154 ret = snprintf (buf.data () + strlen (buf.data ()), 13155 size_left, ":F%x", 13156 gdb_insn_length (loc->gdbarch, tpaddr)); 13157 13158 if (ret < 0 || ret >= size_left) 13159 error ("%s", err_msg); 13160 } 13161 else 13162 /* If it passed validation at definition but fails now, 13163 something is very wrong. */ 13164 internal_error (__FILE__, __LINE__, 13165 _("Fast tracepoint not " 13166 "valid during download")); 13167 } 13168 else 13169 /* Fast tracepoints are functionally identical to regular 13170 tracepoints, so don't take lack of support as a reason to 13171 give up on the trace run. */ 13172 warning (_("Target does not support fast tracepoints, " 13173 "downloading %d as regular tracepoint"), b->number); 13174 } 13175 else if (b->type == bp_static_tracepoint) 13176 { 13177 /* Only test for support at download time; we may not know 13178 target capabilities at definition time. */ 13179 if (remote_supports_static_tracepoints ()) 13180 { 13181 struct static_tracepoint_marker marker; 13182 13183 if (target_static_tracepoint_marker_at (tpaddr, &marker)) 13184 { 13185 size_left = buf.size () - strlen (buf.data ()); 13186 ret = snprintf (buf.data () + strlen (buf.data ()), 13187 size_left, ":S"); 13188 13189 if (ret < 0 || ret >= size_left) 13190 error ("%s", err_msg); 13191 } 13192 else 13193 error (_("Static tracepoint not valid during download")); 13194 } 13195 else 13196 /* Fast tracepoints are functionally identical to regular 13197 tracepoints, so don't take lack of support as a reason 13198 to give up on the trace run. */ 13199 error (_("Target does not support static tracepoints")); 13200 } 13201 /* If the tracepoint has a conditional, make it into an agent 13202 expression and append to the definition. */ 13203 if (loc->cond) 13204 { 13205 /* Only test support at download time, we may not know target 13206 capabilities at definition time. */ 13207 if (remote_supports_cond_tracepoints ()) 13208 { 13209 agent_expr_up aexpr = gen_eval_for_expr (tpaddr, 13210 loc->cond.get ()); 13211 13212 size_left = buf.size () - strlen (buf.data ()); 13213 13214 ret = snprintf (buf.data () + strlen (buf.data ()), 13215 size_left, ":X%x,", aexpr->len); 13216 13217 if (ret < 0 || ret >= size_left) 13218 error ("%s", err_msg); 13219 13220 size_left = buf.size () - strlen (buf.data ()); 13221 13222 /* Two bytes to encode each aexpr byte, plus the terminating 13223 null byte. */ 13224 if (aexpr->len * 2 + 1 > size_left) 13225 error ("%s", err_msg); 13226 13227 pkt = buf.data () + strlen (buf.data ()); 13228 13229 for (int ndx = 0; ndx < aexpr->len; ++ndx) 13230 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]); 13231 *pkt = '\0'; 13232 } 13233 else 13234 warning (_("Target does not support conditional tracepoints, " 13235 "ignoring tp %d cond"), b->number); 13236 } 13237 13238 if (b->commands || *default_collect) 13239 { 13240 size_left = buf.size () - strlen (buf.data ()); 13241 13242 ret = snprintf (buf.data () + strlen (buf.data ()), 13243 size_left, "-"); 13244 13245 if (ret < 0 || ret >= size_left) 13246 error ("%s", err_msg); 13247 } 13248 13249 putpkt (buf.data ()); 13250 remote_get_noisy_reply (); 13251 if (strcmp (rs->buf.data (), "OK")) 13252 error (_("Target does not support tracepoints.")); 13253 13254 /* do_single_steps (t); */ 13255 for (auto action_it = tdp_actions.begin (); 13256 action_it != tdp_actions.end (); action_it++) 13257 { 13258 QUIT; /* Allow user to bail out with ^C. */ 13259 13260 bool has_more = ((action_it + 1) != tdp_actions.end () 13261 || !stepping_actions.empty ()); 13262 13263 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c", 13264 b->number, addrbuf, /* address */ 13265 action_it->c_str (), 13266 has_more ? '-' : 0); 13267 13268 if (ret < 0 || ret >= buf.size ()) 13269 error ("%s", err_msg); 13270 13271 putpkt (buf.data ()); 13272 remote_get_noisy_reply (); 13273 if (strcmp (rs->buf.data (), "OK")) 13274 error (_("Error on target while setting tracepoints.")); 13275 } 13276 13277 for (auto action_it = stepping_actions.begin (); 13278 action_it != stepping_actions.end (); action_it++) 13279 { 13280 QUIT; /* Allow user to bail out with ^C. */ 13281 13282 bool is_first = action_it == stepping_actions.begin (); 13283 bool has_more = (action_it + 1) != stepping_actions.end (); 13284 13285 ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s", 13286 b->number, addrbuf, /* address */ 13287 is_first ? "S" : "", 13288 action_it->c_str (), 13289 has_more ? "-" : ""); 13290 13291 if (ret < 0 || ret >= buf.size ()) 13292 error ("%s", err_msg); 13293 13294 putpkt (buf.data ()); 13295 remote_get_noisy_reply (); 13296 if (strcmp (rs->buf.data (), "OK")) 13297 error (_("Error on target while setting tracepoints.")); 13298 } 13299 13300 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE) 13301 { 13302 if (b->location != NULL) 13303 { 13304 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:"); 13305 13306 if (ret < 0 || ret >= buf.size ()) 13307 error ("%s", err_msg); 13308 13309 encode_source_string (b->number, loc->address, "at", 13310 event_location_to_string (b->location.get ()), 13311 buf.data () + strlen (buf.data ()), 13312 buf.size () - strlen (buf.data ())); 13313 putpkt (buf.data ()); 13314 remote_get_noisy_reply (); 13315 if (strcmp (rs->buf.data (), "OK")) 13316 warning (_("Target does not support source download.")); 13317 } 13318 if (b->cond_string) 13319 { 13320 ret = snprintf (buf.data (), buf.size (), "QTDPsrc:"); 13321 13322 if (ret < 0 || ret >= buf.size ()) 13323 error ("%s", err_msg); 13324 13325 encode_source_string (b->number, loc->address, 13326 "cond", b->cond_string, 13327 buf.data () + strlen (buf.data ()), 13328 buf.size () - strlen (buf.data ())); 13329 putpkt (buf.data ()); 13330 remote_get_noisy_reply (); 13331 if (strcmp (rs->buf.data (), "OK")) 13332 warning (_("Target does not support source download.")); 13333 } 13334 remote_download_command_source (b->number, loc->address, 13335 breakpoint_commands (b)); 13336 } 13337 } 13338 13339 bool 13340 remote_target::can_download_tracepoint () 13341 { 13342 struct remote_state *rs = get_remote_state (); 13343 struct trace_status *ts; 13344 int status; 13345 13346 /* Don't try to install tracepoints until we've relocated our 13347 symbols, and fetched and merged the target's tracepoint list with 13348 ours. */ 13349 if (rs->starting_up) 13350 return false; 13351 13352 ts = current_trace_status (); 13353 status = get_trace_status (ts); 13354 13355 if (status == -1 || !ts->running_known || !ts->running) 13356 return false; 13357 13358 /* If we are in a tracing experiment, but remote stub doesn't support 13359 installing tracepoint in trace, we have to return. */ 13360 if (!remote_supports_install_in_trace ()) 13361 return false; 13362 13363 return true; 13364 } 13365 13366 13367 void 13368 remote_target::download_trace_state_variable (const trace_state_variable &tsv) 13369 { 13370 struct remote_state *rs = get_remote_state (); 13371 char *p; 13372 13373 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:", 13374 tsv.number, phex ((ULONGEST) tsv.initial_value, 8), 13375 tsv.builtin); 13376 p = rs->buf.data () + strlen (rs->buf.data ()); 13377 if ((p - rs->buf.data ()) + tsv.name.length () * 2 13378 >= get_remote_packet_size ()) 13379 error (_("Trace state variable name too long for tsv definition packet")); 13380 p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ()); 13381 *p++ = '\0'; 13382 putpkt (rs->buf); 13383 remote_get_noisy_reply (); 13384 if (rs->buf[0] == '\0') 13385 error (_("Target does not support this command.")); 13386 if (strcmp (rs->buf.data (), "OK") != 0) 13387 error (_("Error on target while downloading trace state variable.")); 13388 } 13389 13390 void 13391 remote_target::enable_tracepoint (struct bp_location *location) 13392 { 13393 struct remote_state *rs = get_remote_state (); 13394 13395 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s", 13396 location->owner->number, 13397 phex (location->address, sizeof (CORE_ADDR))); 13398 putpkt (rs->buf); 13399 remote_get_noisy_reply (); 13400 if (rs->buf[0] == '\0') 13401 error (_("Target does not support enabling tracepoints while a trace run is ongoing.")); 13402 if (strcmp (rs->buf.data (), "OK") != 0) 13403 error (_("Error on target while enabling tracepoint.")); 13404 } 13405 13406 void 13407 remote_target::disable_tracepoint (struct bp_location *location) 13408 { 13409 struct remote_state *rs = get_remote_state (); 13410 13411 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s", 13412 location->owner->number, 13413 phex (location->address, sizeof (CORE_ADDR))); 13414 putpkt (rs->buf); 13415 remote_get_noisy_reply (); 13416 if (rs->buf[0] == '\0') 13417 error (_("Target does not support disabling tracepoints while a trace run is ongoing.")); 13418 if (strcmp (rs->buf.data (), "OK") != 0) 13419 error (_("Error on target while disabling tracepoint.")); 13420 } 13421 13422 void 13423 remote_target::trace_set_readonly_regions () 13424 { 13425 asection *s; 13426 bfd_size_type size; 13427 bfd_vma vma; 13428 int anysecs = 0; 13429 int offset = 0; 13430 13431 if (!current_program_space->exec_bfd ()) 13432 return; /* No information to give. */ 13433 13434 struct remote_state *rs = get_remote_state (); 13435 13436 strcpy (rs->buf.data (), "QTro"); 13437 offset = strlen (rs->buf.data ()); 13438 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next) 13439 { 13440 char tmp1[40], tmp2[40]; 13441 int sec_length; 13442 13443 if ((s->flags & SEC_LOAD) == 0 || 13444 /* (s->flags & SEC_CODE) == 0 || */ 13445 (s->flags & SEC_READONLY) == 0) 13446 continue; 13447 13448 anysecs = 1; 13449 vma = bfd_section_vma (s); 13450 size = bfd_section_size (s); 13451 sprintf_vma (tmp1, vma); 13452 sprintf_vma (tmp2, vma + size); 13453 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2); 13454 if (offset + sec_length + 1 > rs->buf.size ()) 13455 { 13456 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE) 13457 warning (_("\ 13458 Too many sections for read-only sections definition packet.")); 13459 break; 13460 } 13461 xsnprintf (rs->buf.data () + offset, rs->buf.size () - offset, ":%s,%s", 13462 tmp1, tmp2); 13463 offset += sec_length; 13464 } 13465 if (anysecs) 13466 { 13467 putpkt (rs->buf); 13468 getpkt (&rs->buf, 0); 13469 } 13470 } 13471 13472 void 13473 remote_target::trace_start () 13474 { 13475 struct remote_state *rs = get_remote_state (); 13476 13477 putpkt ("QTStart"); 13478 remote_get_noisy_reply (); 13479 if (rs->buf[0] == '\0') 13480 error (_("Target does not support this command.")); 13481 if (strcmp (rs->buf.data (), "OK") != 0) 13482 error (_("Bogus reply from target: %s"), rs->buf.data ()); 13483 } 13484 13485 int 13486 remote_target::get_trace_status (struct trace_status *ts) 13487 { 13488 /* Initialize it just to avoid a GCC false warning. */ 13489 char *p = NULL; 13490 enum packet_result result; 13491 struct remote_state *rs = get_remote_state (); 13492 13493 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE) 13494 return -1; 13495 13496 /* FIXME we need to get register block size some other way. */ 13497 trace_regblock_size 13498 = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet; 13499 13500 putpkt ("qTStatus"); 13501 13502 try 13503 { 13504 p = remote_get_noisy_reply (); 13505 } 13506 catch (const gdb_exception_error &ex) 13507 { 13508 if (ex.error != TARGET_CLOSE_ERROR) 13509 { 13510 exception_fprintf (gdb_stderr, ex, "qTStatus: "); 13511 return -1; 13512 } 13513 throw; 13514 } 13515 13516 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]); 13517 13518 /* If the remote target doesn't do tracing, flag it. */ 13519 if (result == PACKET_UNKNOWN) 13520 return -1; 13521 13522 /* We're working with a live target. */ 13523 ts->filename = NULL; 13524 13525 if (*p++ != 'T') 13526 error (_("Bogus trace status reply from target: %s"), rs->buf.data ()); 13527 13528 /* Function 'parse_trace_status' sets default value of each field of 13529 'ts' at first, so we don't have to do it here. */ 13530 parse_trace_status (p, ts); 13531 13532 return ts->running; 13533 } 13534 13535 void 13536 remote_target::get_tracepoint_status (struct breakpoint *bp, 13537 struct uploaded_tp *utp) 13538 { 13539 struct remote_state *rs = get_remote_state (); 13540 char *reply; 13541 struct tracepoint *tp = (struct tracepoint *) bp; 13542 size_t size = get_remote_packet_size (); 13543 13544 if (tp) 13545 { 13546 tp->hit_count = 0; 13547 tp->traceframe_usage = 0; 13548 for (bp_location *loc : tp->locations ()) 13549 { 13550 /* If the tracepoint was never downloaded, don't go asking for 13551 any status. */ 13552 if (tp->number_on_target == 0) 13553 continue; 13554 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", tp->number_on_target, 13555 phex_nz (loc->address, 0)); 13556 putpkt (rs->buf); 13557 reply = remote_get_noisy_reply (); 13558 if (reply && *reply) 13559 { 13560 if (*reply == 'V') 13561 parse_tracepoint_status (reply + 1, bp, utp); 13562 } 13563 } 13564 } 13565 else if (utp) 13566 { 13567 utp->hit_count = 0; 13568 utp->traceframe_usage = 0; 13569 xsnprintf (rs->buf.data (), size, "qTP:%x:%s", utp->number, 13570 phex_nz (utp->addr, 0)); 13571 putpkt (rs->buf); 13572 reply = remote_get_noisy_reply (); 13573 if (reply && *reply) 13574 { 13575 if (*reply == 'V') 13576 parse_tracepoint_status (reply + 1, bp, utp); 13577 } 13578 } 13579 } 13580 13581 void 13582 remote_target::trace_stop () 13583 { 13584 struct remote_state *rs = get_remote_state (); 13585 13586 putpkt ("QTStop"); 13587 remote_get_noisy_reply (); 13588 if (rs->buf[0] == '\0') 13589 error (_("Target does not support this command.")); 13590 if (strcmp (rs->buf.data (), "OK") != 0) 13591 error (_("Bogus reply from target: %s"), rs->buf.data ()); 13592 } 13593 13594 int 13595 remote_target::trace_find (enum trace_find_type type, int num, 13596 CORE_ADDR addr1, CORE_ADDR addr2, 13597 int *tpp) 13598 { 13599 struct remote_state *rs = get_remote_state (); 13600 char *endbuf = rs->buf.data () + get_remote_packet_size (); 13601 char *p, *reply; 13602 int target_frameno = -1, target_tracept = -1; 13603 13604 /* Lookups other than by absolute frame number depend on the current 13605 trace selected, so make sure it is correct on the remote end 13606 first. */ 13607 if (type != tfind_number) 13608 set_remote_traceframe (); 13609 13610 p = rs->buf.data (); 13611 strcpy (p, "QTFrame:"); 13612 p = strchr (p, '\0'); 13613 switch (type) 13614 { 13615 case tfind_number: 13616 xsnprintf (p, endbuf - p, "%x", num); 13617 break; 13618 case tfind_pc: 13619 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0)); 13620 break; 13621 case tfind_tp: 13622 xsnprintf (p, endbuf - p, "tdp:%x", num); 13623 break; 13624 case tfind_range: 13625 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0), 13626 phex_nz (addr2, 0)); 13627 break; 13628 case tfind_outside: 13629 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0), 13630 phex_nz (addr2, 0)); 13631 break; 13632 default: 13633 error (_("Unknown trace find type %d"), type); 13634 } 13635 13636 putpkt (rs->buf); 13637 reply = remote_get_noisy_reply (); 13638 if (*reply == '\0') 13639 error (_("Target does not support this command.")); 13640 13641 while (reply && *reply) 13642 switch (*reply) 13643 { 13644 case 'F': 13645 p = ++reply; 13646 target_frameno = (int) strtol (p, &reply, 16); 13647 if (reply == p) 13648 error (_("Unable to parse trace frame number")); 13649 /* Don't update our remote traceframe number cache on failure 13650 to select a remote traceframe. */ 13651 if (target_frameno == -1) 13652 return -1; 13653 break; 13654 case 'T': 13655 p = ++reply; 13656 target_tracept = (int) strtol (p, &reply, 16); 13657 if (reply == p) 13658 error (_("Unable to parse tracepoint number")); 13659 break; 13660 case 'O': /* "OK"? */ 13661 if (reply[1] == 'K' && reply[2] == '\0') 13662 reply += 2; 13663 else 13664 error (_("Bogus reply from target: %s"), reply); 13665 break; 13666 default: 13667 error (_("Bogus reply from target: %s"), reply); 13668 } 13669 if (tpp) 13670 *tpp = target_tracept; 13671 13672 rs->remote_traceframe_number = target_frameno; 13673 return target_frameno; 13674 } 13675 13676 bool 13677 remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val) 13678 { 13679 struct remote_state *rs = get_remote_state (); 13680 char *reply; 13681 ULONGEST uval; 13682 13683 set_remote_traceframe (); 13684 13685 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTV:%x", tsvnum); 13686 putpkt (rs->buf); 13687 reply = remote_get_noisy_reply (); 13688 if (reply && *reply) 13689 { 13690 if (*reply == 'V') 13691 { 13692 unpack_varlen_hex (reply + 1, &uval); 13693 *val = (LONGEST) uval; 13694 return true; 13695 } 13696 } 13697 return false; 13698 } 13699 13700 int 13701 remote_target::save_trace_data (const char *filename) 13702 { 13703 struct remote_state *rs = get_remote_state (); 13704 char *p, *reply; 13705 13706 p = rs->buf.data (); 13707 strcpy (p, "QTSave:"); 13708 p += strlen (p); 13709 if ((p - rs->buf.data ()) + strlen (filename) * 2 13710 >= get_remote_packet_size ()) 13711 error (_("Remote file name too long for trace save packet")); 13712 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename)); 13713 *p++ = '\0'; 13714 putpkt (rs->buf); 13715 reply = remote_get_noisy_reply (); 13716 if (*reply == '\0') 13717 error (_("Target does not support this command.")); 13718 if (strcmp (reply, "OK") != 0) 13719 error (_("Bogus reply from target: %s"), reply); 13720 return 0; 13721 } 13722 13723 /* This is basically a memory transfer, but needs to be its own packet 13724 because we don't know how the target actually organizes its trace 13725 memory, plus we want to be able to ask for as much as possible, but 13726 not be unhappy if we don't get as much as we ask for. */ 13727 13728 LONGEST 13729 remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) 13730 { 13731 struct remote_state *rs = get_remote_state (); 13732 char *reply; 13733 char *p; 13734 int rslt; 13735 13736 p = rs->buf.data (); 13737 strcpy (p, "qTBuffer:"); 13738 p += strlen (p); 13739 p += hexnumstr (p, offset); 13740 *p++ = ','; 13741 p += hexnumstr (p, len); 13742 *p++ = '\0'; 13743 13744 putpkt (rs->buf); 13745 reply = remote_get_noisy_reply (); 13746 if (reply && *reply) 13747 { 13748 /* 'l' by itself means we're at the end of the buffer and 13749 there is nothing more to get. */ 13750 if (*reply == 'l') 13751 return 0; 13752 13753 /* Convert the reply into binary. Limit the number of bytes to 13754 convert according to our passed-in buffer size, rather than 13755 what was returned in the packet; if the target is 13756 unexpectedly generous and gives us a bigger reply than we 13757 asked for, we don't want to crash. */ 13758 rslt = hex2bin (reply, buf, len); 13759 return rslt; 13760 } 13761 13762 /* Something went wrong, flag as an error. */ 13763 return -1; 13764 } 13765 13766 void 13767 remote_target::set_disconnected_tracing (int val) 13768 { 13769 struct remote_state *rs = get_remote_state (); 13770 13771 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE) 13772 { 13773 char *reply; 13774 13775 xsnprintf (rs->buf.data (), get_remote_packet_size (), 13776 "QTDisconnected:%x", val); 13777 putpkt (rs->buf); 13778 reply = remote_get_noisy_reply (); 13779 if (*reply == '\0') 13780 error (_("Target does not support this command.")); 13781 if (strcmp (reply, "OK") != 0) 13782 error (_("Bogus reply from target: %s"), reply); 13783 } 13784 else if (val) 13785 warning (_("Target does not support disconnected tracing.")); 13786 } 13787 13788 int 13789 remote_target::core_of_thread (ptid_t ptid) 13790 { 13791 thread_info *info = find_thread_ptid (this, ptid); 13792 13793 if (info != NULL && info->priv != NULL) 13794 return get_remote_thread_info (info)->core; 13795 13796 return -1; 13797 } 13798 13799 void 13800 remote_target::set_circular_trace_buffer (int val) 13801 { 13802 struct remote_state *rs = get_remote_state (); 13803 char *reply; 13804 13805 xsnprintf (rs->buf.data (), get_remote_packet_size (), 13806 "QTBuffer:circular:%x", val); 13807 putpkt (rs->buf); 13808 reply = remote_get_noisy_reply (); 13809 if (*reply == '\0') 13810 error (_("Target does not support this command.")); 13811 if (strcmp (reply, "OK") != 0) 13812 error (_("Bogus reply from target: %s"), reply); 13813 } 13814 13815 traceframe_info_up 13816 remote_target::traceframe_info () 13817 { 13818 gdb::optional<gdb::char_vector> text 13819 = target_read_stralloc (current_inferior ()->top_target (), 13820 TARGET_OBJECT_TRACEFRAME_INFO, 13821 NULL); 13822 if (text) 13823 return parse_traceframe_info (text->data ()); 13824 13825 return NULL; 13826 } 13827 13828 /* Handle the qTMinFTPILen packet. Returns the minimum length of 13829 instruction on which a fast tracepoint may be placed. Returns -1 13830 if the packet is not supported, and 0 if the minimum instruction 13831 length is unknown. */ 13832 13833 int 13834 remote_target::get_min_fast_tracepoint_insn_len () 13835 { 13836 struct remote_state *rs = get_remote_state (); 13837 char *reply; 13838 13839 /* If we're not debugging a process yet, the IPA can't be 13840 loaded. */ 13841 if (!target_has_execution ()) 13842 return 0; 13843 13844 /* Make sure the remote is pointing at the right process. */ 13845 set_general_process (); 13846 13847 xsnprintf (rs->buf.data (), get_remote_packet_size (), "qTMinFTPILen"); 13848 putpkt (rs->buf); 13849 reply = remote_get_noisy_reply (); 13850 if (*reply == '\0') 13851 return -1; 13852 else 13853 { 13854 ULONGEST min_insn_len; 13855 13856 unpack_varlen_hex (reply, &min_insn_len); 13857 13858 return (int) min_insn_len; 13859 } 13860 } 13861 13862 void 13863 remote_target::set_trace_buffer_size (LONGEST val) 13864 { 13865 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE) 13866 { 13867 struct remote_state *rs = get_remote_state (); 13868 char *buf = rs->buf.data (); 13869 char *endbuf = buf + get_remote_packet_size (); 13870 enum packet_result result; 13871 13872 gdb_assert (val >= 0 || val == -1); 13873 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:"); 13874 /* Send -1 as literal "-1" to avoid host size dependency. */ 13875 if (val < 0) 13876 { 13877 *buf++ = '-'; 13878 buf += hexnumstr (buf, (ULONGEST) -val); 13879 } 13880 else 13881 buf += hexnumstr (buf, (ULONGEST) val); 13882 13883 putpkt (rs->buf); 13884 remote_get_noisy_reply (); 13885 result = packet_ok (rs->buf, 13886 &remote_protocol_packets[PACKET_QTBuffer_size]); 13887 13888 if (result != PACKET_OK) 13889 warning (_("Bogus reply from target: %s"), rs->buf.data ()); 13890 } 13891 } 13892 13893 bool 13894 remote_target::set_trace_notes (const char *user, const char *notes, 13895 const char *stop_notes) 13896 { 13897 struct remote_state *rs = get_remote_state (); 13898 char *reply; 13899 char *buf = rs->buf.data (); 13900 char *endbuf = buf + get_remote_packet_size (); 13901 int nbytes; 13902 13903 buf += xsnprintf (buf, endbuf - buf, "QTNotes:"); 13904 if (user) 13905 { 13906 buf += xsnprintf (buf, endbuf - buf, "user:"); 13907 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user)); 13908 buf += 2 * nbytes; 13909 *buf++ = ';'; 13910 } 13911 if (notes) 13912 { 13913 buf += xsnprintf (buf, endbuf - buf, "notes:"); 13914 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes)); 13915 buf += 2 * nbytes; 13916 *buf++ = ';'; 13917 } 13918 if (stop_notes) 13919 { 13920 buf += xsnprintf (buf, endbuf - buf, "tstop:"); 13921 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes)); 13922 buf += 2 * nbytes; 13923 *buf++ = ';'; 13924 } 13925 /* Ensure the buffer is terminated. */ 13926 *buf = '\0'; 13927 13928 putpkt (rs->buf); 13929 reply = remote_get_noisy_reply (); 13930 if (*reply == '\0') 13931 return false; 13932 13933 if (strcmp (reply, "OK") != 0) 13934 error (_("Bogus reply from target: %s"), reply); 13935 13936 return true; 13937 } 13938 13939 bool 13940 remote_target::use_agent (bool use) 13941 { 13942 if (packet_support (PACKET_QAgent) != PACKET_DISABLE) 13943 { 13944 struct remote_state *rs = get_remote_state (); 13945 13946 /* If the stub supports QAgent. */ 13947 xsnprintf (rs->buf.data (), get_remote_packet_size (), "QAgent:%d", use); 13948 putpkt (rs->buf); 13949 getpkt (&rs->buf, 0); 13950 13951 if (strcmp (rs->buf.data (), "OK") == 0) 13952 { 13953 ::use_agent = use; 13954 return true; 13955 } 13956 } 13957 13958 return false; 13959 } 13960 13961 bool 13962 remote_target::can_use_agent () 13963 { 13964 return (packet_support (PACKET_QAgent) != PACKET_DISABLE); 13965 } 13966 13967 struct btrace_target_info 13968 { 13969 /* The ptid of the traced thread. */ 13970 ptid_t ptid; 13971 13972 /* The obtained branch trace configuration. */ 13973 struct btrace_config conf; 13974 }; 13975 13976 /* Reset our idea of our target's btrace configuration. */ 13977 13978 static void 13979 remote_btrace_reset (remote_state *rs) 13980 { 13981 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config)); 13982 } 13983 13984 /* Synchronize the configuration with the target. */ 13985 13986 void 13987 remote_target::btrace_sync_conf (const btrace_config *conf) 13988 { 13989 struct packet_config *packet; 13990 struct remote_state *rs; 13991 char *buf, *pos, *endbuf; 13992 13993 rs = get_remote_state (); 13994 buf = rs->buf.data (); 13995 endbuf = buf + get_remote_packet_size (); 13996 13997 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size]; 13998 if (packet_config_support (packet) == PACKET_ENABLE 13999 && conf->bts.size != rs->btrace_config.bts.size) 14000 { 14001 pos = buf; 14002 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name, 14003 conf->bts.size); 14004 14005 putpkt (buf); 14006 getpkt (&rs->buf, 0); 14007 14008 if (packet_ok (buf, packet) == PACKET_ERROR) 14009 { 14010 if (buf[0] == 'E' && buf[1] == '.') 14011 error (_("Failed to configure the BTS buffer size: %s"), buf + 2); 14012 else 14013 error (_("Failed to configure the BTS buffer size.")); 14014 } 14015 14016 rs->btrace_config.bts.size = conf->bts.size; 14017 } 14018 14019 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size]; 14020 if (packet_config_support (packet) == PACKET_ENABLE 14021 && conf->pt.size != rs->btrace_config.pt.size) 14022 { 14023 pos = buf; 14024 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name, 14025 conf->pt.size); 14026 14027 putpkt (buf); 14028 getpkt (&rs->buf, 0); 14029 14030 if (packet_ok (buf, packet) == PACKET_ERROR) 14031 { 14032 if (buf[0] == 'E' && buf[1] == '.') 14033 error (_("Failed to configure the trace buffer size: %s"), buf + 2); 14034 else 14035 error (_("Failed to configure the trace buffer size.")); 14036 } 14037 14038 rs->btrace_config.pt.size = conf->pt.size; 14039 } 14040 } 14041 14042 /* Read the current thread's btrace configuration from the target and 14043 store it into CONF. */ 14044 14045 static void 14046 btrace_read_config (struct btrace_config *conf) 14047 { 14048 gdb::optional<gdb::char_vector> xml 14049 = target_read_stralloc (current_inferior ()->top_target (), 14050 TARGET_OBJECT_BTRACE_CONF, ""); 14051 if (xml) 14052 parse_xml_btrace_conf (conf, xml->data ()); 14053 } 14054 14055 /* Maybe reopen target btrace. */ 14056 14057 void 14058 remote_target::remote_btrace_maybe_reopen () 14059 { 14060 struct remote_state *rs = get_remote_state (); 14061 int btrace_target_pushed = 0; 14062 #if !defined (HAVE_LIBIPT) 14063 int warned = 0; 14064 #endif 14065 14066 /* Don't bother walking the entirety of the remote thread list when 14067 we know the feature isn't supported by the remote. */ 14068 if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE) 14069 return; 14070 14071 scoped_restore_current_thread restore_thread; 14072 14073 for (thread_info *tp : all_non_exited_threads (this)) 14074 { 14075 set_general_thread (tp->ptid); 14076 14077 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config)); 14078 btrace_read_config (&rs->btrace_config); 14079 14080 if (rs->btrace_config.format == BTRACE_FORMAT_NONE) 14081 continue; 14082 14083 #if !defined (HAVE_LIBIPT) 14084 if (rs->btrace_config.format == BTRACE_FORMAT_PT) 14085 { 14086 if (!warned) 14087 { 14088 warned = 1; 14089 warning (_("Target is recording using Intel Processor Trace " 14090 "but support was disabled at compile time.")); 14091 } 14092 14093 continue; 14094 } 14095 #endif /* !defined (HAVE_LIBIPT) */ 14096 14097 /* Push target, once, but before anything else happens. This way our 14098 changes to the threads will be cleaned up by unpushing the target 14099 in case btrace_read_config () throws. */ 14100 if (!btrace_target_pushed) 14101 { 14102 btrace_target_pushed = 1; 14103 record_btrace_push_target (); 14104 printf_filtered (_("Target is recording using %s.\n"), 14105 btrace_format_string (rs->btrace_config.format)); 14106 } 14107 14108 tp->btrace.target = XCNEW (struct btrace_target_info); 14109 tp->btrace.target->ptid = tp->ptid; 14110 tp->btrace.target->conf = rs->btrace_config; 14111 } 14112 } 14113 14114 /* Enable branch tracing. */ 14115 14116 struct btrace_target_info * 14117 remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf) 14118 { 14119 struct btrace_target_info *tinfo = NULL; 14120 struct packet_config *packet = NULL; 14121 struct remote_state *rs = get_remote_state (); 14122 char *buf = rs->buf.data (); 14123 char *endbuf = buf + get_remote_packet_size (); 14124 14125 switch (conf->format) 14126 { 14127 case BTRACE_FORMAT_BTS: 14128 packet = &remote_protocol_packets[PACKET_Qbtrace_bts]; 14129 break; 14130 14131 case BTRACE_FORMAT_PT: 14132 packet = &remote_protocol_packets[PACKET_Qbtrace_pt]; 14133 break; 14134 } 14135 14136 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE) 14137 error (_("Target does not support branch tracing.")); 14138 14139 btrace_sync_conf (conf); 14140 14141 set_general_thread (ptid); 14142 14143 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name); 14144 putpkt (rs->buf); 14145 getpkt (&rs->buf, 0); 14146 14147 if (packet_ok (rs->buf, packet) == PACKET_ERROR) 14148 { 14149 if (rs->buf[0] == 'E' && rs->buf[1] == '.') 14150 error (_("Could not enable branch tracing for %s: %s"), 14151 target_pid_to_str (ptid).c_str (), &rs->buf[2]); 14152 else 14153 error (_("Could not enable branch tracing for %s."), 14154 target_pid_to_str (ptid).c_str ()); 14155 } 14156 14157 tinfo = XCNEW (struct btrace_target_info); 14158 tinfo->ptid = ptid; 14159 14160 /* If we fail to read the configuration, we lose some information, but the 14161 tracing itself is not impacted. */ 14162 try 14163 { 14164 btrace_read_config (&tinfo->conf); 14165 } 14166 catch (const gdb_exception_error &err) 14167 { 14168 if (err.message != NULL) 14169 warning ("%s", err.what ()); 14170 } 14171 14172 return tinfo; 14173 } 14174 14175 /* Disable branch tracing. */ 14176 14177 void 14178 remote_target::disable_btrace (struct btrace_target_info *tinfo) 14179 { 14180 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off]; 14181 struct remote_state *rs = get_remote_state (); 14182 char *buf = rs->buf.data (); 14183 char *endbuf = buf + get_remote_packet_size (); 14184 14185 if (packet_config_support (packet) != PACKET_ENABLE) 14186 error (_("Target does not support branch tracing.")); 14187 14188 set_general_thread (tinfo->ptid); 14189 14190 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name); 14191 putpkt (rs->buf); 14192 getpkt (&rs->buf, 0); 14193 14194 if (packet_ok (rs->buf, packet) == PACKET_ERROR) 14195 { 14196 if (rs->buf[0] == 'E' && rs->buf[1] == '.') 14197 error (_("Could not disable branch tracing for %s: %s"), 14198 target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]); 14199 else 14200 error (_("Could not disable branch tracing for %s."), 14201 target_pid_to_str (tinfo->ptid).c_str ()); 14202 } 14203 14204 xfree (tinfo); 14205 } 14206 14207 /* Teardown branch tracing. */ 14208 14209 void 14210 remote_target::teardown_btrace (struct btrace_target_info *tinfo) 14211 { 14212 /* We must not talk to the target during teardown. */ 14213 xfree (tinfo); 14214 } 14215 14216 /* Read the branch trace. */ 14217 14218 enum btrace_error 14219 remote_target::read_btrace (struct btrace_data *btrace, 14220 struct btrace_target_info *tinfo, 14221 enum btrace_read_type type) 14222 { 14223 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace]; 14224 const char *annex; 14225 14226 if (packet_config_support (packet) != PACKET_ENABLE) 14227 error (_("Target does not support branch tracing.")); 14228 14229 #if !defined(HAVE_LIBEXPAT) 14230 error (_("Cannot process branch tracing result. XML parsing not supported.")); 14231 #endif 14232 14233 switch (type) 14234 { 14235 case BTRACE_READ_ALL: 14236 annex = "all"; 14237 break; 14238 case BTRACE_READ_NEW: 14239 annex = "new"; 14240 break; 14241 case BTRACE_READ_DELTA: 14242 annex = "delta"; 14243 break; 14244 default: 14245 internal_error (__FILE__, __LINE__, 14246 _("Bad branch tracing read type: %u."), 14247 (unsigned int) type); 14248 } 14249 14250 gdb::optional<gdb::char_vector> xml 14251 = target_read_stralloc (current_inferior ()->top_target (), 14252 TARGET_OBJECT_BTRACE, annex); 14253 if (!xml) 14254 return BTRACE_ERR_UNKNOWN; 14255 14256 parse_xml_btrace (btrace, xml->data ()); 14257 14258 return BTRACE_ERR_NONE; 14259 } 14260 14261 const struct btrace_config * 14262 remote_target::btrace_conf (const struct btrace_target_info *tinfo) 14263 { 14264 return &tinfo->conf; 14265 } 14266 14267 bool 14268 remote_target::augmented_libraries_svr4_read () 14269 { 14270 return (packet_support (PACKET_augmented_libraries_svr4_read_feature) 14271 == PACKET_ENABLE); 14272 } 14273 14274 /* Implementation of to_load. */ 14275 14276 void 14277 remote_target::load (const char *name, int from_tty) 14278 { 14279 generic_load (name, from_tty); 14280 } 14281 14282 /* Accepts an integer PID; returns a string representing a file that 14283 can be opened on the remote side to get the symbols for the child 14284 process. Returns NULL if the operation is not supported. */ 14285 14286 char * 14287 remote_target::pid_to_exec_file (int pid) 14288 { 14289 static gdb::optional<gdb::char_vector> filename; 14290 char *annex = NULL; 14291 14292 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE) 14293 return NULL; 14294 14295 inferior *inf = find_inferior_pid (this, pid); 14296 if (inf == NULL) 14297 internal_error (__FILE__, __LINE__, 14298 _("not currently attached to process %d"), pid); 14299 14300 if (!inf->fake_pid_p) 14301 { 14302 const int annex_size = 9; 14303 14304 annex = (char *) alloca (annex_size); 14305 xsnprintf (annex, annex_size, "%x", pid); 14306 } 14307 14308 filename = target_read_stralloc (current_inferior ()->top_target (), 14309 TARGET_OBJECT_EXEC_FILE, annex); 14310 14311 return filename ? filename->data () : nullptr; 14312 } 14313 14314 /* Implement the to_can_do_single_step target_ops method. */ 14315 14316 int 14317 remote_target::can_do_single_step () 14318 { 14319 /* We can only tell whether target supports single step or not by 14320 supported s and S vCont actions if the stub supports vContSupported 14321 feature. If the stub doesn't support vContSupported feature, 14322 we have conservatively to think target doesn't supports single 14323 step. */ 14324 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE) 14325 { 14326 struct remote_state *rs = get_remote_state (); 14327 14328 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN) 14329 remote_vcont_probe (); 14330 14331 return rs->supports_vCont.s && rs->supports_vCont.S; 14332 } 14333 else 14334 return 0; 14335 } 14336 14337 /* Implementation of the to_execution_direction method for the remote 14338 target. */ 14339 14340 enum exec_direction_kind 14341 remote_target::execution_direction () 14342 { 14343 struct remote_state *rs = get_remote_state (); 14344 14345 return rs->last_resume_exec_dir; 14346 } 14347 14348 /* Return pointer to the thread_info struct which corresponds to 14349 THREAD_HANDLE (having length HANDLE_LEN). */ 14350 14351 thread_info * 14352 remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle, 14353 int handle_len, 14354 inferior *inf) 14355 { 14356 for (thread_info *tp : all_non_exited_threads (this)) 14357 { 14358 remote_thread_info *priv = get_remote_thread_info (tp); 14359 14360 if (tp->inf == inf && priv != NULL) 14361 { 14362 if (handle_len != priv->thread_handle.size ()) 14363 error (_("Thread handle size mismatch: %d vs %zu (from remote)"), 14364 handle_len, priv->thread_handle.size ()); 14365 if (memcmp (thread_handle, priv->thread_handle.data (), 14366 handle_len) == 0) 14367 return tp; 14368 } 14369 } 14370 14371 return NULL; 14372 } 14373 14374 gdb::byte_vector 14375 remote_target::thread_info_to_thread_handle (struct thread_info *tp) 14376 { 14377 remote_thread_info *priv = get_remote_thread_info (tp); 14378 return priv->thread_handle; 14379 } 14380 14381 bool 14382 remote_target::can_async_p () 14383 { 14384 struct remote_state *rs = get_remote_state (); 14385 14386 /* We don't go async if the user has explicitly prevented it with the 14387 "maint set target-async" command. */ 14388 if (!target_async_permitted) 14389 return false; 14390 14391 /* We're async whenever the serial device is. */ 14392 return serial_can_async_p (rs->remote_desc); 14393 } 14394 14395 bool 14396 remote_target::is_async_p () 14397 { 14398 struct remote_state *rs = get_remote_state (); 14399 14400 if (!target_async_permitted) 14401 /* We only enable async when the user specifically asks for it. */ 14402 return false; 14403 14404 /* We're async whenever the serial device is. */ 14405 return serial_is_async_p (rs->remote_desc); 14406 } 14407 14408 /* Pass the SERIAL event on and up to the client. One day this code 14409 will be able to delay notifying the client of an event until the 14410 point where an entire packet has been received. */ 14411 14412 static serial_event_ftype remote_async_serial_handler; 14413 14414 static void 14415 remote_async_serial_handler (struct serial *scb, void *context) 14416 { 14417 /* Don't propogate error information up to the client. Instead let 14418 the client find out about the error by querying the target. */ 14419 inferior_event_handler (INF_REG_EVENT); 14420 } 14421 14422 static void 14423 remote_async_inferior_event_handler (gdb_client_data data) 14424 { 14425 inferior_event_handler (INF_REG_EVENT); 14426 } 14427 14428 int 14429 remote_target::async_wait_fd () 14430 { 14431 struct remote_state *rs = get_remote_state (); 14432 return rs->remote_desc->fd; 14433 } 14434 14435 void 14436 remote_target::async (int enable) 14437 { 14438 struct remote_state *rs = get_remote_state (); 14439 14440 if (enable) 14441 { 14442 serial_async (rs->remote_desc, remote_async_serial_handler, rs); 14443 14444 /* If there are pending events in the stop reply queue tell the 14445 event loop to process them. */ 14446 if (!rs->stop_reply_queue.empty ()) 14447 mark_async_event_handler (rs->remote_async_inferior_event_token); 14448 /* For simplicity, below we clear the pending events token 14449 without remembering whether it is marked, so here we always 14450 mark it. If there's actually no pending notification to 14451 process, this ends up being a no-op (other than a spurious 14452 event-loop wakeup). */ 14453 if (target_is_non_stop_p ()) 14454 mark_async_event_handler (rs->notif_state->get_pending_events_token); 14455 } 14456 else 14457 { 14458 serial_async (rs->remote_desc, NULL, NULL); 14459 /* If the core is disabling async, it doesn't want to be 14460 disturbed with target events. Clear all async event sources 14461 too. */ 14462 clear_async_event_handler (rs->remote_async_inferior_event_token); 14463 if (target_is_non_stop_p ()) 14464 clear_async_event_handler (rs->notif_state->get_pending_events_token); 14465 } 14466 } 14467 14468 /* Implementation of the to_thread_events method. */ 14469 14470 void 14471 remote_target::thread_events (int enable) 14472 { 14473 struct remote_state *rs = get_remote_state (); 14474 size_t size = get_remote_packet_size (); 14475 14476 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE) 14477 return; 14478 14479 xsnprintf (rs->buf.data (), size, "QThreadEvents:%x", enable ? 1 : 0); 14480 putpkt (rs->buf); 14481 getpkt (&rs->buf, 0); 14482 14483 switch (packet_ok (rs->buf, 14484 &remote_protocol_packets[PACKET_QThreadEvents])) 14485 { 14486 case PACKET_OK: 14487 if (strcmp (rs->buf.data (), "OK") != 0) 14488 error (_("Remote refused setting thread events: %s"), rs->buf.data ()); 14489 break; 14490 case PACKET_ERROR: 14491 warning (_("Remote failure reply: %s"), rs->buf.data ()); 14492 break; 14493 case PACKET_UNKNOWN: 14494 break; 14495 } 14496 } 14497 14498 static void 14499 show_remote_cmd (const char *args, int from_tty) 14500 { 14501 /* We can't just use cmd_show_list here, because we want to skip 14502 the redundant "show remote Z-packet" and the legacy aliases. */ 14503 struct cmd_list_element *list = remote_show_cmdlist; 14504 struct ui_out *uiout = current_uiout; 14505 14506 ui_out_emit_tuple tuple_emitter (uiout, "showlist"); 14507 for (; list != NULL; list = list->next) 14508 if (strcmp (list->name, "Z-packet") == 0) 14509 continue; 14510 else if (list->type == not_set_cmd) 14511 /* Alias commands are exactly like the original, except they 14512 don't have the normal type. */ 14513 continue; 14514 else 14515 { 14516 ui_out_emit_tuple option_emitter (uiout, "option"); 14517 14518 uiout->field_string ("name", list->name); 14519 uiout->text (": "); 14520 if (list->type == show_cmd) 14521 do_show_command (NULL, from_tty, list); 14522 else 14523 cmd_func (list, NULL, from_tty); 14524 } 14525 } 14526 14527 14528 /* Function to be called whenever a new objfile (shlib) is detected. */ 14529 static void 14530 remote_new_objfile (struct objfile *objfile) 14531 { 14532 remote_target *remote = get_current_remote_target (); 14533 14534 /* First, check whether the current inferior's process target is a remote 14535 target. */ 14536 if (remote == nullptr) 14537 return; 14538 14539 /* When we are attaching or handling a fork child and the shared library 14540 subsystem reads the list of loaded libraries, we receive new objfile 14541 events in between each found library. The libraries are read in an 14542 undefined order, so if we gave the remote side a chance to look up 14543 symbols between each objfile, we might give it an inconsistent picture 14544 of the inferior. It could appear that a library A appears loaded but 14545 a library B does not, even though library A requires library B. That 14546 would present a state that couldn't normally exist in the inferior. 14547 14548 So, skip these events, we'll give the remote a chance to look up symbols 14549 once all the loaded libraries and their symbols are known to GDB. */ 14550 if (current_inferior ()->in_initial_library_scan) 14551 return; 14552 14553 remote->remote_check_symbols (); 14554 } 14555 14556 /* Pull all the tracepoints defined on the target and create local 14557 data structures representing them. We don't want to create real 14558 tracepoints yet, we don't want to mess up the user's existing 14559 collection. */ 14560 14561 int 14562 remote_target::upload_tracepoints (struct uploaded_tp **utpp) 14563 { 14564 struct remote_state *rs = get_remote_state (); 14565 char *p; 14566 14567 /* Ask for a first packet of tracepoint definition. */ 14568 putpkt ("qTfP"); 14569 getpkt (&rs->buf, 0); 14570 p = rs->buf.data (); 14571 while (*p && *p != 'l') 14572 { 14573 parse_tracepoint_definition (p, utpp); 14574 /* Ask for another packet of tracepoint definition. */ 14575 putpkt ("qTsP"); 14576 getpkt (&rs->buf, 0); 14577 p = rs->buf.data (); 14578 } 14579 return 0; 14580 } 14581 14582 int 14583 remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp) 14584 { 14585 struct remote_state *rs = get_remote_state (); 14586 char *p; 14587 14588 /* Ask for a first packet of variable definition. */ 14589 putpkt ("qTfV"); 14590 getpkt (&rs->buf, 0); 14591 p = rs->buf.data (); 14592 while (*p && *p != 'l') 14593 { 14594 parse_tsv_definition (p, utsvp); 14595 /* Ask for another packet of variable definition. */ 14596 putpkt ("qTsV"); 14597 getpkt (&rs->buf, 0); 14598 p = rs->buf.data (); 14599 } 14600 return 0; 14601 } 14602 14603 /* The "set/show range-stepping" show hook. */ 14604 14605 static void 14606 show_range_stepping (struct ui_file *file, int from_tty, 14607 struct cmd_list_element *c, 14608 const char *value) 14609 { 14610 fprintf_filtered (file, 14611 _("Debugger's willingness to use range stepping " 14612 "is %s.\n"), value); 14613 } 14614 14615 /* Return true if the vCont;r action is supported by the remote 14616 stub. */ 14617 14618 bool 14619 remote_target::vcont_r_supported () 14620 { 14621 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN) 14622 remote_vcont_probe (); 14623 14624 return (packet_support (PACKET_vCont) == PACKET_ENABLE 14625 && get_remote_state ()->supports_vCont.r); 14626 } 14627 14628 /* The "set/show range-stepping" set hook. */ 14629 14630 static void 14631 set_range_stepping (const char *ignore_args, int from_tty, 14632 struct cmd_list_element *c) 14633 { 14634 /* When enabling, check whether range stepping is actually supported 14635 by the target, and warn if not. */ 14636 if (use_range_stepping) 14637 { 14638 remote_target *remote = get_current_remote_target (); 14639 if (remote == NULL 14640 || !remote->vcont_r_supported ()) 14641 warning (_("Range stepping is not supported by the current target")); 14642 } 14643 } 14644 14645 static void 14646 show_remote_debug (struct ui_file *file, int from_tty, 14647 struct cmd_list_element *c, const char *value) 14648 { 14649 fprintf_filtered (file, _("Debugging of remote protocol is %s.\n"), 14650 value); 14651 } 14652 14653 static void 14654 show_remote_timeout (struct ui_file *file, int from_tty, 14655 struct cmd_list_element *c, const char *value) 14656 { 14657 fprintf_filtered (file, 14658 _("Timeout limit to wait for target to respond is %s.\n"), 14659 value); 14660 } 14661 14662 /* Implement the "supports_memory_tagging" target_ops method. */ 14663 14664 bool 14665 remote_target::supports_memory_tagging () 14666 { 14667 return remote_memory_tagging_p (); 14668 } 14669 14670 /* Create the qMemTags packet given ADDRESS, LEN and TYPE. */ 14671 14672 static void 14673 create_fetch_memtags_request (gdb::char_vector &packet, CORE_ADDR address, 14674 size_t len, int type) 14675 { 14676 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; 14677 14678 std::string request = string_printf ("qMemTags:%s,%s:%s", 14679 phex_nz (address, addr_size), 14680 phex_nz (len, sizeof (len)), 14681 phex_nz (type, sizeof (type))); 14682 14683 strcpy (packet.data (), request.c_str ()); 14684 } 14685 14686 /* Parse the qMemTags packet reply into TAGS. 14687 14688 Return true if successful, false otherwise. */ 14689 14690 static bool 14691 parse_fetch_memtags_reply (const gdb::char_vector &reply, 14692 gdb::byte_vector &tags) 14693 { 14694 if (reply.empty () || reply[0] == 'E' || reply[0] != 'm') 14695 return false; 14696 14697 /* Copy the tag data. */ 14698 tags = hex2bin (reply.data () + 1); 14699 14700 return true; 14701 } 14702 14703 /* Create the QMemTags packet given ADDRESS, LEN, TYPE and TAGS. */ 14704 14705 static void 14706 create_store_memtags_request (gdb::char_vector &packet, CORE_ADDR address, 14707 size_t len, int type, 14708 const gdb::byte_vector &tags) 14709 { 14710 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8; 14711 14712 /* Put together the main packet, address and length. */ 14713 std::string request = string_printf ("QMemTags:%s,%s:%s:", 14714 phex_nz (address, addr_size), 14715 phex_nz (len, sizeof (len)), 14716 phex_nz (type, sizeof (type))); 14717 request += bin2hex (tags.data (), tags.size ()); 14718 14719 /* Check if we have exceeded the maximum packet size. */ 14720 if (packet.size () < request.length ()) 14721 error (_("Contents too big for packet QMemTags.")); 14722 14723 strcpy (packet.data (), request.c_str ()); 14724 } 14725 14726 /* Implement the "fetch_memtags" target_ops method. */ 14727 14728 bool 14729 remote_target::fetch_memtags (CORE_ADDR address, size_t len, 14730 gdb::byte_vector &tags, int type) 14731 { 14732 /* Make sure the qMemTags packet is supported. */ 14733 if (!remote_memory_tagging_p ()) 14734 gdb_assert_not_reached ("remote fetch_memtags called with packet disabled"); 14735 14736 struct remote_state *rs = get_remote_state (); 14737 14738 create_fetch_memtags_request (rs->buf, address, len, type); 14739 14740 putpkt (rs->buf); 14741 getpkt (&rs->buf, 0); 14742 14743 return parse_fetch_memtags_reply (rs->buf, tags); 14744 } 14745 14746 /* Implement the "store_memtags" target_ops method. */ 14747 14748 bool 14749 remote_target::store_memtags (CORE_ADDR address, size_t len, 14750 const gdb::byte_vector &tags, int type) 14751 { 14752 /* Make sure the QMemTags packet is supported. */ 14753 if (!remote_memory_tagging_p ()) 14754 gdb_assert_not_reached ("remote store_memtags called with packet disabled"); 14755 14756 struct remote_state *rs = get_remote_state (); 14757 14758 create_store_memtags_request (rs->buf, address, len, type, tags); 14759 14760 putpkt (rs->buf); 14761 getpkt (&rs->buf, 0); 14762 14763 /* Verify if the request was successful. */ 14764 return packet_check_result (rs->buf.data ()) == PACKET_OK; 14765 } 14766 14767 /* Return true if remote target T is non-stop. */ 14768 14769 bool 14770 remote_target_is_non_stop_p (remote_target *t) 14771 { 14772 scoped_restore_current_thread restore_thread; 14773 switch_to_target_no_thread (t); 14774 14775 return target_is_non_stop_p (); 14776 } 14777 14778 #if GDB_SELF_TEST 14779 14780 namespace selftests { 14781 14782 static void 14783 test_memory_tagging_functions () 14784 { 14785 remote_target remote; 14786 14787 struct packet_config *config 14788 = &remote_protocol_packets[PACKET_memory_tagging_feature]; 14789 14790 scoped_restore restore_memtag_support_ 14791 = make_scoped_restore (&config->support); 14792 14793 /* Test memory tagging packet support. */ 14794 config->support = PACKET_SUPPORT_UNKNOWN; 14795 SELF_CHECK (remote.supports_memory_tagging () == false); 14796 config->support = PACKET_DISABLE; 14797 SELF_CHECK (remote.supports_memory_tagging () == false); 14798 config->support = PACKET_ENABLE; 14799 SELF_CHECK (remote.supports_memory_tagging () == true); 14800 14801 /* Setup testing. */ 14802 gdb::char_vector packet; 14803 gdb::byte_vector tags, bv; 14804 std::string expected, reply; 14805 packet.resize (32000); 14806 14807 /* Test creating a qMemTags request. */ 14808 14809 expected = "qMemTags:0,0:0"; 14810 create_fetch_memtags_request (packet, 0x0, 0x0, 0); 14811 SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0); 14812 14813 expected = "qMemTags:deadbeef,10:1"; 14814 create_fetch_memtags_request (packet, 0xdeadbeef, 16, 1); 14815 SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0); 14816 14817 /* Test parsing a qMemTags reply. */ 14818 14819 /* Error reply, tags vector unmodified. */ 14820 reply = "E00"; 14821 strcpy (packet.data (), reply.c_str ()); 14822 tags.resize (0); 14823 SELF_CHECK (parse_fetch_memtags_reply (packet, tags) == false); 14824 SELF_CHECK (tags.size () == 0); 14825 14826 /* Valid reply, tags vector updated. */ 14827 tags.resize (0); 14828 bv.resize (0); 14829 14830 for (int i = 0; i < 5; i++) 14831 bv.push_back (i); 14832 14833 reply = "m" + bin2hex (bv.data (), bv.size ()); 14834 strcpy (packet.data (), reply.c_str ()); 14835 14836 SELF_CHECK (parse_fetch_memtags_reply (packet, tags) == true); 14837 SELF_CHECK (tags.size () == 5); 14838 14839 for (int i = 0; i < 5; i++) 14840 SELF_CHECK (tags[i] == i); 14841 14842 /* Test creating a QMemTags request. */ 14843 14844 /* Empty tag data. */ 14845 tags.resize (0); 14846 expected = "QMemTags:0,0:0:"; 14847 create_store_memtags_request (packet, 0x0, 0x0, 0, tags); 14848 SELF_CHECK (memcmp (packet.data (), expected.c_str (), 14849 expected.length ()) == 0); 14850 14851 /* Non-empty tag data. */ 14852 tags.resize (0); 14853 for (int i = 0; i < 5; i++) 14854 tags.push_back (i); 14855 expected = "QMemTags:deadbeef,ff:1:0001020304"; 14856 create_store_memtags_request (packet, 0xdeadbeef, 255, 1, tags); 14857 SELF_CHECK (memcmp (packet.data (), expected.c_str (), 14858 expected.length ()) == 0); 14859 } 14860 14861 } // namespace selftests 14862 #endif /* GDB_SELF_TEST */ 14863 14864 void _initialize_remote (); 14865 void 14866 _initialize_remote () 14867 { 14868 /* architecture specific data */ 14869 remote_g_packet_data_handle = 14870 gdbarch_data_register_pre_init (remote_g_packet_data_init); 14871 14872 add_target (remote_target_info, remote_target::open); 14873 add_target (extended_remote_target_info, extended_remote_target::open); 14874 14875 /* Hook into new objfile notification. */ 14876 gdb::observers::new_objfile.attach (remote_new_objfile, "remote"); 14877 14878 #if 0 14879 init_remote_threadtests (); 14880 #endif 14881 14882 /* set/show remote ... */ 14883 14884 add_basic_prefix_cmd ("remote", class_maintenance, _("\ 14885 Remote protocol specific variables.\n\ 14886 Configure various remote-protocol specific variables such as\n\ 14887 the packets being used."), 14888 &remote_set_cmdlist, 14889 0 /* allow-unknown */, &setlist); 14890 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\ 14891 Remote protocol specific variables.\n\ 14892 Configure various remote-protocol specific variables such as\n\ 14893 the packets being used."), 14894 &remote_show_cmdlist, 14895 0 /* allow-unknown */, &showlist); 14896 14897 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\ 14898 Compare section data on target to the exec file.\n\ 14899 Argument is a single section name (default: all loaded sections).\n\ 14900 To compare only read-only loaded sections, specify the -r option."), 14901 &cmdlist); 14902 14903 add_cmd ("packet", class_maintenance, packet_command, _("\ 14904 Send an arbitrary packet to a remote target.\n\ 14905 maintenance packet TEXT\n\ 14906 If GDB is talking to an inferior via the GDB serial protocol, then\n\ 14907 this command sends the string TEXT to the inferior, and displays the\n\ 14908 response packet. GDB supplies the initial `$' character, and the\n\ 14909 terminating `#' character and checksum."), 14910 &maintenancelist); 14911 14912 set_show_commands remotebreak_cmds 14913 = add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\ 14914 Set whether to send break if interrupted."), _("\ 14915 Show whether to send break if interrupted."), _("\ 14916 If set, a break, instead of a cntrl-c, is sent to the remote target."), 14917 set_remotebreak, show_remotebreak, 14918 &setlist, &showlist); 14919 deprecate_cmd (remotebreak_cmds.set, "set remote interrupt-sequence"); 14920 deprecate_cmd (remotebreak_cmds.show, "show remote interrupt-sequence"); 14921 14922 add_setshow_enum_cmd ("interrupt-sequence", class_support, 14923 interrupt_sequence_modes, &interrupt_sequence_mode, 14924 _("\ 14925 Set interrupt sequence to remote target."), _("\ 14926 Show interrupt sequence to remote target."), _("\ 14927 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."), 14928 NULL, show_interrupt_sequence, 14929 &remote_set_cmdlist, 14930 &remote_show_cmdlist); 14931 14932 add_setshow_boolean_cmd ("interrupt-on-connect", class_support, 14933 &interrupt_on_connect, _("\ 14934 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\ 14935 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\ 14936 If set, interrupt sequence is sent to remote target."), 14937 NULL, NULL, 14938 &remote_set_cmdlist, &remote_show_cmdlist); 14939 14940 /* Install commands for configuring memory read/write packets. */ 14941 14942 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\ 14943 Set the maximum number of bytes per memory write packet (deprecated)."), 14944 &setlist); 14945 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\ 14946 Show the maximum number of bytes per memory write packet (deprecated)."), 14947 &showlist); 14948 add_cmd ("memory-write-packet-size", no_class, 14949 set_memory_write_packet_size, _("\ 14950 Set the maximum number of bytes per memory-write packet.\n\ 14951 Specify the number of bytes in a packet or 0 (zero) for the\n\ 14952 default packet size. The actual limit is further reduced\n\ 14953 dependent on the target. Specify ``fixed'' to disable the\n\ 14954 further restriction and ``limit'' to enable that restriction."), 14955 &remote_set_cmdlist); 14956 add_cmd ("memory-read-packet-size", no_class, 14957 set_memory_read_packet_size, _("\ 14958 Set the maximum number of bytes per memory-read packet.\n\ 14959 Specify the number of bytes in a packet or 0 (zero) for the\n\ 14960 default packet size. The actual limit is further reduced\n\ 14961 dependent on the target. Specify ``fixed'' to disable the\n\ 14962 further restriction and ``limit'' to enable that restriction."), 14963 &remote_set_cmdlist); 14964 add_cmd ("memory-write-packet-size", no_class, 14965 show_memory_write_packet_size, 14966 _("Show the maximum number of bytes per memory-write packet."), 14967 &remote_show_cmdlist); 14968 add_cmd ("memory-read-packet-size", no_class, 14969 show_memory_read_packet_size, 14970 _("Show the maximum number of bytes per memory-read packet."), 14971 &remote_show_cmdlist); 14972 14973 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class, 14974 &remote_hw_watchpoint_limit, _("\ 14975 Set the maximum number of target hardware watchpoints."), _("\ 14976 Show the maximum number of target hardware watchpoints."), _("\ 14977 Specify \"unlimited\" for unlimited hardware watchpoints."), 14978 NULL, show_hardware_watchpoint_limit, 14979 &remote_set_cmdlist, 14980 &remote_show_cmdlist); 14981 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit", 14982 no_class, 14983 &remote_hw_watchpoint_length_limit, _("\ 14984 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\ 14985 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\ 14986 Specify \"unlimited\" to allow watchpoints of unlimited size."), 14987 NULL, show_hardware_watchpoint_length_limit, 14988 &remote_set_cmdlist, &remote_show_cmdlist); 14989 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class, 14990 &remote_hw_breakpoint_limit, _("\ 14991 Set the maximum number of target hardware breakpoints."), _("\ 14992 Show the maximum number of target hardware breakpoints."), _("\ 14993 Specify \"unlimited\" for unlimited hardware breakpoints."), 14994 NULL, show_hardware_breakpoint_limit, 14995 &remote_set_cmdlist, &remote_show_cmdlist); 14996 14997 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure, 14998 &remote_address_size, _("\ 14999 Set the maximum size of the address (in bits) in a memory packet."), _("\ 15000 Show the maximum size of the address (in bits) in a memory packet."), NULL, 15001 NULL, 15002 NULL, /* FIXME: i18n: */ 15003 &setlist, &showlist); 15004 15005 init_all_packet_configs (); 15006 15007 add_packet_config_cmd (&remote_protocol_packets[PACKET_X], 15008 "X", "binary-download", 1); 15009 15010 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont], 15011 "vCont", "verbose-resume", 0); 15012 15013 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals], 15014 "QPassSignals", "pass-signals", 0); 15015 15016 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls], 15017 "QCatchSyscalls", "catch-syscalls", 0); 15018 15019 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals], 15020 "QProgramSignals", "program-signals", 0); 15021 15022 add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir], 15023 "QSetWorkingDir", "set-working-dir", 0); 15024 15025 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell], 15026 "QStartupWithShell", "startup-with-shell", 0); 15027 15028 add_packet_config_cmd (&remote_protocol_packets 15029 [PACKET_QEnvironmentHexEncoded], 15030 "QEnvironmentHexEncoded", "environment-hex-encoded", 15031 0); 15032 15033 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset], 15034 "QEnvironmentReset", "environment-reset", 15035 0); 15036 15037 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset], 15038 "QEnvironmentUnset", "environment-unset", 15039 0); 15040 15041 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol], 15042 "qSymbol", "symbol-lookup", 0); 15043 15044 add_packet_config_cmd (&remote_protocol_packets[PACKET_P], 15045 "P", "set-register", 1); 15046 15047 add_packet_config_cmd (&remote_protocol_packets[PACKET_p], 15048 "p", "fetch-register", 1); 15049 15050 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0], 15051 "Z0", "software-breakpoint", 0); 15052 15053 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1], 15054 "Z1", "hardware-breakpoint", 0); 15055 15056 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2], 15057 "Z2", "write-watchpoint", 0); 15058 15059 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3], 15060 "Z3", "read-watchpoint", 0); 15061 15062 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4], 15063 "Z4", "access-watchpoint", 0); 15064 15065 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv], 15066 "qXfer:auxv:read", "read-aux-vector", 0); 15067 15068 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file], 15069 "qXfer:exec-file:read", "pid-to-exec-file", 0); 15070 15071 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features], 15072 "qXfer:features:read", "target-features", 0); 15073 15074 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries], 15075 "qXfer:libraries:read", "library-info", 0); 15076 15077 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4], 15078 "qXfer:libraries-svr4:read", "library-info-svr4", 0); 15079 15080 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map], 15081 "qXfer:memory-map:read", "memory-map", 0); 15082 15083 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata], 15084 "qXfer:osdata:read", "osdata", 0); 15085 15086 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads], 15087 "qXfer:threads:read", "threads", 0); 15088 15089 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read], 15090 "qXfer:siginfo:read", "read-siginfo-object", 0); 15091 15092 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write], 15093 "qXfer:siginfo:write", "write-siginfo-object", 0); 15094 15095 add_packet_config_cmd 15096 (&remote_protocol_packets[PACKET_qXfer_traceframe_info], 15097 "qXfer:traceframe-info:read", "traceframe-info", 0); 15098 15099 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib], 15100 "qXfer:uib:read", "unwind-info-block", 0); 15101 15102 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr], 15103 "qGetTLSAddr", "get-thread-local-storage-address", 15104 0); 15105 15106 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr], 15107 "qGetTIBAddr", "get-thread-information-block-address", 15108 0); 15109 15110 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc], 15111 "bc", "reverse-continue", 0); 15112 15113 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs], 15114 "bs", "reverse-step", 0); 15115 15116 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported], 15117 "qSupported", "supported-packets", 0); 15118 15119 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory], 15120 "qSearch:memory", "search-memory", 0); 15121 15122 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus], 15123 "qTStatus", "trace-status", 0); 15124 15125 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs], 15126 "vFile:setfs", "hostio-setfs", 0); 15127 15128 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open], 15129 "vFile:open", "hostio-open", 0); 15130 15131 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread], 15132 "vFile:pread", "hostio-pread", 0); 15133 15134 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite], 15135 "vFile:pwrite", "hostio-pwrite", 0); 15136 15137 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close], 15138 "vFile:close", "hostio-close", 0); 15139 15140 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink], 15141 "vFile:unlink", "hostio-unlink", 0); 15142 15143 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink], 15144 "vFile:readlink", "hostio-readlink", 0); 15145 15146 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat], 15147 "vFile:fstat", "hostio-fstat", 0); 15148 15149 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach], 15150 "vAttach", "attach", 0); 15151 15152 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun], 15153 "vRun", "run", 0); 15154 15155 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode], 15156 "QStartNoAckMode", "noack", 0); 15157 15158 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill], 15159 "vKill", "kill", 0); 15160 15161 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached], 15162 "qAttached", "query-attached", 0); 15163 15164 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints], 15165 "ConditionalTracepoints", 15166 "conditional-tracepoints", 0); 15167 15168 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints], 15169 "ConditionalBreakpoints", 15170 "conditional-breakpoints", 0); 15171 15172 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands], 15173 "BreakpointCommands", 15174 "breakpoint-commands", 0); 15175 15176 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints], 15177 "FastTracepoints", "fast-tracepoints", 0); 15178 15179 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource], 15180 "TracepointSource", "TracepointSource", 0); 15181 15182 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow], 15183 "QAllow", "allow", 0); 15184 15185 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints], 15186 "StaticTracepoints", "static-tracepoints", 0); 15187 15188 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace], 15189 "InstallInTrace", "install-in-trace", 0); 15190 15191 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read], 15192 "qXfer:statictrace:read", "read-sdata-object", 0); 15193 15194 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic], 15195 "qXfer:fdpic:read", "read-fdpic-loadmap", 0); 15196 15197 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization], 15198 "QDisableRandomization", "disable-randomization", 0); 15199 15200 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent], 15201 "QAgent", "agent", 0); 15202 15203 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size], 15204 "QTBuffer:size", "trace-buffer-size", 0); 15205 15206 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off], 15207 "Qbtrace:off", "disable-btrace", 0); 15208 15209 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts], 15210 "Qbtrace:bts", "enable-btrace-bts", 0); 15211 15212 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt], 15213 "Qbtrace:pt", "enable-btrace-pt", 0); 15214 15215 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace], 15216 "qXfer:btrace", "read-btrace", 0); 15217 15218 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf], 15219 "qXfer:btrace-conf", "read-btrace-conf", 0); 15220 15221 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size], 15222 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0); 15223 15224 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature], 15225 "multiprocess-feature", "multiprocess-feature", 0); 15226 15227 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature], 15228 "swbreak-feature", "swbreak-feature", 0); 15229 15230 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature], 15231 "hwbreak-feature", "hwbreak-feature", 0); 15232 15233 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature], 15234 "fork-event-feature", "fork-event-feature", 0); 15235 15236 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature], 15237 "vfork-event-feature", "vfork-event-feature", 0); 15238 15239 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size], 15240 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0); 15241 15242 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported], 15243 "vContSupported", "verbose-resume-supported", 0); 15244 15245 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature], 15246 "exec-event-feature", "exec-event-feature", 0); 15247 15248 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC], 15249 "vCtrlC", "ctrl-c", 0); 15250 15251 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents], 15252 "QThreadEvents", "thread-events", 0); 15253 15254 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed], 15255 "N stop reply", "no-resumed-stop-reply", 0); 15256 15257 add_packet_config_cmd (&remote_protocol_packets[PACKET_memory_tagging_feature], 15258 "memory-tagging-feature", "memory-tagging-feature", 0); 15259 15260 /* Assert that we've registered "set remote foo-packet" commands 15261 for all packet configs. */ 15262 { 15263 int i; 15264 15265 for (i = 0; i < PACKET_MAX; i++) 15266 { 15267 /* Ideally all configs would have a command associated. Some 15268 still don't though. */ 15269 int excepted; 15270 15271 switch (i) 15272 { 15273 case PACKET_QNonStop: 15274 case PACKET_EnableDisableTracepoints_feature: 15275 case PACKET_tracenz_feature: 15276 case PACKET_DisconnectedTracing_feature: 15277 case PACKET_augmented_libraries_svr4_read_feature: 15278 case PACKET_qCRC: 15279 /* Additions to this list need to be well justified: 15280 pre-existing packets are OK; new packets are not. */ 15281 excepted = 1; 15282 break; 15283 default: 15284 excepted = 0; 15285 break; 15286 } 15287 15288 /* This catches both forgetting to add a config command, and 15289 forgetting to remove a packet from the exception list. */ 15290 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL)); 15291 } 15292 } 15293 15294 /* Keep the old ``set remote Z-packet ...'' working. Each individual 15295 Z sub-packet has its own set and show commands, but users may 15296 have sets to this variable in their .gdbinit files (or in their 15297 documentation). */ 15298 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure, 15299 &remote_Z_packet_detect, _("\ 15300 Set use of remote protocol `Z' packets."), _("\ 15301 Show use of remote protocol `Z' packets."), _("\ 15302 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\ 15303 packets."), 15304 set_remote_protocol_Z_packet_cmd, 15305 show_remote_protocol_Z_packet_cmd, 15306 /* FIXME: i18n: Use of remote protocol 15307 `Z' packets is %s. */ 15308 &remote_set_cmdlist, &remote_show_cmdlist); 15309 15310 add_basic_prefix_cmd ("remote", class_files, _("\ 15311 Manipulate files on the remote system.\n\ 15312 Transfer files to and from the remote target system."), 15313 &remote_cmdlist, 15314 0 /* allow-unknown */, &cmdlist); 15315 15316 add_cmd ("put", class_files, remote_put_command, 15317 _("Copy a local file to the remote system."), 15318 &remote_cmdlist); 15319 15320 add_cmd ("get", class_files, remote_get_command, 15321 _("Copy a remote file to the local system."), 15322 &remote_cmdlist); 15323 15324 add_cmd ("delete", class_files, remote_delete_command, 15325 _("Delete a remote file."), 15326 &remote_cmdlist); 15327 15328 add_setshow_string_noescape_cmd ("exec-file", class_files, 15329 &remote_exec_file_var, _("\ 15330 Set the remote pathname for \"run\"."), _("\ 15331 Show the remote pathname for \"run\"."), NULL, 15332 set_remote_exec_file, 15333 show_remote_exec_file, 15334 &remote_set_cmdlist, 15335 &remote_show_cmdlist); 15336 15337 add_setshow_boolean_cmd ("range-stepping", class_run, 15338 &use_range_stepping, _("\ 15339 Enable or disable range stepping."), _("\ 15340 Show whether target-assisted range stepping is enabled."), _("\ 15341 If on, and the target supports it, when stepping a source line, GDB\n\ 15342 tells the target to step the corresponding range of addresses itself instead\n\ 15343 of issuing multiple single-steps. This speeds up source level\n\ 15344 stepping. If off, GDB always issues single-steps, even if range\n\ 15345 stepping is supported by the target. The default is on."), 15346 set_range_stepping, 15347 show_range_stepping, 15348 &setlist, 15349 &showlist); 15350 15351 add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\ 15352 Set watchdog timer."), _("\ 15353 Show watchdog timer."), _("\ 15354 When non-zero, this timeout is used instead of waiting forever for a target\n\ 15355 to finish a low-level step or continue operation. If the specified amount\n\ 15356 of time passes without a response from the target, an error occurs."), 15357 NULL, 15358 show_watchdog, 15359 &setlist, &showlist); 15360 15361 add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class, 15362 &remote_packet_max_chars, _("\ 15363 Set the maximum number of characters to display for each remote packet."), _("\ 15364 Show the maximum number of characters to display for each remote packet."), _("\ 15365 Specify \"unlimited\" to display all the characters."), 15366 NULL, show_remote_packet_max_chars, 15367 &setdebuglist, &showdebuglist); 15368 15369 add_setshow_boolean_cmd ("remote", no_class, &remote_debug, 15370 _("Set debugging of remote protocol."), 15371 _("Show debugging of remote protocol."), 15372 _("\ 15373 When enabled, each packet sent or received with the remote target\n\ 15374 is displayed."), 15375 NULL, 15376 show_remote_debug, 15377 &setdebuglist, &showdebuglist); 15378 15379 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class, 15380 &remote_timeout, _("\ 15381 Set timeout limit to wait for target to respond."), _("\ 15382 Show timeout limit to wait for target to respond."), _("\ 15383 This value is used to set the time limit for gdb to wait for a response\n\ 15384 from the target."), 15385 NULL, 15386 show_remote_timeout, 15387 &setlist, &showlist); 15388 15389 /* Eventually initialize fileio. See fileio.c */ 15390 initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist); 15391 15392 #if GDB_SELF_TEST 15393 selftests::register_test ("remote_memory_tagging", 15394 selftests::test_memory_tagging_functions); 15395 #endif 15396 } 15397