Automatic date update in version.in
[binutils-gdb.git] / gdb / thread.c
blob378c5ee2d133ea17eef42c8d9041fc260c424fc0
1 /* Multi-process/thread control for GDB, the GNU debugger.
3 Copyright (C) 1986-2022 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/>. */
22 #include "defs.h"
23 #include "symtab.h"
24 #include "frame.h"
25 #include "inferior.h"
26 #include "gdbsupport/environ.h"
27 #include "value.h"
28 #include "target.h"
29 #include "gdbthread.h"
30 #include "command.h"
31 #include "gdbcmd.h"
32 #include "regcache.h"
33 #include "btrace.h"
35 #include <ctype.h>
36 #include <sys/types.h>
37 #include <signal.h>
38 #include "ui-out.h"
39 #include "observable.h"
40 #include "annotate.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-option.h"
43 #include "gdbsupport/gdb_regex.h"
44 #include "cli/cli-utils.h"
45 #include "thread-fsm.h"
46 #include "tid-parse.h"
47 #include <algorithm>
48 #include "gdbsupport/gdb_optional.h"
49 #include "inline-frame.h"
50 #include "stack.h"
52 /* See gdbthread.h. */
54 bool debug_threads = false;
56 /* Implement 'show debug threads'. */
58 static void
59 show_debug_threads (struct ui_file *file, int from_tty,
60 struct cmd_list_element *c, const char *value)
62 gdb_printf (file, _("Thread debugging is \"%s\".\n"), value);
65 /* Definition of struct thread_info exported to gdbthread.h. */
67 /* Prototypes for local functions. */
69 static int highest_thread_num;
71 /* The current/selected thread. */
72 static thread_info *current_thread_;
74 /* Returns true if THR is the current thread. */
76 static bool
77 is_current_thread (const thread_info *thr)
79 return thr == current_thread_;
82 struct thread_info*
83 inferior_thread (void)
85 gdb_assert (current_thread_ != nullptr);
86 return current_thread_;
89 /* Delete the breakpoint pointed at by BP_P, if there's one. */
91 static void
92 delete_thread_breakpoint (struct breakpoint **bp_p)
94 if (*bp_p != NULL)
96 delete_breakpoint (*bp_p);
97 *bp_p = NULL;
101 void
102 delete_step_resume_breakpoint (struct thread_info *tp)
104 if (tp != NULL)
105 delete_thread_breakpoint (&tp->control.step_resume_breakpoint);
108 void
109 delete_exception_resume_breakpoint (struct thread_info *tp)
111 if (tp != NULL)
112 delete_thread_breakpoint (&tp->control.exception_resume_breakpoint);
115 /* See gdbthread.h. */
117 void
118 delete_single_step_breakpoints (struct thread_info *tp)
120 if (tp != NULL)
121 delete_thread_breakpoint (&tp->control.single_step_breakpoints);
124 /* Delete the breakpoint pointed at by BP_P at the next stop, if
125 there's one. */
127 static void
128 delete_at_next_stop (struct breakpoint **bp)
130 if (*bp != NULL)
132 (*bp)->disposition = disp_del_at_next_stop;
133 *bp = NULL;
137 /* See gdbthread.h. */
140 thread_has_single_step_breakpoints_set (struct thread_info *tp)
142 return tp->control.single_step_breakpoints != NULL;
145 /* See gdbthread.h. */
148 thread_has_single_step_breakpoint_here (struct thread_info *tp,
149 const address_space *aspace,
150 CORE_ADDR addr)
152 struct breakpoint *ss_bps = tp->control.single_step_breakpoints;
154 return (ss_bps != NULL
155 && breakpoint_has_location_inserted_here (ss_bps, aspace, addr));
158 /* See gdbthread.h. */
160 void
161 thread_cancel_execution_command (struct thread_info *thr)
163 if (thr->thread_fsm () != nullptr)
165 std::unique_ptr<thread_fsm> fsm = thr->release_thread_fsm ();
166 fsm->clean_up (thr);
170 static void
171 clear_thread_inferior_resources (struct thread_info *tp)
173 /* NOTE: this will take care of any left-over step_resume breakpoints,
174 but not any user-specified thread-specific breakpoints. We can not
175 delete the breakpoint straight-off, because the inferior might not
176 be stopped at the moment. */
177 delete_at_next_stop (&tp->control.step_resume_breakpoint);
178 delete_at_next_stop (&tp->control.exception_resume_breakpoint);
179 delete_at_next_stop (&tp->control.single_step_breakpoints);
181 delete_longjmp_breakpoint_at_next_stop (tp->global_num);
183 bpstat_clear (&tp->control.stop_bpstat);
185 btrace_teardown (tp);
187 thread_cancel_execution_command (tp);
189 clear_inline_frame_state (tp);
192 /* See gdbthread.h. */
194 void
195 set_thread_exited (thread_info *tp, bool silent)
197 /* Dead threads don't need to step-over. Remove from chain. */
198 if (thread_is_in_step_over_chain (tp))
199 global_thread_step_over_chain_remove (tp);
201 if (tp->state != THREAD_EXITED)
203 process_stratum_target *proc_target = tp->inf->process_target ();
205 /* Some targets unpush themselves from the inferior's target stack before
206 clearing the inferior's thread list (which marks all threads as exited,
207 and therefore leads to this function). In this case, the inferior's
208 process target will be nullptr when we arrive here.
210 See also the comment in inferior::unpush_target. */
211 if (proc_target != nullptr)
212 proc_target->maybe_remove_resumed_with_pending_wait_status (tp);
214 gdb::observers::thread_exit.notify (tp, silent);
216 /* Tag it as exited. */
217 tp->state = THREAD_EXITED;
219 /* Clear breakpoints, etc. associated with this thread. */
220 clear_thread_inferior_resources (tp);
222 /* Remove from the ptid_t map. We don't want for
223 find_thread_ptid to find exited threads. Also, the target
224 may reuse the ptid for a new thread, and there can only be
225 one value per key; adding a new thread with the same ptid_t
226 would overwrite the exited thread's ptid entry. */
227 size_t nr_deleted = tp->inf->ptid_thread_map.erase (tp->ptid);
228 gdb_assert (nr_deleted == 1);
232 void
233 init_thread_list (void)
235 highest_thread_num = 0;
237 for (inferior *inf : all_inferiors ())
238 inf->clear_thread_list (true);
241 /* Allocate a new thread of inferior INF with target id PTID and add
242 it to the thread list. */
244 static struct thread_info *
245 new_thread (struct inferior *inf, ptid_t ptid)
247 thread_info *tp = new thread_info (inf, ptid);
249 threads_debug_printf ("creating a new thread object, inferior %d, ptid %s",
250 inf->num, ptid.to_string ().c_str ());
252 inf->thread_list.push_back (*tp);
254 /* A thread with this ptid should not exist in the map yet. */
255 gdb_assert (inf->ptid_thread_map.find (ptid) == inf->ptid_thread_map.end ());
257 inf->ptid_thread_map[ptid] = tp;
259 return tp;
262 struct thread_info *
263 add_thread_silent (process_stratum_target *targ, ptid_t ptid)
265 gdb_assert (targ != nullptr);
267 inferior *inf = find_inferior_ptid (targ, ptid);
269 threads_debug_printf ("add thread to inferior %d, ptid %s, target %s",
270 inf->num, ptid.to_string ().c_str (),
271 targ->shortname ());
273 /* We may have an old thread with the same id in the thread list.
274 If we do, it must be dead, otherwise we wouldn't be adding a new
275 thread with the same id. The OS is reusing this id --- delete
276 the old thread, and create a new one. */
277 thread_info *tp = find_thread_ptid (inf, ptid);
278 if (tp != nullptr)
279 delete_thread (tp);
281 tp = new_thread (inf, ptid);
282 gdb::observers::new_thread.notify (tp);
284 return tp;
287 struct thread_info *
288 add_thread_with_info (process_stratum_target *targ, ptid_t ptid,
289 private_thread_info *priv)
291 thread_info *result = add_thread_silent (targ, ptid);
293 result->priv.reset (priv);
295 if (print_thread_events)
296 gdb_printf (_("[New %s]\n"), target_pid_to_str (ptid).c_str ());
298 annotate_new_thread ();
299 return result;
302 struct thread_info *
303 add_thread (process_stratum_target *targ, ptid_t ptid)
305 return add_thread_with_info (targ, ptid, NULL);
308 private_thread_info::~private_thread_info () = default;
310 thread_info::thread_info (struct inferior *inf_, ptid_t ptid_)
311 : ptid (ptid_), inf (inf_)
313 gdb_assert (inf_ != NULL);
315 this->global_num = ++highest_thread_num;
316 this->per_inf_num = ++inf_->highest_thread_num;
318 /* Nothing to follow yet. */
319 this->pending_follow.set_spurious ();
322 /* See gdbthread.h. */
324 thread_info::~thread_info ()
326 threads_debug_printf ("thread %s", this->ptid.to_string ().c_str ());
329 /* See gdbthread.h. */
331 bool
332 thread_info::deletable () const
334 /* If this is the current thread, or there's code out there that
335 relies on it existing (refcount > 0) we can't delete yet. */
336 return refcount () == 0 && !is_current_thread (this);
339 /* See gdbthread.h. */
341 void
342 thread_info::set_executing (bool executing)
344 m_executing = executing;
345 if (executing)
346 this->clear_stop_pc ();
349 /* See gdbthread.h. */
351 void
352 thread_info::set_resumed (bool resumed)
354 if (resumed == m_resumed)
355 return;
357 process_stratum_target *proc_target = this->inf->process_target ();
359 /* If we transition from resumed to not resumed, we might need to remove
360 the thread from the resumed threads with pending statuses list. */
361 if (!resumed)
362 proc_target->maybe_remove_resumed_with_pending_wait_status (this);
364 m_resumed = resumed;
366 /* If we transition from not resumed to resumed, we might need to add
367 the thread to the resumed threads with pending statuses list. */
368 if (resumed)
369 proc_target->maybe_add_resumed_with_pending_wait_status (this);
372 /* See gdbthread.h. */
374 void
375 thread_info::set_pending_waitstatus (const target_waitstatus &ws)
377 gdb_assert (!this->has_pending_waitstatus ());
379 m_suspend.waitstatus = ws;
380 m_suspend.waitstatus_pending_p = 1;
382 process_stratum_target *proc_target = this->inf->process_target ();
383 proc_target->maybe_add_resumed_with_pending_wait_status (this);
386 /* See gdbthread.h. */
388 void
389 thread_info::clear_pending_waitstatus ()
391 gdb_assert (this->has_pending_waitstatus ());
393 process_stratum_target *proc_target = this->inf->process_target ();
394 proc_target->maybe_remove_resumed_with_pending_wait_status (this);
396 m_suspend.waitstatus_pending_p = 0;
399 /* See gdbthread.h. */
402 thread_is_in_step_over_chain (struct thread_info *tp)
404 return tp->step_over_list_node.is_linked ();
407 /* See gdbthread.h. */
410 thread_step_over_chain_length (const thread_step_over_list &l)
412 int num = 0;
414 for (const thread_info &thread ATTRIBUTE_UNUSED : l)
415 ++num;
417 return num;
420 /* See gdbthread.h. */
422 void
423 global_thread_step_over_chain_enqueue (struct thread_info *tp)
425 infrun_debug_printf ("enqueueing thread %s in global step over chain",
426 tp->ptid.to_string ().c_str ());
428 gdb_assert (!thread_is_in_step_over_chain (tp));
429 global_thread_step_over_list.push_back (*tp);
432 /* See gdbthread.h. */
434 void
435 global_thread_step_over_chain_enqueue_chain (thread_step_over_list &&list)
437 global_thread_step_over_list.splice (std::move (list));
440 /* See gdbthread.h. */
442 void
443 global_thread_step_over_chain_remove (struct thread_info *tp)
445 infrun_debug_printf ("removing thread %s from global step over chain",
446 tp->ptid.to_string ().c_str ());
448 gdb_assert (thread_is_in_step_over_chain (tp));
449 auto it = global_thread_step_over_list.iterator_to (*tp);
450 global_thread_step_over_list.erase (it);
453 /* Delete the thread referenced by THR. If SILENT, don't notify
454 the observer of this exit.
456 THR must not be NULL or a failed assertion will be raised. */
458 static void
459 delete_thread_1 (thread_info *thr, bool silent)
461 gdb_assert (thr != nullptr);
463 threads_debug_printf ("deleting thread %s, silent = %d",
464 thr->ptid.to_string ().c_str (), silent);
466 set_thread_exited (thr, silent);
468 if (!thr->deletable ())
470 /* Will be really deleted some other time. */
471 return;
474 auto it = thr->inf->thread_list.iterator_to (*thr);
475 thr->inf->thread_list.erase (it);
477 delete thr;
480 /* See gdbthread.h. */
482 void
483 delete_thread (thread_info *thread)
485 delete_thread_1 (thread, false /* not silent */);
488 void
489 delete_thread_silent (thread_info *thread)
491 delete_thread_1 (thread, true /* silent */);
494 struct thread_info *
495 find_thread_global_id (int global_id)
497 for (thread_info *tp : all_threads ())
498 if (tp->global_num == global_id)
499 return tp;
501 return NULL;
504 static struct thread_info *
505 find_thread_id (struct inferior *inf, int thr_num)
507 for (thread_info *tp : inf->threads ())
508 if (tp->per_inf_num == thr_num)
509 return tp;
511 return NULL;
514 /* See gdbthread.h. */
516 struct thread_info *
517 find_thread_ptid (process_stratum_target *targ, ptid_t ptid)
519 inferior *inf = find_inferior_ptid (targ, ptid);
520 if (inf == NULL)
521 return NULL;
522 return find_thread_ptid (inf, ptid);
525 /* See gdbthread.h. */
527 struct thread_info *
528 find_thread_ptid (inferior *inf, ptid_t ptid)
530 gdb_assert (inf != nullptr);
532 auto it = inf->ptid_thread_map.find (ptid);
533 if (it != inf->ptid_thread_map.end ())
534 return it->second;
535 else
536 return nullptr;
539 /* See gdbthread.h. */
541 struct thread_info *
542 find_thread_by_handle (gdb::array_view<const gdb_byte> handle,
543 struct inferior *inf)
545 return target_thread_handle_to_thread_info (handle.data (),
546 handle.size (),
547 inf);
551 * Thread iterator function.
553 * Calls a callback function once for each thread, so long as
554 * the callback function returns false. If the callback function
555 * returns true, the iteration will end and the current thread
556 * will be returned. This can be useful for implementing a
557 * search for a thread with arbitrary attributes, or for applying
558 * some operation to every thread.
560 * FIXME: some of the existing functionality, such as
561 * "Thread apply all", might be rewritten using this functionality.
564 struct thread_info *
565 iterate_over_threads (int (*callback) (struct thread_info *, void *),
566 void *data)
568 for (thread_info *tp : all_threads_safe ())
569 if ((*callback) (tp, data))
570 return tp;
572 return NULL;
575 /* See gdbthread.h. */
577 bool
578 any_thread_p ()
580 for (thread_info *tp ATTRIBUTE_UNUSED : all_threads ())
581 return true;
582 return false;
586 thread_count (process_stratum_target *proc_target)
588 auto rng = all_threads (proc_target);
589 return std::distance (rng.begin (), rng.end ());
592 /* Return the number of non-exited threads in the thread list. */
594 static int
595 live_threads_count (void)
597 auto rng = all_non_exited_threads ();
598 return std::distance (rng.begin (), rng.end ());
602 valid_global_thread_id (int global_id)
604 for (thread_info *tp : all_threads ())
605 if (tp->global_num == global_id)
606 return 1;
608 return 0;
611 bool
612 in_thread_list (process_stratum_target *targ, ptid_t ptid)
614 return find_thread_ptid (targ, ptid) != nullptr;
617 /* Finds the first thread of the inferior. */
619 thread_info *
620 first_thread_of_inferior (inferior *inf)
622 if (inf->thread_list.empty ())
623 return nullptr;
625 return &inf->thread_list.front ();
628 thread_info *
629 any_thread_of_inferior (inferior *inf)
631 gdb_assert (inf->pid != 0);
633 /* Prefer the current thread, if there's one. */
634 if (inf == current_inferior () && inferior_ptid != null_ptid)
635 return inferior_thread ();
637 for (thread_info *tp : inf->non_exited_threads ())
638 return tp;
640 return NULL;
643 thread_info *
644 any_live_thread_of_inferior (inferior *inf)
646 struct thread_info *curr_tp = NULL;
647 struct thread_info *tp_executing = NULL;
649 gdb_assert (inf != NULL && inf->pid != 0);
651 /* Prefer the current thread if it's not executing. */
652 if (inferior_ptid != null_ptid && current_inferior () == inf)
654 /* If the current thread is dead, forget it. If it's not
655 executing, use it. Otherwise, still choose it (below), but
656 only if no other non-executing thread is found. */
657 curr_tp = inferior_thread ();
658 if (curr_tp->state == THREAD_EXITED)
659 curr_tp = NULL;
660 else if (!curr_tp->executing ())
661 return curr_tp;
664 for (thread_info *tp : inf->non_exited_threads ())
666 if (!tp->executing ())
667 return tp;
669 tp_executing = tp;
672 /* If both the current thread and all live threads are executing,
673 prefer the current thread. */
674 if (curr_tp != NULL)
675 return curr_tp;
677 /* Otherwise, just return an executing thread, if any. */
678 return tp_executing;
681 /* Return true if TP is an active thread. */
682 static bool
683 thread_alive (thread_info *tp)
685 if (tp->state == THREAD_EXITED)
686 return false;
688 /* Ensure we're looking at the right target stack. */
689 gdb_assert (tp->inf == current_inferior ());
691 return target_thread_alive (tp->ptid);
694 /* See gdbthreads.h. */
696 bool
697 switch_to_thread_if_alive (thread_info *thr)
699 scoped_restore_current_thread restore_thread;
701 /* Switch inferior first, so that we're looking at the right target
702 stack. */
703 switch_to_inferior_no_thread (thr->inf);
705 if (thread_alive (thr))
707 switch_to_thread (thr);
708 restore_thread.dont_restore ();
709 return true;
712 return false;
715 /* See gdbthreads.h. */
717 void
718 prune_threads (void)
720 scoped_restore_current_thread restore_thread;
722 for (thread_info *tp : all_threads_safe ())
724 switch_to_inferior_no_thread (tp->inf);
726 if (!thread_alive (tp))
727 delete_thread (tp);
731 /* See gdbthreads.h. */
733 void
734 delete_exited_threads (void)
736 for (thread_info *tp : all_threads_safe ())
737 if (tp->state == THREAD_EXITED)
738 delete_thread (tp);
741 /* Return true value if stack temporaries are enabled for the thread
742 TP. */
744 bool
745 thread_stack_temporaries_enabled_p (thread_info *tp)
747 if (tp == NULL)
748 return false;
749 else
750 return tp->stack_temporaries_enabled;
753 /* Push V on to the stack temporaries of the thread with id PTID. */
755 void
756 push_thread_stack_temporary (thread_info *tp, struct value *v)
758 gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
759 tp->stack_temporaries.push_back (v);
762 /* Return true if VAL is among the stack temporaries of the thread
763 TP. Return false otherwise. */
765 bool
766 value_in_thread_stack_temporaries (struct value *val, thread_info *tp)
768 gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
769 for (value *v : tp->stack_temporaries)
770 if (v == val)
771 return true;
773 return false;
776 /* Return the last of the stack temporaries for thread with id PTID.
777 Return NULL if there are no stack temporaries for the thread. */
779 value *
780 get_last_thread_stack_temporary (thread_info *tp)
782 struct value *lastval = NULL;
784 gdb_assert (tp != NULL);
785 if (!tp->stack_temporaries.empty ())
786 lastval = tp->stack_temporaries.back ();
788 return lastval;
791 void
792 thread_change_ptid (process_stratum_target *targ,
793 ptid_t old_ptid, ptid_t new_ptid)
795 struct inferior *inf;
796 struct thread_info *tp;
798 /* It can happen that what we knew as the target inferior id
799 changes. E.g, target remote may only discover the remote process
800 pid after adding the inferior to GDB's list. */
801 inf = find_inferior_ptid (targ, old_ptid);
802 inf->pid = new_ptid.pid ();
804 tp = find_thread_ptid (inf, old_ptid);
805 gdb_assert (tp != nullptr);
807 int num_erased = inf->ptid_thread_map.erase (old_ptid);
808 gdb_assert (num_erased == 1);
810 tp->ptid = new_ptid;
811 inf->ptid_thread_map[new_ptid] = tp;
813 gdb::observers::thread_ptid_changed.notify (targ, old_ptid, new_ptid);
816 /* See gdbthread.h. */
818 void
819 set_resumed (process_stratum_target *targ, ptid_t ptid, bool resumed)
821 for (thread_info *tp : all_non_exited_threads (targ, ptid))
822 tp->set_resumed (resumed);
825 /* Helper for set_running, that marks one thread either running or
826 stopped. */
828 static bool
829 set_running_thread (struct thread_info *tp, bool running)
831 bool started = false;
833 if (running && tp->state == THREAD_STOPPED)
834 started = true;
835 tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
837 if (!running)
839 /* If the thread is now marked stopped, remove it from
840 the step-over queue, so that we don't try to resume
841 it until the user wants it to. */
842 if (thread_is_in_step_over_chain (tp))
843 global_thread_step_over_chain_remove (tp);
846 return started;
849 /* See gdbthread.h. */
851 void
852 thread_info::set_running (bool running)
854 if (set_running_thread (this, running))
855 gdb::observers::target_resumed.notify (this->ptid);
858 void
859 set_running (process_stratum_target *targ, ptid_t ptid, bool running)
861 /* We try not to notify the observer if no thread has actually
862 changed the running state -- merely to reduce the number of
863 messages to the MI frontend. A frontend is supposed to handle
864 multiple *running notifications just fine. */
865 bool any_started = false;
867 for (thread_info *tp : all_non_exited_threads (targ, ptid))
868 if (set_running_thread (tp, running))
869 any_started = true;
871 if (any_started)
872 gdb::observers::target_resumed.notify (ptid);
875 void
876 set_executing (process_stratum_target *targ, ptid_t ptid, bool executing)
878 for (thread_info *tp : all_non_exited_threads (targ, ptid))
879 tp->set_executing (executing);
881 /* It only takes one running thread to spawn more threads. */
882 if (executing)
883 targ->threads_executing = true;
884 /* Only clear the flag if the caller is telling us everything is
885 stopped. */
886 else if (minus_one_ptid == ptid)
887 targ->threads_executing = false;
890 /* See gdbthread.h. */
892 bool
893 threads_are_executing (process_stratum_target *target)
895 return target->threads_executing;
898 void
899 set_stop_requested (process_stratum_target *targ, ptid_t ptid, bool stop)
901 for (thread_info *tp : all_non_exited_threads (targ, ptid))
902 tp->stop_requested = stop;
904 /* Call the stop requested observer so other components of GDB can
905 react to this request. */
906 if (stop)
907 gdb::observers::thread_stop_requested.notify (ptid);
910 void
911 finish_thread_state (process_stratum_target *targ, ptid_t ptid)
913 bool any_started = false;
915 for (thread_info *tp : all_non_exited_threads (targ, ptid))
916 if (set_running_thread (tp, tp->executing ()))
917 any_started = true;
919 if (any_started)
920 gdb::observers::target_resumed.notify (ptid);
923 /* See gdbthread.h. */
925 void
926 validate_registers_access (void)
928 /* No selected thread, no registers. */
929 if (inferior_ptid == null_ptid)
930 error (_("No thread selected."));
932 thread_info *tp = inferior_thread ();
934 /* Don't try to read from a dead thread. */
935 if (tp->state == THREAD_EXITED)
936 error (_("The current thread has terminated"));
938 /* ... or from a spinning thread. FIXME: This isn't actually fully
939 correct. It'll allow an user-requested access (e.g., "print $pc"
940 at the prompt) when a thread is not executing for some internal
941 reason, but is marked running from the user's perspective. E.g.,
942 the thread is waiting for its turn in the step-over queue. */
943 if (tp->executing ())
944 error (_("Selected thread is running."));
947 /* See gdbthread.h. */
949 bool
950 can_access_registers_thread (thread_info *thread)
952 /* No thread, no registers. */
953 if (thread == NULL)
954 return false;
956 /* Don't try to read from a dead thread. */
957 if (thread->state == THREAD_EXITED)
958 return false;
960 /* ... or from a spinning thread. FIXME: see validate_registers_access. */
961 if (thread->executing ())
962 return false;
964 return true;
968 pc_in_thread_step_range (CORE_ADDR pc, struct thread_info *thread)
970 return (pc >= thread->control.step_range_start
971 && pc < thread->control.step_range_end);
974 /* Helper for print_thread_info. Returns true if THR should be
975 printed. If REQUESTED_THREADS, a list of GDB ids/ranges, is not
976 NULL, only print THR if its ID is included in the list. GLOBAL_IDS
977 is true if REQUESTED_THREADS is list of global IDs, false if a list
978 of per-inferior thread ids. If PID is not -1, only print THR if it
979 is a thread from the process PID. Otherwise, threads from all
980 attached PIDs are printed. If both REQUESTED_THREADS is not NULL
981 and PID is not -1, then the thread is printed if it belongs to the
982 specified process. Otherwise, an error is raised. */
984 static int
985 should_print_thread (const char *requested_threads, int default_inf_num,
986 int global_ids, int pid, struct thread_info *thr)
988 if (requested_threads != NULL && *requested_threads != '\0')
990 int in_list;
992 if (global_ids)
993 in_list = number_is_in_list (requested_threads, thr->global_num);
994 else
995 in_list = tid_is_in_list (requested_threads, default_inf_num,
996 thr->inf->num, thr->per_inf_num);
997 if (!in_list)
998 return 0;
1001 if (pid != -1 && thr->ptid.pid () != pid)
1003 if (requested_threads != NULL && *requested_threads != '\0')
1004 error (_("Requested thread not found in requested process"));
1005 return 0;
1008 if (thr->state == THREAD_EXITED)
1009 return 0;
1011 return 1;
1014 /* Return the string to display in "info threads"'s "Target Id"
1015 column, for TP. */
1017 static std::string
1018 thread_target_id_str (thread_info *tp)
1020 std::string target_id = target_pid_to_str (tp->ptid);
1021 const char *extra_info = target_extra_thread_info (tp);
1022 const char *name = thread_name (tp);
1024 if (extra_info != nullptr && name != nullptr)
1025 return string_printf ("%s \"%s\" (%s)", target_id.c_str (), name,
1026 extra_info);
1027 else if (extra_info != nullptr)
1028 return string_printf ("%s (%s)", target_id.c_str (), extra_info);
1029 else if (name != nullptr)
1030 return string_printf ("%s \"%s\"", target_id.c_str (), name);
1031 else
1032 return target_id;
1035 /* Like print_thread_info, but in addition, GLOBAL_IDS indicates
1036 whether REQUESTED_THREADS is a list of global or per-inferior
1037 thread ids. */
1039 static void
1040 print_thread_info_1 (struct ui_out *uiout, const char *requested_threads,
1041 int global_ids, int pid,
1042 int show_global_ids)
1044 int default_inf_num = current_inferior ()->num;
1046 update_thread_list ();
1048 /* Whether we saw any thread. */
1049 bool any_thread = false;
1050 /* Whether the current thread is exited. */
1051 bool current_exited = false;
1053 thread_info *current_thread = (inferior_ptid != null_ptid
1054 ? inferior_thread () : NULL);
1057 /* For backward compatibility, we make a list for MI. A table is
1058 preferable for the CLI, though, because it shows table
1059 headers. */
1060 gdb::optional<ui_out_emit_list> list_emitter;
1061 gdb::optional<ui_out_emit_table> table_emitter;
1063 /* We'll be switching threads temporarily below. */
1064 scoped_restore_current_thread restore_thread;
1066 if (uiout->is_mi_like_p ())
1067 list_emitter.emplace (uiout, "threads");
1068 else
1070 int n_threads = 0;
1071 /* The width of the "Target Id" column. Grown below to
1072 accommodate the largest entry. */
1073 size_t target_id_col_width = 17;
1075 for (thread_info *tp : all_threads ())
1077 if (!should_print_thread (requested_threads, default_inf_num,
1078 global_ids, pid, tp))
1079 continue;
1081 if (!uiout->is_mi_like_p ())
1083 /* Switch inferiors so we're looking at the right
1084 target stack. */
1085 switch_to_inferior_no_thread (tp->inf);
1087 target_id_col_width
1088 = std::max (target_id_col_width,
1089 thread_target_id_str (tp).size ());
1092 ++n_threads;
1095 if (n_threads == 0)
1097 if (requested_threads == NULL || *requested_threads == '\0')
1098 uiout->message (_("No threads.\n"));
1099 else
1100 uiout->message (_("No threads match '%s'.\n"),
1101 requested_threads);
1102 return;
1105 table_emitter.emplace (uiout, show_global_ids ? 5 : 4,
1106 n_threads, "threads");
1108 uiout->table_header (1, ui_left, "current", "");
1109 uiout->table_header (4, ui_left, "id-in-tg", "Id");
1110 if (show_global_ids)
1111 uiout->table_header (4, ui_left, "id", "GId");
1112 uiout->table_header (target_id_col_width, ui_left,
1113 "target-id", "Target Id");
1114 uiout->table_header (1, ui_left, "frame", "Frame");
1115 uiout->table_body ();
1118 for (inferior *inf : all_inferiors ())
1119 for (thread_info *tp : inf->threads ())
1121 int core;
1123 any_thread = true;
1124 if (tp == current_thread && tp->state == THREAD_EXITED)
1125 current_exited = true;
1127 if (!should_print_thread (requested_threads, default_inf_num,
1128 global_ids, pid, tp))
1129 continue;
1131 ui_out_emit_tuple tuple_emitter (uiout, NULL);
1133 if (!uiout->is_mi_like_p ())
1135 if (tp == current_thread)
1136 uiout->field_string ("current", "*");
1137 else
1138 uiout->field_skip ("current");
1140 uiout->field_string ("id-in-tg", print_thread_id (tp));
1143 if (show_global_ids || uiout->is_mi_like_p ())
1144 uiout->field_signed ("id", tp->global_num);
1146 /* Switch to the thread (and inferior / target). */
1147 switch_to_thread (tp);
1149 /* For the CLI, we stuff everything into the target-id field.
1150 This is a gross hack to make the output come out looking
1151 correct. The underlying problem here is that ui-out has no
1152 way to specify that a field's space allocation should be
1153 shared by several fields. For MI, we do the right thing
1154 instead. */
1156 if (uiout->is_mi_like_p ())
1158 uiout->field_string ("target-id", target_pid_to_str (tp->ptid));
1160 const char *extra_info = target_extra_thread_info (tp);
1161 if (extra_info != nullptr)
1162 uiout->field_string ("details", extra_info);
1164 const char *name = thread_name (tp);
1165 if (name != NULL)
1166 uiout->field_string ("name", name);
1168 else
1170 uiout->field_string ("target-id", thread_target_id_str (tp));
1173 if (tp->state == THREAD_RUNNING)
1174 uiout->text ("(running)\n");
1175 else
1177 /* The switch above put us at the top of the stack (leaf
1178 frame). */
1179 print_stack_frame (get_selected_frame (NULL),
1180 /* For MI output, print frame level. */
1181 uiout->is_mi_like_p (),
1182 LOCATION, 0);
1185 if (uiout->is_mi_like_p ())
1187 const char *state = "stopped";
1189 if (tp->state == THREAD_RUNNING)
1190 state = "running";
1191 uiout->field_string ("state", state);
1194 core = target_core_of_thread (tp->ptid);
1195 if (uiout->is_mi_like_p () && core != -1)
1196 uiout->field_signed ("core", core);
1199 /* This end scope restores the current thread and the frame
1200 selected before the "info threads" command, and it finishes the
1201 ui-out list or table. */
1204 if (pid == -1 && requested_threads == NULL)
1206 if (uiout->is_mi_like_p () && inferior_ptid != null_ptid)
1207 uiout->field_signed ("current-thread-id", current_thread->global_num);
1209 if (inferior_ptid != null_ptid && current_exited)
1210 uiout->message ("\n\
1211 The current thread <Thread ID %s> has terminated. See `help thread'.\n",
1212 print_thread_id (inferior_thread ()));
1213 else if (any_thread && inferior_ptid == null_ptid)
1214 uiout->message ("\n\
1215 No selected thread. See `help thread'.\n");
1219 /* See gdbthread.h. */
1221 void
1222 print_thread_info (struct ui_out *uiout, const char *requested_threads,
1223 int pid)
1225 print_thread_info_1 (uiout, requested_threads, 1, pid, 0);
1228 /* The options for the "info threads" command. */
1230 struct info_threads_opts
1232 /* For "-gid". */
1233 bool show_global_ids = false;
1236 static const gdb::option::option_def info_threads_option_defs[] = {
1238 gdb::option::flag_option_def<info_threads_opts> {
1239 "gid",
1240 [] (info_threads_opts *opts) { return &opts->show_global_ids; },
1241 N_("Show global thread IDs."),
1246 /* Create an option_def_group for the "info threads" options, with
1247 IT_OPTS as context. */
1249 static inline gdb::option::option_def_group
1250 make_info_threads_options_def_group (info_threads_opts *it_opts)
1252 return {{info_threads_option_defs}, it_opts};
1255 /* Implementation of the "info threads" command.
1257 Note: this has the drawback that it _really_ switches
1258 threads, which frees the frame cache. A no-side
1259 effects info-threads command would be nicer. */
1261 static void
1262 info_threads_command (const char *arg, int from_tty)
1264 info_threads_opts it_opts;
1266 auto grp = make_info_threads_options_def_group (&it_opts);
1267 gdb::option::process_options
1268 (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1270 print_thread_info_1 (current_uiout, arg, 0, -1, it_opts.show_global_ids);
1273 /* Completer for the "info threads" command. */
1275 static void
1276 info_threads_command_completer (struct cmd_list_element *ignore,
1277 completion_tracker &tracker,
1278 const char *text, const char *word_ignored)
1280 const auto grp = make_info_threads_options_def_group (nullptr);
1282 if (gdb::option::complete_options
1283 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1284 return;
1286 /* Convenience to let the user know what the option can accept. */
1287 if (*text == '\0')
1289 gdb::option::complete_on_all_options (tracker, grp);
1290 /* Keep this "ID" in sync with what "help info threads"
1291 says. */
1292 tracker.add_completion (make_unique_xstrdup ("ID"));
1296 /* See gdbthread.h. */
1298 void
1299 switch_to_thread_no_regs (struct thread_info *thread)
1301 struct inferior *inf = thread->inf;
1303 set_current_program_space (inf->pspace);
1304 set_current_inferior (inf);
1306 current_thread_ = thread;
1307 inferior_ptid = current_thread_->ptid;
1310 /* See gdbthread.h. */
1312 void
1313 switch_to_no_thread ()
1315 if (current_thread_ == nullptr)
1316 return;
1318 current_thread_ = nullptr;
1319 inferior_ptid = null_ptid;
1320 reinit_frame_cache ();
1323 /* See gdbthread.h. */
1325 void
1326 switch_to_thread (thread_info *thr)
1328 gdb_assert (thr != NULL);
1330 if (is_current_thread (thr))
1331 return;
1333 switch_to_thread_no_regs (thr);
1335 reinit_frame_cache ();
1338 /* See gdbsupport/common-gdbthread.h. */
1340 void
1341 switch_to_thread (process_stratum_target *proc_target, ptid_t ptid)
1343 thread_info *thr = find_thread_ptid (proc_target, ptid);
1344 switch_to_thread (thr);
1347 /* See frame.h. */
1349 void
1350 scoped_restore_current_thread::restore ()
1352 /* If an entry of thread_info was previously selected, it won't be
1353 deleted because we've increased its refcount. The thread represented
1354 by this thread_info entry may have already exited (due to normal exit,
1355 detach, etc), so the thread_info.state is THREAD_EXITED. */
1356 if (m_thread != NULL
1357 /* If the previously selected thread belonged to a process that has
1358 in the mean time exited (or killed, detached, etc.), then don't revert
1359 back to it, but instead simply drop back to no thread selected. */
1360 && m_inf->pid != 0)
1361 switch_to_thread (m_thread.get ());
1362 else
1363 switch_to_inferior_no_thread (m_inf.get ());
1365 /* The running state of the originally selected thread may have
1366 changed, so we have to recheck it here. */
1367 if (inferior_ptid != null_ptid
1368 && m_was_stopped
1369 && m_thread->state == THREAD_STOPPED
1370 && target_has_registers ()
1371 && target_has_stack ()
1372 && target_has_memory ())
1373 restore_selected_frame (m_selected_frame_id, m_selected_frame_level);
1375 set_language (m_lang);
1378 scoped_restore_current_thread::~scoped_restore_current_thread ()
1380 if (!m_dont_restore)
1381 restore ();
1384 scoped_restore_current_thread::scoped_restore_current_thread ()
1386 m_inf = inferior_ref::new_reference (current_inferior ());
1388 m_lang = current_language->la_language;
1390 if (inferior_ptid != null_ptid)
1392 m_thread = thread_info_ref::new_reference (inferior_thread ());
1394 m_was_stopped = m_thread->state == THREAD_STOPPED;
1395 save_selected_frame (&m_selected_frame_id, &m_selected_frame_level);
1399 /* See gdbthread.h. */
1402 show_thread_that_caused_stop (void)
1404 return highest_thread_num > 1;
1407 /* See gdbthread.h. */
1410 show_inferior_qualified_tids (void)
1412 auto inf = inferior_list.begin ();
1413 if (inf->num != 1)
1414 return true;
1415 ++inf;
1416 return inf != inferior_list.end ();
1419 /* See gdbthread.h. */
1421 const char *
1422 print_thread_id (struct thread_info *thr)
1424 char *s = get_print_cell ();
1426 if (show_inferior_qualified_tids ())
1427 xsnprintf (s, PRINT_CELL_SIZE, "%d.%d", thr->inf->num, thr->per_inf_num);
1428 else
1429 xsnprintf (s, PRINT_CELL_SIZE, "%d", thr->per_inf_num);
1430 return s;
1433 /* Sort an array of struct thread_info pointers by thread ID (first by
1434 inferior number, and then by per-inferior thread number). Sorts in
1435 ascending order. */
1437 static bool
1438 tp_array_compar_ascending (const thread_info_ref &a, const thread_info_ref &b)
1440 if (a->inf->num != b->inf->num)
1441 return a->inf->num < b->inf->num;
1443 return (a->per_inf_num < b->per_inf_num);
1446 /* Sort an array of struct thread_info pointers by thread ID (first by
1447 inferior number, and then by per-inferior thread number). Sorts in
1448 descending order. */
1450 static bool
1451 tp_array_compar_descending (const thread_info_ref &a, const thread_info_ref &b)
1453 if (a->inf->num != b->inf->num)
1454 return a->inf->num > b->inf->num;
1456 return (a->per_inf_num > b->per_inf_num);
1459 /* See gdbthread.h. */
1461 void
1462 thread_try_catch_cmd (thread_info *thr, gdb::optional<int> ada_task,
1463 const char *cmd, int from_tty,
1464 const qcs_flags &flags)
1466 gdb_assert (is_current_thread (thr));
1468 /* The thread header is computed before running the command since
1469 the command can change the inferior, which is not permitted
1470 by thread_target_id_str. */
1471 std::string thr_header;
1472 if (ada_task.has_value ())
1473 thr_header = string_printf (_("\nTask ID %d:\n"), *ada_task);
1474 else
1475 thr_header = string_printf (_("\nThread %s (%s):\n"),
1476 print_thread_id (thr),
1477 thread_target_id_str (thr).c_str ());
1481 std::string cmd_result;
1482 execute_command_to_string
1483 (cmd_result, cmd, from_tty, gdb_stdout->term_out ());
1484 if (!flags.silent || cmd_result.length () > 0)
1486 if (!flags.quiet)
1487 gdb_printf ("%s", thr_header.c_str ());
1488 gdb_printf ("%s", cmd_result.c_str ());
1491 catch (const gdb_exception_error &ex)
1493 if (!flags.silent)
1495 if (!flags.quiet)
1496 gdb_printf ("%s", thr_header.c_str ());
1497 if (flags.cont)
1498 gdb_printf ("%s\n", ex.what ());
1499 else
1500 throw;
1505 /* Option definition of "thread apply"'s "-ascending" option. */
1507 static const gdb::option::flag_option_def<> ascending_option_def = {
1508 "ascending",
1509 N_("\
1510 Call COMMAND for all threads in ascending order.\n\
1511 The default is descending order."),
1514 /* The qcs command line flags for the "thread apply" commands. Keep
1515 this in sync with the "frame apply" commands. */
1517 using qcs_flag_option_def
1518 = gdb::option::flag_option_def<qcs_flags>;
1520 static const gdb::option::option_def thr_qcs_flags_option_defs[] = {
1521 qcs_flag_option_def {
1522 "q", [] (qcs_flags *opt) { return &opt->quiet; },
1523 N_("Disables printing the thread information."),
1526 qcs_flag_option_def {
1527 "c", [] (qcs_flags *opt) { return &opt->cont; },
1528 N_("Print any error raised by COMMAND and continue."),
1531 qcs_flag_option_def {
1532 "s", [] (qcs_flags *opt) { return &opt->silent; },
1533 N_("Silently ignore any errors or empty output produced by COMMAND."),
1537 /* Create an option_def_group for the "thread apply all" options, with
1538 ASCENDING and FLAGS as context. */
1540 static inline std::array<gdb::option::option_def_group, 2>
1541 make_thread_apply_all_options_def_group (bool *ascending,
1542 qcs_flags *flags)
1544 return {{
1545 { {ascending_option_def.def ()}, ascending},
1546 { {thr_qcs_flags_option_defs}, flags },
1550 /* Create an option_def_group for the "thread apply" options, with
1551 FLAGS as context. */
1553 static inline gdb::option::option_def_group
1554 make_thread_apply_options_def_group (qcs_flags *flags)
1556 return {{thr_qcs_flags_option_defs}, flags};
1559 /* Apply a GDB command to a list of threads. List syntax is a whitespace
1560 separated list of numbers, or ranges, or the keyword `all'. Ranges consist
1561 of two numbers separated by a hyphen. Examples:
1563 thread apply 1 2 7 4 backtrace Apply backtrace cmd to threads 1,2,7,4
1564 thread apply 2-7 9 p foo(1) Apply p foo(1) cmd to threads 2->7 & 9
1565 thread apply all x/i $pc Apply x/i $pc cmd to all threads. */
1567 static void
1568 thread_apply_all_command (const char *cmd, int from_tty)
1570 bool ascending = false;
1571 qcs_flags flags;
1573 auto group = make_thread_apply_all_options_def_group (&ascending,
1574 &flags);
1575 gdb::option::process_options
1576 (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
1578 validate_flags_qcs ("thread apply all", &flags);
1580 if (cmd == NULL || *cmd == '\000')
1581 error (_("Please specify a command at the end of 'thread apply all'"));
1583 update_thread_list ();
1585 int tc = live_threads_count ();
1586 if (tc != 0)
1588 /* Save a copy of the thread list and increment each thread's
1589 refcount while executing the command in the context of each
1590 thread, in case the command is one that wipes threads. E.g.,
1591 detach, kill, disconnect, etc., or even normally continuing
1592 over an inferior or thread exit. */
1593 std::vector<thread_info_ref> thr_list_cpy;
1594 thr_list_cpy.reserve (tc);
1596 for (thread_info *tp : all_non_exited_threads ())
1597 thr_list_cpy.push_back (thread_info_ref::new_reference (tp));
1598 gdb_assert (thr_list_cpy.size () == tc);
1600 auto *sorter = (ascending
1601 ? tp_array_compar_ascending
1602 : tp_array_compar_descending);
1603 std::sort (thr_list_cpy.begin (), thr_list_cpy.end (), sorter);
1605 scoped_restore_current_thread restore_thread;
1607 for (thread_info_ref &thr : thr_list_cpy)
1608 if (switch_to_thread_if_alive (thr.get ()))
1609 thread_try_catch_cmd (thr.get (), {}, cmd, from_tty, flags);
1613 /* Completer for "thread apply [ID list]". */
1615 static void
1616 thread_apply_command_completer (cmd_list_element *ignore,
1617 completion_tracker &tracker,
1618 const char *text, const char * /*word*/)
1620 /* Don't leave this to complete_options because there's an early
1621 return below. */
1622 tracker.set_use_custom_word_point (true);
1624 tid_range_parser parser;
1625 parser.init (text, current_inferior ()->num);
1629 while (!parser.finished ())
1631 int inf_num, thr_start, thr_end;
1633 if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
1634 break;
1636 if (parser.in_star_range () || parser.in_thread_range ())
1637 parser.skip_range ();
1640 catch (const gdb_exception_error &ex)
1642 /* get_tid_range throws if it parses a negative number, for
1643 example. But a seemingly negative number may be the start of
1644 an option instead. */
1647 const char *cmd = parser.cur_tok ();
1649 if (cmd == text)
1651 /* No thread ID list yet. */
1652 return;
1655 /* Check if we're past a valid thread ID list already. */
1656 if (parser.finished ()
1657 && cmd > text && !isspace (cmd[-1]))
1658 return;
1660 /* We're past the thread ID list, advance word point. */
1661 tracker.advance_custom_word_point_by (cmd - text);
1662 text = cmd;
1664 const auto group = make_thread_apply_options_def_group (nullptr);
1665 if (gdb::option::complete_options
1666 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
1667 return;
1669 complete_nested_command_line (tracker, text);
1672 /* Completer for "thread apply all". */
1674 static void
1675 thread_apply_all_command_completer (cmd_list_element *ignore,
1676 completion_tracker &tracker,
1677 const char *text, const char *word)
1679 const auto group = make_thread_apply_all_options_def_group (nullptr,
1680 nullptr);
1681 if (gdb::option::complete_options
1682 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
1683 return;
1685 complete_nested_command_line (tracker, text);
1688 /* Implementation of the "thread apply" command. */
1690 static void
1691 thread_apply_command (const char *tidlist, int from_tty)
1693 qcs_flags flags;
1694 const char *cmd = NULL;
1695 tid_range_parser parser;
1697 if (tidlist == NULL || *tidlist == '\000')
1698 error (_("Please specify a thread ID list"));
1700 parser.init (tidlist, current_inferior ()->num);
1701 while (!parser.finished ())
1703 int inf_num, thr_start, thr_end;
1705 if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
1706 break;
1709 cmd = parser.cur_tok ();
1711 auto group = make_thread_apply_options_def_group (&flags);
1712 gdb::option::process_options
1713 (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
1715 validate_flags_qcs ("thread apply", &flags);
1717 if (*cmd == '\0')
1718 error (_("Please specify a command following the thread ID list"));
1720 if (tidlist == cmd || isdigit (cmd[0]))
1721 invalid_thread_id_error (cmd);
1723 scoped_restore_current_thread restore_thread;
1725 parser.init (tidlist, current_inferior ()->num);
1726 while (!parser.finished ())
1728 struct thread_info *tp = NULL;
1729 struct inferior *inf;
1730 int inf_num, thr_num;
1732 parser.get_tid (&inf_num, &thr_num);
1733 inf = find_inferior_id (inf_num);
1734 if (inf != NULL)
1735 tp = find_thread_id (inf, thr_num);
1737 if (parser.in_star_range ())
1739 if (inf == NULL)
1741 warning (_("Unknown inferior %d"), inf_num);
1742 parser.skip_range ();
1743 continue;
1746 /* No use looking for threads past the highest thread number
1747 the inferior ever had. */
1748 if (thr_num >= inf->highest_thread_num)
1749 parser.skip_range ();
1751 /* Be quiet about unknown threads numbers. */
1752 if (tp == NULL)
1753 continue;
1756 if (tp == NULL)
1758 if (show_inferior_qualified_tids () || parser.tid_is_qualified ())
1759 warning (_("Unknown thread %d.%d"), inf_num, thr_num);
1760 else
1761 warning (_("Unknown thread %d"), thr_num);
1762 continue;
1765 if (!switch_to_thread_if_alive (tp))
1767 warning (_("Thread %s has terminated."), print_thread_id (tp));
1768 continue;
1771 thread_try_catch_cmd (tp, {}, cmd, from_tty, flags);
1776 /* Implementation of the "taas" command. */
1778 static void
1779 taas_command (const char *cmd, int from_tty)
1781 if (cmd == NULL || *cmd == '\0')
1782 error (_("Please specify a command to apply on all threads"));
1783 std::string expanded = std::string ("thread apply all -s ") + cmd;
1784 execute_command (expanded.c_str (), from_tty);
1787 /* Implementation of the "tfaas" command. */
1789 static void
1790 tfaas_command (const char *cmd, int from_tty)
1792 if (cmd == NULL || *cmd == '\0')
1793 error (_("Please specify a command to apply on all frames of all threads"));
1794 std::string expanded
1795 = std::string ("thread apply all -s -- frame apply all -s ") + cmd;
1796 execute_command (expanded.c_str (), from_tty);
1799 /* Switch to the specified thread, or print the current thread. */
1801 void
1802 thread_command (const char *tidstr, int from_tty)
1804 if (tidstr == NULL)
1806 if (inferior_ptid == null_ptid)
1807 error (_("No thread selected"));
1809 if (target_has_stack ())
1811 struct thread_info *tp = inferior_thread ();
1813 if (tp->state == THREAD_EXITED)
1814 gdb_printf (_("[Current thread is %s (%s) (exited)]\n"),
1815 print_thread_id (tp),
1816 target_pid_to_str (inferior_ptid).c_str ());
1817 else
1818 gdb_printf (_("[Current thread is %s (%s)]\n"),
1819 print_thread_id (tp),
1820 target_pid_to_str (inferior_ptid).c_str ());
1822 else
1823 error (_("No stack."));
1825 else
1827 ptid_t previous_ptid = inferior_ptid;
1829 thread_select (tidstr, parse_thread_id (tidstr, NULL));
1831 /* Print if the thread has not changed, otherwise an event will
1832 be sent. */
1833 if (inferior_ptid == previous_ptid)
1835 print_selected_thread_frame (current_uiout,
1836 USER_SELECTED_THREAD
1837 | USER_SELECTED_FRAME);
1839 else
1841 gdb::observers::user_selected_context_changed.notify
1842 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1847 /* Implementation of `thread name'. */
1849 static void
1850 thread_name_command (const char *arg, int from_tty)
1852 struct thread_info *info;
1854 if (inferior_ptid == null_ptid)
1855 error (_("No thread selected"));
1857 arg = skip_spaces (arg);
1859 info = inferior_thread ();
1860 info->set_name (arg != nullptr ? make_unique_xstrdup (arg) : nullptr);
1863 /* Find thread ids with a name, target pid, or extra info matching ARG. */
1865 static void
1866 thread_find_command (const char *arg, int from_tty)
1868 const char *tmp;
1869 unsigned long match = 0;
1871 if (arg == NULL || *arg == '\0')
1872 error (_("Command requires an argument."));
1874 tmp = re_comp (arg);
1875 if (tmp != 0)
1876 error (_("Invalid regexp (%s): %s"), tmp, arg);
1878 /* We're going to be switching threads. */
1879 scoped_restore_current_thread restore_thread;
1881 update_thread_list ();
1883 for (thread_info *tp : all_threads ())
1885 switch_to_inferior_no_thread (tp->inf);
1887 if (tp->name () != nullptr && re_exec (tp->name ()))
1889 gdb_printf (_("Thread %s has name '%s'\n"),
1890 print_thread_id (tp), tp->name ());
1891 match++;
1894 tmp = target_thread_name (tp);
1895 if (tmp != NULL && re_exec (tmp))
1897 gdb_printf (_("Thread %s has target name '%s'\n"),
1898 print_thread_id (tp), tmp);
1899 match++;
1902 std::string name = target_pid_to_str (tp->ptid);
1903 if (!name.empty () && re_exec (name.c_str ()))
1905 gdb_printf (_("Thread %s has target id '%s'\n"),
1906 print_thread_id (tp), name.c_str ());
1907 match++;
1910 tmp = target_extra_thread_info (tp);
1911 if (tmp != NULL && re_exec (tmp))
1913 gdb_printf (_("Thread %s has extra info '%s'\n"),
1914 print_thread_id (tp), tmp);
1915 match++;
1918 if (!match)
1919 gdb_printf (_("No threads match '%s'\n"), arg);
1922 /* Print notices when new threads are attached and detached. */
1923 bool print_thread_events = true;
1924 static void
1925 show_print_thread_events (struct ui_file *file, int from_tty,
1926 struct cmd_list_element *c, const char *value)
1928 gdb_printf (file,
1929 _("Printing of thread events is %s.\n"),
1930 value);
1933 /* See gdbthread.h. */
1935 void
1936 thread_select (const char *tidstr, thread_info *tp)
1938 if (!switch_to_thread_if_alive (tp))
1939 error (_("Thread ID %s has terminated."), tidstr);
1941 annotate_thread_changed ();
1943 /* Since the current thread may have changed, see if there is any
1944 exited thread we can now delete. */
1945 delete_exited_threads ();
1948 /* Print thread and frame switch command response. */
1950 void
1951 print_selected_thread_frame (struct ui_out *uiout,
1952 user_selected_what selection)
1954 struct thread_info *tp = inferior_thread ();
1956 if (selection & USER_SELECTED_THREAD)
1958 if (uiout->is_mi_like_p ())
1960 uiout->field_signed ("new-thread-id",
1961 inferior_thread ()->global_num);
1963 else
1965 uiout->text ("[Switching to thread ");
1966 uiout->field_string ("new-thread-id", print_thread_id (tp));
1967 uiout->text (" (");
1968 uiout->text (target_pid_to_str (inferior_ptid));
1969 uiout->text (")]");
1973 if (tp->state == THREAD_RUNNING)
1975 if (selection & USER_SELECTED_THREAD)
1976 uiout->text ("(running)\n");
1978 else if (selection & USER_SELECTED_FRAME)
1980 if (selection & USER_SELECTED_THREAD)
1981 uiout->text ("\n");
1983 if (has_stack_frames ())
1984 print_stack_frame_to_uiout (uiout, get_selected_frame (NULL),
1985 1, SRC_AND_LOC, 1);
1989 /* Update the 'threads_executing' global based on the threads we know
1990 about right now. This is used by infrun to tell whether we should
1991 pull events out of the current target. */
1993 static void
1994 update_threads_executing (void)
1996 process_stratum_target *targ = current_inferior ()->process_target ();
1998 if (targ == NULL)
1999 return;
2001 targ->threads_executing = false;
2003 for (inferior *inf : all_non_exited_inferiors (targ))
2005 if (!inf->has_execution ())
2006 continue;
2008 /* If the process has no threads, then it must be we have a
2009 process-exit event pending. */
2010 if (inf->thread_list.empty ())
2012 targ->threads_executing = true;
2013 return;
2016 for (thread_info *tp : inf->non_exited_threads ())
2018 if (tp->executing ())
2020 targ->threads_executing = true;
2021 return;
2027 void
2028 update_thread_list (void)
2030 target_update_thread_list ();
2031 update_threads_executing ();
2034 /* See gdbthread.h. */
2036 const char *
2037 thread_name (thread_info *thread)
2039 /* Use the manually set name if there is one. */
2040 const char *name = thread->name ();
2041 if (name != nullptr)
2042 return name;
2044 /* Otherwise, ask the target. Ensure we query the right target stack. */
2045 scoped_restore_current_thread restore_thread;
2046 if (thread->inf != current_inferior ())
2047 switch_to_inferior_no_thread (thread->inf);
2049 return target_thread_name (thread);
2052 /* See gdbthread.h. */
2054 const char *
2055 thread_state_string (enum thread_state state)
2057 switch (state)
2059 case THREAD_STOPPED:
2060 return "STOPPED";
2062 case THREAD_RUNNING:
2063 return "RUNNING";
2065 case THREAD_EXITED:
2066 return "EXITED";
2069 gdb_assert_not_reached ("unknown thread state");
2072 /* Return a new value for the selected thread's id. Return a value of
2073 0 if no thread is selected. If GLOBAL is true, return the thread's
2074 global number. Otherwise return the per-inferior number. */
2076 static struct value *
2077 thread_num_make_value_helper (struct gdbarch *gdbarch, int global)
2079 int int_val;
2081 if (inferior_ptid == null_ptid)
2082 int_val = 0;
2083 else
2085 thread_info *tp = inferior_thread ();
2086 if (global)
2087 int_val = tp->global_num;
2088 else
2089 int_val = tp->per_inf_num;
2092 return value_from_longest (builtin_type (gdbarch)->builtin_int, int_val);
2095 /* Return a new value for the selected thread's per-inferior thread
2096 number. Return a value of 0 if no thread is selected, or no
2097 threads exist. */
2099 static struct value *
2100 thread_id_per_inf_num_make_value (struct gdbarch *gdbarch,
2101 struct internalvar *var,
2102 void *ignore)
2104 return thread_num_make_value_helper (gdbarch, 0);
2107 /* Return a new value for the selected thread's global id. Return a
2108 value of 0 if no thread is selected, or no threads exist. */
2110 static struct value *
2111 global_thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
2112 void *ignore)
2114 return thread_num_make_value_helper (gdbarch, 1);
2117 /* Commands with a prefix of `thread'. */
2118 struct cmd_list_element *thread_cmd_list = NULL;
2120 /* Implementation of `thread' variable. */
2122 static const struct internalvar_funcs thread_funcs =
2124 thread_id_per_inf_num_make_value,
2125 NULL,
2128 /* Implementation of `gthread' variable. */
2130 static const struct internalvar_funcs gthread_funcs =
2132 global_thread_id_make_value,
2133 NULL,
2136 void _initialize_thread ();
2137 void
2138 _initialize_thread ()
2140 static struct cmd_list_element *thread_apply_list = NULL;
2141 cmd_list_element *c;
2143 const auto info_threads_opts = make_info_threads_options_def_group (nullptr);
2145 /* Note: keep this "ID" in sync with what "info threads [TAB]"
2146 suggests. */
2147 static std::string info_threads_help
2148 = gdb::option::build_help (_("\
2149 Display currently known threads.\n\
2150 Usage: info threads [OPTION]... [ID]...\n\
2151 If ID is given, it is a space-separated list of IDs of threads to display.\n\
2152 Otherwise, all threads are displayed.\n\
2154 Options:\n\
2155 %OPTIONS%"),
2156 info_threads_opts);
2158 c = add_info ("threads", info_threads_command, info_threads_help.c_str ());
2159 set_cmd_completer_handle_brkchars (c, info_threads_command_completer);
2161 cmd_list_element *thread_cmd
2162 = add_prefix_cmd ("thread", class_run, thread_command, _("\
2163 Use this command to switch between threads.\n\
2164 The new thread ID must be currently known."),
2165 &thread_cmd_list, 1, &cmdlist);
2167 add_com_alias ("t", thread_cmd, class_run, 1);
2169 #define THREAD_APPLY_OPTION_HELP "\
2170 Prints per-inferior thread number and target system's thread id\n\
2171 followed by COMMAND output.\n\
2173 By default, an error raised during the execution of COMMAND\n\
2174 aborts \"thread apply\".\n\
2176 Options:\n\
2177 %OPTIONS%"
2179 const auto thread_apply_opts = make_thread_apply_options_def_group (nullptr);
2181 static std::string thread_apply_help = gdb::option::build_help (_("\
2182 Apply a command to a list of threads.\n\
2183 Usage: thread apply ID... [OPTION]... COMMAND\n\
2184 ID is a space-separated list of IDs of threads to apply COMMAND on.\n"
2185 THREAD_APPLY_OPTION_HELP),
2186 thread_apply_opts);
2188 c = add_prefix_cmd ("apply", class_run, thread_apply_command,
2189 thread_apply_help.c_str (),
2190 &thread_apply_list, 1,
2191 &thread_cmd_list);
2192 set_cmd_completer_handle_brkchars (c, thread_apply_command_completer);
2194 const auto thread_apply_all_opts
2195 = make_thread_apply_all_options_def_group (nullptr, nullptr);
2197 static std::string thread_apply_all_help = gdb::option::build_help (_("\
2198 Apply a command to all threads.\n\
2200 Usage: thread apply all [OPTION]... COMMAND\n"
2201 THREAD_APPLY_OPTION_HELP),
2202 thread_apply_all_opts);
2204 c = add_cmd ("all", class_run, thread_apply_all_command,
2205 thread_apply_all_help.c_str (),
2206 &thread_apply_list);
2207 set_cmd_completer_handle_brkchars (c, thread_apply_all_command_completer);
2209 c = add_com ("taas", class_run, taas_command, _("\
2210 Apply a command to all threads (ignoring errors and empty output).\n\
2211 Usage: taas [OPTION]... COMMAND\n\
2212 shortcut for 'thread apply all -s [OPTION]... COMMAND'\n\
2213 See \"help thread apply all\" for available options."));
2214 set_cmd_completer_handle_brkchars (c, thread_apply_all_command_completer);
2216 c = add_com ("tfaas", class_run, tfaas_command, _("\
2217 Apply a command to all frames of all threads (ignoring errors and empty output).\n\
2218 Usage: tfaas [OPTION]... COMMAND\n\
2219 shortcut for 'thread apply all -s -- frame apply all -s [OPTION]... COMMAND'\n\
2220 See \"help frame apply all\" for available options."));
2221 set_cmd_completer_handle_brkchars (c, frame_apply_all_cmd_completer);
2223 add_cmd ("name", class_run, thread_name_command,
2224 _("Set the current thread's name.\n\
2225 Usage: thread name [NAME]\n\
2226 If NAME is not given, then any existing name is removed."), &thread_cmd_list);
2228 add_cmd ("find", class_run, thread_find_command, _("\
2229 Find threads that match a regular expression.\n\
2230 Usage: thread find REGEXP\n\
2231 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
2232 &thread_cmd_list);
2234 add_setshow_boolean_cmd ("thread-events", no_class,
2235 &print_thread_events, _("\
2236 Set printing of thread events (such as thread start and exit)."), _("\
2237 Show printing of thread events (such as thread start and exit)."), NULL,
2238 NULL,
2239 show_print_thread_events,
2240 &setprintlist, &showprintlist);
2242 add_setshow_boolean_cmd ("threads", class_maintenance, &debug_threads, _("\
2243 Set thread debugging."), _("\
2244 Show thread debugging."), _("\
2245 When on messages about thread creation and deletion are printed."),
2246 nullptr,
2247 show_debug_threads,
2248 &setdebuglist, &showdebuglist);
2250 create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
2251 create_internalvar_type_lazy ("_gthread", &gthread_funcs, NULL);