1 /* Remote target communications for serial-line targets in custom GDB protocol
3 Copyright (C) 1988-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
20 /* See the GDB User Guide for details of the GDB remote protocol. */
29 #include "process-stratum-target.h"
30 #include "cli/cli-cmds.h"
32 #include "gdbthread.h"
34 #include "remote-notif.h"
37 #include "observable.h"
39 #include "cli/cli-decode.h"
40 #include "cli/cli-setshow.h"
41 #include "target-descriptions.h"
43 #include "gdbsupport/filestuff.h"
44 #include "gdbsupport/rsp-low.h"
48 #include "gdbsupport/gdb_sys_time.h"
50 #include "gdbsupport/event-loop.h"
51 #include "event-top.h"
59 #include "remote-fileio.h"
60 #include "gdbsupport/fileio.h"
62 #include "xml-support.h"
64 #include "memory-map.h"
66 #include "tracepoint.h"
69 #include "gdbsupport/agent.h"
71 #include "record-btrace.h"
72 #include "gdbsupport/scoped_restore.h"
73 #include "gdbsupport/environ.h"
74 #include "gdbsupport/byte-vector.h"
75 #include "gdbsupport/search.h"
78 #include <unordered_map>
79 #include "async-event.h"
80 #include "gdbsupport/selftest.h"
82 /* The remote target. */
84 static const char remote_doc
[] = N_("\
85 Use a remote computer via a serial line, using a gdb-specific protocol.\n\
86 Specify the serial device it is connected to\n\
87 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
91 bool remote_debug
= false;
93 #define OPAQUETHREADBYTES 8
95 /* a 64 bit opaque identifier */
96 typedef unsigned char threadref
[OPAQUETHREADBYTES
];
98 struct gdb_ext_thread_info
;
99 struct threads_listing_context
;
100 typedef int (*rmt_thread_action
) (threadref
*ref
, void *context
);
101 struct protocol_feature
;
105 typedef std::unique_ptr
<stop_reply
> stop_reply_up
;
107 /* Generic configuration support for packets the stub optionally
108 supports. Allows the user to specify the use of the packet as well
109 as allowing GDB to auto-detect support in the remote stub. */
113 PACKET_SUPPORT_UNKNOWN
= 0,
118 /* Convert the packet support auto_boolean to a name used for gdb printing. */
121 get_packet_support_name (auto_boolean support
)
125 case AUTO_BOOLEAN_TRUE
:
127 case AUTO_BOOLEAN_FALSE
:
129 case AUTO_BOOLEAN_AUTO
:
132 gdb_assert_not_reached ("invalid var_auto_boolean");
136 /* Convert the target type (future remote target or currently connected target)
137 to a name used for gdb printing. */
140 get_target_type_name (bool target_connected
)
142 if (target_connected
)
143 return _("on the current remote target");
145 return _("on future remote targets");
148 /* Analyze a packet's return value and update the packet config
158 /* Keeps packet's return value. If packet's return value is PACKET_ERROR,
159 err_msg contains an error message string from E.string or the number
160 stored as a string from E.num. */
164 /* Private ctors for internal use. Clients should use the public
165 factory static methods instead. */
167 /* Construct a PACKET_ERROR packet_result. */
168 packet_result (const char *err_msg
, bool textual_err_msg
)
169 : m_status (PACKET_ERROR
),
171 m_textual_err_msg (textual_err_msg
)
174 /* Construct an PACKET_OK/PACKET_UNKNOWN packet_result. */
175 explicit packet_result (enum packet_status status
)
178 gdb_assert (status
!= PACKET_ERROR
);
182 enum packet_status
status () const
184 return this->m_status
;
187 const char *err_msg () const
189 gdb_assert (this->m_status
== PACKET_ERROR
);
190 return this->m_err_msg
.c_str ();
193 bool textual_err_msg () const
195 gdb_assert (this->m_status
== PACKET_ERROR
);
196 return this->m_textual_err_msg
;
199 static packet_result
make_numeric_error (const char *err_msg
)
201 return packet_result (err_msg
, false);
204 static packet_result
make_textual_error (const char *err_msg
)
206 return packet_result (err_msg
, true);
209 static packet_result
make_ok ()
211 return packet_result (PACKET_OK
);
214 static packet_result
make_unknown ()
216 return packet_result (PACKET_UNKNOWN
);
220 enum packet_status m_status
;
221 std::string m_err_msg
;
223 /* True if we have a textual error message, from an "E.MESSAGE"
225 bool m_textual_err_msg
;
228 /* Enumeration of packets for a remote target. */
247 PACKET_vFile_readlink
,
250 PACKET_qXfer_features
,
251 PACKET_qXfer_exec_file
,
252 PACKET_qXfer_libraries
,
253 PACKET_qXfer_libraries_svr4
,
254 PACKET_qXfer_memory_map
,
256 PACKET_qXfer_threads
,
257 PACKET_qXfer_statictrace_read
,
258 PACKET_qXfer_traceframe_info
,
265 PACKET_QCatchSyscalls
,
266 PACKET_QProgramSignals
,
267 PACKET_QSetWorkingDir
,
268 PACKET_QStartupWithShell
,
269 PACKET_QEnvironmentHexEncoded
,
270 PACKET_QEnvironmentReset
,
271 PACKET_QEnvironmentUnset
,
273 PACKET_qSearch_memory
,
276 PACKET_QStartNoAckMode
,
278 PACKET_qXfer_siginfo_read
,
279 PACKET_qXfer_siginfo_write
,
282 /* Support for conditional tracepoints. */
283 PACKET_ConditionalTracepoints
,
285 /* Support for target-side breakpoint conditions. */
286 PACKET_ConditionalBreakpoints
,
288 /* Support for target-side breakpoint commands. */
289 PACKET_BreakpointCommands
,
291 /* Support for fast tracepoints. */
292 PACKET_FastTracepoints
,
294 /* Support for static tracepoints. */
295 PACKET_StaticTracepoints
,
297 /* Support for installing tracepoints while a trace experiment is
299 PACKET_InstallInTrace
,
303 PACKET_TracepointSource
,
306 PACKET_QDisableRandomization
,
308 PACKET_QTBuffer_size
,
314 /* Support for the QNonStop packet. */
317 /* Support for the QThreadEvents packet. */
318 PACKET_QThreadEvents
,
320 /* Support for the QThreadOptions packet. */
321 PACKET_QThreadOptions
,
323 /* Support for multi-process extensions. */
324 PACKET_multiprocess_feature
,
326 /* Support for enabling and disabling tracepoints while a trace
327 experiment is running. */
328 PACKET_EnableDisableTracepoints_feature
,
330 /* Support for collecting strings using the tracenz bytecode. */
331 PACKET_tracenz_feature
,
333 /* Support for continuing to run a trace experiment while GDB is
335 PACKET_DisconnectedTracing_feature
,
337 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
338 PACKET_augmented_libraries_svr4_read_feature
,
340 /* Support for the qXfer:btrace-conf:read packet. */
341 PACKET_qXfer_btrace_conf
,
343 /* Support for the Qbtrace-conf:bts:size packet. */
344 PACKET_Qbtrace_conf_bts_size
,
346 /* Support for swbreak+ feature. */
347 PACKET_swbreak_feature
,
349 /* Support for hwbreak+ feature. */
350 PACKET_hwbreak_feature
,
352 /* Support for fork events. */
353 PACKET_fork_event_feature
,
355 /* Support for vfork events. */
356 PACKET_vfork_event_feature
,
358 /* Support for the Qbtrace-conf:pt:size packet. */
359 PACKET_Qbtrace_conf_pt_size
,
361 /* Support for exec events. */
362 PACKET_exec_event_feature
,
364 /* Support for query supported vCont actions. */
365 PACKET_vContSupported
,
367 /* Support remote CTRL-C. */
370 /* Support TARGET_WAITKIND_NO_RESUMED. */
373 /* Support for memory tagging, allocation tag fetch/store
374 packets and the tag violation stop replies. */
375 PACKET_memory_tagging_feature
,
377 /* Support for the qIsAddressTagged packet. */
378 PACKET_qIsAddressTagged
,
383 struct threads_listing_context
;
385 /* Stub vCont actions support.
387 Each field is a boolean flag indicating whether the stub reports
388 support for the corresponding action. */
390 struct vCont_action_support
405 /* About this many threadids fit in a packet. */
407 #define MAXTHREADLISTRESULTS 32
409 /* Data for the vFile:pread readahead cache. */
411 struct readahead_cache
413 /* Invalidate the readahead cache. */
416 /* Invalidate the readahead cache if it is holding data for FD. */
417 void invalidate_fd (int fd
);
419 /* Serve pread from the readahead cache. Returns number of bytes
420 read, or 0 if the request can't be served from the cache. */
421 int pread (int fd
, gdb_byte
*read_buf
, size_t len
, ULONGEST offset
);
423 /* The file descriptor for the file that is being cached. -1 if the
427 /* The offset into the file that the cache buffer corresponds
431 /* The buffer holding the cache contents. */
432 gdb::byte_vector buf
;
434 /* Cache hit and miss counters. */
435 ULONGEST hit_count
= 0;
436 ULONGEST miss_count
= 0;
439 /* Description of the remote protocol for a given architecture. */
443 long offset
; /* Offset into G packet. */
444 long regnum
; /* GDB's internal register number. */
445 LONGEST pnum
; /* Remote protocol register number. */
446 int in_g_packet
; /* Always part of G packet. */
447 /* long size in bytes; == register_size (arch, regnum);
449 /* char *name; == gdbarch_register_name (arch, regnum);
453 struct remote_arch_state
455 explicit remote_arch_state (struct gdbarch
*gdbarch
);
457 /* Description of the remote protocol registers. */
458 long sizeof_g_packet
;
460 /* Description of the remote protocol registers indexed by REGNUM
461 (making an array gdbarch_num_regs in size). */
462 std::unique_ptr
<packet_reg
[]> regs
;
464 /* This is the size (in chars) of the first response to the ``g''
465 packet. It is used as a heuristic when determining the maximum
466 size of memory-read and memory-write packets. A target will
467 typically only reserve a buffer large enough to hold the ``g''
468 packet. The size does not include packet overhead (headers and
470 long actual_register_packet_size
;
472 /* This is the maximum size (in chars) of a non read/write packet.
473 It is also used as a cap on the size of read/write packets. */
474 long remote_packet_size
;
477 /* Description of the remote protocol state for the currently
478 connected target. This is per-target state, and independent of the
479 selected architecture. */
488 /* Get the remote arch state for GDBARCH. */
489 struct remote_arch_state
*get_remote_arch_state (struct gdbarch
*gdbarch
);
491 void create_async_event_handler ()
493 gdb_assert (m_async_event_handler_token
== nullptr);
494 m_async_event_handler_token
495 = ::create_async_event_handler ([] (gdb_client_data data
)
497 inferior_event_handler (INF_REG_EVENT
);
502 void mark_async_event_handler ()
504 gdb_assert (this->is_async_p ());
505 ::mark_async_event_handler (m_async_event_handler_token
);
508 void clear_async_event_handler ()
509 { ::clear_async_event_handler (m_async_event_handler_token
); }
511 bool async_event_handler_marked () const
512 { return ::async_event_handler_marked (m_async_event_handler_token
); }
514 void delete_async_event_handler ()
516 if (m_async_event_handler_token
!= nullptr)
517 ::delete_async_event_handler (&m_async_event_handler_token
);
520 bool is_async_p () const
522 /* We're async whenever the serial device is. */
523 gdb_assert (this->remote_desc
!= nullptr);
524 return serial_is_async_p (this->remote_desc
);
527 bool can_async_p () const
529 /* We can async whenever the serial device can. */
530 gdb_assert (this->remote_desc
!= nullptr);
531 return serial_can_async_p (this->remote_desc
);
536 /* A buffer to use for incoming packets, and its current size. The
537 buffer is grown dynamically for larger incoming packets.
538 Outgoing packets may also be constructed in this buffer.
539 The size of the buffer is always at least REMOTE_PACKET_SIZE;
540 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
542 gdb::char_vector buf
;
544 /* True if we're going through initial connection setup (finding out
545 about the remote side's threads, relocating symbols, etc.). */
546 bool starting_up
= false;
548 /* If we negotiated packet size explicitly (and thus can bypass
549 heuristics for the largest packet size that will not overflow
550 a buffer in the stub), this will be set to that packet size.
551 Otherwise zero, meaning to use the guessed size. */
552 long explicit_packet_size
= 0;
554 /* True, if in no ack mode. That is, neither GDB nor the stub will
555 expect acks from each other. The connection is assumed to be
557 bool noack_mode
= false;
559 /* True if we're connected in extended remote mode. */
560 bool extended
= false;
562 /* True if we resumed the target and we're waiting for the target to
563 stop. In the mean time, we can't start another command/query.
564 The remote server wouldn't be ready to process it, so we'd
565 timeout waiting for a reply that would never come and eventually
566 we'd close the connection. This can happen in asynchronous mode
567 because we allow GDB commands while the target is running. */
568 bool waiting_for_stop_reply
= false;
570 /* The status of the stub support for the various vCont actions. */
571 vCont_action_support supports_vCont
;
573 /* True if the user has pressed Ctrl-C, but the target hasn't
574 responded to that. */
575 bool ctrlc_pending_p
= false;
577 /* True if we saw a Ctrl-C while reading or writing from/to the
578 remote descriptor. At that point it is not safe to send a remote
579 interrupt packet, so we instead remember we saw the Ctrl-C and
580 process it once we're done with sending/receiving the current
581 packet, which should be shortly. If however that takes too long,
582 and the user presses Ctrl-C again, we offer to disconnect. */
583 bool got_ctrlc_during_io
= false;
585 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
586 remote_open knows that we don't have a file open when the program
588 struct serial
*remote_desc
= nullptr;
590 /* These are the threads which we last sent to the remote system. The
591 TID member will be -1 for all or -2 for not sent yet. */
592 ptid_t general_thread
= null_ptid
;
593 ptid_t continue_thread
= null_ptid
;
595 /* This is the traceframe which we last selected on the remote system.
596 It will be -1 if no traceframe is selected. */
597 int remote_traceframe_number
= -1;
599 char *last_pass_packet
= nullptr;
601 /* The last QProgramSignals packet sent to the target. We bypass
602 sending a new program signals list down to the target if the new
603 packet is exactly the same as the last we sent. IOW, we only let
604 the target know about program signals list changes. */
605 char *last_program_signals_packet
= nullptr;
607 /* Similarly, the last QThreadEvents state we sent to the
609 bool last_thread_events
= false;
611 gdb_signal last_sent_signal
= GDB_SIGNAL_0
;
613 bool last_sent_step
= false;
615 /* The execution direction of the last resume we got. */
616 exec_direction_kind last_resume_exec_dir
= EXEC_FORWARD
;
618 char *finished_object
= nullptr;
619 char *finished_annex
= nullptr;
620 ULONGEST finished_offset
= 0;
622 /* Should we try the 'ThreadInfo' query packet?
624 This variable (NOT available to the user: auto-detect only!)
625 determines whether GDB will use the new, simpler "ThreadInfo"
626 query or the older, more complex syntax for thread queries.
627 This is an auto-detect variable (set to true at each connect,
628 and set to false when the target fails to recognize it). */
629 bool use_threadinfo_query
= false;
630 bool use_threadextra_query
= false;
632 threadref echo_nextthread
{};
633 threadref nextthread
{};
634 threadref resultthreadlist
[MAXTHREADLISTRESULTS
] {};
636 /* The state of remote notification. */
637 struct remote_notif_state
*notif_state
= nullptr;
639 /* The branch trace configuration. */
640 struct btrace_config btrace_config
{};
642 /* The argument to the last "vFile:setfs:" packet we sent, used
643 to avoid sending repeated unnecessary "vFile:setfs:" packets.
644 Initialized to -1 to indicate that no "vFile:setfs:" packet
645 has yet been sent. */
648 /* A readahead cache for vFile:pread. Often, reading a binary
649 involves a sequence of small reads. E.g., when parsing an ELF
650 file. A readahead cache helps mostly the case of remote
651 debugging on a connection with higher latency, due to the
652 request/reply nature of the RSP. We only cache data for a single
653 file descriptor at a time. */
654 struct readahead_cache readahead_cache
;
656 /* The list of already fetched and acknowledged stop events. This
657 queue is used for notification Stop, and other notifications
658 don't need queue for their events, because the notification
659 events of Stop can't be consumed immediately, so that events
660 should be queued first, and be consumed by remote_wait_{ns,as}
661 one per time. Other notifications can consume their events
662 immediately, so queue is not needed for them. */
663 std::vector
<stop_reply_up
> stop_reply_queue
;
665 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
666 ``forever'' still use the normal timeout mechanism. This is
667 currently used by the ASYNC code to guarentee that target reads
668 during the initial connect always time-out. Once getpkt has been
669 modified to return a timeout indication and, in turn
670 remote_wait()/wait_for_inferior() have gained a timeout parameter
672 bool wait_forever_enabled_p
= true;
674 /* The set of thread options the target reported it supports, via
676 gdb_thread_options supported_thread_options
= 0;
679 /* Asynchronous signal handle registered as event loop source for
680 when we have pending events ready to be passed to the core. */
681 async_event_handler
*m_async_event_handler_token
= nullptr;
683 /* Mapping of remote protocol data for each gdbarch. Usually there
684 is only one entry here, though we may see more with stubs that
685 support multi-process. */
686 std::unordered_map
<struct gdbarch
*, remote_arch_state
>
690 static const target_info remote_target_info
= {
692 N_("Remote target using gdb-specific protocol"),
696 /* Description of a remote packet. */
698 struct packet_description
700 /* Name of the packet used for gdb output. */
703 /* Title of the packet, used by the set/show remote name-packet
704 commands to identify the individual packages and gdb output. */
708 /* Configuration of a remote packet. */
712 /* If auto, GDB auto-detects support for this packet or feature,
713 either through qSupported, or by trying the packet and looking
714 at the response. If true, GDB assumes the target supports this
715 packet. If false, the packet is disabled. Configs that don't
716 have an associated command always have this set to auto. */
717 enum auto_boolean detect
;
719 /* Does the target support this packet? */
720 enum packet_support support
;
723 /* User configurable variables for the number of characters in a
724 memory read/write packet. MIN (rsa->remote_packet_size,
725 rsa->sizeof_g_packet) is the default. Some targets need smaller
726 values (fifo overruns, et.al.) and some users need larger values
727 (speed up transfers). The variables ``preferred_*'' (the user
728 request), ``current_*'' (what was actually set) and ``forced_*''
729 (Positive - a soft limit, negative - a hard limit). */
731 struct memory_packet_config
738 /* These global variables contain the default configuration for every new
739 remote_feature object. */
740 static memory_packet_config memory_read_packet_config
=
742 "memory-read-packet-size",
744 static memory_packet_config memory_write_packet_config
=
746 "memory-write-packet-size",
749 /* This global array contains packet descriptions (name and title). */
750 static packet_description packets_descriptions
[PACKET_MAX
];
751 /* This global array contains the default configuration for every new
752 per-remote target array. */
753 static packet_config remote_protocol_packets
[PACKET_MAX
];
755 /* Description of a remote target's features. It stores the configuration
756 and provides functions to determine supported features of the target. */
758 struct remote_features
762 m_memory_read_packet_config
= memory_read_packet_config
;
763 m_memory_write_packet_config
= memory_write_packet_config
;
765 std::copy (std::begin (remote_protocol_packets
),
766 std::end (remote_protocol_packets
),
767 std::begin (m_protocol_packets
));
769 ~remote_features () = default;
771 DISABLE_COPY_AND_ASSIGN (remote_features
);
773 /* Returns whether a given packet defined by its enum value is supported. */
774 enum packet_support
packet_support (int) const;
776 /* Returns the packet's corresponding "set remote foo-packet" command
777 state. See struct packet_config for more details. */
778 enum auto_boolean
packet_set_cmd_state (int packet
) const
779 { return m_protocol_packets
[packet
].detect
; }
781 /* Returns true if the multi-process extensions are in effect. */
782 int remote_multi_process_p () const
783 { return packet_support (PACKET_multiprocess_feature
) == PACKET_ENABLE
; }
785 /* Returns true if fork events are supported. */
786 int remote_fork_event_p () const
787 { return packet_support (PACKET_fork_event_feature
) == PACKET_ENABLE
; }
789 /* Returns true if vfork events are supported. */
790 int remote_vfork_event_p () const
791 { return packet_support (PACKET_vfork_event_feature
) == PACKET_ENABLE
; }
793 /* Returns true if exec events are supported. */
794 int remote_exec_event_p () const
795 { return packet_support (PACKET_exec_event_feature
) == PACKET_ENABLE
; }
797 /* Returns true if memory tagging is supported, false otherwise. */
798 bool remote_memory_tagging_p () const
799 { return packet_support (PACKET_memory_tagging_feature
) == PACKET_ENABLE
; }
801 /* Reset all packets back to "unknown support". Called when opening a
802 new connection to a remote target. */
803 void reset_all_packet_configs_support ();
805 /* Check result value in BUF for packet WHICH_PACKET and update the packet's
806 support configuration accordingly. */
807 packet_result
packet_ok (const char *buf
, const int which_packet
);
808 packet_result
packet_ok (const gdb::char_vector
&buf
, const int which_packet
);
810 /* Configuration of a remote target's memory read packet. */
811 memory_packet_config m_memory_read_packet_config
;
812 /* Configuration of a remote target's memory write packet. */
813 memory_packet_config m_memory_write_packet_config
;
815 /* The per-remote target array which stores a remote's packet
817 packet_config m_protocol_packets
[PACKET_MAX
];
820 class remote_target
: public process_stratum_target
823 remote_target () = default;
824 ~remote_target () override
;
826 const target_info
&info () const override
827 { return remote_target_info
; }
829 const char *connection_string () override
;
831 thread_control_capabilities
get_thread_control_capabilities () override
832 { return tc_schedlock
; }
834 /* Open a remote connection. */
835 static void open (const char *, int);
837 void close () override
;
839 void detach (inferior
*, int) override
;
840 void disconnect (const char *, int) override
;
842 void commit_requested_thread_options ();
844 void commit_resumed () override
;
845 void resume (ptid_t
, int, enum gdb_signal
) override
;
846 ptid_t
wait (ptid_t
, struct target_waitstatus
*, target_wait_flags
) override
;
847 bool has_pending_events () override
;
849 void fetch_registers (struct regcache
*, int) override
;
850 void store_registers (struct regcache
*, int) override
;
851 void prepare_to_store (struct regcache
*) override
;
853 int insert_breakpoint (struct gdbarch
*, struct bp_target_info
*) override
;
855 int remove_breakpoint (struct gdbarch
*, struct bp_target_info
*,
856 enum remove_bp_reason
) override
;
859 bool stopped_by_sw_breakpoint () override
;
860 bool supports_stopped_by_sw_breakpoint () override
;
862 bool stopped_by_hw_breakpoint () override
;
864 bool supports_stopped_by_hw_breakpoint () override
;
866 bool stopped_by_watchpoint () override
;
868 bool stopped_data_address (CORE_ADDR
*) override
;
870 bool watchpoint_addr_within_range (CORE_ADDR
, CORE_ADDR
, int) override
;
872 int can_use_hw_breakpoint (enum bptype
, int, int) override
;
874 int insert_hw_breakpoint (struct gdbarch
*, struct bp_target_info
*) override
;
876 int remove_hw_breakpoint (struct gdbarch
*, struct bp_target_info
*) override
;
878 int region_ok_for_hw_watchpoint (CORE_ADDR
, int) override
;
880 int insert_watchpoint (CORE_ADDR
, int, enum target_hw_bp_type
,
881 struct expression
*) override
;
883 int remove_watchpoint (CORE_ADDR
, int, enum target_hw_bp_type
,
884 struct expression
*) override
;
886 void kill () override
;
888 void load (const char *, int) override
;
890 void mourn_inferior () override
;
892 void pass_signals (gdb::array_view
<const unsigned char>) override
;
894 int set_syscall_catchpoint (int, bool, int,
895 gdb::array_view
<const int>) override
;
897 void program_signals (gdb::array_view
<const unsigned char>) override
;
899 bool thread_alive (ptid_t ptid
) override
;
901 const char *thread_name (struct thread_info
*) override
;
903 void update_thread_list () override
;
905 std::string
pid_to_str (ptid_t
) override
;
907 const char *extra_thread_info (struct thread_info
*) override
;
909 ptid_t
get_ada_task_ptid (long lwp
, ULONGEST thread
) override
;
911 thread_info
*thread_handle_to_thread_info (const gdb_byte
*thread_handle
,
913 inferior
*inf
) override
;
915 gdb::array_view
<const gdb_byte
> thread_info_to_thread_handle (struct thread_info
*tp
)
918 void stop (ptid_t
) override
;
920 void interrupt () override
;
922 void pass_ctrlc () override
;
924 enum target_xfer_status
xfer_partial (enum target_object object
,
927 const gdb_byte
*writebuf
,
928 ULONGEST offset
, ULONGEST len
,
929 ULONGEST
*xfered_len
) override
;
931 ULONGEST
get_memory_xfer_limit () override
;
933 void rcmd (const char *command
, struct ui_file
*output
) override
;
935 const char *pid_to_exec_file (int pid
) override
;
937 void log_command (const char *cmd
) override
939 serial_log_command (this, cmd
);
942 CORE_ADDR
get_thread_local_address (ptid_t ptid
,
943 CORE_ADDR load_module_addr
,
944 CORE_ADDR offset
) override
;
946 bool can_execute_reverse () override
;
948 std::vector
<mem_region
> memory_map () override
;
950 void flash_erase (ULONGEST address
, LONGEST length
) override
;
952 void flash_done () override
;
954 const struct target_desc
*read_description () override
;
956 int search_memory (CORE_ADDR start_addr
, ULONGEST search_space_len
,
957 const gdb_byte
*pattern
, ULONGEST pattern_len
,
958 CORE_ADDR
*found_addrp
) override
;
960 bool can_async_p () override
;
962 bool is_async_p () override
;
964 void async (bool) override
;
966 int async_wait_fd () override
;
968 void thread_events (int) override
;
970 bool supports_set_thread_options (gdb_thread_options
) override
;
972 int can_do_single_step () override
;
974 void terminal_inferior () override
;
976 void terminal_ours () override
;
978 bool supports_non_stop () override
;
980 bool supports_multi_process () override
;
982 bool supports_disable_randomization () override
;
984 bool filesystem_is_local () override
;
987 int fileio_open (struct inferior
*inf
, const char *filename
,
988 int flags
, int mode
, int warn_if_slow
,
989 fileio_error
*target_errno
) override
;
991 int fileio_pwrite (int fd
, const gdb_byte
*write_buf
, int len
,
992 ULONGEST offset
, fileio_error
*target_errno
) override
;
994 int fileio_pread (int fd
, gdb_byte
*read_buf
, int len
,
995 ULONGEST offset
, fileio_error
*target_errno
) override
;
997 int fileio_fstat (int fd
, struct stat
*sb
, fileio_error
*target_errno
) override
;
999 int fileio_close (int fd
, fileio_error
*target_errno
) override
;
1001 int fileio_unlink (struct inferior
*inf
,
1002 const char *filename
,
1003 fileio_error
*target_errno
) override
;
1005 std::optional
<std::string
>
1006 fileio_readlink (struct inferior
*inf
,
1007 const char *filename
,
1008 fileio_error
*target_errno
) override
;
1010 bool supports_enable_disable_tracepoint () override
;
1012 bool supports_string_tracing () override
;
1014 int remote_supports_cond_tracepoints ();
1016 bool supports_evaluation_of_breakpoint_conditions () override
;
1018 int remote_supports_fast_tracepoints ();
1020 int remote_supports_static_tracepoints ();
1022 int remote_supports_install_in_trace ();
1024 bool can_run_breakpoint_commands () override
;
1026 void trace_init () override
;
1028 void download_tracepoint (struct bp_location
*location
) override
;
1030 bool can_download_tracepoint () override
;
1032 void download_trace_state_variable (const trace_state_variable
&tsv
) override
;
1034 void enable_tracepoint (struct bp_location
*location
) override
;
1036 void disable_tracepoint (struct bp_location
*location
) override
;
1038 void trace_set_readonly_regions () override
;
1040 void trace_start () override
;
1042 int get_trace_status (struct trace_status
*ts
) override
;
1044 void get_tracepoint_status (tracepoint
*tp
, struct uploaded_tp
*utp
)
1047 void trace_stop () override
;
1049 int trace_find (enum trace_find_type type
, int num
,
1050 CORE_ADDR addr1
, CORE_ADDR addr2
, int *tpp
) override
;
1052 bool get_trace_state_variable_value (int tsv
, LONGEST
*val
) override
;
1054 int save_trace_data (const char *filename
) override
;
1056 int upload_tracepoints (struct uploaded_tp
**utpp
) override
;
1058 int upload_trace_state_variables (struct uploaded_tsv
**utsvp
) override
;
1060 LONGEST
get_raw_trace_data (gdb_byte
*buf
, ULONGEST offset
, LONGEST len
) override
;
1062 int get_min_fast_tracepoint_insn_len () override
;
1064 void set_disconnected_tracing (int val
) override
;
1066 void set_circular_trace_buffer (int val
) override
;
1068 void set_trace_buffer_size (LONGEST val
) override
;
1070 bool set_trace_notes (const char *user
, const char *notes
,
1071 const char *stopnotes
) override
;
1073 int core_of_thread (ptid_t ptid
) override
;
1075 int verify_memory (const gdb_byte
*data
,
1076 CORE_ADDR memaddr
, ULONGEST size
) override
;
1079 bool get_tib_address (ptid_t ptid
, CORE_ADDR
*addr
) override
;
1081 void set_permissions () override
;
1083 bool static_tracepoint_marker_at (CORE_ADDR
,
1084 struct static_tracepoint_marker
*marker
)
1087 std::vector
<static_tracepoint_marker
>
1088 static_tracepoint_markers_by_strid (const char *id
) override
;
1090 traceframe_info_up
traceframe_info () override
;
1092 bool use_agent (bool use
) override
;
1093 bool can_use_agent () override
;
1095 struct btrace_target_info
*
1096 enable_btrace (thread_info
*tp
, const struct btrace_config
*conf
) override
;
1098 void disable_btrace (struct btrace_target_info
*tinfo
) override
;
1100 void teardown_btrace (struct btrace_target_info
*tinfo
) override
;
1102 enum btrace_error
read_btrace (struct btrace_data
*data
,
1103 struct btrace_target_info
*btinfo
,
1104 enum btrace_read_type type
) override
;
1106 const struct btrace_config
*btrace_conf (const struct btrace_target_info
*) override
;
1107 bool augmented_libraries_svr4_read () override
;
1108 void follow_fork (inferior
*, ptid_t
, target_waitkind
, bool, bool) override
;
1109 void follow_clone (ptid_t child_ptid
) override
;
1110 void follow_exec (inferior
*, ptid_t
, const char *) override
;
1111 int insert_fork_catchpoint (int) override
;
1112 int remove_fork_catchpoint (int) override
;
1113 int insert_vfork_catchpoint (int) override
;
1114 int remove_vfork_catchpoint (int) override
;
1115 int insert_exec_catchpoint (int) override
;
1116 int remove_exec_catchpoint (int) override
;
1117 enum exec_direction_kind
execution_direction () override
;
1119 bool supports_memory_tagging () override
;
1121 bool fetch_memtags (CORE_ADDR address
, size_t len
,
1122 gdb::byte_vector
&tags
, int type
) override
;
1124 bool store_memtags (CORE_ADDR address
, size_t len
,
1125 const gdb::byte_vector
&tags
, int type
) override
;
1127 bool is_address_tagged (gdbarch
*gdbarch
, CORE_ADDR address
) override
;
1129 public: /* Remote specific methods. */
1131 void remote_download_command_source (int num
, ULONGEST addr
,
1132 struct command_line
*cmds
);
1134 void remote_file_put (const char *local_file
, const char *remote_file
,
1136 void remote_file_get (const char *remote_file
, const char *local_file
,
1138 void remote_file_delete (const char *remote_file
, int from_tty
);
1140 int remote_hostio_pread (int fd
, gdb_byte
*read_buf
, int len
,
1141 ULONGEST offset
, fileio_error
*remote_errno
);
1142 int remote_hostio_pwrite (int fd
, const gdb_byte
*write_buf
, int len
,
1143 ULONGEST offset
, fileio_error
*remote_errno
);
1144 int remote_hostio_pread_vFile (int fd
, gdb_byte
*read_buf
, int len
,
1145 ULONGEST offset
, fileio_error
*remote_errno
);
1147 int remote_hostio_send_command (int command_bytes
, int which_packet
,
1148 fileio_error
*remote_errno
, const char **attachment
,
1149 int *attachment_len
);
1150 int remote_hostio_set_filesystem (struct inferior
*inf
,
1151 fileio_error
*remote_errno
);
1152 /* We should get rid of this and use fileio_open directly. */
1153 int remote_hostio_open (struct inferior
*inf
, const char *filename
,
1154 int flags
, int mode
, int warn_if_slow
,
1155 fileio_error
*remote_errno
);
1156 int remote_hostio_close (int fd
, fileio_error
*remote_errno
);
1158 int remote_hostio_unlink (inferior
*inf
, const char *filename
,
1159 fileio_error
*remote_errno
);
1161 struct remote_state
*get_remote_state ();
1163 long get_remote_packet_size (void);
1164 long get_memory_packet_size (struct memory_packet_config
*config
);
1166 long get_memory_write_packet_size ();
1167 long get_memory_read_packet_size ();
1169 char *append_pending_thread_resumptions (char *p
, char *endp
,
1171 static void open_1 (const char *name
, int from_tty
, int extended_p
);
1172 void start_remote (int from_tty
, int extended_p
);
1173 void remote_detach_1 (struct inferior
*inf
, int from_tty
);
1175 char *append_resumption (char *p
, char *endp
,
1176 ptid_t ptid
, int step
, gdb_signal siggnal
);
1177 int remote_resume_with_vcont (ptid_t scope_ptid
, int step
,
1178 gdb_signal siggnal
);
1180 thread_info
*add_current_inferior_and_thread (const char *wait_status
);
1182 ptid_t
wait_ns (ptid_t ptid
, struct target_waitstatus
*status
,
1183 target_wait_flags options
);
1184 ptid_t
wait_as (ptid_t ptid
, target_waitstatus
*status
,
1185 target_wait_flags options
);
1187 ptid_t
process_stop_reply (stop_reply_up stop_reply
,
1188 target_waitstatus
*status
);
1190 ptid_t select_thread_for_ambiguous_stop_reply
1191 (const struct target_waitstatus
&status
);
1193 void remote_notice_new_inferior (ptid_t currthread
, bool executing
);
1195 void print_one_stopped_thread (thread_info
*thread
);
1196 void process_initial_stop_replies (int from_tty
);
1198 thread_info
*remote_add_thread (ptid_t ptid
, bool running
, bool executing
,
1201 void btrace_sync_conf (const btrace_config
*conf
);
1203 void remote_btrace_maybe_reopen ();
1205 void remove_new_children (threads_listing_context
*context
);
1206 void kill_new_fork_children (inferior
*inf
);
1207 void discard_pending_stop_replies (struct inferior
*inf
);
1208 int stop_reply_queue_length ();
1210 void check_pending_events_prevent_wildcard_vcont
1211 (bool *may_global_wildcard_vcont
);
1213 void discard_pending_stop_replies_in_queue ();
1214 stop_reply_up
remote_notif_remove_queued_reply (ptid_t ptid
);
1215 stop_reply_up
queued_stop_reply (ptid_t ptid
);
1216 int peek_stop_reply (ptid_t ptid
);
1217 void remote_parse_stop_reply (const char *buf
, stop_reply
*event
);
1219 void remote_stop_ns (ptid_t ptid
);
1220 void remote_interrupt_as ();
1221 void remote_interrupt_ns ();
1223 char *remote_get_noisy_reply ();
1224 int remote_query_attached (int pid
);
1225 inferior
*remote_add_inferior (bool fake_pid_p
, int pid
, int attached
,
1228 ptid_t
remote_current_thread (ptid_t oldpid
);
1229 ptid_t
get_current_thread (const char *wait_status
);
1231 void set_thread (ptid_t ptid
, int gen
);
1232 void set_general_thread (ptid_t ptid
);
1233 void set_continue_thread (ptid_t ptid
);
1234 void set_general_process ();
1236 char *write_ptid (char *buf
, const char *endbuf
, ptid_t ptid
);
1238 int remote_unpack_thread_info_response (const char *pkt
, threadref
*expectedref
,
1239 gdb_ext_thread_info
*info
);
1240 int remote_get_threadinfo (threadref
*threadid
, int fieldset
,
1241 gdb_ext_thread_info
*info
);
1243 int parse_threadlist_response (const char *pkt
, int result_limit
,
1244 threadref
*original_echo
,
1245 threadref
*resultlist
,
1247 int remote_get_threadlist (int startflag
, threadref
*nextthread
,
1248 int result_limit
, int *done
, int *result_count
,
1249 threadref
*threadlist
);
1251 int remote_threadlist_iterator (rmt_thread_action stepfunction
,
1252 void *context
, int looplimit
);
1254 int remote_get_threads_with_ql (threads_listing_context
*context
);
1255 int remote_get_threads_with_qxfer (threads_listing_context
*context
);
1256 int remote_get_threads_with_qthreadinfo (threads_listing_context
*context
);
1258 void extended_remote_restart ();
1260 void get_offsets ();
1262 void remote_check_symbols ();
1264 void remote_supported_packet (const struct protocol_feature
*feature
,
1265 enum packet_support support
,
1266 const char *argument
);
1268 void remote_query_supported ();
1270 void remote_packet_size (const protocol_feature
*feature
,
1271 packet_support support
, const char *value
);
1272 void remote_supported_thread_options (const protocol_feature
*feature
,
1273 enum packet_support support
,
1276 void remote_serial_quit_handler ();
1278 void remote_detach_pid (int pid
);
1280 void remote_vcont_probe ();
1282 void remote_resume_with_hc (ptid_t ptid
, int step
,
1283 gdb_signal siggnal
);
1285 void send_interrupt_sequence ();
1286 void interrupt_query ();
1288 void remote_notif_get_pending_events (const notif_client
*nc
);
1290 int fetch_register_using_p (struct regcache
*regcache
,
1292 int send_g_packet ();
1293 void process_g_packet (struct regcache
*regcache
);
1294 void fetch_registers_using_g (struct regcache
*regcache
);
1295 int store_register_using_P (const struct regcache
*regcache
,
1297 void store_registers_using_G (const struct regcache
*regcache
);
1299 void set_remote_traceframe ();
1301 void check_binary_download (CORE_ADDR addr
);
1303 target_xfer_status
remote_write_bytes_aux (const char *header
,
1305 const gdb_byte
*myaddr
,
1308 ULONGEST
*xfered_len_units
,
1312 target_xfer_status
remote_write_bytes (CORE_ADDR memaddr
,
1313 const gdb_byte
*myaddr
, ULONGEST len
,
1314 int unit_size
, ULONGEST
*xfered_len
);
1316 target_xfer_status
remote_read_bytes_1 (CORE_ADDR memaddr
, gdb_byte
*myaddr
,
1318 int unit_size
, ULONGEST
*xfered_len_units
);
1320 target_xfer_status
remote_xfer_live_readonly_partial (gdb_byte
*readbuf
,
1324 ULONGEST
*xfered_len
);
1326 target_xfer_status
remote_read_bytes (CORE_ADDR memaddr
,
1327 gdb_byte
*myaddr
, ULONGEST len
,
1329 ULONGEST
*xfered_len
);
1331 packet_status
remote_send_printf (const char *format
, ...)
1332 ATTRIBUTE_PRINTF (2, 3);
1334 target_xfer_status
remote_flash_write (ULONGEST address
,
1335 ULONGEST length
, ULONGEST
*xfered_len
,
1336 const gdb_byte
*data
);
1338 int readchar (int timeout
);
1340 void remote_serial_write (const char *str
, int len
);
1341 void remote_serial_send_break ();
1343 int putpkt (const char *buf
);
1344 int putpkt_binary (const char *buf
, int cnt
);
1346 int putpkt (const gdb::char_vector
&buf
)
1348 return putpkt (buf
.data ());
1352 long read_frame (gdb::char_vector
*buf_p
);
1353 int getpkt (gdb::char_vector
*buf
, bool forever
= false,
1354 bool *is_notif
= nullptr);
1355 int remote_vkill (int pid
);
1356 void remote_kill_k ();
1358 void extended_remote_disable_randomization (int val
);
1359 int extended_remote_run (const std::string
&args
);
1361 void send_environment_packet (const char *action
,
1365 void extended_remote_environment_support ();
1366 void extended_remote_set_inferior_cwd ();
1368 target_xfer_status
remote_write_qxfer (const char *object_name
,
1370 const gdb_byte
*writebuf
,
1371 ULONGEST offset
, LONGEST len
,
1372 ULONGEST
*xfered_len
,
1373 const unsigned int which_packet
);
1375 target_xfer_status
remote_read_qxfer (const char *object_name
,
1377 gdb_byte
*readbuf
, ULONGEST offset
,
1379 ULONGEST
*xfered_len
,
1380 const unsigned int which_packet
);
1382 void push_stop_reply (stop_reply_up new_event
);
1384 bool vcont_r_supported ();
1386 remote_features m_features
;
1390 bool start_remote_1 (int from_tty
, int extended_p
);
1392 /* The remote state. Don't reference this directly. Use the
1393 get_remote_state method instead. */
1394 remote_state m_remote_state
;
1397 static const target_info extended_remote_target_info
= {
1399 N_("Extended remote target using gdb-specific protocol"),
1403 /* Set up the extended remote target by extending the standard remote
1404 target and adding to it. */
1406 class extended_remote_target final
: public remote_target
1409 const target_info
&info () const override
1410 { return extended_remote_target_info
; }
1412 /* Open an extended-remote connection. */
1413 static void open (const char *, int);
1415 bool can_create_inferior () override
{ return true; }
1416 void create_inferior (const char *, const std::string
&,
1417 char **, int) override
;
1419 void detach (inferior
*, int) override
;
1421 bool can_attach () override
{ return true; }
1422 void attach (const char *, int) override
;
1424 void post_attach (int) override
;
1425 bool supports_disable_randomization () override
;
1428 struct stop_reply
: public notif_event
1430 /* The identifier of the thread about this event */
1433 /* The remote state this event is associated with. When the remote
1434 connection, represented by a remote_state object, is closed,
1435 all the associated stop_reply events should be released. */
1436 struct remote_state
*rs
;
1438 struct target_waitstatus ws
;
1440 /* The architecture associated with the expedited registers. */
1443 /* Expedited registers. This makes remote debugging a bit more
1444 efficient for those targets that provide critical registers as
1445 part of their normal status mechanism (as another roundtrip to
1446 fetch them is avoided). */
1447 std::vector
<cached_reg_t
> regcache
;
1449 enum target_stop_reason stop_reason
;
1451 CORE_ADDR watch_data_address
;
1456 /* Return TARGET as a remote_target if it is one, else nullptr. */
1458 static remote_target
*
1459 as_remote_target (process_stratum_target
*target
)
1461 return dynamic_cast<remote_target
*> (target
);
1467 is_remote_target (process_stratum_target
*target
)
1469 return as_remote_target (target
) != nullptr;
1472 /* Per-program-space data key. */
1473 static const registry
<program_space
>::key
<char, gdb::xfree_deleter
<char>>
1476 /* The variable registered as the control variable used by the
1477 remote exec-file commands. While the remote exec-file setting is
1478 per-program-space, the set/show machinery uses this as the
1479 location of the remote exec-file value. */
1480 static std::string remote_exec_file_var
;
1482 /* The size to align memory write packets, when practical. The protocol
1483 does not guarantee any alignment, and gdb will generate short
1484 writes and unaligned writes, but even as a best-effort attempt this
1485 can improve bulk transfers. For instance, if a write is misaligned
1486 relative to the target's data bus, the stub may need to make an extra
1487 round trip fetching data from the target. This doesn't make a
1488 huge difference, but it's easy to do, so we try to be helpful.
1490 The alignment chosen is arbitrary; usually data bus width is
1491 important here, not the possibly larger cache line size. */
1492 enum { REMOTE_ALIGN_WRITES
= 16 };
1494 /* Prototypes for local functions. */
1496 static int hexnumlen (ULONGEST num
);
1498 static int stubhex (int ch
);
1500 static int hexnumstr (char *, ULONGEST
);
1502 static int hexnumnstr (char *, ULONGEST
, int);
1504 static CORE_ADDR
remote_address_masked (CORE_ADDR
);
1506 static int stub_unpack_int (const char *buff
, int fieldlength
);
1508 static void set_remote_protocol_packet_cmd (const char *args
, int from_tty
,
1509 cmd_list_element
*c
);
1511 static void show_packet_config_cmd (ui_file
*file
,
1512 const unsigned int which_packet
,
1513 remote_target
*remote
);
1515 static void show_remote_protocol_packet_cmd (struct ui_file
*file
,
1517 struct cmd_list_element
*c
,
1520 static ptid_t
read_ptid (const char *buf
, const char **obuf
);
1522 static bool remote_read_description_p (struct target_ops
*target
);
1524 static void remote_console_output (const char *msg
, ui_file
*stream
);
1526 static void remote_btrace_reset (remote_state
*rs
);
1528 static void remote_unpush_and_throw (remote_target
*target
);
1532 static struct cmd_list_element
*remote_cmdlist
;
1534 /* For "set remote" and "show remote". */
1536 static struct cmd_list_element
*remote_set_cmdlist
;
1537 static struct cmd_list_element
*remote_show_cmdlist
;
1539 /* Controls whether GDB is willing to use range stepping. */
1541 static bool use_range_stepping
= true;
1543 /* From the remote target's point of view, each thread is in one of these three
1545 enum class resume_state
1547 /* Not resumed - we haven't been asked to resume this thread. */
1550 /* We have been asked to resume this thread, but haven't sent a vCont action
1551 for it yet. We'll need to consider it next time commit_resume is
1553 RESUMED_PENDING_VCONT
,
1555 /* We have been asked to resume this thread, and we have sent a vCont action
1560 /* Information about a thread's pending vCont-resume. Used when a thread is in
1561 the remote_resume_state::RESUMED_PENDING_VCONT state. remote_target::resume
1562 stores this information which is then picked up by
1563 remote_target::commit_resume to know which is the proper action for this
1564 thread to include in the vCont packet. */
1565 struct resumed_pending_vcont_info
1567 /* True if the last resume call for this thread was a step request, false
1568 if a continue request. */
1571 /* The signal specified in the last resume call for this thread. */
1575 /* Private data that we'll store in (struct thread_info)->priv. */
1576 struct remote_thread_info
: public private_thread_info
1582 /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1583 sequence of bytes. */
1584 gdb::byte_vector thread_handle
;
1586 /* Whether the target stopped for a breakpoint/watchpoint. */
1587 enum target_stop_reason stop_reason
= TARGET_STOPPED_BY_NO_REASON
;
1589 /* This is set to the data address of the access causing the target
1590 to stop for a watchpoint. */
1591 CORE_ADDR watch_data_address
= 0;
1593 /* Get the thread's resume state. */
1594 enum resume_state
get_resume_state () const
1596 return m_resume_state
;
1599 /* Put the thread in the NOT_RESUMED state. */
1600 void set_not_resumed ()
1602 m_resume_state
= resume_state::NOT_RESUMED
;
1605 /* Put the thread in the RESUMED_PENDING_VCONT state. */
1606 void set_resumed_pending_vcont (bool step
, gdb_signal sig
)
1608 m_resume_state
= resume_state::RESUMED_PENDING_VCONT
;
1609 m_resumed_pending_vcont_info
.step
= step
;
1610 m_resumed_pending_vcont_info
.sig
= sig
;
1613 /* Get the information this thread's pending vCont-resumption.
1615 Must only be called if the thread is in the RESUMED_PENDING_VCONT resume
1617 const struct resumed_pending_vcont_info
&resumed_pending_vcont_info () const
1619 gdb_assert (m_resume_state
== resume_state::RESUMED_PENDING_VCONT
);
1621 return m_resumed_pending_vcont_info
;
1624 /* Put the thread in the VCONT_RESUMED state. */
1627 m_resume_state
= resume_state::RESUMED
;
1631 /* Resume state for this thread. This is used to implement vCont action
1632 coalescing (only when the target operates in non-stop mode).
1634 remote_target::resume moves the thread to the RESUMED_PENDING_VCONT state,
1635 which notes that this thread must be considered in the next commit_resume
1638 remote_target::commit_resume sends a vCont packet with actions for the
1639 threads in the RESUMED_PENDING_VCONT state and moves them to the
1640 VCONT_RESUMED state.
1642 When reporting a stop to the core for a thread, that thread is moved back
1643 to the NOT_RESUMED state. */
1644 enum resume_state m_resume_state
= resume_state::NOT_RESUMED
;
1646 /* Extra info used if the thread is in the RESUMED_PENDING_VCONT state. */
1647 struct resumed_pending_vcont_info m_resumed_pending_vcont_info
;
1650 remote_state::remote_state ()
1655 remote_state::~remote_state ()
1657 xfree (this->last_pass_packet
);
1658 xfree (this->last_program_signals_packet
);
1659 xfree (this->finished_object
);
1660 xfree (this->finished_annex
);
1663 /* Utility: generate error from an incoming stub packet. */
1665 trace_error (char *buf
)
1668 return; /* not an error msg */
1671 case '1': /* malformed packet error */
1672 if (*++buf
== '0') /* general case: */
1673 error (_("remote.c: error in outgoing packet."));
1675 error (_("remote.c: error in outgoing packet at field #%ld."),
1676 strtol (buf
, NULL
, 16));
1678 error (_("Target returns error code '%s'."), buf
);
1682 /* Utility: wait for reply from stub, while accepting "O" packets. */
1685 remote_target::remote_get_noisy_reply ()
1687 struct remote_state
*rs
= get_remote_state ();
1689 do /* Loop on reply from remote stub. */
1693 QUIT
; /* Allow user to bail out with ^C. */
1695 buf
= rs
->buf
.data ();
1698 else if (startswith (buf
, "qRelocInsn:"))
1701 CORE_ADDR from
, to
, org_to
;
1703 int adjusted_size
= 0;
1706 p
= buf
+ strlen ("qRelocInsn:");
1707 pp
= unpack_varlen_hex (p
, &ul
);
1709 error (_("invalid qRelocInsn packet: %s"), buf
);
1713 unpack_varlen_hex (p
, &ul
);
1720 gdbarch_relocate_instruction (current_inferior ()->arch (),
1724 catch (const gdb_exception
&ex
)
1726 if (ex
.error
== MEMORY_ERROR
)
1728 /* Propagate memory errors silently back to the
1729 target. The stub may have limited the range of
1730 addresses we can write to, for example. */
1734 /* Something unexpectedly bad happened. Be verbose
1735 so we can tell what, and propagate the error back
1736 to the stub, so it doesn't get stuck waiting for
1738 exception_fprintf (gdb_stderr
, ex
,
1739 _("warning: relocating instruction: "));
1746 adjusted_size
= to
- org_to
;
1748 xsnprintf (buf
, rs
->buf
.size (), "qRelocInsn:%x", adjusted_size
);
1752 else if (buf
[0] == 'O' && buf
[1] != 'K')
1754 /* 'O' message from stub */
1755 remote_console_output (buf
+ 1, gdb_stdtarg
);
1758 return buf
; /* Here's the actual reply. */
1763 struct remote_arch_state
*
1764 remote_state::get_remote_arch_state (struct gdbarch
*gdbarch
)
1766 remote_arch_state
*rsa
;
1768 auto it
= this->m_arch_states
.find (gdbarch
);
1769 if (it
== this->m_arch_states
.end ())
1771 auto p
= this->m_arch_states
.emplace (std::piecewise_construct
,
1772 std::forward_as_tuple (gdbarch
),
1773 std::forward_as_tuple (gdbarch
));
1774 rsa
= &p
.first
->second
;
1776 /* Make sure that the packet buffer is plenty big enough for
1777 this architecture. */
1778 if (this->buf
.size () < rsa
->remote_packet_size
)
1779 this->buf
.resize (2 * rsa
->remote_packet_size
);
1787 /* Fetch the global remote target state. */
1790 remote_target::get_remote_state ()
1792 /* Make sure that the remote architecture state has been
1793 initialized, because doing so might reallocate rs->buf. Any
1794 function which calls getpkt also needs to be mindful of changes
1795 to rs->buf, but this call limits the number of places which run
1797 m_remote_state
.get_remote_arch_state (current_inferior ()->arch ());
1799 return &m_remote_state
;
1802 /* Fetch the remote exec-file from the current program space. */
1805 get_remote_exec_file (void)
1807 char *remote_exec_file
;
1809 remote_exec_file
= remote_pspace_data
.get (current_program_space
);
1810 if (remote_exec_file
== NULL
)
1813 return remote_exec_file
;
1816 /* Set the remote exec file for PSPACE. */
1819 set_pspace_remote_exec_file (struct program_space
*pspace
,
1820 const char *remote_exec_file
)
1822 char *old_file
= remote_pspace_data
.get (pspace
);
1825 remote_pspace_data
.set (pspace
, xstrdup (remote_exec_file
));
1828 /* The "set/show remote exec-file" set command hook. */
1831 set_remote_exec_file (const char *ignored
, int from_tty
,
1832 struct cmd_list_element
*c
)
1834 set_pspace_remote_exec_file (current_program_space
,
1835 remote_exec_file_var
.c_str ());
1838 /* The "set/show remote exec-file" show command hook. */
1841 show_remote_exec_file (struct ui_file
*file
, int from_tty
,
1842 struct cmd_list_element
*cmd
, const char *value
)
1844 gdb_printf (file
, "%s\n", get_remote_exec_file ());
1848 map_regcache_remote_table (struct gdbarch
*gdbarch
, struct packet_reg
*regs
)
1850 int regnum
, num_remote_regs
, offset
;
1851 struct packet_reg
**remote_regs
;
1853 for (regnum
= 0; regnum
< gdbarch_num_regs (gdbarch
); regnum
++)
1855 struct packet_reg
*r
= ®s
[regnum
];
1857 if (register_size (gdbarch
, regnum
) == 0)
1858 /* Do not try to fetch zero-sized (placeholder) registers. */
1861 r
->pnum
= gdbarch_remote_register_number (gdbarch
, regnum
);
1866 /* Define the g/G packet format as the contents of each register
1867 with a remote protocol number, in order of ascending protocol
1870 remote_regs
= XALLOCAVEC (struct packet_reg
*, gdbarch_num_regs (gdbarch
));
1871 for (num_remote_regs
= 0, regnum
= 0;
1872 regnum
< gdbarch_num_regs (gdbarch
);
1874 if (regs
[regnum
].pnum
!= -1)
1875 remote_regs
[num_remote_regs
++] = ®s
[regnum
];
1877 std::sort (remote_regs
, remote_regs
+ num_remote_regs
,
1878 [] (const packet_reg
*a
, const packet_reg
*b
)
1879 { return a
->pnum
< b
->pnum
; });
1881 for (regnum
= 0, offset
= 0; regnum
< num_remote_regs
; regnum
++)
1883 remote_regs
[regnum
]->in_g_packet
= 1;
1884 remote_regs
[regnum
]->offset
= offset
;
1885 offset
+= register_size (gdbarch
, remote_regs
[regnum
]->regnum
);
1891 /* Given the architecture described by GDBARCH, return the remote
1892 protocol register's number and the register's offset in the g/G
1893 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1894 If the target does not have a mapping for REGNUM, return false,
1895 otherwise, return true. */
1898 remote_register_number_and_offset (struct gdbarch
*gdbarch
, int regnum
,
1899 int *pnum
, int *poffset
)
1901 gdb_assert (regnum
< gdbarch_num_regs (gdbarch
));
1903 std::vector
<packet_reg
> regs (gdbarch_num_regs (gdbarch
));
1905 map_regcache_remote_table (gdbarch
, regs
.data ());
1907 *pnum
= regs
[regnum
].pnum
;
1908 *poffset
= regs
[regnum
].offset
;
1913 remote_arch_state::remote_arch_state (struct gdbarch
*gdbarch
)
1915 /* Use the architecture to build a regnum<->pnum table, which will be
1916 1:1 unless a feature set specifies otherwise. */
1917 this->regs
.reset (new packet_reg
[gdbarch_num_regs (gdbarch
)] ());
1919 /* Record the maximum possible size of the g packet - it may turn out
1921 this->sizeof_g_packet
1922 = map_regcache_remote_table (gdbarch
, this->regs
.get ());
1924 /* Default maximum number of characters in a packet body. Many
1925 remote stubs have a hardwired buffer size of 400 bytes
1926 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
1927 as the maximum packet-size to ensure that the packet and an extra
1928 NUL character can always fit in the buffer. This stops GDB
1929 trashing stubs that try to squeeze an extra NUL into what is
1930 already a full buffer (As of 1999-12-04 that was most stubs). */
1931 this->remote_packet_size
= 400 - 1;
1933 /* This one is filled in when a ``g'' packet is received. */
1934 this->actual_register_packet_size
= 0;
1936 /* Should rsa->sizeof_g_packet needs more space than the
1937 default, adjust the size accordingly. Remember that each byte is
1938 encoded as two characters. 32 is the overhead for the packet
1939 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
1940 (``$NN:G...#NN'') is a better guess, the below has been padded a
1942 if (this->sizeof_g_packet
> ((this->remote_packet_size
- 32) / 2))
1943 this->remote_packet_size
= (this->sizeof_g_packet
* 2 + 32);
1946 /* Get a pointer to the current remote target. If not connected to a
1947 remote target, return NULL. */
1949 static remote_target
*
1950 get_current_remote_target ()
1952 target_ops
*proc_target
= current_inferior ()->process_target ();
1953 return dynamic_cast<remote_target
*> (proc_target
);
1956 /* Return the current allowed size of a remote packet. This is
1957 inferred from the current architecture, and should be used to
1958 limit the length of outgoing packets. */
1960 remote_target::get_remote_packet_size ()
1962 struct remote_state
*rs
= get_remote_state ();
1963 remote_arch_state
*rsa
1964 = rs
->get_remote_arch_state (current_inferior ()->arch ());
1966 if (rs
->explicit_packet_size
)
1967 return rs
->explicit_packet_size
;
1969 return rsa
->remote_packet_size
;
1972 static struct packet_reg
*
1973 packet_reg_from_regnum (struct gdbarch
*gdbarch
, struct remote_arch_state
*rsa
,
1976 if (regnum
< 0 && regnum
>= gdbarch_num_regs (gdbarch
))
1980 struct packet_reg
*r
= &rsa
->regs
[regnum
];
1982 gdb_assert (r
->regnum
== regnum
);
1987 static struct packet_reg
*
1988 packet_reg_from_pnum (struct gdbarch
*gdbarch
, struct remote_arch_state
*rsa
,
1993 for (i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
1995 struct packet_reg
*r
= &rsa
->regs
[i
];
1997 if (r
->pnum
== pnum
)
2003 /* Allow the user to specify what sequence to send to the remote
2004 when he requests a program interruption: Although ^C is usually
2005 what remote systems expect (this is the default, here), it is
2006 sometimes preferable to send a break. On other systems such
2007 as the Linux kernel, a break followed by g, which is Magic SysRq g
2008 is required in order to interrupt the execution. */
2009 const char interrupt_sequence_control_c
[] = "Ctrl-C";
2010 const char interrupt_sequence_break
[] = "BREAK";
2011 const char interrupt_sequence_break_g
[] = "BREAK-g";
2012 static const char *const interrupt_sequence_modes
[] =
2014 interrupt_sequence_control_c
,
2015 interrupt_sequence_break
,
2016 interrupt_sequence_break_g
,
2019 static const char *interrupt_sequence_mode
= interrupt_sequence_control_c
;
2022 show_interrupt_sequence (struct ui_file
*file
, int from_tty
,
2023 struct cmd_list_element
*c
,
2026 if (interrupt_sequence_mode
== interrupt_sequence_control_c
)
2028 _("Send the ASCII ETX character (Ctrl-c) "
2029 "to the remote target to interrupt the "
2030 "execution of the program.\n"));
2031 else if (interrupt_sequence_mode
== interrupt_sequence_break
)
2033 _("send a break signal to the remote target "
2034 "to interrupt the execution of the program.\n"));
2035 else if (interrupt_sequence_mode
== interrupt_sequence_break_g
)
2037 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
2038 "the remote target to interrupt the execution "
2039 "of Linux kernel.\n"));
2041 internal_error (_("Invalid value for interrupt_sequence_mode: %s."),
2042 interrupt_sequence_mode
);
2045 /* This boolean variable specifies whether interrupt_sequence is sent
2046 to the remote target when gdb connects to it.
2047 This is mostly needed when you debug the Linux kernel: The Linux kernel
2048 expects BREAK g which is Magic SysRq g for connecting gdb. */
2049 static bool interrupt_on_connect
= false;
2051 /* This variable is used to implement the "set/show remotebreak" commands.
2052 Since these commands are now deprecated in favor of "set/show remote
2053 interrupt-sequence", it no longer has any effect on the code. */
2054 static bool remote_break
;
2057 set_remotebreak (const char *args
, int from_tty
, struct cmd_list_element
*c
)
2060 interrupt_sequence_mode
= interrupt_sequence_break
;
2062 interrupt_sequence_mode
= interrupt_sequence_control_c
;
2066 show_remotebreak (struct ui_file
*file
, int from_tty
,
2067 struct cmd_list_element
*c
,
2072 /* This variable sets the number of bits in an address that are to be
2073 sent in a memory ("M" or "m") packet. Normally, after stripping
2074 leading zeros, the entire address would be sent. This variable
2075 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
2076 initial implementation of remote.c restricted the address sent in
2077 memory packets to ``host::sizeof long'' bytes - (typically 32
2078 bits). Consequently, for 64 bit targets, the upper 32 bits of an
2079 address was never sent. Since fixing this bug may cause a break in
2080 some remote targets this variable is principally provided to
2081 facilitate backward compatibility. */
2083 static unsigned int remote_address_size
;
2086 /* The default max memory-write-packet-size, when the setting is
2087 "fixed". The 16k is historical. (It came from older GDB's using
2088 alloca for buffers and the knowledge (folklore?) that some hosts
2089 don't cope very well with large alloca calls.) */
2090 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
2092 /* The minimum remote packet size for memory transfers. Ensures we
2093 can write at least one byte. */
2094 #define MIN_MEMORY_PACKET_SIZE 20
2096 /* Get the memory packet size, assuming it is fixed. */
2099 get_fixed_memory_packet_size (struct memory_packet_config
*config
)
2101 gdb_assert (config
->fixed_p
);
2103 if (config
->size
<= 0)
2104 return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
;
2106 return config
->size
;
2109 /* Compute the current size of a read/write packet. Since this makes
2110 use of ``actual_register_packet_size'' the computation is dynamic. */
2113 remote_target::get_memory_packet_size (struct memory_packet_config
*config
)
2115 struct remote_state
*rs
= get_remote_state ();
2116 remote_arch_state
*rsa
2117 = rs
->get_remote_arch_state (current_inferior ()->arch ());
2120 if (config
->fixed_p
)
2121 what_they_get
= get_fixed_memory_packet_size (config
);
2124 what_they_get
= get_remote_packet_size ();
2125 /* Limit the packet to the size specified by the user. */
2126 if (config
->size
> 0
2127 && what_they_get
> config
->size
)
2128 what_they_get
= config
->size
;
2130 /* Limit it to the size of the targets ``g'' response unless we have
2131 permission from the stub to use a larger packet size. */
2132 if (rs
->explicit_packet_size
== 0
2133 && rsa
->actual_register_packet_size
> 0
2134 && what_they_get
> rsa
->actual_register_packet_size
)
2135 what_they_get
= rsa
->actual_register_packet_size
;
2137 if (what_they_get
< MIN_MEMORY_PACKET_SIZE
)
2138 what_they_get
= MIN_MEMORY_PACKET_SIZE
;
2140 /* Make sure there is room in the global buffer for this packet
2141 (including its trailing NUL byte). */
2142 if (rs
->buf
.size () < what_they_get
+ 1)
2143 rs
->buf
.resize (2 * what_they_get
);
2145 return what_they_get
;
2148 /* Update the size of a read/write packet. If they user wants
2149 something really big then do a sanity check. */
2152 set_memory_packet_size (const char *args
, struct memory_packet_config
*config
,
2153 bool target_connected
)
2155 int fixed_p
= config
->fixed_p
;
2156 long size
= config
->size
;
2159 error (_("Argument required (integer, \"fixed\" or \"limit\")."));
2160 else if (strcmp (args
, "hard") == 0
2161 || strcmp (args
, "fixed") == 0)
2163 else if (strcmp (args
, "soft") == 0
2164 || strcmp (args
, "limit") == 0)
2170 size
= strtoul (args
, &end
, 0);
2172 error (_("Invalid %s (bad syntax)."), config
->name
);
2174 /* Instead of explicitly capping the size of a packet to or
2175 disallowing it, the user is allowed to set the size to
2176 something arbitrarily large. */
2180 if (fixed_p
&& !config
->fixed_p
)
2182 /* So that the query shows the correct value. */
2183 long query_size
= (size
<= 0
2184 ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
2187 if (target_connected
2188 && !query (_("The target may not be able to correctly handle a %s\n"
2189 "of %ld bytes. Change the packet size? "),
2190 config
->name
, query_size
))
2191 error (_("Packet size not changed."));
2192 else if (!target_connected
2193 && !query (_("Future remote targets may not be able to "
2194 "correctly handle a %s\nof %ld bytes. Change the "
2195 "packet size for future remote targets? "),
2196 config
->name
, query_size
))
2197 error (_("Packet size not changed."));
2199 /* Update the config. */
2200 config
->fixed_p
= fixed_p
;
2201 config
->size
= size
;
2203 const char *target_type
= get_target_type_name (target_connected
);
2204 gdb_printf (_("The %s %s is set to \"%s\".\n"), config
->name
, target_type
,
2209 /* Show the memory-read or write-packet size configuration CONFIG of the
2210 target REMOTE. If REMOTE is nullptr, the default configuration for future
2211 remote targets should be passed in CONFIG. */
2214 show_memory_packet_size (memory_packet_config
*config
, remote_target
*remote
)
2216 const char *target_type
= get_target_type_name (remote
!= nullptr);
2218 if (config
->size
== 0)
2219 gdb_printf (_("The %s %s is 0 (default). "), config
->name
, target_type
);
2221 gdb_printf (_("The %s %s is %ld. "), config
->name
, target_type
,
2224 if (config
->fixed_p
)
2225 gdb_printf (_("Packets are fixed at %ld bytes.\n"),
2226 get_fixed_memory_packet_size (config
));
2229 if (remote
!= nullptr)
2230 gdb_printf (_("Packets are limited to %ld bytes.\n"),
2231 remote
->get_memory_packet_size (config
));
2233 gdb_puts ("The actual limit will be further reduced "
2234 "dependent on the target.\n");
2238 /* Configure the memory-write-packet size of the currently selected target. If
2239 no target is available, the default configuration for future remote targets
2243 set_memory_write_packet_size (const char *args
, int from_tty
)
2245 remote_target
*remote
= get_current_remote_target ();
2246 if (remote
!= nullptr)
2248 set_memory_packet_size
2249 (args
, &remote
->m_features
.m_memory_write_packet_config
, true);
2253 memory_packet_config
* config
= &memory_write_packet_config
;
2254 set_memory_packet_size (args
, config
, false);
2258 /* Display the memory-write-packet size of the currently selected target. If
2259 no target is available, the default configuration for future remote targets
2263 show_memory_write_packet_size (const char *args
, int from_tty
)
2265 remote_target
*remote
= get_current_remote_target ();
2266 if (remote
!= nullptr)
2267 show_memory_packet_size (&remote
->m_features
.m_memory_write_packet_config
,
2270 show_memory_packet_size (&memory_write_packet_config
, nullptr);
2273 /* Show the number of hardware watchpoints that can be used. */
2276 show_hardware_watchpoint_limit (struct ui_file
*file
, int from_tty
,
2277 struct cmd_list_element
*c
,
2280 gdb_printf (file
, _("The maximum number of target hardware "
2281 "watchpoints is %s.\n"), value
);
2284 /* Show the length limit (in bytes) for hardware watchpoints. */
2287 show_hardware_watchpoint_length_limit (struct ui_file
*file
, int from_tty
,
2288 struct cmd_list_element
*c
,
2291 gdb_printf (file
, _("The maximum length (in bytes) of a target "
2292 "hardware watchpoint is %s.\n"), value
);
2295 /* Show the number of hardware breakpoints that can be used. */
2298 show_hardware_breakpoint_limit (struct ui_file
*file
, int from_tty
,
2299 struct cmd_list_element
*c
,
2302 gdb_printf (file
, _("The maximum number of target hardware "
2303 "breakpoints is %s.\n"), value
);
2306 /* Controls the maximum number of characters to display in the debug output
2307 for each remote packet. The remaining characters are omitted. */
2309 static int remote_packet_max_chars
= 512;
2311 /* Show the maximum number of characters to display for each remote packet
2312 when remote debugging is enabled. */
2315 show_remote_packet_max_chars (struct ui_file
*file
, int from_tty
,
2316 struct cmd_list_element
*c
,
2319 gdb_printf (file
, _("Number of remote packet characters to "
2320 "display is %s.\n"), value
);
2324 remote_target::get_memory_write_packet_size ()
2326 return get_memory_packet_size (&m_features
.m_memory_write_packet_config
);
2329 /* Configure the memory-read-packet size of the currently selected target. If
2330 no target is available, the default configuration for future remote targets
2334 set_memory_read_packet_size (const char *args
, int from_tty
)
2336 remote_target
*remote
= get_current_remote_target ();
2337 if (remote
!= nullptr)
2338 set_memory_packet_size
2339 (args
, &remote
->m_features
.m_memory_read_packet_config
, true);
2342 memory_packet_config
* config
= &memory_read_packet_config
;
2343 set_memory_packet_size (args
, config
, false);
2348 /* Display the memory-read-packet size of the currently selected target. If
2349 no target is available, the default configuration for future remote targets
2353 show_memory_read_packet_size (const char *args
, int from_tty
)
2355 remote_target
*remote
= get_current_remote_target ();
2356 if (remote
!= nullptr)
2357 show_memory_packet_size (&remote
->m_features
.m_memory_read_packet_config
,
2360 show_memory_packet_size (&memory_read_packet_config
, nullptr);
2364 remote_target::get_memory_read_packet_size ()
2366 long size
= get_memory_packet_size (&m_features
.m_memory_read_packet_config
);
2368 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
2369 extra buffer size argument before the memory read size can be
2370 increased beyond this. */
2371 if (size
> get_remote_packet_size ())
2372 size
= get_remote_packet_size ();
2376 static enum packet_support
packet_config_support (const packet_config
*config
);
2380 set_remote_protocol_packet_cmd (const char *args
, int from_tty
,
2381 cmd_list_element
*c
)
2383 remote_target
*remote
= get_current_remote_target ();
2384 gdb_assert (c
->var
.has_value ());
2386 auto *default_config
= static_cast<packet_config
*> (c
->context ());
2387 const int packet_idx
= std::distance (remote_protocol_packets
,
2390 if (packet_idx
>= 0 && packet_idx
< PACKET_MAX
)
2392 const char *name
= packets_descriptions
[packet_idx
].name
;
2393 const auto_boolean value
= c
->var
->get
<auto_boolean
> ();
2394 const char *support
= get_packet_support_name (value
);
2395 const char *target_type
= get_target_type_name (remote
!= nullptr);
2397 if (remote
!= nullptr)
2398 remote
->m_features
.m_protocol_packets
[packet_idx
].detect
= value
;
2400 remote_protocol_packets
[packet_idx
].detect
= value
;
2402 gdb_printf (_("Support for the '%s' packet %s is set to \"%s\".\n"), name
,
2403 target_type
, support
);
2407 internal_error (_("Could not find config for %s"), c
->name
);
2411 show_packet_config_cmd (ui_file
*file
, const unsigned int which_packet
,
2412 remote_target
*remote
)
2414 const char *support
= "internal-error";
2415 const char *target_type
= get_target_type_name (remote
!= nullptr);
2417 packet_config
*config
;
2418 if (remote
!= nullptr)
2419 config
= &remote
->m_features
.m_protocol_packets
[which_packet
];
2421 config
= &remote_protocol_packets
[which_packet
];
2423 switch (packet_config_support (config
))
2426 support
= "enabled";
2428 case PACKET_DISABLE
:
2429 support
= "disabled";
2431 case PACKET_SUPPORT_UNKNOWN
:
2432 support
= "unknown";
2435 switch (config
->detect
)
2437 case AUTO_BOOLEAN_AUTO
:
2439 _("Support for the '%s' packet %s is \"auto\", "
2441 packets_descriptions
[which_packet
].name
, target_type
,
2444 case AUTO_BOOLEAN_TRUE
:
2445 case AUTO_BOOLEAN_FALSE
:
2447 _("Support for the '%s' packet %s is \"%s\".\n"),
2448 packets_descriptions
[which_packet
].name
, target_type
,
2449 get_packet_support_name (config
->detect
));
2455 add_packet_config_cmd (const unsigned int which_packet
, const char *name
,
2456 const char *title
, int legacy
)
2458 packets_descriptions
[which_packet
].name
= name
;
2459 packets_descriptions
[which_packet
].title
= title
;
2461 packet_config
*config
= &remote_protocol_packets
[which_packet
];
2463 gdb::unique_xmalloc_ptr
<char> set_doc
2464 = xstrprintf ("Set use of remote protocol `%s' (%s) packet.",
2466 gdb::unique_xmalloc_ptr
<char> show_doc
2467 = xstrprintf ("Show current use of remote protocol `%s' (%s) packet.",
2469 /* set/show TITLE-packet {auto,on,off} */
2470 gdb::unique_xmalloc_ptr
<char> cmd_name
= xstrprintf ("%s-packet", title
);
2471 set_show_commands cmds
2472 = add_setshow_auto_boolean_cmd (cmd_name
.release (), class_obscure
,
2473 &config
->detect
, set_doc
.get (),
2474 show_doc
.get (), NULL
, /* help_doc */
2475 set_remote_protocol_packet_cmd
,
2476 show_remote_protocol_packet_cmd
,
2477 &remote_set_cmdlist
, &remote_show_cmdlist
);
2478 cmds
.show
->set_context (config
);
2479 cmds
.set
->set_context (config
);
2481 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
2484 /* It's not clear who should take ownership of the LEGACY_NAME string
2485 created below, so, for now, place the string into a static vector
2486 which ensures the strings is released when GDB exits. */
2487 static std::vector
<gdb::unique_xmalloc_ptr
<char>> legacy_names
;
2488 gdb::unique_xmalloc_ptr
<char> legacy_name
2489 = xstrprintf ("%s-packet", name
);
2490 add_alias_cmd (legacy_name
.get (), cmds
.set
, class_obscure
, 0,
2491 &remote_set_cmdlist
);
2492 add_alias_cmd (legacy_name
.get (), cmds
.show
, class_obscure
, 0,
2493 &remote_show_cmdlist
);
2494 legacy_names
.emplace_back (std::move (legacy_name
));
2498 /* Check GDBserver's reply packet. Return packet_result structure
2499 which contains the packet_status enum and an error message for the
2502 An error packet can always take the form Exx (where xx is a hex
2503 code). When ACCEPT_MSG is true error messages can also take the
2504 form E.msg (where msg is any arbitrary string). */
2505 static packet_result
2506 packet_check_result (const char *buf
, bool accept_msg
)
2510 /* The stub recognized the packet request. Check that the
2511 operation succeeded. */
2513 && isxdigit (buf
[1]) && isxdigit (buf
[2])
2515 /* "Enn" - definitely an error. */
2516 return packet_result::make_numeric_error (buf
+ 1);
2518 /* Not every request accepts an error in a E.msg form.
2519 Some packets accepts only Enn, in this case E. is not
2520 defined and E. is treated as PACKET_OK. */
2523 /* Always treat "E." as an error. This will be used for
2524 more verbose error messages, such as E.memtypes. */
2525 if (buf
[0] == 'E' && buf
[1] == '.')
2528 return packet_result::make_textual_error (buf
+ 2);
2530 return packet_result::make_textual_error ("no error provided");
2534 /* The packet may or may not be OK. Just assume it is. */
2535 return packet_result::make_ok ();
2539 /* The stub does not support the packet. */
2540 return packet_result::make_unknown ();
2544 static packet_result
2545 packet_check_result (const gdb::char_vector
&buf
, bool accept_msg
)
2547 return packet_check_result (buf
.data (), accept_msg
);
2551 remote_features::packet_ok (const char *buf
, const int which_packet
)
2553 packet_config
*config
= &m_protocol_packets
[which_packet
];
2554 packet_description
*descr
= &packets_descriptions
[which_packet
];
2556 if (config
->detect
!= AUTO_BOOLEAN_TRUE
2557 && config
->support
== PACKET_DISABLE
)
2558 internal_error (_("packet_ok: attempt to use a disabled packet"));
2560 packet_result result
= packet_check_result (buf
, true);
2561 switch (result
.status ())
2565 /* The stub recognized the packet request. */
2566 if (config
->support
== PACKET_SUPPORT_UNKNOWN
)
2568 remote_debug_printf ("Packet %s (%s) is supported",
2569 descr
->name
, descr
->title
);
2570 config
->support
= PACKET_ENABLE
;
2573 case PACKET_UNKNOWN
:
2574 /* The stub does not support the packet. */
2575 if (config
->detect
== AUTO_BOOLEAN_AUTO
2576 && config
->support
== PACKET_ENABLE
)
2578 /* If the stub previously indicated that the packet was
2579 supported then there is a protocol error. */
2580 error (_("Protocol error: %s (%s) conflicting enabled responses."),
2581 descr
->name
, descr
->title
);
2583 else if (config
->detect
== AUTO_BOOLEAN_TRUE
)
2585 /* The user set it wrong. */
2586 error (_("Enabled packet %s (%s) not recognized by stub"),
2587 descr
->name
, descr
->title
);
2590 remote_debug_printf ("Packet %s (%s) is NOT supported", descr
->name
,
2592 config
->support
= PACKET_DISABLE
;
2600 remote_features::packet_ok (const gdb::char_vector
&buf
, const int which_packet
)
2602 return packet_ok (buf
.data (), which_packet
);
2605 /* Returns whether a given packet or feature is supported. This takes
2606 into account the state of the corresponding "set remote foo-packet"
2607 command, which may be used to bypass auto-detection. */
2609 static enum packet_support
2610 packet_config_support (const packet_config
*config
)
2612 switch (config
->detect
)
2614 case AUTO_BOOLEAN_TRUE
:
2615 return PACKET_ENABLE
;
2616 case AUTO_BOOLEAN_FALSE
:
2617 return PACKET_DISABLE
;
2618 case AUTO_BOOLEAN_AUTO
:
2619 return config
->support
;
2621 gdb_assert_not_reached ("bad switch");
2626 remote_features::packet_support (int packet
) const
2628 const packet_config
*config
= &m_protocol_packets
[packet
];
2629 return packet_config_support (config
);
2633 show_remote_protocol_packet_cmd (struct ui_file
*file
, int from_tty
,
2634 struct cmd_list_element
*c
,
2637 remote_target
*remote
= get_current_remote_target ();
2638 gdb_assert (c
->var
.has_value ());
2640 auto *default_config
= static_cast<packet_config
*> (c
->context ());
2641 const int packet_idx
= std::distance (remote_protocol_packets
,
2644 if (packet_idx
>= 0 && packet_idx
< PACKET_MAX
)
2646 show_packet_config_cmd (file
, packet_idx
, remote
);
2649 internal_error (_("Could not find config for %s"), c
->name
);
2652 /* Should we try one of the 'Z' requests? */
2656 Z_PACKET_SOFTWARE_BP
,
2657 Z_PACKET_HARDWARE_BP
,
2664 /* For compatibility with older distributions. Provide a ``set remote
2665 Z-packet ...'' command that updates all the Z packet types. */
2667 static enum auto_boolean remote_Z_packet_detect
;
2670 set_remote_protocol_Z_packet_cmd (const char *args
, int from_tty
,
2671 struct cmd_list_element
*c
)
2673 remote_target
*remote
= get_current_remote_target ();
2676 for (i
= 0; i
< NR_Z_PACKET_TYPES
; i
++)
2678 if (remote
!= nullptr)
2679 remote
->m_features
.m_protocol_packets
[PACKET_Z0
+ i
].detect
2680 = remote_Z_packet_detect
;
2682 remote_protocol_packets
[PACKET_Z0
+ i
].detect
= remote_Z_packet_detect
;
2685 const char *support
= get_packet_support_name (remote_Z_packet_detect
);
2686 const char *target_type
= get_target_type_name (remote
!= nullptr);
2687 gdb_printf (_("Use of Z packets %s is set to \"%s\".\n"), target_type
,
2693 show_remote_protocol_Z_packet_cmd (struct ui_file
*file
, int from_tty
,
2694 struct cmd_list_element
*c
,
2697 remote_target
*remote
= get_current_remote_target ();
2700 for (i
= 0; i
< NR_Z_PACKET_TYPES
; i
++)
2701 show_packet_config_cmd (file
, PACKET_Z0
+ i
, remote
);
2704 /* Insert fork catchpoint target routine. If fork events are enabled
2705 then return success, nothing more to do. */
2708 remote_target::insert_fork_catchpoint (int pid
)
2710 return !m_features
.remote_fork_event_p ();
2713 /* Remove fork catchpoint target routine. Nothing to do, just
2717 remote_target::remove_fork_catchpoint (int pid
)
2722 /* Insert vfork catchpoint target routine. If vfork events are enabled
2723 then return success, nothing more to do. */
2726 remote_target::insert_vfork_catchpoint (int pid
)
2728 return !m_features
.remote_vfork_event_p ();
2731 /* Remove vfork catchpoint target routine. Nothing to do, just
2735 remote_target::remove_vfork_catchpoint (int pid
)
2740 /* Insert exec catchpoint target routine. If exec events are
2741 enabled, just return success. */
2744 remote_target::insert_exec_catchpoint (int pid
)
2746 return !m_features
.remote_exec_event_p ();
2749 /* Remove exec catchpoint target routine. Nothing to do, just
2753 remote_target::remove_exec_catchpoint (int pid
)
2760 /* Take advantage of the fact that the TID field is not used, to tag
2761 special ptids with it set to != 0. */
2762 static const ptid_t
magic_null_ptid (42000, -1, 1);
2763 static const ptid_t
not_sent_ptid (42000, -2, 1);
2764 static const ptid_t
any_thread_ptid (42000, 0, 1);
2766 /* Find out if the stub attached to PID (and hence GDB should offer to
2767 detach instead of killing it when bailing out). */
2770 remote_target::remote_query_attached (int pid
)
2772 struct remote_state
*rs
= get_remote_state ();
2773 size_t size
= get_remote_packet_size ();
2775 if (m_features
.packet_support (PACKET_qAttached
) == PACKET_DISABLE
)
2778 if (m_features
.remote_multi_process_p ())
2779 xsnprintf (rs
->buf
.data (), size
, "qAttached:%x", pid
);
2781 xsnprintf (rs
->buf
.data (), size
, "qAttached");
2786 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_qAttached
);
2787 switch (result
.status ())
2790 if (strcmp (rs
->buf
.data (), "1") == 0)
2794 warning (_("Remote failure reply: %s"), result
.err_msg ());
2796 case PACKET_UNKNOWN
:
2803 /* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
2804 has been invented by GDB, instead of reported by the target. Since
2805 we can be connected to a remote system before before knowing about
2806 any inferior, mark the target with execution when we find the first
2807 inferior. If ATTACHED is 1, then we had just attached to this
2808 inferior. If it is 0, then we just created this inferior. If it
2809 is -1, then try querying the remote stub to find out if it had
2810 attached to the inferior or not. If TRY_OPEN_EXEC is true then
2811 attempt to open this inferior's executable as the main executable
2812 if no main executable is open already. */
2815 remote_target::remote_add_inferior (bool fake_pid_p
, int pid
, int attached
,
2818 struct inferior
*inf
;
2820 /* Check whether this process we're learning about is to be
2821 considered attached, or if is to be considered to have been
2822 spawned by the stub. */
2824 attached
= remote_query_attached (pid
);
2826 if (gdbarch_has_global_solist (current_inferior ()->arch ()))
2828 /* If the target shares code across all inferiors, then every
2829 attach adds a new inferior. */
2830 inf
= add_inferior (pid
);
2832 /* ... and every inferior is bound to the same program space.
2833 However, each inferior may still have its own address
2835 inf
->aspace
= maybe_new_address_space ();
2836 inf
->pspace
= current_program_space
;
2840 /* In the traditional debugging scenario, there's a 1-1 match
2841 between program/address spaces. We simply bind the inferior
2842 to the program space's address space. */
2843 inf
= current_inferior ();
2845 /* However, if the current inferior is already bound to a
2846 process, find some other empty inferior. */
2850 for (inferior
*it
: all_inferiors ())
2859 /* Since all inferiors were already bound to a process, add
2861 inf
= add_inferior_with_spaces ();
2863 switch_to_inferior_no_thread (inf
);
2864 inf
->push_target (this);
2865 inferior_appeared (inf
, pid
);
2868 inf
->attach_flag
= attached
;
2869 inf
->fake_pid_p
= fake_pid_p
;
2871 /* If no main executable is currently open then attempt to
2872 open the file that was executed to create this inferior. */
2873 if (try_open_exec
&& get_exec_file (0) == NULL
)
2874 exec_file_locate_attach (pid
, 0, 1);
2876 /* Check for exec file mismatch, and let the user solve it. */
2877 validate_exec_file (1);
2882 static remote_thread_info
*get_remote_thread_info (thread_info
*thread
);
2883 static remote_thread_info
*get_remote_thread_info (remote_target
*target
,
2886 /* Add thread PTID to GDB's thread list. Tag it as executing/running
2887 according to EXECUTING and RUNNING respectively. If SILENT_P (or the
2888 remote_state::starting_up flag) is true then the new thread is added
2889 silently, otherwise the new thread will be announced to the user. */
2892 remote_target::remote_add_thread (ptid_t ptid
, bool running
, bool executing
,
2895 struct remote_state
*rs
= get_remote_state ();
2896 struct thread_info
*thread
;
2898 /* GDB historically didn't pull threads in the initial connection
2899 setup. If the remote target doesn't even have a concept of
2900 threads (e.g., a bare-metal target), even if internally we
2901 consider that a single-threaded target, mentioning a new thread
2902 might be confusing to the user. Be silent then, preserving the
2903 age old behavior. */
2904 if (rs
->starting_up
|| silent_p
)
2905 thread
= add_thread_silent (this, ptid
);
2907 thread
= add_thread (this, ptid
);
2910 get_remote_thread_info (thread
)->set_resumed ();
2911 set_executing (this, ptid
, executing
);
2912 set_running (this, ptid
, running
);
2917 /* Come here when we learn about a thread id from the remote target.
2918 It may be the first time we hear about such thread, so take the
2919 opportunity to add it to GDB's thread list. In case this is the
2920 first time we're noticing its corresponding inferior, add it to
2921 GDB's inferior list as well. EXECUTING indicates whether the
2922 thread is (internally) executing or stopped. */
2925 remote_target::remote_notice_new_inferior (ptid_t currthread
, bool executing
)
2927 /* In non-stop mode, we assume new found threads are (externally)
2928 running until proven otherwise with a stop reply. In all-stop,
2929 we can only get here if all threads are stopped. */
2930 bool running
= target_is_non_stop_p ();
2932 /* If this is a new thread, add it to GDB's thread list.
2933 If we leave it up to WFI to do this, bad things will happen. */
2935 thread_info
*tp
= this->find_thread (currthread
);
2936 if (tp
!= NULL
&& tp
->state
== THREAD_EXITED
)
2938 /* We're seeing an event on a thread id we knew had exited.
2939 This has to be a new thread reusing the old id. Add it. */
2940 remote_add_thread (currthread
, running
, executing
, false);
2944 if (!in_thread_list (this, currthread
))
2946 struct inferior
*inf
= NULL
;
2947 int pid
= currthread
.pid ();
2949 if (inferior_ptid
.is_pid ()
2950 && pid
== inferior_ptid
.pid ())
2952 /* inferior_ptid has no thread member yet. This can happen
2953 with the vAttach -> remote_wait,"TAAthread:" path if the
2954 stub doesn't support qC. This is the first stop reported
2955 after an attach, so this is the main thread. Update the
2956 ptid in the thread list. */
2957 if (in_thread_list (this, ptid_t (pid
)))
2958 thread_change_ptid (this, inferior_ptid
, currthread
);
2962 = remote_add_thread (currthread
, running
, executing
, false);
2963 switch_to_thread (thr
);
2968 if (magic_null_ptid
== inferior_ptid
)
2970 /* inferior_ptid is not set yet. This can happen with the
2971 vRun -> remote_wait,"TAAthread:" path if the stub
2972 doesn't support qC. This is the first stop reported
2973 after an attach, so this is the main thread. Update the
2974 ptid in the thread list. */
2975 thread_change_ptid (this, inferior_ptid
, currthread
);
2979 /* When connecting to a target remote, or to a target
2980 extended-remote which already was debugging an inferior, we
2981 may not know about it yet. Add it before adding its child
2982 thread, so notifications are emitted in a sensible order. */
2983 if (find_inferior_pid (this, currthread
.pid ()) == NULL
)
2985 bool fake_pid_p
= !m_features
.remote_multi_process_p ();
2987 inf
= remote_add_inferior (fake_pid_p
,
2988 currthread
.pid (), -1, 1);
2991 /* This is really a new thread. Add it. */
2992 thread_info
*new_thr
2993 = remote_add_thread (currthread
, running
, executing
, false);
2995 /* If we found a new inferior, let the common code do whatever
2996 it needs to with it (e.g., read shared libraries, insert
2997 breakpoints), unless we're just setting up an all-stop
3001 struct remote_state
*rs
= get_remote_state ();
3003 if (!rs
->starting_up
)
3004 notice_new_inferior (new_thr
, executing
, 0);
3009 /* Return THREAD's private thread data, creating it if necessary. */
3011 static remote_thread_info
*
3012 get_remote_thread_info (thread_info
*thread
)
3014 gdb_assert (thread
!= NULL
);
3016 if (thread
->priv
== NULL
)
3017 thread
->priv
.reset (new remote_thread_info
);
3019 return gdb::checked_static_cast
<remote_thread_info
*> (thread
->priv
.get ());
3022 /* Return PTID's private thread data, creating it if necessary. */
3024 static remote_thread_info
*
3025 get_remote_thread_info (remote_target
*target
, ptid_t ptid
)
3027 thread_info
*thr
= target
->find_thread (ptid
);
3028 return get_remote_thread_info (thr
);
3031 /* Call this function as a result of
3032 1) A halt indication (T packet) containing a thread id
3033 2) A direct query of currthread
3034 3) Successful execution of set thread */
3037 record_currthread (struct remote_state
*rs
, ptid_t currthread
)
3039 rs
->general_thread
= currthread
;
3042 /* If 'QPassSignals' is supported, tell the remote stub what signals
3043 it can simply pass through to the inferior without reporting. */
3046 remote_target::pass_signals (gdb::array_view
<const unsigned char> pass_signals
)
3048 if (m_features
.packet_support (PACKET_QPassSignals
) != PACKET_DISABLE
)
3050 char *pass_packet
, *p
;
3052 struct remote_state
*rs
= get_remote_state ();
3054 gdb_assert (pass_signals
.size () < 256);
3055 for (size_t i
= 0; i
< pass_signals
.size (); i
++)
3057 if (pass_signals
[i
])
3060 pass_packet
= (char *) xmalloc (count
* 3 + strlen ("QPassSignals:") + 1);
3061 strcpy (pass_packet
, "QPassSignals:");
3062 p
= pass_packet
+ strlen (pass_packet
);
3063 for (size_t i
= 0; i
< pass_signals
.size (); i
++)
3065 if (pass_signals
[i
])
3068 *p
++ = tohex (i
>> 4);
3069 *p
++ = tohex (i
& 15);
3078 if (!rs
->last_pass_packet
|| strcmp (rs
->last_pass_packet
, pass_packet
))
3080 putpkt (pass_packet
);
3082 m_features
.packet_ok (rs
->buf
, PACKET_QPassSignals
);
3083 xfree (rs
->last_pass_packet
);
3084 rs
->last_pass_packet
= pass_packet
;
3087 xfree (pass_packet
);
3091 /* If 'QCatchSyscalls' is supported, tell the remote stub
3092 to report syscalls to GDB. */
3095 remote_target::set_syscall_catchpoint (int pid
, bool needed
, int any_count
,
3096 gdb::array_view
<const int> syscall_counts
)
3098 const char *catch_packet
;
3101 if (m_features
.packet_support (PACKET_QCatchSyscalls
) == PACKET_DISABLE
)
3103 /* Not supported. */
3107 if (needed
&& any_count
== 0)
3109 /* Count how many syscalls are to be caught. */
3110 for (size_t i
= 0; i
< syscall_counts
.size (); i
++)
3112 if (syscall_counts
[i
] != 0)
3117 remote_debug_printf ("pid %d needed %d any_count %d n_sysno %d",
3118 pid
, needed
, any_count
, n_sysno
);
3120 std::string built_packet
;
3123 /* Prepare a packet with the sysno list, assuming max 8+1
3124 characters for a sysno. If the resulting packet size is too
3125 big, fallback on the non-selective packet. */
3126 const int maxpktsz
= strlen ("QCatchSyscalls:1") + n_sysno
* 9 + 1;
3127 built_packet
.reserve (maxpktsz
);
3128 built_packet
= "QCatchSyscalls:1";
3131 /* Add in each syscall to be caught. */
3132 for (size_t i
= 0; i
< syscall_counts
.size (); i
++)
3134 if (syscall_counts
[i
] != 0)
3135 string_appendf (built_packet
, ";%zx", i
);
3138 if (built_packet
.size () > get_remote_packet_size ())
3140 /* catch_packet too big. Fallback to less efficient
3141 non selective mode, with GDB doing the filtering. */
3142 catch_packet
= "QCatchSyscalls:1";
3145 catch_packet
= built_packet
.c_str ();
3148 catch_packet
= "QCatchSyscalls:0";
3150 struct remote_state
*rs
= get_remote_state ();
3152 putpkt (catch_packet
);
3154 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_QCatchSyscalls
);
3155 if (result
.status () == PACKET_OK
)
3161 /* If 'QProgramSignals' is supported, tell the remote stub what
3162 signals it should pass through to the inferior when detaching. */
3165 remote_target::program_signals (gdb::array_view
<const unsigned char> signals
)
3167 if (m_features
.packet_support (PACKET_QProgramSignals
) != PACKET_DISABLE
)
3171 struct remote_state
*rs
= get_remote_state ();
3173 gdb_assert (signals
.size () < 256);
3174 for (size_t i
= 0; i
< signals
.size (); i
++)
3179 packet
= (char *) xmalloc (count
* 3 + strlen ("QProgramSignals:") + 1);
3180 strcpy (packet
, "QProgramSignals:");
3181 p
= packet
+ strlen (packet
);
3182 for (size_t i
= 0; i
< signals
.size (); i
++)
3184 if (signal_pass_state (i
))
3187 *p
++ = tohex (i
>> 4);
3188 *p
++ = tohex (i
& 15);
3197 if (!rs
->last_program_signals_packet
3198 || strcmp (rs
->last_program_signals_packet
, packet
) != 0)
3202 m_features
.packet_ok (rs
->buf
, PACKET_QProgramSignals
);
3203 xfree (rs
->last_program_signals_packet
);
3204 rs
->last_program_signals_packet
= packet
;
3211 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
3212 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
3213 thread. If GEN is set, set the general thread, if not, then set
3214 the step/continue thread. */
3216 remote_target::set_thread (ptid_t ptid
, int gen
)
3218 struct remote_state
*rs
= get_remote_state ();
3219 ptid_t state
= gen
? rs
->general_thread
: rs
->continue_thread
;
3220 char *buf
= rs
->buf
.data ();
3221 char *endbuf
= buf
+ get_remote_packet_size ();
3227 *buf
++ = gen
? 'g' : 'c';
3228 if (ptid
== magic_null_ptid
)
3229 xsnprintf (buf
, endbuf
- buf
, "0");
3230 else if (ptid
== any_thread_ptid
)
3231 xsnprintf (buf
, endbuf
- buf
, "0");
3232 else if (ptid
== minus_one_ptid
)
3233 xsnprintf (buf
, endbuf
- buf
, "-1");
3235 write_ptid (buf
, endbuf
, ptid
);
3239 rs
->general_thread
= ptid
;
3241 rs
->continue_thread
= ptid
;
3245 remote_target::set_general_thread (ptid_t ptid
)
3247 set_thread (ptid
, 1);
3251 remote_target::set_continue_thread (ptid_t ptid
)
3253 set_thread (ptid
, 0);
3256 /* Change the remote current process. Which thread within the process
3257 ends up selected isn't important, as long as it is the same process
3258 as what INFERIOR_PTID points to.
3260 This comes from that fact that there is no explicit notion of
3261 "selected process" in the protocol. The selected process for
3262 general operations is the process the selected general thread
3266 remote_target::set_general_process ()
3268 /* If the remote can't handle multiple processes, don't bother. */
3269 if (!m_features
.remote_multi_process_p ())
3272 remote_state
*rs
= get_remote_state ();
3274 /* We only need to change the remote current thread if it's pointing
3275 at some other process. */
3276 if (rs
->general_thread
.pid () != inferior_ptid
.pid ())
3277 set_general_thread (inferior_ptid
);
3281 /* Return nonzero if this is the main thread that we made up ourselves
3282 to model non-threaded targets as single-threaded. */
3285 remote_thread_always_alive (ptid_t ptid
)
3287 if (ptid
== magic_null_ptid
)
3288 /* The main thread is always alive. */
3291 if (ptid
.pid () != 0 && ptid
.lwp () == 0)
3292 /* The main thread is always alive. This can happen after a
3293 vAttach, if the remote side doesn't support
3300 /* Return nonzero if the thread PTID is still alive on the remote
3304 remote_target::thread_alive (ptid_t ptid
)
3306 struct remote_state
*rs
= get_remote_state ();
3309 /* Check if this is a thread that we made up ourselves to model
3310 non-threaded targets as single-threaded. */
3311 if (remote_thread_always_alive (ptid
))
3314 p
= rs
->buf
.data ();
3315 endp
= p
+ get_remote_packet_size ();
3318 write_ptid (p
, endp
, ptid
);
3322 return (rs
->buf
[0] == 'O' && rs
->buf
[1] == 'K');
3325 /* Return a pointer to a thread name if we know it and NULL otherwise.
3326 The thread_info object owns the memory for the name. */
3329 remote_target::thread_name (struct thread_info
*info
)
3331 if (info
->priv
!= NULL
)
3333 const std::string
&name
= get_remote_thread_info (info
)->name
;
3334 return !name
.empty () ? name
.c_str () : NULL
;
3340 /* About these extended threadlist and threadinfo packets. They are
3341 variable length packets but, the fields within them are often fixed
3342 length. They are redundant enough to send over UDP as is the
3343 remote protocol in general. There is a matching unit test module
3346 /* WARNING: This threadref data structure comes from the remote O.S.,
3347 libstub protocol encoding, and remote.c. It is not particularly
3350 /* Right now, the internal structure is int. We want it to be bigger.
3351 Plan to fix this. */
3353 typedef int gdb_threadref
; /* Internal GDB thread reference. */
3355 /* gdb_ext_thread_info is an internal GDB data structure which is
3356 equivalent to the reply of the remote threadinfo packet. */
3358 struct gdb_ext_thread_info
3360 threadref threadid
; /* External form of thread reference. */
3361 int active
; /* Has state interesting to GDB?
3363 char display
[256]; /* Brief state display, name,
3364 blocked/suspended. */
3365 char shortname
[32]; /* To be used to name threads. */
3366 char more_display
[256]; /* Long info, statistics, queue depth,
3370 /* The volume of remote transfers can be limited by submitting
3371 a mask containing bits specifying the desired information.
3372 Use a union of these values as the 'selection' parameter to
3373 get_thread_info. FIXME: Make these TAG names more thread specific. */
3375 #define TAG_THREADID 1
3376 #define TAG_EXISTS 2
3377 #define TAG_DISPLAY 4
3378 #define TAG_THREADNAME 8
3379 #define TAG_MOREDISPLAY 16
3381 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
3383 static const char *unpack_nibble (const char *buf
, int *val
);
3385 static const char *unpack_byte (const char *buf
, int *value
);
3387 static char *pack_int (char *buf
, int value
);
3389 static const char *unpack_int (const char *buf
, int *value
);
3391 static const char *unpack_string (const char *src
, char *dest
, int length
);
3393 static char *pack_threadid (char *pkt
, threadref
*id
);
3395 static const char *unpack_threadid (const char *inbuf
, threadref
*id
);
3397 void int_to_threadref (threadref
*id
, int value
);
3399 static int threadref_to_int (threadref
*ref
);
3401 static void copy_threadref (threadref
*dest
, threadref
*src
);
3403 static int threadmatch (threadref
*dest
, threadref
*src
);
3405 static char *pack_threadinfo_request (char *pkt
, int mode
,
3408 static char *pack_threadlist_request (char *pkt
, int startflag
,
3410 threadref
*nextthread
);
3412 static int remote_newthread_step (threadref
*ref
, void *context
);
3415 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
3416 buffer we're allowed to write to. Returns
3417 BUF+CHARACTERS_WRITTEN. */
3420 remote_target::write_ptid (char *buf
, const char *endbuf
, ptid_t ptid
)
3424 if (m_features
.remote_multi_process_p ())
3428 buf
+= xsnprintf (buf
, endbuf
- buf
, "p-%x.", -pid
);
3430 buf
+= xsnprintf (buf
, endbuf
- buf
, "p%x.", pid
);
3434 buf
+= xsnprintf (buf
, endbuf
- buf
, "-%x", -tid
);
3436 buf
+= xsnprintf (buf
, endbuf
- buf
, "%x", tid
);
3441 /* Extract a PTID from BUF. If non-null, OBUF is set to one past the
3442 last parsed char. Returns null_ptid if no thread id is found, and
3443 throws an error if the thread id has an invalid format. */
3446 read_ptid (const char *buf
, const char **obuf
)
3448 const char *p
= buf
;
3450 ULONGEST pid
= 0, tid
= 0;
3454 /* Multi-process ptid. */
3455 pp
= unpack_varlen_hex (p
+ 1, &pid
);
3457 error (_("invalid remote ptid: %s"), p
);
3460 pp
= unpack_varlen_hex (p
+ 1, &tid
);
3463 return ptid_t (pid
, tid
);
3466 /* No multi-process. Just a tid. */
3467 pp
= unpack_varlen_hex (p
, &tid
);
3469 /* Return null_ptid when no thread id is found. */
3477 /* Since the stub is not sending a process id, default to what's
3478 current_inferior, unless it doesn't have a PID yet. If so,
3479 then since there's no way to know the pid of the reported
3480 threads, use the magic number. */
3481 inferior
*inf
= current_inferior ();
3483 pid
= magic_null_ptid
.pid ();
3489 return ptid_t (pid
, tid
);
3495 if (ch
>= 'a' && ch
<= 'f')
3496 return ch
- 'a' + 10;
3497 if (ch
>= '0' && ch
<= '9')
3499 if (ch
>= 'A' && ch
<= 'F')
3500 return ch
- 'A' + 10;
3505 stub_unpack_int (const char *buff
, int fieldlength
)
3512 nibble
= stubhex (*buff
++);
3516 retval
= retval
<< 4;
3522 unpack_nibble (const char *buf
, int *val
)
3524 *val
= fromhex (*buf
++);
3529 unpack_byte (const char *buf
, int *value
)
3531 *value
= stub_unpack_int (buf
, 2);
3536 pack_int (char *buf
, int value
)
3538 buf
= pack_hex_byte (buf
, (value
>> 24) & 0xff);
3539 buf
= pack_hex_byte (buf
, (value
>> 16) & 0xff);
3540 buf
= pack_hex_byte (buf
, (value
>> 8) & 0x0ff);
3541 buf
= pack_hex_byte (buf
, (value
& 0xff));
3546 unpack_int (const char *buf
, int *value
)
3548 *value
= stub_unpack_int (buf
, 8);
3552 #if 0 /* Currently unused, uncomment when needed. */
3553 static char *pack_string (char *pkt
, char *string
);
3556 pack_string (char *pkt
, char *string
)
3561 len
= strlen (string
);
3563 len
= 200; /* Bigger than most GDB packets, junk??? */
3564 pkt
= pack_hex_byte (pkt
, len
);
3568 if ((ch
== '\0') || (ch
== '#'))
3569 ch
= '*'; /* Protect encapsulation. */
3574 #endif /* 0 (unused) */
3577 unpack_string (const char *src
, char *dest
, int length
)
3586 pack_threadid (char *pkt
, threadref
*id
)
3589 unsigned char *altid
;
3591 altid
= (unsigned char *) id
;
3592 limit
= pkt
+ BUF_THREAD_ID_SIZE
;
3594 pkt
= pack_hex_byte (pkt
, *altid
++);
3600 unpack_threadid (const char *inbuf
, threadref
*id
)
3603 const char *limit
= inbuf
+ BUF_THREAD_ID_SIZE
;
3606 altref
= (char *) id
;
3608 while (inbuf
< limit
)
3610 x
= stubhex (*inbuf
++);
3611 y
= stubhex (*inbuf
++);
3612 *altref
++ = (x
<< 4) | y
;
3617 /* Externally, threadrefs are 64 bits but internally, they are still
3618 ints. This is due to a mismatch of specifications. We would like
3619 to use 64bit thread references internally. This is an adapter
3623 int_to_threadref (threadref
*id
, int value
)
3625 unsigned char *scan
;
3627 scan
= (unsigned char *) id
;
3633 *scan
++ = (value
>> 24) & 0xff;
3634 *scan
++ = (value
>> 16) & 0xff;
3635 *scan
++ = (value
>> 8) & 0xff;
3636 *scan
++ = (value
& 0xff);
3640 threadref_to_int (threadref
*ref
)
3643 unsigned char *scan
;
3649 value
= (value
<< 8) | ((*scan
++) & 0xff);
3654 copy_threadref (threadref
*dest
, threadref
*src
)
3657 unsigned char *csrc
, *cdest
;
3659 csrc
= (unsigned char *) src
;
3660 cdest
= (unsigned char *) dest
;
3667 threadmatch (threadref
*dest
, threadref
*src
)
3669 /* Things are broken right now, so just assume we got a match. */
3671 unsigned char *srcp
, *destp
;
3673 srcp
= (char *) src
;
3674 destp
= (char *) dest
;
3678 result
&= (*srcp
++ == *destp
++) ? 1 : 0;
3685 threadid:1, # always request threadid
3692 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3695 pack_threadinfo_request (char *pkt
, int mode
, threadref
*id
)
3697 *pkt
++ = 'q'; /* Info Query */
3698 *pkt
++ = 'P'; /* process or thread info */
3699 pkt
= pack_int (pkt
, mode
); /* mode */
3700 pkt
= pack_threadid (pkt
, id
); /* threadid */
3701 *pkt
= '\0'; /* terminate */
3705 /* These values tag the fields in a thread info response packet. */
3706 /* Tagging the fields allows us to request specific fields and to
3707 add more fields as time goes by. */
3709 #define TAG_THREADID 1 /* Echo the thread identifier. */
3710 #define TAG_EXISTS 2 /* Is this process defined enough to
3711 fetch registers and its stack? */
3712 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
3713 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
3714 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
3718 remote_target::remote_unpack_thread_info_response (const char *pkt
,
3719 threadref
*expectedref
,
3720 gdb_ext_thread_info
*info
)
3722 struct remote_state
*rs
= get_remote_state ();
3726 const char *limit
= pkt
+ rs
->buf
.size (); /* Plausible parsing limit. */
3729 /* info->threadid = 0; FIXME: implement zero_threadref. */
3731 info
->display
[0] = '\0';
3732 info
->shortname
[0] = '\0';
3733 info
->more_display
[0] = '\0';
3735 /* Assume the characters indicating the packet type have been
3737 pkt
= unpack_int (pkt
, &mask
); /* arg mask */
3738 pkt
= unpack_threadid (pkt
, &ref
);
3741 warning (_("Incomplete response to threadinfo request."));
3742 if (!threadmatch (&ref
, expectedref
))
3743 { /* This is an answer to a different request. */
3744 warning (_("ERROR RMT Thread info mismatch."));
3747 copy_threadref (&info
->threadid
, &ref
);
3749 /* Loop on tagged fields , try to bail if something goes wrong. */
3751 /* Packets are terminated with nulls. */
3752 while ((pkt
< limit
) && mask
&& *pkt
)
3754 pkt
= unpack_int (pkt
, &tag
); /* tag */
3755 pkt
= unpack_byte (pkt
, &length
); /* length */
3756 if (!(tag
& mask
)) /* Tags out of synch with mask. */
3758 warning (_("ERROR RMT: threadinfo tag mismatch."));
3762 if (tag
== TAG_THREADID
)
3766 warning (_("ERROR RMT: length of threadid is not 16."));
3770 pkt
= unpack_threadid (pkt
, &ref
);
3771 mask
= mask
& ~TAG_THREADID
;
3774 if (tag
== TAG_EXISTS
)
3776 info
->active
= stub_unpack_int (pkt
, length
);
3778 mask
= mask
& ~(TAG_EXISTS
);
3781 warning (_("ERROR RMT: 'exists' length too long."));
3787 if (tag
== TAG_THREADNAME
)
3789 pkt
= unpack_string (pkt
, &info
->shortname
[0], length
);
3790 mask
= mask
& ~TAG_THREADNAME
;
3793 if (tag
== TAG_DISPLAY
)
3795 pkt
= unpack_string (pkt
, &info
->display
[0], length
);
3796 mask
= mask
& ~TAG_DISPLAY
;
3799 if (tag
== TAG_MOREDISPLAY
)
3801 pkt
= unpack_string (pkt
, &info
->more_display
[0], length
);
3802 mask
= mask
& ~TAG_MOREDISPLAY
;
3805 warning (_("ERROR RMT: unknown thread info tag."));
3806 break; /* Not a tag we know about. */
3812 remote_target::remote_get_threadinfo (threadref
*threadid
,
3814 gdb_ext_thread_info
*info
)
3816 struct remote_state
*rs
= get_remote_state ();
3819 pack_threadinfo_request (rs
->buf
.data (), fieldset
, threadid
);
3823 if (rs
->buf
[0] == '\0')
3826 result
= remote_unpack_thread_info_response (&rs
->buf
[2],
3831 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3834 pack_threadlist_request (char *pkt
, int startflag
, int threadcount
,
3835 threadref
*nextthread
)
3837 *pkt
++ = 'q'; /* info query packet */
3838 *pkt
++ = 'L'; /* Process LIST or threadLIST request */
3839 pkt
= pack_nibble (pkt
, startflag
); /* initflag 1 bytes */
3840 pkt
= pack_hex_byte (pkt
, threadcount
); /* threadcount 2 bytes */
3841 pkt
= pack_threadid (pkt
, nextthread
); /* 64 bit thread identifier */
3846 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3849 remote_target::parse_threadlist_response (const char *pkt
, int result_limit
,
3850 threadref
*original_echo
,
3851 threadref
*resultlist
,
3854 struct remote_state
*rs
= get_remote_state ();
3855 int count
, resultcount
, done
;
3858 /* Assume the 'q' and 'M chars have been stripped. */
3859 const char *limit
= pkt
+ (rs
->buf
.size () - BUF_THREAD_ID_SIZE
);
3860 /* done parse past here */
3861 pkt
= unpack_byte (pkt
, &count
); /* count field */
3862 pkt
= unpack_nibble (pkt
, &done
);
3863 /* The first threadid is the argument threadid. */
3864 pkt
= unpack_threadid (pkt
, original_echo
); /* should match query packet */
3865 while ((count
-- > 0) && (pkt
< limit
))
3867 pkt
= unpack_threadid (pkt
, resultlist
++);
3868 if (resultcount
++ >= result_limit
)
3876 /* Fetch the next batch of threads from the remote. Returns -1 if the
3877 qL packet is not supported, 0 on error and 1 on success. */
3880 remote_target::remote_get_threadlist (int startflag
, threadref
*nextthread
,
3881 int result_limit
, int *done
, int *result_count
,
3882 threadref
*threadlist
)
3884 struct remote_state
*rs
= get_remote_state ();
3887 /* Truncate result limit to be smaller than the packet size. */
3888 if ((((result_limit
+ 1) * BUF_THREAD_ID_SIZE
) + 10)
3889 >= get_remote_packet_size ())
3890 result_limit
= (get_remote_packet_size () / BUF_THREAD_ID_SIZE
) - 2;
3892 pack_threadlist_request (rs
->buf
.data (), startflag
, result_limit
,
3896 if (rs
->buf
[0] == '\0')
3898 /* Packet not supported. */
3903 parse_threadlist_response (&rs
->buf
[2], result_limit
,
3904 &rs
->echo_nextthread
, threadlist
, done
);
3906 if (!threadmatch (&rs
->echo_nextthread
, nextthread
))
3908 /* FIXME: This is a good reason to drop the packet. */
3909 /* Possibly, there is a duplicate response. */
3911 retransmit immediatly - race conditions
3912 retransmit after timeout - yes
3914 wait for packet, then exit
3916 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
3917 return 0; /* I choose simply exiting. */
3919 if (*result_count
<= 0)
3923 warning (_("RMT ERROR : failed to get remote thread list."));
3926 return result
; /* break; */
3928 if (*result_count
> result_limit
)
3931 warning (_("RMT ERROR: threadlist response longer than requested."));
3937 /* Fetch the list of remote threads, with the qL packet, and call
3938 STEPFUNCTION for each thread found. Stops iterating and returns 1
3939 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
3940 STEPFUNCTION returns false. If the packet is not supported,
3944 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction
,
3945 void *context
, int looplimit
)
3947 struct remote_state
*rs
= get_remote_state ();
3948 int done
, i
, result_count
;
3956 if (loopcount
++ > looplimit
)
3959 warning (_("Remote fetch threadlist -infinite loop-."));
3962 result
= remote_get_threadlist (startflag
, &rs
->nextthread
,
3963 MAXTHREADLISTRESULTS
,
3964 &done
, &result_count
,
3965 rs
->resultthreadlist
);
3968 /* Clear for later iterations. */
3970 /* Setup to resume next batch of thread references, set nextthread. */
3971 if (result_count
>= 1)
3972 copy_threadref (&rs
->nextthread
,
3973 &rs
->resultthreadlist
[result_count
- 1]);
3975 while (result_count
--)
3977 if (!(*stepfunction
) (&rs
->resultthreadlist
[i
++], context
))
3987 /* A thread found on the remote target. */
3991 explicit thread_item (ptid_t ptid_
)
3995 thread_item (thread_item
&&other
) = default;
3996 thread_item
&operator= (thread_item
&&other
) = default;
3998 DISABLE_COPY_AND_ASSIGN (thread_item
);
4000 /* The thread's PTID. */
4003 /* The thread's extra info. */
4006 /* The thread's name. */
4009 /* The core the thread was running on. -1 if not known. */
4012 /* The thread handle associated with the thread. */
4013 gdb::byte_vector thread_handle
;
4016 /* Context passed around to the various methods listing remote
4017 threads. As new threads are found, they're added to the ITEMS
4020 struct threads_listing_context
4022 /* Return true if this object contains an entry for a thread with ptid
4025 bool contains_thread (ptid_t ptid
) const
4027 auto match_ptid
= [&] (const thread_item
&item
)
4029 return item
.ptid
== ptid
;
4032 auto it
= std::find_if (this->items
.begin (),
4036 return it
!= this->items
.end ();
4039 /* Remove the thread with ptid PTID. */
4041 void remove_thread (ptid_t ptid
)
4043 auto match_ptid
= [&] (const thread_item
&item
)
4045 return item
.ptid
== ptid
;
4048 auto it
= std::remove_if (this->items
.begin (),
4052 if (it
!= this->items
.end ())
4053 this->items
.erase (it
);
4056 /* The threads found on the remote target. */
4057 std::vector
<thread_item
> items
;
4061 remote_newthread_step (threadref
*ref
, void *data
)
4063 struct threads_listing_context
*context
4064 = (struct threads_listing_context
*) data
;
4065 int pid
= inferior_ptid
.pid ();
4066 int lwp
= threadref_to_int (ref
);
4067 ptid_t
ptid (pid
, lwp
);
4069 context
->items
.emplace_back (ptid
);
4071 return 1; /* continue iterator */
4074 #define CRAZY_MAX_THREADS 1000
4077 remote_target::remote_current_thread (ptid_t oldpid
)
4079 struct remote_state
*rs
= get_remote_state ();
4083 if (rs
->buf
[0] == 'Q' && rs
->buf
[1] == 'C')
4088 result
= read_ptid (&rs
->buf
[2], &obuf
);
4090 remote_debug_printf ("warning: garbage in qC reply");
4098 /* List remote threads using the deprecated qL packet. */
4101 remote_target::remote_get_threads_with_ql (threads_listing_context
*context
)
4103 if (remote_threadlist_iterator (remote_newthread_step
, context
,
4104 CRAZY_MAX_THREADS
) >= 0)
4110 #if defined(HAVE_LIBEXPAT)
4113 start_thread (struct gdb_xml_parser
*parser
,
4114 const struct gdb_xml_element
*element
,
4116 std::vector
<gdb_xml_value
> &attributes
)
4118 struct threads_listing_context
*data
4119 = (struct threads_listing_context
*) user_data
;
4120 struct gdb_xml_value
*attr
;
4122 char *id
= (char *) xml_find_attribute (attributes
, "id")->value
.get ();
4123 ptid_t ptid
= read_ptid (id
, NULL
);
4125 thread_item
&item
= data
->items
.emplace_back (ptid
);
4127 attr
= xml_find_attribute (attributes
, "core");
4129 item
.core
= *(ULONGEST
*) attr
->value
.get ();
4131 attr
= xml_find_attribute (attributes
, "name");
4133 item
.name
= (const char *) attr
->value
.get ();
4135 attr
= xml_find_attribute (attributes
, "handle");
4137 item
.thread_handle
= hex2bin ((const char *) attr
->value
.get ());
4141 end_thread (struct gdb_xml_parser
*parser
,
4142 const struct gdb_xml_element
*element
,
4143 void *user_data
, const char *body_text
)
4145 struct threads_listing_context
*data
4146 = (struct threads_listing_context
*) user_data
;
4148 if (body_text
!= NULL
&& *body_text
!= '\0')
4149 data
->items
.back ().extra
= body_text
;
4152 const struct gdb_xml_attribute thread_attributes
[] = {
4153 { "id", GDB_XML_AF_NONE
, NULL
, NULL
},
4154 { "core", GDB_XML_AF_OPTIONAL
, gdb_xml_parse_attr_ulongest
, NULL
},
4155 { "name", GDB_XML_AF_OPTIONAL
, NULL
, NULL
},
4156 { "handle", GDB_XML_AF_OPTIONAL
, NULL
, NULL
},
4157 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
4160 const struct gdb_xml_element thread_children
[] = {
4161 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
4164 const struct gdb_xml_element threads_children
[] = {
4165 { "thread", thread_attributes
, thread_children
,
4166 GDB_XML_EF_REPEATABLE
| GDB_XML_EF_OPTIONAL
,
4167 start_thread
, end_thread
},
4168 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
4171 const struct gdb_xml_element threads_elements
[] = {
4172 { "threads", NULL
, threads_children
,
4173 GDB_XML_EF_NONE
, NULL
, NULL
},
4174 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
4179 /* List remote threads using qXfer:threads:read. */
4182 remote_target::remote_get_threads_with_qxfer (threads_listing_context
*context
)
4184 #if defined(HAVE_LIBEXPAT)
4185 if (m_features
.packet_support (PACKET_qXfer_threads
) == PACKET_ENABLE
)
4187 std::optional
<gdb::char_vector
> xml
4188 = target_read_stralloc (this, TARGET_OBJECT_THREADS
, NULL
);
4190 if (xml
&& (*xml
)[0] != '\0')
4192 gdb_xml_parse_quick (_("threads"), "threads.dtd",
4193 threads_elements
, xml
->data (), context
);
4203 /* List remote threads using qfThreadInfo/qsThreadInfo. */
4206 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context
*context
)
4208 struct remote_state
*rs
= get_remote_state ();
4210 if (rs
->use_threadinfo_query
)
4214 putpkt ("qfThreadInfo");
4216 bufp
= rs
->buf
.data ();
4217 if (bufp
[0] != '\0') /* q packet recognized */
4219 while (*bufp
++ == 'm') /* reply contains one or more TID */
4223 ptid_t ptid
= read_ptid (bufp
, &bufp
);
4224 context
->items
.emplace_back (ptid
);
4226 while (*bufp
++ == ','); /* comma-separated list */
4227 putpkt ("qsThreadInfo");
4229 bufp
= rs
->buf
.data ();
4235 /* Packet not recognized. */
4236 rs
->use_threadinfo_query
= 0;
4243 /* Return true if INF only has one non-exited thread. */
4246 has_single_non_exited_thread (inferior
*inf
)
4249 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
4255 /* Implement the to_update_thread_list function for the remote
4259 remote_target::update_thread_list ()
4261 struct threads_listing_context context
;
4264 /* We have a few different mechanisms to fetch the thread list. Try
4265 them all, starting with the most preferred one first, falling
4266 back to older methods. */
4267 if (remote_get_threads_with_qxfer (&context
)
4268 || remote_get_threads_with_qthreadinfo (&context
)
4269 || remote_get_threads_with_ql (&context
))
4273 if (context
.items
.empty ()
4274 && remote_thread_always_alive (inferior_ptid
))
4276 /* Some targets don't really support threads, but still
4277 reply an (empty) thread list in response to the thread
4278 listing packets, instead of replying "packet not
4279 supported". Exit early so we don't delete the main
4284 /* CONTEXT now holds the current thread list on the remote
4285 target end. Delete GDB-side threads no longer found on the
4287 for (thread_info
*tp
: all_threads_safe ())
4289 if (tp
->inf
->process_target () != this)
4292 if (!context
.contains_thread (tp
->ptid
))
4294 /* Do not remove the thread if it is the last thread in
4295 the inferior. This situation happens when we have a
4296 pending exit process status to process. Otherwise we
4297 may end up with a seemingly live inferior (i.e. pid
4298 != 0) that has no threads. */
4299 if (has_single_non_exited_thread (tp
->inf
))
4302 /* Do not remove the thread if we've requested to be
4303 notified of its exit. For example, the thread may be
4304 displaced stepping, infrun will need to handle the
4305 exit event, and displaced stepping info is recorded
4306 in the thread object. If we deleted the thread now,
4307 we'd lose that info. */
4308 if ((tp
->thread_options () & GDB_THREAD_OPTION_EXIT
) != 0)
4316 /* Remove any unreported fork/vfork/clone child threads from
4317 CONTEXT so that we don't interfere with follow
4318 fork/vfork/clone, which is where creation of such threads is
4320 remove_new_children (&context
);
4322 /* And now add threads we don't know about yet to our list. */
4323 for (thread_item
&item
: context
.items
)
4325 if (item
.ptid
!= null_ptid
)
4327 /* In non-stop mode, we assume new found threads are
4328 executing until proven otherwise with a stop reply.
4329 In all-stop, we can only get here if all threads are
4331 bool executing
= target_is_non_stop_p ();
4333 remote_notice_new_inferior (item
.ptid
, executing
);
4335 thread_info
*tp
= this->find_thread (item
.ptid
);
4336 remote_thread_info
*info
= get_remote_thread_info (tp
);
4337 info
->core
= item
.core
;
4338 info
->extra
= std::move (item
.extra
);
4339 info
->name
= std::move (item
.name
);
4340 info
->thread_handle
= std::move (item
.thread_handle
);
4347 /* If no thread listing method is supported, then query whether
4348 each known thread is alive, one by one, with the T packet.
4349 If the target doesn't support threads at all, then this is a
4350 no-op. See remote_thread_alive. */
4356 * Collect a descriptive string about the given thread.
4357 * The target may say anything it wants to about the thread
4358 * (typically info about its blocked / runnable state, name, etc.).
4359 * This string will appear in the info threads display.
4361 * Optional: targets are not required to implement this function.
4365 remote_target::extra_thread_info (thread_info
*tp
)
4367 struct remote_state
*rs
= get_remote_state ();
4370 struct gdb_ext_thread_info threadinfo
;
4372 if (rs
->remote_desc
== 0) /* paranoia */
4373 internal_error (_("remote_threads_extra_info"));
4375 if (tp
->ptid
== magic_null_ptid
4376 || (tp
->ptid
.pid () != 0 && tp
->ptid
.lwp () == 0))
4377 /* This is the main thread which was added by GDB. The remote
4378 server doesn't know about it. */
4381 std::string
&extra
= get_remote_thread_info (tp
)->extra
;
4383 /* If already have cached info, use it. */
4384 if (!extra
.empty ())
4385 return extra
.c_str ();
4387 if (m_features
.packet_support (PACKET_qXfer_threads
) == PACKET_ENABLE
)
4389 /* If we're using qXfer:threads:read, then the extra info is
4390 included in the XML. So if we didn't have anything cached,
4391 it's because there's really no extra info. */
4395 if (rs
->use_threadextra_query
)
4397 char *b
= rs
->buf
.data ();
4398 char *endb
= b
+ get_remote_packet_size ();
4400 xsnprintf (b
, endb
- b
, "qThreadExtraInfo,");
4402 write_ptid (b
, endb
, tp
->ptid
);
4406 if (rs
->buf
[0] != 0)
4408 extra
.resize (strlen (rs
->buf
.data ()) / 2);
4409 hex2bin (rs
->buf
.data (), (gdb_byte
*) &extra
[0], extra
.size ());
4410 return extra
.c_str ();
4414 /* If the above query fails, fall back to the old method. */
4415 rs
->use_threadextra_query
= 0;
4416 set
= TAG_THREADID
| TAG_EXISTS
| TAG_THREADNAME
4417 | TAG_MOREDISPLAY
| TAG_DISPLAY
;
4418 int_to_threadref (&id
, tp
->ptid
.lwp ());
4419 if (remote_get_threadinfo (&id
, set
, &threadinfo
))
4420 if (threadinfo
.active
)
4422 if (*threadinfo
.shortname
)
4423 string_appendf (extra
, " Name: %s", threadinfo
.shortname
);
4424 if (*threadinfo
.display
)
4426 if (!extra
.empty ())
4428 string_appendf (extra
, " State: %s", threadinfo
.display
);
4430 if (*threadinfo
.more_display
)
4432 if (!extra
.empty ())
4434 string_appendf (extra
, " Priority: %s", threadinfo
.more_display
);
4436 return extra
.c_str ();
4443 remote_target::static_tracepoint_marker_at (CORE_ADDR addr
,
4444 struct static_tracepoint_marker
*marker
)
4446 struct remote_state
*rs
= get_remote_state ();
4447 char *p
= rs
->buf
.data ();
4449 xsnprintf (p
, get_remote_packet_size (), "qTSTMat:");
4451 p
+= hexnumstr (p
, addr
);
4454 p
= rs
->buf
.data ();
4457 error (_("Remote failure reply: %s"), p
);
4461 parse_static_tracepoint_marker_definition (p
, NULL
, marker
);
4468 std::vector
<static_tracepoint_marker
>
4469 remote_target::static_tracepoint_markers_by_strid (const char *strid
)
4471 struct remote_state
*rs
= get_remote_state ();
4472 std::vector
<static_tracepoint_marker
> markers
;
4474 static_tracepoint_marker marker
;
4476 /* Ask for a first packet of static tracepoint marker
4480 p
= rs
->buf
.data ();
4482 error (_("Remote failure reply: %s"), p
);
4488 parse_static_tracepoint_marker_definition (p
, &p
, &marker
);
4490 if (strid
== NULL
|| marker
.str_id
== strid
)
4491 markers
.push_back (std::move (marker
));
4493 while (*p
++ == ','); /* comma-separated list */
4494 /* Ask for another packet of static tracepoint definition. */
4497 p
= rs
->buf
.data ();
4504 /* Implement the to_get_ada_task_ptid function for the remote targets. */
4507 remote_target::get_ada_task_ptid (long lwp
, ULONGEST thread
)
4509 return ptid_t (inferior_ptid
.pid (), lwp
);
4513 /* Restart the remote side; this is an extended protocol operation. */
4516 remote_target::extended_remote_restart ()
4518 struct remote_state
*rs
= get_remote_state ();
4520 /* Send the restart command; for reasons I don't understand the
4521 remote side really expects a number after the "R". */
4522 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "R%x", 0);
4525 remote_fileio_reset ();
4528 /* Clean up connection to a remote debugger. */
4531 remote_target::close ()
4533 /* Make sure we leave stdin registered in the event loop. */
4536 trace_reset_local_state ();
4541 remote_target::~remote_target ()
4543 struct remote_state
*rs
= get_remote_state ();
4545 /* Check for NULL because we may get here with a partially
4546 constructed target/connection. */
4547 if (rs
->remote_desc
== nullptr)
4550 serial_close (rs
->remote_desc
);
4552 /* We are destroying the remote target, so we should discard
4553 everything of this target. */
4554 discard_pending_stop_replies_in_queue ();
4556 rs
->delete_async_event_handler ();
4558 delete rs
->notif_state
;
4561 /* Query the remote side for the text, data and bss offsets. */
4564 remote_target::get_offsets ()
4566 struct remote_state
*rs
= get_remote_state ();
4569 int lose
, num_segments
= 0, do_sections
, do_segments
;
4570 CORE_ADDR text_addr
, data_addr
, bss_addr
, segments
[2];
4572 if (current_program_space
->symfile_object_file
== NULL
)
4575 putpkt ("qOffsets");
4577 buf
= rs
->buf
.data ();
4579 if (buf
[0] == '\000')
4580 return; /* Return silently. Stub doesn't support
4584 warning (_("Remote failure reply: %s"), buf
);
4588 /* Pick up each field in turn. This used to be done with scanf, but
4589 scanf will make trouble if CORE_ADDR size doesn't match
4590 conversion directives correctly. The following code will work
4591 with any size of CORE_ADDR. */
4592 text_addr
= data_addr
= bss_addr
= 0;
4596 if (startswith (ptr
, "Text="))
4599 /* Don't use strtol, could lose on big values. */
4600 while (*ptr
&& *ptr
!= ';')
4601 text_addr
= (text_addr
<< 4) + fromhex (*ptr
++);
4603 if (startswith (ptr
, ";Data="))
4606 while (*ptr
&& *ptr
!= ';')
4607 data_addr
= (data_addr
<< 4) + fromhex (*ptr
++);
4612 if (!lose
&& startswith (ptr
, ";Bss="))
4615 while (*ptr
&& *ptr
!= ';')
4616 bss_addr
= (bss_addr
<< 4) + fromhex (*ptr
++);
4618 if (bss_addr
!= data_addr
)
4619 warning (_("Target reported unsupported offsets: %s"), buf
);
4624 else if (startswith (ptr
, "TextSeg="))
4627 /* Don't use strtol, could lose on big values. */
4628 while (*ptr
&& *ptr
!= ';')
4629 text_addr
= (text_addr
<< 4) + fromhex (*ptr
++);
4632 if (startswith (ptr
, ";DataSeg="))
4635 while (*ptr
&& *ptr
!= ';')
4636 data_addr
= (data_addr
<< 4) + fromhex (*ptr
++);
4644 error (_("Malformed response to offset query, %s"), buf
);
4645 else if (*ptr
!= '\0')
4646 warning (_("Target reported unsupported offsets: %s"), buf
);
4648 objfile
*objf
= current_program_space
->symfile_object_file
;
4649 section_offsets offs
= objf
->section_offsets
;
4651 symfile_segment_data_up data
= get_symfile_segment_data (objf
->obfd
.get ());
4652 do_segments
= (data
!= NULL
);
4653 do_sections
= num_segments
== 0;
4655 if (num_segments
> 0)
4657 segments
[0] = text_addr
;
4658 segments
[1] = data_addr
;
4660 /* If we have two segments, we can still try to relocate everything
4661 by assuming that the .text and .data offsets apply to the whole
4662 text and data segments. Convert the offsets given in the packet
4663 to base addresses for symfile_map_offsets_to_segments. */
4664 else if (data
!= nullptr && data
->segments
.size () == 2)
4666 segments
[0] = data
->segments
[0].base
+ text_addr
;
4667 segments
[1] = data
->segments
[1].base
+ data_addr
;
4670 /* If the object file has only one segment, assume that it is text
4671 rather than data; main programs with no writable data are rare,
4672 but programs with no code are useless. Of course the code might
4673 have ended up in the data segment... to detect that we would need
4674 the permissions here. */
4675 else if (data
&& data
->segments
.size () == 1)
4677 segments
[0] = data
->segments
[0].base
+ text_addr
;
4680 /* There's no way to relocate by segment. */
4686 int ret
= symfile_map_offsets_to_segments (objf
->obfd
.get (),
4688 num_segments
, segments
);
4690 if (ret
== 0 && !do_sections
)
4691 error (_("Can not handle qOffsets TextSeg "
4692 "response with this symbol file"));
4700 offs
[SECT_OFF_TEXT (objf
)] = text_addr
;
4702 /* This is a temporary kludge to force data and bss to use the
4703 same offsets because that's what nlmconv does now. The real
4704 solution requires changes to the stub and remote.c that I
4705 don't have time to do right now. */
4707 offs
[SECT_OFF_DATA (objf
)] = data_addr
;
4708 offs
[SECT_OFF_BSS (objf
)] = data_addr
;
4711 objfile_relocate (objf
, offs
);
4714 /* Send interrupt_sequence to remote target. */
4717 remote_target::send_interrupt_sequence ()
4719 if (interrupt_sequence_mode
== interrupt_sequence_control_c
)
4720 remote_serial_write ("\x03", 1);
4721 else if (interrupt_sequence_mode
== interrupt_sequence_break
)
4722 remote_serial_send_break ();
4723 else if (interrupt_sequence_mode
== interrupt_sequence_break_g
)
4725 remote_serial_send_break ();
4726 remote_serial_write ("g", 1);
4729 internal_error (_("Invalid value for interrupt_sequence_mode: %s."),
4730 interrupt_sequence_mode
);
4733 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
4734 and extract the PTID. Returns NULL_PTID if not found. */
4737 stop_reply_extract_thread (const char *stop_reply
)
4739 if (stop_reply
[0] == 'T' && strlen (stop_reply
) > 3)
4743 /* Txx r:val ; r:val (...) */
4746 /* Look for "register" named "thread". */
4751 p1
= strchr (p
, ':');
4755 if (strncmp (p
, "thread", p1
- p
) == 0)
4756 return read_ptid (++p1
, &p
);
4758 p1
= strchr (p
, ';');
4770 /* Determine the remote side's current thread. If we have a stop
4771 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4772 "thread" register we can extract the current thread from. If not,
4773 ask the remote which is the current thread with qC. The former
4774 method avoids a roundtrip. */
4777 remote_target::get_current_thread (const char *wait_status
)
4779 ptid_t ptid
= null_ptid
;
4781 /* Note we don't use remote_parse_stop_reply as that makes use of
4782 the target architecture, which we haven't yet fully determined at
4784 if (wait_status
!= NULL
)
4785 ptid
= stop_reply_extract_thread (wait_status
);
4786 if (ptid
== null_ptid
)
4787 ptid
= remote_current_thread (inferior_ptid
);
4792 /* Query the remote target for which is the current thread/process,
4793 add it to our tables, and update INFERIOR_PTID. The caller is
4794 responsible for setting the state such that the remote end is ready
4795 to return the current thread.
4797 This function is called after handling the '?' or 'vRun' packets,
4798 whose response is a stop reply from which we can also try
4799 extracting the thread. If the target doesn't support the explicit
4800 qC query, we infer the current thread from that stop reply, passed
4801 in in WAIT_STATUS, which may be NULL.
4803 The function returns pointer to the main thread of the inferior. */
4806 remote_target::add_current_inferior_and_thread (const char *wait_status
)
4808 bool fake_pid_p
= false;
4810 switch_to_no_thread ();
4812 /* Now, if we have thread information, update the current thread's
4814 ptid_t curr_ptid
= get_current_thread (wait_status
);
4816 if (curr_ptid
!= null_ptid
)
4818 if (!m_features
.remote_multi_process_p ())
4823 /* Without this, some commands which require an active target
4824 (such as kill) won't work. This variable serves (at least)
4825 double duty as both the pid of the target process (if it has
4826 such), and as a flag indicating that a target is active. */
4827 curr_ptid
= magic_null_ptid
;
4831 remote_add_inferior (fake_pid_p
, curr_ptid
.pid (), -1, 1);
4833 /* Add the main thread and switch to it. Don't try reading
4834 registers yet, since we haven't fetched the target description
4836 thread_info
*tp
= add_thread_silent (this, curr_ptid
);
4837 switch_to_thread_no_regs (tp
);
4842 /* Print info about a thread that was found already stopped on
4846 remote_target::print_one_stopped_thread (thread_info
*thread
)
4848 target_waitstatus ws
;
4850 /* If there is a pending waitstatus, use it. If there isn't it's because
4851 the thread's stop was reported with TARGET_WAITKIND_STOPPED / GDB_SIGNAL_0
4852 and process_initial_stop_replies decided it wasn't interesting to save
4853 and report to the core. */
4854 if (thread
->has_pending_waitstatus ())
4856 ws
= thread
->pending_waitstatus ();
4857 thread
->clear_pending_waitstatus ();
4861 ws
.set_stopped (GDB_SIGNAL_0
);
4864 switch_to_thread (thread
);
4865 thread
->set_stop_pc (get_frame_pc (get_current_frame ()));
4866 set_current_sal_from_frame (get_current_frame ());
4868 /* For "info program". */
4869 set_last_target_status (this, thread
->ptid
, ws
);
4871 if (ws
.kind () == TARGET_WAITKIND_STOPPED
)
4873 enum gdb_signal sig
= ws
.sig ();
4875 if (signal_print_state (sig
))
4876 notify_signal_received (sig
);
4879 notify_normal_stop (nullptr, 1);
4882 /* Process all initial stop replies the remote side sent in response
4883 to the ? packet. These indicate threads that were already stopped
4884 on initial connection. We mark these threads as stopped and print
4885 their current frame before giving the user the prompt. */
4888 remote_target::process_initial_stop_replies (int from_tty
)
4890 int pending_stop_replies
= stop_reply_queue_length ();
4891 struct thread_info
*selected
= NULL
;
4892 struct thread_info
*lowest_stopped
= NULL
;
4893 struct thread_info
*first
= NULL
;
4895 /* This is only used when the target is non-stop. */
4896 gdb_assert (target_is_non_stop_p ());
4898 /* Consume the initial pending events. */
4899 while (pending_stop_replies
-- > 0)
4901 ptid_t waiton_ptid
= minus_one_ptid
;
4903 struct target_waitstatus ws
;
4904 int ignore_event
= 0;
4906 event_ptid
= target_wait (waiton_ptid
, &ws
, TARGET_WNOHANG
);
4908 print_target_wait_results (waiton_ptid
, event_ptid
, ws
);
4912 case TARGET_WAITKIND_IGNORE
:
4913 case TARGET_WAITKIND_NO_RESUMED
:
4914 case TARGET_WAITKIND_SIGNALLED
:
4915 case TARGET_WAITKIND_EXITED
:
4916 /* We shouldn't see these, but if we do, just ignore. */
4917 remote_debug_printf ("event ignored");
4928 thread_info
*evthread
= this->find_thread (event_ptid
);
4930 if (ws
.kind () == TARGET_WAITKIND_STOPPED
)
4932 enum gdb_signal sig
= ws
.sig ();
4934 /* Stubs traditionally report SIGTRAP as initial signal,
4935 instead of signal 0. Suppress it. */
4936 if (sig
== GDB_SIGNAL_TRAP
)
4938 evthread
->set_stop_signal (sig
);
4939 ws
.set_stopped (sig
);
4942 if (ws
.kind () != TARGET_WAITKIND_STOPPED
4943 || ws
.sig () != GDB_SIGNAL_0
)
4944 evthread
->set_pending_waitstatus (ws
);
4946 set_executing (this, event_ptid
, false);
4947 set_running (this, event_ptid
, false);
4948 get_remote_thread_info (evthread
)->set_not_resumed ();
4951 /* "Notice" the new inferiors before anything related to
4952 registers/memory. */
4953 for (inferior
*inf
: all_non_exited_inferiors (this))
4955 inf
->needs_setup
= true;
4959 thread_info
*thread
= any_live_thread_of_inferior (inf
);
4960 notice_new_inferior (thread
, thread
->state
== THREAD_RUNNING
,
4965 /* If all-stop on top of non-stop, pause all threads. Note this
4966 records the threads' stop pc, so must be done after "noticing"
4971 /* At this point, the remote target is not async. It needs to be for
4972 the poll in stop_all_threads to consider events from it, so enable
4974 gdb_assert (!this->is_async_p ());
4975 SCOPE_EXIT
{ target_async (false); };
4976 target_async (true);
4977 stop_all_threads ("remote connect in all-stop");
4980 /* If all threads of an inferior were already stopped, we
4981 haven't setup the inferior yet. */
4982 for (inferior
*inf
: all_non_exited_inferiors (this))
4984 if (inf
->needs_setup
)
4986 thread_info
*thread
= any_live_thread_of_inferior (inf
);
4987 switch_to_thread_no_regs (thread
);
4993 /* Now go over all threads that are stopped, and print their current
4994 frame. If all-stop, then if there's a signalled thread, pick
4996 for (thread_info
*thread
: all_non_exited_threads (this))
5002 thread
->set_running (false);
5003 else if (thread
->state
!= THREAD_STOPPED
)
5006 if (selected
== nullptr && thread
->has_pending_waitstatus ())
5009 if (lowest_stopped
== NULL
5010 || thread
->inf
->num
< lowest_stopped
->inf
->num
5011 || thread
->per_inf_num
< lowest_stopped
->per_inf_num
)
5012 lowest_stopped
= thread
;
5015 print_one_stopped_thread (thread
);
5018 /* In all-stop, we only print the status of one thread, and leave
5019 others with their status pending. */
5022 thread_info
*thread
= selected
;
5024 thread
= lowest_stopped
;
5028 print_one_stopped_thread (thread
);
5032 /* Mark a remote_target as starting (by setting the starting_up flag within
5033 its remote_state) for the lifetime of this object. The reference count
5034 on the remote target is temporarily incremented, to prevent the target
5035 being deleted under our feet. */
5037 struct scoped_mark_target_starting
5039 /* Constructor, TARGET is the target to be marked as starting, its
5040 reference count will be incremented. */
5041 scoped_mark_target_starting (remote_target
*target
)
5042 : m_remote_target (remote_target_ref::new_reference (target
)),
5043 m_restore_starting_up (set_starting_up_flag (target
))
5048 /* Helper function, set the starting_up flag on TARGET and return an
5049 object which, when it goes out of scope, will restore the previous
5050 value of the starting_up flag. */
5051 static scoped_restore_tmpl
<bool>
5052 set_starting_up_flag (remote_target
*target
)
5054 remote_state
*rs
= target
->get_remote_state ();
5055 gdb_assert (!rs
->starting_up
);
5056 return make_scoped_restore (&rs
->starting_up
, true);
5059 /* A gdb::ref_ptr pointer to a remote_target. */
5060 using remote_target_ref
= gdb::ref_ptr
<remote_target
, target_ops_ref_policy
>;
5062 /* A reference to the target on which we are operating. */
5063 remote_target_ref m_remote_target
;
5065 /* An object which restores the previous value of the starting_up flag
5066 when it goes out of scope. */
5067 scoped_restore_tmpl
<bool> m_restore_starting_up
;
5070 /* Transfer ownership of the stop_reply owned by EVENT to a
5071 stop_reply_up object. */
5073 static stop_reply_up
5074 as_stop_reply_up (notif_event_up event
)
5076 auto *stop_reply
= static_cast<struct stop_reply
*> (event
.release ());
5077 return stop_reply_up (stop_reply
);
5080 /* Helper for remote_target::start_remote, start the remote connection and
5081 sync state. Return true if everything goes OK, otherwise, return false.
5082 This function exists so that the scoped_restore created within it will
5083 expire before we return to remote_target::start_remote. */
5086 remote_target::start_remote_1 (int from_tty
, int extended_p
)
5088 REMOTE_SCOPED_DEBUG_ENTER_EXIT
;
5090 struct remote_state
*rs
= get_remote_state ();
5092 /* Signal other parts that we're going through the initial setup,
5093 and so things may not be stable yet. E.g., we don't try to
5094 install tracepoints until we've relocated symbols. Also, a
5095 Ctrl-C before we're connected and synced up can't interrupt the
5096 target. Instead, it offers to drop the (potentially wedged)
5098 scoped_mark_target_starting
target_is_starting (this);
5102 if (interrupt_on_connect
)
5103 send_interrupt_sequence ();
5105 /* Ack any packet which the remote side has already sent. */
5106 remote_serial_write ("+", 1);
5108 /* The first packet we send to the target is the optional "supported
5109 packets" request. If the target can answer this, it will tell us
5110 which later probes to skip. */
5111 remote_query_supported ();
5113 /* Check vCont support and set the remote state's vCont_action_support
5115 remote_vcont_probe ();
5117 /* If the stub wants to get a QAllow, compose one and send it. */
5118 if (m_features
.packet_support (PACKET_QAllow
) != PACKET_DISABLE
)
5121 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
5122 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
5123 as a reply to known packet. For packet "vFile:setfs:" it is an
5124 invalid reply and GDB would return error in
5125 remote_hostio_set_filesystem, making remote files access impossible.
5126 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
5127 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
5129 const char v_mustreplyempty
[] = "vMustReplyEmpty";
5131 putpkt (v_mustreplyempty
);
5133 if (strcmp (rs
->buf
.data (), "OK") == 0)
5135 m_features
.m_protocol_packets
[PACKET_vFile_setfs
].support
5138 else if (strcmp (rs
->buf
.data (), "") != 0)
5139 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty
,
5143 /* Next, we possibly activate noack mode.
5145 If the QStartNoAckMode packet configuration is set to AUTO,
5146 enable noack mode if the stub reported a wish for it with
5149 If set to TRUE, then enable noack mode even if the stub didn't
5150 report it in qSupported. If the stub doesn't reply OK, the
5151 session ends with an error.
5153 If FALSE, then don't activate noack mode, regardless of what the
5154 stub claimed should be the default with qSupported. */
5156 if (m_features
.packet_support (PACKET_QStartNoAckMode
) != PACKET_DISABLE
)
5158 putpkt ("QStartNoAckMode");
5160 if ((m_features
.packet_ok (rs
->buf
, PACKET_QStartNoAckMode
)).status ()
5167 /* Tell the remote that we are using the extended protocol. */
5172 /* Let the target know which signals it is allowed to pass down to
5174 update_signals_program_target ();
5176 /* Next, if the target can specify a description, read it. We do
5177 this before anything involving memory or registers. */
5178 target_find_description ();
5180 /* Next, now that we know something about the target, update the
5181 address spaces in the program spaces. */
5182 update_address_spaces ();
5184 /* On OSs where the list of libraries is global to all
5185 processes, we fetch them early. */
5186 if (gdbarch_has_global_solist (current_inferior ()->arch ()))
5187 solib_add (NULL
, from_tty
, auto_solib_add
);
5189 if (target_is_non_stop_p ())
5191 if (m_features
.packet_support (PACKET_QNonStop
) != PACKET_ENABLE
)
5192 error (_("Non-stop mode requested, but remote "
5193 "does not support non-stop"));
5195 putpkt ("QNonStop:1");
5198 if (strcmp (rs
->buf
.data (), "OK") != 0)
5199 error (_("Remote refused setting non-stop mode with: %s"),
5202 /* Find about threads and processes the stub is already
5203 controlling. We default to adding them in the running state.
5204 The '?' query below will then tell us about which threads are
5206 this->update_thread_list ();
5208 else if (m_features
.packet_support (PACKET_QNonStop
) == PACKET_ENABLE
)
5210 /* Don't assume that the stub can operate in all-stop mode.
5211 Request it explicitly. */
5212 putpkt ("QNonStop:0");
5215 if (strcmp (rs
->buf
.data (), "OK") != 0)
5216 error (_("Remote refused setting all-stop mode with: %s"),
5220 /* Upload TSVs regardless of whether the target is running or not. The
5221 remote stub, such as GDBserver, may have some predefined or builtin
5222 TSVs, even if the target is not running. */
5223 if (get_trace_status (current_trace_status ()) != -1)
5225 struct uploaded_tsv
*uploaded_tsvs
= NULL
;
5227 upload_trace_state_variables (&uploaded_tsvs
);
5228 merge_uploaded_trace_state_variables (&uploaded_tsvs
);
5231 /* Check whether the target is running now. */
5235 if (!target_is_non_stop_p ())
5237 char *wait_status
= NULL
;
5239 if (rs
->buf
[0] == 'W' || rs
->buf
[0] == 'X')
5242 error (_("The target is not running (try extended-remote?)"));
5247 /* Save the reply for later. */
5248 wait_status
= (char *) alloca (strlen (rs
->buf
.data ()) + 1);
5249 strcpy (wait_status
, rs
->buf
.data ());
5252 /* Fetch thread list. */
5253 target_update_thread_list ();
5255 /* Let the stub know that we want it to return the thread. */
5256 set_continue_thread (minus_one_ptid
);
5258 if (thread_count (this) == 0)
5260 /* Target has no concept of threads at all. GDB treats
5261 non-threaded target as single-threaded; add a main
5263 thread_info
*tp
= add_current_inferior_and_thread (wait_status
);
5264 get_remote_thread_info (tp
)->set_resumed ();
5268 /* We have thread information; select the thread the target
5269 says should be current. If we're reconnecting to a
5270 multi-threaded program, this will ideally be the thread
5271 that last reported an event before GDB disconnected. */
5272 ptid_t curr_thread
= get_current_thread (wait_status
);
5273 if (curr_thread
== null_ptid
)
5275 /* Odd... The target was able to list threads, but not
5276 tell us which thread was current (no "thread"
5277 register in T stop reply?). Just pick the first
5278 thread in the thread list then. */
5280 remote_debug_printf ("warning: couldn't determine remote "
5281 "current thread; picking first in list.");
5283 for (thread_info
*tp
: all_non_exited_threads (this,
5286 switch_to_thread (tp
);
5291 switch_to_thread (this->find_thread (curr_thread
));
5293 get_remote_thread_info (inferior_thread ())->set_resumed ();
5296 /* init_wait_for_inferior should be called before get_offsets in order
5297 to manage `inserted' flag in bp loc in a correct state.
5298 breakpoint_init_inferior, called from init_wait_for_inferior, set
5299 `inserted' flag to 0, while before breakpoint_re_set, called from
5300 start_remote, set `inserted' flag to 1. In the initialization of
5301 inferior, breakpoint_init_inferior should be called first, and then
5302 breakpoint_re_set can be called. If this order is broken, state of
5303 `inserted' flag is wrong, and cause some problems on breakpoint
5305 init_wait_for_inferior ();
5307 get_offsets (); /* Get text, data & bss offsets. */
5309 /* If we could not find a description using qXfer, and we know
5310 how to do it some other way, try again. This is not
5311 supported for non-stop; it could be, but it is tricky if
5312 there are no stopped threads when we connect. */
5313 if (remote_read_description_p (this)
5314 && gdbarch_target_desc (current_inferior ()->arch ()) == NULL
)
5316 target_clear_description ();
5317 target_find_description ();
5320 /* Use the previously fetched status. */
5321 gdb_assert (wait_status
!= NULL
);
5322 notif_event_up reply
5323 = remote_notif_parse (this, ¬if_client_stop
, wait_status
);
5324 push_stop_reply (as_stop_reply_up (std::move (reply
)));
5326 ::start_remote (from_tty
); /* Initialize gdb process mechanisms. */
5330 /* Clear WFI global state. Do this before finding about new
5331 threads and inferiors, and setting the current inferior.
5332 Otherwise we would clear the proceed status of the current
5333 inferior when we want its stop_soon state to be preserved
5334 (see notice_new_inferior). */
5335 init_wait_for_inferior ();
5337 /* In non-stop, we will either get an "OK", meaning that there
5338 are no stopped threads at this time; or, a regular stop
5339 reply. In the latter case, there may be more than one thread
5340 stopped --- we pull them all out using the vStopped
5342 if (strcmp (rs
->buf
.data (), "OK") != 0)
5344 const notif_client
*notif
= ¬if_client_stop
;
5346 /* remote_notif_get_pending_replies acks this one, and gets
5348 rs
->notif_state
->pending_event
[notif_client_stop
.id
]
5349 = remote_notif_parse (this, notif
, rs
->buf
.data ());
5350 remote_notif_get_pending_events (notif
);
5353 if (thread_count (this) == 0)
5356 error (_("The target is not running (try extended-remote?)"));
5360 /* Report all signals during attach/startup. */
5363 /* If there are already stopped threads, mark them stopped and
5364 report their stops before giving the prompt to the user. */
5365 process_initial_stop_replies (from_tty
);
5367 if (target_can_async_p ())
5368 target_async (true);
5371 /* Give the target a chance to look up symbols. */
5372 for (inferior
*inf
: all_inferiors (this))
5374 /* The inferiors that exist at this point were created from what
5375 was found already running on the remote side, so we know they
5377 gdb_assert (this->has_execution (inf
));
5379 /* No use without a symbol-file. */
5380 if (inf
->pspace
->symfile_object_file
== nullptr)
5383 /* Need to switch to a specific thread, because remote_check_symbols
5384 uses INFERIOR_PTID to set the general thread. */
5385 scoped_restore_current_thread restore_thread
;
5386 thread_info
*thread
= any_thread_of_inferior (inf
);
5387 switch_to_thread (thread
);
5388 this->remote_check_symbols ();
5391 /* Possibly the target has been engaged in a trace run started
5392 previously; find out where things are at. */
5393 if (get_trace_status (current_trace_status ()) != -1)
5395 struct uploaded_tp
*uploaded_tps
= NULL
;
5397 if (current_trace_status ()->running
)
5398 gdb_printf (_("Trace is already running on the target.\n"));
5400 upload_tracepoints (&uploaded_tps
);
5402 merge_uploaded_tracepoints (&uploaded_tps
);
5405 /* Possibly the target has been engaged in a btrace record started
5406 previously; find out where things are at. */
5407 remote_btrace_maybe_reopen ();
5412 /* Start the remote connection and sync state. */
5415 remote_target::start_remote (int from_tty
, int extended_p
)
5417 if (start_remote_1 (from_tty
, extended_p
)
5418 && breakpoints_should_be_inserted_now ())
5419 insert_breakpoints ();
5423 remote_target::connection_string ()
5425 remote_state
*rs
= get_remote_state ();
5427 if (rs
->remote_desc
->name
!= NULL
)
5428 return rs
->remote_desc
->name
;
5433 /* Open a connection to a remote debugger.
5434 NAME is the filename used for communication. */
5437 remote_target::open (const char *name
, int from_tty
)
5439 open_1 (name
, from_tty
, 0);
5442 /* Open a connection to a remote debugger using the extended
5443 remote gdb protocol. NAME is the filename used for communication. */
5446 extended_remote_target::open (const char *name
, int from_tty
)
5448 open_1 (name
, from_tty
, 1 /*extended_p */);
5452 remote_features::reset_all_packet_configs_support ()
5456 for (i
= 0; i
< PACKET_MAX
; i
++)
5457 m_protocol_packets
[i
].support
= PACKET_SUPPORT_UNKNOWN
;
5460 /* Initialize all packet configs. */
5463 init_all_packet_configs (void)
5467 for (i
= 0; i
< PACKET_MAX
; i
++)
5469 remote_protocol_packets
[i
].detect
= AUTO_BOOLEAN_AUTO
;
5470 remote_protocol_packets
[i
].support
= PACKET_SUPPORT_UNKNOWN
;
5474 /* Symbol look-up. */
5477 remote_target::remote_check_symbols ()
5482 /* It doesn't make sense to send a qSymbol packet for an inferior that
5483 doesn't have execution, because the remote side doesn't know about
5484 inferiors without execution. */
5485 gdb_assert (target_has_execution ());
5487 if (m_features
.packet_support (PACKET_qSymbol
) == PACKET_DISABLE
)
5490 /* Make sure the remote is pointing at the right process. Note
5491 there's no way to select "no process". */
5492 set_general_process ();
5494 /* Allocate a message buffer. We can't reuse the input buffer in RS,
5495 because we need both at the same time. */
5496 gdb::char_vector
msg (get_remote_packet_size ());
5497 gdb::char_vector
reply (get_remote_packet_size ());
5499 /* Invite target to request symbol lookups. */
5501 putpkt ("qSymbol::");
5503 m_features
.packet_ok (reply
, PACKET_qSymbol
);
5505 while (startswith (reply
.data (), "qSymbol:"))
5507 struct bound_minimal_symbol sym
;
5510 end
= hex2bin (tmp
, reinterpret_cast <gdb_byte
*> (msg
.data ()),
5513 sym
= lookup_minimal_symbol (msg
.data (), NULL
, NULL
);
5514 if (sym
.minsym
== NULL
)
5515 xsnprintf (msg
.data (), get_remote_packet_size (), "qSymbol::%s",
5519 int addr_size
= gdbarch_addr_bit (current_inferior ()->arch ()) / 8;
5520 CORE_ADDR sym_addr
= sym
.value_address ();
5522 /* If this is a function address, return the start of code
5523 instead of any data function descriptor. */
5524 sym_addr
= gdbarch_convert_from_func_ptr_addr
5525 (current_inferior ()->arch (), sym_addr
,
5526 current_inferior ()->top_target ());
5528 xsnprintf (msg
.data (), get_remote_packet_size (), "qSymbol:%s:%s",
5529 phex_nz (sym_addr
, addr_size
), &reply
[8]);
5532 putpkt (msg
.data ());
5537 static struct serial
*
5538 remote_serial_open (const char *name
)
5540 static int udp_warning
= 0;
5542 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
5543 of in ser-tcp.c, because it is the remote protocol assuming that the
5544 serial connection is reliable and not the serial connection promising
5546 if (!udp_warning
&& startswith (name
, "udp:"))
5548 warning (_("The remote protocol may be unreliable over UDP.\n"
5549 "Some events may be lost, rendering further debugging "
5554 return serial_open (name
);
5557 /* Inform the target of our permission settings. The permission flags
5558 work without this, but if the target knows the settings, it can do
5559 a couple things. First, it can add its own check, to catch cases
5560 that somehow manage to get by the permissions checks in target
5561 methods. Second, if the target is wired to disallow particular
5562 settings (for instance, a system in the field that is not set up to
5563 be able to stop at a breakpoint), it can object to any unavailable
5567 remote_target::set_permissions ()
5569 struct remote_state
*rs
= get_remote_state ();
5571 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "QAllow:"
5572 "WriteReg:%x;WriteMem:%x;"
5573 "InsertBreak:%x;InsertTrace:%x;"
5574 "InsertFastTrace:%x;Stop:%x",
5575 may_write_registers
, may_write_memory
,
5576 may_insert_breakpoints
, may_insert_tracepoints
,
5577 may_insert_fast_tracepoints
, may_stop
);
5581 /* If the target didn't like the packet, warn the user. Do not try
5582 to undo the user's settings, that would just be maddening. */
5583 if (strcmp (rs
->buf
.data (), "OK") != 0)
5584 warning (_("Remote refused setting permissions with: %s"),
5588 /* This type describes each known response to the qSupported
5590 struct protocol_feature
5592 /* The name of this protocol feature. */
5595 /* The default for this protocol feature. */
5596 enum packet_support default_support
;
5598 /* The function to call when this feature is reported, or after
5599 qSupported processing if the feature is not supported.
5600 The first argument points to this structure. The second
5601 argument indicates whether the packet requested support be
5602 enabled, disabled, or probed (or the default, if this function
5603 is being called at the end of processing and this feature was
5604 not reported). The third argument may be NULL; if not NULL, it
5605 is a NUL-terminated string taken from the packet following
5606 this feature's name and an equals sign. */
5607 void (*func
) (remote_target
*remote
, const struct protocol_feature
*,
5608 enum packet_support
, const char *);
5610 /* The corresponding packet for this feature. Only used if
5611 FUNC is remote_supported_packet. */
5616 remote_supported_packet (remote_target
*remote
,
5617 const struct protocol_feature
*feature
,
5618 enum packet_support support
,
5619 const char *argument
)
5623 warning (_("Remote qSupported response supplied an unexpected value for"
5624 " \"%s\"."), feature
->name
);
5628 remote
->m_features
.m_protocol_packets
[feature
->packet
].support
= support
;
5632 remote_target::remote_packet_size (const protocol_feature
*feature
,
5633 enum packet_support support
,
5636 struct remote_state
*rs
= get_remote_state ();
5641 if (support
!= PACKET_ENABLE
)
5644 if (value
== NULL
|| *value
== '\0')
5646 warning (_("Remote target reported \"%s\" without a size."),
5652 packet_size
= strtol (value
, &value_end
, 16);
5653 if (errno
!= 0 || *value_end
!= '\0' || packet_size
< 0)
5655 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5656 feature
->name
, value
);
5660 /* Record the new maximum packet size. */
5661 rs
->explicit_packet_size
= packet_size
;
5665 remote_packet_size (remote_target
*remote
, const protocol_feature
*feature
,
5666 enum packet_support support
, const char *value
)
5668 remote
->remote_packet_size (feature
, support
, value
);
5672 remote_target::remote_supported_thread_options (const protocol_feature
*feature
,
5673 enum packet_support support
,
5676 struct remote_state
*rs
= get_remote_state ();
5678 m_features
.m_protocol_packets
[feature
->packet
].support
= support
;
5680 if (support
!= PACKET_ENABLE
)
5683 if (value
== nullptr || *value
== '\0')
5685 warning (_("Remote target reported \"%s\" without supported options."),
5690 ULONGEST options
= 0;
5691 const char *p
= unpack_varlen_hex (value
, &options
);
5695 warning (_("Remote target reported \"%s\" with "
5696 "bad thread options: \"%s\"."),
5697 feature
->name
, value
);
5701 /* Record the set of supported options. */
5702 rs
->supported_thread_options
= (gdb_thread_option
) options
;
5706 remote_supported_thread_options (remote_target
*remote
,
5707 const protocol_feature
*feature
,
5708 enum packet_support support
,
5711 remote
->remote_supported_thread_options (feature
, support
, value
);
5714 static const struct protocol_feature remote_protocol_features
[] = {
5715 { "PacketSize", PACKET_DISABLE
, remote_packet_size
, -1 },
5716 { "qXfer:auxv:read", PACKET_DISABLE
, remote_supported_packet
,
5717 PACKET_qXfer_auxv
},
5718 { "qXfer:exec-file:read", PACKET_DISABLE
, remote_supported_packet
,
5719 PACKET_qXfer_exec_file
},
5720 { "qXfer:features:read", PACKET_DISABLE
, remote_supported_packet
,
5721 PACKET_qXfer_features
},
5722 { "qXfer:libraries:read", PACKET_DISABLE
, remote_supported_packet
,
5723 PACKET_qXfer_libraries
},
5724 { "qXfer:libraries-svr4:read", PACKET_DISABLE
, remote_supported_packet
,
5725 PACKET_qXfer_libraries_svr4
},
5726 { "augmented-libraries-svr4-read", PACKET_DISABLE
,
5727 remote_supported_packet
, PACKET_augmented_libraries_svr4_read_feature
},
5728 { "qXfer:memory-map:read", PACKET_DISABLE
, remote_supported_packet
,
5729 PACKET_qXfer_memory_map
},
5730 { "qXfer:osdata:read", PACKET_DISABLE
, remote_supported_packet
,
5731 PACKET_qXfer_osdata
},
5732 { "qXfer:threads:read", PACKET_DISABLE
, remote_supported_packet
,
5733 PACKET_qXfer_threads
},
5734 { "qXfer:traceframe-info:read", PACKET_DISABLE
, remote_supported_packet
,
5735 PACKET_qXfer_traceframe_info
},
5736 { "QPassSignals", PACKET_DISABLE
, remote_supported_packet
,
5737 PACKET_QPassSignals
},
5738 { "QCatchSyscalls", PACKET_DISABLE
, remote_supported_packet
,
5739 PACKET_QCatchSyscalls
},
5740 { "QProgramSignals", PACKET_DISABLE
, remote_supported_packet
,
5741 PACKET_QProgramSignals
},
5742 { "QSetWorkingDir", PACKET_DISABLE
, remote_supported_packet
,
5743 PACKET_QSetWorkingDir
},
5744 { "QStartupWithShell", PACKET_DISABLE
, remote_supported_packet
,
5745 PACKET_QStartupWithShell
},
5746 { "QEnvironmentHexEncoded", PACKET_DISABLE
, remote_supported_packet
,
5747 PACKET_QEnvironmentHexEncoded
},
5748 { "QEnvironmentReset", PACKET_DISABLE
, remote_supported_packet
,
5749 PACKET_QEnvironmentReset
},
5750 { "QEnvironmentUnset", PACKET_DISABLE
, remote_supported_packet
,
5751 PACKET_QEnvironmentUnset
},
5752 { "QStartNoAckMode", PACKET_DISABLE
, remote_supported_packet
,
5753 PACKET_QStartNoAckMode
},
5754 { "multiprocess", PACKET_DISABLE
, remote_supported_packet
,
5755 PACKET_multiprocess_feature
},
5756 { "QNonStop", PACKET_DISABLE
, remote_supported_packet
, PACKET_QNonStop
},
5757 { "qXfer:siginfo:read", PACKET_DISABLE
, remote_supported_packet
,
5758 PACKET_qXfer_siginfo_read
},
5759 { "qXfer:siginfo:write", PACKET_DISABLE
, remote_supported_packet
,
5760 PACKET_qXfer_siginfo_write
},
5761 { "ConditionalTracepoints", PACKET_DISABLE
, remote_supported_packet
,
5762 PACKET_ConditionalTracepoints
},
5763 { "ConditionalBreakpoints", PACKET_DISABLE
, remote_supported_packet
,
5764 PACKET_ConditionalBreakpoints
},
5765 { "BreakpointCommands", PACKET_DISABLE
, remote_supported_packet
,
5766 PACKET_BreakpointCommands
},
5767 { "FastTracepoints", PACKET_DISABLE
, remote_supported_packet
,
5768 PACKET_FastTracepoints
},
5769 { "StaticTracepoints", PACKET_DISABLE
, remote_supported_packet
,
5770 PACKET_StaticTracepoints
},
5771 {"InstallInTrace", PACKET_DISABLE
, remote_supported_packet
,
5772 PACKET_InstallInTrace
},
5773 { "DisconnectedTracing", PACKET_DISABLE
, remote_supported_packet
,
5774 PACKET_DisconnectedTracing_feature
},
5775 { "ReverseContinue", PACKET_DISABLE
, remote_supported_packet
,
5777 { "ReverseStep", PACKET_DISABLE
, remote_supported_packet
,
5779 { "TracepointSource", PACKET_DISABLE
, remote_supported_packet
,
5780 PACKET_TracepointSource
},
5781 { "QAllow", PACKET_DISABLE
, remote_supported_packet
,
5783 { "EnableDisableTracepoints", PACKET_DISABLE
, remote_supported_packet
,
5784 PACKET_EnableDisableTracepoints_feature
},
5785 { "qXfer:fdpic:read", PACKET_DISABLE
, remote_supported_packet
,
5786 PACKET_qXfer_fdpic
},
5787 { "qXfer:uib:read", PACKET_DISABLE
, remote_supported_packet
,
5789 { "QDisableRandomization", PACKET_DISABLE
, remote_supported_packet
,
5790 PACKET_QDisableRandomization
},
5791 { "QAgent", PACKET_DISABLE
, remote_supported_packet
, PACKET_QAgent
},
5792 { "QTBuffer:size", PACKET_DISABLE
,
5793 remote_supported_packet
, PACKET_QTBuffer_size
},
5794 { "tracenz", PACKET_DISABLE
, remote_supported_packet
, PACKET_tracenz_feature
},
5795 { "Qbtrace:off", PACKET_DISABLE
, remote_supported_packet
, PACKET_Qbtrace_off
},
5796 { "Qbtrace:bts", PACKET_DISABLE
, remote_supported_packet
, PACKET_Qbtrace_bts
},
5797 { "Qbtrace:pt", PACKET_DISABLE
, remote_supported_packet
, PACKET_Qbtrace_pt
},
5798 { "qXfer:btrace:read", PACKET_DISABLE
, remote_supported_packet
,
5799 PACKET_qXfer_btrace
},
5800 { "qXfer:btrace-conf:read", PACKET_DISABLE
, remote_supported_packet
,
5801 PACKET_qXfer_btrace_conf
},
5802 { "Qbtrace-conf:bts:size", PACKET_DISABLE
, remote_supported_packet
,
5803 PACKET_Qbtrace_conf_bts_size
},
5804 { "swbreak", PACKET_DISABLE
, remote_supported_packet
, PACKET_swbreak_feature
},
5805 { "hwbreak", PACKET_DISABLE
, remote_supported_packet
, PACKET_hwbreak_feature
},
5806 { "fork-events", PACKET_DISABLE
, remote_supported_packet
,
5807 PACKET_fork_event_feature
},
5808 { "vfork-events", PACKET_DISABLE
, remote_supported_packet
,
5809 PACKET_vfork_event_feature
},
5810 { "exec-events", PACKET_DISABLE
, remote_supported_packet
,
5811 PACKET_exec_event_feature
},
5812 { "Qbtrace-conf:pt:size", PACKET_DISABLE
, remote_supported_packet
,
5813 PACKET_Qbtrace_conf_pt_size
},
5814 { "vContSupported", PACKET_DISABLE
, remote_supported_packet
, PACKET_vContSupported
},
5815 { "QThreadEvents", PACKET_DISABLE
, remote_supported_packet
, PACKET_QThreadEvents
},
5816 { "QThreadOptions", PACKET_DISABLE
, remote_supported_thread_options
,
5817 PACKET_QThreadOptions
},
5818 { "no-resumed", PACKET_DISABLE
, remote_supported_packet
, PACKET_no_resumed
},
5819 { "memory-tagging", PACKET_DISABLE
, remote_supported_packet
,
5820 PACKET_memory_tagging_feature
},
5823 static char *remote_support_xml
;
5825 /* Register string appended to "xmlRegisters=" in qSupported query. */
5828 register_remote_support_xml (const char *xml
)
5830 #if defined(HAVE_LIBEXPAT)
5831 if (remote_support_xml
== NULL
)
5832 remote_support_xml
= concat ("xmlRegisters=", xml
, (char *) NULL
);
5835 char *copy
= xstrdup (remote_support_xml
+ 13);
5837 char *p
= strtok_r (copy
, ",", &saveptr
);
5841 if (strcmp (p
, xml
) == 0)
5848 while ((p
= strtok_r (NULL
, ",", &saveptr
)) != NULL
);
5851 remote_support_xml
= reconcat (remote_support_xml
,
5852 remote_support_xml
, ",", xml
,
5859 remote_query_supported_append (std::string
*msg
, const char *append
)
5863 msg
->append (append
);
5867 remote_target::remote_query_supported ()
5869 struct remote_state
*rs
= get_remote_state ();
5872 unsigned char seen
[ARRAY_SIZE (remote_protocol_features
)];
5874 /* The packet support flags are handled differently for this packet
5875 than for most others. We treat an error, a disabled packet, and
5876 an empty response identically: any features which must be reported
5877 to be used will be automatically disabled. An empty buffer
5878 accomplishes this, since that is also the representation for a list
5879 containing no features. */
5882 if (m_features
.packet_support (PACKET_qSupported
) != PACKET_DISABLE
)
5886 if (m_features
.packet_set_cmd_state (PACKET_multiprocess_feature
)
5887 != AUTO_BOOLEAN_FALSE
)
5888 remote_query_supported_append (&q
, "multiprocess+");
5890 if (m_features
.packet_set_cmd_state (PACKET_swbreak_feature
)
5891 != AUTO_BOOLEAN_FALSE
)
5892 remote_query_supported_append (&q
, "swbreak+");
5894 if (m_features
.packet_set_cmd_state (PACKET_hwbreak_feature
)
5895 != AUTO_BOOLEAN_FALSE
)
5896 remote_query_supported_append (&q
, "hwbreak+");
5898 remote_query_supported_append (&q
, "qRelocInsn+");
5900 if (m_features
.packet_set_cmd_state (PACKET_fork_event_feature
)
5901 != AUTO_BOOLEAN_FALSE
)
5902 remote_query_supported_append (&q
, "fork-events+");
5904 if (m_features
.packet_set_cmd_state (PACKET_vfork_event_feature
)
5905 != AUTO_BOOLEAN_FALSE
)
5906 remote_query_supported_append (&q
, "vfork-events+");
5908 if (m_features
.packet_set_cmd_state (PACKET_exec_event_feature
)
5909 != AUTO_BOOLEAN_FALSE
)
5910 remote_query_supported_append (&q
, "exec-events+");
5912 if (m_features
.packet_set_cmd_state (PACKET_vContSupported
)
5913 != AUTO_BOOLEAN_FALSE
)
5914 remote_query_supported_append (&q
, "vContSupported+");
5916 if (m_features
.packet_set_cmd_state (PACKET_QThreadEvents
)
5917 != AUTO_BOOLEAN_FALSE
)
5918 remote_query_supported_append (&q
, "QThreadEvents+");
5920 if (m_features
.packet_set_cmd_state (PACKET_QThreadOptions
)
5921 != AUTO_BOOLEAN_FALSE
)
5922 remote_query_supported_append (&q
, "QThreadOptions+");
5924 if (m_features
.packet_set_cmd_state (PACKET_no_resumed
)
5925 != AUTO_BOOLEAN_FALSE
)
5926 remote_query_supported_append (&q
, "no-resumed+");
5928 if (m_features
.packet_set_cmd_state (PACKET_memory_tagging_feature
)
5929 != AUTO_BOOLEAN_FALSE
)
5930 remote_query_supported_append (&q
, "memory-tagging+");
5932 /* Keep this one last to work around a gdbserver <= 7.10 bug in
5933 the qSupported:xmlRegisters=i386 handling. */
5934 if (remote_support_xml
!= NULL
5935 && (m_features
.packet_support (PACKET_qXfer_features
)
5937 remote_query_supported_append (&q
, remote_support_xml
);
5939 q
= "qSupported:" + q
;
5940 putpkt (q
.c_str ());
5944 /* If an error occurred, warn, but do not return - just reset the
5945 buffer to empty and go on to disable features. */
5946 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_qSupported
);
5947 if (result
.status () == PACKET_ERROR
)
5949 warning (_("Remote failure reply: %s"), result
.err_msg ());
5954 memset (seen
, 0, sizeof (seen
));
5956 next
= rs
->buf
.data ();
5959 enum packet_support is_supported
;
5960 char *p
, *end
, *name_end
, *value
;
5962 /* First separate out this item from the rest of the packet. If
5963 there's another item after this, we overwrite the separator
5964 (terminated strings are much easier to work with). */
5966 end
= strchr (p
, ';');
5969 end
= p
+ strlen (p
);
5979 warning (_("empty item in \"qSupported\" response"));
5984 name_end
= strchr (p
, '=');
5987 /* This is a name=value entry. */
5988 is_supported
= PACKET_ENABLE
;
5989 value
= name_end
+ 1;
5998 is_supported
= PACKET_ENABLE
;
6002 is_supported
= PACKET_DISABLE
;
6006 is_supported
= PACKET_SUPPORT_UNKNOWN
;
6010 warning (_("unrecognized item \"%s\" "
6011 "in \"qSupported\" response"), p
);
6017 for (i
= 0; i
< ARRAY_SIZE (remote_protocol_features
); i
++)
6018 if (strcmp (remote_protocol_features
[i
].name
, p
) == 0)
6020 const struct protocol_feature
*feature
;
6023 feature
= &remote_protocol_features
[i
];
6024 feature
->func (this, feature
, is_supported
, value
);
6029 /* If we increased the packet size, make sure to increase the global
6030 buffer size also. We delay this until after parsing the entire
6031 qSupported packet, because this is the same buffer we were
6033 if (rs
->buf
.size () < rs
->explicit_packet_size
)
6034 rs
->buf
.resize (rs
->explicit_packet_size
);
6036 /* Handle the defaults for unmentioned features. */
6037 for (i
= 0; i
< ARRAY_SIZE (remote_protocol_features
); i
++)
6040 const struct protocol_feature
*feature
;
6042 feature
= &remote_protocol_features
[i
];
6043 feature
->func (this, feature
, feature
->default_support
, NULL
);
6047 /* Serial QUIT handler for the remote serial descriptor.
6049 Defers handling a Ctrl-C until we're done with the current
6050 command/response packet sequence, unless:
6052 - We're setting up the connection. Don't send a remote interrupt
6053 request, as we're not fully synced yet. Quit immediately
6056 - The target has been resumed in the foreground
6057 (target_terminal::is_ours is false) with a synchronous resume
6058 packet, and we're blocked waiting for the stop reply, thus a
6059 Ctrl-C should be immediately sent to the target.
6061 - We get a second Ctrl-C while still within the same serial read or
6062 write. In that case the serial is seemingly wedged --- offer to
6065 - We see a second Ctrl-C without target response, after having
6066 previously interrupted the target. In that case the target/stub
6067 is probably wedged --- offer to quit/disconnect.
6071 remote_target::remote_serial_quit_handler ()
6073 struct remote_state
*rs
= get_remote_state ();
6075 if (check_quit_flag ())
6077 /* If we're starting up, we're not fully synced yet. Quit
6079 if (rs
->starting_up
)
6081 else if (rs
->got_ctrlc_during_io
)
6083 if (query (_("The target is not responding to GDB commands.\n"
6084 "Stop debugging it? ")))
6085 remote_unpush_and_throw (this);
6087 /* If ^C has already been sent once, offer to disconnect. */
6088 else if (!target_terminal::is_ours () && rs
->ctrlc_pending_p
)
6090 /* All-stop protocol, and blocked waiting for stop reply. Send
6091 an interrupt request. */
6092 else if (!target_terminal::is_ours () && rs
->waiting_for_stop_reply
)
6093 target_interrupt ();
6095 rs
->got_ctrlc_during_io
= 1;
6099 /* The remote_target that is current while the quit handler is
6100 overridden with remote_serial_quit_handler. */
6101 static remote_target
*curr_quit_handler_target
;
6104 remote_serial_quit_handler ()
6106 curr_quit_handler_target
->remote_serial_quit_handler ();
6109 /* Remove the remote target from the target stack of each inferior
6110 that is using it. Upper targets depend on it so remove them
6114 remote_unpush_target (remote_target
*target
)
6116 /* We have to unpush the target from all inferiors, even those that
6118 scoped_restore_current_inferior restore_current_inferior
;
6120 for (inferior
*inf
: all_inferiors (target
))
6122 switch_to_inferior_no_thread (inf
);
6123 inf
->pop_all_targets_at_and_above (process_stratum
);
6124 generic_mourn_inferior ();
6127 /* Don't rely on target_close doing this when the target is popped
6128 from the last remote inferior above, because something may be
6129 holding a reference to the target higher up on the stack, meaning
6130 target_close won't be called yet. We lost the connection to the
6131 target, so clear these now, otherwise we may later throw
6132 TARGET_CLOSE_ERROR while trying to tell the remote target to
6134 fileio_handles_invalidate_target (target
);
6138 remote_unpush_and_throw (remote_target
*target
)
6140 remote_unpush_target (target
);
6141 throw_error (TARGET_CLOSE_ERROR
, _("Disconnected from target."));
6145 remote_target::open_1 (const char *name
, int from_tty
, int extended_p
)
6147 remote_target
*curr_remote
= get_current_remote_target ();
6150 error (_("To open a remote debug connection, you need to specify what\n"
6151 "serial device is attached to the remote system\n"
6152 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
6154 /* If we're connected to a running target, target_preopen will kill it.
6155 Ask this question first, before target_preopen has a chance to kill
6157 if (curr_remote
!= NULL
&& !target_has_execution ())
6160 && !query (_("Already connected to a remote target. Disconnect? ")))
6161 error (_("Still connected."));
6164 /* Here the possibly existing remote target gets unpushed. */
6165 target_preopen (from_tty
);
6167 remote_fileio_reset ();
6168 reopen_exec_file ();
6169 reread_symbols (from_tty
);
6171 remote_target
*remote
6172 = (extended_p
? new extended_remote_target () : new remote_target ());
6173 target_ops_up
target_holder (remote
);
6175 remote_state
*rs
= remote
->get_remote_state ();
6177 /* See FIXME above. */
6178 if (!target_async_permitted
)
6179 rs
->wait_forever_enabled_p
= true;
6181 rs
->remote_desc
= remote_serial_open (name
);
6183 if (baud_rate
!= -1)
6187 serial_setbaudrate (rs
->remote_desc
, baud_rate
);
6189 catch (const gdb_exception_error
&)
6191 /* The requested speed could not be set. Error out to
6192 top level after closing remote_desc. Take care to
6193 set remote_desc to NULL to avoid closing remote_desc
6195 serial_close (rs
->remote_desc
);
6196 rs
->remote_desc
= NULL
;
6201 serial_setparity (rs
->remote_desc
, serial_parity
);
6202 serial_raw (rs
->remote_desc
);
6204 /* If there is something sitting in the buffer we might take it as a
6205 response to a command, which would be bad. */
6206 serial_flush_input (rs
->remote_desc
);
6210 gdb_puts ("Remote debugging using ");
6215 /* Switch to using the remote target now. */
6216 current_inferior ()->push_target (std::move (target_holder
));
6218 /* Register extra event sources in the event loop. */
6219 rs
->create_async_event_handler ();
6221 rs
->notif_state
= remote_notif_state_allocate (remote
);
6223 /* Reset the target state; these things will be queried either by
6224 remote_query_supported or as they are needed. */
6225 remote
->m_features
.reset_all_packet_configs_support ();
6226 rs
->explicit_packet_size
= 0;
6228 rs
->extended
= extended_p
;
6229 rs
->waiting_for_stop_reply
= 0;
6230 rs
->ctrlc_pending_p
= 0;
6231 rs
->got_ctrlc_during_io
= 0;
6233 rs
->general_thread
= not_sent_ptid
;
6234 rs
->continue_thread
= not_sent_ptid
;
6235 rs
->remote_traceframe_number
= -1;
6237 rs
->last_resume_exec_dir
= EXEC_FORWARD
;
6239 /* Probe for ability to use "ThreadInfo" query, as required. */
6240 rs
->use_threadinfo_query
= 1;
6241 rs
->use_threadextra_query
= 1;
6243 rs
->readahead_cache
.invalidate ();
6245 if (target_async_permitted
)
6247 /* FIXME: cagney/1999-09-23: During the initial connection it is
6248 assumed that the target is already ready and able to respond to
6249 requests. Unfortunately remote_start_remote() eventually calls
6250 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
6251 around this. Eventually a mechanism that allows
6252 wait_for_inferior() to expect/get timeouts will be
6254 rs
->wait_forever_enabled_p
= false;
6257 /* First delete any symbols previously loaded from shared libraries. */
6258 no_shared_libraries (NULL
, 0);
6260 /* Start the remote connection. If error() or QUIT, discard this
6261 target (we'd otherwise be in an inconsistent state) and then
6262 propogate the error on up the exception chain. This ensures that
6263 the caller doesn't stumble along blindly assuming that the
6264 function succeeded. The CLI doesn't have this problem but other
6265 UI's, such as MI do.
6267 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
6268 this function should return an error indication letting the
6269 caller restore the previous state. Unfortunately the command
6270 ``target remote'' is directly wired to this function making that
6271 impossible. On a positive note, the CLI side of this problem has
6272 been fixed - the function set_cmd_context() makes it possible for
6273 all the ``target ....'' commands to share a common callback
6274 function. See cli-dump.c. */
6279 remote
->start_remote (from_tty
, extended_p
);
6281 catch (const gdb_exception
&ex
)
6283 /* Pop the partially set up target - unless something else did
6284 already before throwing the exception. */
6285 if (ex
.error
!= TARGET_CLOSE_ERROR
)
6286 remote_unpush_target (remote
);
6291 remote_btrace_reset (rs
);
6293 if (target_async_permitted
)
6294 rs
->wait_forever_enabled_p
= true;
6297 /* Determine if WS represents a fork status. */
6300 is_fork_status (target_waitkind kind
)
6302 return (kind
== TARGET_WAITKIND_FORKED
6303 || kind
== TARGET_WAITKIND_VFORKED
);
6306 /* Return a reference to the field where a pending child status, if
6307 there's one, is recorded. If there's no child event pending, the
6308 returned waitstatus has TARGET_WAITKIND_IGNORE kind. */
6310 static const target_waitstatus
&
6311 thread_pending_status (struct thread_info
*thread
)
6313 return (thread
->has_pending_waitstatus ()
6314 ? thread
->pending_waitstatus ()
6315 : thread
->pending_follow
);
6318 /* Return THREAD's pending status if it is a pending fork/vfork (but
6319 not clone) parent, else return nullptr. */
6321 static const target_waitstatus
*
6322 thread_pending_fork_status (struct thread_info
*thread
)
6324 const target_waitstatus
&ws
= thread_pending_status (thread
);
6326 if (!is_fork_status (ws
.kind ()))
6332 /* Return THREAD's pending status if is is a pending fork/vfork/clone
6333 event, else return nullptr. */
6335 static const target_waitstatus
*
6336 thread_pending_child_status (thread_info
*thread
)
6338 const target_waitstatus
&ws
= thread_pending_status (thread
);
6340 if (!is_new_child_status (ws
.kind ()))
6346 /* Detach the specified process. */
6349 remote_target::remote_detach_pid (int pid
)
6351 struct remote_state
*rs
= get_remote_state ();
6353 /* This should not be necessary, but the handling for D;PID in
6354 GDBserver versions prior to 8.2 incorrectly assumes that the
6355 selected process points to the same process we're detaching,
6356 leading to misbehavior (and possibly GDBserver crashing) when it
6357 does not. Since it's easy and cheap, work around it by forcing
6358 GDBserver to select GDB's current process. */
6359 set_general_process ();
6361 if (m_features
.remote_multi_process_p ())
6362 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "D;%x", pid
);
6364 strcpy (rs
->buf
.data (), "D");
6369 if (rs
->buf
[0] == 'O' && rs
->buf
[1] == 'K')
6371 else if (rs
->buf
[0] == '\0')
6372 error (_("Remote doesn't know how to detach"));
6375 /* It is possible that we have an unprocessed exit event for this
6376 pid. If this is the case then we can ignore the failure to detach
6377 and just pretend that the detach worked, as far as the user is
6378 concerned, the process exited immediately after the detach. */
6379 bool process_has_already_exited
= false;
6380 remote_notif_get_pending_events (¬if_client_stop
);
6381 for (stop_reply_up
&reply
: rs
->stop_reply_queue
)
6383 if (reply
->ptid
.pid () != pid
)
6386 enum target_waitkind kind
= reply
->ws
.kind ();
6387 if (kind
== TARGET_WAITKIND_EXITED
6388 || kind
== TARGET_WAITKIND_SIGNALLED
)
6390 process_has_already_exited
= true;
6392 ("detach failed, but process already exited");
6397 if (!process_has_already_exited
)
6398 error (_("can't detach process: %s"), (char *) rs
->buf
.data ());
6402 /* This detaches a program to which we previously attached, using
6403 inferior_ptid to identify the process. After this is done, GDB
6404 can be used to debug some other program. We better not have left
6405 any breakpoints in the target program or it'll die when it hits
6409 remote_target::remote_detach_1 (inferior
*inf
, int from_tty
)
6411 int pid
= inferior_ptid
.pid ();
6412 struct remote_state
*rs
= get_remote_state ();
6415 if (!target_has_execution ())
6416 error (_("No process to detach from."));
6418 target_announce_detach (from_tty
);
6420 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
6422 /* If we're in breakpoints-always-inserted mode, or the inferior
6423 is running, we have to remove breakpoints before detaching.
6424 We don't do this in common code instead because not all
6425 targets support removing breakpoints while the target is
6426 running. The remote target / gdbserver does, though. */
6427 remove_breakpoints_inf (current_inferior ());
6430 /* Tell the remote target to detach. */
6431 remote_detach_pid (pid
);
6433 /* Exit only if this is the only active inferior. */
6434 if (from_tty
&& !rs
->extended
&& number_of_live_inferiors (this) == 1)
6435 gdb_puts (_("Ending remote debugging.\n"));
6437 /* See if any thread of the inferior we are detaching has a pending fork
6438 status. In that case, we must detach from the child resulting from
6440 for (thread_info
*thread
: inf
->non_exited_threads ())
6442 const target_waitstatus
*ws
= thread_pending_fork_status (thread
);
6447 remote_detach_pid (ws
->child_ptid ().pid ());
6450 /* Check also for any pending fork events in the stop reply queue. */
6451 remote_notif_get_pending_events (¬if_client_stop
);
6452 for (stop_reply_up
&reply
: rs
->stop_reply_queue
)
6454 if (reply
->ptid
.pid () != pid
)
6457 if (!is_fork_status (reply
->ws
.kind ()))
6460 remote_detach_pid (reply
->ws
.child_ptid ().pid ());
6463 thread_info
*tp
= this->find_thread (inferior_ptid
);
6465 /* Check to see if we are detaching a fork parent. Note that if we
6466 are detaching a fork child, tp == NULL. */
6467 is_fork_parent
= (tp
!= NULL
6468 && tp
->pending_follow
.kind () == TARGET_WAITKIND_FORKED
);
6470 /* If doing detach-on-fork, we don't mourn, because that will delete
6471 breakpoints that should be available for the followed inferior. */
6472 if (!is_fork_parent
)
6474 /* Save the pid as a string before mourning, since that will
6475 unpush the remote target, and we need the string after. */
6476 std::string infpid
= target_pid_to_str (ptid_t (pid
));
6478 target_mourn_inferior (inferior_ptid
);
6479 if (print_inferior_events
)
6480 gdb_printf (_("[Inferior %d (%s) detached]\n"),
6481 inf
->num
, infpid
.c_str ());
6485 switch_to_no_thread ();
6486 detach_inferior (current_inferior ());
6491 remote_target::detach (inferior
*inf
, int from_tty
)
6493 remote_detach_1 (inf
, from_tty
);
6497 extended_remote_target::detach (inferior
*inf
, int from_tty
)
6499 remote_detach_1 (inf
, from_tty
);
6502 /* Target follow-fork function for remote targets. On entry, and
6503 at return, the current inferior is the fork parent.
6505 Note that although this is currently only used for extended-remote,
6506 it is named remote_follow_fork in anticipation of using it for the
6507 remote target as well. */
6510 remote_target::follow_fork (inferior
*child_inf
, ptid_t child_ptid
,
6511 target_waitkind fork_kind
, bool follow_child
,
6514 process_stratum_target::follow_fork (child_inf
, child_ptid
,
6515 fork_kind
, follow_child
, detach_fork
);
6517 if ((fork_kind
== TARGET_WAITKIND_FORKED
6518 && m_features
.remote_fork_event_p ())
6519 || (fork_kind
== TARGET_WAITKIND_VFORKED
6520 && m_features
.remote_vfork_event_p ()))
6522 /* When following the parent and detaching the child, we detach
6523 the child here. For the case of following the child and
6524 detaching the parent, the detach is done in the target-
6525 independent follow fork code in infrun.c. We can't use
6526 target_detach when detaching an unfollowed child because
6527 the client side doesn't know anything about the child. */
6528 if (detach_fork
&& !follow_child
)
6530 /* Detach the fork child. */
6531 remote_detach_pid (child_ptid
.pid ());
6537 remote_target::follow_clone (ptid_t child_ptid
)
6539 remote_add_thread (child_ptid
, false, false, false);
6542 /* Target follow-exec function for remote targets. Save EXECD_PATHNAME
6543 in the program space of the new inferior. */
6546 remote_target::follow_exec (inferior
*follow_inf
, ptid_t ptid
,
6547 const char *execd_pathname
)
6549 process_stratum_target::follow_exec (follow_inf
, ptid
, execd_pathname
);
6551 /* We know that this is a target file name, so if it has the "target:"
6552 prefix we strip it off before saving it in the program space. */
6553 if (is_target_filename (execd_pathname
))
6554 execd_pathname
+= strlen (TARGET_SYSROOT_PREFIX
);
6556 set_pspace_remote_exec_file (follow_inf
->pspace
, execd_pathname
);
6559 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
6562 remote_target::disconnect (const char *args
, int from_tty
)
6565 error (_("Argument given to \"disconnect\" when remotely debugging."));
6567 /* Make sure we unpush even the extended remote targets. Calling
6568 target_mourn_inferior won't unpush, and
6569 remote_target::mourn_inferior won't unpush if there is more than
6570 one inferior left. */
6571 remote_unpush_target (this);
6574 gdb_puts ("Ending remote debugging.\n");
6577 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
6578 be chatty about it. */
6581 extended_remote_target::attach (const char *args
, int from_tty
)
6583 struct remote_state
*rs
= get_remote_state ();
6585 char *wait_status
= NULL
;
6587 pid
= parse_pid_to_attach (args
);
6589 /* Remote PID can be freely equal to getpid, do not check it here the same
6590 way as in other targets. */
6592 if (m_features
.packet_support (PACKET_vAttach
) == PACKET_DISABLE
)
6593 error (_("This target does not support attaching to a process"));
6595 target_announce_attach (from_tty
, pid
);
6597 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "vAttach;%x", pid
);
6601 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_vAttach
);
6602 switch (result
.status ())
6605 if (!target_is_non_stop_p ())
6607 /* Save the reply for later. */
6608 wait_status
= (char *) alloca (strlen (rs
->buf
.data ()) + 1);
6609 strcpy (wait_status
, rs
->buf
.data ());
6611 else if (strcmp (rs
->buf
.data (), "OK") != 0)
6612 error (_("Attaching to %s failed with: %s"),
6613 target_pid_to_str (ptid_t (pid
)).c_str (),
6616 case PACKET_UNKNOWN
:
6617 error (_("This target does not support attaching to a process"));
6619 error (_("Attaching to %s failed: %s"),
6620 target_pid_to_str (ptid_t (pid
)).c_str (), result
.err_msg ());
6623 switch_to_inferior_no_thread (remote_add_inferior (false, pid
, 1, 0));
6625 inferior_ptid
= ptid_t (pid
);
6627 if (target_is_non_stop_p ())
6629 /* Get list of threads. */
6630 update_thread_list ();
6632 thread_info
*thread
= first_thread_of_inferior (current_inferior ());
6633 if (thread
!= nullptr)
6634 switch_to_thread (thread
);
6636 /* Invalidate our notion of the remote current thread. */
6637 record_currthread (rs
, minus_one_ptid
);
6641 /* Now, if we have thread information, update the main thread's
6643 ptid_t curr_ptid
= remote_current_thread (ptid_t (pid
));
6645 /* Add the main thread to the thread list. We add the thread
6646 silently in this case (the final true parameter). */
6647 thread_info
*thr
= remote_add_thread (curr_ptid
, true, true, true);
6649 switch_to_thread (thr
);
6652 /* Next, if the target can specify a description, read it. We do
6653 this before anything involving memory or registers. */
6654 target_find_description ();
6656 if (!target_is_non_stop_p ())
6658 /* Use the previously fetched status. */
6659 gdb_assert (wait_status
!= NULL
);
6661 notif_event_up reply
6662 = remote_notif_parse (this, ¬if_client_stop
, wait_status
);
6663 push_stop_reply (as_stop_reply_up (std::move (reply
)));
6667 gdb_assert (wait_status
== NULL
);
6669 gdb_assert (target_can_async_p ());
6673 /* Implementation of the to_post_attach method. */
6676 extended_remote_target::post_attach (int pid
)
6678 /* Get text, data & bss offsets. */
6681 /* In certain cases GDB might not have had the chance to start
6682 symbol lookup up until now. This could happen if the debugged
6683 binary is not using shared libraries, the vsyscall page is not
6684 present (on Linux) and the binary itself hadn't changed since the
6685 debugging process was started. */
6686 if (current_program_space
->symfile_object_file
!= NULL
)
6687 remote_check_symbols();
6691 /* Check for the availability of vCont. This function should also check
6695 remote_target::remote_vcont_probe ()
6697 remote_state
*rs
= get_remote_state ();
6700 strcpy (rs
->buf
.data (), "vCont?");
6703 buf
= rs
->buf
.data ();
6705 /* Make sure that the features we assume are supported. */
6706 if (startswith (buf
, "vCont"))
6709 int support_c
, support_C
;
6711 rs
->supports_vCont
.s
= 0;
6712 rs
->supports_vCont
.S
= 0;
6715 rs
->supports_vCont
.t
= 0;
6716 rs
->supports_vCont
.r
= 0;
6717 while (p
&& *p
== ';')
6720 if (*p
== 's' && (*(p
+ 1) == ';' || *(p
+ 1) == 0))
6721 rs
->supports_vCont
.s
= 1;
6722 else if (*p
== 'S' && (*(p
+ 1) == ';' || *(p
+ 1) == 0))
6723 rs
->supports_vCont
.S
= 1;
6724 else if (*p
== 'c' && (*(p
+ 1) == ';' || *(p
+ 1) == 0))
6726 else if (*p
== 'C' && (*(p
+ 1) == ';' || *(p
+ 1) == 0))
6728 else if (*p
== 't' && (*(p
+ 1) == ';' || *(p
+ 1) == 0))
6729 rs
->supports_vCont
.t
= 1;
6730 else if (*p
== 'r' && (*(p
+ 1) == ';' || *(p
+ 1) == 0))
6731 rs
->supports_vCont
.r
= 1;
6733 p
= strchr (p
, ';');
6736 /* If c, and C are not all supported, we can't use vCont. Clearing
6737 BUF will make packet_ok disable the packet. */
6738 if (!support_c
|| !support_C
)
6742 m_features
.packet_ok (rs
->buf
, PACKET_vCont
);
6745 /* Helper function for building "vCont" resumptions. Write a
6746 resumption to P. ENDP points to one-passed-the-end of the buffer
6747 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
6748 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
6749 resumed thread should be single-stepped and/or signalled. If PTID
6750 equals minus_one_ptid, then all threads are resumed; if PTID
6751 represents a process, then all threads of the process are
6755 remote_target::append_resumption (char *p
, char *endp
,
6756 ptid_t ptid
, int step
, gdb_signal siggnal
)
6758 struct remote_state
*rs
= get_remote_state ();
6760 if (step
&& siggnal
!= GDB_SIGNAL_0
)
6761 p
+= xsnprintf (p
, endp
- p
, ";S%02x", siggnal
);
6763 /* GDB is willing to range step. */
6764 && use_range_stepping
6765 /* Target supports range stepping. */
6766 && rs
->supports_vCont
.r
6767 /* We don't currently support range stepping multiple
6768 threads with a wildcard (though the protocol allows it,
6769 so stubs shouldn't make an active effort to forbid
6771 && !(m_features
.remote_multi_process_p () && ptid
.is_pid ()))
6773 struct thread_info
*tp
;
6775 if (ptid
== minus_one_ptid
)
6777 /* If we don't know about the target thread's tid, then
6778 we're resuming magic_null_ptid (see caller). */
6779 tp
= this->find_thread (magic_null_ptid
);
6782 tp
= this->find_thread (ptid
);
6783 gdb_assert (tp
!= NULL
);
6785 if (tp
->control
.may_range_step
)
6787 int addr_size
= gdbarch_addr_bit (current_inferior ()->arch ()) / 8;
6789 p
+= xsnprintf (p
, endp
- p
, ";r%s,%s",
6790 phex_nz (tp
->control
.step_range_start
,
6792 phex_nz (tp
->control
.step_range_end
,
6796 p
+= xsnprintf (p
, endp
- p
, ";s");
6799 p
+= xsnprintf (p
, endp
- p
, ";s");
6800 else if (siggnal
!= GDB_SIGNAL_0
)
6801 p
+= xsnprintf (p
, endp
- p
, ";C%02x", siggnal
);
6803 p
+= xsnprintf (p
, endp
- p
, ";c");
6805 if (m_features
.remote_multi_process_p () && ptid
.is_pid ())
6809 /* All (-1) threads of process. */
6810 nptid
= ptid_t (ptid
.pid (), -1);
6812 p
+= xsnprintf (p
, endp
- p
, ":");
6813 p
= write_ptid (p
, endp
, nptid
);
6815 else if (ptid
!= minus_one_ptid
)
6817 p
+= xsnprintf (p
, endp
- p
, ":");
6818 p
= write_ptid (p
, endp
, ptid
);
6824 /* Clear the thread's private info on resume. */
6827 resume_clear_thread_private_info (struct thread_info
*thread
)
6829 if (thread
->priv
!= NULL
)
6831 remote_thread_info
*priv
= get_remote_thread_info (thread
);
6833 priv
->stop_reason
= TARGET_STOPPED_BY_NO_REASON
;
6834 priv
->watch_data_address
= 0;
6838 /* Append a vCont continue-with-signal action for threads that have a
6839 non-zero stop signal. */
6842 remote_target::append_pending_thread_resumptions (char *p
, char *endp
,
6845 for (thread_info
*thread
: all_non_exited_threads (this, ptid
))
6846 if (inferior_ptid
!= thread
->ptid
6847 && thread
->stop_signal () != GDB_SIGNAL_0
)
6849 p
= append_resumption (p
, endp
, thread
->ptid
,
6850 0, thread
->stop_signal ());
6851 thread
->set_stop_signal (GDB_SIGNAL_0
);
6852 resume_clear_thread_private_info (thread
);
6858 /* Set the target running, using the packets that use Hc
6862 remote_target::remote_resume_with_hc (ptid_t ptid
, int step
,
6865 struct remote_state
*rs
= get_remote_state ();
6868 rs
->last_sent_signal
= siggnal
;
6869 rs
->last_sent_step
= step
;
6871 /* The c/s/C/S resume packets use Hc, so set the continue
6873 if (ptid
== minus_one_ptid
)
6874 set_continue_thread (any_thread_ptid
);
6876 set_continue_thread (ptid
);
6878 for (thread_info
*thread
: all_non_exited_threads (this))
6879 resume_clear_thread_private_info (thread
);
6881 buf
= rs
->buf
.data ();
6882 if (::execution_direction
== EXEC_REVERSE
)
6884 /* We don't pass signals to the target in reverse exec mode. */
6885 if (info_verbose
&& siggnal
!= GDB_SIGNAL_0
)
6886 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6889 if (step
&& m_features
.packet_support (PACKET_bs
) == PACKET_DISABLE
)
6890 error (_("Remote reverse-step not supported."));
6891 if (!step
&& m_features
.packet_support (PACKET_bc
) == PACKET_DISABLE
)
6892 error (_("Remote reverse-continue not supported."));
6894 strcpy (buf
, step
? "bs" : "bc");
6896 else if (siggnal
!= GDB_SIGNAL_0
)
6898 buf
[0] = step
? 'S' : 'C';
6899 buf
[1] = tohex (((int) siggnal
>> 4) & 0xf);
6900 buf
[2] = tohex (((int) siggnal
) & 0xf);
6904 strcpy (buf
, step
? "s" : "c");
6909 /* Resume the remote inferior by using a "vCont" packet. SCOPE_PTID,
6910 STEP, and SIGGNAL have the same meaning as in target_resume. This
6911 function returns non-zero iff it resumes the inferior.
6913 This function issues a strict subset of all possible vCont commands
6917 remote_target::remote_resume_with_vcont (ptid_t scope_ptid
, int step
,
6918 enum gdb_signal siggnal
)
6920 struct remote_state
*rs
= get_remote_state ();
6924 /* No reverse execution actions defined for vCont. */
6925 if (::execution_direction
== EXEC_REVERSE
)
6928 if (m_features
.packet_support (PACKET_vCont
) == PACKET_DISABLE
)
6931 p
= rs
->buf
.data ();
6932 endp
= p
+ get_remote_packet_size ();
6934 /* If we could generate a wider range of packets, we'd have to worry
6935 about overflowing BUF. Should there be a generic
6936 "multi-part-packet" packet? */
6938 p
+= xsnprintf (p
, endp
- p
, "vCont");
6940 if (scope_ptid
== magic_null_ptid
)
6942 /* MAGIC_NULL_PTID means that we don't have any active threads,
6943 so we don't have any TID numbers the inferior will
6944 understand. Make sure to only send forms that do not specify
6946 append_resumption (p
, endp
, minus_one_ptid
, step
, siggnal
);
6948 else if (scope_ptid
== minus_one_ptid
|| scope_ptid
.is_pid ())
6950 /* Resume all threads (of all processes, or of a single
6951 process), with preference for INFERIOR_PTID. This assumes
6952 inferior_ptid belongs to the set of all threads we are about
6954 if (step
|| siggnal
!= GDB_SIGNAL_0
)
6956 /* Step inferior_ptid, with or without signal. */
6957 p
= append_resumption (p
, endp
, inferior_ptid
, step
, siggnal
);
6960 /* Also pass down any pending signaled resumption for other
6961 threads not the current. */
6962 p
= append_pending_thread_resumptions (p
, endp
, scope_ptid
);
6964 /* And continue others without a signal. */
6965 append_resumption (p
, endp
, scope_ptid
, /*step=*/ 0, GDB_SIGNAL_0
);
6969 /* Scheduler locking; resume only SCOPE_PTID. */
6970 append_resumption (p
, endp
, scope_ptid
, step
, siggnal
);
6973 gdb_assert (strlen (rs
->buf
.data ()) < get_remote_packet_size ());
6976 if (target_is_non_stop_p ())
6978 /* In non-stop, the stub replies to vCont with "OK". The stop
6979 reply will be reported asynchronously by means of a `%Stop'
6982 if (strcmp (rs
->buf
.data (), "OK") != 0)
6983 error (_("Unexpected vCont reply in non-stop mode: %s"),
6990 /* Tell the remote machine to resume. */
6993 remote_target::resume (ptid_t scope_ptid
, int step
, enum gdb_signal siggnal
)
6995 struct remote_state
*rs
= get_remote_state ();
6997 /* When connected in non-stop mode, the core resumes threads
6998 individually. Resuming remote threads directly in target_resume
6999 would thus result in sending one packet per thread. Instead, to
7000 minimize roundtrip latency, here we just store the resume
7001 request (put the thread in RESUMED_PENDING_VCONT state); the actual remote
7002 resumption will be done in remote_target::commit_resume, where we'll be
7003 able to do vCont action coalescing. */
7004 if (target_is_non_stop_p () && ::execution_direction
!= EXEC_REVERSE
)
7006 remote_thread_info
*remote_thr
7007 = get_remote_thread_info (inferior_thread ());
7009 /* We don't expect the core to ask to resume an already resumed (from
7010 its point of view) thread. */
7011 gdb_assert (remote_thr
->get_resume_state () == resume_state::NOT_RESUMED
);
7013 remote_thr
->set_resumed_pending_vcont (step
, siggnal
);
7015 /* There's actually nothing that says that the core can't
7016 request a wildcard resume in non-stop mode, though. It's
7017 just that we know it doesn't currently, so we don't bother
7019 gdb_assert (scope_ptid
== inferior_ptid
);
7023 commit_requested_thread_options ();
7025 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
7026 (explained in remote-notif.c:handle_notification) so
7027 remote_notif_process is not called. We need find a place where
7028 it is safe to start a 'vNotif' sequence. It is good to do it
7029 before resuming inferior, because inferior was stopped and no RSP
7030 traffic at that moment. */
7031 if (!target_is_non_stop_p ())
7032 remote_notif_process (rs
->notif_state
, ¬if_client_stop
);
7034 rs
->last_resume_exec_dir
= ::execution_direction
;
7036 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
7037 if (!remote_resume_with_vcont (scope_ptid
, step
, siggnal
))
7038 remote_resume_with_hc (scope_ptid
, step
, siggnal
);
7040 /* Update resumed state tracked by the remote target. */
7041 for (thread_info
*tp
: all_non_exited_threads (this, scope_ptid
))
7042 get_remote_thread_info (tp
)->set_resumed ();
7044 /* We've just told the target to resume. The remote server will
7045 wait for the inferior to stop, and then send a stop reply. In
7046 the mean time, we can't start another command/query ourselves
7047 because the stub wouldn't be ready to process it. This applies
7048 only to the base all-stop protocol, however. In non-stop (which
7049 only supports vCont), the stub replies with an "OK", and is
7050 immediate able to process further serial input. */
7051 if (!target_is_non_stop_p ())
7052 rs
->waiting_for_stop_reply
= 1;
7055 /* Private per-inferior info for target remote processes. */
7057 struct remote_inferior
: public private_inferior
7059 /* Whether we can send a wildcard vCont for this process. */
7060 bool may_wildcard_vcont
= true;
7063 /* Get the remote private inferior data associated to INF. */
7065 static remote_inferior
*
7066 get_remote_inferior (inferior
*inf
)
7068 if (inf
->priv
== NULL
)
7069 inf
->priv
.reset (new remote_inferior
);
7071 return gdb::checked_static_cast
<remote_inferior
*> (inf
->priv
.get ());
7074 /* Class used to track the construction of a vCont packet in the
7075 outgoing packet buffer. This is used to send multiple vCont
7076 packets if we have more actions than would fit a single packet. */
7081 explicit vcont_builder (remote_target
*remote
)
7088 void push_action (ptid_t ptid
, bool step
, gdb_signal siggnal
);
7093 /* The remote target. */
7094 remote_target
*m_remote
;
7096 /* Pointer to the first action. P points here if no action has been
7098 char *m_first_action
;
7100 /* Where the next action will be appended. */
7103 /* The end of the buffer. Must never write past this. */
7107 /* Prepare the outgoing buffer for a new vCont packet. */
7110 vcont_builder::restart ()
7112 struct remote_state
*rs
= m_remote
->get_remote_state ();
7114 m_p
= rs
->buf
.data ();
7115 m_endp
= m_p
+ m_remote
->get_remote_packet_size ();
7116 m_p
+= xsnprintf (m_p
, m_endp
- m_p
, "vCont");
7117 m_first_action
= m_p
;
7120 /* If the vCont packet being built has any action, send it to the
7124 vcont_builder::flush ()
7126 struct remote_state
*rs
;
7128 if (m_p
== m_first_action
)
7131 rs
= m_remote
->get_remote_state ();
7132 m_remote
->putpkt (rs
->buf
);
7133 m_remote
->getpkt (&rs
->buf
);
7134 if (strcmp (rs
->buf
.data (), "OK") != 0)
7135 error (_("Unexpected vCont reply in non-stop mode: %s"), rs
->buf
.data ());
7138 /* The largest action is range-stepping, with its two addresses. This
7139 is more than sufficient. If a new, bigger action is created, it'll
7140 quickly trigger a failed assertion in append_resumption (and we'll
7142 #define MAX_ACTION_SIZE 200
7144 /* Append a new vCont action in the outgoing packet being built. If
7145 the action doesn't fit the packet along with previous actions, push
7146 what we've got so far to the remote end and start over a new vCont
7147 packet (with the new action). */
7150 vcont_builder::push_action (ptid_t ptid
, bool step
, gdb_signal siggnal
)
7152 char buf
[MAX_ACTION_SIZE
+ 1];
7154 char *endp
= m_remote
->append_resumption (buf
, buf
+ sizeof (buf
),
7155 ptid
, step
, siggnal
);
7157 /* Check whether this new action would fit in the vCont packet along
7158 with previous actions. If not, send what we've got so far and
7159 start a new vCont packet. */
7160 size_t rsize
= endp
- buf
;
7161 if (rsize
> m_endp
- m_p
)
7166 /* Should now fit. */
7167 gdb_assert (rsize
<= m_endp
- m_p
);
7170 memcpy (m_p
, buf
, rsize
);
7175 /* to_commit_resume implementation. */
7178 remote_target::commit_resumed ()
7180 /* If connected in all-stop mode, we'd send the remote resume
7181 request directly from remote_resume. Likewise if
7182 reverse-debugging, as there are no defined vCont actions for
7183 reverse execution. */
7184 if (!target_is_non_stop_p () || ::execution_direction
== EXEC_REVERSE
)
7187 commit_requested_thread_options ();
7189 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
7190 instead of resuming all threads of each process individually.
7191 However, if any thread of a process must remain halted, we can't
7192 send wildcard resumes and must send one action per thread.
7194 Care must be taken to not resume threads/processes the server
7195 side already told us are stopped, but the core doesn't know about
7196 yet, because the events are still in the vStopped notification
7199 #1 => vCont s:p1.1;c
7201 #3 <= %Stopped T05 p1.1
7206 #8 (infrun handles the stop for p1.1 and continues stepping)
7207 #9 => vCont s:p1.1;c
7209 The last vCont above would resume thread p1.2 by mistake, because
7210 the server has no idea that the event for p1.2 had not been
7213 The server side must similarly ignore resume actions for the
7214 thread that has a pending %Stopped notification (and any other
7215 threads with events pending), until GDB acks the notification
7216 with vStopped. Otherwise, e.g., the following case is
7219 #1 => g (or any other packet)
7221 #3 <= %Stopped T05 p1.2
7222 #4 => vCont s:p1.1;c
7225 Above, the server must not resume thread p1.2. GDB can't know
7226 that p1.2 stopped until it acks the %Stopped notification, and
7227 since from GDB's perspective all threads should be running, it
7230 Finally, special care must also be given to handling fork/vfork
7231 events. A (v)fork event actually tells us that two processes
7232 stopped -- the parent and the child. Until we follow the fork,
7233 we must not resume the child. Therefore, if we have a pending
7234 fork follow, we must not send a global wildcard resume action
7235 (vCont;c). We can still send process-wide wildcards though. */
7237 /* Start by assuming a global wildcard (vCont;c) is possible. */
7238 bool may_global_wildcard_vcont
= true;
7240 /* And assume every process is individually wildcard-able too. */
7241 for (inferior
*inf
: all_non_exited_inferiors (this))
7243 remote_inferior
*priv
= get_remote_inferior (inf
);
7245 priv
->may_wildcard_vcont
= true;
7248 /* Check for any pending events (not reported or processed yet) and
7249 disable process and global wildcard resumes appropriately. */
7250 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont
);
7252 bool any_pending_vcont_resume
= false;
7254 for (thread_info
*tp
: all_non_exited_threads (this))
7256 remote_thread_info
*priv
= get_remote_thread_info (tp
);
7258 /* If a thread of a process is not meant to be resumed, then we
7259 can't wildcard that process. */
7260 if (priv
->get_resume_state () == resume_state::NOT_RESUMED
)
7262 get_remote_inferior (tp
->inf
)->may_wildcard_vcont
= false;
7264 /* And if we can't wildcard a process, we can't wildcard
7265 everything either. */
7266 may_global_wildcard_vcont
= false;
7270 if (priv
->get_resume_state () == resume_state::RESUMED_PENDING_VCONT
)
7271 any_pending_vcont_resume
= true;
7273 /* If a thread is the parent of an unfollowed fork/vfork/clone,
7274 then we can't do a global wildcard, as that would resume the
7276 if (thread_pending_child_status (tp
) != nullptr)
7277 may_global_wildcard_vcont
= false;
7280 /* We didn't have any resumed thread pending a vCont resume, so nothing to
7282 if (!any_pending_vcont_resume
)
7285 /* Now let's build the vCont packet(s). Actions must be appended
7286 from narrower to wider scopes (thread -> process -> global). If
7287 we end up with too many actions for a single packet vcont_builder
7288 flushes the current vCont packet to the remote side and starts a
7290 struct vcont_builder
vcont_builder (this);
7292 /* Threads first. */
7293 for (thread_info
*tp
: all_non_exited_threads (this))
7295 remote_thread_info
*remote_thr
= get_remote_thread_info (tp
);
7297 /* If the thread was previously vCont-resumed, no need to send a specific
7298 action for it. If we didn't receive a resume request for it, don't
7299 send an action for it either. */
7300 if (remote_thr
->get_resume_state () != resume_state::RESUMED_PENDING_VCONT
)
7303 gdb_assert (!thread_is_in_step_over_chain (tp
));
7305 /* We should never be commit-resuming a thread that has a stop reply.
7306 Otherwise, we would end up reporting a stop event for a thread while
7307 it is running on the remote target. */
7308 remote_state
*rs
= get_remote_state ();
7309 for (const auto &stop_reply
: rs
->stop_reply_queue
)
7310 gdb_assert (stop_reply
->ptid
!= tp
->ptid
);
7312 const resumed_pending_vcont_info
&info
7313 = remote_thr
->resumed_pending_vcont_info ();
7315 /* Check if we need to send a specific action for this thread. If not,
7316 it will be included in a wildcard resume instead. */
7317 if (info
.step
|| info
.sig
!= GDB_SIGNAL_0
7318 || !get_remote_inferior (tp
->inf
)->may_wildcard_vcont
)
7319 vcont_builder
.push_action (tp
->ptid
, info
.step
, info
.sig
);
7321 remote_thr
->set_resumed ();
7324 /* Now check whether we can send any process-wide wildcard. This is
7325 to avoid sending a global wildcard in the case nothing is
7326 supposed to be resumed. */
7327 bool any_process_wildcard
= false;
7329 for (inferior
*inf
: all_non_exited_inferiors (this))
7331 if (get_remote_inferior (inf
)->may_wildcard_vcont
)
7333 any_process_wildcard
= true;
7338 if (any_process_wildcard
)
7340 /* If all processes are wildcard-able, then send a single "c"
7341 action, otherwise, send an "all (-1) threads of process"
7342 continue action for each running process, if any. */
7343 if (may_global_wildcard_vcont
)
7345 vcont_builder
.push_action (minus_one_ptid
,
7346 false, GDB_SIGNAL_0
);
7350 for (inferior
*inf
: all_non_exited_inferiors (this))
7352 if (get_remote_inferior (inf
)->may_wildcard_vcont
)
7354 vcont_builder
.push_action (ptid_t (inf
->pid
),
7355 false, GDB_SIGNAL_0
);
7361 vcont_builder
.flush ();
7364 /* Implementation of target_has_pending_events. */
7367 remote_target::has_pending_events ()
7369 if (target_can_async_p ())
7371 remote_state
*rs
= get_remote_state ();
7373 if (rs
->async_event_handler_marked ())
7376 /* Note that BUFCNT can be negative, indicating sticky
7378 if (rs
->remote_desc
->bufcnt
!= 0)
7386 /* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
7387 thread, all threads of a remote process, or all threads of all
7391 remote_target::remote_stop_ns (ptid_t ptid
)
7393 struct remote_state
*rs
= get_remote_state ();
7394 char *p
= rs
->buf
.data ();
7395 char *endp
= p
+ get_remote_packet_size ();
7397 /* If any thread that needs to stop was resumed but pending a vCont
7398 resume, generate a phony stop_reply. However, first check
7399 whether the thread wasn't resumed with a signal. Generating a
7400 phony stop in that case would result in losing the signal. */
7401 bool needs_commit
= false;
7402 for (thread_info
*tp
: all_non_exited_threads (this, ptid
))
7404 remote_thread_info
*remote_thr
= get_remote_thread_info (tp
);
7406 if (remote_thr
->get_resume_state ()
7407 == resume_state::RESUMED_PENDING_VCONT
)
7409 const resumed_pending_vcont_info
&info
7410 = remote_thr
->resumed_pending_vcont_info ();
7411 if (info
.sig
!= GDB_SIGNAL_0
)
7413 /* This signal must be forwarded to the inferior. We
7414 could commit-resume just this thread, but its simpler
7415 to just commit-resume everything. */
7416 needs_commit
= true;
7425 for (thread_info
*tp
: all_non_exited_threads (this, ptid
))
7427 remote_thread_info
*remote_thr
= get_remote_thread_info (tp
);
7429 if (remote_thr
->get_resume_state ()
7430 == resume_state::RESUMED_PENDING_VCONT
)
7432 remote_debug_printf ("Enqueueing phony stop reply for thread pending "
7433 "vCont-resume (%d, %ld, %s)", tp
->ptid
.pid(),
7435 pulongest (tp
->ptid
.tid ()));
7437 /* Check that the thread wasn't resumed with a signal.
7438 Generating a phony stop would result in losing the
7440 const resumed_pending_vcont_info
&info
7441 = remote_thr
->resumed_pending_vcont_info ();
7442 gdb_assert (info
.sig
== GDB_SIGNAL_0
);
7444 stop_reply_up sr
= std::make_unique
<stop_reply
> ();
7445 sr
->ptid
= tp
->ptid
;
7447 sr
->ws
.set_stopped (GDB_SIGNAL_0
);
7448 sr
->arch
= tp
->inf
->arch ();
7449 sr
->stop_reason
= TARGET_STOPPED_BY_NO_REASON
;
7450 sr
->watch_data_address
= 0;
7452 this->push_stop_reply (std::move (sr
));
7454 /* Pretend that this thread was actually resumed on the
7455 remote target, then stopped. If we leave it in the
7456 RESUMED_PENDING_VCONT state and the commit_resumed
7457 method is called while the stop reply is still in the
7458 queue, we'll end up reporting a stop event to the core
7459 for that thread while it is running on the remote
7460 target... that would be bad. */
7461 remote_thr
->set_resumed ();
7465 if (!rs
->supports_vCont
.t
)
7466 error (_("Remote server does not support stopping threads"));
7468 if (ptid
== minus_one_ptid
7469 || (!m_features
.remote_multi_process_p () && ptid
.is_pid ()))
7470 p
+= xsnprintf (p
, endp
- p
, "vCont;t");
7475 p
+= xsnprintf (p
, endp
- p
, "vCont;t:");
7478 /* All (-1) threads of process. */
7479 nptid
= ptid_t (ptid
.pid (), -1);
7482 /* Small optimization: if we already have a stop reply for
7483 this thread, no use in telling the stub we want this
7485 if (peek_stop_reply (ptid
))
7491 write_ptid (p
, endp
, nptid
);
7494 /* In non-stop, we get an immediate OK reply. The stop reply will
7495 come in asynchronously by notification. */
7498 if (strcmp (rs
->buf
.data (), "OK") != 0)
7499 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid
).c_str (),
7503 /* All-stop version of target_interrupt. Sends a break or a ^C to
7504 interrupt the remote target. It is undefined which thread of which
7505 process reports the interrupt. */
7508 remote_target::remote_interrupt_as ()
7510 struct remote_state
*rs
= get_remote_state ();
7512 rs
->ctrlc_pending_p
= 1;
7514 /* If the inferior is stopped already, but the core didn't know
7515 about it yet, just ignore the request. The pending stop events
7516 will be collected in remote_wait. */
7517 if (stop_reply_queue_length () > 0)
7520 /* Send interrupt_sequence to remote target. */
7521 send_interrupt_sequence ();
7524 /* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
7525 the remote target. It is undefined which thread of which process
7526 reports the interrupt. Throws an error if the packet is not
7527 supported by the server. */
7530 remote_target::remote_interrupt_ns ()
7532 struct remote_state
*rs
= get_remote_state ();
7533 char *p
= rs
->buf
.data ();
7534 char *endp
= p
+ get_remote_packet_size ();
7536 xsnprintf (p
, endp
- p
, "vCtrlC");
7538 /* In non-stop, we get an immediate OK reply. The stop reply will
7539 come in asynchronously by notification. */
7543 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_vCtrlC
);
7544 switch (result
.status ())
7548 case PACKET_UNKNOWN
:
7549 error (_("No support for interrupting the remote target."));
7551 error (_("Interrupting target failed: %s"), result
.err_msg ());
7555 /* Implement the to_stop function for the remote targets. */
7558 remote_target::stop (ptid_t ptid
)
7560 REMOTE_SCOPED_DEBUG_ENTER_EXIT
;
7562 if (target_is_non_stop_p ())
7563 remote_stop_ns (ptid
);
7566 /* We don't currently have a way to transparently pause the
7567 remote target in all-stop mode. Interrupt it instead. */
7568 remote_interrupt_as ();
7572 /* Implement the to_interrupt function for the remote targets. */
7575 remote_target::interrupt ()
7577 REMOTE_SCOPED_DEBUG_ENTER_EXIT
;
7579 if (target_is_non_stop_p ())
7580 remote_interrupt_ns ();
7582 remote_interrupt_as ();
7585 /* Implement the to_pass_ctrlc function for the remote targets. */
7588 remote_target::pass_ctrlc ()
7590 REMOTE_SCOPED_DEBUG_ENTER_EXIT
;
7592 struct remote_state
*rs
= get_remote_state ();
7594 /* If we're starting up, we're not fully synced yet. Quit
7596 if (rs
->starting_up
)
7598 /* If ^C has already been sent once, offer to disconnect. */
7599 else if (rs
->ctrlc_pending_p
)
7602 target_interrupt ();
7605 /* Ask the user what to do when an interrupt is received. */
7608 remote_target::interrupt_query ()
7610 struct remote_state
*rs
= get_remote_state ();
7612 if (rs
->waiting_for_stop_reply
&& rs
->ctrlc_pending_p
)
7614 if (query (_("The target is not responding to interrupt requests.\n"
7615 "Stop debugging it? ")))
7617 remote_unpush_target (this);
7618 throw_error (TARGET_CLOSE_ERROR
, _("Disconnected from target."));
7623 if (query (_("Interrupted while waiting for the program.\n"
7624 "Give up waiting? ")))
7629 /* Enable/disable target terminal ownership. Most targets can use
7630 terminal groups to control terminal ownership. Remote targets are
7631 different in that explicit transfer of ownership to/from GDB/target
7635 remote_target::terminal_inferior ()
7637 /* NOTE: At this point we could also register our selves as the
7638 recipient of all input. Any characters typed could then be
7639 passed on down to the target. */
7643 remote_target::terminal_ours ()
7648 remote_console_output (const char *msg
, ui_file
*stream
)
7652 for (p
= msg
; p
[0] && p
[1]; p
+= 2)
7655 char c
= fromhex (p
[0]) * 16 + fromhex (p
[1]);
7664 /* Return the length of the stop reply queue. */
7667 remote_target::stop_reply_queue_length ()
7669 remote_state
*rs
= get_remote_state ();
7670 return rs
->stop_reply_queue
.size ();
7674 remote_notif_stop_parse (remote_target
*remote
,
7675 const notif_client
*self
, const char *buf
,
7676 struct notif_event
*event
)
7678 remote
->remote_parse_stop_reply (buf
, (struct stop_reply
*) event
);
7682 remote_notif_stop_ack (remote_target
*remote
,
7683 const notif_client
*self
, const char *buf
,
7684 notif_event_up event
)
7686 stop_reply_up stop_reply
= as_stop_reply_up (std::move (event
));
7689 putpkt (remote
, self
->ack_command
);
7691 /* Kind can be TARGET_WAITKIND_IGNORE if we have meanwhile discarded
7692 the notification. It was left in the queue because we need to
7693 acknowledge it and pull the rest of the notifications out. */
7694 if (stop_reply
->ws
.kind () != TARGET_WAITKIND_IGNORE
)
7695 remote
->push_stop_reply (std::move (stop_reply
));
7699 remote_notif_stop_can_get_pending_events (remote_target
*remote
,
7700 const notif_client
*self
)
7702 /* We can't get pending events in remote_notif_process for
7703 notification stop, and we have to do this in remote_wait_ns
7704 instead. If we fetch all queued events from stub, remote stub
7705 may exit and we have no chance to process them back in
7707 remote_state
*rs
= remote
->get_remote_state ();
7708 rs
->mark_async_event_handler ();
7712 static notif_event_up
7713 remote_notif_stop_alloc_reply ()
7715 return notif_event_up (new struct stop_reply ());
7718 /* A client of notification Stop. */
7720 const notif_client notif_client_stop
=
7724 remote_notif_stop_parse
,
7725 remote_notif_stop_ack
,
7726 remote_notif_stop_can_get_pending_events
,
7727 remote_notif_stop_alloc_reply
,
7731 /* If CONTEXT contains any fork/vfork/clone child threads that have
7732 not been reported yet, remove them from the CONTEXT list. If such
7733 a thread exists it is because we are stopped at a fork/vfork/clone
7734 catchpoint and have not yet called follow_fork/follow_clone, which
7735 will set up the host-side data structures for the new child. */
7738 remote_target::remove_new_children (threads_listing_context
*context
)
7740 const notif_client
*notif
= ¬if_client_stop
;
7742 /* For any threads stopped at a (v)fork/clone event, remove the
7743 corresponding child threads from the CONTEXT list. */
7744 for (thread_info
*thread
: all_non_exited_threads (this))
7746 const target_waitstatus
*ws
= thread_pending_child_status (thread
);
7751 context
->remove_thread (ws
->child_ptid ());
7754 /* Check for any pending (v)fork/clone events (not reported or
7755 processed yet) in process PID and remove those child threads from
7756 the CONTEXT list as well. */
7757 remote_notif_get_pending_events (notif
);
7758 for (auto &event
: get_remote_state ()->stop_reply_queue
)
7759 if (is_new_child_status (event
->ws
.kind ()))
7760 context
->remove_thread (event
->ws
.child_ptid ());
7761 else if (event
->ws
.kind () == TARGET_WAITKIND_THREAD_EXITED
)
7762 context
->remove_thread (event
->ptid
);
7765 /* Check whether any event pending in the vStopped queue would prevent a
7766 global or process wildcard vCont action. Set *may_global_wildcard to
7767 false if we can't do a global wildcard (vCont;c), and clear the event
7768 inferior's may_wildcard_vcont flag if we can't do a process-wide
7769 wildcard resume (vCont;c:pPID.-1). */
7772 remote_target::check_pending_events_prevent_wildcard_vcont
7773 (bool *may_global_wildcard
)
7775 const notif_client
*notif
= ¬if_client_stop
;
7777 remote_notif_get_pending_events (notif
);
7778 for (auto &event
: get_remote_state ()->stop_reply_queue
)
7780 if (event
->ws
.kind () == TARGET_WAITKIND_NO_RESUMED
7781 || event
->ws
.kind () == TARGET_WAITKIND_NO_HISTORY
)
7784 if (event
->ws
.kind () == TARGET_WAITKIND_FORKED
7785 || event
->ws
.kind () == TARGET_WAITKIND_VFORKED
)
7786 *may_global_wildcard
= false;
7788 /* This may be the first time we heard about this process.
7789 Regardless, we must not do a global wildcard resume, otherwise
7790 we'd resume this process too. */
7791 *may_global_wildcard
= false;
7792 if (event
->ptid
!= null_ptid
)
7794 inferior
*inf
= find_inferior_ptid (this, event
->ptid
);
7796 get_remote_inferior (inf
)->may_wildcard_vcont
= false;
7801 /* Discard all pending stop replies of inferior INF. */
7804 remote_target::discard_pending_stop_replies (struct inferior
*inf
)
7806 struct remote_state
*rs
= get_remote_state ();
7807 struct remote_notif_state
*rns
= rs
->notif_state
;
7809 /* This function can be notified when an inferior exists. When the
7810 target is not remote, the notification state is NULL. */
7811 if (rs
->remote_desc
== NULL
)
7814 struct notif_event
*notif_event
7815 = rns
->pending_event
[notif_client_stop
.id
].get ();
7816 auto *reply
= static_cast<stop_reply
*> (notif_event
);
7818 /* Discard the in-flight notification. */
7819 if (reply
!= NULL
&& reply
->ptid
.pid () == inf
->pid
)
7821 /* Leave the notification pending, since the server expects that
7822 we acknowledge it with vStopped. But clear its contents, so
7823 that later on when we acknowledge it, we also discard it. */
7825 ("discarding in-flight notification: ptid: %s, ws: %s\n",
7826 reply
->ptid
.to_string().c_str(),
7827 reply
->ws
.to_string ().c_str ());
7828 reply
->ws
.set_ignore ();
7831 /* Discard the stop replies we have already pulled with
7833 auto iter
= std::remove_if (rs
->stop_reply_queue
.begin (),
7834 rs
->stop_reply_queue
.end (),
7835 [=] (const stop_reply_up
&event
)
7837 return event
->ptid
.pid () == inf
->pid
;
7839 for (auto it
= iter
; it
!= rs
->stop_reply_queue
.end (); ++it
)
7841 ("discarding queued stop reply: ptid: %s, ws: %s\n",
7842 (*it
)->ptid
.to_string().c_str(),
7843 (*it
)->ws
.to_string ().c_str ());
7844 rs
->stop_reply_queue
.erase (iter
, rs
->stop_reply_queue
.end ());
7847 /* Discard the stop replies for RS in stop_reply_queue. */
7850 remote_target::discard_pending_stop_replies_in_queue ()
7852 remote_state
*rs
= get_remote_state ();
7854 /* Discard the stop replies we have already pulled with
7856 auto iter
= std::remove_if (rs
->stop_reply_queue
.begin (),
7857 rs
->stop_reply_queue
.end (),
7858 [=] (const stop_reply_up
&event
)
7860 return event
->rs
== rs
;
7862 rs
->stop_reply_queue
.erase (iter
, rs
->stop_reply_queue
.end ());
7865 /* Remove the first reply in 'stop_reply_queue' which matches
7869 remote_target::remote_notif_remove_queued_reply (ptid_t ptid
)
7871 remote_state
*rs
= get_remote_state ();
7873 auto iter
= std::find_if (rs
->stop_reply_queue
.begin (),
7874 rs
->stop_reply_queue
.end (),
7875 [=] (const stop_reply_up
&event
)
7877 return event
->ptid
.matches (ptid
);
7879 stop_reply_up result
;
7880 if (iter
!= rs
->stop_reply_queue
.end ())
7882 result
= std::move (*iter
);
7883 rs
->stop_reply_queue
.erase (iter
);
7887 gdb_printf (gdb_stdlog
,
7888 "notif: discard queued event: 'Stop' in %s\n",
7889 ptid
.to_string ().c_str ());
7894 /* Look for a queued stop reply belonging to PTID. If one is found,
7895 remove it from the queue, and return it. Returns NULL if none is
7896 found. If there are still queued events left to process, tell the
7897 event loop to get back to target_wait soon. */
7900 remote_target::queued_stop_reply (ptid_t ptid
)
7902 remote_state
*rs
= get_remote_state ();
7903 stop_reply_up r
= remote_notif_remove_queued_reply (ptid
);
7905 if (!rs
->stop_reply_queue
.empty () && target_can_async_p ())
7907 /* There's still at least an event left. */
7908 rs
->mark_async_event_handler ();
7914 /* Push a fully parsed stop reply in the stop reply queue. Since we
7915 know that we now have at least one queued event left to pass to the
7916 core side, tell the event loop to get back to target_wait soon. */
7919 remote_target::push_stop_reply (stop_reply_up new_event
)
7921 remote_state
*rs
= get_remote_state ();
7922 rs
->stop_reply_queue
.push_back (std::move (new_event
));
7925 gdb_printf (gdb_stdlog
,
7926 "notif: push 'Stop' %s to queue %d\n",
7927 new_event
->ptid
.to_string ().c_str (),
7928 int (rs
->stop_reply_queue
.size ()));
7930 /* Mark the pending event queue only if async mode is currently enabled.
7931 If async mode is not currently enabled, then, if it later becomes
7932 enabled, and there are events in this queue, we will mark the event
7933 token at that point, see remote_target::async. */
7934 if (target_is_async_p ())
7935 rs
->mark_async_event_handler ();
7938 /* Returns true if we have a stop reply for PTID. */
7941 remote_target::peek_stop_reply (ptid_t ptid
)
7943 remote_state
*rs
= get_remote_state ();
7944 for (auto &event
: rs
->stop_reply_queue
)
7945 if (ptid
== event
->ptid
7946 && event
->ws
.kind () == TARGET_WAITKIND_STOPPED
)
7951 /* Helper for remote_parse_stop_reply. Return nonzero if the substring
7952 starting with P and ending with PEND matches PREFIX. */
7955 strprefix (const char *p
, const char *pend
, const char *prefix
)
7957 for ( ; p
< pend
; p
++, prefix
++)
7960 return *prefix
== '\0';
7963 /* Parse the stop reply in BUF. Either the function succeeds, and the
7964 result is stored in EVENT, or throws an error. */
7967 remote_target::remote_parse_stop_reply (const char *buf
, stop_reply
*event
)
7969 remote_arch_state
*rsa
= NULL
;
7974 event
->ptid
= null_ptid
;
7975 event
->rs
= get_remote_state ();
7976 event
->ws
.set_ignore ();
7977 event
->stop_reason
= TARGET_STOPPED_BY_NO_REASON
;
7978 event
->regcache
.clear ();
7983 case 'T': /* Status with PC, SP, FP, ... */
7984 /* Expedited reply, containing Signal, {regno, reg} repeat. */
7985 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
7987 n... = register number
7988 r... = register contents
7991 p
= &buf
[3]; /* after Txx */
7997 p1
= strchr (p
, ':');
7999 error (_("Malformed packet(a) (missing colon): %s\n\
8003 error (_("Malformed packet(a) (missing register number): %s\n\
8007 /* Some "registers" are actually extended stop information.
8008 Note if you're adding a new entry here: GDB 7.9 and
8009 earlier assume that all register "numbers" that start
8010 with an hex digit are real register numbers. Make sure
8011 the server only sends such a packet if it knows the
8012 client understands it. */
8014 if (strprefix (p
, p1
, "thread"))
8015 event
->ptid
= read_ptid (++p1
, &p
);
8016 else if (strprefix (p
, p1
, "syscall_entry"))
8020 p
= unpack_varlen_hex (++p1
, &sysno
);
8021 event
->ws
.set_syscall_entry ((int) sysno
);
8023 else if (strprefix (p
, p1
, "syscall_return"))
8027 p
= unpack_varlen_hex (++p1
, &sysno
);
8028 event
->ws
.set_syscall_return ((int) sysno
);
8030 else if (strprefix (p
, p1
, "watch")
8031 || strprefix (p
, p1
, "rwatch")
8032 || strprefix (p
, p1
, "awatch"))
8034 event
->stop_reason
= TARGET_STOPPED_BY_WATCHPOINT
;
8035 p
= unpack_varlen_hex (++p1
, &addr
);
8036 event
->watch_data_address
= (CORE_ADDR
) addr
;
8038 else if (strprefix (p
, p1
, "swbreak"))
8040 event
->stop_reason
= TARGET_STOPPED_BY_SW_BREAKPOINT
;
8042 /* Make sure the stub doesn't forget to indicate support
8044 if (m_features
.packet_support (PACKET_swbreak_feature
)
8046 error (_("Unexpected swbreak stop reason"));
8048 /* The value part is documented as "must be empty",
8049 though we ignore it, in case we ever decide to make
8050 use of it in a backward compatible way. */
8051 p
= strchrnul (p1
+ 1, ';');
8053 else if (strprefix (p
, p1
, "hwbreak"))
8055 event
->stop_reason
= TARGET_STOPPED_BY_HW_BREAKPOINT
;
8057 /* Make sure the stub doesn't forget to indicate support
8059 if (m_features
.packet_support (PACKET_hwbreak_feature
)
8061 error (_("Unexpected hwbreak stop reason"));
8064 p
= strchrnul (p1
+ 1, ';');
8066 else if (strprefix (p
, p1
, "library"))
8068 event
->ws
.set_loaded ();
8069 p
= strchrnul (p1
+ 1, ';');
8071 else if (strprefix (p
, p1
, "replaylog"))
8073 event
->ws
.set_no_history ();
8074 /* p1 will indicate "begin" or "end", but it makes
8075 no difference for now, so ignore it. */
8076 p
= strchrnul (p1
+ 1, ';');
8078 else if (strprefix (p
, p1
, "core"))
8082 p
= unpack_varlen_hex (++p1
, &c
);
8085 else if (strprefix (p
, p1
, "fork"))
8086 event
->ws
.set_forked (read_ptid (++p1
, &p
));
8087 else if (strprefix (p
, p1
, "vfork"))
8088 event
->ws
.set_vforked (read_ptid (++p1
, &p
));
8089 else if (strprefix (p
, p1
, "clone"))
8090 event
->ws
.set_thread_cloned (read_ptid (++p1
, &p
));
8091 else if (strprefix (p
, p1
, "vforkdone"))
8093 event
->ws
.set_vfork_done ();
8094 p
= strchrnul (p1
+ 1, ';');
8096 else if (strprefix (p
, p1
, "exec"))
8101 /* Determine the length of the execd pathname. */
8102 p
= unpack_varlen_hex (++p1
, &ignored
);
8103 pathlen
= (p
- p1
) / 2;
8105 /* Save the pathname for event reporting and for
8106 the next run command. */
8107 gdb::unique_xmalloc_ptr
<char> pathname
8108 ((char *) xmalloc (pathlen
+ 1));
8109 hex2bin (p1
, (gdb_byte
*) pathname
.get (), pathlen
);
8110 pathname
.get ()[pathlen
] = '\0';
8112 /* This is freed during event handling. */
8113 event
->ws
.set_execd (std::move (pathname
));
8115 /* Skip the registers included in this packet, since
8116 they may be for an architecture different from the
8117 one used by the original program. */
8120 else if (strprefix (p
, p1
, "create"))
8122 event
->ws
.set_thread_created ();
8123 p
= strchrnul (p1
+ 1, ';');
8132 p
= strchrnul (p1
+ 1, ';');
8137 /* Maybe a real ``P'' register number. */
8138 p_temp
= unpack_varlen_hex (p
, &pnum
);
8139 /* If the first invalid character is the colon, we got a
8140 register number. Otherwise, it's an unknown stop
8144 /* If we haven't parsed the event's thread yet, find
8145 it now, in order to find the architecture of the
8146 reported expedited registers. */
8147 if (event
->ptid
== null_ptid
)
8149 /* If there is no thread-id information then leave
8150 the event->ptid as null_ptid. Later in
8151 process_stop_reply we will pick a suitable
8153 const char *thr
= strstr (p1
+ 1, ";thread:");
8155 event
->ptid
= read_ptid (thr
+ strlen (";thread:"),
8162 = (event
->ptid
== null_ptid
8164 : find_inferior_ptid (this, event
->ptid
));
8165 /* If this is the first time we learn anything
8166 about this process, skip the registers
8167 included in this packet, since we don't yet
8168 know which architecture to use to parse them.
8169 We'll determine the architecture later when
8170 we process the stop reply and retrieve the
8171 target description, via
8172 remote_notice_new_inferior ->
8173 post_create_inferior. */
8176 p
= strchrnul (p1
+ 1, ';');
8181 event
->arch
= inf
->arch ();
8182 rsa
= event
->rs
->get_remote_arch_state (event
->arch
);
8186 = packet_reg_from_pnum (event
->arch
, rsa
, pnum
);
8187 cached_reg_t cached_reg
;
8190 error (_("Remote sent bad register number %s: %s\n\
8192 hex_string (pnum
), p
, buf
);
8194 cached_reg
.num
= reg
->regnum
;
8195 cached_reg
.data
.reset ((gdb_byte
*)
8196 xmalloc (register_size (event
->arch
,
8200 fieldsize
= hex2bin (p
, cached_reg
.data
.get (),
8201 register_size (event
->arch
, reg
->regnum
));
8203 if (fieldsize
< register_size (event
->arch
, reg
->regnum
))
8204 warning (_("Remote reply is too short: %s"), buf
);
8206 event
->regcache
.push_back (std::move (cached_reg
));
8210 /* Not a number. Silently skip unknown optional
8212 p
= strchrnul (p1
+ 1, ';');
8217 error (_("Remote register badly formatted: %s\nhere: %s"),
8222 if (event
->ws
.kind () != TARGET_WAITKIND_IGNORE
)
8226 case 'S': /* Old style status, just signal only. */
8230 sig
= (fromhex (buf
[1]) << 4) + fromhex (buf
[2]);
8231 if (GDB_SIGNAL_FIRST
<= sig
&& sig
< GDB_SIGNAL_LAST
)
8232 event
->ws
.set_stopped ((enum gdb_signal
) sig
);
8234 event
->ws
.set_stopped (GDB_SIGNAL_UNKNOWN
);
8237 case 'w': /* Thread exited. */
8241 p
= unpack_varlen_hex (&buf
[1], &value
);
8242 event
->ws
.set_thread_exited (value
);
8244 error (_("stop reply packet badly formatted: %s"), buf
);
8245 event
->ptid
= read_ptid (++p
, NULL
);
8248 case 'W': /* Target exited. */
8253 /* GDB used to accept only 2 hex chars here. Stubs should
8254 only send more if they detect GDB supports multi-process
8256 p
= unpack_varlen_hex (&buf
[1], &value
);
8260 /* The remote process exited. */
8261 event
->ws
.set_exited (value
);
8265 /* The remote process exited with a signal. */
8266 if (GDB_SIGNAL_FIRST
<= value
&& value
< GDB_SIGNAL_LAST
)
8267 event
->ws
.set_signalled ((enum gdb_signal
) value
);
8269 event
->ws
.set_signalled (GDB_SIGNAL_UNKNOWN
);
8272 /* If no process is specified, return null_ptid, and let the
8273 caller figure out the right process to use. */
8283 else if (startswith (p
, "process:"))
8287 p
+= sizeof ("process:") - 1;
8288 unpack_varlen_hex (p
, &upid
);
8292 error (_("unknown stop reply packet: %s"), buf
);
8295 error (_("unknown stop reply packet: %s"), buf
);
8296 event
->ptid
= ptid_t (pid
);
8300 event
->ws
.set_no_resumed ();
8301 event
->ptid
= minus_one_ptid
;
8306 /* When the stub wants to tell GDB about a new notification reply, it
8307 sends a notification (%Stop, for example). Those can come it at
8308 any time, hence, we have to make sure that any pending
8309 putpkt/getpkt sequence we're making is finished, before querying
8310 the stub for more events with the corresponding ack command
8311 (vStopped, for example). E.g., if we started a vStopped sequence
8312 immediately upon receiving the notification, something like this
8320 1.6) <-- (registers reply to step #1.3)
8322 Obviously, the reply in step #1.6 would be unexpected to a vStopped
8325 To solve this, whenever we parse a %Stop notification successfully,
8326 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
8327 doing whatever we were doing:
8333 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
8334 2.5) <-- (registers reply to step #2.3)
8336 Eventually after step #2.5, we return to the event loop, which
8337 notices there's an event on the
8338 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
8339 associated callback --- the function below. At this point, we're
8340 always safe to start a vStopped sequence. :
8343 2.7) <-- T05 thread:2
8349 remote_target::remote_notif_get_pending_events (const notif_client
*nc
)
8351 struct remote_state
*rs
= get_remote_state ();
8353 if (rs
->notif_state
->pending_event
[nc
->id
] != NULL
)
8356 gdb_printf (gdb_stdlog
,
8357 "notif: process: '%s' ack pending event\n",
8361 nc
->ack (this, nc
, rs
->buf
.data (),
8362 std::move (rs
->notif_state
->pending_event
[nc
->id
]));
8367 if (strcmp (rs
->buf
.data (), "OK") == 0)
8370 remote_notif_ack (this, nc
, rs
->buf
.data ());
8376 gdb_printf (gdb_stdlog
,
8377 "notif: process: '%s' no pending reply\n",
8382 /* Wrapper around remote_target::remote_notif_get_pending_events to
8383 avoid having to export the whole remote_target class. */
8386 remote_notif_get_pending_events (remote_target
*remote
, const notif_client
*nc
)
8388 remote
->remote_notif_get_pending_events (nc
);
8391 /* Called from process_stop_reply when the stop packet we are responding
8392 to didn't include a process-id or thread-id. STATUS is the stop event
8393 we are responding to.
8395 It is the task of this function to select a suitable thread (or process)
8396 and return its ptid, this is the thread (or process) we will assume the
8397 stop event came from.
8399 In some cases there isn't really any choice about which thread (or
8400 process) is selected, a basic remote with a single process containing a
8401 single thread might choose not to send any process-id or thread-id in
8402 its stop packets, this function will select and return the one and only
8405 However, if a target supports multiple threads (or processes) and still
8406 doesn't include a thread-id (or process-id) in its stop packet then
8407 first, this is a badly behaving target, and second, we're going to have
8408 to select a thread (or process) at random and use that. This function
8409 will print a warning to the user if it detects that there is the
8410 possibility that GDB is guessing which thread (or process) to
8413 Note that this is called before GDB fetches the updated thread list from the
8414 target. So it's possible for the stop reply to be ambiguous and for GDB to
8415 not realize it. For example, if there's initially one thread, the target
8416 spawns a second thread, and then sends a stop reply without an id that
8417 concerns the first thread. GDB will assume the stop reply is about the
8418 first thread - the only thread it knows about - without printing a warning.
8419 Anyway, if the remote meant for the stop reply to be about the second thread,
8420 then it would be really broken, because GDB doesn't know about that thread
8424 remote_target::select_thread_for_ambiguous_stop_reply
8425 (const target_waitstatus
&status
)
8427 REMOTE_SCOPED_DEBUG_ENTER_EXIT
;
8429 /* Some stop events apply to all threads in an inferior, while others
8430 only apply to a single thread. */
8431 bool process_wide_stop
8432 = (status
.kind () == TARGET_WAITKIND_EXITED
8433 || status
.kind () == TARGET_WAITKIND_SIGNALLED
);
8435 remote_debug_printf ("process_wide_stop = %d", process_wide_stop
);
8437 thread_info
*first_resumed_thread
= nullptr;
8438 bool ambiguous
= false;
8440 /* Consider all non-exited threads of the target, find the first resumed
8442 for (thread_info
*thr
: all_non_exited_threads (this))
8444 remote_thread_info
*remote_thr
= get_remote_thread_info (thr
);
8446 if (remote_thr
->get_resume_state () != resume_state::RESUMED
)
8449 if (first_resumed_thread
== nullptr)
8450 first_resumed_thread
= thr
;
8451 else if (!process_wide_stop
8452 || first_resumed_thread
->ptid
.pid () != thr
->ptid
.pid ())
8456 gdb_assert (first_resumed_thread
!= nullptr);
8458 remote_debug_printf ("first resumed thread is %s",
8459 pid_to_str (first_resumed_thread
->ptid
).c_str ());
8460 remote_debug_printf ("is this guess ambiguous? = %d", ambiguous
);
8462 /* Warn if the remote target is sending ambiguous stop replies. */
8465 static bool warned
= false;
8469 /* If you are seeing this warning then the remote target has
8470 stopped without specifying a thread-id, but the target
8471 does have multiple threads (or inferiors), and so GDB is
8472 having to guess which thread stopped.
8474 Examples of what might cause this are the target sending
8475 and 'S' stop packet, or a 'T' stop packet and not
8476 including a thread-id.
8478 Additionally, the target might send a 'W' or 'X packet
8479 without including a process-id, when the target has
8480 multiple running inferiors. */
8481 if (process_wide_stop
)
8482 warning (_("multi-inferior target stopped without "
8483 "sending a process-id, using first "
8484 "non-exited inferior"));
8486 warning (_("multi-threaded target stopped without "
8487 "sending a thread-id, using first "
8488 "non-exited thread"));
8493 /* If this is a stop for all threads then don't use a particular threads
8494 ptid, instead create a new ptid where only the pid field is set. */
8495 if (process_wide_stop
)
8496 return ptid_t (first_resumed_thread
->ptid
.pid ());
8498 return first_resumed_thread
->ptid
;
8501 /* Called when it is decided that STOP_REPLY holds the info of the
8502 event that is to be returned to the core. This function always
8503 destroys STOP_REPLY. */
8506 remote_target::process_stop_reply (stop_reply_up stop_reply
,
8507 struct target_waitstatus
*status
)
8509 *status
= stop_reply
->ws
;
8510 ptid_t ptid
= stop_reply
->ptid
;
8512 /* If no thread/process was reported by the stub then select a suitable
8514 if (ptid
== null_ptid
)
8515 ptid
= select_thread_for_ambiguous_stop_reply (*status
);
8516 gdb_assert (ptid
!= null_ptid
);
8518 if (status
->kind () != TARGET_WAITKIND_EXITED
8519 && status
->kind () != TARGET_WAITKIND_SIGNALLED
8520 && status
->kind () != TARGET_WAITKIND_NO_RESUMED
)
8522 remote_notice_new_inferior (ptid
, false);
8524 /* Expedited registers. */
8525 if (!stop_reply
->regcache
.empty ())
8527 /* 'w' stop replies don't cary expedited registers (which
8528 wouldn't make any sense for a thread that is gone
8530 gdb_assert (status
->kind () != TARGET_WAITKIND_THREAD_EXITED
);
8533 = get_thread_arch_regcache (find_inferior_ptid (this, ptid
), ptid
,
8536 for (cached_reg_t
®
: stop_reply
->regcache
)
8537 regcache
->raw_supply (reg
.num
, reg
.data
.get ());
8540 remote_thread_info
*remote_thr
= get_remote_thread_info (this, ptid
);
8541 remote_thr
->core
= stop_reply
->core
;
8542 remote_thr
->stop_reason
= stop_reply
->stop_reason
;
8543 remote_thr
->watch_data_address
= stop_reply
->watch_data_address
;
8545 if (target_is_non_stop_p ())
8547 /* If the target works in non-stop mode, a stop-reply indicates that
8548 only this thread stopped. */
8549 remote_thr
->set_not_resumed ();
8553 /* If the target works in all-stop mode, a stop-reply indicates that
8554 all the target's threads stopped. */
8555 for (thread_info
*tp
: all_non_exited_threads (this))
8556 get_remote_thread_info (tp
)->set_not_resumed ();
8563 /* The non-stop mode version of target_wait. */
8566 remote_target::wait_ns (ptid_t ptid
, struct target_waitstatus
*status
,
8567 target_wait_flags options
)
8569 struct remote_state
*rs
= get_remote_state ();
8571 bool is_notif
= false;
8573 /* If in non-stop mode, get out of getpkt even if a
8574 notification is received. */
8576 ret
= getpkt (&rs
->buf
, false /* forever */, &is_notif
);
8579 if (ret
!= -1 && !is_notif
)
8582 case 'E': /* Error of some sort. */
8583 /* We're out of sync with the target now. Did it continue
8584 or not? We can't tell which thread it was in non-stop,
8585 so just ignore this. */
8586 warning (_("Remote failure reply: %s"), rs
->buf
.data ());
8588 case 'O': /* Console output. */
8589 remote_console_output (&rs
->buf
[1], gdb_stdtarg
);
8592 warning (_("Invalid remote reply: %s"), rs
->buf
.data ());
8596 /* Acknowledge a pending stop reply that may have arrived in the
8598 if (rs
->notif_state
->pending_event
[notif_client_stop
.id
] != NULL
)
8599 remote_notif_get_pending_events (¬if_client_stop
);
8601 /* If indeed we noticed a stop reply, we're done. */
8602 stop_reply_up stop_reply
= queued_stop_reply (ptid
);
8603 if (stop_reply
!= NULL
)
8604 return process_stop_reply (std::move (stop_reply
), status
);
8606 /* Still no event. If we're just polling for an event, then
8607 return to the event loop. */
8608 if (options
& TARGET_WNOHANG
)
8610 status
->set_ignore ();
8611 return minus_one_ptid
;
8614 /* Otherwise do a blocking wait. */
8615 ret
= getpkt (&rs
->buf
, true /* forever */, &is_notif
);
8619 /* Return the first resumed thread. */
8622 first_remote_resumed_thread (remote_target
*target
)
8624 for (thread_info
*tp
: all_non_exited_threads (target
, minus_one_ptid
))
8630 /* Wait until the remote machine stops, then return, storing status in
8631 STATUS just as `wait' would. */
8634 remote_target::wait_as (ptid_t ptid
, target_waitstatus
*status
,
8635 target_wait_flags options
)
8637 struct remote_state
*rs
= get_remote_state ();
8638 ptid_t event_ptid
= null_ptid
;
8640 stop_reply_up stop_reply
;
8644 status
->set_ignore ();
8646 stop_reply
= queued_stop_reply (ptid
);
8647 if (stop_reply
!= NULL
)
8649 /* None of the paths that push a stop reply onto the queue should
8650 have set the waiting_for_stop_reply flag. */
8651 gdb_assert (!rs
->waiting_for_stop_reply
);
8652 event_ptid
= process_stop_reply (std::move (stop_reply
), status
);
8656 bool forever
= ((options
& TARGET_WNOHANG
) == 0
8657 && rs
->wait_forever_enabled_p
);
8659 if (!rs
->waiting_for_stop_reply
)
8661 status
->set_no_resumed ();
8662 return minus_one_ptid
;
8665 /* FIXME: cagney/1999-09-27: If we're in async mode we should
8666 _never_ wait for ever -> test on target_is_async_p().
8667 However, before we do that we need to ensure that the caller
8668 knows how to take the target into/out of async mode. */
8670 int ret
= getpkt (&rs
->buf
, forever
, &is_notif
);
8672 /* GDB gets a notification. Return to core as this event is
8674 if (ret
!= -1 && is_notif
)
8675 return minus_one_ptid
;
8677 if (ret
== -1 && (options
& TARGET_WNOHANG
) != 0)
8678 return minus_one_ptid
;
8680 buf
= rs
->buf
.data ();
8682 /* Assume that the target has acknowledged Ctrl-C unless we receive
8683 an 'F' or 'O' packet. */
8684 if (buf
[0] != 'F' && buf
[0] != 'O')
8685 rs
->ctrlc_pending_p
= 0;
8689 case 'E': /* Error of some sort. */
8690 /* We're out of sync with the target now. Did it continue or
8691 not? Not is more likely, so report a stop. */
8692 rs
->waiting_for_stop_reply
= 0;
8694 warning (_("Remote failure reply: %s"), buf
);
8695 status
->set_stopped (GDB_SIGNAL_0
);
8697 case 'F': /* File-I/O request. */
8698 /* GDB may access the inferior memory while handling the File-I/O
8699 request, but we don't want GDB accessing memory while waiting
8700 for a stop reply. See the comments in putpkt_binary. Set
8701 waiting_for_stop_reply to 0 temporarily. */
8702 rs
->waiting_for_stop_reply
= 0;
8703 remote_fileio_request (this, buf
, rs
->ctrlc_pending_p
);
8704 rs
->ctrlc_pending_p
= 0;
8705 /* GDB handled the File-I/O request, and the target is running
8706 again. Keep waiting for events. */
8707 rs
->waiting_for_stop_reply
= 1;
8709 case 'N': case 'T': case 'S': case 'X': case 'W': case 'w':
8711 /* There is a stop reply to handle. */
8712 rs
->waiting_for_stop_reply
= 0;
8715 = as_stop_reply_up (remote_notif_parse (this,
8719 event_ptid
= process_stop_reply (std::move (stop_reply
), status
);
8722 case 'O': /* Console output. */
8723 remote_console_output (buf
+ 1, gdb_stdtarg
);
8726 if (rs
->last_sent_signal
!= GDB_SIGNAL_0
)
8728 /* Zero length reply means that we tried 'S' or 'C' and the
8729 remote system doesn't support it. */
8730 target_terminal::ours_for_output ();
8732 ("Can't send signals to this remote system. %s not sent.\n",
8733 gdb_signal_to_name (rs
->last_sent_signal
));
8734 rs
->last_sent_signal
= GDB_SIGNAL_0
;
8735 target_terminal::inferior ();
8737 strcpy (buf
, rs
->last_sent_step
? "s" : "c");
8743 warning (_("Invalid remote reply: %s"), buf
);
8748 if (status
->kind () == TARGET_WAITKIND_NO_RESUMED
)
8749 return minus_one_ptid
;
8750 else if (status
->kind () == TARGET_WAITKIND_IGNORE
)
8752 /* Nothing interesting happened. If we're doing a non-blocking
8753 poll, we're done. Otherwise, go back to waiting. */
8754 if (options
& TARGET_WNOHANG
)
8755 return minus_one_ptid
;
8759 else if (status
->kind () != TARGET_WAITKIND_EXITED
8760 && status
->kind () != TARGET_WAITKIND_SIGNALLED
)
8762 if (event_ptid
!= null_ptid
)
8763 record_currthread (rs
, event_ptid
);
8765 event_ptid
= first_remote_resumed_thread (this);
8769 /* A process exit. Invalidate our notion of current thread. */
8770 record_currthread (rs
, minus_one_ptid
);
8771 /* It's possible that the packet did not include a pid. */
8772 if (event_ptid
== null_ptid
)
8773 event_ptid
= first_remote_resumed_thread (this);
8774 /* EVENT_PTID could still be NULL_PTID. Double-check. */
8775 if (event_ptid
== null_ptid
)
8776 event_ptid
= magic_null_ptid
;
8782 /* Wait until the remote machine stops, then return, storing status in
8783 STATUS just as `wait' would. */
8786 remote_target::wait (ptid_t ptid
, struct target_waitstatus
*status
,
8787 target_wait_flags options
)
8789 REMOTE_SCOPED_DEBUG_ENTER_EXIT
;
8791 remote_state
*rs
= get_remote_state ();
8793 /* Start by clearing the flag that asks for our wait method to be called,
8794 we'll mark it again at the end if needed. If the target is not in
8795 async mode then the async token should not be marked. */
8796 if (target_is_async_p ())
8797 rs
->clear_async_event_handler ();
8799 gdb_assert (!rs
->async_event_handler_marked ());
8803 if (target_is_non_stop_p ())
8804 event_ptid
= wait_ns (ptid
, status
, options
);
8806 event_ptid
= wait_as (ptid
, status
, options
);
8808 if (target_is_async_p ())
8810 /* If there are events left in the queue, or unacknowledged
8811 notifications, then tell the event loop to call us again. */
8812 if (!rs
->stop_reply_queue
.empty ()
8813 || rs
->notif_state
->pending_event
[notif_client_stop
.id
] != nullptr)
8814 rs
->mark_async_event_handler ();
8820 /* Fetch a single register using a 'p' packet. */
8823 remote_target::fetch_register_using_p (struct regcache
*regcache
,
8826 struct gdbarch
*gdbarch
= regcache
->arch ();
8827 struct remote_state
*rs
= get_remote_state ();
8829 gdb_byte
*regp
= (gdb_byte
*) alloca (register_size (gdbarch
, reg
->regnum
));
8832 if (m_features
.packet_support (PACKET_p
) == PACKET_DISABLE
)
8835 if (reg
->pnum
== -1)
8838 p
= rs
->buf
.data ();
8840 p
+= hexnumstr (p
, reg
->pnum
);
8845 buf
= rs
->buf
.data ();
8847 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_p
);
8848 switch (result
.status ())
8852 case PACKET_UNKNOWN
:
8855 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
8856 gdbarch_register_name (regcache
->arch (), reg
->regnum
),
8860 /* If this register is unfetchable, tell the regcache. */
8863 regcache
->raw_supply (reg
->regnum
, NULL
);
8867 /* Otherwise, parse and supply the value. */
8873 error (_("fetch_register_using_p: early buf termination"));
8875 regp
[i
++] = fromhex (p
[0]) * 16 + fromhex (p
[1]);
8878 regcache
->raw_supply (reg
->regnum
, regp
);
8882 /* Fetch the registers included in the target's 'g' packet. */
8885 remote_target::send_g_packet ()
8887 struct remote_state
*rs
= get_remote_state ();
8890 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "g");
8893 packet_result result
= packet_check_result (rs
->buf
, true);
8894 if (result
.status () == PACKET_ERROR
)
8895 error (_("Could not read registers; remote failure reply '%s'"),
8898 /* We can get out of synch in various cases. If the first character
8899 in the buffer is not a hex character, assume that has happened
8900 and try to fetch another packet to read. */
8901 while ((rs
->buf
[0] < '0' || rs
->buf
[0] > '9')
8902 && (rs
->buf
[0] < 'A' || rs
->buf
[0] > 'F')
8903 && (rs
->buf
[0] < 'a' || rs
->buf
[0] > 'f')
8904 && rs
->buf
[0] != 'x') /* New: unavailable register value. */
8906 remote_debug_printf ("Bad register packet; fetching a new packet");
8910 buf_len
= strlen (rs
->buf
.data ());
8912 /* Sanity check the received packet. */
8913 if (buf_len
% 2 != 0)
8914 error (_("Remote 'g' packet reply is of odd length: %s"), rs
->buf
.data ());
8920 remote_target::process_g_packet (struct regcache
*regcache
)
8922 struct gdbarch
*gdbarch
= regcache
->arch ();
8923 struct remote_state
*rs
= get_remote_state ();
8924 remote_arch_state
*rsa
= rs
->get_remote_arch_state (gdbarch
);
8929 buf_len
= strlen (rs
->buf
.data ());
8931 /* Further sanity checks, with knowledge of the architecture. */
8932 if (buf_len
> 2 * rsa
->sizeof_g_packet
)
8933 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8935 rsa
->sizeof_g_packet
, buf_len
/ 2,
8938 /* Save the size of the packet sent to us by the target. It is used
8939 as a heuristic when determining the max size of packets that the
8940 target can safely receive. */
8941 if (rsa
->actual_register_packet_size
== 0)
8942 rsa
->actual_register_packet_size
= buf_len
;
8944 /* If this is smaller than we guessed the 'g' packet would be,
8945 update our records. A 'g' reply that doesn't include a register's
8946 value implies either that the register is not available, or that
8947 the 'p' packet must be used. */
8948 if (buf_len
< 2 * rsa
->sizeof_g_packet
)
8950 long sizeof_g_packet
= buf_len
/ 2;
8952 for (i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
8954 long offset
= rsa
->regs
[i
].offset
;
8955 long reg_size
= register_size (gdbarch
, i
);
8957 if (rsa
->regs
[i
].pnum
== -1)
8960 if (offset
>= sizeof_g_packet
)
8961 rsa
->regs
[i
].in_g_packet
= 0;
8962 else if (offset
+ reg_size
> sizeof_g_packet
)
8963 error (_("Truncated register %d in remote 'g' packet"), i
);
8965 rsa
->regs
[i
].in_g_packet
= 1;
8968 /* Looks valid enough, we can assume this is the correct length
8969 for a 'g' packet. It's important not to adjust
8970 rsa->sizeof_g_packet if we have truncated registers otherwise
8971 this "if" won't be run the next time the method is called
8972 with a packet of the same size and one of the internal errors
8973 below will trigger instead. */
8974 rsa
->sizeof_g_packet
= sizeof_g_packet
;
8977 regs
= (char *) alloca (rsa
->sizeof_g_packet
);
8979 /* Unimplemented registers read as all bits zero. */
8980 memset (regs
, 0, rsa
->sizeof_g_packet
);
8982 /* Reply describes registers byte by byte, each byte encoded as two
8983 hex characters. Suck them all up, then supply them to the
8984 register cacheing/storage mechanism. */
8986 p
= rs
->buf
.data ();
8987 for (i
= 0; i
< rsa
->sizeof_g_packet
; i
++)
8989 if (p
[0] == 0 || p
[1] == 0)
8990 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
8991 internal_error (_("unexpected end of 'g' packet reply"));
8993 if (p
[0] == 'x' && p
[1] == 'x')
8994 regs
[i
] = 0; /* 'x' */
8996 regs
[i
] = fromhex (p
[0]) * 16 + fromhex (p
[1]);
9000 for (i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
9002 struct packet_reg
*r
= &rsa
->regs
[i
];
9003 long reg_size
= register_size (gdbarch
, i
);
9007 if ((r
->offset
+ reg_size
) * 2 > strlen (rs
->buf
.data ()))
9008 /* This shouldn't happen - we adjusted in_g_packet above. */
9009 internal_error (_("unexpected end of 'g' packet reply"));
9010 else if (rs
->buf
[r
->offset
* 2] == 'x')
9012 gdb_assert (r
->offset
* 2 < strlen (rs
->buf
.data ()));
9013 /* The register isn't available, mark it as such (at
9014 the same time setting the value to zero). */
9015 regcache
->raw_supply (r
->regnum
, NULL
);
9018 regcache
->raw_supply (r
->regnum
, regs
+ r
->offset
);
9024 remote_target::fetch_registers_using_g (struct regcache
*regcache
)
9027 process_g_packet (regcache
);
9030 /* Make the remote selected traceframe match GDB's selected
9034 remote_target::set_remote_traceframe ()
9037 struct remote_state
*rs
= get_remote_state ();
9039 if (rs
->remote_traceframe_number
== get_traceframe_number ())
9042 /* Avoid recursion, remote_trace_find calls us again. */
9043 rs
->remote_traceframe_number
= get_traceframe_number ();
9045 newnum
= target_trace_find (tfind_number
,
9046 get_traceframe_number (), 0, 0, NULL
);
9048 /* Should not happen. If it does, all bets are off. */
9049 if (newnum
!= get_traceframe_number ())
9050 warning (_("could not set remote traceframe"));
9054 remote_target::fetch_registers (struct regcache
*regcache
, int regnum
)
9056 struct gdbarch
*gdbarch
= regcache
->arch ();
9057 struct remote_state
*rs
= get_remote_state ();
9058 remote_arch_state
*rsa
= rs
->get_remote_arch_state (gdbarch
);
9061 set_remote_traceframe ();
9062 set_general_thread (regcache
->ptid ());
9066 packet_reg
*reg
= packet_reg_from_regnum (gdbarch
, rsa
, regnum
);
9068 gdb_assert (reg
!= NULL
);
9070 /* If this register might be in the 'g' packet, try that first -
9071 we are likely to read more than one register. If this is the
9072 first 'g' packet, we might be overly optimistic about its
9073 contents, so fall back to 'p'. */
9074 if (reg
->in_g_packet
)
9076 fetch_registers_using_g (regcache
);
9077 if (reg
->in_g_packet
)
9081 if (fetch_register_using_p (regcache
, reg
))
9084 /* This register is not available. */
9085 regcache
->raw_supply (reg
->regnum
, NULL
);
9090 fetch_registers_using_g (regcache
);
9092 for (i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
9093 if (!rsa
->regs
[i
].in_g_packet
)
9094 if (!fetch_register_using_p (regcache
, &rsa
->regs
[i
]))
9096 /* This register is not available. */
9097 regcache
->raw_supply (i
, NULL
);
9101 /* Prepare to store registers. Since we may send them all (using a
9102 'G' request), we have to read out the ones we don't want to change
9106 remote_target::prepare_to_store (struct regcache
*regcache
)
9108 struct remote_state
*rs
= get_remote_state ();
9109 remote_arch_state
*rsa
= rs
->get_remote_arch_state (regcache
->arch ());
9112 /* Make sure the entire registers array is valid. */
9113 switch (m_features
.packet_support (PACKET_P
))
9115 case PACKET_DISABLE
:
9116 case PACKET_SUPPORT_UNKNOWN
:
9117 /* Make sure all the necessary registers are cached. */
9118 for (i
= 0; i
< gdbarch_num_regs (regcache
->arch ()); i
++)
9119 if (rsa
->regs
[i
].in_g_packet
)
9120 regcache
->raw_update (rsa
->regs
[i
].regnum
);
9127 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
9128 packet was not recognized. */
9131 remote_target::store_register_using_P (const struct regcache
*regcache
,
9134 struct gdbarch
*gdbarch
= regcache
->arch ();
9135 struct remote_state
*rs
= get_remote_state ();
9136 /* Try storing a single register. */
9137 char *buf
= rs
->buf
.data ();
9138 gdb_byte
*regp
= (gdb_byte
*) alloca (register_size (gdbarch
, reg
->regnum
));
9141 if (m_features
.packet_support (PACKET_P
) == PACKET_DISABLE
)
9144 if (reg
->pnum
== -1)
9147 xsnprintf (buf
, get_remote_packet_size (), "P%s=", phex_nz (reg
->pnum
, 0));
9148 p
= buf
+ strlen (buf
);
9149 regcache
->raw_collect (reg
->regnum
, regp
);
9150 bin2hex (regp
, p
, register_size (gdbarch
, reg
->regnum
));
9154 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_P
);
9155 switch (result
.status ())
9160 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
9161 gdbarch_register_name (gdbarch
, reg
->regnum
), result
.err_msg ());
9162 case PACKET_UNKNOWN
:
9165 internal_error (_("Bad result from packet_ok"));
9169 /* Store register REGNUM, or all registers if REGNUM == -1, from the
9170 contents of the register cache buffer. FIXME: ignores errors. */
9173 remote_target::store_registers_using_G (const struct regcache
*regcache
)
9175 struct remote_state
*rs
= get_remote_state ();
9176 remote_arch_state
*rsa
= rs
->get_remote_arch_state (regcache
->arch ());
9180 /* Extract all the registers in the regcache copying them into a
9185 regs
= (gdb_byte
*) alloca (rsa
->sizeof_g_packet
);
9186 memset (regs
, 0, rsa
->sizeof_g_packet
);
9187 for (i
= 0; i
< gdbarch_num_regs (regcache
->arch ()); i
++)
9189 struct packet_reg
*r
= &rsa
->regs
[i
];
9192 regcache
->raw_collect (r
->regnum
, regs
+ r
->offset
);
9196 /* Command describes registers byte by byte,
9197 each byte encoded as two hex characters. */
9198 p
= rs
->buf
.data ();
9200 bin2hex (regs
, p
, rsa
->sizeof_g_packet
);
9203 packet_result pkt_status
= packet_check_result (rs
->buf
, true);
9204 if (pkt_status
.status () == PACKET_ERROR
)
9205 error (_("Could not write registers; remote failure reply '%s'"),
9206 pkt_status
.err_msg ());
9209 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
9210 of the register cache buffer. FIXME: ignores errors. */
9213 remote_target::store_registers (struct regcache
*regcache
, int regnum
)
9215 struct gdbarch
*gdbarch
= regcache
->arch ();
9216 struct remote_state
*rs
= get_remote_state ();
9217 remote_arch_state
*rsa
= rs
->get_remote_arch_state (gdbarch
);
9220 set_remote_traceframe ();
9221 set_general_thread (regcache
->ptid ());
9225 packet_reg
*reg
= packet_reg_from_regnum (gdbarch
, rsa
, regnum
);
9227 gdb_assert (reg
!= NULL
);
9229 /* Always prefer to store registers using the 'P' packet if
9230 possible; we often change only a small number of registers.
9231 Sometimes we change a larger number; we'd need help from a
9232 higher layer to know to use 'G'. */
9233 if (store_register_using_P (regcache
, reg
))
9236 /* For now, don't complain if we have no way to write the
9237 register. GDB loses track of unavailable registers too
9238 easily. Some day, this may be an error. We don't have
9239 any way to read the register, either... */
9240 if (!reg
->in_g_packet
)
9243 store_registers_using_G (regcache
);
9247 store_registers_using_G (regcache
);
9249 for (i
= 0; i
< gdbarch_num_regs (gdbarch
); i
++)
9250 if (!rsa
->regs
[i
].in_g_packet
)
9251 if (!store_register_using_P (regcache
, &rsa
->regs
[i
]))
9252 /* See above for why we do not issue an error here. */
9257 /* Return the number of hex digits in num. */
9260 hexnumlen (ULONGEST num
)
9264 for (i
= 0; num
!= 0; i
++)
9267 return std::max (i
, 1);
9270 /* Set BUF to the minimum number of hex digits representing NUM. */
9273 hexnumstr (char *buf
, ULONGEST num
)
9275 int len
= hexnumlen (num
);
9277 return hexnumnstr (buf
, num
, len
);
9281 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
9284 hexnumnstr (char *buf
, ULONGEST num
, int width
)
9290 for (i
= width
- 1; i
>= 0; i
--)
9292 buf
[i
] = "0123456789abcdef"[(num
& 0xf)];
9299 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
9302 remote_address_masked (CORE_ADDR addr
)
9304 unsigned int address_size
= remote_address_size
;
9306 /* If "remoteaddresssize" was not set, default to target address size. */
9308 address_size
= gdbarch_addr_bit (current_inferior ()->arch ());
9310 if (address_size
> 0
9311 && address_size
< (sizeof (ULONGEST
) * 8))
9313 /* Only create a mask when that mask can safely be constructed
9314 in a ULONGEST variable. */
9317 mask
= (mask
<< address_size
) - 1;
9323 /* Determine whether the remote target supports binary downloading.
9324 This is accomplished by sending a no-op memory write of zero length
9325 to the target at the specified address. It does not suffice to send
9326 the whole packet, since many stubs strip the eighth bit and
9327 subsequently compute a wrong checksum, which causes real havoc with
9330 NOTE: This can still lose if the serial line is not eight-bit
9331 clean. In cases like this, the user should clear "remote
9335 remote_target::check_binary_download (CORE_ADDR addr
)
9337 struct remote_state
*rs
= get_remote_state ();
9339 switch (m_features
.packet_support (PACKET_X
))
9341 case PACKET_DISABLE
:
9345 case PACKET_SUPPORT_UNKNOWN
:
9349 p
= rs
->buf
.data ();
9351 p
+= hexnumstr (p
, (ULONGEST
) addr
);
9353 p
+= hexnumstr (p
, (ULONGEST
) 0);
9357 putpkt_binary (rs
->buf
.data (), (int) (p
- rs
->buf
.data ()));
9360 if (rs
->buf
[0] == '\0')
9362 remote_debug_printf ("binary downloading NOT supported by target");
9363 m_features
.m_protocol_packets
[PACKET_X
].support
= PACKET_DISABLE
;
9367 remote_debug_printf ("binary downloading supported by target");
9368 m_features
.m_protocol_packets
[PACKET_X
].support
= PACKET_ENABLE
;
9375 /* Helper function to resize the payload in order to try to get a good
9376 alignment. We try to write an amount of data such that the next write will
9377 start on an address aligned on REMOTE_ALIGN_WRITES. */
9380 align_for_efficient_write (int todo
, CORE_ADDR memaddr
)
9382 return ((memaddr
+ todo
) & ~(REMOTE_ALIGN_WRITES
- 1)) - memaddr
;
9385 /* Write memory data directly to the remote machine.
9386 This does not inform the data cache; the data cache uses this.
9387 HEADER is the starting part of the packet.
9388 MEMADDR is the address in the remote memory space.
9389 MYADDR is the address of the buffer in our space.
9390 LEN_UNITS is the number of addressable units to write.
9391 UNIT_SIZE is the length in bytes of an addressable unit.
9392 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
9393 should send data as binary ('X'), or hex-encoded ('M').
9395 The function creates packet of the form
9396 <HEADER><ADDRESS>,<LENGTH>:<DATA>
9398 where encoding of <DATA> is terminated by PACKET_FORMAT.
9400 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
9403 Return the transferred status, error or OK (an
9404 'enum target_xfer_status' value). Save the number of addressable units
9405 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
9407 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
9408 exchange between gdb and the stub could look like (?? in place of the
9414 -> $M1000,3:eeeeffffeeee#??
9418 <- eeeeffffeeeedddd */
9421 remote_target::remote_write_bytes_aux (const char *header
, CORE_ADDR memaddr
,
9422 const gdb_byte
*myaddr
,
9425 ULONGEST
*xfered_len_units
,
9426 char packet_format
, int use_length
)
9428 struct remote_state
*rs
= get_remote_state ();
9434 int payload_capacity_bytes
;
9435 int payload_length_bytes
;
9437 if (packet_format
!= 'X' && packet_format
!= 'M')
9438 internal_error (_("remote_write_bytes_aux: bad packet format"));
9441 return TARGET_XFER_EOF
;
9443 payload_capacity_bytes
= get_memory_write_packet_size ();
9445 /* The packet buffer will be large enough for the payload;
9446 get_memory_packet_size ensures this. */
9449 /* Compute the size of the actual payload by subtracting out the
9450 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
9452 payload_capacity_bytes
-= strlen ("$,:#NN");
9454 /* The comma won't be used. */
9455 payload_capacity_bytes
+= 1;
9456 payload_capacity_bytes
-= strlen (header
);
9457 payload_capacity_bytes
-= hexnumlen (memaddr
);
9459 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
9461 strcat (rs
->buf
.data (), header
);
9462 p
= rs
->buf
.data () + strlen (header
);
9464 /* Compute a best guess of the number of bytes actually transfered. */
9465 if (packet_format
== 'X')
9467 /* Best guess at number of bytes that will fit. */
9468 todo_units
= std::min (len_units
,
9469 (ULONGEST
) payload_capacity_bytes
/ unit_size
);
9471 payload_capacity_bytes
-= hexnumlen (todo_units
);
9472 todo_units
= std::min (todo_units
, payload_capacity_bytes
/ unit_size
);
9476 /* Number of bytes that will fit. */
9478 = std::min (len_units
,
9479 (ULONGEST
) (payload_capacity_bytes
/ unit_size
) / 2);
9481 payload_capacity_bytes
-= hexnumlen (todo_units
);
9482 todo_units
= std::min (todo_units
,
9483 (payload_capacity_bytes
/ unit_size
) / 2);
9486 if (todo_units
<= 0)
9487 internal_error (_("minimum packet size too small to write data"));
9489 /* If we already need another packet, then try to align the end
9490 of this packet to a useful boundary. */
9491 if (todo_units
> 2 * REMOTE_ALIGN_WRITES
&& todo_units
< len_units
)
9492 todo_units
= align_for_efficient_write (todo_units
, memaddr
);
9494 /* Append "<memaddr>". */
9495 memaddr
= remote_address_masked (memaddr
);
9496 p
+= hexnumstr (p
, (ULONGEST
) memaddr
);
9503 /* Append the length and retain its location and size. It may need to be
9504 adjusted once the packet body has been created. */
9506 plenlen
= hexnumstr (p
, (ULONGEST
) todo_units
);
9514 /* Append the packet body. */
9515 if (packet_format
== 'X')
9517 /* Binary mode. Send target system values byte by byte, in
9518 increasing byte addresses. Only escape certain critical
9520 payload_length_bytes
=
9521 remote_escape_output (myaddr
, todo_units
, unit_size
, (gdb_byte
*) p
,
9522 &units_written
, payload_capacity_bytes
);
9524 /* If not all TODO units fit, then we'll need another packet. Make
9525 a second try to keep the end of the packet aligned. Don't do
9526 this if the packet is tiny. */
9527 if (units_written
< todo_units
&& units_written
> 2 * REMOTE_ALIGN_WRITES
)
9531 new_todo_units
= align_for_efficient_write (units_written
, memaddr
);
9533 if (new_todo_units
!= units_written
)
9534 payload_length_bytes
=
9535 remote_escape_output (myaddr
, new_todo_units
, unit_size
,
9536 (gdb_byte
*) p
, &units_written
,
9537 payload_capacity_bytes
);
9540 p
+= payload_length_bytes
;
9541 if (use_length
&& units_written
< todo_units
)
9543 /* Escape chars have filled up the buffer prematurely,
9544 and we have actually sent fewer units than planned.
9545 Fix-up the length field of the packet. Use the same
9546 number of characters as before. */
9547 plen
+= hexnumnstr (plen
, (ULONGEST
) units_written
,
9549 *plen
= ':'; /* overwrite \0 from hexnumnstr() */
9554 /* Normal mode: Send target system values byte by byte, in
9555 increasing byte addresses. Each byte is encoded as a two hex
9557 p
+= 2 * bin2hex (myaddr
, p
, todo_units
* unit_size
);
9558 units_written
= todo_units
;
9561 putpkt_binary (rs
->buf
.data (), (int) (p
- rs
->buf
.data ()));
9564 if (rs
->buf
[0] == 'E')
9565 return TARGET_XFER_E_IO
;
9567 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
9568 send fewer units than we'd planned. */
9569 *xfered_len_units
= (ULONGEST
) units_written
;
9570 return (*xfered_len_units
!= 0) ? TARGET_XFER_OK
: TARGET_XFER_EOF
;
9573 /* Write memory data directly to the remote machine.
9574 This does not inform the data cache; the data cache uses this.
9575 MEMADDR is the address in the remote memory space.
9576 MYADDR is the address of the buffer in our space.
9577 LEN is the number of bytes.
9579 Return the transferred status, error or OK (an
9580 'enum target_xfer_status' value). Save the number of bytes
9581 transferred in *XFERED_LEN. Only transfer a single packet. */
9584 remote_target::remote_write_bytes (CORE_ADDR memaddr
, const gdb_byte
*myaddr
,
9585 ULONGEST len
, int unit_size
,
9586 ULONGEST
*xfered_len
)
9588 const char *packet_format
= NULL
;
9590 /* Check whether the target supports binary download. */
9591 check_binary_download (memaddr
);
9593 switch (m_features
.packet_support (PACKET_X
))
9596 packet_format
= "X";
9598 case PACKET_DISABLE
:
9599 packet_format
= "M";
9601 case PACKET_SUPPORT_UNKNOWN
:
9602 internal_error (_("remote_write_bytes: bad internal state"));
9604 internal_error (_("bad switch"));
9607 return remote_write_bytes_aux (packet_format
,
9608 memaddr
, myaddr
, len
, unit_size
, xfered_len
,
9609 packet_format
[0], 1);
9612 /* Read memory data directly from the remote machine.
9613 This does not use the data cache; the data cache uses this.
9614 MEMADDR is the address in the remote memory space.
9615 MYADDR is the address of the buffer in our space.
9616 LEN_UNITS is the number of addressable memory units to read..
9617 UNIT_SIZE is the length in bytes of an addressable unit.
9619 Return the transferred status, error or OK (an
9620 'enum target_xfer_status' value). Save the number of bytes
9621 transferred in *XFERED_LEN_UNITS.
9623 See the comment of remote_write_bytes_aux for an example of
9624 memory read/write exchange between gdb and the stub. */
9627 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr
, gdb_byte
*myaddr
,
9629 int unit_size
, ULONGEST
*xfered_len_units
)
9631 struct remote_state
*rs
= get_remote_state ();
9632 int buf_size_bytes
; /* Max size of packet output buffer. */
9637 buf_size_bytes
= get_memory_read_packet_size ();
9638 /* The packet buffer will be large enough for the payload;
9639 get_memory_packet_size ensures this. */
9641 /* Number of units that will fit. */
9642 todo_units
= std::min (len_units
,
9643 (ULONGEST
) (buf_size_bytes
/ unit_size
) / 2);
9645 /* Construct "m"<memaddr>","<len>". */
9646 memaddr
= remote_address_masked (memaddr
);
9647 p
= rs
->buf
.data ();
9649 p
+= hexnumstr (p
, (ULONGEST
) memaddr
);
9651 p
+= hexnumstr (p
, (ULONGEST
) todo_units
);
9655 packet_result result
= packet_check_result (rs
->buf
, false);
9656 if (result
.status () == PACKET_ERROR
)
9657 return TARGET_XFER_E_IO
;
9658 /* Reply describes memory byte by byte, each byte encoded as two hex
9660 p
= rs
->buf
.data ();
9661 decoded_bytes
= hex2bin (p
, myaddr
, todo_units
* unit_size
);
9662 /* Return what we have. Let higher layers handle partial reads. */
9663 *xfered_len_units
= (ULONGEST
) (decoded_bytes
/ unit_size
);
9664 return (*xfered_len_units
!= 0) ? TARGET_XFER_OK
: TARGET_XFER_EOF
;
9667 /* Using the set of read-only target sections of remote, read live
9670 For interface/parameters/return description see target.h,
9674 remote_target::remote_xfer_live_readonly_partial (gdb_byte
*readbuf
,
9678 ULONGEST
*xfered_len
)
9680 const struct target_section
*secp
;
9682 secp
= target_section_by_addr (this, memaddr
);
9684 && (bfd_section_flags (secp
->the_bfd_section
) & SEC_READONLY
))
9686 ULONGEST memend
= memaddr
+ len
;
9688 const std::vector
<target_section
> *table
9689 = target_get_section_table (this);
9690 for (const target_section
&p
: *table
)
9692 if (memaddr
>= p
.addr
)
9694 if (memend
<= p
.endaddr
)
9696 /* Entire transfer is within this section. */
9697 return remote_read_bytes_1 (memaddr
, readbuf
, len
, unit_size
,
9700 else if (memaddr
>= p
.endaddr
)
9702 /* This section ends before the transfer starts. */
9707 /* This section overlaps the transfer. Just do half. */
9708 len
= p
.endaddr
- memaddr
;
9709 return remote_read_bytes_1 (memaddr
, readbuf
, len
, unit_size
,
9716 return TARGET_XFER_EOF
;
9719 /* Similar to remote_read_bytes_1, but it reads from the remote stub
9720 first if the requested memory is unavailable in traceframe.
9721 Otherwise, fall back to remote_read_bytes_1. */
9724 remote_target::remote_read_bytes (CORE_ADDR memaddr
,
9725 gdb_byte
*myaddr
, ULONGEST len
, int unit_size
,
9726 ULONGEST
*xfered_len
)
9729 return TARGET_XFER_EOF
;
9731 if (get_traceframe_number () != -1)
9733 std::vector
<mem_range
> available
;
9735 /* If we fail to get the set of available memory, then the
9736 target does not support querying traceframe info, and so we
9737 attempt reading from the traceframe anyway (assuming the
9738 target implements the old QTro packet then). */
9739 if (traceframe_available_memory (&available
, memaddr
, len
))
9741 if (available
.empty () || available
[0].start
!= memaddr
)
9743 enum target_xfer_status res
;
9745 /* Don't read into the traceframe's available
9747 if (!available
.empty ())
9749 LONGEST oldlen
= len
;
9751 len
= available
[0].start
- memaddr
;
9752 gdb_assert (len
<= oldlen
);
9755 /* This goes through the topmost target again. */
9756 res
= remote_xfer_live_readonly_partial (myaddr
, memaddr
,
9757 len
, unit_size
, xfered_len
);
9758 if (res
== TARGET_XFER_OK
)
9759 return TARGET_XFER_OK
;
9762 /* No use trying further, we know some memory starting
9763 at MEMADDR isn't available. */
9765 return (*xfered_len
!= 0) ?
9766 TARGET_XFER_UNAVAILABLE
: TARGET_XFER_EOF
;
9770 /* Don't try to read more than how much is available, in
9771 case the target implements the deprecated QTro packet to
9772 cater for older GDBs (the target's knowledge of read-only
9773 sections may be outdated by now). */
9774 len
= available
[0].length
;
9778 return remote_read_bytes_1 (memaddr
, myaddr
, len
, unit_size
, xfered_len
);
9783 /* Sends a packet with content determined by the printf format string
9784 FORMAT and the remaining arguments, then gets the reply. Returns
9785 whether the packet was a success, a failure, or unknown. */
9788 remote_target::remote_send_printf (const char *format
, ...)
9790 struct remote_state
*rs
= get_remote_state ();
9791 int max_size
= get_remote_packet_size ();
9794 va_start (ap
, format
);
9797 int size
= vsnprintf (rs
->buf
.data (), max_size
, format
, ap
);
9801 if (size
>= max_size
)
9802 internal_error (_("Too long remote packet."));
9804 if (putpkt (rs
->buf
) < 0)
9805 error (_("Communication problem with target."));
9810 return packet_check_result (rs
->buf
, true).status ();
9813 /* Flash writing can take quite some time. We'll set
9814 effectively infinite timeout for flash operations.
9815 In future, we'll need to decide on a better approach. */
9816 static const int remote_flash_timeout
= 1000;
9819 remote_target::flash_erase (ULONGEST address
, LONGEST length
)
9821 int addr_size
= gdbarch_addr_bit (current_inferior ()->arch ()) / 8;
9822 enum packet_status ret
;
9823 scoped_restore restore_timeout
9824 = make_scoped_restore (&remote_timeout
, remote_flash_timeout
);
9826 ret
= remote_send_printf ("vFlashErase:%s,%s",
9827 phex (address
, addr_size
),
9831 case PACKET_UNKNOWN
:
9832 error (_("Remote target does not support flash erase"));
9834 error (_("Error erasing flash with vFlashErase packet"));
9841 remote_target::remote_flash_write (ULONGEST address
,
9842 ULONGEST length
, ULONGEST
*xfered_len
,
9843 const gdb_byte
*data
)
9845 scoped_restore restore_timeout
9846 = make_scoped_restore (&remote_timeout
, remote_flash_timeout
);
9847 return remote_write_bytes_aux ("vFlashWrite:", address
, data
, length
, 1,
9852 remote_target::flash_done ()
9856 scoped_restore restore_timeout
9857 = make_scoped_restore (&remote_timeout
, remote_flash_timeout
);
9859 ret
= remote_send_printf ("vFlashDone");
9863 case PACKET_UNKNOWN
:
9864 error (_("Remote target does not support vFlashDone"));
9866 error (_("Error finishing flash operation"));
9873 /* Stuff for dealing with the packets which are part of this protocol.
9874 See comment at top of file for details. */
9876 /* Read a single character from the remote end. The current quit
9877 handler is overridden to avoid quitting in the middle of packet
9878 sequence, as that would break communication with the remote server.
9879 See remote_serial_quit_handler for more detail. */
9882 remote_target::readchar (int timeout
)
9885 struct remote_state
*rs
= get_remote_state ();
9889 scoped_restore restore_quit_target
9890 = make_scoped_restore (&curr_quit_handler_target
, this);
9891 scoped_restore restore_quit
9892 = make_scoped_restore (&quit_handler
, ::remote_serial_quit_handler
);
9894 rs
->got_ctrlc_during_io
= 0;
9896 ch
= serial_readchar (rs
->remote_desc
, timeout
);
9898 if (rs
->got_ctrlc_during_io
)
9901 catch (const gdb_exception_error
&ex
)
9903 remote_unpush_target (this);
9904 throw_error (TARGET_CLOSE_ERROR
,
9905 _("Remote communication error. "
9906 "Target disconnected: %s"),
9913 if (ch
== SERIAL_EOF
)
9915 remote_unpush_target (this);
9916 throw_error (TARGET_CLOSE_ERROR
, _("Remote connection closed"));
9922 /* Wrapper for serial_write that closes the target and throws if
9923 writing fails. The current quit handler is overridden to avoid
9924 quitting in the middle of packet sequence, as that would break
9925 communication with the remote server. See
9926 remote_serial_quit_handler for more detail. */
9929 remote_target::remote_serial_write (const char *str
, int len
)
9931 struct remote_state
*rs
= get_remote_state ();
9933 scoped_restore restore_quit_target
9934 = make_scoped_restore (&curr_quit_handler_target
, this);
9935 scoped_restore restore_quit
9936 = make_scoped_restore (&quit_handler
, ::remote_serial_quit_handler
);
9938 rs
->got_ctrlc_during_io
= 0;
9942 serial_write (rs
->remote_desc
, str
, len
);
9944 catch (const gdb_exception_error
&ex
)
9946 remote_unpush_target (this);
9947 throw_error (TARGET_CLOSE_ERROR
,
9948 _("Remote communication error. "
9949 "Target disconnected: %s"),
9953 if (rs
->got_ctrlc_during_io
)
9958 remote_target::remote_serial_send_break ()
9960 struct remote_state
*rs
= get_remote_state ();
9964 serial_send_break (rs
->remote_desc
);
9966 catch (const gdb_exception_error
&ex
)
9968 remote_unpush_target (this);
9969 throw_error (TARGET_CLOSE_ERROR
,
9970 _("Remote communication error. "
9971 "Target disconnected: %s"),
9976 /* Return a string representing an escaped version of BUF, of len N.
9977 E.g. \n is converted to \\n, \t to \\t, etc. */
9980 escape_buffer (const char *buf
, int n
)
9984 stb
.putstrn (buf
, n
, '\\');
9985 return stb
.release ();
9989 remote_target::putpkt (const char *buf
)
9991 return putpkt_binary (buf
, strlen (buf
));
9994 /* Wrapper around remote_target::putpkt to avoid exporting
9998 putpkt (remote_target
*remote
, const char *buf
)
10000 return remote
->putpkt (buf
);
10003 /* Send a packet to the remote machine, with error checking. The data
10004 of the packet is in BUF. The string in BUF can be at most
10005 get_remote_packet_size () - 5 to account for the $, # and checksum,
10006 and for a possible /0 if we are debugging (remote_debug) and want
10007 to print the sent packet as a string. */
10010 remote_target::putpkt_binary (const char *buf
, int cnt
)
10012 struct remote_state
*rs
= get_remote_state ();
10014 unsigned char csum
= 0;
10015 gdb::def_vector
<char> data (cnt
+ 6);
10016 char *buf2
= data
.data ();
10022 /* Catch cases like trying to read memory or listing threads while
10023 we're waiting for a stop reply. The remote server wouldn't be
10024 ready to handle this request, so we'd hang and timeout. We don't
10025 have to worry about this in synchronous mode, because in that
10026 case it's not possible to issue a command while the target is
10027 running. This is not a problem in non-stop mode, because in that
10028 case, the stub is always ready to process serial input. */
10029 if (!target_is_non_stop_p ()
10030 && target_is_async_p ()
10031 && rs
->waiting_for_stop_reply
)
10033 error (_("Cannot execute this command while the target is running.\n"
10034 "Use the \"interrupt\" command to stop the target\n"
10035 "and then try again."));
10038 /* Copy the packet into buffer BUF2, encapsulating it
10039 and giving it a checksum. */
10044 for (i
= 0; i
< cnt
; i
++)
10050 *p
++ = tohex ((csum
>> 4) & 0xf);
10051 *p
++ = tohex (csum
& 0xf);
10053 /* Send it over and over until we get a positive ack. */
10061 int len
= (int) (p
- buf2
);
10064 if (remote_packet_max_chars
< 0)
10067 max_chars
= remote_packet_max_chars
;
10070 = escape_buffer (buf2
, std::min (len
, max_chars
));
10072 if (len
> max_chars
)
10073 remote_debug_printf_nofunc
10074 ("Sending packet: %s [%d bytes omitted]", str
.c_str (),
10077 remote_debug_printf_nofunc ("Sending packet: %s", str
.c_str ());
10079 remote_serial_write (buf2
, p
- buf2
);
10081 /* If this is a no acks version of the remote protocol, send the
10082 packet and move on. */
10083 if (rs
->noack_mode
)
10086 /* Read until either a timeout occurs (-2) or '+' is read.
10087 Handle any notification that arrives in the mean time. */
10090 ch
= readchar (remote_timeout
);
10095 remote_debug_printf_nofunc ("Received Ack");
10098 remote_debug_printf_nofunc ("Received Nak");
10100 case SERIAL_TIMEOUT
:
10104 break; /* Retransmit buffer. */
10107 remote_debug_printf ("Packet instead of Ack, ignoring it");
10108 /* It's probably an old response sent because an ACK
10109 was lost. Gobble up the packet and ack it so it
10110 doesn't get retransmitted when we resend this
10113 remote_serial_write ("+", 1);
10114 continue; /* Now, go look for +. */
10121 /* If we got a notification, handle it, and go back to looking
10123 /* We've found the start of a notification. Now
10124 collect the data. */
10125 val
= read_frame (&rs
->buf
);
10128 remote_debug_printf_nofunc
10129 (" Notification received: %s",
10130 escape_buffer (rs
->buf
.data (), val
).c_str ());
10132 handle_notification (rs
->notif_state
, rs
->buf
.data ());
10133 /* We're in sync now, rewait for the ack. */
10137 remote_debug_printf_nofunc ("Junk: %c%s", ch
& 0177,
10142 remote_debug_printf_nofunc ("Junk: %c%s", ch
& 0177,
10146 break; /* Here to retransmit. */
10150 /* This is wrong. If doing a long backtrace, the user should be
10151 able to get out next time we call QUIT, without anything as
10152 violent as interrupt_query. If we want to provide a way out of
10153 here without getting to the next QUIT, it should be based on
10154 hitting ^C twice as in remote_wait. */
10158 interrupt_query ();
10166 /* Come here after finding the start of a frame when we expected an
10167 ack. Do our best to discard the rest of this packet. */
10170 remote_target::skip_frame ()
10176 c
= readchar (remote_timeout
);
10179 case SERIAL_TIMEOUT
:
10180 /* Nothing we can do. */
10183 /* Discard the two bytes of checksum and stop. */
10184 c
= readchar (remote_timeout
);
10186 c
= readchar (remote_timeout
);
10189 case '*': /* Run length encoding. */
10190 /* Discard the repeat count. */
10191 c
= readchar (remote_timeout
);
10196 /* A regular character. */
10202 /* Come here after finding the start of the frame. Collect the rest
10203 into *BUF, verifying the checksum, length, and handling run-length
10204 compression. NUL terminate the buffer. If there is not enough room,
10207 Returns -1 on error, number of characters in buffer (ignoring the
10208 trailing NULL) on success. (could be extended to return one of the
10209 SERIAL status indications). */
10212 remote_target::read_frame (gdb::char_vector
*buf_p
)
10214 unsigned char csum
;
10217 char *buf
= buf_p
->data ();
10218 struct remote_state
*rs
= get_remote_state ();
10225 c
= readchar (remote_timeout
);
10228 case SERIAL_TIMEOUT
:
10229 remote_debug_printf ("Timeout in mid-packet, retrying");
10233 remote_debug_printf ("Saw new packet start in middle of old one");
10234 return -1; /* Start a new packet, count retries. */
10238 unsigned char pktcsum
;
10244 check_0
= readchar (remote_timeout
);
10246 check_1
= readchar (remote_timeout
);
10248 if (check_0
== SERIAL_TIMEOUT
|| check_1
== SERIAL_TIMEOUT
)
10250 remote_debug_printf ("Timeout in checksum, retrying");
10253 else if (check_0
< 0 || check_1
< 0)
10255 remote_debug_printf ("Communication error in checksum");
10259 /* Don't recompute the checksum; with no ack packets we
10260 don't have any way to indicate a packet retransmission
10262 if (rs
->noack_mode
)
10265 pktcsum
= (fromhex (check_0
) << 4) | fromhex (check_1
);
10266 if (csum
== pktcsum
)
10269 remote_debug_printf
10270 ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s",
10271 pktcsum
, csum
, escape_buffer (buf
, bc
).c_str ());
10273 /* Number of characters in buffer ignoring trailing
10277 case '*': /* Run length encoding. */
10282 c
= readchar (remote_timeout
);
10284 repeat
= c
- ' ' + 3; /* Compute repeat count. */
10286 /* The character before ``*'' is repeated. */
10288 if (repeat
> 0 && repeat
<= 255 && bc
> 0)
10290 if (bc
+ repeat
- 1 >= buf_p
->size () - 1)
10292 /* Make some more room in the buffer. */
10293 buf_p
->resize (buf_p
->size () + repeat
);
10294 buf
= buf_p
->data ();
10297 memset (&buf
[bc
], buf
[bc
- 1], repeat
);
10303 gdb_printf (_("Invalid run length encoding: %s\n"), buf
);
10307 if (bc
>= buf_p
->size () - 1)
10309 /* Make some more room in the buffer. */
10310 buf_p
->resize (buf_p
->size () * 2);
10311 buf
= buf_p
->data ();
10321 /* Set this to the maximum number of seconds to wait instead of waiting forever
10322 in target_wait(). If this timer times out, then it generates an error and
10323 the command is aborted. This replaces most of the need for timeouts in the
10324 GDB test suite, and makes it possible to distinguish between a hung target
10325 and one with slow communications. */
10327 static int watchdog
= 0;
10329 show_watchdog (struct ui_file
*file
, int from_tty
,
10330 struct cmd_list_element
*c
, const char *value
)
10332 gdb_printf (file
, _("Watchdog timer is %s.\n"), value
);
10335 /* Read a packet from the remote machine, with error checking, and
10336 store it in *BUF. Resize *BUF if necessary to hold the result. If
10337 FOREVER, wait forever rather than timing out; this is used (in
10338 synchronous mode) to wait for a target that is is executing user
10339 code to stop. If FOREVER == false, this function is allowed to time
10340 out gracefully and return an indication of this to the caller.
10341 Otherwise return the number of bytes read. If IS_NOTIF is not
10342 NULL, then consider receiving a notification enough reason to
10343 return to the caller. In this case, *IS_NOTIF is an output boolean
10344 that indicates whether *BUF holds a notification or not (a regular
10348 remote_target::getpkt (gdb::char_vector
*buf
, bool forever
, bool *is_notif
)
10350 struct remote_state
*rs
= get_remote_state ();
10356 strcpy (buf
->data (), "timeout");
10359 timeout
= watchdog
> 0 ? watchdog
: -1;
10360 else if (is_notif
!= nullptr)
10361 timeout
= 0; /* There should already be a char in the buffer. If
10364 timeout
= remote_timeout
;
10366 #define MAX_TRIES 3
10368 /* Process any number of notifications, and then return when
10369 we get a packet. */
10372 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
10374 for (tries
= 1; tries
<= MAX_TRIES
; tries
++)
10376 /* This can loop forever if the remote side sends us
10377 characters continuously, but if it pauses, we'll get
10378 SERIAL_TIMEOUT from readchar because of timeout. Then
10379 we'll count that as a retry.
10381 Note that even when forever is set, we will only wait
10382 forever prior to the start of a packet. After that, we
10383 expect characters to arrive at a brisk pace. They should
10384 show up within remote_timeout intervals. */
10386 c
= readchar (timeout
);
10387 while (c
!= SERIAL_TIMEOUT
&& c
!= '$' && c
!= '%');
10389 if (c
== SERIAL_TIMEOUT
)
10391 if (is_notif
!= nullptr)
10392 return -1; /* Don't complain, it's normal to not get
10393 anything in this case. */
10395 if (forever
) /* Watchdog went off? Kill the target. */
10397 remote_unpush_target (this);
10398 throw_error (TARGET_CLOSE_ERROR
,
10399 _("Watchdog timeout has expired. "
10400 "Target detached."));
10403 remote_debug_printf ("Timed out.");
10407 /* We've found the start of a packet or notification.
10408 Now collect the data. */
10409 val
= read_frame (buf
);
10414 remote_serial_write ("-", 1);
10417 if (tries
> MAX_TRIES
)
10419 /* We have tried hard enough, and just can't receive the
10420 packet/notification. Give up. */
10421 gdb_printf (_("Ignoring packet error, continuing...\n"));
10423 /* Skip the ack char if we're in no-ack mode. */
10424 if (!rs
->noack_mode
)
10425 remote_serial_write ("+", 1);
10429 /* If we got an ordinary packet, return that to our caller. */
10436 if (remote_packet_max_chars
< 0)
10439 max_chars
= remote_packet_max_chars
;
10442 = escape_buffer (buf
->data (),
10443 std::min (val
, max_chars
));
10445 if (val
> max_chars
)
10446 remote_debug_printf_nofunc
10447 ("Packet received: %s [%d bytes omitted]", str
.c_str (),
10450 remote_debug_printf_nofunc ("Packet received: %s",
10454 /* Skip the ack char if we're in no-ack mode. */
10455 if (!rs
->noack_mode
)
10456 remote_serial_write ("+", 1);
10457 if (is_notif
!= NULL
)
10462 /* If we got a notification, handle it, and go back to looking
10466 gdb_assert (c
== '%');
10468 remote_debug_printf_nofunc
10469 (" Notification received: %s",
10470 escape_buffer (buf
->data (), val
).c_str ());
10472 if (is_notif
!= NULL
)
10475 handle_notification (rs
->notif_state
, buf
->data ());
10477 /* Notifications require no acknowledgement. */
10479 if (is_notif
!= nullptr)
10485 /* Kill any new fork children of inferior INF that haven't been
10486 processed by follow_fork. */
10489 remote_target::kill_new_fork_children (inferior
*inf
)
10491 remote_state
*rs
= get_remote_state ();
10492 const notif_client
*notif
= ¬if_client_stop
;
10494 /* Kill the fork child threads of any threads in inferior INF that are stopped
10495 at a fork event. */
10496 for (thread_info
*thread
: inf
->non_exited_threads ())
10498 const target_waitstatus
*ws
= thread_pending_fork_status (thread
);
10503 int child_pid
= ws
->child_ptid ().pid ();
10504 int res
= remote_vkill (child_pid
);
10507 error (_("Can't kill fork child process %d"), child_pid
);
10510 /* Check for any pending fork events (not reported or processed yet)
10511 in inferior INF and kill those fork child threads as well. */
10512 remote_notif_get_pending_events (notif
);
10513 for (auto &event
: rs
->stop_reply_queue
)
10515 if (event
->ptid
.pid () != inf
->pid
)
10518 if (!is_fork_status (event
->ws
.kind ()))
10521 int child_pid
= event
->ws
.child_ptid ().pid ();
10522 int res
= remote_vkill (child_pid
);
10525 error (_("Can't kill fork child process %d"), child_pid
);
10530 /* Target hook to kill the current inferior. */
10533 remote_target::kill ()
10536 inferior
*inf
= find_inferior_pid (this, inferior_ptid
.pid ());
10538 gdb_assert (inf
!= nullptr);
10540 if (m_features
.packet_support (PACKET_vKill
) != PACKET_DISABLE
)
10542 /* If we're stopped while forking and we haven't followed yet,
10543 kill the child task. We need to do this before killing the
10544 parent task because if this is a vfork then the parent will
10546 kill_new_fork_children (inf
);
10548 res
= remote_vkill (inf
->pid
);
10551 target_mourn_inferior (inferior_ptid
);
10556 /* If we are in 'target remote' mode and we are killing the only
10557 inferior, then we will tell gdbserver to exit and unpush the
10559 if (res
== -1 && !m_features
.remote_multi_process_p ()
10560 && number_of_live_inferiors (this) == 1)
10564 /* We've killed the remote end, we get to mourn it. If we are
10565 not in extended mode, mourning the inferior also unpushes
10566 remote_ops from the target stack, which closes the remote
10568 target_mourn_inferior (inferior_ptid
);
10573 error (_("Can't kill process"));
10576 /* Send a kill request to the target using the 'vKill' packet. */
10579 remote_target::remote_vkill (int pid
)
10581 if (m_features
.packet_support (PACKET_vKill
) == PACKET_DISABLE
)
10584 remote_state
*rs
= get_remote_state ();
10586 /* Tell the remote target to detach. */
10587 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "vKill;%x", pid
);
10591 switch ((m_features
.packet_ok (rs
->buf
, PACKET_vKill
)).status ())
10597 case PACKET_UNKNOWN
:
10600 internal_error (_("Bad result from packet_ok"));
10604 /* Send a kill request to the target using the 'k' packet. */
10607 remote_target::remote_kill_k ()
10609 /* Catch errors so the user can quit from gdb even when we
10610 aren't on speaking terms with the remote system. */
10615 catch (const gdb_exception_error
&ex
)
10617 if (ex
.error
== TARGET_CLOSE_ERROR
)
10619 /* If we got an (EOF) error that caused the target
10620 to go away, then we're done, that's what we wanted.
10621 "k" is susceptible to cause a premature EOF, given
10622 that the remote server isn't actually required to
10623 reply to "k", and it can happen that it doesn't
10624 even get to reply ACK to the "k". */
10628 /* Otherwise, something went wrong. We didn't actually kill
10629 the target. Just propagate the exception, and let the
10630 user or higher layers decide what to do. */
10636 remote_target::mourn_inferior ()
10638 struct remote_state
*rs
= get_remote_state ();
10640 /* We're no longer interested in notification events of an inferior
10641 that exited or was killed/detached. */
10642 discard_pending_stop_replies (current_inferior ());
10644 /* In 'target remote' mode with one inferior, we close the connection. */
10645 if (!rs
->extended
&& number_of_live_inferiors (this) <= 1)
10647 remote_unpush_target (this);
10651 /* In case we got here due to an error, but we're going to stay
10653 rs
->waiting_for_stop_reply
= 0;
10655 /* If the current general thread belonged to the process we just
10656 detached from or has exited, the remote side current general
10657 thread becomes undefined. Considering a case like this:
10659 - We just got here due to a detach.
10660 - The process that we're detaching from happens to immediately
10661 report a global breakpoint being hit in non-stop mode, in the
10662 same thread we had selected before.
10663 - GDB attaches to this process again.
10664 - This event happens to be the next event we handle.
10666 GDB would consider that the current general thread didn't need to
10667 be set on the stub side (with Hg), since for all it knew,
10668 GENERAL_THREAD hadn't changed.
10670 Notice that although in all-stop mode, the remote server always
10671 sets the current thread to the thread reporting the stop event,
10672 that doesn't happen in non-stop mode; in non-stop, the stub *must
10673 not* change the current thread when reporting a breakpoint hit,
10674 due to the decoupling of event reporting and event handling.
10676 To keep things simple, we always invalidate our notion of the
10678 record_currthread (rs
, minus_one_ptid
);
10680 /* Call common code to mark the inferior as not running. */
10681 generic_mourn_inferior ();
10685 extended_remote_target::supports_disable_randomization ()
10687 return (m_features
.packet_support (PACKET_QDisableRandomization
)
10692 remote_target::extended_remote_disable_randomization (int val
)
10694 struct remote_state
*rs
= get_remote_state ();
10697 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
10698 "QDisableRandomization:%x", val
);
10700 reply
= remote_get_noisy_reply ();
10701 if (*reply
== '\0')
10702 error (_("Target does not support QDisableRandomization."));
10703 if (strcmp (reply
, "OK") != 0)
10704 error (_("Bogus QDisableRandomization reply from target: %s"), reply
);
10708 remote_target::extended_remote_run (const std::string
&args
)
10710 struct remote_state
*rs
= get_remote_state ();
10712 const char *remote_exec_file
= get_remote_exec_file ();
10714 /* If the user has disabled vRun support, or we have detected that
10715 support is not available, do not try it. */
10716 if (m_features
.packet_support (PACKET_vRun
) == PACKET_DISABLE
)
10719 strcpy (rs
->buf
.data (), "vRun;");
10720 len
= strlen (rs
->buf
.data ());
10722 if (strlen (remote_exec_file
) * 2 + len
>= get_remote_packet_size ())
10723 error (_("Remote file name too long for run packet"));
10724 len
+= 2 * bin2hex ((gdb_byte
*) remote_exec_file
, rs
->buf
.data () + len
,
10725 strlen (remote_exec_file
));
10727 if (!args
.empty ())
10731 gdb_argv
argv (args
.c_str ());
10732 for (i
= 0; argv
[i
] != NULL
; i
++)
10734 if (strlen (argv
[i
]) * 2 + 1 + len
>= get_remote_packet_size ())
10735 error (_("Argument list too long for run packet"));
10736 rs
->buf
[len
++] = ';';
10737 len
+= 2 * bin2hex ((gdb_byte
*) argv
[i
], rs
->buf
.data () + len
,
10742 rs
->buf
[len
++] = '\0';
10747 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_vRun
);
10748 switch (result
.status ())
10751 /* We have a wait response. All is well. */
10753 case PACKET_UNKNOWN
:
10756 /* If we have a textual error message, print just that. This
10757 makes remote debugging output the same as native output, when
10759 if (result
.textual_err_msg ())
10760 error (("%s"), result
.err_msg ());
10761 if (remote_exec_file
[0] == '\0')
10762 error (_("Running the default executable on the remote target failed; "
10763 "try \"set remote exec-file\"?"));
10765 error (_("Running \"%s\" on the remote target failed"),
10768 gdb_assert_not_reached ("bad switch");
10772 /* Helper function to send set/unset environment packets. ACTION is
10773 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
10774 or "QEnvironmentUnsetVariable". VALUE is the variable to be
10778 remote_target::send_environment_packet (const char *action
,
10779 const char *packet
,
10782 remote_state
*rs
= get_remote_state ();
10784 /* Convert the environment variable to an hex string, which
10785 is the best format to be transmitted over the wire. */
10786 std::string encoded_value
= bin2hex ((const gdb_byte
*) value
,
10789 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
10790 "%s:%s", packet
, encoded_value
.c_str ());
10794 if (strcmp (rs
->buf
.data (), "OK") != 0)
10795 warning (_("Unable to %s environment variable '%s' on remote."),
10799 /* Helper function to handle the QEnvironment* packets. */
10802 remote_target::extended_remote_environment_support ()
10804 remote_state
*rs
= get_remote_state ();
10806 if (m_features
.packet_support (PACKET_QEnvironmentReset
) != PACKET_DISABLE
)
10808 putpkt ("QEnvironmentReset");
10810 if (strcmp (rs
->buf
.data (), "OK") != 0)
10811 warning (_("Unable to reset environment on remote."));
10814 gdb_environ
*e
= ¤t_inferior ()->environment
;
10816 if (m_features
.packet_support (PACKET_QEnvironmentHexEncoded
)
10819 for (const std::string
&el
: e
->user_set_env ())
10820 send_environment_packet ("set", "QEnvironmentHexEncoded",
10825 if (m_features
.packet_support (PACKET_QEnvironmentUnset
) != PACKET_DISABLE
)
10826 for (const std::string
&el
: e
->user_unset_env ())
10827 send_environment_packet ("unset", "QEnvironmentUnset", el
.c_str ());
10830 /* Helper function to set the current working directory for the
10831 inferior in the remote target. */
10834 remote_target::extended_remote_set_inferior_cwd ()
10836 if (m_features
.packet_support (PACKET_QSetWorkingDir
) != PACKET_DISABLE
)
10838 const std::string
&inferior_cwd
= current_inferior ()->cwd ();
10839 remote_state
*rs
= get_remote_state ();
10841 if (!inferior_cwd
.empty ())
10843 std::string hexpath
10844 = bin2hex ((const gdb_byte
*) inferior_cwd
.data (),
10845 inferior_cwd
.size ());
10847 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
10848 "QSetWorkingDir:%s", hexpath
.c_str ());
10852 /* An empty inferior_cwd means that the user wants us to
10853 reset the remote server's inferior's cwd. */
10854 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
10855 "QSetWorkingDir:");
10860 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_QSetWorkingDir
);
10861 if (result
.status () == PACKET_ERROR
)
10863 Remote replied unexpectedly while setting the inferior's working\n\
10865 result
.err_msg ());
10866 if (result
.status () == PACKET_UNKNOWN
)
10867 error (_("Remote target failed to process setting the inferior's working directory"));
10872 /* In the extended protocol we want to be able to do things like
10873 "run" and have them basically work as expected. So we need
10874 a special create_inferior function. We support changing the
10875 executable file and the command line arguments, but not the
10879 extended_remote_target::create_inferior (const char *exec_file
,
10880 const std::string
&args
,
10881 char **env
, int from_tty
)
10885 struct remote_state
*rs
= get_remote_state ();
10886 const char *remote_exec_file
= get_remote_exec_file ();
10888 /* If running asynchronously, register the target file descriptor
10889 with the event loop. */
10890 if (target_can_async_p ())
10891 target_async (true);
10893 /* Disable address space randomization if requested (and supported). */
10894 if (supports_disable_randomization ())
10895 extended_remote_disable_randomization (disable_randomization
);
10897 /* If startup-with-shell is on, we inform gdbserver to start the
10898 remote inferior using a shell. */
10899 if (m_features
.packet_support (PACKET_QStartupWithShell
) != PACKET_DISABLE
)
10901 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
10902 "QStartupWithShell:%d", startup_with_shell
? 1 : 0);
10905 if (strcmp (rs
->buf
.data (), "OK") != 0)
10907 Remote replied unexpectedly while setting startup-with-shell: %s"),
10911 extended_remote_environment_support ();
10913 extended_remote_set_inferior_cwd ();
10915 /* Now restart the remote server. */
10916 run_worked
= extended_remote_run (args
) != -1;
10919 /* vRun was not supported. Fail if we need it to do what the
10921 if (remote_exec_file
[0])
10922 error (_("Remote target does not support \"set remote exec-file\""));
10923 if (!args
.empty ())
10924 error (_("Remote target does not support \"set args\" or run ARGS"));
10926 /* Fall back to "R". */
10927 extended_remote_restart ();
10930 /* vRun's success return is a stop reply. */
10931 stop_reply
= run_worked
? rs
->buf
.data () : NULL
;
10932 add_current_inferior_and_thread (stop_reply
);
10934 /* Get updated offsets, if the stub uses qOffsets. */
10939 /* Given a location's target info BP_TGT and the packet buffer BUF, output
10940 the list of conditions (in agent expression bytecode format), if any, the
10941 target needs to evaluate. The output is placed into the packet buffer
10942 started from BUF and ended at BUF_END. */
10945 remote_add_target_side_condition (struct gdbarch
*gdbarch
,
10946 struct bp_target_info
*bp_tgt
, char *buf
,
10949 if (bp_tgt
->conditions
.empty ())
10952 buf
+= strlen (buf
);
10953 xsnprintf (buf
, buf_end
- buf
, "%s", ";");
10956 /* Send conditions to the target. */
10957 for (agent_expr
*aexpr
: bp_tgt
->conditions
)
10959 xsnprintf (buf
, buf_end
- buf
, "X%x,", (int) aexpr
->buf
.size ());
10960 buf
+= strlen (buf
);
10961 for (int i
= 0; i
< aexpr
->buf
.size (); ++i
)
10962 buf
= pack_hex_byte (buf
, aexpr
->buf
[i
]);
10969 remote_add_target_side_commands (struct gdbarch
*gdbarch
,
10970 struct bp_target_info
*bp_tgt
, char *buf
)
10972 if (bp_tgt
->tcommands
.empty ())
10975 buf
+= strlen (buf
);
10977 sprintf (buf
, ";cmds:%x,", bp_tgt
->persist
);
10978 buf
+= strlen (buf
);
10980 /* Concatenate all the agent expressions that are commands into the
10982 for (agent_expr
*aexpr
: bp_tgt
->tcommands
)
10984 sprintf (buf
, "X%x,", (int) aexpr
->buf
.size ());
10985 buf
+= strlen (buf
);
10986 for (int i
= 0; i
< aexpr
->buf
.size (); ++i
)
10987 buf
= pack_hex_byte (buf
, aexpr
->buf
[i
]);
10992 /* Insert a breakpoint. On targets that have software breakpoint
10993 support, we ask the remote target to do the work; on targets
10994 which don't, we insert a traditional memory breakpoint. */
10997 remote_target::insert_breakpoint (struct gdbarch
*gdbarch
,
10998 struct bp_target_info
*bp_tgt
)
11000 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
11001 If it succeeds, then set the support to PACKET_ENABLE. If it
11002 fails, and the user has explicitly requested the Z support then
11003 report an error, otherwise, mark it disabled and go on. */
11005 if (m_features
.packet_support (PACKET_Z0
) != PACKET_DISABLE
)
11007 CORE_ADDR addr
= bp_tgt
->reqstd_address
;
11008 struct remote_state
*rs
;
11011 /* Make sure the remote is pointing at the right process, if
11013 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
11014 set_general_process ();
11016 rs
= get_remote_state ();
11017 p
= rs
->buf
.data ();
11018 endbuf
= p
+ get_remote_packet_size ();
11023 addr
= (ULONGEST
) remote_address_masked (addr
);
11024 p
+= hexnumstr (p
, addr
);
11025 xsnprintf (p
, endbuf
- p
, ",%d", bp_tgt
->kind
);
11027 if (supports_evaluation_of_breakpoint_conditions ())
11028 remote_add_target_side_condition (gdbarch
, bp_tgt
, p
, endbuf
);
11030 if (can_run_breakpoint_commands ())
11031 remote_add_target_side_commands (gdbarch
, bp_tgt
, p
);
11036 switch ((m_features
.packet_ok (rs
->buf
, PACKET_Z0
)).status ())
11042 case PACKET_UNKNOWN
:
11047 /* If this breakpoint has target-side commands but this stub doesn't
11048 support Z0 packets, throw error. */
11049 if (!bp_tgt
->tcommands
.empty ())
11050 throw_error (NOT_SUPPORTED_ERROR
, _("\
11051 Target doesn't support breakpoints that have target side commands."));
11053 return memory_insert_breakpoint (this, gdbarch
, bp_tgt
);
11057 remote_target::remove_breakpoint (struct gdbarch
*gdbarch
,
11058 struct bp_target_info
*bp_tgt
,
11059 enum remove_bp_reason reason
)
11061 CORE_ADDR addr
= bp_tgt
->placed_address
;
11062 struct remote_state
*rs
= get_remote_state ();
11064 if (m_features
.packet_support (PACKET_Z0
) != PACKET_DISABLE
)
11066 char *p
= rs
->buf
.data ();
11067 char *endbuf
= p
+ get_remote_packet_size ();
11069 /* Make sure the remote is pointing at the right process, if
11071 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
11072 set_general_process ();
11078 addr
= (ULONGEST
) remote_address_masked (bp_tgt
->placed_address
);
11079 p
+= hexnumstr (p
, addr
);
11080 xsnprintf (p
, endbuf
- p
, ",%d", bp_tgt
->kind
);
11085 return (rs
->buf
[0] == 'E');
11088 return memory_remove_breakpoint (this, gdbarch
, bp_tgt
, reason
);
11091 static enum Z_packet_type
11092 watchpoint_to_Z_packet (int type
)
11097 return Z_PACKET_WRITE_WP
;
11100 return Z_PACKET_READ_WP
;
11103 return Z_PACKET_ACCESS_WP
;
11106 internal_error (_("hw_bp_to_z: bad watchpoint type %d"), type
);
11111 remote_target::insert_watchpoint (CORE_ADDR addr
, int len
,
11112 enum target_hw_bp_type type
, struct expression
*cond
)
11114 struct remote_state
*rs
= get_remote_state ();
11115 char *endbuf
= rs
->buf
.data () + get_remote_packet_size ();
11117 enum Z_packet_type packet
= watchpoint_to_Z_packet (type
);
11119 if (m_features
.packet_support ((to_underlying (PACKET_Z0
)
11120 + to_underlying (packet
))) == PACKET_DISABLE
)
11123 /* Make sure the remote is pointing at the right process, if
11125 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
11126 set_general_process ();
11128 xsnprintf (rs
->buf
.data (), endbuf
- rs
->buf
.data (), "Z%x,", packet
);
11129 p
= strchr (rs
->buf
.data (), '\0');
11130 addr
= remote_address_masked (addr
);
11131 p
+= hexnumstr (p
, (ULONGEST
) addr
);
11132 xsnprintf (p
, endbuf
- p
, ",%x", len
);
11137 switch ((m_features
.packet_ok (rs
->buf
, (to_underlying (PACKET_Z0
)
11138 + to_underlying (packet
)))).status ())
11142 case PACKET_UNKNOWN
:
11147 internal_error (_("remote_insert_watchpoint: reached end of function"));
11151 remote_target::watchpoint_addr_within_range (CORE_ADDR addr
,
11152 CORE_ADDR start
, int length
)
11154 CORE_ADDR diff
= remote_address_masked (addr
- start
);
11156 return diff
< length
;
11161 remote_target::remove_watchpoint (CORE_ADDR addr
, int len
,
11162 enum target_hw_bp_type type
, struct expression
*cond
)
11164 struct remote_state
*rs
= get_remote_state ();
11165 char *endbuf
= rs
->buf
.data () + get_remote_packet_size ();
11167 enum Z_packet_type packet
= watchpoint_to_Z_packet (type
);
11169 if (m_features
.packet_support ((to_underlying (PACKET_Z0
)
11170 + to_underlying (packet
))) == PACKET_DISABLE
)
11173 /* Make sure the remote is pointing at the right process, if
11175 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
11176 set_general_process ();
11178 xsnprintf (rs
->buf
.data (), endbuf
- rs
->buf
.data (), "z%x,", packet
);
11179 p
= strchr (rs
->buf
.data (), '\0');
11180 addr
= remote_address_masked (addr
);
11181 p
+= hexnumstr (p
, (ULONGEST
) addr
);
11182 xsnprintf (p
, endbuf
- p
, ",%x", len
);
11186 switch ((m_features
.packet_ok (rs
->buf
, (to_underlying (PACKET_Z0
)
11187 + to_underlying (packet
)))).status ())
11190 case PACKET_UNKNOWN
:
11195 internal_error (_("remote_remove_watchpoint: reached end of function"));
11199 static int remote_hw_watchpoint_limit
= -1;
11200 static int remote_hw_watchpoint_length_limit
= -1;
11201 static int remote_hw_breakpoint_limit
= -1;
11204 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr
, int len
)
11206 if (remote_hw_watchpoint_length_limit
== 0)
11208 else if (remote_hw_watchpoint_length_limit
< 0)
11210 else if (len
<= remote_hw_watchpoint_length_limit
)
11217 remote_target::can_use_hw_breakpoint (enum bptype type
, int cnt
, int ot
)
11219 if (type
== bp_hardware_breakpoint
)
11221 if (remote_hw_breakpoint_limit
== 0)
11223 else if (remote_hw_breakpoint_limit
< 0)
11225 else if (cnt
<= remote_hw_breakpoint_limit
)
11230 if (remote_hw_watchpoint_limit
== 0)
11232 else if (remote_hw_watchpoint_limit
< 0)
11236 else if (cnt
<= remote_hw_watchpoint_limit
)
11242 /* The to_stopped_by_sw_breakpoint method of target remote. */
11245 remote_target::stopped_by_sw_breakpoint ()
11247 struct thread_info
*thread
= inferior_thread ();
11249 return (thread
->priv
!= NULL
11250 && (get_remote_thread_info (thread
)->stop_reason
11251 == TARGET_STOPPED_BY_SW_BREAKPOINT
));
11254 /* The to_supports_stopped_by_sw_breakpoint method of target
11258 remote_target::supports_stopped_by_sw_breakpoint ()
11260 return (m_features
.packet_support (PACKET_swbreak_feature
) == PACKET_ENABLE
);
11263 /* The to_stopped_by_hw_breakpoint method of target remote. */
11266 remote_target::stopped_by_hw_breakpoint ()
11268 struct thread_info
*thread
= inferior_thread ();
11270 return (thread
->priv
!= NULL
11271 && (get_remote_thread_info (thread
)->stop_reason
11272 == TARGET_STOPPED_BY_HW_BREAKPOINT
));
11275 /* The to_supports_stopped_by_hw_breakpoint method of target
11279 remote_target::supports_stopped_by_hw_breakpoint ()
11281 return (m_features
.packet_support (PACKET_hwbreak_feature
) == PACKET_ENABLE
);
11285 remote_target::stopped_by_watchpoint ()
11287 struct thread_info
*thread
= inferior_thread ();
11289 return (thread
->priv
!= NULL
11290 && (get_remote_thread_info (thread
)->stop_reason
11291 == TARGET_STOPPED_BY_WATCHPOINT
));
11295 remote_target::stopped_data_address (CORE_ADDR
*addr_p
)
11297 struct thread_info
*thread
= inferior_thread ();
11299 if (thread
->priv
!= NULL
11300 && (get_remote_thread_info (thread
)->stop_reason
11301 == TARGET_STOPPED_BY_WATCHPOINT
))
11303 *addr_p
= get_remote_thread_info (thread
)->watch_data_address
;
11312 remote_target::insert_hw_breakpoint (struct gdbarch
*gdbarch
,
11313 struct bp_target_info
*bp_tgt
)
11315 CORE_ADDR addr
= bp_tgt
->reqstd_address
;
11316 struct remote_state
*rs
;
11319 if (m_features
.packet_support (PACKET_Z1
) == PACKET_DISABLE
)
11322 /* Make sure the remote is pointing at the right process, if
11324 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
11325 set_general_process ();
11327 rs
= get_remote_state ();
11328 p
= rs
->buf
.data ();
11329 endbuf
= p
+ get_remote_packet_size ();
11335 addr
= remote_address_masked (addr
);
11336 p
+= hexnumstr (p
, (ULONGEST
) addr
);
11337 xsnprintf (p
, endbuf
- p
, ",%x", bp_tgt
->kind
);
11339 if (supports_evaluation_of_breakpoint_conditions ())
11340 remote_add_target_side_condition (gdbarch
, bp_tgt
, p
, endbuf
);
11342 if (can_run_breakpoint_commands ())
11343 remote_add_target_side_commands (gdbarch
, bp_tgt
, p
);
11348 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_Z1
);
11349 switch (result
.status ())
11352 error (_("Remote failure reply: %s"), result
.err_msg ());
11353 case PACKET_UNKNOWN
:
11358 internal_error (_("remote_insert_hw_breakpoint: reached end of function"));
11363 remote_target::remove_hw_breakpoint (struct gdbarch
*gdbarch
,
11364 struct bp_target_info
*bp_tgt
)
11367 struct remote_state
*rs
= get_remote_state ();
11368 char *p
= rs
->buf
.data ();
11369 char *endbuf
= p
+ get_remote_packet_size ();
11371 if (m_features
.packet_support (PACKET_Z1
) == PACKET_DISABLE
)
11374 /* Make sure the remote is pointing at the right process, if
11376 if (!gdbarch_has_global_breakpoints (current_inferior ()->arch ()))
11377 set_general_process ();
11383 addr
= remote_address_masked (bp_tgt
->placed_address
);
11384 p
+= hexnumstr (p
, (ULONGEST
) addr
);
11385 xsnprintf (p
, endbuf
- p
, ",%x", bp_tgt
->kind
);
11390 switch ((m_features
.packet_ok (rs
->buf
, PACKET_Z1
)).status ())
11393 case PACKET_UNKNOWN
:
11398 internal_error (_("remote_remove_hw_breakpoint: reached end of function"));
11401 /* Verify memory using the "qCRC:" request. */
11404 remote_target::verify_memory (const gdb_byte
*data
, CORE_ADDR lma
, ULONGEST size
)
11406 struct remote_state
*rs
= get_remote_state ();
11407 unsigned long host_crc
, target_crc
;
11410 /* It doesn't make sense to use qCRC if the remote target is
11411 connected but not running. */
11412 if (target_has_execution ()
11413 && m_features
.packet_support (PACKET_qCRC
) != PACKET_DISABLE
)
11415 enum packet_status status
;
11417 /* Make sure the remote is pointing at the right process. */
11418 set_general_process ();
11420 /* FIXME: assumes lma can fit into long. */
11421 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "qCRC:%lx,%lx",
11422 (long) lma
, (long) size
);
11425 /* Be clever; compute the host_crc before waiting for target
11427 host_crc
= xcrc32 (data
, size
, 0xffffffff);
11431 status
= (m_features
.packet_ok (rs
->buf
, PACKET_qCRC
)).status ();
11432 if (status
== PACKET_ERROR
)
11434 else if (status
== PACKET_OK
)
11436 for (target_crc
= 0, tmp
= &rs
->buf
[1]; *tmp
; tmp
++)
11437 target_crc
= target_crc
* 16 + fromhex (*tmp
);
11439 return (host_crc
== target_crc
);
11443 return simple_verify_memory (this, data
, lma
, size
);
11446 /* compare-sections command
11448 With no arguments, compares each loadable section in the exec bfd
11449 with the same memory range on the target, and reports mismatches.
11450 Useful for verifying the image on the target against the exec file. */
11453 compare_sections_command (const char *args
, int from_tty
)
11456 const char *sectname
;
11457 bfd_size_type size
;
11460 int mismatched
= 0;
11464 if (!current_program_space
->exec_bfd ())
11465 error (_("command cannot be used without an exec file"));
11467 if (args
!= NULL
&& strcmp (args
, "-r") == 0)
11473 for (s
= current_program_space
->exec_bfd ()->sections
; s
; s
= s
->next
)
11475 if (!(s
->flags
& SEC_LOAD
))
11476 continue; /* Skip non-loadable section. */
11478 if (read_only
&& (s
->flags
& SEC_READONLY
) == 0)
11479 continue; /* Skip writeable sections */
11481 size
= bfd_section_size (s
);
11483 continue; /* Skip zero-length section. */
11485 sectname
= bfd_section_name (s
);
11486 if (args
&& strcmp (args
, sectname
) != 0)
11487 continue; /* Not the section selected by user. */
11489 matched
= 1; /* Do this section. */
11492 gdb::byte_vector
sectdata (size
);
11493 bfd_get_section_contents (current_program_space
->exec_bfd (), s
,
11494 sectdata
.data (), 0, size
);
11496 res
= target_verify_memory (sectdata
.data (), lma
, size
);
11499 error (_("target memory fault, section %s, range %s -- %s"), sectname
,
11500 paddress (current_inferior ()->arch (), lma
),
11501 paddress (current_inferior ()->arch (), lma
+ size
));
11503 gdb_printf ("Section %s, range %s -- %s: ", sectname
,
11504 paddress (current_inferior ()->arch (), lma
),
11505 paddress (current_inferior ()->arch (), lma
+ size
));
11507 gdb_printf ("matched.\n");
11510 gdb_printf ("MIS-MATCHED!\n");
11514 if (mismatched
> 0)
11515 warning (_("One or more sections of the target image does "
11516 "not match the loaded file"));
11517 if (args
&& !matched
)
11518 gdb_printf (_("No loaded section named '%s'.\n"), args
);
11521 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
11522 into remote target. The number of bytes written to the remote
11523 target is returned, or -1 for error. */
11526 remote_target::remote_write_qxfer (const char *object_name
,
11527 const char *annex
, const gdb_byte
*writebuf
,
11528 ULONGEST offset
, LONGEST len
,
11529 ULONGEST
*xfered_len
,
11530 const unsigned int which_packet
)
11534 struct remote_state
*rs
= get_remote_state ();
11535 int max_size
= get_memory_write_packet_size ();
11537 if (m_features
.packet_support (which_packet
) == PACKET_DISABLE
)
11538 return TARGET_XFER_E_IO
;
11540 /* Insert header. */
11541 i
= snprintf (rs
->buf
.data (), max_size
,
11542 "qXfer:%s:write:%s:%s:",
11543 object_name
, annex
? annex
: "",
11544 phex_nz (offset
, sizeof offset
));
11545 max_size
-= (i
+ 1);
11547 /* Escape as much data as fits into rs->buf. */
11548 buf_len
= remote_escape_output
11549 (writebuf
, len
, 1, (gdb_byte
*) rs
->buf
.data () + i
, &max_size
, max_size
);
11551 if (putpkt_binary (rs
->buf
.data (), i
+ buf_len
) < 0
11552 || getpkt (&rs
->buf
) < 0
11553 || (m_features
.packet_ok (rs
->buf
, which_packet
)).status () != PACKET_OK
)
11554 return TARGET_XFER_E_IO
;
11556 unpack_varlen_hex (rs
->buf
.data (), &n
);
11559 return (*xfered_len
!= 0) ? TARGET_XFER_OK
: TARGET_XFER_EOF
;
11562 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
11563 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
11564 number of bytes read is returned, or 0 for EOF, or -1 for error.
11565 The number of bytes read may be less than LEN without indicating an
11566 EOF. PACKET is checked and updated to indicate whether the remote
11567 target supports this object. */
11570 remote_target::remote_read_qxfer (const char *object_name
,
11572 gdb_byte
*readbuf
, ULONGEST offset
,
11574 ULONGEST
*xfered_len
,
11575 const unsigned int which_packet
)
11577 struct remote_state
*rs
= get_remote_state ();
11578 LONGEST i
, n
, packet_len
;
11580 if (m_features
.packet_support (which_packet
) == PACKET_DISABLE
)
11581 return TARGET_XFER_E_IO
;
11583 /* Check whether we've cached an end-of-object packet that matches
11585 if (rs
->finished_object
)
11587 if (strcmp (object_name
, rs
->finished_object
) == 0
11588 && strcmp (annex
? annex
: "", rs
->finished_annex
) == 0
11589 && offset
== rs
->finished_offset
)
11590 return TARGET_XFER_EOF
;
11593 /* Otherwise, we're now reading something different. Discard
11595 xfree (rs
->finished_object
);
11596 xfree (rs
->finished_annex
);
11597 rs
->finished_object
= NULL
;
11598 rs
->finished_annex
= NULL
;
11601 /* Request only enough to fit in a single packet. The actual data
11602 may not, since we don't know how much of it will need to be escaped;
11603 the target is free to respond with slightly less data. We subtract
11604 five to account for the response type and the protocol frame. */
11605 n
= std::min
<LONGEST
> (get_remote_packet_size () - 5, len
);
11606 snprintf (rs
->buf
.data (), get_remote_packet_size () - 4,
11607 "qXfer:%s:read:%s:%s,%s",
11608 object_name
, annex
? annex
: "",
11609 phex_nz (offset
, sizeof offset
),
11610 phex_nz (n
, sizeof n
));
11611 i
= putpkt (rs
->buf
);
11613 return TARGET_XFER_E_IO
;
11616 packet_len
= getpkt (&rs
->buf
);
11618 || m_features
.packet_ok (rs
->buf
, which_packet
).status () != PACKET_OK
)
11619 return TARGET_XFER_E_IO
;
11621 if (rs
->buf
[0] != 'l' && rs
->buf
[0] != 'm')
11622 error (_("Unknown remote qXfer reply: %s"), rs
->buf
.data ());
11624 /* 'm' means there is (or at least might be) more data after this
11625 batch. That does not make sense unless there's at least one byte
11626 of data in this reply. */
11627 if (rs
->buf
[0] == 'm' && packet_len
== 1)
11628 error (_("Remote qXfer reply contained no data."));
11630 /* Got some data. */
11631 i
= remote_unescape_input ((gdb_byte
*) rs
->buf
.data () + 1,
11632 packet_len
- 1, readbuf
, n
);
11634 /* 'l' is an EOF marker, possibly including a final block of data,
11635 or possibly empty. If we have the final block of a non-empty
11636 object, record this fact to bypass a subsequent partial read. */
11637 if (rs
->buf
[0] == 'l' && offset
+ i
> 0)
11639 rs
->finished_object
= xstrdup (object_name
);
11640 rs
->finished_annex
= xstrdup (annex
? annex
: "");
11641 rs
->finished_offset
= offset
+ i
;
11645 return TARGET_XFER_EOF
;
11649 return TARGET_XFER_OK
;
11653 enum target_xfer_status
11654 remote_target::xfer_partial (enum target_object object
,
11655 const char *annex
, gdb_byte
*readbuf
,
11656 const gdb_byte
*writebuf
, ULONGEST offset
, ULONGEST len
,
11657 ULONGEST
*xfered_len
)
11659 struct remote_state
*rs
;
11664 = gdbarch_addressable_memory_unit_size (current_inferior ()->arch ());
11666 set_remote_traceframe ();
11667 set_general_thread (inferior_ptid
);
11669 rs
= get_remote_state ();
11671 /* Handle memory using the standard memory routines. */
11672 if (object
== TARGET_OBJECT_MEMORY
)
11674 /* If the remote target is connected but not running, we should
11675 pass this request down to a lower stratum (e.g. the executable
11677 if (!target_has_execution ())
11678 return TARGET_XFER_EOF
;
11680 if (writebuf
!= NULL
)
11681 return remote_write_bytes (offset
, writebuf
, len
, unit_size
,
11684 return remote_read_bytes (offset
, readbuf
, len
, unit_size
,
11688 /* Handle extra signal info using qxfer packets. */
11689 if (object
== TARGET_OBJECT_SIGNAL_INFO
)
11692 return remote_read_qxfer ("siginfo", annex
, readbuf
, offset
, len
,
11693 xfered_len
, PACKET_qXfer_siginfo_read
);
11695 return remote_write_qxfer ("siginfo", annex
, writebuf
, offset
, len
,
11696 xfered_len
, PACKET_qXfer_siginfo_write
);
11699 if (object
== TARGET_OBJECT_STATIC_TRACE_DATA
)
11702 return remote_read_qxfer ("statictrace", annex
,
11703 readbuf
, offset
, len
, xfered_len
,
11704 PACKET_qXfer_statictrace_read
);
11706 return TARGET_XFER_E_IO
;
11709 /* Only handle flash writes. */
11710 if (writebuf
!= NULL
)
11714 case TARGET_OBJECT_FLASH
:
11715 return remote_flash_write (offset
, len
, xfered_len
,
11719 return TARGET_XFER_E_IO
;
11723 /* Map pre-existing objects onto letters. DO NOT do this for new
11724 objects!!! Instead specify new query packets. */
11727 case TARGET_OBJECT_AVR
:
11731 case TARGET_OBJECT_AUXV
:
11732 gdb_assert (annex
== NULL
);
11733 return remote_read_qxfer
11734 ("auxv", annex
, readbuf
, offset
, len
, xfered_len
, PACKET_qXfer_auxv
);
11736 case TARGET_OBJECT_AVAILABLE_FEATURES
:
11737 return remote_read_qxfer
11738 ("features", annex
, readbuf
, offset
, len
, xfered_len
,
11739 PACKET_qXfer_features
);
11741 case TARGET_OBJECT_LIBRARIES
:
11742 return remote_read_qxfer
11743 ("libraries", annex
, readbuf
, offset
, len
, xfered_len
,
11744 PACKET_qXfer_libraries
);
11746 case TARGET_OBJECT_LIBRARIES_SVR4
:
11747 return remote_read_qxfer
11748 ("libraries-svr4", annex
, readbuf
, offset
, len
, xfered_len
,
11749 PACKET_qXfer_libraries_svr4
);
11751 case TARGET_OBJECT_MEMORY_MAP
:
11752 gdb_assert (annex
== NULL
);
11753 return remote_read_qxfer
11754 ("memory-map", annex
, readbuf
, offset
, len
, xfered_len
,
11755 PACKET_qXfer_memory_map
);
11757 case TARGET_OBJECT_OSDATA
:
11758 /* Should only get here if we're connected. */
11759 gdb_assert (rs
->remote_desc
);
11760 return remote_read_qxfer
11761 ("osdata", annex
, readbuf
, offset
, len
, xfered_len
,
11762 PACKET_qXfer_osdata
);
11764 case TARGET_OBJECT_THREADS
:
11765 gdb_assert (annex
== NULL
);
11766 return remote_read_qxfer
11767 ("threads", annex
, readbuf
, offset
, len
, xfered_len
,
11768 PACKET_qXfer_threads
);
11770 case TARGET_OBJECT_TRACEFRAME_INFO
:
11771 gdb_assert (annex
== NULL
);
11772 return remote_read_qxfer
11773 ("traceframe-info", annex
, readbuf
, offset
, len
, xfered_len
,
11774 PACKET_qXfer_traceframe_info
);
11776 case TARGET_OBJECT_FDPIC
:
11777 return remote_read_qxfer
11778 ("fdpic", annex
, readbuf
, offset
, len
, xfered_len
, PACKET_qXfer_fdpic
);
11780 case TARGET_OBJECT_OPENVMS_UIB
:
11781 return remote_read_qxfer
11782 ("uib", annex
, readbuf
, offset
, len
, xfered_len
, PACKET_qXfer_uib
);
11784 case TARGET_OBJECT_BTRACE
:
11785 return remote_read_qxfer
11786 ("btrace", annex
, readbuf
, offset
, len
, xfered_len
,
11787 PACKET_qXfer_btrace
);
11789 case TARGET_OBJECT_BTRACE_CONF
:
11790 return remote_read_qxfer
11791 ("btrace-conf", annex
, readbuf
, offset
, len
, xfered_len
,
11792 PACKET_qXfer_btrace_conf
);
11794 case TARGET_OBJECT_EXEC_FILE
:
11795 return remote_read_qxfer
11796 ("exec-file", annex
, readbuf
, offset
, len
, xfered_len
,
11797 PACKET_qXfer_exec_file
);
11800 return TARGET_XFER_E_IO
;
11803 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
11804 large enough let the caller deal with it. */
11805 if (len
< get_remote_packet_size ())
11806 return TARGET_XFER_E_IO
;
11807 len
= get_remote_packet_size ();
11809 /* Except for querying the minimum buffer size, target must be open. */
11810 if (!rs
->remote_desc
)
11811 error (_("remote query is only available after target open"));
11813 gdb_assert (annex
!= NULL
);
11814 gdb_assert (readbuf
!= NULL
);
11816 p2
= rs
->buf
.data ();
11818 *p2
++ = query_type
;
11820 /* We used one buffer char for the remote protocol q command and
11821 another for the query type. As the remote protocol encapsulation
11822 uses 4 chars plus one extra in case we are debugging
11823 (remote_debug), we have PBUFZIZ - 7 left to pack the query
11826 while (annex
[i
] && (i
< (get_remote_packet_size () - 8)))
11828 /* Bad caller may have sent forbidden characters. */
11829 gdb_assert (isprint (annex
[i
]) && annex
[i
] != '$' && annex
[i
] != '#');
11834 gdb_assert (annex
[i
] == '\0');
11836 i
= putpkt (rs
->buf
);
11838 return TARGET_XFER_E_IO
;
11841 strcpy ((char *) readbuf
, rs
->buf
.data ());
11843 *xfered_len
= strlen ((char *) readbuf
);
11844 return (*xfered_len
!= 0) ? TARGET_XFER_OK
: TARGET_XFER_EOF
;
11847 /* Implementation of to_get_memory_xfer_limit. */
11850 remote_target::get_memory_xfer_limit ()
11852 return get_memory_write_packet_size ();
11856 remote_target::search_memory (CORE_ADDR start_addr
, ULONGEST search_space_len
,
11857 const gdb_byte
*pattern
, ULONGEST pattern_len
,
11858 CORE_ADDR
*found_addrp
)
11860 int addr_size
= gdbarch_addr_bit (current_inferior ()->arch ()) / 8;
11861 struct remote_state
*rs
= get_remote_state ();
11862 int max_size
= get_memory_write_packet_size ();
11864 /* Number of packet bytes used to encode the pattern;
11865 this could be more than PATTERN_LEN due to escape characters. */
11866 int escaped_pattern_len
;
11867 /* Amount of pattern that was encodable in the packet. */
11868 int used_pattern_len
;
11871 ULONGEST found_addr
;
11873 auto read_memory
= [this] (CORE_ADDR addr
, gdb_byte
*result
, size_t len
)
11875 return (target_read (this, TARGET_OBJECT_MEMORY
, NULL
, result
, addr
, len
)
11879 /* Don't go to the target if we don't have to. This is done before
11880 checking packet_support to avoid the possibility that a success for this
11881 edge case means the facility works in general. */
11882 if (pattern_len
> search_space_len
)
11884 if (pattern_len
== 0)
11886 *found_addrp
= start_addr
;
11890 /* If we already know the packet isn't supported, fall back to the simple
11891 way of searching memory. */
11893 if (m_features
.packet_support (PACKET_qSearch_memory
) == PACKET_DISABLE
)
11895 /* Target doesn't provided special support, fall back and use the
11896 standard support (copy memory and do the search here). */
11897 return simple_search_memory (read_memory
, start_addr
, search_space_len
,
11898 pattern
, pattern_len
, found_addrp
);
11901 /* Make sure the remote is pointing at the right process. */
11902 set_general_process ();
11904 /* Insert header. */
11905 i
= snprintf (rs
->buf
.data (), max_size
,
11906 "qSearch:memory:%s;%s;",
11907 phex_nz (start_addr
, addr_size
),
11908 phex_nz (search_space_len
, sizeof (search_space_len
)));
11909 max_size
-= (i
+ 1);
11911 /* Escape as much data as fits into rs->buf. */
11912 escaped_pattern_len
=
11913 remote_escape_output (pattern
, pattern_len
, 1,
11914 (gdb_byte
*) rs
->buf
.data () + i
,
11915 &used_pattern_len
, max_size
);
11917 /* Bail if the pattern is too large. */
11918 if (used_pattern_len
!= pattern_len
)
11919 error (_("Pattern is too large to transmit to remote target."));
11921 if (putpkt_binary (rs
->buf
.data (), i
+ escaped_pattern_len
) < 0
11922 || getpkt (&rs
->buf
) < 0
11923 || m_features
.packet_ok (rs
->buf
, PACKET_qSearch_memory
).status ()
11926 /* The request may not have worked because the command is not
11927 supported. If so, fall back to the simple way. */
11928 if (m_features
.packet_support (PACKET_qSearch_memory
) == PACKET_DISABLE
)
11930 return simple_search_memory (read_memory
, start_addr
, search_space_len
,
11931 pattern
, pattern_len
, found_addrp
);
11936 if (rs
->buf
[0] == '0')
11938 else if (rs
->buf
[0] == '1')
11941 if (rs
->buf
[1] != ',')
11942 error (_("Unknown qSearch:memory reply: %s"), rs
->buf
.data ());
11943 unpack_varlen_hex (&rs
->buf
[2], &found_addr
);
11944 *found_addrp
= found_addr
;
11947 error (_("Unknown qSearch:memory reply: %s"), rs
->buf
.data ());
11953 remote_target::rcmd (const char *command
, struct ui_file
*outbuf
)
11955 struct remote_state
*rs
= get_remote_state ();
11956 char *p
= rs
->buf
.data ();
11958 if (!rs
->remote_desc
)
11959 error (_("remote rcmd is only available after target open"));
11961 /* Send a NULL command across as an empty command. */
11962 if (command
== NULL
)
11965 /* The query prefix. */
11966 strcpy (rs
->buf
.data (), "qRcmd,");
11967 p
= strchr (rs
->buf
.data (), '\0');
11969 if ((strlen (rs
->buf
.data ()) + strlen (command
) * 2 + 8/*misc*/)
11970 > get_remote_packet_size ())
11971 error (_("\"monitor\" command ``%s'' is too long."), command
);
11973 /* Encode the actual command. */
11974 bin2hex ((const gdb_byte
*) command
, p
, strlen (command
));
11976 if (putpkt (rs
->buf
) < 0)
11977 error (_("Communication problem with target."));
11979 /* get/display the response */
11984 /* XXX - see also remote_get_noisy_reply(). */
11985 QUIT
; /* Allow user to bail out with ^C. */
11987 if (getpkt (&rs
->buf
) == -1)
11989 /* Timeout. Continue to (try to) read responses.
11990 This is better than stopping with an error, assuming the stub
11991 is still executing the (long) monitor command.
11992 If needed, the user can interrupt gdb using C-c, obtaining
11993 an effect similar to stop on timeout. */
11996 buf
= rs
->buf
.data ();
11997 if (buf
[0] == 'O' && buf
[1] != 'K')
11999 /* 'O' message from stub. */
12000 remote_console_output (buf
+ 1, outbuf
);
12003 packet_result result
= packet_check_result (buf
, false);
12004 switch (result
.status ())
12006 case PACKET_UNKNOWN
:
12007 error (_("Target does not support this command."));
12009 error (_("Protocol error with Rcmd: %s."), result
.err_msg ());
12014 if (strcmp (buf
, "OK") != 0)
12016 for (p
= buf
; p
[0] != '\0' && p
[1] != '\0'; p
+= 2)
12018 char c
= (fromhex (p
[0]) << 4) + fromhex (p
[1]);
12019 gdb_putc (c
, outbuf
);
12026 std::vector
<mem_region
>
12027 remote_target::memory_map ()
12029 std::vector
<mem_region
> result
;
12030 std::optional
<gdb::char_vector
> text
12031 = target_read_stralloc (current_inferior ()->top_target (),
12032 TARGET_OBJECT_MEMORY_MAP
, NULL
);
12035 result
= parse_memory_map (text
->data ());
12040 /* Set of callbacks used to implement the 'maint packet' command. */
12042 struct cli_packet_command_callbacks
: public send_remote_packet_callbacks
12044 /* Called before the packet is sent. BUF is the packet content before
12045 the protocol specific prefix, suffix, and escaping is added. */
12047 void sending (gdb::array_view
<const char> &buf
) override
12049 gdb_puts ("sending: ");
12050 print_packet (buf
);
12054 /* Called with BUF, the reply from the remote target. */
12056 void received (gdb::array_view
<const char> &buf
) override
12058 gdb_puts ("received: \"");
12059 print_packet (buf
);
12065 /* Print BUF o gdb_stdout. Any non-printable bytes in BUF are printed as
12066 '\x??' with '??' replaced by the hexadecimal value of the byte. */
12069 print_packet (gdb::array_view
<const char> &buf
)
12073 for (int i
= 0; i
< buf
.size (); ++i
)
12075 gdb_byte c
= buf
[i
];
12077 gdb_putc (c
, &stb
);
12079 gdb_printf (&stb
, "\\x%02x", (unsigned char) c
);
12082 gdb_puts (stb
.string ().c_str ());
12086 /* See remote.h. */
12089 send_remote_packet (gdb::array_view
<const char> &buf
,
12090 send_remote_packet_callbacks
*callbacks
)
12092 if (buf
.size () == 0 || buf
.data ()[0] == '\0')
12093 error (_("a remote packet must not be empty"));
12095 remote_target
*remote
= get_current_remote_target ();
12096 if (remote
== nullptr)
12097 error (_("packets can only be sent to a remote target"));
12099 callbacks
->sending (buf
);
12101 remote
->putpkt_binary (buf
.data (), buf
.size ());
12102 remote_state
*rs
= remote
->get_remote_state ();
12103 int bytes
= remote
->getpkt (&rs
->buf
);
12106 error (_("error while fetching packet from remote target"));
12108 gdb::array_view
<const char> view (&rs
->buf
[0], bytes
);
12109 callbacks
->received (view
);
12112 /* Entry point for the 'maint packet' command. */
12115 cli_packet_command (const char *args
, int from_tty
)
12117 cli_packet_command_callbacks cb
;
12118 gdb::array_view
<const char> view
12119 = gdb::make_array_view (args
, args
== nullptr ? 0 : strlen (args
));
12120 send_remote_packet (view
, &cb
);
12124 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
12126 static void display_thread_info (struct gdb_ext_thread_info
*info
);
12128 static void threadset_test_cmd (char *cmd
, int tty
);
12130 static void threadalive_test (char *cmd
, int tty
);
12132 static void threadlist_test_cmd (char *cmd
, int tty
);
12134 int get_and_display_threadinfo (threadref
*ref
);
12136 static void threadinfo_test_cmd (char *cmd
, int tty
);
12138 static int thread_display_step (threadref
*ref
, void *context
);
12140 static void threadlist_update_test_cmd (char *cmd
, int tty
);
12142 static void init_remote_threadtests (void);
12144 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
12147 threadset_test_cmd (const char *cmd
, int tty
)
12149 int sample_thread
= SAMPLE_THREAD
;
12151 gdb_printf (_("Remote threadset test\n"));
12152 set_general_thread (sample_thread
);
12157 threadalive_test (const char *cmd
, int tty
)
12159 int sample_thread
= SAMPLE_THREAD
;
12160 int pid
= inferior_ptid
.pid ();
12161 ptid_t ptid
= ptid_t (pid
, sample_thread
, 0);
12163 if (remote_thread_alive (ptid
))
12164 gdb_printf ("PASS: Thread alive test\n");
12166 gdb_printf ("FAIL: Thread alive test\n");
12169 void output_threadid (char *title
, threadref
*ref
);
12172 output_threadid (char *title
, threadref
*ref
)
12176 pack_threadid (&hexid
[0], ref
); /* Convert thread id into hex. */
12178 gdb_printf ("%s %s\n", title
, (&hexid
[0]));
12182 threadlist_test_cmd (const char *cmd
, int tty
)
12185 threadref nextthread
;
12186 int done
, result_count
;
12187 threadref threadlist
[3];
12189 gdb_printf ("Remote Threadlist test\n");
12190 if (!remote_get_threadlist (startflag
, &nextthread
, 3, &done
,
12191 &result_count
, &threadlist
[0]))
12192 gdb_printf ("FAIL: threadlist test\n");
12195 threadref
*scan
= threadlist
;
12196 threadref
*limit
= scan
+ result_count
;
12198 while (scan
< limit
)
12199 output_threadid (" thread ", scan
++);
12204 display_thread_info (struct gdb_ext_thread_info
*info
)
12206 output_threadid ("Threadid: ", &info
->threadid
);
12207 gdb_printf ("Name: %s\n ", info
->shortname
);
12208 gdb_printf ("State: %s\n", info
->display
);
12209 gdb_printf ("other: %s\n\n", info
->more_display
);
12213 get_and_display_threadinfo (threadref
*ref
)
12217 struct gdb_ext_thread_info threadinfo
;
12219 set
= TAG_THREADID
| TAG_EXISTS
| TAG_THREADNAME
12220 | TAG_MOREDISPLAY
| TAG_DISPLAY
;
12221 if (0 != (result
= remote_get_threadinfo (ref
, set
, &threadinfo
)))
12222 display_thread_info (&threadinfo
);
12227 threadinfo_test_cmd (const char *cmd
, int tty
)
12229 int athread
= SAMPLE_THREAD
;
12233 int_to_threadref (&thread
, athread
);
12234 gdb_printf ("Remote Threadinfo test\n");
12235 if (!get_and_display_threadinfo (&thread
))
12236 gdb_printf ("FAIL cannot get thread info\n");
12240 thread_display_step (threadref
*ref
, void *context
)
12242 /* output_threadid(" threadstep ",ref); *//* simple test */
12243 return get_and_display_threadinfo (ref
);
12247 threadlist_update_test_cmd (const char *cmd
, int tty
)
12249 gdb_printf ("Remote Threadlist update test\n");
12250 remote_threadlist_iterator (thread_display_step
, 0, CRAZY_MAX_THREADS
);
12254 init_remote_threadtests (void)
12256 add_com ("tlist", class_obscure
, threadlist_test_cmd
,
12257 _("Fetch and print the remote list of "
12258 "thread identifiers, one pkt only."));
12259 add_com ("tinfo", class_obscure
, threadinfo_test_cmd
,
12260 _("Fetch and display info about one thread."));
12261 add_com ("tset", class_obscure
, threadset_test_cmd
,
12262 _("Test setting to a different thread."));
12263 add_com ("tupd", class_obscure
, threadlist_update_test_cmd
,
12264 _("Iterate through updating all remote thread info."));
12265 add_com ("talive", class_obscure
, threadalive_test
,
12266 _("Remote thread alive test."));
12271 /* Convert a thread ID to a string. */
12274 remote_target::pid_to_str (ptid_t ptid
)
12276 if (ptid
== null_ptid
)
12277 return normal_pid_to_str (ptid
);
12278 else if (ptid
.is_pid ())
12280 /* Printing an inferior target id. */
12282 /* When multi-process extensions are off, there's no way in the
12283 remote protocol to know the remote process id, if there's any
12284 at all. There's one exception --- when we're connected with
12285 target extended-remote, and we manually attached to a process
12286 with "attach PID". We don't record anywhere a flag that
12287 allows us to distinguish that case from the case of
12288 connecting with extended-remote and the stub already being
12289 attached to a process, and reporting yes to qAttached, hence
12290 no smart special casing here. */
12291 if (!m_features
.remote_multi_process_p ())
12292 return "Remote target";
12294 return normal_pid_to_str (ptid
);
12298 if (magic_null_ptid
== ptid
)
12299 return "Thread <main>";
12300 else if (m_features
.remote_multi_process_p ())
12301 if (ptid
.lwp () == 0)
12302 return normal_pid_to_str (ptid
);
12304 return string_printf ("Thread %d.%ld",
12305 ptid
.pid (), ptid
.lwp ());
12307 return string_printf ("Thread %ld", ptid
.lwp ());
12311 /* Get the address of the thread local variable in OBJFILE which is
12312 stored at OFFSET within the thread local storage for thread PTID. */
12315 remote_target::get_thread_local_address (ptid_t ptid
, CORE_ADDR lm
,
12318 if (m_features
.packet_support (PACKET_qGetTLSAddr
) != PACKET_DISABLE
)
12320 struct remote_state
*rs
= get_remote_state ();
12321 char *p
= rs
->buf
.data ();
12322 char *endp
= p
+ get_remote_packet_size ();
12324 strcpy (p
, "qGetTLSAddr:");
12326 p
= write_ptid (p
, endp
, ptid
);
12328 p
+= hexnumstr (p
, offset
);
12330 p
+= hexnumstr (p
, lm
);
12335 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_qGetTLSAddr
);
12336 if (result
.status () == PACKET_OK
)
12340 unpack_varlen_hex (rs
->buf
.data (), &addr
);
12343 else if (result
.status () == PACKET_UNKNOWN
)
12344 throw_error (TLS_GENERIC_ERROR
,
12345 _("Remote target doesn't support qGetTLSAddr packet"));
12347 throw_error (TLS_GENERIC_ERROR
,
12348 _("Remote target failed to process qGetTLSAddr request"));
12351 throw_error (TLS_GENERIC_ERROR
,
12352 _("TLS not supported or disabled on this target"));
12357 /* Provide thread local base, i.e. Thread Information Block address.
12358 Returns 1 if ptid is found and thread_local_base is non zero. */
12361 remote_target::get_tib_address (ptid_t ptid
, CORE_ADDR
*addr
)
12363 if (m_features
.packet_support (PACKET_qGetTIBAddr
) != PACKET_DISABLE
)
12365 struct remote_state
*rs
= get_remote_state ();
12366 char *p
= rs
->buf
.data ();
12367 char *endp
= p
+ get_remote_packet_size ();
12369 strcpy (p
, "qGetTIBAddr:");
12371 p
= write_ptid (p
, endp
, ptid
);
12376 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_qGetTIBAddr
);
12377 if (result
.status () == PACKET_OK
)
12380 unpack_varlen_hex (rs
->buf
.data (), &val
);
12382 *addr
= (CORE_ADDR
) val
;
12385 else if (result
.status () == PACKET_UNKNOWN
)
12386 error (_("Remote target doesn't support qGetTIBAddr packet"));
12388 error (_("Remote target failed to process qGetTIBAddr request, %s"),
12389 result
.err_msg ());
12392 error (_("qGetTIBAddr not supported or disabled on this target"));
12397 /* Support for inferring a target description based on the current
12398 architecture and the size of a 'g' packet. While the 'g' packet
12399 can have any size (since optional registers can be left off the
12400 end), some sizes are easily recognizable given knowledge of the
12401 approximate architecture. */
12403 struct remote_g_packet_guess
12405 remote_g_packet_guess (int bytes_
, const struct target_desc
*tdesc_
)
12412 const struct target_desc
*tdesc
;
12415 struct remote_g_packet_data
12417 std::vector
<remote_g_packet_guess
> guesses
;
12420 static const registry
<gdbarch
>::key
<struct remote_g_packet_data
>
12421 remote_g_packet_data_handle
;
12423 static struct remote_g_packet_data
*
12424 get_g_packet_data (struct gdbarch
*gdbarch
)
12426 struct remote_g_packet_data
*data
12427 = remote_g_packet_data_handle
.get (gdbarch
);
12428 if (data
== nullptr)
12429 data
= remote_g_packet_data_handle
.emplace (gdbarch
);
12434 register_remote_g_packet_guess (struct gdbarch
*gdbarch
, int bytes
,
12435 const struct target_desc
*tdesc
)
12437 struct remote_g_packet_data
*data
= get_g_packet_data (gdbarch
);
12439 gdb_assert (tdesc
!= NULL
);
12441 for (const remote_g_packet_guess
&guess
: data
->guesses
)
12442 if (guess
.bytes
== bytes
)
12443 internal_error (_("Duplicate g packet description added for size %d"),
12446 data
->guesses
.emplace_back (bytes
, tdesc
);
12449 /* Return true if remote_read_description would do anything on this target
12450 and architecture, false otherwise. */
12453 remote_read_description_p (struct target_ops
*target
)
12455 remote_g_packet_data
*data
= get_g_packet_data (current_inferior ()->arch ());
12457 return !data
->guesses
.empty ();
12460 const struct target_desc
*
12461 remote_target::read_description ()
12463 remote_g_packet_data
*data
= get_g_packet_data (current_inferior ()->arch ());
12465 /* Do not try this during initial connection, when we do not know
12466 whether there is a running but stopped thread. */
12467 if (!target_has_execution () || inferior_ptid
== null_ptid
)
12468 return beneath ()->read_description ();
12470 if (!data
->guesses
.empty ())
12472 int bytes
= send_g_packet ();
12474 for (const remote_g_packet_guess
&guess
: data
->guesses
)
12475 if (guess
.bytes
== bytes
)
12476 return guess
.tdesc
;
12478 /* We discard the g packet. A minor optimization would be to
12479 hold on to it, and fill the register cache once we have selected
12480 an architecture, but it's too tricky to do safely. */
12483 return beneath ()->read_description ();
12486 /* Remote file transfer support. This is host-initiated I/O, not
12487 target-initiated; for target-initiated, see remote-fileio.c. */
12489 /* If *LEFT is at least the length of STRING, copy STRING to
12490 *BUFFER, update *BUFFER to point to the new end of the buffer, and
12491 decrease *LEFT. Otherwise raise an error. */
12494 remote_buffer_add_string (char **buffer
, int *left
, const char *string
)
12496 int len
= strlen (string
);
12499 error (_("Packet too long for target."));
12501 memcpy (*buffer
, string
, len
);
12505 /* NUL-terminate the buffer as a convenience, if there is
12511 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
12512 *BUFFER, update *BUFFER to point to the new end of the buffer, and
12513 decrease *LEFT. Otherwise raise an error. */
12516 remote_buffer_add_bytes (char **buffer
, int *left
, const gdb_byte
*bytes
,
12519 if (2 * len
> *left
)
12520 error (_("Packet too long for target."));
12522 bin2hex (bytes
, *buffer
, len
);
12523 *buffer
+= 2 * len
;
12526 /* NUL-terminate the buffer as a convenience, if there is
12532 /* If *LEFT is large enough, convert VALUE to hex and add it to
12533 *BUFFER, update *BUFFER to point to the new end of the buffer, and
12534 decrease *LEFT. Otherwise raise an error. */
12537 remote_buffer_add_int (char **buffer
, int *left
, ULONGEST value
)
12539 int len
= hexnumlen (value
);
12542 error (_("Packet too long for target."));
12544 hexnumstr (*buffer
, value
);
12548 /* NUL-terminate the buffer as a convenience, if there is
12554 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
12555 value, *REMOTE_ERRNO to the remote error number or FILEIO_SUCCESS if none
12556 was included, and *ATTACHMENT to point to the start of the annex
12557 if any. The length of the packet isn't needed here; there may
12558 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
12560 Return 0 if the packet could be parsed, -1 if it could not. If
12561 -1 is returned, the other variables may not be initialized. */
12564 remote_hostio_parse_result (const char *buffer
, int *retcode
,
12565 fileio_error
*remote_errno
, const char **attachment
)
12569 *remote_errno
= FILEIO_SUCCESS
;
12570 *attachment
= NULL
;
12572 if (buffer
[0] != 'F')
12576 *retcode
= strtol (&buffer
[1], &p
, 16);
12577 if (errno
!= 0 || p
== &buffer
[1])
12580 /* Check for ",errno". */
12584 *remote_errno
= (fileio_error
) strtol (p
+ 1, &p2
, 16);
12585 if (errno
!= 0 || p
+ 1 == p2
)
12590 /* Check for ";attachment". If there is no attachment, the
12591 packet should end here. */
12594 *attachment
= p
+ 1;
12597 else if (*p
== '\0')
12603 /* Send a prepared I/O packet to the target and read its response.
12604 The prepared packet is in the global RS->BUF before this function
12605 is called, and the answer is there when we return.
12607 COMMAND_BYTES is the length of the request to send, which may include
12608 binary data. WHICH_PACKET is the packet configuration to check
12609 before attempting a packet. If an error occurs, *REMOTE_ERRNO
12610 is set to the error number and -1 is returned. Otherwise the value
12611 returned by the function is returned.
12613 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
12614 attachment is expected; an error will be reported if there's a
12615 mismatch. If one is found, *ATTACHMENT will be set to point into
12616 the packet buffer and *ATTACHMENT_LEN will be set to the
12617 attachment's length. */
12620 remote_target::remote_hostio_send_command (int command_bytes
, int which_packet
,
12621 fileio_error
*remote_errno
, const char **attachment
,
12622 int *attachment_len
)
12624 struct remote_state
*rs
= get_remote_state ();
12625 int ret
, bytes_read
;
12626 const char *attachment_tmp
;
12628 if (m_features
.packet_support (which_packet
) == PACKET_DISABLE
)
12630 *remote_errno
= FILEIO_ENOSYS
;
12634 putpkt_binary (rs
->buf
.data (), command_bytes
);
12635 bytes_read
= getpkt (&rs
->buf
);
12637 /* If it timed out, something is wrong. Don't try to parse the
12639 if (bytes_read
< 0)
12641 *remote_errno
= FILEIO_EINVAL
;
12645 switch (m_features
.packet_ok (rs
->buf
, which_packet
).status ())
12648 *remote_errno
= FILEIO_EINVAL
;
12650 case PACKET_UNKNOWN
:
12651 *remote_errno
= FILEIO_ENOSYS
;
12657 if (remote_hostio_parse_result (rs
->buf
.data (), &ret
, remote_errno
,
12660 *remote_errno
= FILEIO_EINVAL
;
12664 /* Make sure we saw an attachment if and only if we expected one. */
12665 if ((attachment_tmp
== NULL
&& attachment
!= NULL
)
12666 || (attachment_tmp
!= NULL
&& attachment
== NULL
))
12668 *remote_errno
= FILEIO_EINVAL
;
12672 /* If an attachment was found, it must point into the packet buffer;
12673 work out how many bytes there were. */
12674 if (attachment_tmp
!= NULL
)
12676 *attachment
= attachment_tmp
;
12677 *attachment_len
= bytes_read
- (*attachment
- rs
->buf
.data ());
12683 /* See declaration.h. */
12686 readahead_cache::invalidate ()
12691 /* See declaration.h. */
12694 readahead_cache::invalidate_fd (int fd
)
12696 if (this->fd
== fd
)
12700 /* Set the filesystem remote_hostio functions that take FILENAME
12701 arguments will use. Return 0 on success, or -1 if an error
12702 occurs (and set *REMOTE_ERRNO). */
12705 remote_target::remote_hostio_set_filesystem (struct inferior
*inf
,
12706 fileio_error
*remote_errno
)
12708 struct remote_state
*rs
= get_remote_state ();
12709 int required_pid
= (inf
== NULL
|| inf
->fake_pid_p
) ? 0 : inf
->pid
;
12710 char *p
= rs
->buf
.data ();
12711 int left
= get_remote_packet_size () - 1;
12715 if (m_features
.packet_support (PACKET_vFile_setfs
) == PACKET_DISABLE
)
12718 if (rs
->fs_pid
!= -1 && required_pid
== rs
->fs_pid
)
12721 remote_buffer_add_string (&p
, &left
, "vFile:setfs:");
12723 xsnprintf (arg
, sizeof (arg
), "%x", required_pid
);
12724 remote_buffer_add_string (&p
, &left
, arg
);
12726 ret
= remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_setfs
,
12727 remote_errno
, NULL
, NULL
);
12729 if (m_features
.packet_support (PACKET_vFile_setfs
) == PACKET_DISABLE
)
12733 rs
->fs_pid
= required_pid
;
12738 /* Implementation of to_fileio_open. */
12741 remote_target::remote_hostio_open (inferior
*inf
, const char *filename
,
12742 int flags
, int mode
, int warn_if_slow
,
12743 fileio_error
*remote_errno
)
12745 struct remote_state
*rs
= get_remote_state ();
12746 char *p
= rs
->buf
.data ();
12747 int left
= get_remote_packet_size () - 1;
12751 static int warning_issued
= 0;
12753 gdb_printf (_("Reading %s from remote target...\n"),
12756 if (!warning_issued
)
12758 warning (_("File transfers from remote targets can be slow."
12759 " Use \"set sysroot\" to access files locally"
12761 warning_issued
= 1;
12765 if (remote_hostio_set_filesystem (inf
, remote_errno
) != 0)
12768 remote_buffer_add_string (&p
, &left
, "vFile:open:");
12770 remote_buffer_add_bytes (&p
, &left
, (const gdb_byte
*) filename
,
12771 strlen (filename
));
12772 remote_buffer_add_string (&p
, &left
, ",");
12774 remote_buffer_add_int (&p
, &left
, flags
);
12775 remote_buffer_add_string (&p
, &left
, ",");
12777 remote_buffer_add_int (&p
, &left
, mode
);
12779 return remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_open
,
12780 remote_errno
, NULL
, NULL
);
12784 remote_target::fileio_open (struct inferior
*inf
, const char *filename
,
12785 int flags
, int mode
, int warn_if_slow
,
12786 fileio_error
*remote_errno
)
12788 return remote_hostio_open (inf
, filename
, flags
, mode
, warn_if_slow
,
12792 /* Implementation of to_fileio_pwrite. */
12795 remote_target::remote_hostio_pwrite (int fd
, const gdb_byte
*write_buf
, int len
,
12796 ULONGEST offset
, fileio_error
*remote_errno
)
12798 struct remote_state
*rs
= get_remote_state ();
12799 char *p
= rs
->buf
.data ();
12800 int left
= get_remote_packet_size ();
12803 rs
->readahead_cache
.invalidate_fd (fd
);
12805 remote_buffer_add_string (&p
, &left
, "vFile:pwrite:");
12807 remote_buffer_add_int (&p
, &left
, fd
);
12808 remote_buffer_add_string (&p
, &left
, ",");
12810 remote_buffer_add_int (&p
, &left
, offset
);
12811 remote_buffer_add_string (&p
, &left
, ",");
12813 p
+= remote_escape_output (write_buf
, len
, 1, (gdb_byte
*) p
, &out_len
,
12814 (get_remote_packet_size ()
12815 - (p
- rs
->buf
.data ())));
12817 return remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_pwrite
,
12818 remote_errno
, NULL
, NULL
);
12822 remote_target::fileio_pwrite (int fd
, const gdb_byte
*write_buf
, int len
,
12823 ULONGEST offset
, fileio_error
*remote_errno
)
12825 return remote_hostio_pwrite (fd
, write_buf
, len
, offset
, remote_errno
);
12828 /* Helper for the implementation of to_fileio_pread. Read the file
12829 from the remote side with vFile:pread. */
12832 remote_target::remote_hostio_pread_vFile (int fd
, gdb_byte
*read_buf
, int len
,
12833 ULONGEST offset
, fileio_error
*remote_errno
)
12835 struct remote_state
*rs
= get_remote_state ();
12836 char *p
= rs
->buf
.data ();
12837 const char *attachment
;
12838 int left
= get_remote_packet_size ();
12839 int ret
, attachment_len
;
12842 remote_buffer_add_string (&p
, &left
, "vFile:pread:");
12844 remote_buffer_add_int (&p
, &left
, fd
);
12845 remote_buffer_add_string (&p
, &left
, ",");
12847 remote_buffer_add_int (&p
, &left
, len
);
12848 remote_buffer_add_string (&p
, &left
, ",");
12850 remote_buffer_add_int (&p
, &left
, offset
);
12852 ret
= remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_pread
,
12853 remote_errno
, &attachment
,
12859 read_len
= remote_unescape_input ((gdb_byte
*) attachment
, attachment_len
,
12861 if (read_len
!= ret
)
12862 error (_("Read returned %d, but %d bytes."), ret
, (int) read_len
);
12867 /* See declaration.h. */
12870 readahead_cache::pread (int fd
, gdb_byte
*read_buf
, size_t len
,
12874 && this->offset
<= offset
12875 && offset
< this->offset
+ this->buf
.size ())
12877 ULONGEST max
= this->offset
+ this->buf
.size ();
12879 if (offset
+ len
> max
)
12880 len
= max
- offset
;
12882 memcpy (read_buf
, &this->buf
[offset
- this->offset
], len
);
12889 /* Implementation of to_fileio_pread. */
12892 remote_target::remote_hostio_pread (int fd
, gdb_byte
*read_buf
, int len
,
12893 ULONGEST offset
, fileio_error
*remote_errno
)
12896 struct remote_state
*rs
= get_remote_state ();
12897 readahead_cache
*cache
= &rs
->readahead_cache
;
12899 ret
= cache
->pread (fd
, read_buf
, len
, offset
);
12902 cache
->hit_count
++;
12904 remote_debug_printf ("readahead cache hit %s",
12905 pulongest (cache
->hit_count
));
12909 cache
->miss_count
++;
12911 remote_debug_printf ("readahead cache miss %s",
12912 pulongest (cache
->miss_count
));
12915 cache
->offset
= offset
;
12916 cache
->buf
.resize (get_remote_packet_size ());
12918 ret
= remote_hostio_pread_vFile (cache
->fd
, &cache
->buf
[0],
12919 cache
->buf
.size (),
12920 cache
->offset
, remote_errno
);
12923 cache
->invalidate_fd (fd
);
12927 cache
->buf
.resize (ret
);
12928 return cache
->pread (fd
, read_buf
, len
, offset
);
12932 remote_target::fileio_pread (int fd
, gdb_byte
*read_buf
, int len
,
12933 ULONGEST offset
, fileio_error
*remote_errno
)
12935 return remote_hostio_pread (fd
, read_buf
, len
, offset
, remote_errno
);
12938 /* Implementation of to_fileio_close. */
12941 remote_target::remote_hostio_close (int fd
, fileio_error
*remote_errno
)
12943 struct remote_state
*rs
= get_remote_state ();
12944 char *p
= rs
->buf
.data ();
12945 int left
= get_remote_packet_size () - 1;
12947 rs
->readahead_cache
.invalidate_fd (fd
);
12949 remote_buffer_add_string (&p
, &left
, "vFile:close:");
12951 remote_buffer_add_int (&p
, &left
, fd
);
12953 return remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_close
,
12954 remote_errno
, NULL
, NULL
);
12958 remote_target::fileio_close (int fd
, fileio_error
*remote_errno
)
12960 return remote_hostio_close (fd
, remote_errno
);
12963 /* Implementation of to_fileio_unlink. */
12966 remote_target::remote_hostio_unlink (inferior
*inf
, const char *filename
,
12967 fileio_error
*remote_errno
)
12969 struct remote_state
*rs
= get_remote_state ();
12970 char *p
= rs
->buf
.data ();
12971 int left
= get_remote_packet_size () - 1;
12973 if (remote_hostio_set_filesystem (inf
, remote_errno
) != 0)
12976 remote_buffer_add_string (&p
, &left
, "vFile:unlink:");
12978 remote_buffer_add_bytes (&p
, &left
, (const gdb_byte
*) filename
,
12979 strlen (filename
));
12981 return remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_unlink
,
12982 remote_errno
, NULL
, NULL
);
12986 remote_target::fileio_unlink (struct inferior
*inf
, const char *filename
,
12987 fileio_error
*remote_errno
)
12989 return remote_hostio_unlink (inf
, filename
, remote_errno
);
12992 /* Implementation of to_fileio_readlink. */
12994 std::optional
<std::string
>
12995 remote_target::fileio_readlink (struct inferior
*inf
, const char *filename
,
12996 fileio_error
*remote_errno
)
12998 struct remote_state
*rs
= get_remote_state ();
12999 char *p
= rs
->buf
.data ();
13000 const char *attachment
;
13001 int left
= get_remote_packet_size ();
13002 int len
, attachment_len
;
13005 if (remote_hostio_set_filesystem (inf
, remote_errno
) != 0)
13008 remote_buffer_add_string (&p
, &left
, "vFile:readlink:");
13010 remote_buffer_add_bytes (&p
, &left
, (const gdb_byte
*) filename
,
13011 strlen (filename
));
13013 len
= remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_readlink
,
13014 remote_errno
, &attachment
,
13020 std::string
ret (len
, '\0');
13022 read_len
= remote_unescape_input ((gdb_byte
*) attachment
, attachment_len
,
13023 (gdb_byte
*) &ret
[0], len
);
13024 if (read_len
!= len
)
13025 error (_("Readlink returned %d, but %d bytes."), len
, read_len
);
13030 /* Implementation of to_fileio_fstat. */
13033 remote_target::fileio_fstat (int fd
, struct stat
*st
, fileio_error
*remote_errno
)
13035 struct remote_state
*rs
= get_remote_state ();
13036 char *p
= rs
->buf
.data ();
13037 int left
= get_remote_packet_size ();
13038 int attachment_len
, ret
;
13039 const char *attachment
;
13040 struct fio_stat fst
;
13043 remote_buffer_add_string (&p
, &left
, "vFile:fstat:");
13045 remote_buffer_add_int (&p
, &left
, fd
);
13047 ret
= remote_hostio_send_command (p
- rs
->buf
.data (), PACKET_vFile_fstat
,
13048 remote_errno
, &attachment
,
13052 if (*remote_errno
!= FILEIO_ENOSYS
)
13055 /* Strictly we should return -1, ENOSYS here, but when
13056 "set sysroot remote:" was implemented in August 2008
13057 BFD's need for a stat function was sidestepped with
13058 this hack. This was not remedied until March 2015
13059 so we retain the previous behavior to avoid breaking
13062 Note that the memset is a March 2015 addition; older
13063 GDBs set st_size *and nothing else* so the structure
13064 would have garbage in all other fields. This might
13065 break something but retaining the previous behavior
13066 here would be just too wrong. */
13068 memset (st
, 0, sizeof (struct stat
));
13069 st
->st_size
= INT_MAX
;
13073 read_len
= remote_unescape_input ((gdb_byte
*) attachment
, attachment_len
,
13074 (gdb_byte
*) &fst
, sizeof (fst
));
13076 if (read_len
!= ret
)
13077 error (_("vFile:fstat returned %d, but %d bytes."), ret
, read_len
);
13079 if (read_len
!= sizeof (fst
))
13080 error (_("vFile:fstat returned %d bytes, but expecting %d."),
13081 read_len
, (int) sizeof (fst
));
13083 remote_fileio_to_host_stat (&fst
, st
);
13088 /* Implementation of to_filesystem_is_local. */
13091 remote_target::filesystem_is_local ()
13093 /* Valgrind GDB presents itself as a remote target but works
13094 on the local filesystem: it does not implement remote get
13095 and users are not expected to set a sysroot. To handle
13096 this case we treat the remote filesystem as local if the
13097 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
13098 does not support vFile:open. */
13099 if (gdb_sysroot
== TARGET_SYSROOT_PREFIX
)
13101 packet_support ps
= m_features
.packet_support (PACKET_vFile_open
);
13103 if (ps
== PACKET_SUPPORT_UNKNOWN
)
13106 fileio_error remote_errno
;
13108 /* Try opening a file to probe support. The supplied
13109 filename is irrelevant, we only care about whether
13110 the stub recognizes the packet or not. */
13111 fd
= remote_hostio_open (NULL
, "just probing",
13112 FILEIO_O_RDONLY
, 0700, 0,
13116 remote_hostio_close (fd
, &remote_errno
);
13118 ps
= m_features
.packet_support (PACKET_vFile_open
);
13121 if (ps
== PACKET_DISABLE
)
13123 static int warning_issued
= 0;
13125 if (!warning_issued
)
13127 warning (_("remote target does not support file"
13128 " transfer, attempting to access files"
13129 " from local filesystem."));
13130 warning_issued
= 1;
13141 remote_hostio_error (fileio_error errnum
)
13143 int host_error
= fileio_error_to_host (errnum
);
13145 if (host_error
== -1)
13146 error (_("Unknown remote I/O error %d"), errnum
);
13148 error (_("Remote I/O error: %s"), safe_strerror (host_error
));
13151 /* A RAII wrapper around a remote file descriptor. */
13153 class scoped_remote_fd
13156 scoped_remote_fd (remote_target
*remote
, int fd
)
13157 : m_remote (remote
), m_fd (fd
)
13161 ~scoped_remote_fd ()
13167 fileio_error remote_errno
;
13168 m_remote
->remote_hostio_close (m_fd
, &remote_errno
);
13172 /* Swallow exception before it escapes the dtor. If
13173 something goes wrong, likely the connection is gone,
13174 and there's nothing else that can be done. */
13179 DISABLE_COPY_AND_ASSIGN (scoped_remote_fd
);
13181 /* Release ownership of the file descriptor, and return it. */
13182 ATTRIBUTE_UNUSED_RESULT
int release () noexcept
13189 /* Return the owned file descriptor. */
13190 int get () const noexcept
13196 /* The remote target. */
13197 remote_target
*m_remote
;
13199 /* The owned remote I/O file descriptor. */
13204 remote_file_put (const char *local_file
, const char *remote_file
, int from_tty
)
13206 remote_target
*remote
= get_current_remote_target ();
13208 if (remote
== nullptr)
13209 error (_("command can only be used with remote target"));
13211 remote
->remote_file_put (local_file
, remote_file
, from_tty
);
13215 remote_target::remote_file_put (const char *local_file
, const char *remote_file
,
13218 int retcode
, bytes
, io_size
;
13219 fileio_error remote_errno
;
13220 int bytes_in_buffer
;
13224 gdb_file_up file
= gdb_fopen_cloexec (local_file
, "rb");
13226 perror_with_name (local_file
);
13228 scoped_remote_fd fd
13229 (this, remote_hostio_open (NULL
,
13230 remote_file
, (FILEIO_O_WRONLY
| FILEIO_O_CREAT
13232 0700, 0, &remote_errno
));
13233 if (fd
.get () == -1)
13234 remote_hostio_error (remote_errno
);
13236 /* Send up to this many bytes at once. They won't all fit in the
13237 remote packet limit, so we'll transfer slightly fewer. */
13238 io_size
= get_remote_packet_size ();
13239 gdb::byte_vector
buffer (io_size
);
13241 bytes_in_buffer
= 0;
13244 while (bytes_in_buffer
|| !saw_eof
)
13248 bytes
= fread (buffer
.data () + bytes_in_buffer
, 1,
13249 io_size
- bytes_in_buffer
,
13253 if (ferror (file
.get ()))
13254 error (_("Error reading %s."), local_file
);
13257 /* EOF. Unless there is something still in the
13258 buffer from the last iteration, we are done. */
13260 if (bytes_in_buffer
== 0)
13268 bytes
+= bytes_in_buffer
;
13269 bytes_in_buffer
= 0;
13271 retcode
= remote_hostio_pwrite (fd
.get (), buffer
.data (), bytes
,
13272 offset
, &remote_errno
);
13275 remote_hostio_error (remote_errno
);
13276 else if (retcode
== 0)
13277 error (_("Remote write of %d bytes returned 0!"), bytes
);
13278 else if (retcode
< bytes
)
13280 /* Short write. Save the rest of the read data for the next
13282 bytes_in_buffer
= bytes
- retcode
;
13283 memmove (buffer
.data (), buffer
.data () + retcode
, bytes_in_buffer
);
13289 if (remote_hostio_close (fd
.release (), &remote_errno
))
13290 remote_hostio_error (remote_errno
);
13293 gdb_printf (_("Successfully sent file \"%s\".\n"), local_file
);
13297 remote_file_get (const char *remote_file
, const char *local_file
, int from_tty
)
13299 remote_target
*remote
= get_current_remote_target ();
13301 if (remote
== nullptr)
13302 error (_("command can only be used with remote target"));
13304 remote
->remote_file_get (remote_file
, local_file
, from_tty
);
13308 remote_target::remote_file_get (const char *remote_file
, const char *local_file
,
13311 fileio_error remote_errno
;
13312 int bytes
, io_size
;
13315 scoped_remote_fd fd
13316 (this, remote_hostio_open (NULL
,
13317 remote_file
, FILEIO_O_RDONLY
, 0, 0,
13319 if (fd
.get () == -1)
13320 remote_hostio_error (remote_errno
);
13322 gdb_file_up file
= gdb_fopen_cloexec (local_file
, "wb");
13324 perror_with_name (local_file
);
13326 /* Send up to this many bytes at once. They won't all fit in the
13327 remote packet limit, so we'll transfer slightly fewer. */
13328 io_size
= get_remote_packet_size ();
13329 gdb::byte_vector
buffer (io_size
);
13334 bytes
= remote_hostio_pread (fd
.get (), buffer
.data (), io_size
, offset
,
13337 /* Success, but no bytes, means end-of-file. */
13340 remote_hostio_error (remote_errno
);
13344 bytes
= fwrite (buffer
.data (), 1, bytes
, file
.get ());
13346 perror_with_name (local_file
);
13349 if (remote_hostio_close (fd
.release (), &remote_errno
))
13350 remote_hostio_error (remote_errno
);
13353 gdb_printf (_("Successfully fetched file \"%s\".\n"), remote_file
);
13357 remote_file_delete (const char *remote_file
, int from_tty
)
13359 remote_target
*remote
= get_current_remote_target ();
13361 if (remote
== nullptr)
13362 error (_("command can only be used with remote target"));
13364 remote
->remote_file_delete (remote_file
, from_tty
);
13368 remote_target::remote_file_delete (const char *remote_file
, int from_tty
)
13371 fileio_error remote_errno
;
13373 retcode
= remote_hostio_unlink (NULL
, remote_file
, &remote_errno
);
13375 remote_hostio_error (remote_errno
);
13378 gdb_printf (_("Successfully deleted file \"%s\".\n"), remote_file
);
13382 remote_put_command (const char *args
, int from_tty
)
13385 error_no_arg (_("file to put"));
13387 gdb_argv
argv (args
);
13388 if (argv
[0] == NULL
|| argv
[1] == NULL
|| argv
[2] != NULL
)
13389 error (_("Invalid parameters to remote put"));
13391 remote_file_put (argv
[0], argv
[1], from_tty
);
13395 remote_get_command (const char *args
, int from_tty
)
13398 error_no_arg (_("file to get"));
13400 gdb_argv
argv (args
);
13401 if (argv
[0] == NULL
|| argv
[1] == NULL
|| argv
[2] != NULL
)
13402 error (_("Invalid parameters to remote get"));
13404 remote_file_get (argv
[0], argv
[1], from_tty
);
13408 remote_delete_command (const char *args
, int from_tty
)
13411 error_no_arg (_("file to delete"));
13413 gdb_argv
argv (args
);
13414 if (argv
[0] == NULL
|| argv
[1] != NULL
)
13415 error (_("Invalid parameters to remote delete"));
13417 remote_file_delete (argv
[0], from_tty
);
13421 remote_target::can_execute_reverse ()
13423 if (m_features
.packet_support (PACKET_bs
) == PACKET_ENABLE
13424 || m_features
.packet_support (PACKET_bc
) == PACKET_ENABLE
)
13431 remote_target::supports_non_stop ()
13437 remote_target::supports_disable_randomization ()
13439 /* Only supported in extended mode. */
13444 remote_target::supports_multi_process ()
13446 return m_features
.remote_multi_process_p ();
13450 remote_target::remote_supports_cond_tracepoints ()
13452 return (m_features
.packet_support (PACKET_ConditionalTracepoints
)
13457 remote_target::supports_evaluation_of_breakpoint_conditions ()
13459 return (m_features
.packet_support (PACKET_ConditionalBreakpoints
)
13464 remote_target::remote_supports_fast_tracepoints ()
13466 return m_features
.packet_support (PACKET_FastTracepoints
) == PACKET_ENABLE
;
13470 remote_target::remote_supports_static_tracepoints ()
13472 return m_features
.packet_support (PACKET_StaticTracepoints
) == PACKET_ENABLE
;
13476 remote_target::remote_supports_install_in_trace ()
13478 return m_features
.packet_support (PACKET_InstallInTrace
) == PACKET_ENABLE
;
13482 remote_target::supports_enable_disable_tracepoint ()
13484 return (m_features
.packet_support (PACKET_EnableDisableTracepoints_feature
)
13489 remote_target::supports_string_tracing ()
13491 return m_features
.packet_support (PACKET_tracenz_feature
) == PACKET_ENABLE
;
13495 remote_target::can_run_breakpoint_commands ()
13497 return m_features
.packet_support (PACKET_BreakpointCommands
) == PACKET_ENABLE
;
13501 remote_target::trace_init ()
13503 struct remote_state
*rs
= get_remote_state ();
13506 remote_get_noisy_reply ();
13507 if (strcmp (rs
->buf
.data (), "OK") != 0)
13508 error (_("Target does not support this command."));
13511 /* Recursive routine to walk through command list including loops, and
13512 download packets for each command. */
13515 remote_target::remote_download_command_source (int num
, ULONGEST addr
,
13516 struct command_line
*cmds
)
13518 struct remote_state
*rs
= get_remote_state ();
13519 struct command_line
*cmd
;
13521 for (cmd
= cmds
; cmd
; cmd
= cmd
->next
)
13523 QUIT
; /* Allow user to bail out with ^C. */
13524 strcpy (rs
->buf
.data (), "QTDPsrc:");
13525 encode_source_string (num
, addr
, "cmd", cmd
->line
,
13526 rs
->buf
.data () + strlen (rs
->buf
.data ()),
13527 rs
->buf
.size () - strlen (rs
->buf
.data ()));
13529 remote_get_noisy_reply ();
13530 if (strcmp (rs
->buf
.data (), "OK"))
13531 warning (_("Target does not support source download."));
13533 if (cmd
->control_type
== while_control
13534 || cmd
->control_type
== while_stepping_control
)
13536 remote_download_command_source (num
, addr
, cmd
->body_list_0
.get ());
13538 QUIT
; /* Allow user to bail out with ^C. */
13539 strcpy (rs
->buf
.data (), "QTDPsrc:");
13540 encode_source_string (num
, addr
, "cmd", "end",
13541 rs
->buf
.data () + strlen (rs
->buf
.data ()),
13542 rs
->buf
.size () - strlen (rs
->buf
.data ()));
13544 remote_get_noisy_reply ();
13545 if (strcmp (rs
->buf
.data (), "OK"))
13546 warning (_("Target does not support source download."));
13552 remote_target::download_tracepoint (struct bp_location
*loc
)
13556 std::vector
<std::string
> tdp_actions
;
13557 std::vector
<std::string
> stepping_actions
;
13559 struct breakpoint
*b
= loc
->owner
;
13560 tracepoint
*t
= gdb::checked_static_cast
<tracepoint
*> (b
);
13561 struct remote_state
*rs
= get_remote_state ();
13563 const char *err_msg
= _("Tracepoint packet too large for target.");
13566 /* We use a buffer other than rs->buf because we'll build strings
13567 across multiple statements, and other statements in between could
13569 gdb::char_vector
buf (get_remote_packet_size ());
13571 encode_actions_rsp (loc
, &tdp_actions
, &stepping_actions
);
13573 tpaddr
= loc
->address
;
13574 strcpy (addrbuf
, phex (tpaddr
, sizeof (CORE_ADDR
)));
13575 ret
= snprintf (buf
.data (), buf
.size (), "QTDP:%x:%s:%c:%lx:%x",
13576 b
->number
, addrbuf
, /* address */
13577 (b
->enable_state
== bp_enabled
? 'E' : 'D'),
13578 t
->step_count
, t
->pass_count
);
13580 if (ret
< 0 || ret
>= buf
.size ())
13581 error ("%s", err_msg
);
13583 /* Fast tracepoints are mostly handled by the target, but we can
13584 tell the target how big of an instruction block should be moved
13586 if (b
->type
== bp_fast_tracepoint
)
13588 /* Only test for support at download time; we may not know
13589 target capabilities at definition time. */
13590 if (remote_supports_fast_tracepoints ())
13592 if (gdbarch_fast_tracepoint_valid_at (loc
->gdbarch
, tpaddr
,
13595 size_left
= buf
.size () - strlen (buf
.data ());
13596 ret
= snprintf (buf
.data () + strlen (buf
.data ()),
13598 gdb_insn_length (loc
->gdbarch
, tpaddr
));
13600 if (ret
< 0 || ret
>= size_left
)
13601 error ("%s", err_msg
);
13604 /* If it passed validation at definition but fails now,
13605 something is very wrong. */
13606 internal_error (_("Fast tracepoint not valid during download"));
13609 /* Fast tracepoints are functionally identical to regular
13610 tracepoints, so don't take lack of support as a reason to
13611 give up on the trace run. */
13612 warning (_("Target does not support fast tracepoints, "
13613 "downloading %d as regular tracepoint"), b
->number
);
13615 else if (b
->type
== bp_static_tracepoint
13616 || b
->type
== bp_static_marker_tracepoint
)
13618 /* Only test for support at download time; we may not know
13619 target capabilities at definition time. */
13620 if (remote_supports_static_tracepoints ())
13622 struct static_tracepoint_marker marker
;
13624 if (target_static_tracepoint_marker_at (tpaddr
, &marker
))
13626 size_left
= buf
.size () - strlen (buf
.data ());
13627 ret
= snprintf (buf
.data () + strlen (buf
.data ()),
13630 if (ret
< 0 || ret
>= size_left
)
13631 error ("%s", err_msg
);
13634 error (_("Static tracepoint not valid during download"));
13637 /* Fast tracepoints are functionally identical to regular
13638 tracepoints, so don't take lack of support as a reason
13639 to give up on the trace run. */
13640 error (_("Target does not support static tracepoints"));
13642 /* If the tracepoint has a conditional, make it into an agent
13643 expression and append to the definition. */
13646 /* Only test support at download time, we may not know target
13647 capabilities at definition time. */
13648 if (remote_supports_cond_tracepoints ())
13650 agent_expr_up aexpr
= gen_eval_for_expr (tpaddr
,
13653 size_left
= buf
.size () - strlen (buf
.data ());
13655 ret
= snprintf (buf
.data () + strlen (buf
.data ()),
13656 size_left
, ":X%x,", (int) aexpr
->buf
.size ());
13658 if (ret
< 0 || ret
>= size_left
)
13659 error ("%s", err_msg
);
13661 size_left
= buf
.size () - strlen (buf
.data ());
13663 /* Two bytes to encode each aexpr byte, plus the terminating
13665 if (aexpr
->buf
.size () * 2 + 1 > size_left
)
13666 error ("%s", err_msg
);
13668 pkt
= buf
.data () + strlen (buf
.data ());
13670 for (int ndx
= 0; ndx
< aexpr
->buf
.size (); ++ndx
)
13671 pkt
= pack_hex_byte (pkt
, aexpr
->buf
[ndx
]);
13675 warning (_("Target does not support conditional tracepoints, "
13676 "ignoring tp %d cond"), b
->number
);
13679 if (b
->commands
|| !default_collect
.empty ())
13681 size_left
= buf
.size () - strlen (buf
.data ());
13683 ret
= snprintf (buf
.data () + strlen (buf
.data ()),
13686 if (ret
< 0 || ret
>= size_left
)
13687 error ("%s", err_msg
);
13690 putpkt (buf
.data ());
13691 remote_get_noisy_reply ();
13692 if (strcmp (rs
->buf
.data (), "OK"))
13693 error (_("Target does not support tracepoints."));
13695 /* do_single_steps (t); */
13696 for (auto action_it
= tdp_actions
.begin ();
13697 action_it
!= tdp_actions
.end (); action_it
++)
13699 QUIT
; /* Allow user to bail out with ^C. */
13701 bool has_more
= ((action_it
+ 1) != tdp_actions
.end ()
13702 || !stepping_actions
.empty ());
13704 ret
= snprintf (buf
.data (), buf
.size (), "QTDP:-%x:%s:%s%c",
13705 b
->number
, addrbuf
, /* address */
13706 action_it
->c_str (),
13707 has_more
? '-' : 0);
13709 if (ret
< 0 || ret
>= buf
.size ())
13710 error ("%s", err_msg
);
13712 putpkt (buf
.data ());
13713 remote_get_noisy_reply ();
13714 if (strcmp (rs
->buf
.data (), "OK"))
13715 error (_("Error on target while setting tracepoints."));
13718 for (auto action_it
= stepping_actions
.begin ();
13719 action_it
!= stepping_actions
.end (); action_it
++)
13721 QUIT
; /* Allow user to bail out with ^C. */
13723 bool is_first
= action_it
== stepping_actions
.begin ();
13724 bool has_more
= (action_it
+ 1) != stepping_actions
.end ();
13726 ret
= snprintf (buf
.data (), buf
.size (), "QTDP:-%x:%s:%s%s%s",
13727 b
->number
, addrbuf
, /* address */
13728 is_first
? "S" : "",
13729 action_it
->c_str (),
13730 has_more
? "-" : "");
13732 if (ret
< 0 || ret
>= buf
.size ())
13733 error ("%s", err_msg
);
13735 putpkt (buf
.data ());
13736 remote_get_noisy_reply ();
13737 if (strcmp (rs
->buf
.data (), "OK"))
13738 error (_("Error on target while setting tracepoints."));
13741 if (m_features
.packet_support (PACKET_TracepointSource
) == PACKET_ENABLE
)
13743 if (b
->locspec
!= nullptr)
13745 ret
= snprintf (buf
.data (), buf
.size (), "QTDPsrc:");
13747 if (ret
< 0 || ret
>= buf
.size ())
13748 error ("%s", err_msg
);
13750 const char *str
= b
->locspec
->to_string ();
13751 encode_source_string (b
->number
, loc
->address
, "at", str
,
13752 buf
.data () + strlen (buf
.data ()),
13753 buf
.size () - strlen (buf
.data ()));
13754 putpkt (buf
.data ());
13755 remote_get_noisy_reply ();
13756 if (strcmp (rs
->buf
.data (), "OK"))
13757 warning (_("Target does not support source download."));
13759 if (b
->cond_string
)
13761 ret
= snprintf (buf
.data (), buf
.size (), "QTDPsrc:");
13763 if (ret
< 0 || ret
>= buf
.size ())
13764 error ("%s", err_msg
);
13766 encode_source_string (b
->number
, loc
->address
,
13767 "cond", b
->cond_string
.get (),
13768 buf
.data () + strlen (buf
.data ()),
13769 buf
.size () - strlen (buf
.data ()));
13770 putpkt (buf
.data ());
13771 remote_get_noisy_reply ();
13772 if (strcmp (rs
->buf
.data (), "OK"))
13773 warning (_("Target does not support source download."));
13775 remote_download_command_source (b
->number
, loc
->address
,
13776 breakpoint_commands (b
));
13781 remote_target::can_download_tracepoint ()
13783 struct remote_state
*rs
= get_remote_state ();
13784 struct trace_status
*ts
;
13787 /* Don't try to install tracepoints until we've relocated our
13788 symbols, and fetched and merged the target's tracepoint list with
13790 if (rs
->starting_up
)
13793 ts
= current_trace_status ();
13794 status
= get_trace_status (ts
);
13796 if (status
== -1 || !ts
->running_known
|| !ts
->running
)
13799 /* If we are in a tracing experiment, but remote stub doesn't support
13800 installing tracepoint in trace, we have to return. */
13801 if (!remote_supports_install_in_trace ())
13809 remote_target::download_trace_state_variable (const trace_state_variable
&tsv
)
13811 struct remote_state
*rs
= get_remote_state ();
13814 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "QTDV:%x:%s:%x:",
13815 tsv
.number
, phex ((ULONGEST
) tsv
.initial_value
, 8),
13817 p
= rs
->buf
.data () + strlen (rs
->buf
.data ());
13818 if ((p
- rs
->buf
.data ()) + tsv
.name
.length () * 2
13819 >= get_remote_packet_size ())
13820 error (_("Trace state variable name too long for tsv definition packet"));
13821 p
+= 2 * bin2hex ((gdb_byte
*) (tsv
.name
.data ()), p
, tsv
.name
.length ());
13824 remote_get_noisy_reply ();
13825 if (rs
->buf
[0] == '\0')
13826 error (_("Target does not support this command."));
13827 if (strcmp (rs
->buf
.data (), "OK") != 0)
13828 error (_("Error on target while downloading trace state variable."));
13832 remote_target::enable_tracepoint (struct bp_location
*location
)
13834 struct remote_state
*rs
= get_remote_state ();
13836 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "QTEnable:%x:%s",
13837 location
->owner
->number
,
13838 phex (location
->address
, sizeof (CORE_ADDR
)));
13840 remote_get_noisy_reply ();
13841 if (rs
->buf
[0] == '\0')
13842 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13843 if (strcmp (rs
->buf
.data (), "OK") != 0)
13844 error (_("Error on target while enabling tracepoint."));
13848 remote_target::disable_tracepoint (struct bp_location
*location
)
13850 struct remote_state
*rs
= get_remote_state ();
13852 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "QTDisable:%x:%s",
13853 location
->owner
->number
,
13854 phex (location
->address
, sizeof (CORE_ADDR
)));
13856 remote_get_noisy_reply ();
13857 if (rs
->buf
[0] == '\0')
13858 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13859 if (strcmp (rs
->buf
.data (), "OK") != 0)
13860 error (_("Error on target while disabling tracepoint."));
13864 remote_target::trace_set_readonly_regions ()
13867 bfd_size_type size
;
13871 bfd
*abfd
= current_program_space
->exec_bfd ();
13874 return; /* No information to give. */
13876 struct remote_state
*rs
= get_remote_state ();
13878 strcpy (rs
->buf
.data (), "QTro");
13879 offset
= strlen (rs
->buf
.data ());
13880 for (s
= abfd
->sections
; s
; s
= s
->next
)
13882 char tmp1
[40], tmp2
[40];
13885 if ((s
->flags
& SEC_LOAD
) == 0
13886 /* || (s->flags & SEC_CODE) == 0 */
13887 || (s
->flags
& SEC_READONLY
) == 0)
13891 vma
= bfd_section_vma (s
);
13892 size
= bfd_section_size (s
);
13893 bfd_sprintf_vma (abfd
, tmp1
, vma
);
13894 bfd_sprintf_vma (abfd
, tmp2
, vma
+ size
);
13895 sec_length
= 1 + strlen (tmp1
) + 1 + strlen (tmp2
);
13896 if (offset
+ sec_length
+ 1 > rs
->buf
.size ())
13898 if (m_features
.packet_support (PACKET_qXfer_traceframe_info
)
13901 Too many sections for read-only sections definition packet."));
13904 xsnprintf (rs
->buf
.data () + offset
, rs
->buf
.size () - offset
, ":%s,%s",
13906 offset
+= sec_length
;
13916 remote_target::trace_start ()
13918 struct remote_state
*rs
= get_remote_state ();
13920 putpkt ("QTStart");
13921 remote_get_noisy_reply ();
13922 if (rs
->buf
[0] == '\0')
13923 error (_("Target does not support this command."));
13924 if (strcmp (rs
->buf
.data (), "OK") != 0)
13925 error (_("Bogus reply from target: %s"), rs
->buf
.data ());
13929 remote_target::get_trace_status (struct trace_status
*ts
)
13931 /* Initialize it just to avoid a GCC false warning. */
13933 struct remote_state
*rs
= get_remote_state ();
13935 if (m_features
.packet_support (PACKET_qTStatus
) == PACKET_DISABLE
)
13938 /* FIXME we need to get register block size some other way. */
13939 trace_regblock_size
13940 = rs
->get_remote_arch_state (current_inferior ()->arch ())->sizeof_g_packet
;
13942 putpkt ("qTStatus");
13946 p
= remote_get_noisy_reply ();
13948 catch (const gdb_exception_error
&ex
)
13950 if (ex
.error
!= TARGET_CLOSE_ERROR
)
13952 exception_fprintf (gdb_stderr
, ex
, "qTStatus: ");
13958 packet_result result
= m_features
.packet_ok (p
, PACKET_qTStatus
);
13960 switch (result
.status ())
13963 error (_("Remote failure reply: %s"), result
.err_msg ());
13964 /* If the remote target doesn't do tracing, flag it. */
13965 case PACKET_UNKNOWN
:
13969 /* We're working with a live target. */
13970 ts
->filename
= NULL
;
13973 error (_("Bogus trace status reply from target: %s"), rs
->buf
.data ());
13975 /* Function 'parse_trace_status' sets default value of each field of
13976 'ts' at first, so we don't have to do it here. */
13977 parse_trace_status (p
, ts
);
13979 return ts
->running
;
13983 remote_target::get_tracepoint_status (tracepoint
*tp
,
13984 struct uploaded_tp
*utp
)
13986 struct remote_state
*rs
= get_remote_state ();
13988 size_t size
= get_remote_packet_size ();
13993 tp
->traceframe_usage
= 0;
13994 for (bp_location
&loc
: tp
->locations ())
13996 /* If the tracepoint was never downloaded, don't go asking for
13998 if (tp
->number_on_target
== 0)
14000 xsnprintf (rs
->buf
.data (), size
, "qTP:%x:%s", tp
->number_on_target
,
14001 phex_nz (loc
.address
, 0));
14003 reply
= remote_get_noisy_reply ();
14004 if (reply
&& *reply
)
14007 parse_tracepoint_status (reply
+ 1, tp
, utp
);
14013 utp
->hit_count
= 0;
14014 utp
->traceframe_usage
= 0;
14015 xsnprintf (rs
->buf
.data (), size
, "qTP:%x:%s", utp
->number
,
14016 phex_nz (utp
->addr
, 0));
14018 reply
= remote_get_noisy_reply ();
14019 if (reply
&& *reply
)
14022 parse_tracepoint_status (reply
+ 1, tp
, utp
);
14028 remote_target::trace_stop ()
14030 struct remote_state
*rs
= get_remote_state ();
14033 remote_get_noisy_reply ();
14034 if (rs
->buf
[0] == '\0')
14035 error (_("Target does not support this command."));
14036 if (strcmp (rs
->buf
.data (), "OK") != 0)
14037 error (_("Bogus reply from target: %s"), rs
->buf
.data ());
14041 remote_target::trace_find (enum trace_find_type type
, int num
,
14042 CORE_ADDR addr1
, CORE_ADDR addr2
,
14045 struct remote_state
*rs
= get_remote_state ();
14046 char *endbuf
= rs
->buf
.data () + get_remote_packet_size ();
14048 int target_frameno
= -1, target_tracept
= -1;
14050 /* Lookups other than by absolute frame number depend on the current
14051 trace selected, so make sure it is correct on the remote end
14053 if (type
!= tfind_number
)
14054 set_remote_traceframe ();
14056 p
= rs
->buf
.data ();
14057 strcpy (p
, "QTFrame:");
14058 p
= strchr (p
, '\0');
14062 xsnprintf (p
, endbuf
- p
, "%x", num
);
14065 xsnprintf (p
, endbuf
- p
, "pc:%s", phex_nz (addr1
, 0));
14068 xsnprintf (p
, endbuf
- p
, "tdp:%x", num
);
14071 xsnprintf (p
, endbuf
- p
, "range:%s:%s", phex_nz (addr1
, 0),
14072 phex_nz (addr2
, 0));
14074 case tfind_outside
:
14075 xsnprintf (p
, endbuf
- p
, "outside:%s:%s", phex_nz (addr1
, 0),
14076 phex_nz (addr2
, 0));
14079 error (_("Unknown trace find type %d"), type
);
14083 reply
= remote_get_noisy_reply ();
14084 if (*reply
== '\0')
14085 error (_("Target does not support this command."));
14087 while (reply
&& *reply
)
14092 target_frameno
= (int) strtol (p
, &reply
, 16);
14094 error (_("Unable to parse trace frame number"));
14095 /* Don't update our remote traceframe number cache on failure
14096 to select a remote traceframe. */
14097 if (target_frameno
== -1)
14102 target_tracept
= (int) strtol (p
, &reply
, 16);
14104 error (_("Unable to parse tracepoint number"));
14106 case 'O': /* "OK"? */
14107 if (reply
[1] == 'K' && reply
[2] == '\0')
14110 error (_("Bogus reply from target: %s"), reply
);
14113 error (_("Bogus reply from target: %s"), reply
);
14116 *tpp
= target_tracept
;
14118 rs
->remote_traceframe_number
= target_frameno
;
14119 return target_frameno
;
14123 remote_target::get_trace_state_variable_value (int tsvnum
, LONGEST
*val
)
14125 struct remote_state
*rs
= get_remote_state ();
14129 set_remote_traceframe ();
14131 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "qTV:%x", tsvnum
);
14133 reply
= remote_get_noisy_reply ();
14134 if (reply
&& *reply
)
14138 unpack_varlen_hex (reply
+ 1, &uval
);
14139 *val
= (LONGEST
) uval
;
14147 remote_target::save_trace_data (const char *filename
)
14149 struct remote_state
*rs
= get_remote_state ();
14152 p
= rs
->buf
.data ();
14153 strcpy (p
, "QTSave:");
14155 if ((p
- rs
->buf
.data ()) + strlen (filename
) * 2
14156 >= get_remote_packet_size ())
14157 error (_("Remote file name too long for trace save packet"));
14158 p
+= 2 * bin2hex ((gdb_byte
*) filename
, p
, strlen (filename
));
14161 reply
= remote_get_noisy_reply ();
14162 if (*reply
== '\0')
14163 error (_("Target does not support this command."));
14164 if (strcmp (reply
, "OK") != 0)
14165 error (_("Bogus reply from target: %s"), reply
);
14169 /* This is basically a memory transfer, but needs to be its own packet
14170 because we don't know how the target actually organizes its trace
14171 memory, plus we want to be able to ask for as much as possible, but
14172 not be unhappy if we don't get as much as we ask for. */
14175 remote_target::get_raw_trace_data (gdb_byte
*buf
, ULONGEST offset
, LONGEST len
)
14177 struct remote_state
*rs
= get_remote_state ();
14182 p
= rs
->buf
.data ();
14183 strcpy (p
, "qTBuffer:");
14185 p
+= hexnumstr (p
, offset
);
14187 p
+= hexnumstr (p
, len
);
14191 reply
= remote_get_noisy_reply ();
14192 if (reply
&& *reply
)
14194 /* 'l' by itself means we're at the end of the buffer and
14195 there is nothing more to get. */
14199 /* Convert the reply into binary. Limit the number of bytes to
14200 convert according to our passed-in buffer size, rather than
14201 what was returned in the packet; if the target is
14202 unexpectedly generous and gives us a bigger reply than we
14203 asked for, we don't want to crash. */
14204 rslt
= hex2bin (reply
, buf
, len
);
14208 /* Something went wrong, flag as an error. */
14213 remote_target::set_disconnected_tracing (int val
)
14215 struct remote_state
*rs
= get_remote_state ();
14217 if (m_features
.packet_support (PACKET_DisconnectedTracing_feature
)
14222 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
14223 "QTDisconnected:%x", val
);
14225 reply
= remote_get_noisy_reply ();
14226 if (*reply
== '\0')
14227 error (_("Target does not support this command."));
14228 if (strcmp (reply
, "OK") != 0)
14229 error (_("Bogus reply from target: %s"), reply
);
14232 warning (_("Target does not support disconnected tracing."));
14236 remote_target::core_of_thread (ptid_t ptid
)
14238 thread_info
*info
= this->find_thread (ptid
);
14240 if (info
!= NULL
&& info
->priv
!= NULL
)
14241 return get_remote_thread_info (info
)->core
;
14247 remote_target::set_circular_trace_buffer (int val
)
14249 struct remote_state
*rs
= get_remote_state ();
14252 xsnprintf (rs
->buf
.data (), get_remote_packet_size (),
14253 "QTBuffer:circular:%x", val
);
14255 reply
= remote_get_noisy_reply ();
14256 if (*reply
== '\0')
14257 error (_("Target does not support this command."));
14258 if (strcmp (reply
, "OK") != 0)
14259 error (_("Bogus reply from target: %s"), reply
);
14263 remote_target::traceframe_info ()
14265 std::optional
<gdb::char_vector
> text
14266 = target_read_stralloc (current_inferior ()->top_target (),
14267 TARGET_OBJECT_TRACEFRAME_INFO
,
14270 return parse_traceframe_info (text
->data ());
14275 /* Handle the qTMinFTPILen packet. Returns the minimum length of
14276 instruction on which a fast tracepoint may be placed. Returns -1
14277 if the packet is not supported, and 0 if the minimum instruction
14278 length is unknown. */
14281 remote_target::get_min_fast_tracepoint_insn_len ()
14283 struct remote_state
*rs
= get_remote_state ();
14286 /* If we're not debugging a process yet, the IPA can't be
14288 if (!target_has_execution ())
14291 /* Make sure the remote is pointing at the right process. */
14292 set_general_process ();
14294 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "qTMinFTPILen");
14296 reply
= remote_get_noisy_reply ();
14297 if (*reply
== '\0')
14301 ULONGEST min_insn_len
;
14303 unpack_varlen_hex (reply
, &min_insn_len
);
14305 return (int) min_insn_len
;
14310 remote_target::set_trace_buffer_size (LONGEST val
)
14312 if (m_features
.packet_support (PACKET_QTBuffer_size
) != PACKET_DISABLE
)
14314 struct remote_state
*rs
= get_remote_state ();
14315 char *buf
= rs
->buf
.data ();
14316 char *endbuf
= buf
+ get_remote_packet_size ();
14318 gdb_assert (val
>= 0 || val
== -1);
14319 buf
+= xsnprintf (buf
, endbuf
- buf
, "QTBuffer:size:");
14320 /* Send -1 as literal "-1" to avoid host size dependency. */
14324 buf
+= hexnumstr (buf
, (ULONGEST
) -val
);
14327 buf
+= hexnumstr (buf
, (ULONGEST
) val
);
14330 remote_get_noisy_reply ();
14331 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_QTBuffer_size
);
14332 switch (result
.status ())
14335 warning (_("Error reply from target: %s"), result
.err_msg ());
14337 case PACKET_UNKNOWN
:
14338 warning (_("Remote target failed to process the request "));
14344 remote_target::set_trace_notes (const char *user
, const char *notes
,
14345 const char *stop_notes
)
14347 struct remote_state
*rs
= get_remote_state ();
14349 char *buf
= rs
->buf
.data ();
14350 char *endbuf
= buf
+ get_remote_packet_size ();
14353 buf
+= xsnprintf (buf
, endbuf
- buf
, "QTNotes:");
14356 buf
+= xsnprintf (buf
, endbuf
- buf
, "user:");
14357 nbytes
= bin2hex ((gdb_byte
*) user
, buf
, strlen (user
));
14363 buf
+= xsnprintf (buf
, endbuf
- buf
, "notes:");
14364 nbytes
= bin2hex ((gdb_byte
*) notes
, buf
, strlen (notes
));
14370 buf
+= xsnprintf (buf
, endbuf
- buf
, "tstop:");
14371 nbytes
= bin2hex ((gdb_byte
*) stop_notes
, buf
, strlen (stop_notes
));
14375 /* Ensure the buffer is terminated. */
14379 reply
= remote_get_noisy_reply ();
14380 if (*reply
== '\0')
14383 if (strcmp (reply
, "OK") != 0)
14384 error (_("Bogus reply from target: %s"), reply
);
14390 remote_target::use_agent (bool use
)
14392 if (m_features
.packet_support (PACKET_QAgent
) != PACKET_DISABLE
)
14394 struct remote_state
*rs
= get_remote_state ();
14396 /* If the stub supports QAgent. */
14397 xsnprintf (rs
->buf
.data (), get_remote_packet_size (), "QAgent:%d", use
);
14401 if (strcmp (rs
->buf
.data (), "OK") == 0)
14412 remote_target::can_use_agent ()
14414 return (m_features
.packet_support (PACKET_QAgent
) != PACKET_DISABLE
);
14417 #if defined (HAVE_LIBEXPAT)
14419 /* Check the btrace document version. */
14422 check_xml_btrace_version (struct gdb_xml_parser
*parser
,
14423 const struct gdb_xml_element
*element
,
14425 std::vector
<gdb_xml_value
> &attributes
)
14427 const char *version
14428 = (const char *) xml_find_attribute (attributes
, "version")->value
.get ();
14430 if (strcmp (version
, "1.0") != 0)
14431 gdb_xml_error (parser
, _("Unsupported btrace version: \"%s\""), version
);
14434 /* Parse a btrace "block" xml record. */
14437 parse_xml_btrace_block (struct gdb_xml_parser
*parser
,
14438 const struct gdb_xml_element
*element
,
14440 std::vector
<gdb_xml_value
> &attributes
)
14442 struct btrace_data
*btrace
;
14443 ULONGEST
*begin
, *end
;
14445 btrace
= (struct btrace_data
*) user_data
;
14447 switch (btrace
->format
)
14449 case BTRACE_FORMAT_BTS
:
14452 case BTRACE_FORMAT_NONE
:
14453 btrace
->format
= BTRACE_FORMAT_BTS
;
14454 btrace
->variant
.bts
.blocks
= new std::vector
<btrace_block
>;
14458 gdb_xml_error (parser
, _("Btrace format error."));
14461 begin
= (ULONGEST
*) xml_find_attribute (attributes
, "begin")->value
.get ();
14462 end
= (ULONGEST
*) xml_find_attribute (attributes
, "end")->value
.get ();
14463 btrace
->variant
.bts
.blocks
->emplace_back (*begin
, *end
);
14466 /* Parse a "raw" xml record. */
14469 parse_xml_raw (struct gdb_xml_parser
*parser
, const char *body_text
,
14470 gdb_byte
**pdata
, size_t *psize
)
14475 len
= strlen (body_text
);
14477 gdb_xml_error (parser
, _("Bad raw data size."));
14481 gdb::unique_xmalloc_ptr
<gdb_byte
> data ((gdb_byte
*) xmalloc (size
));
14484 /* We use hex encoding - see gdbsupport/rsp-low.h. */
14492 if (hi
== 0 || lo
== 0)
14493 gdb_xml_error (parser
, _("Bad hex encoding."));
14495 *bin
++ = fromhex (hi
) * 16 + fromhex (lo
);
14499 *pdata
= data
.release ();
14503 /* Parse a btrace pt-config "cpu" xml record. */
14506 parse_xml_btrace_pt_config_cpu (struct gdb_xml_parser
*parser
,
14507 const struct gdb_xml_element
*element
,
14509 std::vector
<gdb_xml_value
> &attributes
)
14511 struct btrace_data
*btrace
;
14512 const char *vendor
;
14513 ULONGEST
*family
, *model
, *stepping
;
14516 = (const char *) xml_find_attribute (attributes
, "vendor")->value
.get ();
14518 = (ULONGEST
*) xml_find_attribute (attributes
, "family")->value
.get ();
14520 = (ULONGEST
*) xml_find_attribute (attributes
, "model")->value
.get ();
14522 = (ULONGEST
*) xml_find_attribute (attributes
, "stepping")->value
.get ();
14524 btrace
= (struct btrace_data
*) user_data
;
14526 if (strcmp (vendor
, "GenuineIntel") == 0)
14527 btrace
->variant
.pt
.config
.cpu
.vendor
= CV_INTEL
;
14529 btrace
->variant
.pt
.config
.cpu
.family
= *family
;
14530 btrace
->variant
.pt
.config
.cpu
.model
= *model
;
14531 btrace
->variant
.pt
.config
.cpu
.stepping
= *stepping
;
14534 /* Parse a btrace pt "raw" xml record. */
14537 parse_xml_btrace_pt_raw (struct gdb_xml_parser
*parser
,
14538 const struct gdb_xml_element
*element
,
14539 void *user_data
, const char *body_text
)
14541 struct btrace_data
*btrace
;
14543 btrace
= (struct btrace_data
*) user_data
;
14544 parse_xml_raw (parser
, body_text
, &btrace
->variant
.pt
.data
,
14545 &btrace
->variant
.pt
.size
);
14548 /* Parse a btrace "pt" xml record. */
14551 parse_xml_btrace_pt (struct gdb_xml_parser
*parser
,
14552 const struct gdb_xml_element
*element
,
14554 std::vector
<gdb_xml_value
> &attributes
)
14556 struct btrace_data
*btrace
;
14558 btrace
= (struct btrace_data
*) user_data
;
14559 btrace
->format
= BTRACE_FORMAT_PT
;
14560 btrace
->variant
.pt
.config
.cpu
.vendor
= CV_UNKNOWN
;
14561 btrace
->variant
.pt
.data
= NULL
;
14562 btrace
->variant
.pt
.size
= 0;
14565 static const struct gdb_xml_attribute block_attributes
[] = {
14566 { "begin", GDB_XML_AF_NONE
, gdb_xml_parse_attr_ulongest
, NULL
},
14567 { "end", GDB_XML_AF_NONE
, gdb_xml_parse_attr_ulongest
, NULL
},
14568 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
14571 static const struct gdb_xml_attribute btrace_pt_config_cpu_attributes
[] = {
14572 { "vendor", GDB_XML_AF_NONE
, NULL
, NULL
},
14573 { "family", GDB_XML_AF_NONE
, gdb_xml_parse_attr_ulongest
, NULL
},
14574 { "model", GDB_XML_AF_NONE
, gdb_xml_parse_attr_ulongest
, NULL
},
14575 { "stepping", GDB_XML_AF_NONE
, gdb_xml_parse_attr_ulongest
, NULL
},
14576 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
14579 static const struct gdb_xml_element btrace_pt_config_children
[] = {
14580 { "cpu", btrace_pt_config_cpu_attributes
, NULL
, GDB_XML_EF_OPTIONAL
,
14581 parse_xml_btrace_pt_config_cpu
, NULL
},
14582 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
14585 static const struct gdb_xml_element btrace_pt_children
[] = {
14586 { "pt-config", NULL
, btrace_pt_config_children
, GDB_XML_EF_OPTIONAL
, NULL
,
14588 { "raw", NULL
, NULL
, GDB_XML_EF_OPTIONAL
, NULL
, parse_xml_btrace_pt_raw
},
14589 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
14592 static const struct gdb_xml_attribute btrace_attributes
[] = {
14593 { "version", GDB_XML_AF_NONE
, NULL
, NULL
},
14594 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
14597 static const struct gdb_xml_element btrace_children
[] = {
14598 { "block", block_attributes
, NULL
,
14599 GDB_XML_EF_REPEATABLE
| GDB_XML_EF_OPTIONAL
, parse_xml_btrace_block
, NULL
},
14600 { "pt", NULL
, btrace_pt_children
, GDB_XML_EF_OPTIONAL
, parse_xml_btrace_pt
,
14602 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
14605 static const struct gdb_xml_element btrace_elements
[] = {
14606 { "btrace", btrace_attributes
, btrace_children
, GDB_XML_EF_NONE
,
14607 check_xml_btrace_version
, NULL
},
14608 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
14611 #endif /* defined (HAVE_LIBEXPAT) */
14613 /* Parse a branch trace xml document XML into DATA. */
14616 parse_xml_btrace (struct btrace_data
*btrace
, const char *buffer
)
14618 #if defined (HAVE_LIBEXPAT)
14621 btrace_data result
;
14622 result
.format
= BTRACE_FORMAT_NONE
;
14624 errcode
= gdb_xml_parse_quick (_("btrace"), "btrace.dtd", btrace_elements
,
14627 error (_("Error parsing branch trace."));
14629 /* Keep parse results. */
14630 *btrace
= std::move (result
);
14632 #else /* !defined (HAVE_LIBEXPAT) */
14634 error (_("Cannot process branch trace. XML support was disabled at "
14637 #endif /* !defined (HAVE_LIBEXPAT) */
14640 #if defined (HAVE_LIBEXPAT)
14642 /* Parse a btrace-conf "bts" xml record. */
14645 parse_xml_btrace_conf_bts (struct gdb_xml_parser
*parser
,
14646 const struct gdb_xml_element
*element
,
14648 std::vector
<gdb_xml_value
> &attributes
)
14650 struct btrace_config
*conf
;
14651 struct gdb_xml_value
*size
;
14653 conf
= (struct btrace_config
*) user_data
;
14654 conf
->format
= BTRACE_FORMAT_BTS
;
14655 conf
->bts
.size
= 0;
14657 size
= xml_find_attribute (attributes
, "size");
14659 conf
->bts
.size
= (unsigned int) *(ULONGEST
*) size
->value
.get ();
14662 /* Parse a btrace-conf "pt" xml record. */
14665 parse_xml_btrace_conf_pt (struct gdb_xml_parser
*parser
,
14666 const struct gdb_xml_element
*element
,
14668 std::vector
<gdb_xml_value
> &attributes
)
14670 struct btrace_config
*conf
;
14671 struct gdb_xml_value
*size
;
14673 conf
= (struct btrace_config
*) user_data
;
14674 conf
->format
= BTRACE_FORMAT_PT
;
14677 size
= xml_find_attribute (attributes
, "size");
14679 conf
->pt
.size
= (unsigned int) *(ULONGEST
*) size
->value
.get ();
14682 static const struct gdb_xml_attribute btrace_conf_pt_attributes
[] = {
14683 { "size", GDB_XML_AF_OPTIONAL
, gdb_xml_parse_attr_ulongest
, NULL
},
14684 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
14687 static const struct gdb_xml_attribute btrace_conf_bts_attributes
[] = {
14688 { "size", GDB_XML_AF_OPTIONAL
, gdb_xml_parse_attr_ulongest
, NULL
},
14689 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
14692 static const struct gdb_xml_element btrace_conf_children
[] = {
14693 { "bts", btrace_conf_bts_attributes
, NULL
, GDB_XML_EF_OPTIONAL
,
14694 parse_xml_btrace_conf_bts
, NULL
},
14695 { "pt", btrace_conf_pt_attributes
, NULL
, GDB_XML_EF_OPTIONAL
,
14696 parse_xml_btrace_conf_pt
, NULL
},
14697 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
14700 static const struct gdb_xml_attribute btrace_conf_attributes
[] = {
14701 { "version", GDB_XML_AF_NONE
, NULL
, NULL
},
14702 { NULL
, GDB_XML_AF_NONE
, NULL
, NULL
}
14705 static const struct gdb_xml_element btrace_conf_elements
[] = {
14706 { "btrace-conf", btrace_conf_attributes
, btrace_conf_children
,
14707 GDB_XML_EF_NONE
, NULL
, NULL
},
14708 { NULL
, NULL
, NULL
, GDB_XML_EF_NONE
, NULL
, NULL
}
14711 #endif /* defined (HAVE_LIBEXPAT) */
14713 /* Parse a branch trace configuration xml document XML into CONF. */
14716 parse_xml_btrace_conf (struct btrace_config
*conf
, const char *xml
)
14718 #if defined (HAVE_LIBEXPAT)
14721 errcode
= gdb_xml_parse_quick (_("btrace-conf"), "btrace-conf.dtd",
14722 btrace_conf_elements
, xml
, conf
);
14724 error (_("Error parsing branch trace configuration."));
14726 #else /* !defined (HAVE_LIBEXPAT) */
14728 error (_("Cannot process the branch trace configuration. XML support "
14729 "was disabled at compile time."));
14731 #endif /* !defined (HAVE_LIBEXPAT) */
14734 /* Reset our idea of our target's btrace configuration. */
14737 remote_btrace_reset (remote_state
*rs
)
14739 memset (&rs
->btrace_config
, 0, sizeof (rs
->btrace_config
));
14742 /* Synchronize the configuration with the target. */
14745 remote_target::btrace_sync_conf (const btrace_config
*conf
)
14747 struct remote_state
*rs
;
14748 char *buf
, *pos
, *endbuf
;
14750 rs
= get_remote_state ();
14751 buf
= rs
->buf
.data ();
14752 endbuf
= buf
+ get_remote_packet_size ();
14754 if (m_features
.packet_support (PACKET_Qbtrace_conf_bts_size
) == PACKET_ENABLE
14755 && conf
->bts
.size
!= rs
->btrace_config
.bts
.size
)
14758 pos
+= xsnprintf (pos
, endbuf
- pos
, "%s=0x%x",
14759 packets_descriptions
[PACKET_Qbtrace_conf_bts_size
].name
,
14765 packet_result result
= m_features
.packet_ok (buf
, PACKET_Qbtrace_conf_bts_size
);
14766 if (result
.status () == PACKET_ERROR
)
14767 error (_("Failed to configure the BTS buffer size: %s"), result
.err_msg ());
14769 rs
->btrace_config
.bts
.size
= conf
->bts
.size
;
14772 if (m_features
.packet_support (PACKET_Qbtrace_conf_pt_size
) == PACKET_ENABLE
14773 && conf
->pt
.size
!= rs
->btrace_config
.pt
.size
)
14776 pos
+= xsnprintf (pos
, endbuf
- pos
, "%s=0x%x",
14777 packets_descriptions
[PACKET_Qbtrace_conf_pt_size
].name
,
14783 packet_result result
= m_features
.packet_ok (buf
, PACKET_Qbtrace_conf_pt_size
);
14784 if (result
.status () == PACKET_ERROR
)
14785 error (_("Failed to configure the trace buffer size: %s"), result
.err_msg ());
14787 rs
->btrace_config
.pt
.size
= conf
->pt
.size
;
14791 /* Read TP's btrace configuration from the target and store it into CONF. */
14794 btrace_read_config (thread_info
*tp
, btrace_config
*conf
)
14796 /* target_read_stralloc relies on INFERIOR_PTID. */
14797 scoped_restore_current_thread restore_thread
;
14798 switch_to_thread (tp
);
14800 std::optional
<gdb::char_vector
> xml
14801 = target_read_stralloc (current_inferior ()->top_target (),
14802 TARGET_OBJECT_BTRACE_CONF
, "");
14804 parse_xml_btrace_conf (conf
, xml
->data ());
14807 /* Maybe reopen target btrace. */
14810 remote_target::remote_btrace_maybe_reopen ()
14812 struct remote_state
*rs
= get_remote_state ();
14813 int btrace_target_pushed
= 0;
14814 #if !defined (HAVE_LIBIPT)
14818 /* Don't bother walking the entirety of the remote thread list when
14819 we know the feature isn't supported by the remote. */
14820 if (m_features
.packet_support (PACKET_qXfer_btrace_conf
) != PACKET_ENABLE
)
14823 for (thread_info
*tp
: all_non_exited_threads (this))
14825 memset (&rs
->btrace_config
, 0x00, sizeof (struct btrace_config
));
14826 btrace_read_config (tp
, &rs
->btrace_config
);
14828 if (rs
->btrace_config
.format
== BTRACE_FORMAT_NONE
)
14831 #if !defined (HAVE_LIBIPT)
14832 if (rs
->btrace_config
.format
== BTRACE_FORMAT_PT
)
14837 warning (_("Target is recording using Intel Processor Trace "
14838 "but support was disabled at compile time."));
14843 #endif /* !defined (HAVE_LIBIPT) */
14845 /* Push target, once, but before anything else happens. This way our
14846 changes to the threads will be cleaned up by unpushing the target
14847 in case btrace_read_config () throws. */
14848 if (!btrace_target_pushed
)
14850 btrace_target_pushed
= 1;
14851 record_btrace_push_target ();
14852 gdb_printf (_("Target is recording using %s.\n"),
14853 btrace_format_string (rs
->btrace_config
.format
));
14857 = new btrace_target_info
{ tp
->ptid
, rs
->btrace_config
};
14861 /* Enable branch tracing. */
14863 struct btrace_target_info
*
14864 remote_target::enable_btrace (thread_info
*tp
,
14865 const struct btrace_config
*conf
)
14867 struct packet_config
*packet
= NULL
;
14868 struct remote_state
*rs
= get_remote_state ();
14869 char *buf
= rs
->buf
.data ();
14870 char *endbuf
= buf
+ get_remote_packet_size ();
14872 unsigned int which_packet
;
14873 switch (conf
->format
)
14875 case BTRACE_FORMAT_BTS
:
14876 which_packet
= PACKET_Qbtrace_bts
;
14878 case BTRACE_FORMAT_PT
:
14879 which_packet
= PACKET_Qbtrace_pt
;
14882 internal_error (_("Bad branch btrace format: %u."),
14883 (unsigned int) conf
->format
);
14886 packet
= &m_features
.m_protocol_packets
[which_packet
];
14887 if (packet
== NULL
|| packet_config_support (packet
) != PACKET_ENABLE
)
14888 error (_("Target does not support branch tracing."));
14890 btrace_sync_conf (conf
);
14892 ptid_t ptid
= tp
->ptid
;
14893 set_general_thread (ptid
);
14895 buf
+= xsnprintf (buf
, endbuf
- buf
, "%s",
14896 packets_descriptions
[which_packet
].name
);
14900 packet_result result
= m_features
.packet_ok (rs
->buf
, which_packet
);
14901 if (result
.status () == PACKET_ERROR
)
14902 error (_("Could not enable branch tracing for %s: %s"),
14903 target_pid_to_str (ptid
).c_str (), result
.err_msg ());
14905 btrace_target_info
*tinfo
= new btrace_target_info
{ ptid
};
14907 /* If we fail to read the configuration, we lose some information, but the
14908 tracing itself is not impacted. */
14911 btrace_read_config (tp
, &tinfo
->conf
);
14913 catch (const gdb_exception_error
&err
)
14915 if (err
.message
!= NULL
)
14916 warning ("%s", err
.what ());
14922 /* Disable branch tracing. */
14925 remote_target::disable_btrace (struct btrace_target_info
*tinfo
)
14927 struct remote_state
*rs
= get_remote_state ();
14928 char *buf
= rs
->buf
.data ();
14929 char *endbuf
= buf
+ get_remote_packet_size ();
14931 if (m_features
.packet_support (PACKET_Qbtrace_off
) != PACKET_ENABLE
)
14932 error (_("Target does not support branch tracing."));
14934 set_general_thread (tinfo
->ptid
);
14936 buf
+= xsnprintf (buf
, endbuf
- buf
, "%s",
14937 packets_descriptions
[PACKET_Qbtrace_off
].name
);
14941 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_Qbtrace_off
);
14942 if (result
.status () == PACKET_ERROR
)
14943 error (_("Could not disable branch tracing for %s: %s"),
14944 target_pid_to_str (tinfo
->ptid
).c_str (), result
.err_msg ());
14949 /* Teardown branch tracing. */
14952 remote_target::teardown_btrace (struct btrace_target_info
*tinfo
)
14954 /* We must not talk to the target during teardown. */
14958 /* Read the branch trace. */
14961 remote_target::read_btrace (struct btrace_data
*btrace
,
14962 struct btrace_target_info
*tinfo
,
14963 enum btrace_read_type type
)
14967 if (m_features
.packet_support (PACKET_qXfer_btrace
) != PACKET_ENABLE
)
14968 error (_("Target does not support branch tracing."));
14970 #if !defined(HAVE_LIBEXPAT)
14971 error (_("Cannot process branch tracing result. XML parsing not supported."));
14976 case BTRACE_READ_ALL
:
14979 case BTRACE_READ_NEW
:
14982 case BTRACE_READ_DELTA
:
14986 internal_error (_("Bad branch tracing read type: %u."),
14987 (unsigned int) type
);
14990 std::optional
<gdb::char_vector
> xml
14991 = target_read_stralloc (current_inferior ()->top_target (),
14992 TARGET_OBJECT_BTRACE
, annex
);
14994 return BTRACE_ERR_UNKNOWN
;
14996 parse_xml_btrace (btrace
, xml
->data ());
14998 return BTRACE_ERR_NONE
;
15001 const struct btrace_config
*
15002 remote_target::btrace_conf (const struct btrace_target_info
*tinfo
)
15004 return &tinfo
->conf
;
15008 remote_target::augmented_libraries_svr4_read ()
15011 (m_features
.packet_support (PACKET_augmented_libraries_svr4_read_feature
)
15015 /* Implementation of to_load. */
15018 remote_target::load (const char *name
, int from_tty
)
15020 generic_load (name
, from_tty
);
15023 /* Accepts an integer PID; returns a string representing a file that
15024 can be opened on the remote side to get the symbols for the child
15025 process. Returns NULL if the operation is not supported. */
15028 remote_target::pid_to_exec_file (int pid
)
15030 static std::optional
<gdb::char_vector
> filename
;
15031 char *annex
= NULL
;
15033 if (m_features
.packet_support (PACKET_qXfer_exec_file
) != PACKET_ENABLE
)
15036 inferior
*inf
= find_inferior_pid (this, pid
);
15038 internal_error (_("not currently attached to process %d"), pid
);
15040 if (!inf
->fake_pid_p
)
15042 const int annex_size
= 9;
15044 annex
= (char *) alloca (annex_size
);
15045 xsnprintf (annex
, annex_size
, "%x", pid
);
15048 filename
= target_read_stralloc (current_inferior ()->top_target (),
15049 TARGET_OBJECT_EXEC_FILE
, annex
);
15051 return filename
? filename
->data () : nullptr;
15054 /* Implement the to_can_do_single_step target_ops method. */
15057 remote_target::can_do_single_step ()
15059 /* We can only tell whether target supports single step or not by
15060 supported s and S vCont actions if the stub supports vContSupported
15061 feature. If the stub doesn't support vContSupported feature,
15062 we have conservatively to think target doesn't supports single
15064 if (m_features
.packet_support (PACKET_vContSupported
) == PACKET_ENABLE
)
15066 struct remote_state
*rs
= get_remote_state ();
15068 return rs
->supports_vCont
.s
&& rs
->supports_vCont
.S
;
15074 /* Implementation of the to_execution_direction method for the remote
15077 enum exec_direction_kind
15078 remote_target::execution_direction ()
15080 struct remote_state
*rs
= get_remote_state ();
15082 return rs
->last_resume_exec_dir
;
15085 /* Return pointer to the thread_info struct which corresponds to
15086 THREAD_HANDLE (having length HANDLE_LEN). */
15089 remote_target::thread_handle_to_thread_info (const gdb_byte
*thread_handle
,
15093 for (thread_info
*tp
: all_non_exited_threads (this))
15095 remote_thread_info
*priv
= get_remote_thread_info (tp
);
15097 if (tp
->inf
== inf
&& priv
!= NULL
)
15099 if (handle_len
!= priv
->thread_handle
.size ())
15100 error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
15101 handle_len
, priv
->thread_handle
.size ());
15102 if (memcmp (thread_handle
, priv
->thread_handle
.data (),
15111 gdb::array_view
<const gdb_byte
>
15112 remote_target::thread_info_to_thread_handle (struct thread_info
*tp
)
15114 remote_thread_info
*priv
= get_remote_thread_info (tp
);
15115 return priv
->thread_handle
;
15119 remote_target::can_async_p ()
15121 /* This flag should be checked in the common target.c code. */
15122 gdb_assert (target_async_permitted
);
15124 /* We're async whenever the serial device can. */
15125 return get_remote_state ()->can_async_p ();
15129 remote_target::is_async_p ()
15131 /* We're async whenever the serial device is. */
15132 return get_remote_state ()->is_async_p ();
15135 /* Pass the SERIAL event on and up to the client. One day this code
15136 will be able to delay notifying the client of an event until the
15137 point where an entire packet has been received. */
15139 static serial_event_ftype remote_async_serial_handler
;
15142 remote_async_serial_handler (struct serial
*scb
, void *context
)
15144 /* Don't propogate error information up to the client. Instead let
15145 the client find out about the error by querying the target. */
15146 inferior_event_handler (INF_REG_EVENT
);
15150 remote_target::async_wait_fd ()
15152 struct remote_state
*rs
= get_remote_state ();
15153 return rs
->remote_desc
->fd
;
15157 remote_target::async (bool enable
)
15159 struct remote_state
*rs
= get_remote_state ();
15163 serial_async (rs
->remote_desc
, remote_async_serial_handler
, rs
);
15165 /* If there are pending events in the stop reply queue tell the
15166 event loop to process them. */
15167 if (!rs
->stop_reply_queue
.empty ())
15168 rs
->mark_async_event_handler ();
15170 /* For simplicity, below we clear the pending events token
15171 without remembering whether it is marked, so here we always
15172 mark it. If there's actually no pending notification to
15173 process, this ends up being a no-op (other than a spurious
15174 event-loop wakeup). */
15175 if (target_is_non_stop_p ())
15176 mark_async_event_handler (rs
->notif_state
->get_pending_events_token
);
15180 serial_async (rs
->remote_desc
, NULL
, NULL
);
15181 /* If the core is disabling async, it doesn't want to be
15182 disturbed with target events. Clear all async event sources
15184 rs
->clear_async_event_handler ();
15186 if (target_is_non_stop_p ())
15187 clear_async_event_handler (rs
->notif_state
->get_pending_events_token
);
15191 /* Implementation of the to_thread_events method. */
15194 remote_target::thread_events (int enable
)
15196 struct remote_state
*rs
= get_remote_state ();
15197 size_t size
= get_remote_packet_size ();
15199 if (m_features
.packet_support (PACKET_QThreadEvents
) == PACKET_DISABLE
)
15202 if (rs
->last_thread_events
== enable
)
15205 xsnprintf (rs
->buf
.data (), size
, "QThreadEvents:%x", enable
? 1 : 0);
15209 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_QThreadEvents
);
15210 switch (result
.status ())
15213 if (strcmp (rs
->buf
.data (), "OK") != 0)
15214 error (_("Remote refused setting thread events: %s"), rs
->buf
.data ());
15215 rs
->last_thread_events
= enable
;
15218 warning (_("Remote failure reply: %s"), result
.err_msg ());
15220 case PACKET_UNKNOWN
:
15225 /* Implementation of the supports_set_thread_options target
15229 remote_target::supports_set_thread_options (gdb_thread_options options
)
15231 remote_state
*rs
= get_remote_state ();
15232 return (m_features
.packet_support (PACKET_QThreadOptions
) == PACKET_ENABLE
15233 && (rs
->supported_thread_options
& options
) == options
);
15236 /* For coalescing reasons, actually sending the options to the target
15237 happens at resume time, via this function. See target_resume for
15238 all-stop, and target_commit_resumed for non-stop. */
15241 remote_target::commit_requested_thread_options ()
15243 struct remote_state
*rs
= get_remote_state ();
15245 if (m_features
.packet_support (PACKET_QThreadOptions
) != PACKET_ENABLE
)
15248 char *p
= rs
->buf
.data ();
15249 char *endp
= p
+ get_remote_packet_size ();
15251 /* Clear options for all threads by default. Note that unlike
15252 vCont, the rightmost options that match a thread apply, so we
15253 don't have to worry about whether we can use wildcard ptids. */
15254 strcpy (p
, "QThreadOptions;0");
15257 /* Send the QThreadOptions packet stored in P. */
15258 auto flush
= [&] ()
15263 getpkt (&rs
->buf
, 0);
15265 packet_result result
= m_features
.packet_ok (rs
->buf
, PACKET_QThreadOptions
);
15266 switch (result
.status ())
15269 if (strcmp (rs
->buf
.data (), "OK") != 0)
15270 error (_("Remote refused setting thread options: %s"), rs
->buf
.data ());
15273 error (_("Remote failure reply: %s"), result
.err_msg ());
15274 case PACKET_UNKNOWN
:
15275 gdb_assert_not_reached ("PACKET_UNKNOWN");
15280 /* Prepare P for another QThreadOptions packet. */
15281 auto restart
= [&] ()
15283 p
= rs
->buf
.data ();
15284 strcpy (p
, "QThreadOptions");
15288 /* Now set non-zero options for threads that need them. We don't
15289 bother with the case of all threads of a process wanting the same
15290 non-zero options as that's not an expected scenario. */
15291 for (thread_info
*tp
: all_non_exited_threads (this))
15293 gdb_thread_options options
= tp
->thread_options ();
15298 /* It might be possible to we have more threads with options
15299 than can fit a single QThreadOptions packet. So build each
15300 options/thread pair in this separate buffer to make sure it
15302 constexpr size_t max_options_size
= 100;
15303 char obuf
[max_options_size
];
15304 char *obuf_p
= obuf
;
15305 char *obuf_endp
= obuf
+ max_options_size
;
15308 obuf_p
+= xsnprintf (obuf_p
, obuf_endp
- obuf_p
, "%s",
15309 phex_nz (options
, sizeof (options
)));
15310 if (tp
->ptid
!= magic_null_ptid
)
15313 obuf_p
= write_ptid (obuf_p
, obuf_endp
, tp
->ptid
);
15316 size_t osize
= obuf_p
- obuf
;
15317 if (osize
> endp
- p
)
15319 /* This new options/thread pair doesn't fit the packet
15320 buffer. Send what we have already. */
15324 /* Should now fit. */
15325 gdb_assert (osize
<= endp
- p
);
15328 memcpy (p
, obuf
, osize
);
15336 show_remote_cmd (const char *args
, int from_tty
)
15338 /* We can't just use cmd_show_list here, because we want to skip
15339 the redundant "show remote Z-packet" and the legacy aliases. */
15340 struct cmd_list_element
*list
= remote_show_cmdlist
;
15341 struct ui_out
*uiout
= current_uiout
;
15343 ui_out_emit_tuple
tuple_emitter (uiout
, "showlist");
15344 for (; list
!= NULL
; list
= list
->next
)
15345 if (strcmp (list
->name
, "Z-packet") == 0)
15347 else if (list
->type
== not_set_cmd
)
15348 /* Alias commands are exactly like the original, except they
15349 don't have the normal type. */
15353 ui_out_emit_tuple
option_emitter (uiout
, "option");
15355 uiout
->field_string ("name", list
->name
);
15356 uiout
->text (": ");
15357 if (list
->type
== show_cmd
)
15358 do_show_command (NULL
, from_tty
, list
);
15360 cmd_func (list
, NULL
, from_tty
);
15364 /* Some change happened in PSPACE's objfile list (obfiles added or removed),
15365 offer all inferiors using that program space a change to look up symbols. */
15368 remote_objfile_changed_check_symbols (program_space
*pspace
)
15370 /* The affected program space is possibly shared by multiple inferiors.
15371 Consider sending a qSymbol packet for each of the inferiors using that
15373 for (inferior
*inf
: all_inferiors ())
15375 if (inf
->pspace
!= pspace
)
15378 /* Check whether the inferior's process target is a remote target. */
15379 remote_target
*remote
= as_remote_target (inf
->process_target ());
15380 if (remote
== nullptr)
15383 /* When we are attaching or handling a fork child and the shared library
15384 subsystem reads the list of loaded libraries, we receive new objfile
15385 events in between each found library. The libraries are read in an
15386 undefined order, so if we gave the remote side a chance to look up
15387 symbols between each objfile, we might give it an inconsistent picture
15388 of the inferior. It could appear that a library A appears loaded but
15389 a library B does not, even though library A requires library B. That
15390 would present a state that couldn't normally exist in the inferior.
15392 So, skip these events, we'll give the remote a chance to look up
15393 symbols once all the loaded libraries and their symbols are known to
15395 if (inf
->in_initial_library_scan
)
15398 if (!remote
->has_execution (inf
))
15401 /* Need to switch to a specific thread, because remote_check_symbols will
15402 set the general thread using INFERIOR_PTID.
15404 It's possible to have inferiors with no thread here, because we are
15405 called very early in the connection process, while the inferior is
15406 being set up, before threads are added. Just skip it, start_remote_1
15407 also calls remote_check_symbols when it's done setting things up. */
15408 thread_info
*thread
= any_thread_of_inferior (inf
);
15409 if (thread
!= nullptr)
15411 scoped_restore_current_thread restore_thread
;
15412 switch_to_thread (thread
);
15413 remote
->remote_check_symbols ();
15418 /* Function to be called whenever a new objfile (shlib) is detected. */
15421 remote_new_objfile (struct objfile
*objfile
)
15423 remote_objfile_changed_check_symbols (objfile
->pspace
);
15426 /* Pull all the tracepoints defined on the target and create local
15427 data structures representing them. We don't want to create real
15428 tracepoints yet, we don't want to mess up the user's existing
15432 remote_target::upload_tracepoints (struct uploaded_tp
**utpp
)
15434 struct remote_state
*rs
= get_remote_state ();
15437 /* Ask for a first packet of tracepoint definition. */
15440 p
= rs
->buf
.data ();
15441 while (*p
&& *p
!= 'l')
15443 parse_tracepoint_definition (p
, utpp
);
15444 /* Ask for another packet of tracepoint definition. */
15447 p
= rs
->buf
.data ();
15453 remote_target::upload_trace_state_variables (struct uploaded_tsv
**utsvp
)
15455 struct remote_state
*rs
= get_remote_state ();
15458 /* Ask for a first packet of variable definition. */
15461 p
= rs
->buf
.data ();
15462 while (*p
&& *p
!= 'l')
15464 parse_tsv_definition (p
, utsvp
);
15465 /* Ask for another packet of variable definition. */
15468 p
= rs
->buf
.data ();
15473 /* The "set/show range-stepping" show hook. */
15476 show_range_stepping (struct ui_file
*file
, int from_tty
,
15477 struct cmd_list_element
*c
,
15481 _("Debugger's willingness to use range stepping "
15482 "is %s.\n"), value
);
15485 /* Return true if the vCont;r action is supported by the remote
15489 remote_target::vcont_r_supported ()
15491 return (m_features
.packet_support (PACKET_vCont
) == PACKET_ENABLE
15492 && get_remote_state ()->supports_vCont
.r
);
15495 /* The "set/show range-stepping" set hook. */
15498 set_range_stepping (const char *ignore_args
, int from_tty
,
15499 struct cmd_list_element
*c
)
15501 /* When enabling, check whether range stepping is actually supported
15502 by the target, and warn if not. */
15503 if (use_range_stepping
)
15505 remote_target
*remote
= get_current_remote_target ();
15507 || !remote
->vcont_r_supported ())
15508 warning (_("Range stepping is not supported by the current target"));
15513 show_remote_debug (struct ui_file
*file
, int from_tty
,
15514 struct cmd_list_element
*c
, const char *value
)
15516 gdb_printf (file
, _("Debugging of remote protocol is %s.\n"),
15521 show_remote_timeout (struct ui_file
*file
, int from_tty
,
15522 struct cmd_list_element
*c
, const char *value
)
15525 _("Timeout limit to wait for target to respond is %s.\n"),
15529 /* Implement the "supports_memory_tagging" target_ops method. */
15532 remote_target::supports_memory_tagging ()
15534 return m_features
.remote_memory_tagging_p ();
15537 /* Create the qMemTags packet given ADDRESS, LEN and TYPE. */
15540 create_fetch_memtags_request (gdb::char_vector
&packet
, CORE_ADDR address
,
15541 size_t len
, int type
)
15543 int addr_size
= gdbarch_addr_bit (current_inferior ()->arch ()) / 8;
15545 std::string request
= string_printf ("qMemTags:%s,%s:%s",
15546 phex_nz (address
, addr_size
),
15547 phex_nz (len
, sizeof (len
)),
15548 phex_nz (type
, sizeof (type
)));
15550 strcpy (packet
.data (), request
.c_str ());
15553 /* Parse the qMemTags packet reply into TAGS.
15555 Return true if successful, false otherwise. */
15558 parse_fetch_memtags_reply (const gdb::char_vector
&reply
,
15559 gdb::byte_vector
&tags
)
15561 if (reply
.empty () || reply
[0] == 'E' || reply
[0] != 'm')
15564 /* Copy the tag data. */
15565 tags
= hex2bin (reply
.data () + 1);
15570 /* Create the QMemTags packet given ADDRESS, LEN, TYPE and TAGS. */
15573 create_store_memtags_request (gdb::char_vector
&packet
, CORE_ADDR address
,
15574 size_t len
, int type
,
15575 const gdb::byte_vector
&tags
)
15577 int addr_size
= gdbarch_addr_bit (current_inferior ()->arch ()) / 8;
15579 /* Put together the main packet, address and length. */
15580 std::string request
= string_printf ("QMemTags:%s,%s:%s:",
15581 phex_nz (address
, addr_size
),
15582 phex_nz (len
, sizeof (len
)),
15583 phex_nz (type
, sizeof (type
)));
15584 request
+= bin2hex (tags
.data (), tags
.size ());
15586 /* Check if we have exceeded the maximum packet size. */
15587 if (packet
.size () < request
.length ())
15588 error (_("Contents too big for packet QMemTags."));
15590 strcpy (packet
.data (), request
.c_str ());
15594 create_is_address_tagged_request (gdbarch
*gdbarch
, gdb::char_vector
&packet
,
15598 std::string request
;
15600 addr_size
= gdbarch_addr_bit (gdbarch
) / 8;
15601 request
= string_printf ("qIsAddressTagged:%s", phex_nz (address
, addr_size
));
15603 if (packet
.size () < request
.length () + 1)
15604 error (_("Contents too big for packet qIsAddressTagged."));
15606 strcpy (packet
.data (), request
.c_str ());
15610 check_is_address_tagged_reply (remote_target
*remote
, gdb::char_vector
&packet
,
15613 gdb_assert (remote
!= nullptr);
15614 /* Check reply and disable qIsAddressTagged usage if it's not supported. */
15615 packet_result result
= remote
->m_features
.packet_ok (packet
,
15616 PACKET_qIsAddressTagged
);
15618 /* Return false on error (Exx), empty reply (packet not supported), or reply
15619 size doesn't match 2 hex digits. */
15620 if ((result
.status () != PACKET_OK
) || (strlen (packet
.data ()) != 2))
15624 /* Convert only 2 hex digits, i.e. 1 byte in hex format. */
15625 hex2bin (packet
.data (), &reply
, 1);
15627 if (reply
== 0x00 || reply
== 0x01)
15633 /* Invalid reply. */
15637 /* Implement the "fetch_memtags" target_ops method. */
15640 remote_target::fetch_memtags (CORE_ADDR address
, size_t len
,
15641 gdb::byte_vector
&tags
, int type
)
15643 /* Make sure the qMemTags packet is supported. */
15644 if (!m_features
.remote_memory_tagging_p ())
15645 gdb_assert_not_reached ("remote fetch_memtags called with packet disabled");
15647 struct remote_state
*rs
= get_remote_state ();
15649 create_fetch_memtags_request (rs
->buf
, address
, len
, type
);
15654 return parse_fetch_memtags_reply (rs
->buf
, tags
);
15657 /* Implement the "store_memtags" target_ops method. */
15660 remote_target::store_memtags (CORE_ADDR address
, size_t len
,
15661 const gdb::byte_vector
&tags
, int type
)
15663 /* Make sure the QMemTags packet is supported. */
15664 if (!m_features
.remote_memory_tagging_p ())
15665 gdb_assert_not_reached ("remote store_memtags called with packet disabled");
15667 struct remote_state
*rs
= get_remote_state ();
15669 create_store_memtags_request (rs
->buf
, address
, len
, type
, tags
);
15674 /* Verify if the request was successful. */
15675 return packet_check_result (rs
->buf
, true).status () == PACKET_OK
;
15678 /* Implement the "is_address_tagged" target_ops method. */
15681 remote_target::is_address_tagged (gdbarch
*gdbarch
, CORE_ADDR address
)
15683 /* Firstly, attempt to check the address using the qIsAddressTagged
15685 if (m_features
.packet_support (PACKET_qIsAddressTagged
) != PACKET_DISABLE
)
15687 remote_target
*remote
= get_current_remote_target ();
15688 struct remote_state
*rs
= get_remote_state ();
15689 bool is_addr_tagged
;
15691 create_is_address_tagged_request (gdbarch
, rs
->buf
, address
);
15696 /* If qIsAddressTagged is not supported PACKET_qIsAddressTagged will be
15697 set to PACKET_DISABLE so no further attempt is made to check addresses
15698 using this packet and the fallback mechanism below will be used
15699 instead. Also, if the check fails due to an error (Exx reply) the
15700 fallback is used too. Otherwise, the qIsAddressTagged query succeeded
15701 and is_addr_tagged is valid. */
15702 if (check_is_address_tagged_reply (remote
, rs
->buf
, is_addr_tagged
))
15703 return is_addr_tagged
;
15706 /* Fallback to arch-specific method of checking whether an address is tagged
15707 in case check via qIsAddressTagged fails. */
15708 return gdbarch_tagged_address_p (gdbarch
, address
);
15711 /* Return true if remote target T is non-stop. */
15714 remote_target_is_non_stop_p (remote_target
*t
)
15716 scoped_restore_current_thread restore_thread
;
15717 switch_to_target_no_thread (t
);
15719 return target_is_non_stop_p ();
15724 namespace selftests
{
15727 test_memory_tagging_functions ()
15729 remote_target remote
;
15731 struct packet_config
*config
15732 = &remote
.m_features
.m_protocol_packets
[PACKET_memory_tagging_feature
];
15734 scoped_restore restore_memtag_support_
15735 = make_scoped_restore (&config
->support
);
15737 struct gdbarch
*gdbarch
= current_inferior ()->arch ();
15739 /* Test memory tagging packet support. */
15740 config
->support
= PACKET_SUPPORT_UNKNOWN
;
15741 SELF_CHECK (remote
.supports_memory_tagging () == false);
15742 config
->support
= PACKET_DISABLE
;
15743 SELF_CHECK (remote
.supports_memory_tagging () == false);
15744 config
->support
= PACKET_ENABLE
;
15745 SELF_CHECK (remote
.supports_memory_tagging () == true);
15747 /* Setup testing. */
15748 gdb::char_vector packet
;
15749 gdb::byte_vector tags
, bv
;
15750 std::string expected
, reply
;
15751 packet
.resize (32000);
15753 /* Test creating a qMemTags request. */
15755 expected
= "qMemTags:0,0:0";
15756 create_fetch_memtags_request (packet
, 0x0, 0x0, 0);
15757 SELF_CHECK (strcmp (packet
.data (), expected
.c_str ()) == 0);
15759 expected
= "qMemTags:deadbeef,10:1";
15760 create_fetch_memtags_request (packet
, 0xdeadbeef, 16, 1);
15761 SELF_CHECK (strcmp (packet
.data (), expected
.c_str ()) == 0);
15763 /* Test parsing a qMemTags reply. */
15765 /* Error reply, tags vector unmodified. */
15767 strcpy (packet
.data (), reply
.c_str ());
15769 SELF_CHECK (parse_fetch_memtags_reply (packet
, tags
) == false);
15770 SELF_CHECK (tags
.size () == 0);
15772 /* Valid reply, tags vector updated. */
15776 for (int i
= 0; i
< 5; i
++)
15779 reply
= "m" + bin2hex (bv
.data (), bv
.size ());
15780 strcpy (packet
.data (), reply
.c_str ());
15782 SELF_CHECK (parse_fetch_memtags_reply (packet
, tags
) == true);
15783 SELF_CHECK (tags
.size () == 5);
15785 for (int i
= 0; i
< 5; i
++)
15786 SELF_CHECK (tags
[i
] == i
);
15788 /* Test creating a QMemTags request. */
15790 /* Empty tag data. */
15792 expected
= "QMemTags:0,0:0:";
15793 create_store_memtags_request (packet
, 0x0, 0x0, 0, tags
);
15794 SELF_CHECK (memcmp (packet
.data (), expected
.c_str (),
15795 expected
.length ()) == 0);
15797 /* Non-empty tag data. */
15799 for (int i
= 0; i
< 5; i
++)
15800 tags
.push_back (i
);
15801 expected
= "QMemTags:deadbeef,ff:1:0001020304";
15802 create_store_memtags_request (packet
, 0xdeadbeef, 255, 1, tags
);
15803 SELF_CHECK (memcmp (packet
.data (), expected
.c_str (),
15804 expected
.length ()) == 0);
15806 /* Test creating a qIsAddressTagged request. */
15807 expected
= "qIsAddressTagged:deadbeef";
15808 create_is_address_tagged_request (gdbarch
, packet
, 0xdeadbeef);
15809 SELF_CHECK (strcmp (packet
.data (), expected
.c_str ()) == 0);
15811 /* Test error reply on qIsAddressTagged request. */
15813 strcpy (packet
.data (), reply
.c_str ());
15814 /* is_tagged must not change, hence it's tested too. */
15815 bool is_tagged
= false;
15816 SELF_CHECK (check_is_address_tagged_reply (&remote
, packet
, is_tagged
) ==
15818 SELF_CHECK (is_tagged
== false);
15820 /* Test 'tagged' as reply. */
15822 strcpy (packet
.data (), reply
.c_str ());
15823 /* Because the byte is 01, is_tagged should be set to true. */
15825 SELF_CHECK (check_is_address_tagged_reply (&remote
, packet
, is_tagged
) ==
15827 SELF_CHECK (is_tagged
== true);
15829 /* Test 'not tagged' as reply. */
15831 strcpy (packet
.data (), reply
.c_str ());
15832 /* Because the byte is 00, is_tagged should be set to false. */
15834 SELF_CHECK (check_is_address_tagged_reply (&remote
, packet
, is_tagged
) ==
15836 SELF_CHECK (is_tagged
== false);
15838 /* Test an invalid reply (neither 00 nor 01). */
15840 strcpy (packet
.data (), reply
.c_str ());
15841 /* Because the byte is invalid is_tagged must not change. */
15843 SELF_CHECK (check_is_address_tagged_reply (&remote
, packet
, is_tagged
) ==
15845 SELF_CHECK (is_tagged
== false);
15847 /* Test malformed reply of incorrect length. */
15848 reply
= "0104A590001234006";
15849 strcpy (packet
.data (), reply
.c_str ());
15850 /* Because this is a malformed reply is_tagged must not change. */
15852 SELF_CHECK (check_is_address_tagged_reply (&remote
, packet
, is_tagged
) ==
15854 SELF_CHECK (is_tagged
== false);
15856 /* Test empty reply. */
15858 strcpy (packet
.data (), reply
.c_str ());
15859 /* is_tagged must not change, hence it's tested too. */
15861 /* On the previous tests, qIsAddressTagged packet was auto detected and set
15862 as supported. But an empty reply means the packet is unsupported, so for
15863 testing the empty reply the support is reset to unknown state, otherwise
15864 packet_ok will complain. */
15865 remote
.m_features
.m_protocol_packets
[PACKET_qIsAddressTagged
].support
=
15866 PACKET_SUPPORT_UNKNOWN
;
15867 SELF_CHECK (check_is_address_tagged_reply (&remote
, packet
, is_tagged
) ==
15869 SELF_CHECK (is_tagged
== true);
15873 test_packet_check_result ()
15875 std::string buf
= "E.msg";
15876 packet_result result
= packet_check_result (buf
.data (), true);
15878 SELF_CHECK (result
.status () == PACKET_ERROR
);
15879 SELF_CHECK (strcmp(result
.err_msg (), "msg") == 0);
15881 result
= packet_check_result ("E01", true);
15882 SELF_CHECK (result
.status () == PACKET_ERROR
);
15883 SELF_CHECK (strcmp(result
.err_msg (), "01") == 0);
15885 SELF_CHECK (packet_check_result ("E1", true).status () == PACKET_OK
);
15887 SELF_CHECK (packet_check_result ("E000", true).status () == PACKET_OK
);
15889 result
= packet_check_result ("E.", true);
15890 SELF_CHECK (result
.status () == PACKET_ERROR
);
15891 SELF_CHECK (strcmp(result
.err_msg (), "no error provided") == 0);
15893 SELF_CHECK (packet_check_result ("some response", true).status () == PACKET_OK
);
15895 SELF_CHECK (packet_check_result ("", true).status () == PACKET_UNKNOWN
);
15897 result
= packet_check_result ("E.msg", false);
15898 SELF_CHECK (result
.status () == PACKET_OK
);
15900 } // namespace selftests
15901 #endif /* GDB_SELF_TEST */
15903 void _initialize_remote ();
15905 _initialize_remote ()
15907 add_target (remote_target_info
, remote_target::open
);
15908 add_target (extended_remote_target_info
, extended_remote_target::open
);
15910 /* Hook into new objfile notification. */
15911 gdb::observers::new_objfile
.attach (remote_new_objfile
, "remote");
15912 gdb::observers::all_objfiles_removed
.attach
15913 (remote_objfile_changed_check_symbols
, "remote");
15916 init_remote_threadtests ();
15919 /* set/show remote ... */
15921 add_basic_prefix_cmd ("remote", class_maintenance
, _("\
15922 Remote protocol specific variables.\n\
15923 Configure various remote-protocol specific variables such as\n\
15924 the packets being used."),
15925 &remote_set_cmdlist
,
15926 0 /* allow-unknown */, &setlist
);
15927 add_prefix_cmd ("remote", class_maintenance
, show_remote_cmd
, _("\
15928 Remote protocol specific variables.\n\
15929 Configure various remote-protocol specific variables such as\n\
15930 the packets being used."),
15931 &remote_show_cmdlist
,
15932 0 /* allow-unknown */, &showlist
);
15934 add_cmd ("compare-sections", class_obscure
, compare_sections_command
, _("\
15935 Compare section data on target to the exec file.\n\
15936 Argument is a single section name (default: all loaded sections).\n\
15937 To compare only read-only loaded sections, specify the -r option."),
15940 add_cmd ("packet", class_maintenance
, cli_packet_command
, _("\
15941 Send an arbitrary packet to a remote target.\n\
15942 maintenance packet TEXT\n\
15943 If GDB is talking to an inferior via the GDB serial protocol, then\n\
15944 this command sends the string TEXT to the inferior, and displays the\n\
15945 response packet. GDB supplies the initial `$' character, and the\n\
15946 terminating `#' character and checksum."),
15949 set_show_commands remotebreak_cmds
15950 = add_setshow_boolean_cmd ("remotebreak", no_class
, &remote_break
, _("\
15951 Set whether to send break if interrupted."), _("\
15952 Show whether to send break if interrupted."), _("\
15953 If set, a break, instead of a cntrl-c, is sent to the remote target."),
15954 set_remotebreak
, show_remotebreak
,
15955 &setlist
, &showlist
);
15956 deprecate_cmd (remotebreak_cmds
.set
, "set remote interrupt-sequence");
15957 deprecate_cmd (remotebreak_cmds
.show
, "show remote interrupt-sequence");
15959 add_setshow_enum_cmd ("interrupt-sequence", class_support
,
15960 interrupt_sequence_modes
, &interrupt_sequence_mode
,
15962 Set interrupt sequence to remote target."), _("\
15963 Show interrupt sequence to remote target."), _("\
15964 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
15965 NULL
, show_interrupt_sequence
,
15966 &remote_set_cmdlist
,
15967 &remote_show_cmdlist
);
15969 add_setshow_boolean_cmd ("interrupt-on-connect", class_support
,
15970 &interrupt_on_connect
, _("\
15971 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
15972 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("\
15973 If set, interrupt sequence is sent to remote target."),
15975 &remote_set_cmdlist
, &remote_show_cmdlist
);
15977 /* Install commands for configuring memory read/write packets. */
15979 add_cmd ("remotewritesize", no_class
, set_memory_write_packet_size
, _("\
15980 Set the maximum number of bytes per memory write packet (deprecated)."),
15982 add_cmd ("remotewritesize", no_class
, show_memory_write_packet_size
, _("\
15983 Show the maximum number of bytes per memory write packet (deprecated)."),
15985 add_cmd ("memory-write-packet-size", no_class
,
15986 set_memory_write_packet_size
, _("\
15987 Set the maximum number of bytes per memory-write packet.\n\
15988 Specify the number of bytes in a packet or 0 (zero) for the\n\
15989 default packet size. The actual limit is further reduced\n\
15990 dependent on the target. Specify \"fixed\" to disable the\n\
15991 further restriction and \"limit\" to enable that restriction."),
15992 &remote_set_cmdlist
);
15993 add_cmd ("memory-read-packet-size", no_class
,
15994 set_memory_read_packet_size
, _("\
15995 Set the maximum number of bytes per memory-read packet.\n\
15996 Specify the number of bytes in a packet or 0 (zero) for the\n\
15997 default packet size. The actual limit is further reduced\n\
15998 dependent on the target. Specify \"fixed\" to disable the\n\
15999 further restriction and \"limit\" to enable that restriction."),
16000 &remote_set_cmdlist
);
16001 add_cmd ("memory-write-packet-size", no_class
,
16002 show_memory_write_packet_size
,
16003 _("Show the maximum number of bytes per memory-write packet."),
16004 &remote_show_cmdlist
);
16005 add_cmd ("memory-read-packet-size", no_class
,
16006 show_memory_read_packet_size
,
16007 _("Show the maximum number of bytes per memory-read packet."),
16008 &remote_show_cmdlist
);
16010 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-limit", no_class
,
16011 &remote_hw_watchpoint_limit
, _("\
16012 Set the maximum number of target hardware watchpoints."), _("\
16013 Show the maximum number of target hardware watchpoints."), _("\
16014 Specify \"unlimited\" for unlimited hardware watchpoints."),
16015 NULL
, show_hardware_watchpoint_limit
,
16016 &remote_set_cmdlist
,
16017 &remote_show_cmdlist
);
16018 add_setshow_zuinteger_unlimited_cmd ("hardware-watchpoint-length-limit",
16020 &remote_hw_watchpoint_length_limit
, _("\
16021 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
16022 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
16023 Specify \"unlimited\" to allow watchpoints of unlimited size."),
16024 NULL
, show_hardware_watchpoint_length_limit
,
16025 &remote_set_cmdlist
, &remote_show_cmdlist
);
16026 add_setshow_zuinteger_unlimited_cmd ("hardware-breakpoint-limit", no_class
,
16027 &remote_hw_breakpoint_limit
, _("\
16028 Set the maximum number of target hardware breakpoints."), _("\
16029 Show the maximum number of target hardware breakpoints."), _("\
16030 Specify \"unlimited\" for unlimited hardware breakpoints."),
16031 NULL
, show_hardware_breakpoint_limit
,
16032 &remote_set_cmdlist
, &remote_show_cmdlist
);
16034 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure
,
16035 &remote_address_size
, _("\
16036 Set the maximum size of the address (in bits) in a memory packet."), _("\
16037 Show the maximum size of the address (in bits) in a memory packet."), NULL
,
16039 NULL
, /* FIXME: i18n: */
16040 &setlist
, &showlist
);
16042 init_all_packet_configs ();
16044 add_packet_config_cmd (PACKET_X
, "X", "binary-download", 1);
16046 add_packet_config_cmd (PACKET_vCont
, "vCont", "verbose-resume", 0);
16048 add_packet_config_cmd (PACKET_QPassSignals
, "QPassSignals", "pass-signals",
16051 add_packet_config_cmd (PACKET_QCatchSyscalls
, "QCatchSyscalls",
16052 "catch-syscalls", 0);
16054 add_packet_config_cmd (PACKET_QProgramSignals
, "QProgramSignals",
16055 "program-signals", 0);
16057 add_packet_config_cmd (PACKET_QSetWorkingDir
, "QSetWorkingDir",
16058 "set-working-dir", 0);
16060 add_packet_config_cmd (PACKET_QStartupWithShell
, "QStartupWithShell",
16061 "startup-with-shell", 0);
16063 add_packet_config_cmd (PACKET_QEnvironmentHexEncoded
,"QEnvironmentHexEncoded",
16064 "environment-hex-encoded", 0);
16066 add_packet_config_cmd (PACKET_QEnvironmentReset
, "QEnvironmentReset",
16067 "environment-reset", 0);
16069 add_packet_config_cmd (PACKET_QEnvironmentUnset
, "QEnvironmentUnset",
16070 "environment-unset", 0);
16072 add_packet_config_cmd (PACKET_qSymbol
, "qSymbol", "symbol-lookup", 0);
16074 add_packet_config_cmd (PACKET_P
, "P", "set-register", 1);
16076 add_packet_config_cmd (PACKET_p
, "p", "fetch-register", 1);
16078 add_packet_config_cmd (PACKET_Z0
, "Z0", "software-breakpoint", 0);
16080 add_packet_config_cmd (PACKET_Z1
, "Z1", "hardware-breakpoint", 0);
16082 add_packet_config_cmd (PACKET_Z2
, "Z2", "write-watchpoint", 0);
16084 add_packet_config_cmd (PACKET_Z3
, "Z3", "read-watchpoint", 0);
16086 add_packet_config_cmd (PACKET_Z4
, "Z4", "access-watchpoint", 0);
16088 add_packet_config_cmd (PACKET_qXfer_auxv
, "qXfer:auxv:read",
16089 "read-aux-vector", 0);
16091 add_packet_config_cmd (PACKET_qXfer_exec_file
, "qXfer:exec-file:read",
16092 "pid-to-exec-file", 0);
16094 add_packet_config_cmd (PACKET_qXfer_features
,
16095 "qXfer:features:read", "target-features", 0);
16097 add_packet_config_cmd (PACKET_qXfer_libraries
, "qXfer:libraries:read",
16098 "library-info", 0);
16100 add_packet_config_cmd (PACKET_qXfer_libraries_svr4
,
16101 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
16103 add_packet_config_cmd (PACKET_qXfer_memory_map
, "qXfer:memory-map:read",
16106 add_packet_config_cmd (PACKET_qXfer_osdata
, "qXfer:osdata:read", "osdata", 0);
16108 add_packet_config_cmd (PACKET_qXfer_threads
, "qXfer:threads:read", "threads",
16111 add_packet_config_cmd (PACKET_qXfer_siginfo_read
, "qXfer:siginfo:read",
16112 "read-siginfo-object", 0);
16114 add_packet_config_cmd (PACKET_qXfer_siginfo_write
, "qXfer:siginfo:write",
16115 "write-siginfo-object", 0);
16117 add_packet_config_cmd (PACKET_qXfer_traceframe_info
,
16118 "qXfer:traceframe-info:read", "traceframe-info", 0);
16120 add_packet_config_cmd (PACKET_qXfer_uib
, "qXfer:uib:read",
16121 "unwind-info-block", 0);
16123 add_packet_config_cmd (PACKET_qGetTLSAddr
, "qGetTLSAddr",
16124 "get-thread-local-storage-address", 0);
16126 add_packet_config_cmd (PACKET_qGetTIBAddr
, "qGetTIBAddr",
16127 "get-thread-information-block-address", 0);
16129 add_packet_config_cmd (PACKET_bc
, "bc", "reverse-continue", 0);
16131 add_packet_config_cmd (PACKET_bs
, "bs", "reverse-step", 0);
16133 add_packet_config_cmd (PACKET_qSupported
, "qSupported", "supported-packets",
16136 add_packet_config_cmd (PACKET_qSearch_memory
, "qSearch:memory",
16137 "search-memory", 0);
16139 add_packet_config_cmd (PACKET_qTStatus
, "qTStatus", "trace-status", 0);
16141 add_packet_config_cmd (PACKET_vFile_setfs
, "vFile:setfs", "hostio-setfs", 0);
16143 add_packet_config_cmd (PACKET_vFile_open
, "vFile:open", "hostio-open", 0);
16145 add_packet_config_cmd (PACKET_vFile_pread
, "vFile:pread", "hostio-pread", 0);
16147 add_packet_config_cmd (PACKET_vFile_pwrite
, "vFile:pwrite", "hostio-pwrite",
16150 add_packet_config_cmd (PACKET_vFile_close
, "vFile:close", "hostio-close", 0);
16152 add_packet_config_cmd (PACKET_vFile_unlink
, "vFile:unlink", "hostio-unlink",
16155 add_packet_config_cmd (PACKET_vFile_readlink
, "vFile:readlink",
16156 "hostio-readlink", 0);
16158 add_packet_config_cmd (PACKET_vFile_fstat
, "vFile:fstat", "hostio-fstat", 0);
16160 add_packet_config_cmd (PACKET_vAttach
, "vAttach", "attach", 0);
16162 add_packet_config_cmd (PACKET_vRun
, "vRun", "run", 0);
16164 add_packet_config_cmd (PACKET_QStartNoAckMode
, "QStartNoAckMode", "noack", 0);
16166 add_packet_config_cmd (PACKET_vKill
, "vKill", "kill", 0);
16168 add_packet_config_cmd (PACKET_qAttached
, "qAttached", "query-attached", 0);
16170 add_packet_config_cmd (PACKET_ConditionalTracepoints
,
16171 "ConditionalTracepoints", "conditional-tracepoints",
16174 add_packet_config_cmd (PACKET_ConditionalBreakpoints
,
16175 "ConditionalBreakpoints", "conditional-breakpoints",
16178 add_packet_config_cmd (PACKET_BreakpointCommands
, "BreakpointCommands",
16179 "breakpoint-commands", 0);
16181 add_packet_config_cmd (PACKET_FastTracepoints
, "FastTracepoints",
16182 "fast-tracepoints", 0);
16184 add_packet_config_cmd (PACKET_TracepointSource
, "TracepointSource",
16185 "TracepointSource", 0);
16187 add_packet_config_cmd (PACKET_QAllow
, "QAllow", "allow", 0);
16189 add_packet_config_cmd (PACKET_StaticTracepoints
, "StaticTracepoints",
16190 "static-tracepoints", 0);
16192 add_packet_config_cmd (PACKET_InstallInTrace
, "InstallInTrace",
16193 "install-in-trace", 0);
16195 add_packet_config_cmd (PACKET_qXfer_statictrace_read
,
16196 "qXfer:statictrace:read", "read-sdata-object", 0);
16198 add_packet_config_cmd (PACKET_qXfer_fdpic
, "qXfer:fdpic:read",
16199 "read-fdpic-loadmap", 0);
16201 add_packet_config_cmd (PACKET_QDisableRandomization
, "QDisableRandomization",
16202 "disable-randomization", 0);
16204 add_packet_config_cmd (PACKET_QAgent
, "QAgent", "agent", 0);
16206 add_packet_config_cmd (PACKET_QTBuffer_size
, "QTBuffer:size",
16207 "trace-buffer-size", 0);
16209 add_packet_config_cmd (PACKET_Qbtrace_off
, "Qbtrace:off", "disable-btrace",
16212 add_packet_config_cmd (PACKET_Qbtrace_bts
, "Qbtrace:bts", "enable-btrace-bts",
16215 add_packet_config_cmd (PACKET_Qbtrace_pt
, "Qbtrace:pt", "enable-btrace-pt",
16218 add_packet_config_cmd (PACKET_qXfer_btrace
, "qXfer:btrace", "read-btrace", 0);
16220 add_packet_config_cmd (PACKET_qXfer_btrace_conf
, "qXfer:btrace-conf",
16221 "read-btrace-conf", 0);
16223 add_packet_config_cmd (PACKET_Qbtrace_conf_bts_size
, "Qbtrace-conf:bts:size",
16224 "btrace-conf-bts-size", 0);
16226 add_packet_config_cmd (PACKET_multiprocess_feature
, "multiprocess-feature",
16227 "multiprocess-feature", 0);
16229 add_packet_config_cmd (PACKET_swbreak_feature
, "swbreak-feature",
16230 "swbreak-feature", 0);
16232 add_packet_config_cmd (PACKET_hwbreak_feature
, "hwbreak-feature",
16233 "hwbreak-feature", 0);
16235 add_packet_config_cmd (PACKET_fork_event_feature
, "fork-event-feature",
16236 "fork-event-feature", 0);
16238 add_packet_config_cmd (PACKET_vfork_event_feature
, "vfork-event-feature",
16239 "vfork-event-feature", 0);
16241 add_packet_config_cmd (PACKET_Qbtrace_conf_pt_size
, "Qbtrace-conf:pt:size",
16242 "btrace-conf-pt-size", 0);
16244 add_packet_config_cmd (PACKET_vContSupported
, "vContSupported",
16245 "verbose-resume-supported", 0);
16247 add_packet_config_cmd (PACKET_exec_event_feature
, "exec-event-feature",
16248 "exec-event-feature", 0);
16250 add_packet_config_cmd (PACKET_vCtrlC
, "vCtrlC", "ctrl-c", 0);
16252 add_packet_config_cmd (PACKET_QThreadEvents
, "QThreadEvents", "thread-events",
16255 add_packet_config_cmd (PACKET_QThreadOptions
, "QThreadOptions",
16256 "thread-options", 0);
16258 add_packet_config_cmd (PACKET_no_resumed
, "N stop reply",
16259 "no-resumed-stop-reply", 0);
16261 add_packet_config_cmd (PACKET_memory_tagging_feature
,
16262 "memory-tagging-feature", "memory-tagging-feature", 0);
16264 add_packet_config_cmd (PACKET_qIsAddressTagged
,
16265 "qIsAddressTagged", "memory-tagging-address-check", 0);
16267 /* Assert that we've registered "set remote foo-packet" commands
16268 for all packet configs. */
16272 for (i
= 0; i
< PACKET_MAX
; i
++)
16274 /* Ideally all configs would have a command associated. Some
16275 still don't though. */
16280 case PACKET_QNonStop
:
16281 case PACKET_EnableDisableTracepoints_feature
:
16282 case PACKET_tracenz_feature
:
16283 case PACKET_DisconnectedTracing_feature
:
16284 case PACKET_augmented_libraries_svr4_read_feature
:
16286 /* Additions to this list need to be well justified:
16287 pre-existing packets are OK; new packets are not. */
16295 /* This catches both forgetting to add a config command, and
16296 forgetting to remove a packet from the exception list. */
16297 gdb_assert (excepted
== (packets_descriptions
[i
].name
== NULL
));
16301 /* Keep the old ``set remote Z-packet ...'' working. Each individual
16302 Z sub-packet has its own set and show commands, but users may
16303 have sets to this variable in their .gdbinit files (or in their
16305 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure
,
16306 &remote_Z_packet_detect
, _("\
16307 Set use of remote protocol `Z' packets."), _("\
16308 Show use of remote protocol `Z' packets."), _("\
16309 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
16311 set_remote_protocol_Z_packet_cmd
,
16312 show_remote_protocol_Z_packet_cmd
,
16313 /* FIXME: i18n: Use of remote protocol
16314 `Z' packets is %s. */
16315 &remote_set_cmdlist
, &remote_show_cmdlist
);
16317 add_basic_prefix_cmd ("remote", class_files
, _("\
16318 Manipulate files on the remote system.\n\
16319 Transfer files to and from the remote target system."),
16321 0 /* allow-unknown */, &cmdlist
);
16323 add_cmd ("put", class_files
, remote_put_command
,
16324 _("Copy a local file to the remote system."),
16327 add_cmd ("get", class_files
, remote_get_command
,
16328 _("Copy a remote file to the local system."),
16331 add_cmd ("delete", class_files
, remote_delete_command
,
16332 _("Delete a remote file."),
16335 add_setshow_string_noescape_cmd ("exec-file", class_files
,
16336 &remote_exec_file_var
, _("\
16337 Set the remote pathname for \"run\"."), _("\
16338 Show the remote pathname for \"run\"."), NULL
,
16339 set_remote_exec_file
,
16340 show_remote_exec_file
,
16341 &remote_set_cmdlist
,
16342 &remote_show_cmdlist
);
16344 add_setshow_boolean_cmd ("range-stepping", class_run
,
16345 &use_range_stepping
, _("\
16346 Enable or disable range stepping."), _("\
16347 Show whether target-assisted range stepping is enabled."), _("\
16348 If on, and the target supports it, when stepping a source line, GDB\n\
16349 tells the target to step the corresponding range of addresses itself instead\n\
16350 of issuing multiple single-steps. This speeds up source level\n\
16351 stepping. If off, GDB always issues single-steps, even if range\n\
16352 stepping is supported by the target. The default is on."),
16353 set_range_stepping
,
16354 show_range_stepping
,
16358 add_setshow_zinteger_cmd ("watchdog", class_maintenance
, &watchdog
, _("\
16359 Set watchdog timer."), _("\
16360 Show watchdog timer."), _("\
16361 When non-zero, this timeout is used instead of waiting forever for a target\n\
16362 to finish a low-level step or continue operation. If the specified amount\n\
16363 of time passes without a response from the target, an error occurs."),
16366 &setlist
, &showlist
);
16368 add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class
,
16369 &remote_packet_max_chars
, _("\
16370 Set the maximum number of characters to display for each remote packet."), _("\
16371 Show the maximum number of characters to display for each remote packet."), _("\
16372 Specify \"unlimited\" to display all the characters."),
16373 NULL
, show_remote_packet_max_chars
,
16374 &setdebuglist
, &showdebuglist
);
16376 add_setshow_boolean_cmd ("remote", no_class
, &remote_debug
,
16377 _("Set debugging of remote protocol."),
16378 _("Show debugging of remote protocol."),
16380 When enabled, each packet sent or received with the remote target\n\
16384 &setdebuglist
, &showdebuglist
);
16386 add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class
,
16387 &remote_timeout
, _("\
16388 Set timeout limit to wait for target to respond."), _("\
16389 Show timeout limit to wait for target to respond."), _("\
16390 This value is used to set the time limit for gdb to wait for a response\n\
16391 from the target."),
16393 show_remote_timeout
,
16394 &setlist
, &showlist
);
16396 /* Eventually initialize fileio. See fileio.c */
16397 initialize_remote_fileio (&remote_set_cmdlist
, &remote_show_cmdlist
);
16400 selftests::register_test ("remote_memory_tagging",
16401 selftests::test_memory_tagging_functions
);
16402 selftests::register_test ("packet_check_result",
16403 selftests::test_packet_check_result
);