xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/thread.c (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1 /* Multi-process/thread control for GDB, the GNU debugger.
2 
3    Copyright (C) 1986-2023 Free Software Foundation, Inc.
4 
5    Contributed by Lynx Real-Time Systems, Inc.  Los Gatos, CA.
6 
7    This file is part of GDB.
8 
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.
13 
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.
18 
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/>.  */
21 
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"
34 
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"
51 
52 /* See gdbthread.h.  */
53 
54 bool debug_threads = false;
55 
56 /* Implement 'show debug threads'.  */
57 
58 static void
59 show_debug_threads (struct ui_file *file, int from_tty,
60 		    struct cmd_list_element *c, const char *value)
61 {
62   gdb_printf (file, _("Thread debugging is \"%s\".\n"), value);
63 }
64 
65 /* Definition of struct thread_info exported to gdbthread.h.  */
66 
67 /* Prototypes for local functions.  */
68 
69 static int highest_thread_num;
70 
71 /* The current/selected thread.  */
72 static thread_info *current_thread_;
73 
74 /* Returns true if THR is the current thread.  */
75 
76 static bool
77 is_current_thread (const thread_info *thr)
78 {
79   return thr == current_thread_;
80 }
81 
82 struct thread_info*
83 inferior_thread (void)
84 {
85   gdb_assert (current_thread_ != nullptr);
86   return current_thread_;
87 }
88 
89 /* Delete the breakpoint pointed at by BP_P, if there's one.  */
90 
91 static void
92 delete_thread_breakpoint (struct breakpoint **bp_p)
93 {
94   if (*bp_p != NULL)
95     {
96       delete_breakpoint (*bp_p);
97       *bp_p = NULL;
98     }
99 }
100 
101 void
102 delete_step_resume_breakpoint (struct thread_info *tp)
103 {
104   if (tp != NULL)
105     delete_thread_breakpoint (&tp->control.step_resume_breakpoint);
106 }
107 
108 void
109 delete_exception_resume_breakpoint (struct thread_info *tp)
110 {
111   if (tp != NULL)
112     delete_thread_breakpoint (&tp->control.exception_resume_breakpoint);
113 }
114 
115 /* See gdbthread.h.  */
116 
117 void
118 delete_single_step_breakpoints (struct thread_info *tp)
119 {
120   if (tp != NULL)
121     delete_thread_breakpoint (&tp->control.single_step_breakpoints);
122 }
123 
124 /* Delete the breakpoint pointed at by BP_P at the next stop, if
125    there's one.  */
126 
127 static void
128 delete_at_next_stop (struct breakpoint **bp)
129 {
130   if (*bp != NULL)
131     {
132       (*bp)->disposition = disp_del_at_next_stop;
133       *bp = NULL;
134     }
135 }
136 
137 /* See gdbthread.h.  */
138 
139 int
140 thread_has_single_step_breakpoints_set (struct thread_info *tp)
141 {
142   return tp->control.single_step_breakpoints != NULL;
143 }
144 
145 /* See gdbthread.h.  */
146 
147 int
148 thread_has_single_step_breakpoint_here (struct thread_info *tp,
149 					const address_space *aspace,
150 					CORE_ADDR addr)
151 {
152   struct breakpoint *ss_bps = tp->control.single_step_breakpoints;
153 
154   return (ss_bps != NULL
155 	  && breakpoint_has_location_inserted_here (ss_bps, aspace, addr));
156 }
157 
158 /* See gdbthread.h.  */
159 
160 void
161 thread_cancel_execution_command (struct thread_info *thr)
162 {
163   if (thr->thread_fsm () != nullptr)
164     {
165       std::unique_ptr<thread_fsm> fsm = thr->release_thread_fsm ();
166       fsm->clean_up (thr);
167     }
168 }
169 
170 static void
171 clear_thread_inferior_resources (struct thread_info *tp)
172 {
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);
180 
181   delete_longjmp_breakpoint_at_next_stop (tp->global_num);
182 
183   bpstat_clear (&tp->control.stop_bpstat);
184 
185   btrace_teardown (tp);
186 
187   thread_cancel_execution_command (tp);
188 
189   clear_inline_frame_state (tp);
190 }
191 
192 /* See gdbthread.h.  */
193 
194 void
195 set_thread_exited (thread_info *tp, bool silent)
196 {
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);
200 
201   if (tp->state != THREAD_EXITED)
202     {
203       process_stratum_target *proc_target = tp->inf->process_target ();
204 
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.
209 
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);
213 
214       gdb::observers::thread_exit.notify (tp, silent);
215 
216       /* Tag it as exited.  */
217       tp->state = THREAD_EXITED;
218 
219       /* Clear breakpoints, etc. associated with this thread.  */
220       clear_thread_inferior_resources (tp);
221 
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);
229     }
230 }
231 
232 void
233 init_thread_list (void)
234 {
235   highest_thread_num = 0;
236 
237   for (inferior *inf : all_inferiors ())
238     inf->clear_thread_list (true);
239 }
240 
241 /* Allocate a new thread of inferior INF with target id PTID and add
242    it to the thread list.  */
243 
244 static struct thread_info *
245 new_thread (struct inferior *inf, ptid_t ptid)
246 {
247   thread_info *tp = new thread_info (inf, ptid);
248 
249   threads_debug_printf ("creating a new thread object, inferior %d, ptid %s",
250 			inf->num, ptid.to_string ().c_str ());
251 
252   inf->thread_list.push_back (*tp);
253 
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 ());
256 
257   inf->ptid_thread_map[ptid] = tp;
258 
259   return tp;
260 }
261 
262 struct thread_info *
263 add_thread_silent (process_stratum_target *targ, ptid_t ptid)
264 {
265   gdb_assert (targ != nullptr);
266 
267   inferior *inf = find_inferior_ptid (targ, ptid);
268 
269   threads_debug_printf ("add thread to inferior %d, ptid %s, target %s",
270 			inf->num, ptid.to_string ().c_str (),
271 			targ->shortname ());
272 
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);
280 
281   tp = new_thread (inf, ptid);
282   gdb::observers::new_thread.notify (tp);
283 
284   return tp;
285 }
286 
287 struct thread_info *
288 add_thread_with_info (process_stratum_target *targ, ptid_t ptid,
289 		      private_thread_info *priv)
290 {
291   thread_info *result = add_thread_silent (targ, ptid);
292 
293   result->priv.reset (priv);
294 
295   if (print_thread_events)
296     gdb_printf (_("[New %s]\n"), target_pid_to_str (ptid).c_str ());
297 
298   annotate_new_thread ();
299   return result;
300 }
301 
302 struct thread_info *
303 add_thread (process_stratum_target *targ, ptid_t ptid)
304 {
305   return add_thread_with_info (targ, ptid, NULL);
306 }
307 
308 private_thread_info::~private_thread_info () = default;
309 
310 thread_info::thread_info (struct inferior *inf_, ptid_t ptid_)
311   : ptid (ptid_), inf (inf_)
312 {
313   gdb_assert (inf_ != NULL);
314 
315   this->global_num = ++highest_thread_num;
316   this->per_inf_num = ++inf_->highest_thread_num;
317 
318   /* Nothing to follow yet.  */
319   this->pending_follow.set_spurious ();
320 }
321 
322 /* See gdbthread.h.  */
323 
324 thread_info::~thread_info ()
325 {
326   threads_debug_printf ("thread %s", this->ptid.to_string ().c_str ());
327 }
328 
329 /* See gdbthread.h.  */
330 
331 bool
332 thread_info::deletable () const
333 {
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);
337 }
338 
339 /* See gdbthread.h.  */
340 
341 void
342 thread_info::set_executing (bool executing)
343 {
344   m_executing = executing;
345   if (executing)
346     this->clear_stop_pc ();
347 }
348 
349 /* See gdbthread.h.  */
350 
351 void
352 thread_info::set_resumed (bool resumed)
353 {
354   if (resumed == m_resumed)
355     return;
356 
357   process_stratum_target *proc_target = this->inf->process_target ();
358 
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);
363 
364   m_resumed = resumed;
365 
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);
370 }
371 
372 /* See gdbthread.h.  */
373 
374 void
375 thread_info::set_pending_waitstatus (const target_waitstatus &ws)
376 {
377   gdb_assert (!this->has_pending_waitstatus ());
378 
379   m_suspend.waitstatus = ws;
380   m_suspend.waitstatus_pending_p = 1;
381 
382   process_stratum_target *proc_target = this->inf->process_target ();
383   proc_target->maybe_add_resumed_with_pending_wait_status (this);
384 }
385 
386 /* See gdbthread.h.  */
387 
388 void
389 thread_info::clear_pending_waitstatus ()
390 {
391   gdb_assert (this->has_pending_waitstatus ());
392 
393   process_stratum_target *proc_target = this->inf->process_target ();
394   proc_target->maybe_remove_resumed_with_pending_wait_status (this);
395 
396   m_suspend.waitstatus_pending_p = 0;
397 }
398 
399 /* See gdbthread.h.  */
400 
401 int
402 thread_is_in_step_over_chain (struct thread_info *tp)
403 {
404   return tp->step_over_list_node.is_linked ();
405 }
406 
407 /* See gdbthread.h.  */
408 
409 int
410 thread_step_over_chain_length (const thread_step_over_list &l)
411 {
412   int num = 0;
413 
414   for (const thread_info &thread ATTRIBUTE_UNUSED : l)
415     ++num;
416 
417   return num;
418 }
419 
420 /* See gdbthread.h.  */
421 
422 void
423 global_thread_step_over_chain_enqueue (struct thread_info *tp)
424 {
425   infrun_debug_printf ("enqueueing thread %s in global step over chain",
426 		       tp->ptid.to_string ().c_str ());
427 
428   gdb_assert (!thread_is_in_step_over_chain (tp));
429   global_thread_step_over_list.push_back (*tp);
430 }
431 
432 /* See gdbthread.h.  */
433 
434 void
435 global_thread_step_over_chain_enqueue_chain (thread_step_over_list &&list)
436 {
437   global_thread_step_over_list.splice (std::move (list));
438 }
439 
440 /* See gdbthread.h.  */
441 
442 void
443 global_thread_step_over_chain_remove (struct thread_info *tp)
444 {
445   infrun_debug_printf ("removing thread %s from global step over chain",
446 		       tp->ptid.to_string ().c_str ());
447 
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);
451 }
452 
453 /* Delete the thread referenced by THR.  If SILENT, don't notify
454    the observer of this exit.
455 
456    THR must not be NULL or a failed assertion will be raised.  */
457 
458 static void
459 delete_thread_1 (thread_info *thr, bool silent)
460 {
461   gdb_assert (thr != nullptr);
462 
463   threads_debug_printf ("deleting thread %s, silent = %d",
464 			thr->ptid.to_string ().c_str (), silent);
465 
466   set_thread_exited (thr, silent);
467 
468   if (!thr->deletable ())
469     {
470        /* Will be really deleted some other time.  */
471        return;
472      }
473 
474   auto it = thr->inf->thread_list.iterator_to (*thr);
475   thr->inf->thread_list.erase (it);
476 
477   delete thr;
478 }
479 
480 /* See gdbthread.h.  */
481 
482 void
483 delete_thread (thread_info *thread)
484 {
485   delete_thread_1 (thread, false /* not silent */);
486 }
487 
488 void
489 delete_thread_silent (thread_info *thread)
490 {
491   delete_thread_1 (thread, true /* silent */);
492 }
493 
494 struct thread_info *
495 find_thread_global_id (int global_id)
496 {
497   for (thread_info *tp : all_threads ())
498     if (tp->global_num == global_id)
499       return tp;
500 
501   return NULL;
502 }
503 
504 static struct thread_info *
505 find_thread_id (struct inferior *inf, int thr_num)
506 {
507   for (thread_info *tp : inf->threads ())
508     if (tp->per_inf_num == thr_num)
509       return tp;
510 
511   return NULL;
512 }
513 
514 /* See gdbthread.h.  */
515 
516 struct thread_info *
517 find_thread_ptid (process_stratum_target *targ, ptid_t ptid)
518 {
519   inferior *inf = find_inferior_ptid (targ, ptid);
520   if (inf == NULL)
521     return NULL;
522   return find_thread_ptid (inf, ptid);
523 }
524 
525 /* See gdbthread.h.  */
526 
527 struct thread_info *
528 find_thread_ptid (inferior *inf, ptid_t ptid)
529 {
530   gdb_assert (inf != nullptr);
531 
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;
537 }
538 
539 /* See gdbthread.h.  */
540 
541 struct thread_info *
542 find_thread_by_handle (gdb::array_view<const gdb_byte> handle,
543 		       struct inferior *inf)
544 {
545   return target_thread_handle_to_thread_info (handle.data (),
546 					      handle.size (),
547 					      inf);
548 }
549 
550 /*
551  * Thread iterator function.
552  *
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.
559  *
560  * FIXME: some of the existing functionality, such as
561  * "Thread apply all", might be rewritten using this functionality.
562  */
563 
564 struct thread_info *
565 iterate_over_threads (int (*callback) (struct thread_info *, void *),
566 		      void *data)
567 {
568   for (thread_info *tp : all_threads_safe ())
569     if ((*callback) (tp, data))
570       return tp;
571 
572   return NULL;
573 }
574 
575 /* See gdbthread.h.  */
576 
577 bool
578 any_thread_p ()
579 {
580   for (thread_info *tp ATTRIBUTE_UNUSED : all_threads ())
581     return true;
582   return false;
583 }
584 
585 int
586 thread_count (process_stratum_target *proc_target)
587 {
588   auto rng = all_threads (proc_target);
589   return std::distance (rng.begin (), rng.end ());
590 }
591 
592 /* Return the number of non-exited threads in the thread list.  */
593 
594 static int
595 live_threads_count (void)
596 {
597   auto rng = all_non_exited_threads ();
598   return std::distance (rng.begin (), rng.end ());
599 }
600 
601 int
602 valid_global_thread_id (int global_id)
603 {
604   for (thread_info *tp : all_threads ())
605     if (tp->global_num == global_id)
606       return 1;
607 
608   return 0;
609 }
610 
611 bool
612 in_thread_list (process_stratum_target *targ, ptid_t ptid)
613 {
614   return find_thread_ptid (targ, ptid) != nullptr;
615 }
616 
617 /* Finds the first thread of the inferior.  */
618 
619 thread_info *
620 first_thread_of_inferior (inferior *inf)
621 {
622   if (inf->thread_list.empty ())
623     return nullptr;
624 
625   return &inf->thread_list.front ();
626 }
627 
628 thread_info *
629 any_thread_of_inferior (inferior *inf)
630 {
631   gdb_assert (inf->pid != 0);
632 
633   /* Prefer the current thread, if there's one.  */
634   if (inf == current_inferior () && inferior_ptid != null_ptid)
635     return inferior_thread ();
636 
637   for (thread_info *tp : inf->non_exited_threads ())
638     return tp;
639 
640   return NULL;
641 }
642 
643 thread_info *
644 any_live_thread_of_inferior (inferior *inf)
645 {
646   struct thread_info *curr_tp = NULL;
647   struct thread_info *tp_executing = NULL;
648 
649   gdb_assert (inf != NULL && inf->pid != 0);
650 
651   /* Prefer the current thread if it's not executing.  */
652   if (inferior_ptid != null_ptid && current_inferior () == inf)
653     {
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;
662     }
663 
664   for (thread_info *tp : inf->non_exited_threads ())
665     {
666       if (!tp->executing ())
667 	return tp;
668 
669       tp_executing = tp;
670     }
671 
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;
676 
677   /* Otherwise, just return an executing thread, if any.  */
678   return tp_executing;
679 }
680 
681 /* Return true if TP is an active thread.  */
682 static bool
683 thread_alive (thread_info *tp)
684 {
685   if (tp->state == THREAD_EXITED)
686     return false;
687 
688   /* Ensure we're looking at the right target stack.  */
689   gdb_assert (tp->inf == current_inferior ());
690 
691   return target_thread_alive (tp->ptid);
692 }
693 
694 /* See gdbthreads.h.  */
695 
696 bool
697 switch_to_thread_if_alive (thread_info *thr)
698 {
699   scoped_restore_current_thread restore_thread;
700 
701   /* Switch inferior first, so that we're looking at the right target
702      stack.  */
703   switch_to_inferior_no_thread (thr->inf);
704 
705   if (thread_alive (thr))
706     {
707       switch_to_thread (thr);
708       restore_thread.dont_restore ();
709       return true;
710     }
711 
712   return false;
713 }
714 
715 /* See gdbthreads.h.  */
716 
717 void
718 prune_threads (void)
719 {
720   scoped_restore_current_thread restore_thread;
721 
722   for (thread_info *tp : all_threads_safe ())
723     {
724       switch_to_inferior_no_thread (tp->inf);
725 
726       if (!thread_alive (tp))
727 	delete_thread (tp);
728     }
729 }
730 
731 /* See gdbthreads.h.  */
732 
733 void
734 delete_exited_threads (void)
735 {
736   for (thread_info *tp : all_threads_safe ())
737     if (tp->state == THREAD_EXITED)
738       delete_thread (tp);
739 }
740 
741 /* Return true value if stack temporaries are enabled for the thread
742    TP.  */
743 
744 bool
745 thread_stack_temporaries_enabled_p (thread_info *tp)
746 {
747   if (tp == NULL)
748     return false;
749   else
750     return tp->stack_temporaries_enabled;
751 }
752 
753 /* Push V on to the stack temporaries of the thread with id PTID.  */
754 
755 void
756 push_thread_stack_temporary (thread_info *tp, struct value *v)
757 {
758   gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
759   tp->stack_temporaries.push_back (v);
760 }
761 
762 /* Return true if VAL is among the stack temporaries of the thread
763    TP.  Return false otherwise.  */
764 
765 bool
766 value_in_thread_stack_temporaries (struct value *val, thread_info *tp)
767 {
768   gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
769   for (value *v : tp->stack_temporaries)
770     if (v == val)
771       return true;
772 
773   return false;
774 }
775 
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.  */
778 
779 value *
780 get_last_thread_stack_temporary (thread_info *tp)
781 {
782   struct value *lastval = NULL;
783 
784   gdb_assert (tp != NULL);
785   if (!tp->stack_temporaries.empty ())
786     lastval = tp->stack_temporaries.back ();
787 
788   return lastval;
789 }
790 
791 void
792 thread_change_ptid (process_stratum_target *targ,
793 		    ptid_t old_ptid, ptid_t new_ptid)
794 {
795   struct inferior *inf;
796   struct thread_info *tp;
797 
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 ();
803 
804   tp = find_thread_ptid (inf, old_ptid);
805   gdb_assert (tp != nullptr);
806 
807   int num_erased = inf->ptid_thread_map.erase (old_ptid);
808   gdb_assert (num_erased == 1);
809 
810   tp->ptid = new_ptid;
811   inf->ptid_thread_map[new_ptid] = tp;
812 
813   gdb::observers::thread_ptid_changed.notify (targ, old_ptid, new_ptid);
814 }
815 
816 /* See gdbthread.h.  */
817 
818 void
819 set_resumed (process_stratum_target *targ, ptid_t ptid, bool resumed)
820 {
821   for (thread_info *tp : all_non_exited_threads (targ, ptid))
822     tp->set_resumed (resumed);
823 }
824 
825 /* Helper for set_running, that marks one thread either running or
826    stopped.  */
827 
828 static bool
829 set_running_thread (struct thread_info *tp, bool running)
830 {
831   bool started = false;
832 
833   if (running && tp->state == THREAD_STOPPED)
834     started = true;
835   tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
836 
837   threads_debug_printf ("thread: %s, running? %d%s",
838 			tp->ptid.to_string ().c_str (), running,
839 			(started ? " (started)" : ""));
840 
841   if (!running)
842     {
843       /* If the thread is now marked stopped, remove it from
844 	 the step-over queue, so that we don't try to resume
845 	 it until the user wants it to.  */
846       if (thread_is_in_step_over_chain (tp))
847 	global_thread_step_over_chain_remove (tp);
848     }
849 
850   return started;
851 }
852 
853 /* See gdbthread.h.  */
854 
855 void
856 thread_info::set_running (bool running)
857 {
858   if (set_running_thread (this, running))
859     gdb::observers::target_resumed.notify (this->ptid);
860 }
861 
862 void
863 set_running (process_stratum_target *targ, ptid_t ptid, bool running)
864 {
865   /* We try not to notify the observer if no thread has actually
866      changed the running state -- merely to reduce the number of
867      messages to the MI frontend.  A frontend is supposed to handle
868      multiple *running notifications just fine.  */
869   bool any_started = false;
870 
871   for (thread_info *tp : all_non_exited_threads (targ, ptid))
872     if (set_running_thread (tp, running))
873       any_started = true;
874 
875   if (any_started)
876     gdb::observers::target_resumed.notify (ptid);
877 }
878 
879 void
880 set_executing (process_stratum_target *targ, ptid_t ptid, bool executing)
881 {
882   for (thread_info *tp : all_non_exited_threads (targ, ptid))
883     tp->set_executing (executing);
884 
885   /* It only takes one running thread to spawn more threads.  */
886   if (executing)
887     targ->threads_executing = true;
888   /* Only clear the flag if the caller is telling us everything is
889      stopped.  */
890   else if (minus_one_ptid == ptid)
891     targ->threads_executing = false;
892 }
893 
894 /* See gdbthread.h.  */
895 
896 bool
897 threads_are_executing (process_stratum_target *target)
898 {
899   return target->threads_executing;
900 }
901 
902 void
903 set_stop_requested (process_stratum_target *targ, ptid_t ptid, bool stop)
904 {
905   for (thread_info *tp : all_non_exited_threads (targ, ptid))
906     tp->stop_requested = stop;
907 
908   /* Call the stop requested observer so other components of GDB can
909      react to this request.  */
910   if (stop)
911     gdb::observers::thread_stop_requested.notify (ptid);
912 }
913 
914 void
915 finish_thread_state (process_stratum_target *targ, ptid_t ptid)
916 {
917   bool any_started = false;
918 
919   for (thread_info *tp : all_non_exited_threads (targ, ptid))
920     if (set_running_thread (tp, tp->executing ()))
921       any_started = true;
922 
923   if (any_started)
924     gdb::observers::target_resumed.notify (ptid);
925 }
926 
927 /* See gdbthread.h.  */
928 
929 void
930 validate_registers_access (void)
931 {
932   /* No selected thread, no registers.  */
933   if (inferior_ptid == null_ptid)
934     error (_("No thread selected."));
935 
936   thread_info *tp = inferior_thread ();
937 
938   /* Don't try to read from a dead thread.  */
939   if (tp->state == THREAD_EXITED)
940     error (_("The current thread has terminated"));
941 
942   /* ... or from a spinning thread.  FIXME: This isn't actually fully
943      correct.  It'll allow an user-requested access (e.g., "print $pc"
944      at the prompt) when a thread is not executing for some internal
945      reason, but is marked running from the user's perspective.  E.g.,
946      the thread is waiting for its turn in the step-over queue.  */
947   if (tp->executing ())
948     error (_("Selected thread is running."));
949 }
950 
951 /* See gdbthread.h.  */
952 
953 bool
954 can_access_registers_thread (thread_info *thread)
955 {
956   /* No thread, no registers.  */
957   if (thread == NULL)
958     return false;
959 
960   /* Don't try to read from a dead thread.  */
961   if (thread->state == THREAD_EXITED)
962     return false;
963 
964   /* ... or from a spinning thread.  FIXME: see validate_registers_access.  */
965   if (thread->executing ())
966     return false;
967 
968   return true;
969 }
970 
971 int
972 pc_in_thread_step_range (CORE_ADDR pc, struct thread_info *thread)
973 {
974   return (pc >= thread->control.step_range_start
975 	  && pc < thread->control.step_range_end);
976 }
977 
978 /* Helper for print_thread_info.  Returns true if THR should be
979    printed.  If REQUESTED_THREADS, a list of GDB ids/ranges, is not
980    NULL, only print THR if its ID is included in the list.  GLOBAL_IDS
981    is true if REQUESTED_THREADS is list of global IDs, false if a list
982    of per-inferior thread ids.  If PID is not -1, only print THR if it
983    is a thread from the process PID.  Otherwise, threads from all
984    attached PIDs are printed.  If both REQUESTED_THREADS is not NULL
985    and PID is not -1, then the thread is printed if it belongs to the
986    specified process.  Otherwise, an error is raised.  */
987 
988 static int
989 should_print_thread (const char *requested_threads, int default_inf_num,
990 		     int global_ids, int pid, struct thread_info *thr)
991 {
992   if (requested_threads != NULL && *requested_threads != '\0')
993     {
994       int in_list;
995 
996       if (global_ids)
997 	in_list = number_is_in_list (requested_threads, thr->global_num);
998       else
999 	in_list = tid_is_in_list (requested_threads, default_inf_num,
1000 				  thr->inf->num, thr->per_inf_num);
1001       if (!in_list)
1002 	return 0;
1003     }
1004 
1005   if (pid != -1 && thr->ptid.pid () != pid)
1006     {
1007       if (requested_threads != NULL && *requested_threads != '\0')
1008 	error (_("Requested thread not found in requested process"));
1009       return 0;
1010     }
1011 
1012   if (thr->state == THREAD_EXITED)
1013     return 0;
1014 
1015   return 1;
1016 }
1017 
1018 /* Return the string to display in "info threads"'s "Target Id"
1019    column, for TP.  */
1020 
1021 static std::string
1022 thread_target_id_str (thread_info *tp)
1023 {
1024   std::string target_id = target_pid_to_str (tp->ptid);
1025   const char *extra_info = target_extra_thread_info (tp);
1026   const char *name = thread_name (tp);
1027 
1028   if (extra_info != nullptr && name != nullptr)
1029     return string_printf ("%s \"%s\" (%s)", target_id.c_str (), name,
1030 			  extra_info);
1031   else if (extra_info != nullptr)
1032     return string_printf ("%s (%s)", target_id.c_str (), extra_info);
1033   else if (name != nullptr)
1034     return string_printf ("%s \"%s\"", target_id.c_str (), name);
1035   else
1036     return target_id;
1037 }
1038 
1039 /* Like print_thread_info, but in addition, GLOBAL_IDS indicates
1040    whether REQUESTED_THREADS is a list of global or per-inferior
1041    thread ids.  */
1042 
1043 static void
1044 print_thread_info_1 (struct ui_out *uiout, const char *requested_threads,
1045 		     int global_ids, int pid,
1046 		     int show_global_ids)
1047 {
1048   int default_inf_num = current_inferior ()->num;
1049 
1050   update_thread_list ();
1051 
1052   /* Whether we saw any thread.  */
1053   bool any_thread = false;
1054   /* Whether the current thread is exited.  */
1055   bool current_exited = false;
1056 
1057   thread_info *current_thread = (inferior_ptid != null_ptid
1058 				 ? inferior_thread () : NULL);
1059 
1060   {
1061     /* For backward compatibility, we make a list for MI.  A table is
1062        preferable for the CLI, though, because it shows table
1063        headers.  */
1064     gdb::optional<ui_out_emit_list> list_emitter;
1065     gdb::optional<ui_out_emit_table> table_emitter;
1066 
1067     /* We'll be switching threads temporarily below.  */
1068     scoped_restore_current_thread restore_thread;
1069 
1070     if (uiout->is_mi_like_p ())
1071       list_emitter.emplace (uiout, "threads");
1072     else
1073       {
1074 	int n_threads = 0;
1075 	/* The width of the "Target Id" column.  Grown below to
1076 	   accommodate the largest entry.  */
1077 	size_t target_id_col_width = 17;
1078 
1079 	for (thread_info *tp : all_threads ())
1080 	  {
1081 	    if (!should_print_thread (requested_threads, default_inf_num,
1082 				      global_ids, pid, tp))
1083 	      continue;
1084 
1085 	    if (!uiout->is_mi_like_p ())
1086 	      {
1087 		/* Switch inferiors so we're looking at the right
1088 		   target stack.  */
1089 		switch_to_inferior_no_thread (tp->inf);
1090 
1091 		target_id_col_width
1092 		  = std::max (target_id_col_width,
1093 			      thread_target_id_str (tp).size ());
1094 	      }
1095 
1096 	    ++n_threads;
1097 	  }
1098 
1099 	if (n_threads == 0)
1100 	  {
1101 	    if (requested_threads == NULL || *requested_threads == '\0')
1102 	      uiout->message (_("No threads.\n"));
1103 	    else
1104 	      uiout->message (_("No threads match '%s'.\n"),
1105 			      requested_threads);
1106 	    return;
1107 	  }
1108 
1109 	table_emitter.emplace (uiout, show_global_ids ? 5 : 4,
1110 			       n_threads, "threads");
1111 
1112 	uiout->table_header (1, ui_left, "current", "");
1113 	uiout->table_header (4, ui_left, "id-in-tg", "Id");
1114 	if (show_global_ids)
1115 	  uiout->table_header (4, ui_left, "id", "GId");
1116 	uiout->table_header (target_id_col_width, ui_left,
1117 			     "target-id", "Target Id");
1118 	uiout->table_header (1, ui_left, "frame", "Frame");
1119 	uiout->table_body ();
1120       }
1121 
1122     for (inferior *inf : all_inferiors ())
1123       for (thread_info *tp : inf->threads ())
1124 	{
1125 	  int core;
1126 
1127 	  any_thread = true;
1128 	  if (tp == current_thread && tp->state == THREAD_EXITED)
1129 	    current_exited = true;
1130 
1131 	  if (!should_print_thread (requested_threads, default_inf_num,
1132 				    global_ids, pid, tp))
1133 	    continue;
1134 
1135 	  ui_out_emit_tuple tuple_emitter (uiout, NULL);
1136 
1137 	  if (!uiout->is_mi_like_p ())
1138 	    {
1139 	      if (tp == current_thread)
1140 		uiout->field_string ("current", "*");
1141 	      else
1142 		uiout->field_skip ("current");
1143 
1144 	      uiout->field_string ("id-in-tg", print_thread_id (tp));
1145 	    }
1146 
1147 	  if (show_global_ids || uiout->is_mi_like_p ())
1148 	    uiout->field_signed ("id", tp->global_num);
1149 
1150 	  /* Switch to the thread (and inferior / target).  */
1151 	  switch_to_thread (tp);
1152 
1153 	  /* For the CLI, we stuff everything into the target-id field.
1154 	     This is a gross hack to make the output come out looking
1155 	     correct.  The underlying problem here is that ui-out has no
1156 	     way to specify that a field's space allocation should be
1157 	     shared by several fields.  For MI, we do the right thing
1158 	     instead.  */
1159 
1160 	  if (uiout->is_mi_like_p ())
1161 	    {
1162 	      uiout->field_string ("target-id", target_pid_to_str (tp->ptid));
1163 
1164 	      const char *extra_info = target_extra_thread_info (tp);
1165 	      if (extra_info != nullptr)
1166 		uiout->field_string ("details", extra_info);
1167 
1168 	      const char *name = thread_name (tp);
1169 	      if (name != NULL)
1170 		uiout->field_string ("name", name);
1171 	    }
1172 	  else
1173 	    {
1174 	      uiout->field_string ("target-id", thread_target_id_str (tp));
1175 	    }
1176 
1177 	  if (tp->state == THREAD_RUNNING)
1178 	    uiout->text ("(running)\n");
1179 	  else
1180 	    {
1181 	      /* The switch above put us at the top of the stack (leaf
1182 		 frame).  */
1183 	      print_stack_frame (get_selected_frame (NULL),
1184 				 /* For MI output, print frame level.  */
1185 				 uiout->is_mi_like_p (),
1186 				 LOCATION, 0);
1187 	    }
1188 
1189 	  if (uiout->is_mi_like_p ())
1190 	    {
1191 	      const char *state = "stopped";
1192 
1193 	      if (tp->state == THREAD_RUNNING)
1194 		state = "running";
1195 	      uiout->field_string ("state", state);
1196 	    }
1197 
1198 	  core = target_core_of_thread (tp->ptid);
1199 	  if (uiout->is_mi_like_p () && core != -1)
1200 	    uiout->field_signed ("core", core);
1201 	}
1202 
1203     /* This end scope restores the current thread and the frame
1204        selected before the "info threads" command, and it finishes the
1205        ui-out list or table.  */
1206   }
1207 
1208   if (pid == -1 && requested_threads == NULL)
1209     {
1210       if (uiout->is_mi_like_p () && inferior_ptid != null_ptid)
1211 	uiout->field_signed ("current-thread-id", current_thread->global_num);
1212 
1213       if (inferior_ptid != null_ptid && current_exited)
1214 	uiout->message ("\n\
1215 The current thread <Thread ID %s> has terminated.  See `help thread'.\n",
1216 			print_thread_id (inferior_thread ()));
1217       else if (any_thread && inferior_ptid == null_ptid)
1218 	uiout->message ("\n\
1219 No selected thread.  See `help thread'.\n");
1220     }
1221 }
1222 
1223 /* See gdbthread.h.  */
1224 
1225 void
1226 print_thread_info (struct ui_out *uiout, const char *requested_threads,
1227 		   int pid)
1228 {
1229   print_thread_info_1 (uiout, requested_threads, 1, pid, 0);
1230 }
1231 
1232 /* The options for the "info threads" command.  */
1233 
1234 struct info_threads_opts
1235 {
1236   /* For "-gid".  */
1237   bool show_global_ids = false;
1238 };
1239 
1240 static const gdb::option::option_def info_threads_option_defs[] = {
1241 
1242   gdb::option::flag_option_def<info_threads_opts> {
1243     "gid",
1244     [] (info_threads_opts *opts) { return &opts->show_global_ids; },
1245     N_("Show global thread IDs."),
1246   },
1247 
1248 };
1249 
1250 /* Create an option_def_group for the "info threads" options, with
1251    IT_OPTS as context.  */
1252 
1253 static inline gdb::option::option_def_group
1254 make_info_threads_options_def_group (info_threads_opts *it_opts)
1255 {
1256   return {{info_threads_option_defs}, it_opts};
1257 }
1258 
1259 /* Implementation of the "info threads" command.
1260 
1261    Note: this has the drawback that it _really_ switches
1262 	 threads, which frees the frame cache.  A no-side
1263 	 effects info-threads command would be nicer.  */
1264 
1265 static void
1266 info_threads_command (const char *arg, int from_tty)
1267 {
1268   info_threads_opts it_opts;
1269 
1270   auto grp = make_info_threads_options_def_group (&it_opts);
1271   gdb::option::process_options
1272     (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1273 
1274   print_thread_info_1 (current_uiout, arg, 0, -1, it_opts.show_global_ids);
1275 }
1276 
1277 /* Completer for the "info threads" command.  */
1278 
1279 static void
1280 info_threads_command_completer (struct cmd_list_element *ignore,
1281 				completion_tracker &tracker,
1282 				const char *text, const char *word_ignored)
1283 {
1284   const auto grp = make_info_threads_options_def_group (nullptr);
1285 
1286   if (gdb::option::complete_options
1287       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1288     return;
1289 
1290   /* Convenience to let the user know what the option can accept.  */
1291   if (*text == '\0')
1292     {
1293       gdb::option::complete_on_all_options (tracker, grp);
1294       /* Keep this "ID" in sync with what "help info threads"
1295 	 says.  */
1296       tracker.add_completion (make_unique_xstrdup ("ID"));
1297     }
1298 }
1299 
1300 /* See gdbthread.h.  */
1301 
1302 void
1303 switch_to_thread_no_regs (struct thread_info *thread)
1304 {
1305   gdb_assert (thread != nullptr);
1306   threads_debug_printf ("thread = %s", thread->ptid.to_string ().c_str ());
1307 
1308   struct inferior *inf = thread->inf;
1309 
1310   set_current_program_space (inf->pspace);
1311   set_current_inferior (inf);
1312 
1313   current_thread_ = thread;
1314   inferior_ptid = current_thread_->ptid;
1315 }
1316 
1317 /* See gdbthread.h.  */
1318 
1319 void
1320 switch_to_no_thread ()
1321 {
1322   if (current_thread_ == nullptr)
1323     return;
1324 
1325   threads_debug_printf ("thread = NONE");
1326 
1327   current_thread_ = nullptr;
1328   inferior_ptid = null_ptid;
1329   reinit_frame_cache ();
1330 }
1331 
1332 /* See gdbthread.h.  */
1333 
1334 void
1335 switch_to_thread (thread_info *thr)
1336 {
1337   gdb_assert (thr != NULL);
1338 
1339   if (is_current_thread (thr))
1340     return;
1341 
1342   switch_to_thread_no_regs (thr);
1343 
1344   reinit_frame_cache ();
1345 }
1346 
1347 /* See gdbsupport/common-gdbthread.h.  */
1348 
1349 void
1350 switch_to_thread (process_stratum_target *proc_target, ptid_t ptid)
1351 {
1352   thread_info *thr = find_thread_ptid (proc_target, ptid);
1353   switch_to_thread (thr);
1354 }
1355 
1356 /* See frame.h.  */
1357 
1358 void
1359 scoped_restore_current_thread::restore ()
1360 {
1361   /* If an entry of thread_info was previously selected, it won't be
1362      deleted because we've increased its refcount.  The thread represented
1363      by this thread_info entry may have already exited (due to normal exit,
1364      detach, etc), so the thread_info.state is THREAD_EXITED.  */
1365   if (m_thread != NULL
1366       /* If the previously selected thread belonged to a process that has
1367 	 in the mean time exited (or killed, detached, etc.), then don't revert
1368 	 back to it, but instead simply drop back to no thread selected.  */
1369       && m_inf->pid != 0)
1370     switch_to_thread (m_thread.get ());
1371   else
1372     switch_to_inferior_no_thread (m_inf.get ());
1373 
1374   /* The running state of the originally selected thread may have
1375      changed, so we have to recheck it here.  */
1376   if (inferior_ptid != null_ptid
1377       && m_was_stopped
1378       && m_thread->state == THREAD_STOPPED
1379       && target_has_registers ()
1380       && target_has_stack ()
1381       && target_has_memory ())
1382     restore_selected_frame (m_selected_frame_id, m_selected_frame_level);
1383 
1384   set_language (m_lang);
1385 }
1386 
1387 scoped_restore_current_thread::~scoped_restore_current_thread ()
1388 {
1389   if (!m_dont_restore)
1390     restore ();
1391 }
1392 
1393 scoped_restore_current_thread::scoped_restore_current_thread ()
1394 {
1395   m_inf = inferior_ref::new_reference (current_inferior ());
1396 
1397   m_lang = current_language->la_language;
1398 
1399   if (inferior_ptid != null_ptid)
1400     {
1401       m_thread = thread_info_ref::new_reference (inferior_thread ());
1402 
1403       m_was_stopped = m_thread->state == THREAD_STOPPED;
1404       save_selected_frame (&m_selected_frame_id, &m_selected_frame_level);
1405     }
1406 }
1407 
1408 /* See gdbthread.h.  */
1409 
1410 int
1411 show_thread_that_caused_stop (void)
1412 {
1413   return highest_thread_num > 1;
1414 }
1415 
1416 /* See gdbthread.h.  */
1417 
1418 int
1419 show_inferior_qualified_tids (void)
1420 {
1421   auto inf = inferior_list.begin ();
1422   if (inf->num != 1)
1423     return true;
1424   ++inf;
1425   return inf != inferior_list.end ();
1426 }
1427 
1428 /* See gdbthread.h.  */
1429 
1430 const char *
1431 print_thread_id (struct thread_info *thr)
1432 {
1433   char *s = get_print_cell ();
1434 
1435   if (show_inferior_qualified_tids ())
1436     xsnprintf (s, PRINT_CELL_SIZE, "%d.%d", thr->inf->num, thr->per_inf_num);
1437   else
1438     xsnprintf (s, PRINT_CELL_SIZE, "%d", thr->per_inf_num);
1439   return s;
1440 }
1441 
1442 /* Sort an array of struct thread_info pointers by thread ID (first by
1443    inferior number, and then by per-inferior thread number).  Sorts in
1444    ascending order.  */
1445 
1446 static bool
1447 tp_array_compar_ascending (const thread_info_ref &a, const thread_info_ref &b)
1448 {
1449   if (a->inf->num != b->inf->num)
1450     return a->inf->num < b->inf->num;
1451 
1452   return (a->per_inf_num < b->per_inf_num);
1453 }
1454 
1455 /* Sort an array of struct thread_info pointers by thread ID (first by
1456    inferior number, and then by per-inferior thread number).  Sorts in
1457    descending order.  */
1458 
1459 static bool
1460 tp_array_compar_descending (const thread_info_ref &a, const thread_info_ref &b)
1461 {
1462   if (a->inf->num != b->inf->num)
1463     return a->inf->num > b->inf->num;
1464 
1465   return (a->per_inf_num > b->per_inf_num);
1466 }
1467 
1468 /* See gdbthread.h.  */
1469 
1470 void
1471 thread_try_catch_cmd (thread_info *thr, gdb::optional<int> ada_task,
1472 		      const char *cmd, int from_tty,
1473 		      const qcs_flags &flags)
1474 {
1475   gdb_assert (is_current_thread (thr));
1476 
1477   /* The thread header is computed before running the command since
1478      the command can change the inferior, which is not permitted
1479      by thread_target_id_str.  */
1480   std::string thr_header;
1481   if (ada_task.has_value ())
1482     thr_header = string_printf (_("\nTask ID %d:\n"), *ada_task);
1483   else
1484     thr_header = string_printf (_("\nThread %s (%s):\n"),
1485 				print_thread_id (thr),
1486 				thread_target_id_str (thr).c_str ());
1487 
1488   try
1489     {
1490       std::string cmd_result;
1491       execute_command_to_string
1492 	(cmd_result, cmd, from_tty, gdb_stdout->term_out ());
1493       if (!flags.silent || cmd_result.length () > 0)
1494 	{
1495 	  if (!flags.quiet)
1496 	    gdb_printf ("%s", thr_header.c_str ());
1497 	  gdb_printf ("%s", cmd_result.c_str ());
1498 	}
1499     }
1500   catch (const gdb_exception_error &ex)
1501     {
1502       if (!flags.silent)
1503 	{
1504 	  if (!flags.quiet)
1505 	    gdb_printf ("%s", thr_header.c_str ());
1506 	  if (flags.cont)
1507 	    gdb_printf ("%s\n", ex.what ());
1508 	  else
1509 	    throw;
1510 	}
1511     }
1512 }
1513 
1514 /* Option definition of "thread apply"'s "-ascending" option.  */
1515 
1516 static const gdb::option::flag_option_def<> ascending_option_def = {
1517   "ascending",
1518   N_("\
1519 Call COMMAND for all threads in ascending order.\n\
1520 The default is descending order."),
1521 };
1522 
1523 /* The qcs command line flags for the "thread apply" commands.  Keep
1524    this in sync with the "frame apply" commands.  */
1525 
1526 using qcs_flag_option_def
1527   = gdb::option::flag_option_def<qcs_flags>;
1528 
1529 static const gdb::option::option_def thr_qcs_flags_option_defs[] = {
1530   qcs_flag_option_def {
1531     "q", [] (qcs_flags *opt) { return &opt->quiet; },
1532     N_("Disables printing the thread information."),
1533   },
1534 
1535   qcs_flag_option_def {
1536     "c", [] (qcs_flags *opt) { return &opt->cont; },
1537     N_("Print any error raised by COMMAND and continue."),
1538   },
1539 
1540   qcs_flag_option_def {
1541     "s", [] (qcs_flags *opt) { return &opt->silent; },
1542     N_("Silently ignore any errors or empty output produced by COMMAND."),
1543   },
1544 };
1545 
1546 /* Create an option_def_group for the "thread apply all" options, with
1547    ASCENDING and FLAGS as context.  */
1548 
1549 static inline std::array<gdb::option::option_def_group, 2>
1550 make_thread_apply_all_options_def_group (bool *ascending,
1551 					 qcs_flags *flags)
1552 {
1553   return {{
1554     { {ascending_option_def.def ()}, ascending},
1555     { {thr_qcs_flags_option_defs}, flags },
1556   }};
1557 }
1558 
1559 /* Create an option_def_group for the "thread apply" options, with
1560    FLAGS as context.  */
1561 
1562 static inline gdb::option::option_def_group
1563 make_thread_apply_options_def_group (qcs_flags *flags)
1564 {
1565   return {{thr_qcs_flags_option_defs}, flags};
1566 }
1567 
1568 /* Apply a GDB command to a list of threads.  List syntax is a whitespace
1569    separated list of numbers, or ranges, or the keyword `all'.  Ranges consist
1570    of two numbers separated by a hyphen.  Examples:
1571 
1572    thread apply 1 2 7 4 backtrace       Apply backtrace cmd to threads 1,2,7,4
1573    thread apply 2-7 9 p foo(1)  Apply p foo(1) cmd to threads 2->7 & 9
1574    thread apply all x/i $pc   Apply x/i $pc cmd to all threads.  */
1575 
1576 static void
1577 thread_apply_all_command (const char *cmd, int from_tty)
1578 {
1579   bool ascending = false;
1580   qcs_flags flags;
1581 
1582   auto group = make_thread_apply_all_options_def_group (&ascending,
1583 							&flags);
1584   gdb::option::process_options
1585     (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
1586 
1587   validate_flags_qcs ("thread apply all", &flags);
1588 
1589   if (cmd == NULL || *cmd == '\000')
1590     error (_("Please specify a command at the end of 'thread apply all'"));
1591 
1592   update_thread_list ();
1593 
1594   int tc = live_threads_count ();
1595   if (tc != 0)
1596     {
1597       /* Save a copy of the thread list and increment each thread's
1598 	 refcount while executing the command in the context of each
1599 	 thread, in case the command is one that wipes threads.  E.g.,
1600 	 detach, kill, disconnect, etc., or even normally continuing
1601 	 over an inferior or thread exit.  */
1602       std::vector<thread_info_ref> thr_list_cpy;
1603       thr_list_cpy.reserve (tc);
1604 
1605       for (thread_info *tp : all_non_exited_threads ())
1606 	thr_list_cpy.push_back (thread_info_ref::new_reference (tp));
1607       gdb_assert (thr_list_cpy.size () == tc);
1608 
1609       auto *sorter = (ascending
1610 		      ? tp_array_compar_ascending
1611 		      : tp_array_compar_descending);
1612       std::sort (thr_list_cpy.begin (), thr_list_cpy.end (), sorter);
1613 
1614       scoped_restore_current_thread restore_thread;
1615 
1616       for (thread_info_ref &thr : thr_list_cpy)
1617 	if (switch_to_thread_if_alive (thr.get ()))
1618 	  thread_try_catch_cmd (thr.get (), {}, cmd, from_tty, flags);
1619     }
1620 }
1621 
1622 /* Completer for "thread apply [ID list]".  */
1623 
1624 static void
1625 thread_apply_command_completer (cmd_list_element *ignore,
1626 				completion_tracker &tracker,
1627 				const char *text, const char * /*word*/)
1628 {
1629   /* Don't leave this to complete_options because there's an early
1630      return below.  */
1631   tracker.set_use_custom_word_point (true);
1632 
1633   tid_range_parser parser;
1634   parser.init (text, current_inferior ()->num);
1635 
1636   try
1637     {
1638       while (!parser.finished ())
1639 	{
1640 	  int inf_num, thr_start, thr_end;
1641 
1642 	  if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
1643 	    break;
1644 
1645 	  if (parser.in_star_range () || parser.in_thread_range ())
1646 	    parser.skip_range ();
1647 	}
1648     }
1649   catch (const gdb_exception_error &ex)
1650     {
1651       /* get_tid_range throws if it parses a negative number, for
1652 	 example.  But a seemingly negative number may be the start of
1653 	 an option instead.  */
1654     }
1655 
1656   const char *cmd = parser.cur_tok ();
1657 
1658   if (cmd == text)
1659     {
1660       /* No thread ID list yet.  */
1661       return;
1662     }
1663 
1664   /* Check if we're past a valid thread ID list already.  */
1665   if (parser.finished ()
1666       && cmd > text && !isspace (cmd[-1]))
1667     return;
1668 
1669   /* We're past the thread ID list, advance word point.  */
1670   tracker.advance_custom_word_point_by (cmd - text);
1671   text = cmd;
1672 
1673   const auto group = make_thread_apply_options_def_group (nullptr);
1674   if (gdb::option::complete_options
1675       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
1676     return;
1677 
1678   complete_nested_command_line (tracker, text);
1679 }
1680 
1681 /* Completer for "thread apply all".  */
1682 
1683 static void
1684 thread_apply_all_command_completer (cmd_list_element *ignore,
1685 				    completion_tracker &tracker,
1686 				    const char *text, const char *word)
1687 {
1688   const auto group = make_thread_apply_all_options_def_group (nullptr,
1689 							      nullptr);
1690   if (gdb::option::complete_options
1691       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
1692     return;
1693 
1694   complete_nested_command_line (tracker, text);
1695 }
1696 
1697 /* Implementation of the "thread apply" command.  */
1698 
1699 static void
1700 thread_apply_command (const char *tidlist, int from_tty)
1701 {
1702   qcs_flags flags;
1703   const char *cmd = NULL;
1704   tid_range_parser parser;
1705 
1706   if (tidlist == NULL || *tidlist == '\000')
1707     error (_("Please specify a thread ID list"));
1708 
1709   parser.init (tidlist, current_inferior ()->num);
1710   while (!parser.finished ())
1711     {
1712       int inf_num, thr_start, thr_end;
1713 
1714       if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
1715 	break;
1716     }
1717 
1718   cmd = parser.cur_tok ();
1719 
1720   auto group = make_thread_apply_options_def_group (&flags);
1721   gdb::option::process_options
1722     (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
1723 
1724   validate_flags_qcs ("thread apply", &flags);
1725 
1726   if (*cmd == '\0')
1727     error (_("Please specify a command following the thread ID list"));
1728 
1729   if (tidlist == cmd || isdigit (cmd[0]))
1730     invalid_thread_id_error (cmd);
1731 
1732   scoped_restore_current_thread restore_thread;
1733 
1734   parser.init (tidlist, current_inferior ()->num);
1735   while (!parser.finished ())
1736     {
1737       struct thread_info *tp = NULL;
1738       struct inferior *inf;
1739       int inf_num, thr_num;
1740 
1741       parser.get_tid (&inf_num, &thr_num);
1742       inf = find_inferior_id (inf_num);
1743       if (inf != NULL)
1744 	tp = find_thread_id (inf, thr_num);
1745 
1746       if (parser.in_star_range ())
1747 	{
1748 	  if (inf == NULL)
1749 	    {
1750 	      warning (_("Unknown inferior %d"), inf_num);
1751 	      parser.skip_range ();
1752 	      continue;
1753 	    }
1754 
1755 	  /* No use looking for threads past the highest thread number
1756 	     the inferior ever had.  */
1757 	  if (thr_num >= inf->highest_thread_num)
1758 	    parser.skip_range ();
1759 
1760 	  /* Be quiet about unknown threads numbers.  */
1761 	  if (tp == NULL)
1762 	    continue;
1763 	}
1764 
1765       if (tp == NULL)
1766 	{
1767 	  if (show_inferior_qualified_tids () || parser.tid_is_qualified ())
1768 	    warning (_("Unknown thread %d.%d"), inf_num, thr_num);
1769 	  else
1770 	    warning (_("Unknown thread %d"), thr_num);
1771 	  continue;
1772 	}
1773 
1774       if (!switch_to_thread_if_alive (tp))
1775 	{
1776 	  warning (_("Thread %s has terminated."), print_thread_id (tp));
1777 	  continue;
1778 	}
1779 
1780       thread_try_catch_cmd (tp, {}, cmd, from_tty, flags);
1781     }
1782 }
1783 
1784 
1785 /* Implementation of the "taas" command.  */
1786 
1787 static void
1788 taas_command (const char *cmd, int from_tty)
1789 {
1790   if (cmd == NULL || *cmd == '\0')
1791     error (_("Please specify a command to apply on all threads"));
1792   std::string expanded = std::string ("thread apply all -s ") + cmd;
1793   execute_command (expanded.c_str (), from_tty);
1794 }
1795 
1796 /* Implementation of the "tfaas" command.  */
1797 
1798 static void
1799 tfaas_command (const char *cmd, int from_tty)
1800 {
1801   if (cmd == NULL || *cmd == '\0')
1802     error (_("Please specify a command to apply on all frames of all threads"));
1803   std::string expanded
1804     = std::string ("thread apply all -s -- frame apply all -s ") + cmd;
1805   execute_command (expanded.c_str (), from_tty);
1806 }
1807 
1808 /* Switch to the specified thread, or print the current thread.  */
1809 
1810 void
1811 thread_command (const char *tidstr, int from_tty)
1812 {
1813   if (tidstr == NULL)
1814     {
1815       if (inferior_ptid == null_ptid)
1816 	error (_("No thread selected"));
1817 
1818       if (target_has_stack ())
1819 	{
1820 	  struct thread_info *tp = inferior_thread ();
1821 
1822 	  if (tp->state == THREAD_EXITED)
1823 	    gdb_printf (_("[Current thread is %s (%s) (exited)]\n"),
1824 			print_thread_id (tp),
1825 			target_pid_to_str (inferior_ptid).c_str ());
1826 	  else
1827 	    gdb_printf (_("[Current thread is %s (%s)]\n"),
1828 			print_thread_id (tp),
1829 			target_pid_to_str (inferior_ptid).c_str ());
1830 	}
1831       else
1832 	error (_("No stack."));
1833     }
1834   else
1835     {
1836       ptid_t previous_ptid = inferior_ptid;
1837 
1838       thread_select (tidstr, parse_thread_id (tidstr, NULL));
1839 
1840       /* Print if the thread has not changed, otherwise an event will
1841 	 be sent.  */
1842       if (inferior_ptid == previous_ptid)
1843 	{
1844 	  print_selected_thread_frame (current_uiout,
1845 				       USER_SELECTED_THREAD
1846 				       | USER_SELECTED_FRAME);
1847 	}
1848       else
1849 	{
1850 	  gdb::observers::user_selected_context_changed.notify
1851 	    (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1852 	}
1853     }
1854 }
1855 
1856 /* Implementation of `thread name'.  */
1857 
1858 static void
1859 thread_name_command (const char *arg, int from_tty)
1860 {
1861   struct thread_info *info;
1862 
1863   if (inferior_ptid == null_ptid)
1864     error (_("No thread selected"));
1865 
1866   arg = skip_spaces (arg);
1867 
1868   info = inferior_thread ();
1869   info->set_name (arg != nullptr ? make_unique_xstrdup (arg) : nullptr);
1870 }
1871 
1872 /* Find thread ids with a name, target pid, or extra info matching ARG.  */
1873 
1874 static void
1875 thread_find_command (const char *arg, int from_tty)
1876 {
1877   const char *tmp;
1878   unsigned long match = 0;
1879 
1880   if (arg == NULL || *arg == '\0')
1881     error (_("Command requires an argument."));
1882 
1883   tmp = re_comp (arg);
1884   if (tmp != 0)
1885     error (_("Invalid regexp (%s): %s"), tmp, arg);
1886 
1887   /* We're going to be switching threads.  */
1888   scoped_restore_current_thread restore_thread;
1889 
1890   update_thread_list ();
1891 
1892   for (thread_info *tp : all_threads ())
1893     {
1894       switch_to_inferior_no_thread (tp->inf);
1895 
1896       if (tp->name () != nullptr && re_exec (tp->name ()))
1897 	{
1898 	  gdb_printf (_("Thread %s has name '%s'\n"),
1899 		      print_thread_id (tp), tp->name ());
1900 	  match++;
1901 	}
1902 
1903       tmp = target_thread_name (tp);
1904       if (tmp != NULL && re_exec (tmp))
1905 	{
1906 	  gdb_printf (_("Thread %s has target name '%s'\n"),
1907 		      print_thread_id (tp), tmp);
1908 	  match++;
1909 	}
1910 
1911       std::string name = target_pid_to_str (tp->ptid);
1912       if (!name.empty () && re_exec (name.c_str ()))
1913 	{
1914 	  gdb_printf (_("Thread %s has target id '%s'\n"),
1915 		      print_thread_id (tp), name.c_str ());
1916 	  match++;
1917 	}
1918 
1919       tmp = target_extra_thread_info (tp);
1920       if (tmp != NULL && re_exec (tmp))
1921 	{
1922 	  gdb_printf (_("Thread %s has extra info '%s'\n"),
1923 		      print_thread_id (tp), tmp);
1924 	  match++;
1925 	}
1926     }
1927   if (!match)
1928     gdb_printf (_("No threads match '%s'\n"), arg);
1929 }
1930 
1931 /* Print notices when new threads are attached and detached.  */
1932 bool print_thread_events = true;
1933 static void
1934 show_print_thread_events (struct ui_file *file, int from_tty,
1935 			  struct cmd_list_element *c, const char *value)
1936 {
1937   gdb_printf (file,
1938 	      _("Printing of thread events is %s.\n"),
1939 	      value);
1940 }
1941 
1942 /* See gdbthread.h.  */
1943 
1944 void
1945 thread_select (const char *tidstr, thread_info *tp)
1946 {
1947   if (!switch_to_thread_if_alive (tp))
1948     error (_("Thread ID %s has terminated."), tidstr);
1949 
1950   annotate_thread_changed ();
1951 
1952   /* Since the current thread may have changed, see if there is any
1953      exited thread we can now delete.  */
1954   delete_exited_threads ();
1955 }
1956 
1957 /* Print thread and frame switch command response.  */
1958 
1959 void
1960 print_selected_thread_frame (struct ui_out *uiout,
1961 			     user_selected_what selection)
1962 {
1963   struct thread_info *tp = inferior_thread ();
1964 
1965   if (selection & USER_SELECTED_THREAD)
1966     {
1967       if (uiout->is_mi_like_p ())
1968 	{
1969 	  uiout->field_signed ("new-thread-id",
1970 			       inferior_thread ()->global_num);
1971 	}
1972       else
1973 	{
1974 	  uiout->text ("[Switching to thread ");
1975 	  uiout->field_string ("new-thread-id", print_thread_id (tp));
1976 	  uiout->text (" (");
1977 	  uiout->text (target_pid_to_str (inferior_ptid));
1978 	  uiout->text (")]");
1979 	}
1980     }
1981 
1982   if (tp->state == THREAD_RUNNING)
1983     {
1984       if (selection & USER_SELECTED_THREAD)
1985 	uiout->text ("(running)\n");
1986     }
1987   else if (selection & USER_SELECTED_FRAME)
1988     {
1989       if (selection & USER_SELECTED_THREAD)
1990 	uiout->text ("\n");
1991 
1992       if (has_stack_frames ())
1993 	print_stack_frame_to_uiout (uiout, get_selected_frame (NULL),
1994 				    1, SRC_AND_LOC, 1);
1995     }
1996 }
1997 
1998 /* Update the 'threads_executing' global based on the threads we know
1999    about right now.  This is used by infrun to tell whether we should
2000    pull events out of the current target.  */
2001 
2002 static void
2003 update_threads_executing (void)
2004 {
2005   process_stratum_target *targ = current_inferior ()->process_target ();
2006 
2007   if (targ == NULL)
2008     return;
2009 
2010   targ->threads_executing = false;
2011 
2012   for (inferior *inf : all_non_exited_inferiors (targ))
2013     {
2014       if (!inf->has_execution ())
2015 	continue;
2016 
2017       /* If the process has no threads, then it must be we have a
2018 	 process-exit event pending.  */
2019       if (inf->thread_list.empty ())
2020 	{
2021 	  targ->threads_executing = true;
2022 	  return;
2023 	}
2024 
2025       for (thread_info *tp : inf->non_exited_threads ())
2026 	{
2027 	  if (tp->executing ())
2028 	    {
2029 	      targ->threads_executing = true;
2030 	      return;
2031 	    }
2032 	}
2033     }
2034 }
2035 
2036 void
2037 update_thread_list (void)
2038 {
2039   target_update_thread_list ();
2040   update_threads_executing ();
2041 }
2042 
2043 /* See gdbthread.h.  */
2044 
2045 const char *
2046 thread_name (thread_info *thread)
2047 {
2048   /* Use the manually set name if there is one.  */
2049   const char *name = thread->name ();
2050   if (name != nullptr)
2051     return name;
2052 
2053   /* Otherwise, ask the target.  Ensure we query the right target stack.  */
2054   scoped_restore_current_thread restore_thread;
2055   if (thread->inf != current_inferior ())
2056     switch_to_inferior_no_thread (thread->inf);
2057 
2058   return target_thread_name (thread);
2059 }
2060 
2061 /* See gdbthread.h.  */
2062 
2063 const char *
2064 thread_state_string (enum thread_state state)
2065 {
2066   switch (state)
2067     {
2068     case THREAD_STOPPED:
2069       return "STOPPED";
2070 
2071     case THREAD_RUNNING:
2072       return "RUNNING";
2073 
2074     case THREAD_EXITED:
2075       return "EXITED";
2076     }
2077 
2078   gdb_assert_not_reached ("unknown thread state");
2079 }
2080 
2081 /* Return a new value for the selected thread's id.  Return a value of
2082    0 if no thread is selected.  If GLOBAL is true, return the thread's
2083    global number.  Otherwise return the per-inferior number.  */
2084 
2085 static struct value *
2086 thread_num_make_value_helper (struct gdbarch *gdbarch, int global)
2087 {
2088   int int_val;
2089 
2090   if (inferior_ptid == null_ptid)
2091     int_val = 0;
2092   else
2093     {
2094       thread_info *tp = inferior_thread ();
2095       if (global)
2096 	int_val = tp->global_num;
2097       else
2098 	int_val = tp->per_inf_num;
2099     }
2100 
2101   return value_from_longest (builtin_type (gdbarch)->builtin_int, int_val);
2102 }
2103 
2104 /* Return a new value for the selected thread's per-inferior thread
2105    number.  Return a value of 0 if no thread is selected, or no
2106    threads exist.  */
2107 
2108 static struct value *
2109 thread_id_per_inf_num_make_value (struct gdbarch *gdbarch,
2110 				  struct internalvar *var,
2111 				  void *ignore)
2112 {
2113   return thread_num_make_value_helper (gdbarch, 0);
2114 }
2115 
2116 /* Return a new value for the selected thread's global id.  Return a
2117    value of 0 if no thread is selected, or no threads exist.  */
2118 
2119 static struct value *
2120 global_thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
2121 			     void *ignore)
2122 {
2123   return thread_num_make_value_helper (gdbarch, 1);
2124 }
2125 
2126 /* Return a new value for the number of non-exited threads in the current
2127    inferior.  If there are no threads in the current inferior return a
2128    value of 0.  */
2129 
2130 static struct value *
2131 inferior_thread_count_make_value (struct gdbarch *gdbarch,
2132 				  struct internalvar *var, void *ignore)
2133 {
2134   int int_val = 0;
2135 
2136   if (inferior_ptid != null_ptid)
2137     int_val = current_inferior ()->non_exited_threads ().size ();
2138 
2139   return value_from_longest (builtin_type (gdbarch)->builtin_int, int_val);
2140 }
2141 
2142 /* Commands with a prefix of `thread'.  */
2143 struct cmd_list_element *thread_cmd_list = NULL;
2144 
2145 /* Implementation of `thread' variable.  */
2146 
2147 static const struct internalvar_funcs thread_funcs =
2148 {
2149   thread_id_per_inf_num_make_value,
2150   NULL,
2151 };
2152 
2153 /* Implementation of `gthread' variable.  */
2154 
2155 static const struct internalvar_funcs gthread_funcs =
2156 {
2157   global_thread_id_make_value,
2158   NULL,
2159 };
2160 
2161 /* Implementation of `_inferior_thread_count` convenience variable.  */
2162 
2163 static const struct internalvar_funcs inferior_thread_count_funcs =
2164 {
2165   inferior_thread_count_make_value,
2166   NULL,
2167 };
2168 
2169 void _initialize_thread ();
2170 void
2171 _initialize_thread ()
2172 {
2173   static struct cmd_list_element *thread_apply_list = NULL;
2174   cmd_list_element *c;
2175 
2176   const auto info_threads_opts = make_info_threads_options_def_group (nullptr);
2177 
2178   /* Note: keep this "ID" in sync with what "info threads [TAB]"
2179      suggests.  */
2180   static std::string info_threads_help
2181     = gdb::option::build_help (_("\
2182 Display currently known threads.\n\
2183 Usage: info threads [OPTION]... [ID]...\n\
2184 If ID is given, it is a space-separated list of IDs of threads to display.\n\
2185 Otherwise, all threads are displayed.\n\
2186 \n\
2187 Options:\n\
2188 %OPTIONS%"),
2189 			       info_threads_opts);
2190 
2191   c = add_info ("threads", info_threads_command, info_threads_help.c_str ());
2192   set_cmd_completer_handle_brkchars (c, info_threads_command_completer);
2193 
2194   cmd_list_element *thread_cmd
2195     = add_prefix_cmd ("thread", class_run, thread_command, _("\
2196 Use this command to switch between threads.\n\
2197 The new thread ID must be currently known."),
2198 		      &thread_cmd_list, 1, &cmdlist);
2199 
2200   add_com_alias ("t", thread_cmd, class_run, 1);
2201 
2202 #define THREAD_APPLY_OPTION_HELP "\
2203 Prints per-inferior thread number and target system's thread id\n\
2204 followed by COMMAND output.\n\
2205 \n\
2206 By default, an error raised during the execution of COMMAND\n\
2207 aborts \"thread apply\".\n\
2208 \n\
2209 Options:\n\
2210 %OPTIONS%"
2211 
2212   const auto thread_apply_opts = make_thread_apply_options_def_group (nullptr);
2213 
2214   static std::string thread_apply_help = gdb::option::build_help (_("\
2215 Apply a command to a list of threads.\n\
2216 Usage: thread apply ID... [OPTION]... COMMAND\n\
2217 ID is a space-separated list of IDs of threads to apply COMMAND on.\n"
2218 THREAD_APPLY_OPTION_HELP),
2219 			       thread_apply_opts);
2220 
2221   c = add_prefix_cmd ("apply", class_run, thread_apply_command,
2222 		      thread_apply_help.c_str (),
2223 		      &thread_apply_list, 1,
2224 		      &thread_cmd_list);
2225   set_cmd_completer_handle_brkchars (c, thread_apply_command_completer);
2226 
2227   const auto thread_apply_all_opts
2228     = make_thread_apply_all_options_def_group (nullptr, nullptr);
2229 
2230   static std::string thread_apply_all_help = gdb::option::build_help (_("\
2231 Apply a command to all threads.\n\
2232 \n\
2233 Usage: thread apply all [OPTION]... COMMAND\n"
2234 THREAD_APPLY_OPTION_HELP),
2235 			       thread_apply_all_opts);
2236 
2237   c = add_cmd ("all", class_run, thread_apply_all_command,
2238 	       thread_apply_all_help.c_str (),
2239 	       &thread_apply_list);
2240   set_cmd_completer_handle_brkchars (c, thread_apply_all_command_completer);
2241 
2242   c = add_com ("taas", class_run, taas_command, _("\
2243 Apply a command to all threads (ignoring errors and empty output).\n\
2244 Usage: taas [OPTION]... COMMAND\n\
2245 shortcut for 'thread apply all -s [OPTION]... COMMAND'\n\
2246 See \"help thread apply all\" for available options."));
2247   set_cmd_completer_handle_brkchars (c, thread_apply_all_command_completer);
2248 
2249   c = add_com ("tfaas", class_run, tfaas_command, _("\
2250 Apply a command to all frames of all threads (ignoring errors and empty output).\n\
2251 Usage: tfaas [OPTION]... COMMAND\n\
2252 shortcut for 'thread apply all -s -- frame apply all -s [OPTION]... COMMAND'\n\
2253 See \"help frame apply all\" for available options."));
2254   set_cmd_completer_handle_brkchars (c, frame_apply_all_cmd_completer);
2255 
2256   add_cmd ("name", class_run, thread_name_command,
2257 	   _("Set the current thread's name.\n\
2258 Usage: thread name [NAME]\n\
2259 If NAME is not given, then any existing name is removed."), &thread_cmd_list);
2260 
2261   add_cmd ("find", class_run, thread_find_command, _("\
2262 Find threads that match a regular expression.\n\
2263 Usage: thread find REGEXP\n\
2264 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
2265 	   &thread_cmd_list);
2266 
2267   add_setshow_boolean_cmd ("thread-events", no_class,
2268 			   &print_thread_events, _("\
2269 Set printing of thread events (such as thread start and exit)."), _("\
2270 Show printing of thread events (such as thread start and exit)."), NULL,
2271 			   NULL,
2272 			   show_print_thread_events,
2273 			   &setprintlist, &showprintlist);
2274 
2275   add_setshow_boolean_cmd ("threads", class_maintenance, &debug_threads, _("\
2276 Set thread debugging."), _("\
2277 Show thread debugging."), _("\
2278 When on messages about thread creation and deletion are printed."),
2279 			   nullptr,
2280 			   show_debug_threads,
2281 			   &setdebuglist, &showdebuglist);
2282 
2283   create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
2284   create_internalvar_type_lazy ("_gthread", &gthread_funcs, NULL);
2285   create_internalvar_type_lazy ("_inferior_thread_count",
2286 				&inferior_thread_count_funcs, NULL);
2287 }
2288