Replace finish_thread_state_cleanup with a RAII class
[external/binutils.git] / gdb / thread.c
1 /* Multi-process/thread control for GDB, the GNU debugger.
2
3    Copyright (C) 1986-2018 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 "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 "gdb_regex.h"
43 #include "cli/cli-utils.h"
44 #include "thread-fsm.h"
45 #include "tid-parse.h"
46 #include <algorithm>
47 #include "common/gdb_optional.h"
48
49 /* Definition of struct thread_info exported to gdbthread.h.  */
50
51 /* Prototypes for local functions.  */
52
53 struct thread_info *thread_list = NULL;
54 static int highest_thread_num;
55
56 /* True if any thread is, or may be executing.  We need to track this
57    separately because until we fully sync the thread list, we won't
58    know whether the target is fully stopped, even if we see stop
59    events for all known threads, because any of those threads may have
60    spawned new threads we haven't heard of yet.  */
61 static int threads_executing;
62
63 static int thread_alive (struct thread_info *);
64
65 /* RAII type used to increase / decrease the refcount of each thread
66    in a given list of threads.  */
67
68 class scoped_inc_dec_ref
69 {
70 public:
71   explicit scoped_inc_dec_ref (const std::vector<thread_info *> &thrds)
72     : m_thrds (thrds)
73   {
74     for (thread_info *thr : m_thrds)
75       thr->incref ();
76   }
77
78   ~scoped_inc_dec_ref ()
79   {
80     for (thread_info *thr : m_thrds)
81       thr->decref ();
82   }
83
84 private:
85   const std::vector<thread_info *> &m_thrds;
86 };
87
88
89 struct thread_info*
90 inferior_thread (void)
91 {
92   struct thread_info *tp = find_thread_ptid (inferior_ptid);
93   gdb_assert (tp);
94   return tp;
95 }
96
97 /* Delete the breakpoint pointed at by BP_P, if there's one.  */
98
99 static void
100 delete_thread_breakpoint (struct breakpoint **bp_p)
101 {
102   if (*bp_p != NULL)
103     {
104       delete_breakpoint (*bp_p);
105       *bp_p = NULL;
106     }
107 }
108
109 void
110 delete_step_resume_breakpoint (struct thread_info *tp)
111 {
112   if (tp != NULL)
113     delete_thread_breakpoint (&tp->control.step_resume_breakpoint);
114 }
115
116 void
117 delete_exception_resume_breakpoint (struct thread_info *tp)
118 {
119   if (tp != NULL)
120     delete_thread_breakpoint (&tp->control.exception_resume_breakpoint);
121 }
122
123 /* See gdbthread.h.  */
124
125 void
126 delete_single_step_breakpoints (struct thread_info *tp)
127 {
128   if (tp != NULL)
129     delete_thread_breakpoint (&tp->control.single_step_breakpoints);
130 }
131
132 /* Delete the breakpoint pointed at by BP_P at the next stop, if
133    there's one.  */
134
135 static void
136 delete_at_next_stop (struct breakpoint **bp)
137 {
138   if (*bp != NULL)
139     {
140       (*bp)->disposition = disp_del_at_next_stop;
141       *bp = NULL;
142     }
143 }
144
145 /* See gdbthread.h.  */
146
147 int
148 thread_has_single_step_breakpoints_set (struct thread_info *tp)
149 {
150   return tp->control.single_step_breakpoints != NULL;
151 }
152
153 /* See gdbthread.h.  */
154
155 int
156 thread_has_single_step_breakpoint_here (struct thread_info *tp,
157                                         const address_space *aspace,
158                                         CORE_ADDR addr)
159 {
160   struct breakpoint *ss_bps = tp->control.single_step_breakpoints;
161
162   return (ss_bps != NULL
163           && breakpoint_has_location_inserted_here (ss_bps, aspace, addr));
164 }
165
166 /* See gdbthread.h.  */
167
168 void
169 thread_cancel_execution_command (struct thread_info *thr)
170 {
171   if (thr->thread_fsm != NULL)
172     {
173       thread_fsm_clean_up (thr->thread_fsm, thr);
174       thread_fsm_delete (thr->thread_fsm);
175       thr->thread_fsm = NULL;
176     }
177 }
178
179 static void
180 clear_thread_inferior_resources (struct thread_info *tp)
181 {
182   /* NOTE: this will take care of any left-over step_resume breakpoints,
183      but not any user-specified thread-specific breakpoints.  We can not
184      delete the breakpoint straight-off, because the inferior might not
185      be stopped at the moment.  */
186   delete_at_next_stop (&tp->control.step_resume_breakpoint);
187   delete_at_next_stop (&tp->control.exception_resume_breakpoint);
188   delete_at_next_stop (&tp->control.single_step_breakpoints);
189
190   delete_longjmp_breakpoint_at_next_stop (tp->global_num);
191
192   bpstat_clear (&tp->control.stop_bpstat);
193
194   btrace_teardown (tp);
195
196   thread_cancel_execution_command (tp);
197 }
198
199 /* Set the TP's state as exited.  */
200
201 static void
202 set_thread_exited (thread_info *tp, int silent)
203 {
204   /* Dead threads don't need to step-over.  Remove from queue.  */
205   if (tp->step_over_next != NULL)
206     thread_step_over_chain_remove (tp);
207
208   if (tp->state != THREAD_EXITED)
209     {
210       gdb::observers::thread_exit.notify (tp, silent);
211
212       /* Tag it as exited.  */
213       tp->state = THREAD_EXITED;
214
215       /* Clear breakpoints, etc. associated with this thread.  */
216       clear_thread_inferior_resources (tp);
217     }
218 }
219
220 void
221 init_thread_list (void)
222 {
223   struct thread_info *tp, *tpnext;
224
225   highest_thread_num = 0;
226
227   if (!thread_list)
228     return;
229
230   for (tp = thread_list; tp; tp = tpnext)
231     {
232       tpnext = tp->next;
233       if (tp->deletable ())
234         delete tp;
235       else
236         set_thread_exited (tp, 1);
237     }
238
239   thread_list = NULL;
240   threads_executing = 0;
241 }
242
243 /* Allocate a new thread of inferior INF with target id PTID and add
244    it to the thread list.  */
245
246 static struct thread_info *
247 new_thread (struct inferior *inf, ptid_t ptid)
248 {
249   thread_info *tp = new thread_info (inf, ptid);
250
251   if (thread_list == NULL)
252     thread_list = tp;
253   else
254     {
255       struct thread_info *last;
256
257       for (last = thread_list; last->next != NULL; last = last->next)
258         ;
259       last->next = tp;
260     }
261
262   return tp;
263 }
264
265 struct thread_info *
266 add_thread_silent (ptid_t ptid)
267 {
268   struct thread_info *tp;
269   struct inferior *inf = find_inferior_ptid (ptid);
270   gdb_assert (inf != NULL);
271
272   tp = find_thread_ptid (ptid);
273   if (tp)
274     /* Found an old thread with the same id.  It has to be dead,
275        otherwise we wouldn't be adding a new thread with the same id.
276        The OS is reusing this id --- delete it, and recreate a new
277        one.  */
278     {
279       /* In addition to deleting the thread, if this is the current
280          thread, then we need to take care that delete_thread doesn't
281          really delete the thread if it is inferior_ptid.  Create a
282          new template thread in the list with an invalid ptid, switch
283          to it, delete the original thread, reset the new thread's
284          ptid, and switch to it.  */
285
286       if (inferior_ptid == ptid)
287         {
288           tp = new_thread (inf, null_ptid);
289
290           /* Make switch_to_thread not read from the thread.  */
291           tp->state = THREAD_EXITED;
292           switch_to_thread (null_ptid);
293
294           /* Now we can delete it.  */
295           delete_thread (ptid);
296
297           /* Now reset its ptid, and reswitch inferior_ptid to it.  */
298           tp->ptid = ptid;
299           tp->state = THREAD_STOPPED;
300           switch_to_thread (ptid);
301
302           gdb::observers::new_thread.notify (tp);
303
304           /* All done.  */
305           return tp;
306         }
307       else
308         /* Just go ahead and delete it.  */
309         delete_thread (ptid);
310     }
311
312   tp = new_thread (inf, ptid);
313   gdb::observers::new_thread.notify (tp);
314
315   return tp;
316 }
317
318 struct thread_info *
319 add_thread_with_info (ptid_t ptid, private_thread_info *priv)
320 {
321   struct thread_info *result = add_thread_silent (ptid);
322
323   result->priv.reset (priv);
324
325   if (print_thread_events)
326     printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid));
327
328   annotate_new_thread ();
329   return result;
330 }
331
332 struct thread_info *
333 add_thread (ptid_t ptid)
334 {
335   return add_thread_with_info (ptid, NULL);
336 }
337
338 private_thread_info::~private_thread_info () = default;
339
340 thread_info::thread_info (struct inferior *inf_, ptid_t ptid_)
341   : ptid (ptid_), inf (inf_)
342 {
343   gdb_assert (inf_ != NULL);
344
345   this->global_num = ++highest_thread_num;
346   this->per_inf_num = ++inf_->highest_thread_num;
347
348   /* Nothing to follow yet.  */
349   memset (&this->pending_follow, 0, sizeof (this->pending_follow));
350   this->pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
351   this->suspend.waitstatus.kind = TARGET_WAITKIND_IGNORE;
352 }
353
354 thread_info::~thread_info ()
355 {
356   xfree (this->name);
357 }
358
359 /* Add TP to the end of the step-over chain LIST_P.  */
360
361 static void
362 step_over_chain_enqueue (struct thread_info **list_p, struct thread_info *tp)
363 {
364   gdb_assert (tp->step_over_next == NULL);
365   gdb_assert (tp->step_over_prev == NULL);
366
367   if (*list_p == NULL)
368     {
369       *list_p = tp;
370       tp->step_over_prev = tp->step_over_next = tp;
371     }
372   else
373     {
374       struct thread_info *head = *list_p;
375       struct thread_info *tail = head->step_over_prev;
376
377       tp->step_over_prev = tail;
378       tp->step_over_next = head;
379       head->step_over_prev = tp;
380       tail->step_over_next = tp;
381     }
382 }
383
384 /* Remove TP from step-over chain LIST_P.  */
385
386 static void
387 step_over_chain_remove (struct thread_info **list_p, struct thread_info *tp)
388 {
389   gdb_assert (tp->step_over_next != NULL);
390   gdb_assert (tp->step_over_prev != NULL);
391
392   if (*list_p == tp)
393     {
394       if (tp == tp->step_over_next)
395         *list_p = NULL;
396       else
397         *list_p = tp->step_over_next;
398     }
399
400   tp->step_over_prev->step_over_next = tp->step_over_next;
401   tp->step_over_next->step_over_prev = tp->step_over_prev;
402   tp->step_over_prev = tp->step_over_next = NULL;
403 }
404
405 /* See gdbthread.h.  */
406
407 struct thread_info *
408 thread_step_over_chain_next (struct thread_info *tp)
409 {
410   struct thread_info *next = tp->step_over_next;
411
412   return (next == step_over_queue_head ? NULL : next);
413 }
414
415 /* See gdbthread.h.  */
416
417 int
418 thread_is_in_step_over_chain (struct thread_info *tp)
419 {
420   return (tp->step_over_next != NULL);
421 }
422
423 /* See gdbthread.h.  */
424
425 void
426 thread_step_over_chain_enqueue (struct thread_info *tp)
427 {
428   step_over_chain_enqueue (&step_over_queue_head, tp);
429 }
430
431 /* See gdbthread.h.  */
432
433 void
434 thread_step_over_chain_remove (struct thread_info *tp)
435 {
436   step_over_chain_remove (&step_over_queue_head, tp);
437 }
438
439 /* Delete thread PTID.  If SILENT, don't notify the observer of this
440    exit.  */
441 static void
442 delete_thread_1 (ptid_t ptid, int silent)
443 {
444   struct thread_info *tp, *tpprev;
445
446   tpprev = NULL;
447
448   for (tp = thread_list; tp; tpprev = tp, tp = tp->next)
449     if (tp->ptid == ptid)
450       break;
451
452   if (!tp)
453     return;
454
455   set_thread_exited (tp, silent);
456
457   if (!tp->deletable ())
458     {
459        /* Will be really deleted some other time.  */
460        return;
461      }
462
463   if (tpprev)
464     tpprev->next = tp->next;
465   else
466     thread_list = tp->next;
467
468   delete tp;
469 }
470
471 /* Delete thread PTID and notify of thread exit.  If this is
472    inferior_ptid, don't actually delete it, but tag it as exited and
473    do the notification.  If PTID is the user selected thread, clear
474    it.  */
475 void
476 delete_thread (ptid_t ptid)
477 {
478   delete_thread_1 (ptid, 0 /* not silent */);
479 }
480
481 void
482 delete_thread_silent (ptid_t ptid)
483 {
484   delete_thread_1 (ptid, 1 /* silent */);
485 }
486
487 struct thread_info *
488 find_thread_global_id (int global_id)
489 {
490   struct thread_info *tp;
491
492   for (tp = thread_list; tp; tp = tp->next)
493     if (tp->global_num == global_id)
494       return tp;
495
496   return NULL;
497 }
498
499 static struct thread_info *
500 find_thread_id (struct inferior *inf, int thr_num)
501 {
502   struct thread_info *tp;
503
504   for (tp = thread_list; tp; tp = tp->next)
505     if (tp->inf == inf && tp->per_inf_num == thr_num)
506       return tp;
507
508   return NULL;
509 }
510
511 /* Find a thread_info by matching PTID.  */
512
513 struct thread_info *
514 find_thread_ptid (ptid_t ptid)
515 {
516   struct thread_info *tp;
517
518   for (tp = thread_list; tp; tp = tp->next)
519     if (tp->ptid == ptid)
520       return tp;
521
522   return NULL;
523 }
524
525 /* See gdbthread.h.  */
526
527 struct thread_info *
528 find_thread_by_handle (struct value *thread_handle, struct inferior *inf)
529 {
530   return target_thread_handle_to_thread_info
531            (value_contents_all (thread_handle),
532             TYPE_LENGTH (value_type (thread_handle)),
533             inf);
534 }
535
536 /*
537  * Thread iterator function.
538  *
539  * Calls a callback function once for each thread, so long as
540  * the callback function returns false.  If the callback function
541  * returns true, the iteration will end and the current thread
542  * will be returned.  This can be useful for implementing a
543  * search for a thread with arbitrary attributes, or for applying
544  * some operation to every thread.
545  *
546  * FIXME: some of the existing functionality, such as
547  * "Thread apply all", might be rewritten using this functionality.
548  */
549
550 struct thread_info *
551 iterate_over_threads (int (*callback) (struct thread_info *, void *),
552                       void *data)
553 {
554   struct thread_info *tp, *next;
555
556   for (tp = thread_list; tp; tp = next)
557     {
558       next = tp->next;
559       if ((*callback) (tp, data))
560         return tp;
561     }
562
563   return NULL;
564 }
565
566 int
567 thread_count (void)
568 {
569   int result = 0;
570   struct thread_info *tp;
571
572   for (tp = thread_list; tp; tp = tp->next)
573     ++result;
574
575   return result;
576 }
577
578 /* Return the number of non-exited threads in the thread list.  */
579
580 static int
581 live_threads_count (void)
582 {
583   int result = 0;
584   struct thread_info *tp;
585
586   ALL_NON_EXITED_THREADS (tp)
587     ++result;
588
589   return result;
590 }
591
592 int
593 valid_global_thread_id (int global_id)
594 {
595   struct thread_info *tp;
596
597   for (tp = thread_list; tp; tp = tp->next)
598     if (tp->global_num == global_id)
599       return 1;
600
601   return 0;
602 }
603
604 int
605 ptid_to_global_thread_id (ptid_t ptid)
606 {
607   struct thread_info *tp;
608
609   for (tp = thread_list; tp; tp = tp->next)
610     if (tp->ptid == ptid)
611       return tp->global_num;
612
613   return 0;
614 }
615
616 ptid_t
617 global_thread_id_to_ptid (int global_id)
618 {
619   struct thread_info *thread = find_thread_global_id (global_id);
620
621   if (thread)
622     return thread->ptid;
623   else
624     return minus_one_ptid;
625 }
626
627 int
628 in_thread_list (ptid_t ptid)
629 {
630   struct thread_info *tp;
631
632   for (tp = thread_list; tp; tp = tp->next)
633     if (tp->ptid == ptid)
634       return 1;
635
636   return 0;                     /* Never heard of 'im.  */
637 }
638
639 /* Finds the first thread of the inferior given by PID.  If PID is -1,
640    return the first thread in the list.  */
641
642 struct thread_info *
643 first_thread_of_process (int pid)
644 {
645   struct thread_info *tp, *ret = NULL;
646
647   for (tp = thread_list; tp; tp = tp->next)
648     if (pid == -1 || ptid_get_pid (tp->ptid) == pid)
649       if (ret == NULL || tp->global_num < ret->global_num)
650         ret = tp;
651
652   return ret;
653 }
654
655 struct thread_info *
656 any_thread_of_process (int pid)
657 {
658   struct thread_info *tp;
659
660   gdb_assert (pid != 0);
661
662   /* Prefer the current thread.  */
663   if (ptid_get_pid (inferior_ptid) == pid)
664     return inferior_thread ();
665
666   ALL_NON_EXITED_THREADS (tp)
667     if (ptid_get_pid (tp->ptid) == pid)
668       return tp;
669
670   return NULL;
671 }
672
673 struct thread_info *
674 any_live_thread_of_process (int pid)
675 {
676   struct thread_info *curr_tp = NULL;
677   struct thread_info *tp;
678   struct thread_info *tp_executing = NULL;
679
680   gdb_assert (pid != 0);
681
682   /* Prefer the current thread if it's not executing.  */
683   if (ptid_get_pid (inferior_ptid) == pid)
684     {
685       /* If the current thread is dead, forget it.  If it's not
686          executing, use it.  Otherwise, still choose it (below), but
687          only if no other non-executing thread is found.  */
688       curr_tp = inferior_thread ();
689       if (curr_tp->state == THREAD_EXITED)
690         curr_tp = NULL;
691       else if (!curr_tp->executing)
692         return curr_tp;
693     }
694
695   ALL_NON_EXITED_THREADS (tp)
696     if (ptid_get_pid (tp->ptid) == pid)
697       {
698         if (!tp->executing)
699           return tp;
700
701         tp_executing = tp;
702       }
703
704   /* If both the current thread and all live threads are executing,
705      prefer the current thread.  */
706   if (curr_tp != NULL)
707     return curr_tp;
708
709   /* Otherwise, just return an executing thread, if any.  */
710   return tp_executing;
711 }
712
713 /* Return true if TP is an active thread.  */
714 static int
715 thread_alive (struct thread_info *tp)
716 {
717   if (tp->state == THREAD_EXITED)
718     return 0;
719   if (!target_thread_alive (tp->ptid))
720     return 0;
721   return 1;
722 }
723
724 /* See gdbthreads.h.  */
725
726 void
727 prune_threads (void)
728 {
729   struct thread_info *tp, *tmp;
730
731   ALL_THREADS_SAFE (tp, tmp)
732     {
733       if (!thread_alive (tp))
734         delete_thread (tp->ptid);
735     }
736 }
737
738 /* See gdbthreads.h.  */
739
740 void
741 delete_exited_threads (void)
742 {
743   struct thread_info *tp, *tmp;
744
745   ALL_THREADS_SAFE (tp, tmp)
746     {
747       if (tp->state == THREAD_EXITED)
748         delete_thread (tp->ptid);
749     }
750 }
751
752 /* Return true value if stack temporaies are enabled for the thread
753    with id PTID.  */
754
755 bool
756 thread_stack_temporaries_enabled_p (ptid_t ptid)
757 {
758   struct thread_info *tp = find_thread_ptid (ptid);
759
760   if (tp == NULL)
761     return false;
762   else
763     return tp->stack_temporaries_enabled;
764 }
765
766 /* Push V on to the stack temporaries of the thread with id PTID.  */
767
768 void
769 push_thread_stack_temporary (ptid_t ptid, struct value *v)
770 {
771   struct thread_info *tp = find_thread_ptid (ptid);
772
773   gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
774   tp->stack_temporaries.push_back (v);
775 }
776
777 /* Return true if VAL is among the stack temporaries of the thread
778    with id PTID.  Return false otherwise.  */
779
780 bool
781 value_in_thread_stack_temporaries (struct value *val, ptid_t ptid)
782 {
783   struct thread_info *tp = find_thread_ptid (ptid);
784
785   gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
786   for (struct value *v : tp->stack_temporaries)
787     if (v == val)
788       return true;
789
790   return false;
791 }
792
793 /* Return the last of the stack temporaries for thread with id PTID.
794    Return NULL if there are no stack temporaries for the thread.  */
795
796 struct value *
797 get_last_thread_stack_temporary (ptid_t ptid)
798 {
799   struct value *lastval = NULL;
800   struct thread_info *tp = find_thread_ptid (ptid);
801
802   gdb_assert (tp != NULL);
803   if (!tp->stack_temporaries.empty ())
804     lastval = tp->stack_temporaries.back ();
805
806   return lastval;
807 }
808
809 void
810 thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid)
811 {
812   struct inferior *inf;
813   struct thread_info *tp;
814
815   /* It can happen that what we knew as the target inferior id
816      changes.  E.g, target remote may only discover the remote process
817      pid after adding the inferior to GDB's list.  */
818   inf = find_inferior_ptid (old_ptid);
819   inf->pid = ptid_get_pid (new_ptid);
820
821   tp = find_thread_ptid (old_ptid);
822   tp->ptid = new_ptid;
823
824   gdb::observers::thread_ptid_changed.notify (old_ptid, new_ptid);
825 }
826
827 /* See gdbthread.h.  */
828
829 void
830 set_resumed (ptid_t ptid, int resumed)
831 {
832   struct thread_info *tp;
833   int all = ptid == minus_one_ptid;
834
835   if (all || ptid_is_pid (ptid))
836     {
837       for (tp = thread_list; tp; tp = tp->next)
838         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
839           tp->resumed = resumed;
840     }
841   else
842     {
843       tp = find_thread_ptid (ptid);
844       gdb_assert (tp != NULL);
845       tp->resumed = resumed;
846     }
847 }
848
849 /* Helper for set_running, that marks one thread either running or
850    stopped.  */
851
852 static int
853 set_running_thread (struct thread_info *tp, int running)
854 {
855   int started = 0;
856
857   if (running && tp->state == THREAD_STOPPED)
858     started = 1;
859   tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
860
861   if (!running)
862     {
863       /* If the thread is now marked stopped, remove it from
864          the step-over queue, so that we don't try to resume
865          it until the user wants it to.  */
866       if (tp->step_over_next != NULL)
867         thread_step_over_chain_remove (tp);
868     }
869
870   return started;
871 }
872
873 void
874 set_running (ptid_t ptid, int running)
875 {
876   struct thread_info *tp;
877   int all = ptid == minus_one_ptid;
878   int any_started = 0;
879
880   /* We try not to notify the observer if no thread has actually changed
881      the running state -- merely to reduce the number of messages to
882      frontend.  Frontend is supposed to handle multiple *running just fine.  */
883   if (all || ptid_is_pid (ptid))
884     {
885       for (tp = thread_list; tp; tp = tp->next)
886         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
887           {
888             if (tp->state == THREAD_EXITED)
889               continue;
890
891             if (set_running_thread (tp, running))
892               any_started = 1;
893           }
894     }
895   else
896     {
897       tp = find_thread_ptid (ptid);
898       gdb_assert (tp != NULL);
899       gdb_assert (tp->state != THREAD_EXITED);
900       if (set_running_thread (tp, running))
901         any_started = 1;
902     }
903   if (any_started)
904     gdb::observers::target_resumed.notify (ptid);
905 }
906
907 static int
908 is_thread_state (ptid_t ptid, enum thread_state state)
909 {
910   struct thread_info *tp;
911
912   tp = find_thread_ptid (ptid);
913   gdb_assert (tp);
914   return tp->state == state;
915 }
916
917 int
918 is_stopped (ptid_t ptid)
919 {
920   return is_thread_state (ptid, THREAD_STOPPED);
921 }
922
923 int
924 is_exited (ptid_t ptid)
925 {
926   return is_thread_state (ptid, THREAD_EXITED);
927 }
928
929 int
930 is_running (ptid_t ptid)
931 {
932   return is_thread_state (ptid, THREAD_RUNNING);
933 }
934
935 int
936 is_executing (ptid_t ptid)
937 {
938   struct thread_info *tp;
939
940   tp = find_thread_ptid (ptid);
941   gdb_assert (tp);
942   return tp->executing;
943 }
944
945 void
946 set_executing (ptid_t ptid, int executing)
947 {
948   struct thread_info *tp;
949   int all = ptid == minus_one_ptid;
950
951   if (all || ptid_is_pid (ptid))
952     {
953       for (tp = thread_list; tp; tp = tp->next)
954         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
955           tp->executing = executing;
956     }
957   else
958     {
959       tp = find_thread_ptid (ptid);
960       gdb_assert (tp);
961       tp->executing = executing;
962     }
963
964   /* It only takes one running thread to spawn more threads.*/
965   if (executing)
966     threads_executing = 1;
967   /* Only clear the flag if the caller is telling us everything is
968      stopped.  */
969   else if (minus_one_ptid == ptid)
970     threads_executing = 0;
971 }
972
973 /* See gdbthread.h.  */
974
975 int
976 threads_are_executing (void)
977 {
978   return threads_executing;
979 }
980
981 void
982 set_stop_requested (ptid_t ptid, int stop)
983 {
984   struct thread_info *tp;
985   int all = ptid == minus_one_ptid;
986
987   if (all || ptid_is_pid (ptid))
988     {
989       for (tp = thread_list; tp; tp = tp->next)
990         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
991           tp->stop_requested = stop;
992     }
993   else
994     {
995       tp = find_thread_ptid (ptid);
996       gdb_assert (tp);
997       tp->stop_requested = stop;
998     }
999
1000   /* Call the stop requested observer so other components of GDB can
1001      react to this request.  */
1002   if (stop)
1003     gdb::observers::thread_stop_requested.notify (ptid);
1004 }
1005
1006 void
1007 finish_thread_state (ptid_t ptid)
1008 {
1009   struct thread_info *tp;
1010   int all;
1011   int any_started = 0;
1012
1013   all = ptid == minus_one_ptid;
1014
1015   if (all || ptid_is_pid (ptid))
1016     {
1017       for (tp = thread_list; tp; tp = tp->next)
1018         {
1019           if (tp->state == THREAD_EXITED)
1020             continue;
1021           if (all || ptid_get_pid (ptid) == ptid_get_pid (tp->ptid))
1022             {
1023               if (set_running_thread (tp, tp->executing))
1024                 any_started = 1;
1025             }
1026         }
1027     }
1028   else
1029     {
1030       tp = find_thread_ptid (ptid);
1031       gdb_assert (tp);
1032       if (tp->state != THREAD_EXITED)
1033         {
1034           if (set_running_thread (tp, tp->executing))
1035             any_started = 1;
1036         }
1037     }
1038
1039   if (any_started)
1040     gdb::observers::target_resumed.notify (ptid);
1041 }
1042
1043 /* See gdbthread.h.  */
1044
1045 void
1046 validate_registers_access (void)
1047 {
1048   /* No selected thread, no registers.  */
1049   if (inferior_ptid == null_ptid)
1050     error (_("No thread selected."));
1051
1052   /* Don't try to read from a dead thread.  */
1053   if (is_exited (inferior_ptid))
1054     error (_("The current thread has terminated"));
1055
1056   /* ... or from a spinning thread.  FIXME: This isn't actually fully
1057      correct.  It'll allow an user-requested access (e.g., "print $pc"
1058      at the prompt) when a thread is not executing for some internal
1059      reason, but is marked running from the user's perspective.  E.g.,
1060      the thread is waiting for its turn in the step-over queue.  */
1061   if (is_executing (inferior_ptid))
1062     error (_("Selected thread is running."));
1063 }
1064
1065 /* See gdbthread.h.  */
1066
1067 bool
1068 can_access_registers_ptid (ptid_t ptid)
1069 {
1070   /* No thread, no registers.  */
1071   if (ptid == null_ptid)
1072     return false;
1073
1074   /* Don't try to read from a dead thread.  */
1075   if (is_exited (ptid))
1076     return false;
1077
1078   /* ... or from a spinning thread.  FIXME: see validate_registers_access.  */
1079   if (is_executing (ptid))
1080     return false;
1081
1082   return true;
1083 }
1084
1085 int
1086 pc_in_thread_step_range (CORE_ADDR pc, struct thread_info *thread)
1087 {
1088   return (pc >= thread->control.step_range_start
1089           && pc < thread->control.step_range_end);
1090 }
1091
1092 /* Helper for print_thread_info.  Returns true if THR should be
1093    printed.  If REQUESTED_THREADS, a list of GDB ids/ranges, is not
1094    NULL, only print THR if its ID is included in the list.  GLOBAL_IDS
1095    is true if REQUESTED_THREADS is list of global IDs, false if a list
1096    of per-inferior thread ids.  If PID is not -1, only print THR if it
1097    is a thread from the process PID.  Otherwise, threads from all
1098    attached PIDs are printed.  If both REQUESTED_THREADS is not NULL
1099    and PID is not -1, then the thread is printed if it belongs to the
1100    specified process.  Otherwise, an error is raised.  */
1101
1102 static int
1103 should_print_thread (const char *requested_threads, int default_inf_num,
1104                      int global_ids, int pid, struct thread_info *thr)
1105 {
1106   if (requested_threads != NULL && *requested_threads != '\0')
1107     {
1108       int in_list;
1109
1110       if (global_ids)
1111         in_list = number_is_in_list (requested_threads, thr->global_num);
1112       else
1113         in_list = tid_is_in_list (requested_threads, default_inf_num,
1114                                   thr->inf->num, thr->per_inf_num);
1115       if (!in_list)
1116         return 0;
1117     }
1118
1119   if (pid != -1 && ptid_get_pid (thr->ptid) != pid)
1120     {
1121       if (requested_threads != NULL && *requested_threads != '\0')
1122         error (_("Requested thread not found in requested process"));
1123       return 0;
1124     }
1125
1126   if (thr->state == THREAD_EXITED)
1127     return 0;
1128
1129   return 1;
1130 }
1131
1132 /* Like print_thread_info, but in addition, GLOBAL_IDS indicates
1133    whether REQUESTED_THREADS is a list of global or per-inferior
1134    thread ids.  */
1135
1136 static void
1137 print_thread_info_1 (struct ui_out *uiout, const char *requested_threads,
1138                      int global_ids, int pid,
1139                      int show_global_ids)
1140 {
1141   struct thread_info *tp;
1142   ptid_t current_ptid;
1143   const char *extra_info, *name, *target_id;
1144   struct inferior *inf;
1145   int default_inf_num = current_inferior ()->num;
1146
1147   update_thread_list ();
1148   current_ptid = inferior_ptid;
1149
1150   {
1151     /* For backward compatibility, we make a list for MI.  A table is
1152        preferable for the CLI, though, because it shows table
1153        headers.  */
1154     gdb::optional<ui_out_emit_list> list_emitter;
1155     gdb::optional<ui_out_emit_table> table_emitter;
1156
1157     if (uiout->is_mi_like_p ())
1158       list_emitter.emplace (uiout, "threads");
1159     else
1160       {
1161         int n_threads = 0;
1162
1163         for (tp = thread_list; tp; tp = tp->next)
1164           {
1165             if (!should_print_thread (requested_threads, default_inf_num,
1166                                       global_ids, pid, tp))
1167               continue;
1168
1169             ++n_threads;
1170           }
1171
1172         if (n_threads == 0)
1173           {
1174             if (requested_threads == NULL || *requested_threads == '\0')
1175               uiout->message (_("No threads.\n"));
1176             else
1177               uiout->message (_("No threads match '%s'.\n"),
1178                               requested_threads);
1179             return;
1180           }
1181
1182         table_emitter.emplace (uiout, show_global_ids ? 5 : 4,
1183                                n_threads, "threads");
1184
1185         uiout->table_header (1, ui_left, "current", "");
1186         uiout->table_header (4, ui_left, "id-in-tg", "Id");
1187         if (show_global_ids)
1188           uiout->table_header (4, ui_left, "id", "GId");
1189         uiout->table_header (17, ui_left, "target-id", "Target Id");
1190         uiout->table_header (1, ui_left, "frame", "Frame");
1191         uiout->table_body ();
1192       }
1193
1194     /* We'll be switching threads temporarily.  */
1195     scoped_restore_current_thread restore_thread;
1196
1197     ALL_THREADS_BY_INFERIOR (inf, tp)
1198       {
1199         int core;
1200
1201         if (!should_print_thread (requested_threads, default_inf_num,
1202                                   global_ids, pid, tp))
1203           continue;
1204
1205         ui_out_emit_tuple tuple_emitter (uiout, NULL);
1206
1207         if (!uiout->is_mi_like_p ())
1208           {
1209             if (tp->ptid == current_ptid)
1210               uiout->field_string ("current", "*");
1211             else
1212               uiout->field_skip ("current");
1213
1214             uiout->field_string ("id-in-tg", print_thread_id (tp));
1215           }
1216
1217         if (show_global_ids || uiout->is_mi_like_p ())
1218           uiout->field_int ("id", tp->global_num);
1219
1220         /* For the CLI, we stuff everything into the target-id field.
1221            This is a gross hack to make the output come out looking
1222            correct.  The underlying problem here is that ui-out has no
1223            way to specify that a field's space allocation should be
1224            shared by several fields.  For MI, we do the right thing
1225            instead.  */
1226
1227         target_id = target_pid_to_str (tp->ptid);
1228         extra_info = target_extra_thread_info (tp);
1229         name = tp->name ? tp->name : target_thread_name (tp);
1230
1231         if (uiout->is_mi_like_p ())
1232           {
1233             uiout->field_string ("target-id", target_id);
1234             if (extra_info)
1235               uiout->field_string ("details", extra_info);
1236             if (name)
1237               uiout->field_string ("name", name);
1238           }
1239         else
1240           {
1241             std::string contents;
1242
1243             if (extra_info && name)
1244               contents = string_printf ("%s \"%s\" (%s)", target_id,
1245                                         name, extra_info);
1246             else if (extra_info)
1247               contents = string_printf ("%s (%s)", target_id, extra_info);
1248             else if (name)
1249               contents = string_printf ("%s \"%s\"", target_id, name);
1250             else
1251               contents = target_id;
1252
1253             uiout->field_string ("target-id", contents.c_str ());
1254           }
1255
1256         if (tp->state == THREAD_RUNNING)
1257           uiout->text ("(running)\n");
1258         else
1259           {
1260             /* The switch below puts us at the top of the stack (leaf
1261                frame).  */
1262             switch_to_thread (tp->ptid);
1263             print_stack_frame (get_selected_frame (NULL),
1264                                /* For MI output, print frame level.  */
1265                                uiout->is_mi_like_p (),
1266                                LOCATION, 0);
1267           }
1268
1269         if (uiout->is_mi_like_p ())
1270           {
1271             const char *state = "stopped";
1272
1273             if (tp->state == THREAD_RUNNING)
1274               state = "running";
1275             uiout->field_string ("state", state);
1276           }
1277
1278         core = target_core_of_thread (tp->ptid);
1279         if (uiout->is_mi_like_p () && core != -1)
1280           uiout->field_int ("core", core);
1281       }
1282
1283     /* This end scope restores the current thread and the frame
1284        selected before the "info threads" command, and it finishes the
1285        ui-out list or table.  */
1286   }
1287
1288   if (pid == -1 && requested_threads == NULL)
1289     {
1290       if (uiout->is_mi_like_p ()
1291           && inferior_ptid != null_ptid)
1292         {
1293           int num = ptid_to_global_thread_id (inferior_ptid);
1294
1295           gdb_assert (num != 0);
1296           uiout->field_int ("current-thread-id", num);
1297         }
1298
1299       if (inferior_ptid != null_ptid && is_exited (inferior_ptid))
1300         uiout->message ("\n\
1301 The current thread <Thread ID %s> has terminated.  See `help thread'.\n",
1302                         print_thread_id (inferior_thread ()));
1303       else if (thread_list != NULL && inferior_ptid == null_ptid)
1304         uiout->message ("\n\
1305 No selected thread.  See `help thread'.\n");
1306     }
1307 }
1308
1309 /* See gdbthread.h.  */
1310
1311 void
1312 print_thread_info (struct ui_out *uiout, char *requested_threads, int pid)
1313 {
1314   print_thread_info_1 (uiout, requested_threads, 1, pid, 0);
1315 }
1316
1317 /* Implementation of the "info threads" command.
1318
1319    Note: this has the drawback that it _really_ switches
1320          threads, which frees the frame cache.  A no-side
1321          effects info-threads command would be nicer.  */
1322
1323 static void
1324 info_threads_command (const char *arg, int from_tty)
1325 {
1326   int show_global_ids = 0;
1327
1328   if (arg != NULL
1329       && check_for_argument (&arg, "-gid", sizeof ("-gid") - 1))
1330     {
1331       arg = skip_spaces (arg);
1332       show_global_ids = 1;
1333     }
1334
1335   print_thread_info_1 (current_uiout, arg, 0, -1, show_global_ids);
1336 }
1337
1338 /* See gdbthread.h.  */
1339
1340 void
1341 switch_to_thread_no_regs (struct thread_info *thread)
1342 {
1343   struct inferior *inf = thread->inf;
1344
1345   set_current_program_space (inf->pspace);
1346   set_current_inferior (inf);
1347
1348   inferior_ptid = thread->ptid;
1349   stop_pc = ~(CORE_ADDR) 0;
1350 }
1351
1352 /* Switch to no thread selected.  */
1353
1354 static void
1355 switch_to_no_thread ()
1356 {
1357   if (inferior_ptid == null_ptid)
1358     return;
1359
1360   inferior_ptid = null_ptid;
1361   reinit_frame_cache ();
1362   stop_pc = ~(CORE_ADDR) 0;
1363 }
1364
1365 /* Switch from one thread to another.  */
1366
1367 static void
1368 switch_to_thread (thread_info *thr)
1369 {
1370   gdb_assert (thr != NULL);
1371
1372   if (inferior_ptid == thr->ptid)
1373     return;
1374
1375   switch_to_thread_no_regs (thr);
1376
1377   reinit_frame_cache ();
1378
1379   /* We don't check for is_stopped, because we're called at times
1380      while in the TARGET_RUNNING state, e.g., while handling an
1381      internal event.  */
1382   if (thr->state != THREAD_EXITED
1383       && !thr->executing)
1384     stop_pc = regcache_read_pc (get_thread_regcache (thr->ptid));
1385 }
1386
1387 /* See gdbthread.h.  */
1388
1389 void
1390 switch_to_thread (ptid_t ptid)
1391 {
1392   if (ptid == null_ptid)
1393     switch_to_no_thread ();
1394   else
1395     switch_to_thread (find_thread_ptid (ptid));
1396 }
1397
1398 static void
1399 restore_selected_frame (struct frame_id a_frame_id, int frame_level)
1400 {
1401   struct frame_info *frame = NULL;
1402   int count;
1403
1404   /* This means there was no selected frame.  */
1405   if (frame_level == -1)
1406     {
1407       select_frame (NULL);
1408       return;
1409     }
1410
1411   gdb_assert (frame_level >= 0);
1412
1413   /* Restore by level first, check if the frame id is the same as
1414      expected.  If that fails, try restoring by frame id.  If that
1415      fails, nothing to do, just warn the user.  */
1416
1417   count = frame_level;
1418   frame = find_relative_frame (get_current_frame (), &count);
1419   if (count == 0
1420       && frame != NULL
1421       /* The frame ids must match - either both valid or both outer_frame_id.
1422          The latter case is not failsafe, but since it's highly unlikely
1423          the search by level finds the wrong frame, it's 99.9(9)% of
1424          the time (for all practical purposes) safe.  */
1425       && frame_id_eq (get_frame_id (frame), a_frame_id))
1426     {
1427       /* Cool, all is fine.  */
1428       select_frame (frame);
1429       return;
1430     }
1431
1432   frame = frame_find_by_id (a_frame_id);
1433   if (frame != NULL)
1434     {
1435       /* Cool, refound it.  */
1436       select_frame (frame);
1437       return;
1438     }
1439
1440   /* Nothing else to do, the frame layout really changed.  Select the
1441      innermost stack frame.  */
1442   select_frame (get_current_frame ());
1443
1444   /* Warn the user.  */
1445   if (frame_level > 0 && !current_uiout->is_mi_like_p ())
1446     {
1447       warning (_("Couldn't restore frame #%d in "
1448                  "current thread.  Bottom (innermost) frame selected:"),
1449                frame_level);
1450       /* For MI, we should probably have a notification about
1451          current frame change.  But this error is not very
1452          likely, so don't bother for now.  */
1453       print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
1454     }
1455 }
1456
1457 scoped_restore_current_thread::~scoped_restore_current_thread ()
1458 {
1459   /* If an entry of thread_info was previously selected, it won't be
1460      deleted because we've increased its refcount.  The thread represented
1461      by this thread_info entry may have already exited (due to normal exit,
1462      detach, etc), so the thread_info.state is THREAD_EXITED.  */
1463   if (m_thread != NULL
1464       /* If the previously selected thread belonged to a process that has
1465          in the mean time exited (or killed, detached, etc.), then don't revert
1466          back to it, but instead simply drop back to no thread selected.  */
1467       && m_inf->pid != 0)
1468     switch_to_thread (m_thread);
1469   else
1470     {
1471       switch_to_no_thread ();
1472       set_current_inferior (m_inf);
1473     }
1474
1475   /* The running state of the originally selected thread may have
1476      changed, so we have to recheck it here.  */
1477   if (inferior_ptid != null_ptid
1478       && m_was_stopped
1479       && is_stopped (inferior_ptid)
1480       && target_has_registers
1481       && target_has_stack
1482       && target_has_memory)
1483     restore_selected_frame (m_selected_frame_id, m_selected_frame_level);
1484
1485   if (m_thread != NULL)
1486     m_thread->decref ();
1487   m_inf->decref ();
1488 }
1489
1490 scoped_restore_current_thread::scoped_restore_current_thread ()
1491 {
1492   m_thread = NULL;
1493   m_inf = current_inferior ();
1494
1495   if (inferior_ptid != null_ptid)
1496     {
1497       thread_info *tp = find_thread_ptid (inferior_ptid);
1498       struct frame_info *frame;
1499
1500       gdb_assert (tp != NULL);
1501
1502       m_was_stopped = tp->state == THREAD_STOPPED;
1503       if (m_was_stopped
1504           && target_has_registers
1505           && target_has_stack
1506           && target_has_memory)
1507         {
1508           /* When processing internal events, there might not be a
1509              selected frame.  If we naively call get_selected_frame
1510              here, then we can end up reading debuginfo for the
1511              current frame, but we don't generally need the debuginfo
1512              at this point.  */
1513           frame = get_selected_frame_if_set ();
1514         }
1515       else
1516         frame = NULL;
1517
1518       m_selected_frame_id = get_frame_id (frame);
1519       m_selected_frame_level = frame_relative_level (frame);
1520
1521       tp->incref ();
1522       m_thread = tp;
1523     }
1524
1525   m_inf->incref ();
1526 }
1527
1528 /* See gdbthread.h.  */
1529
1530 int
1531 show_thread_that_caused_stop (void)
1532 {
1533   return highest_thread_num > 1;
1534 }
1535
1536 /* See gdbthread.h.  */
1537
1538 int
1539 show_inferior_qualified_tids (void)
1540 {
1541   return (inferior_list->next != NULL || inferior_list->num != 1);
1542 }
1543
1544 /* See gdbthread.h.  */
1545
1546 const char *
1547 print_thread_id (struct thread_info *thr)
1548 {
1549   char *s = get_print_cell ();
1550
1551   if (show_inferior_qualified_tids ())
1552     xsnprintf (s, PRINT_CELL_SIZE, "%d.%d", thr->inf->num, thr->per_inf_num);
1553   else
1554     xsnprintf (s, PRINT_CELL_SIZE, "%d", thr->per_inf_num);
1555   return s;
1556 }
1557
1558 /* If true, tp_array_compar should sort in ascending order, otherwise
1559    in descending order.  */
1560
1561 static bool tp_array_compar_ascending;
1562
1563 /* Sort an array for struct thread_info pointers by thread ID (first
1564    by inferior number, and then by per-inferior thread number).  The
1565    order is determined by TP_ARRAY_COMPAR_ASCENDING.  */
1566
1567 static bool
1568 tp_array_compar (const thread_info *a, const thread_info *b)
1569 {
1570   if (a->inf->num != b->inf->num)
1571     {
1572       if (tp_array_compar_ascending)
1573         return a->inf->num < b->inf->num;
1574       else
1575         return a->inf->num > b->inf->num;
1576     }
1577
1578   if (tp_array_compar_ascending)
1579     return (a->per_inf_num < b->per_inf_num);
1580   else
1581     return (a->per_inf_num > b->per_inf_num);
1582 }
1583
1584 /* Apply a GDB command to a list of threads.  List syntax is a whitespace
1585    seperated list of numbers, or ranges, or the keyword `all'.  Ranges consist
1586    of two numbers seperated by a hyphen.  Examples:
1587
1588    thread apply 1 2 7 4 backtrace       Apply backtrace cmd to threads 1,2,7,4
1589    thread apply 2-7 9 p foo(1)  Apply p foo(1) cmd to threads 2->7 & 9
1590    thread apply all p x/i $pc   Apply x/i $pc cmd to all threads.  */
1591
1592 static void
1593 thread_apply_all_command (const char *cmd, int from_tty)
1594 {
1595   tp_array_compar_ascending = false;
1596   if (cmd != NULL
1597       && check_for_argument (&cmd, "-ascending", strlen ("-ascending")))
1598     {
1599       cmd = skip_spaces (cmd);
1600       tp_array_compar_ascending = true;
1601     }
1602
1603   if (cmd == NULL || *cmd == '\000')
1604     error (_("Please specify a command following the thread ID list"));
1605
1606   update_thread_list ();
1607
1608   int tc = live_threads_count ();
1609   if (tc != 0)
1610     {
1611       /* Save a copy of the thread list and increment each thread's
1612          refcount while executing the command in the context of each
1613          thread, in case the command is one that wipes threads.  E.g.,
1614          detach, kill, disconnect, etc., or even normally continuing
1615          over an inferior or thread exit.  */
1616       std::vector<thread_info *> thr_list_cpy;
1617       thr_list_cpy.reserve (tc);
1618
1619       {
1620         thread_info *tp;
1621
1622         ALL_NON_EXITED_THREADS (tp)
1623           {
1624             thr_list_cpy.push_back (tp);
1625           }
1626
1627         gdb_assert (thr_list_cpy.size () == tc);
1628       }
1629
1630       /* Increment the refcounts, and restore them back on scope
1631          exit.  */
1632       scoped_inc_dec_ref inc_dec_ref (thr_list_cpy);
1633
1634       std::sort (thr_list_cpy.begin (), thr_list_cpy.end (), tp_array_compar);
1635
1636       scoped_restore_current_thread restore_thread;
1637
1638       for (thread_info *thr : thr_list_cpy)
1639         if (thread_alive (thr))
1640           {
1641             switch_to_thread (thr->ptid);
1642             printf_filtered (_("\nThread %s (%s):\n"),
1643                              print_thread_id (thr),
1644                              target_pid_to_str (inferior_ptid));
1645
1646             execute_command (cmd, from_tty);
1647           }
1648     }
1649 }
1650
1651 /* Implementation of the "thread apply" command.  */
1652
1653 static void
1654 thread_apply_command (const char *tidlist, int from_tty)
1655 {
1656   const char *cmd = NULL;
1657   tid_range_parser parser;
1658
1659   if (tidlist == NULL || *tidlist == '\000')
1660     error (_("Please specify a thread ID list"));
1661
1662   parser.init (tidlist, current_inferior ()->num);
1663   while (!parser.finished ())
1664     {
1665       int inf_num, thr_start, thr_end;
1666
1667       if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
1668         {
1669           cmd = parser.cur_tok ();
1670           break;
1671         }
1672     }
1673
1674   if (cmd == NULL)
1675     error (_("Please specify a command following the thread ID list"));
1676
1677   if (tidlist == cmd || !isalpha (cmd[0]))
1678     invalid_thread_id_error (cmd);
1679
1680   scoped_restore_current_thread restore_thread;
1681
1682   parser.init (tidlist, current_inferior ()->num);
1683   while (!parser.finished () && parser.cur_tok () < cmd)
1684     {
1685       struct thread_info *tp = NULL;
1686       struct inferior *inf;
1687       int inf_num, thr_num;
1688
1689       parser.get_tid (&inf_num, &thr_num);
1690       inf = find_inferior_id (inf_num);
1691       if (inf != NULL)
1692         tp = find_thread_id (inf, thr_num);
1693
1694       if (parser.in_star_range ())
1695         {
1696           if (inf == NULL)
1697             {
1698               warning (_("Unknown inferior %d"), inf_num);
1699               parser.skip_range ();
1700               continue;
1701             }
1702
1703           /* No use looking for threads past the highest thread number
1704              the inferior ever had.  */
1705           if (thr_num >= inf->highest_thread_num)
1706             parser.skip_range ();
1707
1708           /* Be quiet about unknown threads numbers.  */
1709           if (tp == NULL)
1710             continue;
1711         }
1712
1713       if (tp == NULL)
1714         {
1715           if (show_inferior_qualified_tids () || parser.tid_is_qualified ())
1716             warning (_("Unknown thread %d.%d"), inf_num, thr_num);
1717           else
1718             warning (_("Unknown thread %d"), thr_num);
1719           continue;
1720         }
1721
1722       if (!thread_alive (tp))
1723         {
1724           warning (_("Thread %s has terminated."), print_thread_id (tp));
1725           continue;
1726         }
1727
1728       switch_to_thread (tp->ptid);
1729
1730       printf_filtered (_("\nThread %s (%s):\n"), print_thread_id (tp),
1731                        target_pid_to_str (inferior_ptid));
1732       execute_command (cmd, from_tty);
1733     }
1734 }
1735
1736 /* Switch to the specified thread.  Will dispatch off to thread_apply_command
1737    if prefix of arg is `apply'.  */
1738
1739 void
1740 thread_command (const char *tidstr, int from_tty)
1741 {
1742   if (tidstr == NULL)
1743     {
1744       if (inferior_ptid == null_ptid)
1745         error (_("No thread selected"));
1746
1747       if (target_has_stack)
1748         {
1749           struct thread_info *tp = inferior_thread ();
1750
1751           if (is_exited (inferior_ptid))
1752             printf_filtered (_("[Current thread is %s (%s) (exited)]\n"),
1753                              print_thread_id (tp),
1754                              target_pid_to_str (inferior_ptid));
1755           else
1756             printf_filtered (_("[Current thread is %s (%s)]\n"),
1757                              print_thread_id (tp),
1758                              target_pid_to_str (inferior_ptid));
1759         }
1760       else
1761         error (_("No stack."));
1762     }
1763   else
1764     {
1765       ptid_t previous_ptid = inferior_ptid;
1766
1767       thread_select (tidstr, parse_thread_id (tidstr, NULL));
1768
1769       /* Print if the thread has not changed, otherwise an event will
1770          be sent.  */
1771       if (inferior_ptid == previous_ptid)
1772         {
1773           print_selected_thread_frame (current_uiout,
1774                                        USER_SELECTED_THREAD
1775                                        | USER_SELECTED_FRAME);
1776         }
1777       else
1778         {
1779           gdb::observers::user_selected_context_changed.notify
1780             (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1781         }
1782     }
1783 }
1784
1785 /* Implementation of `thread name'.  */
1786
1787 static void
1788 thread_name_command (const char *arg, int from_tty)
1789 {
1790   struct thread_info *info;
1791
1792   if (inferior_ptid == null_ptid)
1793     error (_("No thread selected"));
1794
1795   arg = skip_spaces (arg);
1796
1797   info = inferior_thread ();
1798   xfree (info->name);
1799   info->name = arg ? xstrdup (arg) : NULL;
1800 }
1801
1802 /* Find thread ids with a name, target pid, or extra info matching ARG.  */
1803
1804 static void
1805 thread_find_command (const char *arg, int from_tty)
1806 {
1807   struct thread_info *tp;
1808   const char *tmp;
1809   unsigned long match = 0;
1810
1811   if (arg == NULL || *arg == '\0')
1812     error (_("Command requires an argument."));
1813
1814   tmp = re_comp (arg);
1815   if (tmp != 0)
1816     error (_("Invalid regexp (%s): %s"), tmp, arg);
1817
1818   update_thread_list ();
1819   for (tp = thread_list; tp; tp = tp->next)
1820     {
1821       if (tp->name != NULL && re_exec (tp->name))
1822         {
1823           printf_filtered (_("Thread %s has name '%s'\n"),
1824                            print_thread_id (tp), tp->name);
1825           match++;
1826         }
1827
1828       tmp = target_thread_name (tp);
1829       if (tmp != NULL && re_exec (tmp))
1830         {
1831           printf_filtered (_("Thread %s has target name '%s'\n"),
1832                            print_thread_id (tp), tmp);
1833           match++;
1834         }
1835
1836       tmp = target_pid_to_str (tp->ptid);
1837       if (tmp != NULL && re_exec (tmp))
1838         {
1839           printf_filtered (_("Thread %s has target id '%s'\n"),
1840                            print_thread_id (tp), tmp);
1841           match++;
1842         }
1843
1844       tmp = target_extra_thread_info (tp);
1845       if (tmp != NULL && re_exec (tmp))
1846         {
1847           printf_filtered (_("Thread %s has extra info '%s'\n"),
1848                            print_thread_id (tp), tmp);
1849           match++;
1850         }
1851     }
1852   if (!match)
1853     printf_filtered (_("No threads match '%s'\n"), arg);
1854 }
1855
1856 /* Print notices when new threads are attached and detached.  */
1857 int print_thread_events = 1;
1858 static void
1859 show_print_thread_events (struct ui_file *file, int from_tty,
1860                           struct cmd_list_element *c, const char *value)
1861 {
1862   fprintf_filtered (file,
1863                     _("Printing of thread events is %s.\n"),
1864                     value);
1865 }
1866
1867 /* See gdbthread.h.  */
1868
1869 void
1870 thread_select (const char *tidstr, thread_info *tp)
1871 {
1872   if (!thread_alive (tp))
1873     error (_("Thread ID %s has terminated."), tidstr);
1874
1875   switch_to_thread (tp->ptid);
1876
1877   annotate_thread_changed ();
1878
1879   /* Since the current thread may have changed, see if there is any
1880      exited thread we can now delete.  */
1881   prune_threads ();
1882 }
1883
1884 /* Print thread and frame switch command response.  */
1885
1886 void
1887 print_selected_thread_frame (struct ui_out *uiout,
1888                              user_selected_what selection)
1889 {
1890   struct thread_info *tp = inferior_thread ();
1891
1892   if (selection & USER_SELECTED_THREAD)
1893     {
1894       if (uiout->is_mi_like_p ())
1895         {
1896           uiout->field_int ("new-thread-id",
1897                             inferior_thread ()->global_num);
1898         }
1899       else
1900         {
1901           uiout->text ("[Switching to thread ");
1902           uiout->field_string ("new-thread-id", print_thread_id (tp));
1903           uiout->text (" (");
1904           uiout->text (target_pid_to_str (inferior_ptid));
1905           uiout->text (")]");
1906         }
1907     }
1908
1909   if (tp->state == THREAD_RUNNING)
1910     {
1911       if (selection & USER_SELECTED_THREAD)
1912         uiout->text ("(running)\n");
1913     }
1914   else if (selection & USER_SELECTED_FRAME)
1915     {
1916       if (selection & USER_SELECTED_THREAD)
1917         uiout->text ("\n");
1918
1919       if (has_stack_frames ())
1920         print_stack_frame_to_uiout (uiout, get_selected_frame (NULL),
1921                                     1, SRC_AND_LOC, 1);
1922     }
1923 }
1924
1925 /* Update the 'threads_executing' global based on the threads we know
1926    about right now.  */
1927
1928 static void
1929 update_threads_executing (void)
1930 {
1931   struct thread_info *tp;
1932
1933   threads_executing = 0;
1934   ALL_NON_EXITED_THREADS (tp)
1935     {
1936       if (tp->executing)
1937         {
1938           threads_executing = 1;
1939           break;
1940         }
1941     }
1942 }
1943
1944 void
1945 update_thread_list (void)
1946 {
1947   target_update_thread_list ();
1948   update_threads_executing ();
1949 }
1950
1951 /* Return a new value for the selected thread's id.  Return a value of
1952    0 if no thread is selected.  If GLOBAL is true, return the thread's
1953    global number.  Otherwise return the per-inferior number.  */
1954
1955 static struct value *
1956 thread_num_make_value_helper (struct gdbarch *gdbarch, int global)
1957 {
1958   struct thread_info *tp = find_thread_ptid (inferior_ptid);
1959   int int_val;
1960
1961   if (tp == NULL)
1962     int_val = 0;
1963   else if (global)
1964     int_val = tp->global_num;
1965   else
1966     int_val = tp->per_inf_num;
1967
1968   return value_from_longest (builtin_type (gdbarch)->builtin_int, int_val);
1969 }
1970
1971 /* Return a new value for the selected thread's per-inferior thread
1972    number.  Return a value of 0 if no thread is selected, or no
1973    threads exist.  */
1974
1975 static struct value *
1976 thread_id_per_inf_num_make_value (struct gdbarch *gdbarch,
1977                                   struct internalvar *var,
1978                                   void *ignore)
1979 {
1980   return thread_num_make_value_helper (gdbarch, 0);
1981 }
1982
1983 /* Return a new value for the selected thread's global id.  Return a
1984    value of 0 if no thread is selected, or no threads exist.  */
1985
1986 static struct value *
1987 global_thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
1988                              void *ignore)
1989 {
1990   return thread_num_make_value_helper (gdbarch, 1);
1991 }
1992
1993 /* Commands with a prefix of `thread'.  */
1994 struct cmd_list_element *thread_cmd_list = NULL;
1995
1996 /* Implementation of `thread' variable.  */
1997
1998 static const struct internalvar_funcs thread_funcs =
1999 {
2000   thread_id_per_inf_num_make_value,
2001   NULL,
2002   NULL
2003 };
2004
2005 /* Implementation of `gthread' variable.  */
2006
2007 static const struct internalvar_funcs gthread_funcs =
2008 {
2009   global_thread_id_make_value,
2010   NULL,
2011   NULL
2012 };
2013
2014 void
2015 _initialize_thread (void)
2016 {
2017   static struct cmd_list_element *thread_apply_list = NULL;
2018
2019   add_info ("threads", info_threads_command,
2020             _("Display currently known threads.\n\
2021 Usage: info threads [-gid] [ID]...\n\
2022 -gid: Show global thread IDs.\n\
2023 If ID is given, it is a space-separated list of IDs of threads to display.\n\
2024 Otherwise, all threads are displayed."));
2025
2026   add_prefix_cmd ("thread", class_run, thread_command, _("\
2027 Use this command to switch between threads.\n\
2028 The new thread ID must be currently known."),
2029                   &thread_cmd_list, "thread ", 1, &cmdlist);
2030
2031   add_prefix_cmd ("apply", class_run, thread_apply_command,
2032                   _("Apply a command to a list of threads."),
2033                   &thread_apply_list, "thread apply ", 1, &thread_cmd_list);
2034
2035   add_cmd ("all", class_run, thread_apply_all_command,
2036            _("\
2037 Apply a command to all threads.\n\
2038 \n\
2039 Usage: thread apply all [-ascending] <command>\n\
2040 -ascending: Call <command> for all threads in ascending order.\n\
2041             The default is descending order.\
2042 "),
2043            &thread_apply_list);
2044
2045   add_cmd ("name", class_run, thread_name_command,
2046            _("Set the current thread's name.\n\
2047 Usage: thread name [NAME]\n\
2048 If NAME is not given, then any existing name is removed."), &thread_cmd_list);
2049
2050   add_cmd ("find", class_run, thread_find_command, _("\
2051 Find threads that match a regular expression.\n\
2052 Usage: thread find REGEXP\n\
2053 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
2054            &thread_cmd_list);
2055
2056   add_com_alias ("t", "thread", class_run, 1);
2057
2058   add_setshow_boolean_cmd ("thread-events", no_class,
2059                            &print_thread_events, _("\
2060 Set printing of thread events (such as thread start and exit)."), _("\
2061 Show printing of thread events (such as thread start and exit)."), NULL,
2062                            NULL,
2063                            show_print_thread_events,
2064                            &setprintlist, &showprintlist);
2065
2066   create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
2067   create_internalvar_type_lazy ("_gthread", &gthread_funcs, NULL);
2068 }