1 /* Multi-process/thread control for GDB, the GNU debugger.
3 Copyright (C) 1986-2018 Free Software Foundation, Inc.
5 Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
29 #include "gdbthread.h"
36 #include <sys/types.h>
39 #include "observable.h"
41 #include "cli/cli-decode.h"
42 #include "gdb_regex.h"
43 #include "cli/cli-utils.h"
44 #include "thread-fsm.h"
45 #include "tid-parse.h"
47 #include "common/gdb_optional.h"
48 #include "inline-frame.h"
50 /* Definition of struct thread_info exported to gdbthread.h. */
52 /* Prototypes for local functions. */
54 static int highest_thread_num;
56 /* True if any thread is, or may be executing. We need to track this
57 separately because until we fully sync the thread list, we won't
58 know whether the target is fully stopped, even if we see stop
59 events for all known threads, because any of those threads may have
60 spawned new threads we haven't heard of yet. */
61 static int threads_executing;
63 static int thread_alive (struct thread_info *);
65 /* RAII type used to increase / decrease the refcount of each thread
66 in a given list of threads. */
68 class scoped_inc_dec_ref
71 explicit scoped_inc_dec_ref (const std::vector<thread_info *> &thrds)
74 for (thread_info *thr : m_thrds)
78 ~scoped_inc_dec_ref ()
80 for (thread_info *thr : m_thrds)
85 const std::vector<thread_info *> &m_thrds;
90 inferior_thread (void)
92 struct thread_info *tp = find_thread_ptid (inferior_ptid);
97 /* Delete the breakpoint pointed at by BP_P, if there's one. */
100 delete_thread_breakpoint (struct breakpoint **bp_p)
104 delete_breakpoint (*bp_p);
110 delete_step_resume_breakpoint (struct thread_info *tp)
113 delete_thread_breakpoint (&tp->control.step_resume_breakpoint);
117 delete_exception_resume_breakpoint (struct thread_info *tp)
120 delete_thread_breakpoint (&tp->control.exception_resume_breakpoint);
123 /* See gdbthread.h. */
126 delete_single_step_breakpoints (struct thread_info *tp)
129 delete_thread_breakpoint (&tp->control.single_step_breakpoints);
132 /* Delete the breakpoint pointed at by BP_P at the next stop, if
136 delete_at_next_stop (struct breakpoint **bp)
140 (*bp)->disposition = disp_del_at_next_stop;
145 /* See gdbthread.h. */
148 thread_has_single_step_breakpoints_set (struct thread_info *tp)
150 return tp->control.single_step_breakpoints != NULL;
153 /* See gdbthread.h. */
156 thread_has_single_step_breakpoint_here (struct thread_info *tp,
157 const address_space *aspace,
160 struct breakpoint *ss_bps = tp->control.single_step_breakpoints;
162 return (ss_bps != NULL
163 && breakpoint_has_location_inserted_here (ss_bps, aspace, addr));
166 /* See gdbthread.h. */
169 thread_cancel_execution_command (struct thread_info *thr)
171 if (thr->thread_fsm != NULL)
173 thread_fsm_clean_up (thr->thread_fsm, thr);
174 thread_fsm_delete (thr->thread_fsm);
175 thr->thread_fsm = NULL;
180 clear_thread_inferior_resources (struct thread_info *tp)
182 /* NOTE: this will take care of any left-over step_resume breakpoints,
183 but not any user-specified thread-specific breakpoints. We can not
184 delete the breakpoint straight-off, because the inferior might not
185 be stopped at the moment. */
186 delete_at_next_stop (&tp->control.step_resume_breakpoint);
187 delete_at_next_stop (&tp->control.exception_resume_breakpoint);
188 delete_at_next_stop (&tp->control.single_step_breakpoints);
190 delete_longjmp_breakpoint_at_next_stop (tp->global_num);
192 bpstat_clear (&tp->control.stop_bpstat);
194 btrace_teardown (tp);
196 thread_cancel_execution_command (tp);
198 clear_inline_frame_state (tp->ptid);
201 /* Set the TP's state as exited. */
204 set_thread_exited (thread_info *tp, int silent)
206 /* Dead threads don't need to step-over. Remove from queue. */
207 if (tp->step_over_next != NULL)
208 thread_step_over_chain_remove (tp);
210 if (tp->state != THREAD_EXITED)
212 gdb::observers::thread_exit.notify (tp, silent);
214 /* Tag it as exited. */
215 tp->state = THREAD_EXITED;
217 /* Clear breakpoints, etc. associated with this thread. */
218 clear_thread_inferior_resources (tp);
223 init_thread_list (void)
225 highest_thread_num = 0;
227 for (thread_info *tp : all_threads_safe ())
229 inferior *inf = tp->inf;
231 if (tp->deletable ())
234 set_thread_exited (tp, 1);
236 inf->thread_list = NULL;
240 /* Allocate a new thread of inferior INF with target id PTID and add
241 it to the thread list. */
243 static struct thread_info *
244 new_thread (struct inferior *inf, ptid_t ptid)
246 thread_info *tp = new thread_info (inf, ptid);
248 if (inf->thread_list == NULL)
249 inf->thread_list = tp;
252 struct thread_info *last;
254 for (last = inf->thread_list; last->next != NULL; last = last->next)
263 add_thread_silent (ptid_t ptid)
265 struct inferior *inf = find_inferior_ptid (ptid);
266 gdb_assert (inf != NULL);
268 thread_info *tp = find_thread_ptid (inf, ptid);
270 /* Found an old thread with the same id. It has to be dead,
271 otherwise we wouldn't be adding a new thread with the same id.
272 The OS is reusing this id --- delete it, and recreate a new
275 /* In addition to deleting the thread, if this is the current
276 thread, then we need to take care that delete_thread doesn't
277 really delete the thread if it is inferior_ptid. Create a
278 new template thread in the list with an invalid ptid, switch
279 to it, delete the original thread, reset the new thread's
280 ptid, and switch to it. */
282 if (inferior_ptid == ptid)
284 thread_info *new_thr = new_thread (inf, null_ptid);
286 /* Make switch_to_thread not read from the thread. */
287 new_thr->state = THREAD_EXITED;
288 switch_to_no_thread ();
290 /* Now we can delete it. */
293 /* Now reset its ptid, and reswitch inferior_ptid to it. */
294 new_thr->ptid = ptid;
295 new_thr->state = THREAD_STOPPED;
296 switch_to_thread (new_thr);
298 gdb::observers::new_thread.notify (new_thr);
304 /* Just go ahead and delete it. */
308 tp = new_thread (inf, ptid);
309 gdb::observers::new_thread.notify (tp);
315 add_thread_with_info (ptid_t ptid, private_thread_info *priv)
317 struct thread_info *result = add_thread_silent (ptid);
319 result->priv.reset (priv);
321 if (print_thread_events)
322 printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid));
324 annotate_new_thread ();
329 add_thread (ptid_t ptid)
331 return add_thread_with_info (ptid, NULL);
334 private_thread_info::~private_thread_info () = default;
336 thread_info::thread_info (struct inferior *inf_, ptid_t ptid_)
337 : ptid (ptid_), inf (inf_)
339 gdb_assert (inf_ != NULL);
341 this->global_num = ++highest_thread_num;
342 this->per_inf_num = ++inf_->highest_thread_num;
344 /* Nothing to follow yet. */
345 memset (&this->pending_follow, 0, sizeof (this->pending_follow));
346 this->pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
347 this->suspend.waitstatus.kind = TARGET_WAITKIND_IGNORE;
350 thread_info::~thread_info ()
355 /* See gdbthread.h. */
358 thread_info::deletable () const
360 /* If this is the current thread, or there's code out there that
361 relies on it existing (refcount > 0) we can't delete yet. */
362 return refcount () == 0 && ptid != inferior_ptid;
365 /* Add TP to the end of the step-over chain LIST_P. */
368 step_over_chain_enqueue (struct thread_info **list_p, struct thread_info *tp)
370 gdb_assert (tp->step_over_next == NULL);
371 gdb_assert (tp->step_over_prev == NULL);
376 tp->step_over_prev = tp->step_over_next = tp;
380 struct thread_info *head = *list_p;
381 struct thread_info *tail = head->step_over_prev;
383 tp->step_over_prev = tail;
384 tp->step_over_next = head;
385 head->step_over_prev = tp;
386 tail->step_over_next = tp;
390 /* Remove TP from step-over chain LIST_P. */
393 step_over_chain_remove (struct thread_info **list_p, struct thread_info *tp)
395 gdb_assert (tp->step_over_next != NULL);
396 gdb_assert (tp->step_over_prev != NULL);
400 if (tp == tp->step_over_next)
403 *list_p = tp->step_over_next;
406 tp->step_over_prev->step_over_next = tp->step_over_next;
407 tp->step_over_next->step_over_prev = tp->step_over_prev;
408 tp->step_over_prev = tp->step_over_next = NULL;
411 /* See gdbthread.h. */
414 thread_step_over_chain_next (struct thread_info *tp)
416 struct thread_info *next = tp->step_over_next;
418 return (next == step_over_queue_head ? NULL : next);
421 /* See gdbthread.h. */
424 thread_is_in_step_over_chain (struct thread_info *tp)
426 return (tp->step_over_next != NULL);
429 /* See gdbthread.h. */
432 thread_step_over_chain_enqueue (struct thread_info *tp)
434 step_over_chain_enqueue (&step_over_queue_head, tp);
437 /* See gdbthread.h. */
440 thread_step_over_chain_remove (struct thread_info *tp)
442 step_over_chain_remove (&step_over_queue_head, tp);
445 /* Delete thread TP. If SILENT, don't notify the observer of this
449 delete_thread_1 (thread_info *thr, bool silent)
451 struct thread_info *tp, *tpprev;
455 for (tp = thr->inf->thread_list; tp; tpprev = tp, tp = tp->next)
462 set_thread_exited (tp, silent);
464 if (!tp->deletable ())
466 /* Will be really deleted some other time. */
471 tpprev->next = tp->next;
473 tp->inf->thread_list = tp->next;
478 /* Delete thread THREAD and notify of thread exit. If this is the
479 current thread, don't actually delete it, but tag it as exited and
480 do the notification. If this is the user selected thread, clear
484 delete_thread (thread_info *thread)
486 delete_thread_1 (thread, false /* not silent */);
490 delete_thread_silent (thread_info *thread)
492 delete_thread_1 (thread, true /* silent */);
496 find_thread_global_id (int global_id)
498 for (thread_info *tp : all_threads ())
499 if (tp->global_num == global_id)
505 static struct thread_info *
506 find_thread_id (struct inferior *inf, int thr_num)
508 for (thread_info *tp : inf->threads ())
509 if (tp->per_inf_num == thr_num)
515 /* Find a thread_info by matching PTID. */
518 find_thread_ptid (ptid_t ptid)
520 inferior *inf = find_inferior_ptid (ptid);
523 return find_thread_ptid (inf, ptid);
526 /* See gdbthread.h. */
529 find_thread_ptid (inferior *inf, ptid_t ptid)
531 for (thread_info *tp : inf->threads ())
532 if (tp->ptid == ptid)
538 /* See gdbthread.h. */
541 find_thread_by_handle (struct value *thread_handle, struct inferior *inf)
543 return target_thread_handle_to_thread_info
544 (value_contents_all (thread_handle),
545 TYPE_LENGTH (value_type (thread_handle)),
550 * Thread iterator function.
552 * Calls a callback function once for each thread, so long as
553 * the callback function returns false. If the callback function
554 * returns true, the iteration will end and the current thread
555 * will be returned. This can be useful for implementing a
556 * search for a thread with arbitrary attributes, or for applying
557 * some operation to every thread.
559 * FIXME: some of the existing functionality, such as
560 * "Thread apply all", might be rewritten using this functionality.
564 iterate_over_threads (int (*callback) (struct thread_info *, void *),
567 for (thread_info *tp : all_threads_safe ())
568 if ((*callback) (tp, data))
574 /* See gdbthread.h. */
579 for (thread_info *tp ATTRIBUTE_UNUSED : all_threads ())
587 auto rng = all_threads ();
588 return std::distance (rng.begin (), rng.end ());
591 /* Return the number of non-exited threads in the thread list. */
594 live_threads_count (void)
596 auto rng = all_non_exited_threads ();
597 return std::distance (rng.begin (), rng.end ());
601 valid_global_thread_id (int global_id)
603 for (thread_info *tp : all_threads ())
604 if (tp->global_num == global_id)
611 in_thread_list (ptid_t ptid)
613 return find_thread_ptid (ptid) != nullptr;
616 /* Finds the first thread of the inferior. */
619 first_thread_of_inferior (inferior *inf)
621 return inf->thread_list;
625 any_thread_of_inferior (inferior *inf)
627 gdb_assert (inf->pid != 0);
629 /* Prefer the current thread. */
630 if (inf == current_inferior ())
631 return inferior_thread ();
633 for (thread_info *tp : inf->non_exited_threads ())
640 any_live_thread_of_inferior (inferior *inf)
642 struct thread_info *curr_tp = NULL;
643 struct thread_info *tp_executing = NULL;
645 gdb_assert (inf != NULL && inf->pid != 0);
647 /* Prefer the current thread if it's not executing. */
648 if (inferior_ptid != null_ptid && current_inferior () == inf)
650 /* If the current thread is dead, forget it. If it's not
651 executing, use it. Otherwise, still choose it (below), but
652 only if no other non-executing thread is found. */
653 curr_tp = inferior_thread ();
654 if (curr_tp->state == THREAD_EXITED)
656 else if (!curr_tp->executing)
660 for (thread_info *tp : inf->non_exited_threads ())
668 /* If both the current thread and all live threads are executing,
669 prefer the current thread. */
673 /* Otherwise, just return an executing thread, if any. */
677 /* Return true if TP is an active thread. */
679 thread_alive (struct thread_info *tp)
681 if (tp->state == THREAD_EXITED)
683 if (!target_thread_alive (tp->ptid))
688 /* See gdbthreads.h. */
693 for (thread_info *tp : all_threads_safe ())
694 if (!thread_alive (tp))
698 /* See gdbthreads.h. */
701 delete_exited_threads (void)
703 for (thread_info *tp : all_threads_safe ())
704 if (tp->state == THREAD_EXITED)
708 /* Return true value if stack temporaies are enabled for the thread
712 thread_stack_temporaries_enabled_p (thread_info *tp)
717 return tp->stack_temporaries_enabled;
720 /* Push V on to the stack temporaries of the thread with id PTID. */
723 push_thread_stack_temporary (thread_info *tp, struct value *v)
725 gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
726 tp->stack_temporaries.push_back (v);
729 /* Return true if VAL is among the stack temporaries of the thread
730 TP. Return false otherwise. */
733 value_in_thread_stack_temporaries (struct value *val, thread_info *tp)
735 gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
736 for (value *v : tp->stack_temporaries)
743 /* Return the last of the stack temporaries for thread with id PTID.
744 Return NULL if there are no stack temporaries for the thread. */
747 get_last_thread_stack_temporary (thread_info *tp)
749 struct value *lastval = NULL;
751 gdb_assert (tp != NULL);
752 if (!tp->stack_temporaries.empty ())
753 lastval = tp->stack_temporaries.back ();
759 thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid)
761 struct inferior *inf;
762 struct thread_info *tp;
764 /* It can happen that what we knew as the target inferior id
765 changes. E.g, target remote may only discover the remote process
766 pid after adding the inferior to GDB's list. */
767 inf = find_inferior_ptid (old_ptid);
768 inf->pid = new_ptid.pid ();
770 tp = find_thread_ptid (inf, old_ptid);
773 gdb::observers::thread_ptid_changed.notify (old_ptid, new_ptid);
776 /* See gdbthread.h. */
779 set_resumed (ptid_t ptid, int resumed)
781 for (thread_info *tp : all_non_exited_threads (ptid))
782 tp->resumed = resumed;
785 /* Helper for set_running, that marks one thread either running or
789 set_running_thread (struct thread_info *tp, int running)
793 if (running && tp->state == THREAD_STOPPED)
795 tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
799 /* If the thread is now marked stopped, remove it from
800 the step-over queue, so that we don't try to resume
801 it until the user wants it to. */
802 if (tp->step_over_next != NULL)
803 thread_step_over_chain_remove (tp);
809 /* See gdbthread.h. */
812 thread_info::set_running (bool running)
814 if (set_running_thread (this, running))
815 gdb::observers::target_resumed.notify (this->ptid);
819 set_running (ptid_t ptid, int running)
821 /* We try not to notify the observer if no thread has actually
822 changed the running state -- merely to reduce the number of
823 messages to the MI frontend. A frontend is supposed to handle
824 multiple *running notifications just fine. */
825 bool any_started = false;
827 for (thread_info *tp : all_non_exited_threads (ptid))
828 if (set_running_thread (tp, running))
832 gdb::observers::target_resumed.notify (ptid);
836 /* Helper for set_executing. Set's the thread's 'executing' field
837 from EXECUTING, and if EXECUTING is true also clears the thread's
841 set_executing_thread (thread_info *thr, bool executing)
843 thr->executing = executing;
845 thr->suspend.stop_pc = ~(CORE_ADDR) 0;
849 set_executing (ptid_t ptid, int executing)
851 for (thread_info *tp : all_non_exited_threads (ptid))
852 set_executing_thread (tp, executing);
854 /* It only takes one running thread to spawn more threads. */
856 threads_executing = 1;
857 /* Only clear the flag if the caller is telling us everything is
859 else if (minus_one_ptid == ptid)
860 threads_executing = 0;
863 /* See gdbthread.h. */
866 threads_are_executing (void)
868 return threads_executing;
872 set_stop_requested (ptid_t ptid, int stop)
874 for (thread_info *tp : all_non_exited_threads (ptid))
875 tp->stop_requested = stop;
877 /* Call the stop requested observer so other components of GDB can
878 react to this request. */
880 gdb::observers::thread_stop_requested.notify (ptid);
884 finish_thread_state (ptid_t ptid)
886 bool any_started = false;
888 for (thread_info *tp : all_non_exited_threads (ptid))
889 if (set_running_thread (tp, tp->executing))
893 gdb::observers::target_resumed.notify (ptid);
896 /* See gdbthread.h. */
899 validate_registers_access (void)
901 /* No selected thread, no registers. */
902 if (inferior_ptid == null_ptid)
903 error (_("No thread selected."));
905 thread_info *tp = inferior_thread ();
907 /* Don't try to read from a dead thread. */
908 if (tp->state == THREAD_EXITED)
909 error (_("The current thread has terminated"));
911 /* ... or from a spinning thread. FIXME: This isn't actually fully
912 correct. It'll allow an user-requested access (e.g., "print $pc"
913 at the prompt) when a thread is not executing for some internal
914 reason, but is marked running from the user's perspective. E.g.,
915 the thread is waiting for its turn in the step-over queue. */
917 error (_("Selected thread is running."));
920 /* See gdbthread.h. */
923 can_access_registers_thread (thread_info *thread)
925 /* No thread, no registers. */
929 /* Don't try to read from a dead thread. */
930 if (thread->state == THREAD_EXITED)
933 /* ... or from a spinning thread. FIXME: see validate_registers_access. */
934 if (thread->executing)
941 pc_in_thread_step_range (CORE_ADDR pc, struct thread_info *thread)
943 return (pc >= thread->control.step_range_start
944 && pc < thread->control.step_range_end);
947 /* Helper for print_thread_info. Returns true if THR should be
948 printed. If REQUESTED_THREADS, a list of GDB ids/ranges, is not
949 NULL, only print THR if its ID is included in the list. GLOBAL_IDS
950 is true if REQUESTED_THREADS is list of global IDs, false if a list
951 of per-inferior thread ids. If PID is not -1, only print THR if it
952 is a thread from the process PID. Otherwise, threads from all
953 attached PIDs are printed. If both REQUESTED_THREADS is not NULL
954 and PID is not -1, then the thread is printed if it belongs to the
955 specified process. Otherwise, an error is raised. */
958 should_print_thread (const char *requested_threads, int default_inf_num,
959 int global_ids, int pid, struct thread_info *thr)
961 if (requested_threads != NULL && *requested_threads != '\0')
966 in_list = number_is_in_list (requested_threads, thr->global_num);
968 in_list = tid_is_in_list (requested_threads, default_inf_num,
969 thr->inf->num, thr->per_inf_num);
974 if (pid != -1 && thr->ptid.pid () != pid)
976 if (requested_threads != NULL && *requested_threads != '\0')
977 error (_("Requested thread not found in requested process"));
981 if (thr->state == THREAD_EXITED)
987 /* Return the string to display in "info threads"'s "Target Id"
991 thread_target_id_str (thread_info *tp)
993 const char *target_id = target_pid_to_str (tp->ptid);
994 const char *extra_info = target_extra_thread_info (tp);
995 const char *name = tp->name != nullptr ? tp->name : target_thread_name (tp);
997 if (extra_info != nullptr && name != nullptr)
998 return string_printf ("%s \"%s\" (%s)", target_id, name, extra_info);
999 else if (extra_info != nullptr)
1000 return string_printf ("%s (%s)", target_id, extra_info);
1001 else if (name != nullptr)
1002 return string_printf ("%s \"%s\"", target_id, name);
1007 /* Like print_thread_info, but in addition, GLOBAL_IDS indicates
1008 whether REQUESTED_THREADS is a list of global or per-inferior
1012 print_thread_info_1 (struct ui_out *uiout, const char *requested_threads,
1013 int global_ids, int pid,
1014 int show_global_ids)
1016 int default_inf_num = current_inferior ()->num;
1018 update_thread_list ();
1020 /* Whether we saw any thread. */
1021 bool any_thread = false;
1022 /* Whether the current thread is exited. */
1023 bool current_exited = false;
1025 thread_info *current_thread = (inferior_ptid != null_ptid
1026 ? inferior_thread () : NULL);
1029 /* For backward compatibility, we make a list for MI. A table is
1030 preferable for the CLI, though, because it shows table
1032 gdb::optional<ui_out_emit_list> list_emitter;
1033 gdb::optional<ui_out_emit_table> table_emitter;
1035 if (uiout->is_mi_like_p ())
1036 list_emitter.emplace (uiout, "threads");
1040 /* The width of the "Target Id" column. Grown below to
1041 accommodate the largest entry. */
1042 size_t target_id_col_width = 17;
1044 for (thread_info *tp : all_threads ())
1046 if (!should_print_thread (requested_threads, default_inf_num,
1047 global_ids, pid, tp))
1050 if (!uiout->is_mi_like_p ())
1053 = std::max (target_id_col_width,
1054 thread_target_id_str (tp).size ());
1062 if (requested_threads == NULL || *requested_threads == '\0')
1063 uiout->message (_("No threads.\n"));
1065 uiout->message (_("No threads match '%s'.\n"),
1070 table_emitter.emplace (uiout, show_global_ids ? 5 : 4,
1071 n_threads, "threads");
1073 uiout->table_header (1, ui_left, "current", "");
1074 uiout->table_header (4, ui_left, "id-in-tg", "Id");
1075 if (show_global_ids)
1076 uiout->table_header (4, ui_left, "id", "GId");
1077 uiout->table_header (target_id_col_width, ui_left,
1078 "target-id", "Target Id");
1079 uiout->table_header (1, ui_left, "frame", "Frame");
1080 uiout->table_body ();
1083 /* We'll be switching threads temporarily. */
1084 scoped_restore_current_thread restore_thread;
1086 for (inferior *inf : all_inferiors ())
1087 for (thread_info *tp : inf->threads ())
1092 if (tp == current_thread && tp->state == THREAD_EXITED)
1093 current_exited = true;
1095 if (!should_print_thread (requested_threads, default_inf_num,
1096 global_ids, pid, tp))
1099 ui_out_emit_tuple tuple_emitter (uiout, NULL);
1101 if (!uiout->is_mi_like_p ())
1103 if (tp == current_thread)
1104 uiout->field_string ("current", "*");
1106 uiout->field_skip ("current");
1108 uiout->field_string ("id-in-tg", print_thread_id (tp));
1111 if (show_global_ids || uiout->is_mi_like_p ())
1112 uiout->field_int ("id", tp->global_num);
1114 /* For the CLI, we stuff everything into the target-id field.
1115 This is a gross hack to make the output come out looking
1116 correct. The underlying problem here is that ui-out has no
1117 way to specify that a field's space allocation should be
1118 shared by several fields. For MI, we do the right thing
1121 if (uiout->is_mi_like_p ())
1123 uiout->field_string ("target-id", target_pid_to_str (tp->ptid));
1125 const char *extra_info = target_extra_thread_info (tp);
1126 if (extra_info != nullptr)
1127 uiout->field_string ("details", extra_info);
1129 const char *name = (tp->name != nullptr
1131 : target_thread_name (tp));
1133 uiout->field_string ("name", name);
1137 uiout->field_string ("target-id",
1138 thread_target_id_str (tp).c_str ());
1141 if (tp->state == THREAD_RUNNING)
1142 uiout->text ("(running)\n");
1145 /* The switch below puts us at the top of the stack (leaf
1147 switch_to_thread (tp);
1148 print_stack_frame (get_selected_frame (NULL),
1149 /* For MI output, print frame level. */
1150 uiout->is_mi_like_p (),
1154 if (uiout->is_mi_like_p ())
1156 const char *state = "stopped";
1158 if (tp->state == THREAD_RUNNING)
1160 uiout->field_string ("state", state);
1163 core = target_core_of_thread (tp->ptid);
1164 if (uiout->is_mi_like_p () && core != -1)
1165 uiout->field_int ("core", core);
1168 /* This end scope restores the current thread and the frame
1169 selected before the "info threads" command, and it finishes the
1170 ui-out list or table. */
1173 if (pid == -1 && requested_threads == NULL)
1175 if (uiout->is_mi_like_p () && inferior_ptid != null_ptid)
1176 uiout->field_int ("current-thread-id", current_thread->global_num);
1178 if (inferior_ptid != null_ptid && current_exited)
1179 uiout->message ("\n\
1180 The current thread <Thread ID %s> has terminated. See `help thread'.\n",
1181 print_thread_id (inferior_thread ()));
1182 else if (any_thread && inferior_ptid == null_ptid)
1183 uiout->message ("\n\
1184 No selected thread. See `help thread'.\n");
1188 /* See gdbthread.h. */
1191 print_thread_info (struct ui_out *uiout, char *requested_threads, int pid)
1193 print_thread_info_1 (uiout, requested_threads, 1, pid, 0);
1196 /* Implementation of the "info threads" command.
1198 Note: this has the drawback that it _really_ switches
1199 threads, which frees the frame cache. A no-side
1200 effects info-threads command would be nicer. */
1203 info_threads_command (const char *arg, int from_tty)
1205 int show_global_ids = 0;
1208 && check_for_argument (&arg, "-gid", sizeof ("-gid") - 1))
1210 arg = skip_spaces (arg);
1211 show_global_ids = 1;
1214 print_thread_info_1 (current_uiout, arg, 0, -1, show_global_ids);
1217 /* See gdbthread.h. */
1220 switch_to_thread_no_regs (struct thread_info *thread)
1222 struct inferior *inf = thread->inf;
1224 set_current_program_space (inf->pspace);
1225 set_current_inferior (inf);
1227 inferior_ptid = thread->ptid;
1230 /* See gdbthread.h. */
1233 switch_to_no_thread ()
1235 if (inferior_ptid == null_ptid)
1238 inferior_ptid = null_ptid;
1239 reinit_frame_cache ();
1242 /* See gdbthread.h. */
1245 switch_to_thread (thread_info *thr)
1247 gdb_assert (thr != NULL);
1249 if (inferior_ptid == thr->ptid)
1252 switch_to_thread_no_regs (thr);
1254 reinit_frame_cache ();
1257 /* See common/common-gdbthread.h. */
1260 switch_to_thread (ptid_t ptid)
1262 thread_info *thr = find_thread_ptid (ptid);
1263 switch_to_thread (thr);
1267 restore_selected_frame (struct frame_id a_frame_id, int frame_level)
1269 struct frame_info *frame = NULL;
1272 /* This means there was no selected frame. */
1273 if (frame_level == -1)
1275 select_frame (NULL);
1279 gdb_assert (frame_level >= 0);
1281 /* Restore by level first, check if the frame id is the same as
1282 expected. If that fails, try restoring by frame id. If that
1283 fails, nothing to do, just warn the user. */
1285 count = frame_level;
1286 frame = find_relative_frame (get_current_frame (), &count);
1289 /* The frame ids must match - either both valid or both outer_frame_id.
1290 The latter case is not failsafe, but since it's highly unlikely
1291 the search by level finds the wrong frame, it's 99.9(9)% of
1292 the time (for all practical purposes) safe. */
1293 && frame_id_eq (get_frame_id (frame), a_frame_id))
1295 /* Cool, all is fine. */
1296 select_frame (frame);
1300 frame = frame_find_by_id (a_frame_id);
1303 /* Cool, refound it. */
1304 select_frame (frame);
1308 /* Nothing else to do, the frame layout really changed. Select the
1309 innermost stack frame. */
1310 select_frame (get_current_frame ());
1312 /* Warn the user. */
1313 if (frame_level > 0 && !current_uiout->is_mi_like_p ())
1315 warning (_("Couldn't restore frame #%d in "
1316 "current thread. Bottom (innermost) frame selected:"),
1318 /* For MI, we should probably have a notification about
1319 current frame change. But this error is not very
1320 likely, so don't bother for now. */
1321 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
1325 scoped_restore_current_thread::~scoped_restore_current_thread ()
1327 /* If an entry of thread_info was previously selected, it won't be
1328 deleted because we've increased its refcount. The thread represented
1329 by this thread_info entry may have already exited (due to normal exit,
1330 detach, etc), so the thread_info.state is THREAD_EXITED. */
1331 if (m_thread != NULL
1332 /* If the previously selected thread belonged to a process that has
1333 in the mean time exited (or killed, detached, etc.), then don't revert
1334 back to it, but instead simply drop back to no thread selected. */
1336 switch_to_thread (m_thread);
1339 switch_to_no_thread ();
1340 set_current_inferior (m_inf);
1343 /* The running state of the originally selected thread may have
1344 changed, so we have to recheck it here. */
1345 if (inferior_ptid != null_ptid
1347 && m_thread->state == THREAD_STOPPED
1348 && target_has_registers
1350 && target_has_memory)
1351 restore_selected_frame (m_selected_frame_id, m_selected_frame_level);
1353 if (m_thread != NULL)
1354 m_thread->decref ();
1358 scoped_restore_current_thread::scoped_restore_current_thread ()
1361 m_inf = current_inferior ();
1363 if (inferior_ptid != null_ptid)
1365 thread_info *tp = inferior_thread ();
1366 struct frame_info *frame;
1368 m_was_stopped = tp->state == THREAD_STOPPED;
1370 && target_has_registers
1372 && target_has_memory)
1374 /* When processing internal events, there might not be a
1375 selected frame. If we naively call get_selected_frame
1376 here, then we can end up reading debuginfo for the
1377 current frame, but we don't generally need the debuginfo
1379 frame = get_selected_frame_if_set ();
1384 m_selected_frame_id = get_frame_id (frame);
1385 m_selected_frame_level = frame_relative_level (frame);
1394 /* See gdbthread.h. */
1397 show_thread_that_caused_stop (void)
1399 return highest_thread_num > 1;
1402 /* See gdbthread.h. */
1405 show_inferior_qualified_tids (void)
1407 return (inferior_list->next != NULL || inferior_list->num != 1);
1410 /* See gdbthread.h. */
1413 print_thread_id (struct thread_info *thr)
1415 char *s = get_print_cell ();
1417 if (show_inferior_qualified_tids ())
1418 xsnprintf (s, PRINT_CELL_SIZE, "%d.%d", thr->inf->num, thr->per_inf_num);
1420 xsnprintf (s, PRINT_CELL_SIZE, "%d", thr->per_inf_num);
1424 /* If true, tp_array_compar should sort in ascending order, otherwise
1425 in descending order. */
1427 static bool tp_array_compar_ascending;
1429 /* Sort an array for struct thread_info pointers by thread ID (first
1430 by inferior number, and then by per-inferior thread number). The
1431 order is determined by TP_ARRAY_COMPAR_ASCENDING. */
1434 tp_array_compar (const thread_info *a, const thread_info *b)
1436 if (a->inf->num != b->inf->num)
1438 if (tp_array_compar_ascending)
1439 return a->inf->num < b->inf->num;
1441 return a->inf->num > b->inf->num;
1444 if (tp_array_compar_ascending)
1445 return (a->per_inf_num < b->per_inf_num);
1447 return (a->per_inf_num > b->per_inf_num);
1450 /* Switch to thread THR and execute CMD.
1451 FLAGS.QUIET controls the printing of the thread information.
1452 FLAGS.CONT and FLAGS.SILENT control how to handle errors. */
1455 thr_try_catch_cmd (thread_info *thr, const char *cmd, int from_tty,
1456 const qcs_flags &flags)
1458 switch_to_thread (thr);
1461 std::string cmd_result = execute_command_to_string (cmd, from_tty);
1462 if (!flags.silent || cmd_result.length () > 0)
1465 printf_filtered (_("\nThread %s (%s):\n"),
1466 print_thread_id (thr),
1467 target_pid_to_str (inferior_ptid));
1468 printf_filtered ("%s", cmd_result.c_str ());
1471 CATCH (ex, RETURN_MASK_ERROR)
1476 printf_filtered (_("\nThread %s (%s):\n"),
1477 print_thread_id (thr),
1478 target_pid_to_str (inferior_ptid));
1480 printf_filtered ("%s\n", ex.message);
1482 throw_exception (ex);
1488 /* Apply a GDB command to a list of threads. List syntax is a whitespace
1489 separated list of numbers, or ranges, or the keyword `all'. Ranges consist
1490 of two numbers separated by a hyphen. Examples:
1492 thread apply 1 2 7 4 backtrace Apply backtrace cmd to threads 1,2,7,4
1493 thread apply 2-7 9 p foo(1) Apply p foo(1) cmd to threads 2->7 & 9
1494 thread apply all x/i $pc Apply x/i $pc cmd to all threads. */
1497 thread_apply_all_command (const char *cmd, int from_tty)
1501 tp_array_compar_ascending = false;
1505 if (check_for_argument (&cmd, "-ascending", strlen ("-ascending")))
1507 cmd = skip_spaces (cmd);
1508 tp_array_compar_ascending = true;
1512 if (parse_flags_qcs ("thread apply all", &cmd, &flags))
1518 if (cmd == NULL || *cmd == '\000')
1519 error (_("Please specify a command at the end of 'thread apply all'"));
1521 update_thread_list ();
1523 int tc = live_threads_count ();
1526 /* Save a copy of the thread list and increment each thread's
1527 refcount while executing the command in the context of each
1528 thread, in case the command is one that wipes threads. E.g.,
1529 detach, kill, disconnect, etc., or even normally continuing
1530 over an inferior or thread exit. */
1531 std::vector<thread_info *> thr_list_cpy;
1532 thr_list_cpy.reserve (tc);
1534 for (thread_info *tp : all_non_exited_threads ())
1535 thr_list_cpy.push_back (tp);
1536 gdb_assert (thr_list_cpy.size () == tc);
1538 /* Increment the refcounts, and restore them back on scope
1540 scoped_inc_dec_ref inc_dec_ref (thr_list_cpy);
1542 std::sort (thr_list_cpy.begin (), thr_list_cpy.end (), tp_array_compar);
1544 scoped_restore_current_thread restore_thread;
1546 for (thread_info *thr : thr_list_cpy)
1547 if (thread_alive (thr))
1548 thr_try_catch_cmd (thr, cmd, from_tty, flags);
1552 /* Implementation of the "thread apply" command. */
1555 thread_apply_command (const char *tidlist, int from_tty)
1558 const char *cmd = NULL;
1559 const char *cmd_or_flags;
1560 tid_range_parser parser;
1562 if (tidlist == NULL || *tidlist == '\000')
1563 error (_("Please specify a thread ID list"));
1565 parser.init (tidlist, current_inferior ()->num);
1566 while (!parser.finished ())
1568 int inf_num, thr_start, thr_end;
1570 if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
1572 cmd = parser.cur_tok ();
1578 while (cmd != NULL && parse_flags_qcs ("thread apply", &cmd, &flags))
1582 error (_("Please specify a command following the thread ID list"));
1584 if (tidlist == cmd || !isalpha (cmd[0]))
1585 invalid_thread_id_error (cmd);
1587 scoped_restore_current_thread restore_thread;
1589 parser.init (tidlist, current_inferior ()->num);
1590 while (!parser.finished () && parser.cur_tok () < cmd_or_flags)
1592 struct thread_info *tp = NULL;
1593 struct inferior *inf;
1594 int inf_num, thr_num;
1596 parser.get_tid (&inf_num, &thr_num);
1597 inf = find_inferior_id (inf_num);
1599 tp = find_thread_id (inf, thr_num);
1601 if (parser.in_star_range ())
1605 warning (_("Unknown inferior %d"), inf_num);
1606 parser.skip_range ();
1610 /* No use looking for threads past the highest thread number
1611 the inferior ever had. */
1612 if (thr_num >= inf->highest_thread_num)
1613 parser.skip_range ();
1615 /* Be quiet about unknown threads numbers. */
1622 if (show_inferior_qualified_tids () || parser.tid_is_qualified ())
1623 warning (_("Unknown thread %d.%d"), inf_num, thr_num);
1625 warning (_("Unknown thread %d"), thr_num);
1629 if (!thread_alive (tp))
1631 warning (_("Thread %s has terminated."), print_thread_id (tp));
1635 thr_try_catch_cmd (tp, cmd, from_tty, flags);
1640 /* Implementation of the "taas" command. */
1643 taas_command (const char *cmd, int from_tty)
1645 std::string expanded = std::string ("thread apply all -s ") + cmd;
1646 execute_command (expanded.c_str (), from_tty);
1649 /* Implementation of the "tfaas" command. */
1652 tfaas_command (const char *cmd, int from_tty)
1654 std::string expanded
1655 = std::string ("thread apply all -s frame apply all -s ") + cmd;
1656 execute_command (expanded.c_str (), from_tty);
1659 /* Switch to the specified thread, or print the current thread. */
1662 thread_command (const char *tidstr, int from_tty)
1666 if (inferior_ptid == null_ptid)
1667 error (_("No thread selected"));
1669 if (target_has_stack)
1671 struct thread_info *tp = inferior_thread ();
1673 if (tp->state == THREAD_EXITED)
1674 printf_filtered (_("[Current thread is %s (%s) (exited)]\n"),
1675 print_thread_id (tp),
1676 target_pid_to_str (inferior_ptid));
1678 printf_filtered (_("[Current thread is %s (%s)]\n"),
1679 print_thread_id (tp),
1680 target_pid_to_str (inferior_ptid));
1683 error (_("No stack."));
1687 ptid_t previous_ptid = inferior_ptid;
1689 thread_select (tidstr, parse_thread_id (tidstr, NULL));
1691 /* Print if the thread has not changed, otherwise an event will
1693 if (inferior_ptid == previous_ptid)
1695 print_selected_thread_frame (current_uiout,
1696 USER_SELECTED_THREAD
1697 | USER_SELECTED_FRAME);
1701 gdb::observers::user_selected_context_changed.notify
1702 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1707 /* Implementation of `thread name'. */
1710 thread_name_command (const char *arg, int from_tty)
1712 struct thread_info *info;
1714 if (inferior_ptid == null_ptid)
1715 error (_("No thread selected"));
1717 arg = skip_spaces (arg);
1719 info = inferior_thread ();
1721 info->name = arg ? xstrdup (arg) : NULL;
1724 /* Find thread ids with a name, target pid, or extra info matching ARG. */
1727 thread_find_command (const char *arg, int from_tty)
1730 unsigned long match = 0;
1732 if (arg == NULL || *arg == '\0')
1733 error (_("Command requires an argument."));
1735 tmp = re_comp (arg);
1737 error (_("Invalid regexp (%s): %s"), tmp, arg);
1739 update_thread_list ();
1740 for (thread_info *tp : all_threads ())
1742 if (tp->name != NULL && re_exec (tp->name))
1744 printf_filtered (_("Thread %s has name '%s'\n"),
1745 print_thread_id (tp), tp->name);
1749 tmp = target_thread_name (tp);
1750 if (tmp != NULL && re_exec (tmp))
1752 printf_filtered (_("Thread %s has target name '%s'\n"),
1753 print_thread_id (tp), tmp);
1757 tmp = target_pid_to_str (tp->ptid);
1758 if (tmp != NULL && re_exec (tmp))
1760 printf_filtered (_("Thread %s has target id '%s'\n"),
1761 print_thread_id (tp), tmp);
1765 tmp = target_extra_thread_info (tp);
1766 if (tmp != NULL && re_exec (tmp))
1768 printf_filtered (_("Thread %s has extra info '%s'\n"),
1769 print_thread_id (tp), tmp);
1774 printf_filtered (_("No threads match '%s'\n"), arg);
1777 /* Print notices when new threads are attached and detached. */
1778 int print_thread_events = 1;
1780 show_print_thread_events (struct ui_file *file, int from_tty,
1781 struct cmd_list_element *c, const char *value)
1783 fprintf_filtered (file,
1784 _("Printing of thread events is %s.\n"),
1788 /* See gdbthread.h. */
1791 thread_select (const char *tidstr, thread_info *tp)
1793 if (!thread_alive (tp))
1794 error (_("Thread ID %s has terminated."), tidstr);
1796 switch_to_thread (tp);
1798 annotate_thread_changed ();
1800 /* Since the current thread may have changed, see if there is any
1801 exited thread we can now delete. */
1805 /* Print thread and frame switch command response. */
1808 print_selected_thread_frame (struct ui_out *uiout,
1809 user_selected_what selection)
1811 struct thread_info *tp = inferior_thread ();
1813 if (selection & USER_SELECTED_THREAD)
1815 if (uiout->is_mi_like_p ())
1817 uiout->field_int ("new-thread-id",
1818 inferior_thread ()->global_num);
1822 uiout->text ("[Switching to thread ");
1823 uiout->field_string ("new-thread-id", print_thread_id (tp));
1825 uiout->text (target_pid_to_str (inferior_ptid));
1830 if (tp->state == THREAD_RUNNING)
1832 if (selection & USER_SELECTED_THREAD)
1833 uiout->text ("(running)\n");
1835 else if (selection & USER_SELECTED_FRAME)
1837 if (selection & USER_SELECTED_THREAD)
1840 if (has_stack_frames ())
1841 print_stack_frame_to_uiout (uiout, get_selected_frame (NULL),
1846 /* Update the 'threads_executing' global based on the threads we know
1850 update_threads_executing (void)
1852 threads_executing = 0;
1853 for (thread_info *tp : all_non_exited_threads ())
1857 threads_executing = 1;
1864 update_thread_list (void)
1866 target_update_thread_list ();
1867 update_threads_executing ();
1870 /* Return a new value for the selected thread's id. Return a value of
1871 0 if no thread is selected. If GLOBAL is true, return the thread's
1872 global number. Otherwise return the per-inferior number. */
1874 static struct value *
1875 thread_num_make_value_helper (struct gdbarch *gdbarch, int global)
1879 if (inferior_ptid == null_ptid)
1883 thread_info *tp = inferior_thread ();
1885 int_val = tp->global_num;
1887 int_val = tp->per_inf_num;
1890 return value_from_longest (builtin_type (gdbarch)->builtin_int, int_val);
1893 /* Return a new value for the selected thread's per-inferior thread
1894 number. Return a value of 0 if no thread is selected, or no
1897 static struct value *
1898 thread_id_per_inf_num_make_value (struct gdbarch *gdbarch,
1899 struct internalvar *var,
1902 return thread_num_make_value_helper (gdbarch, 0);
1905 /* Return a new value for the selected thread's global id. Return a
1906 value of 0 if no thread is selected, or no threads exist. */
1908 static struct value *
1909 global_thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
1912 return thread_num_make_value_helper (gdbarch, 1);
1915 /* Commands with a prefix of `thread'. */
1916 struct cmd_list_element *thread_cmd_list = NULL;
1918 /* Implementation of `thread' variable. */
1920 static const struct internalvar_funcs thread_funcs =
1922 thread_id_per_inf_num_make_value,
1927 /* Implementation of `gthread' variable. */
1929 static const struct internalvar_funcs gthread_funcs =
1931 global_thread_id_make_value,
1937 _initialize_thread (void)
1939 static struct cmd_list_element *thread_apply_list = NULL;
1941 add_info ("threads", info_threads_command,
1942 _("Display currently known threads.\n\
1943 Usage: info threads [-gid] [ID]...\n\
1944 -gid: Show global thread IDs.\n\
1945 If ID is given, it is a space-separated list of IDs of threads to display.\n\
1946 Otherwise, all threads are displayed."));
1948 add_prefix_cmd ("thread", class_run, thread_command, _("\
1949 Use this command to switch between threads.\n\
1950 The new thread ID must be currently known."),
1951 &thread_cmd_list, "thread ", 1, &cmdlist);
1953 #define THREAD_APPLY_FLAGS_HELP "\
1954 Prints per-inferior thread number and target system's thread id\n\
1955 followed by COMMAND output.\n\
1956 FLAG arguments are -q (quiet), -c (continue), -s (silent).\n\
1957 Flag -q disables printing the thread information.\n\
1958 By default, if a COMMAND raises an error, thread apply is aborted.\n\
1959 Flag -c indicates to print the error and continue.\n\
1960 Flag -s indicates to silently ignore a COMMAND that raises an error\n\
1961 or produces no output."
1963 add_prefix_cmd ("apply", class_run, thread_apply_command,
1964 _("Apply a command to a list of threads.\n\
1965 Usage: thread apply ID... [FLAG]... COMMAND\n\
1966 ID is a space-separated list of IDs of threads to apply COMMAND on.\n"
1967 THREAD_APPLY_FLAGS_HELP),
1968 &thread_apply_list, "thread apply ", 1, &thread_cmd_list);
1970 add_cmd ("all", class_run, thread_apply_all_command,
1972 Apply a command to all threads.\n\
1974 Usage: thread apply all [-ascending] [FLAG]... COMMAND\n\
1975 -ascending: Call COMMAND for all threads in ascending order.\n\
1976 The default is descending order.\n"
1977 THREAD_APPLY_FLAGS_HELP),
1978 &thread_apply_list);
1980 add_com ("taas", class_run, taas_command, _("\
1981 Apply a command to all threads (ignoring errors and empty output).\n\
1982 Usage: taas COMMAND\n\
1983 shortcut for 'thread apply all -s COMMAND'"));
1985 add_com ("tfaas", class_run, tfaas_command, _("\
1986 Apply a command to all frames of all threads (ignoring errors and empty output).\n\
1987 Usage: tfaas COMMAND\n\
1988 shortcut for 'thread apply all -s frame apply all -s COMMAND'"));
1990 add_cmd ("name", class_run, thread_name_command,
1991 _("Set the current thread's name.\n\
1992 Usage: thread name [NAME]\n\
1993 If NAME is not given, then any existing name is removed."), &thread_cmd_list);
1995 add_cmd ("find", class_run, thread_find_command, _("\
1996 Find threads that match a regular expression.\n\
1997 Usage: thread find REGEXP\n\
1998 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
2001 add_com_alias ("t", "thread", class_run, 1);
2003 add_setshow_boolean_cmd ("thread-events", no_class,
2004 &print_thread_events, _("\
2005 Set printing of thread events (such as thread start and exit)."), _("\
2006 Show printing of thread events (such as thread start and exit)."), NULL,
2008 show_print_thread_events,
2009 &setprintlist, &showprintlist);
2011 create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
2012 create_internalvar_type_lazy ("_gthread", >hread_funcs, NULL);