32#include "gdbsupport/refcounted-object.h"
33#include "gdbsupport/common-gdbthread.h"
34#include "gdbsupport/forward-scope-exit.h"
36#include "gdbsupport/intrusive_list.h"
49#define threads_debug_printf(fmt, ...) \
50 debug_prefixed_printf_cond (debug_threads, "threads", fmt, ##__VA_ARGS__)
248 public intrusive_list_node<thread_info>
420 void clear_pending_waitstatus ();
587 &thread_info::resumed_with_pending_wait_status_node>;
595 = gdb::ref_ptr<struct thread_info, refcounted_object_ref_policy>;
602 = gdb::ref_ptr<struct inferior, refcounted_object_ref_policy>;
631 bool silent =
false);
648 gdb::optional<ULONGEST> exit_code = {},
649 bool silent =
false);
697 (gdb::array_view<const gdb_byte> handle,
struct inferior *
inf);
712 ptid_t old_ptid, ptid_t new_ptid);
747 ptid_t filter_ptid = minus_one_ptid)
758 ptid_t filter_ptid = minus_one_ptid)
798 ptid_t ptid,
bool resumed);
803 ptid_t ptid,
bool running);
811 ptid_t ptid,
bool stop);
820 ptid_t ptid,
bool executing);
860 const char *requested_threads,
922 :
m_thr (thread_info_ref::new_reference (thr))
924 m_thr->stack_temporaries_enabled =
true;
925 m_thr->stack_temporaries.clear ();
930 m_thr->stack_temporaries_enabled =
false;
931 m_thr->stack_temporaries.clear ();
952 = intrusive_member_node<thread_info, &thread_info::step_over_list_node>;
954 = intrusive_list<thread_info, thread_step_over_list_node>;
956 = reference_to_pointer_iterator<thread_step_over_list::iterator>;
958 = basic_safe_iterator<thread_step_over_list_iterator>;
960 = iterator_range<thread_step_over_list_safe_iterator>;
1018 user_selected_what selection);
1045 gdb::optional<int> ada_task,
1046 const char *cmd,
int from_tty,
enable_thread_stack_temporaries(struct thread_info *thr)
~enable_thread_stack_temporaries()
DISABLE_COPY_AND_ASSIGN(enable_thread_stack_temporaries)
DISABLE_COPY_AND_ASSIGN(scoped_restore_current_thread)
int m_selected_frame_level
~scoped_restore_current_thread()
scoped_restore_current_thread()
frame_id m_selected_frame_id
int stepping_over_watchpoint
thread_suspend_state m_suspend
std::vector< struct value * > stack_temporaries
CORE_ADDR stop_pc() const
void set_thread_fsm(std::unique_ptr< struct thread_fsm > fsm)
std::unique_ptr< struct thread_fsm > release_thread_fsm()
intrusive_list_node< thread_info > resumed_with_pending_wait_status_node
intrusive_list_node< thread_info > step_over_list_node
struct symtab * current_symtab
void restore_suspend_from(const thread_suspend_state &suspend)
void set_name(gdb::unique_xmalloc_ptr< char > name)
gdb_signal stop_signal() const
void save_suspend_to(thread_suspend_state &suspend) const
bool has_pending_waitstatus() const
gdb::unique_xmalloc_ptr< char > m_name
void set_stop_reason(target_stop_reason reason)
struct frame_id initiating_frame
struct target_waitstatus pending_follow
const target_waitstatus & pending_waitstatus() const
target_stop_reason stop_reason() const
int step_after_step_resume_breakpoint
int stepping_over_breakpoint
private_thread_info_up priv
struct thread_fsm * thread_fsm() const
std::unique_ptr< struct thread_fsm > m_thread_fsm
displaced_step_thread_state displaced_step_state
bool stack_temporaries_enabled
void set_stop_pc(CORE_ADDR stop_pc)
void set_stop_signal(gdb_signal sig)
const char * name() const
thread_control_state control
const struct frame_id null_frame_id
struct thread_info * any_live_thread_of_inferior(inferior *inf)
bool switch_to_thread_if_alive(thread_info *thr)
all_threads_safe_range all_threads_safe()
int thread_step_over_chain_length(const thread_step_over_list &l)
struct thread_info * add_thread(process_stratum_target *targ, ptid_t ptid)
void global_thread_step_over_chain_remove(thread_info *tp)
const char * thread_state_string(enum thread_state state)
void global_thread_step_over_chain_enqueue_chain(thread_step_over_list &&list)
int thread_count(process_stratum_target *proc_target)
intrusive_list< thread_info, thread_info_resumed_with_pending_wait_status_node > thread_info_resumed_with_pending_wait_status_list
struct cmd_list_element * thread_cmd_list
struct thread_info * add_thread_silent(process_stratum_target *targ, ptid_t ptid)
all_matching_threads_range all_threads(process_stratum_target *proc_target=nullptr, ptid_t filter_ptid=minus_one_ptid)
intrusive_member_node< thread_info, &thread_info::step_over_list_node > thread_step_over_list_node
void thread_select(const char *tidstr, class thread_info *thr)
bool value_in_thread_stack_temporaries(struct value *, struct thread_info *thr)
struct thread_info * first_thread_of_inferior(inferior *inf)
int(* thread_callback_func)(struct thread_info *, void *)
void print_selected_thread_frame(struct ui_out *uiout, user_selected_what selection)
void delete_thread(thread_info *thread)
iterator_range< thread_step_over_list_safe_iterator > thread_step_over_list_safe_range
void switch_to_thread_no_regs(struct thread_info *thread)
all_non_exited_threads_range all_non_exited_threads(process_stratum_target *proc_target=nullptr, ptid_t filter_ptid=minus_one_ptid)
int show_inferior_qualified_tids(void)
void validate_registers_access(void)
int valid_global_thread_id(int global_id)
int show_thread_that_caused_stop(void)
bool pc_in_thread_step_range(CORE_ADDR pc, struct thread_info *thread)
intrusive_member_node< thread_info, &thread_info::resumed_with_pending_wait_status_node > thread_info_resumed_with_pending_wait_status_node
static thread_step_over_list_safe_range make_thread_step_over_list_safe_range(thread_step_over_list &list)
void set_stop_requested(process_stratum_target *targ, ptid_t ptid, bool stop)
struct thread_info * find_thread_global_id(int global_id)
void delete_thread_with_exit_code(thread_info *thread, ULONGEST exit_code, bool silent=false)
void global_thread_step_over_chain_enqueue(thread_info *tp)
const char * print_full_thread_id(struct thread_info *thr)
void finish_thread_state(process_stratum_target *targ, ptid_t ptid)
void update_thread_list(void)
void set_executing(process_stratum_target *targ, ptid_t ptid, bool executing)
struct thread_info * inferior_thread(void)
void set_thread_exited(thread_info *tp, gdb::optional< ULONGEST > exit_code={}, bool silent=false)
void switch_to_thread(struct thread_info *thr)
void thread_command(const char *tidstr, int from_tty)
void thread_try_catch_cmd(thread_info *thr, gdb::optional< int > ada_task, const char *cmd, int from_tty, const qcs_flags &flags)
void set_running(process_stratum_target *targ, ptid_t ptid, bool running)
int thread_has_single_step_breakpoint_here(struct thread_info *tp, const address_space *aspace, CORE_ADDR addr)
void delete_step_resume_breakpoint(struct thread_info *)
value * get_last_thread_stack_temporary(struct thread_info *tp)
bool can_access_registers_thread(struct thread_info *thread)
struct thread_info * iterate_over_threads(thread_callback_func, void *)
void push_thread_stack_temporary(struct thread_info *tp, struct value *v)
void thread_change_ptid(process_stratum_target *targ, ptid_t old_ptid, ptid_t new_ptid)
basic_safe_iterator< thread_step_over_list_iterator > thread_step_over_list_safe_iterator
std::unique_ptr< private_thread_info > private_thread_info_up
FORWARD_SCOPE_EXIT(finish_thread_state) scoped_finish_thread_state
struct thread_info * any_thread_of_inferior(inferior *inf)
void set_resumed(process_stratum_target *targ, ptid_t ptid, bool resumed)
int thread_has_single_step_breakpoints_set(struct thread_info *tp)
const char * thread_name(thread_info *thread)
int thread_is_in_step_over_chain(struct thread_info *tp)
bool thread_stack_temporaries_enabled_p(struct thread_info *tp)
void delete_exception_resume_breakpoint(struct thread_info *)
struct thread_info * add_thread_with_info(process_stratum_target *targ, ptid_t ptid, private_thread_info_up)
struct thread_info * find_thread_by_handle(gdb::array_view< const gdb_byte > handle, struct inferior *inf)
gdb::ref_ptr< struct thread_info, refcounted_object_ref_policy > thread_info_ref
intrusive_list< thread_info, thread_step_over_list_node > thread_step_over_list
bool threads_are_executing(process_stratum_target *targ)
void delete_single_step_breakpoints(struct thread_info *tp)
bool in_thread_list(process_stratum_target *targ, ptid_t ptid)
void delete_thread_silent(struct thread_info *thread)
void switch_to_no_thread()
void print_thread_info(struct ui_out *uiout, const char *requested_threads, int pid)
void thread_cancel_execution_command(struct thread_info *thr)
const char * print_thread_id(struct thread_info *thr)
reference_to_pointer_iterator< thread_step_over_list::iterator > thread_step_over_list_iterator
void delete_exited_threads(void)
void init_thread_list(void)
gdb::ref_ptr< struct inferior, refcounted_object_ref_policy > inferior_ref
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
virtual ~private_thread_info()=0
CORE_ADDR step_range_start
enum step_over_calls_kind step_over_calls
struct symbol * step_start_function
struct breakpoint * exception_resume_breakpoint
struct breakpoint * step_resume_breakpoint
struct breakpoint * single_step_breakpoints
struct target_waitstatus waitstatus
gdb::optional< CORE_ADDR > stop_pc
enum gdb_signal stop_signal
enum target_stop_reason stop_reason
iterator_range< all_threads_safe_iterator > all_threads_safe_range
@ TARGET_STOPPED_BY_NO_REASON