[gdb] Fixup incomplete patch 0dbfed25e9
[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 (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    separated list of numbers, or ranges, or the keyword `all'.  Ranges consist
1586    of two numbers separated 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 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, or print the current thread.  */
1737
1738 void
1739 thread_command (const char *tidstr, int from_tty)
1740 {
1741   if (tidstr == NULL)
1742     {
1743       if (inferior_ptid == null_ptid)
1744         error (_("No thread selected"));
1745
1746       if (target_has_stack)
1747         {
1748           struct thread_info *tp = inferior_thread ();
1749
1750           if (is_exited (inferior_ptid))
1751             printf_filtered (_("[Current thread is %s (%s) (exited)]\n"),
1752                              print_thread_id (tp),
1753                              target_pid_to_str (inferior_ptid));
1754           else
1755             printf_filtered (_("[Current thread is %s (%s)]\n"),
1756                              print_thread_id (tp),
1757                              target_pid_to_str (inferior_ptid));
1758         }
1759       else
1760         error (_("No stack."));
1761     }
1762   else
1763     {
1764       ptid_t previous_ptid = inferior_ptid;
1765
1766       thread_select (tidstr, parse_thread_id (tidstr, NULL));
1767
1768       /* Print if the thread has not changed, otherwise an event will
1769          be sent.  */
1770       if (inferior_ptid == previous_ptid)
1771         {
1772           print_selected_thread_frame (current_uiout,
1773                                        USER_SELECTED_THREAD
1774                                        | USER_SELECTED_FRAME);
1775         }
1776       else
1777         {
1778           gdb::observers::user_selected_context_changed.notify
1779             (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1780         }
1781     }
1782 }
1783
1784 /* Implementation of `thread name'.  */
1785
1786 static void
1787 thread_name_command (const char *arg, int from_tty)
1788 {
1789   struct thread_info *info;
1790
1791   if (inferior_ptid == null_ptid)
1792     error (_("No thread selected"));
1793
1794   arg = skip_spaces (arg);
1795
1796   info = inferior_thread ();
1797   xfree (info->name);
1798   info->name = arg ? xstrdup (arg) : NULL;
1799 }
1800
1801 /* Find thread ids with a name, target pid, or extra info matching ARG.  */
1802
1803 static void
1804 thread_find_command (const char *arg, int from_tty)
1805 {
1806   struct thread_info *tp;
1807   const char *tmp;
1808   unsigned long match = 0;
1809
1810   if (arg == NULL || *arg == '\0')
1811     error (_("Command requires an argument."));
1812
1813   tmp = re_comp (arg);
1814   if (tmp != 0)
1815     error (_("Invalid regexp (%s): %s"), tmp, arg);
1816
1817   update_thread_list ();
1818   for (tp = thread_list; tp; tp = tp->next)
1819     {
1820       if (tp->name != NULL && re_exec (tp->name))
1821         {
1822           printf_filtered (_("Thread %s has name '%s'\n"),
1823                            print_thread_id (tp), tp->name);
1824           match++;
1825         }
1826
1827       tmp = target_thread_name (tp);
1828       if (tmp != NULL && re_exec (tmp))
1829         {
1830           printf_filtered (_("Thread %s has target name '%s'\n"),
1831                            print_thread_id (tp), tmp);
1832           match++;
1833         }
1834
1835       tmp = target_pid_to_str (tp->ptid);
1836       if (tmp != NULL && re_exec (tmp))
1837         {
1838           printf_filtered (_("Thread %s has target id '%s'\n"),
1839                            print_thread_id (tp), tmp);
1840           match++;
1841         }
1842
1843       tmp = target_extra_thread_info (tp);
1844       if (tmp != NULL && re_exec (tmp))
1845         {
1846           printf_filtered (_("Thread %s has extra info '%s'\n"),
1847                            print_thread_id (tp), tmp);
1848           match++;
1849         }
1850     }
1851   if (!match)
1852     printf_filtered (_("No threads match '%s'\n"), arg);
1853 }
1854
1855 /* Print notices when new threads are attached and detached.  */
1856 int print_thread_events = 1;
1857 static void
1858 show_print_thread_events (struct ui_file *file, int from_tty,
1859                           struct cmd_list_element *c, const char *value)
1860 {
1861   fprintf_filtered (file,
1862                     _("Printing of thread events is %s.\n"),
1863                     value);
1864 }
1865
1866 /* See gdbthread.h.  */
1867
1868 void
1869 thread_select (const char *tidstr, thread_info *tp)
1870 {
1871   if (!thread_alive (tp))
1872     error (_("Thread ID %s has terminated."), tidstr);
1873
1874   switch_to_thread (tp->ptid);
1875
1876   annotate_thread_changed ();
1877
1878   /* Since the current thread may have changed, see if there is any
1879      exited thread we can now delete.  */
1880   prune_threads ();
1881 }
1882
1883 /* Print thread and frame switch command response.  */
1884
1885 void
1886 print_selected_thread_frame (struct ui_out *uiout,
1887                              user_selected_what selection)
1888 {
1889   struct thread_info *tp = inferior_thread ();
1890
1891   if (selection & USER_SELECTED_THREAD)
1892     {
1893       if (uiout->is_mi_like_p ())
1894         {
1895           uiout->field_int ("new-thread-id",
1896                             inferior_thread ()->global_num);
1897         }
1898       else
1899         {
1900           uiout->text ("[Switching to thread ");
1901           uiout->field_string ("new-thread-id", print_thread_id (tp));
1902           uiout->text (" (");
1903           uiout->text (target_pid_to_str (inferior_ptid));
1904           uiout->text (")]");
1905         }
1906     }
1907
1908   if (tp->state == THREAD_RUNNING)
1909     {
1910       if (selection & USER_SELECTED_THREAD)
1911         uiout->text ("(running)\n");
1912     }
1913   else if (selection & USER_SELECTED_FRAME)
1914     {
1915       if (selection & USER_SELECTED_THREAD)
1916         uiout->text ("\n");
1917
1918       if (has_stack_frames ())
1919         print_stack_frame_to_uiout (uiout, get_selected_frame (NULL),
1920                                     1, SRC_AND_LOC, 1);
1921     }
1922 }
1923
1924 /* Update the 'threads_executing' global based on the threads we know
1925    about right now.  */
1926
1927 static void
1928 update_threads_executing (void)
1929 {
1930   struct thread_info *tp;
1931
1932   threads_executing = 0;
1933   ALL_NON_EXITED_THREADS (tp)
1934     {
1935       if (tp->executing)
1936         {
1937           threads_executing = 1;
1938           break;
1939         }
1940     }
1941 }
1942
1943 void
1944 update_thread_list (void)
1945 {
1946   target_update_thread_list ();
1947   update_threads_executing ();
1948 }
1949
1950 /* Return a new value for the selected thread's id.  Return a value of
1951    0 if no thread is selected.  If GLOBAL is true, return the thread's
1952    global number.  Otherwise return the per-inferior number.  */
1953
1954 static struct value *
1955 thread_num_make_value_helper (struct gdbarch *gdbarch, int global)
1956 {
1957   struct thread_info *tp = find_thread_ptid (inferior_ptid);
1958   int int_val;
1959
1960   if (tp == NULL)
1961     int_val = 0;
1962   else if (global)
1963     int_val = tp->global_num;
1964   else
1965     int_val = tp->per_inf_num;
1966
1967   return value_from_longest (builtin_type (gdbarch)->builtin_int, int_val);
1968 }
1969
1970 /* Return a new value for the selected thread's per-inferior thread
1971    number.  Return a value of 0 if no thread is selected, or no
1972    threads exist.  */
1973
1974 static struct value *
1975 thread_id_per_inf_num_make_value (struct gdbarch *gdbarch,
1976                                   struct internalvar *var,
1977                                   void *ignore)
1978 {
1979   return thread_num_make_value_helper (gdbarch, 0);
1980 }
1981
1982 /* Return a new value for the selected thread's global id.  Return a
1983    value of 0 if no thread is selected, or no threads exist.  */
1984
1985 static struct value *
1986 global_thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
1987                              void *ignore)
1988 {
1989   return thread_num_make_value_helper (gdbarch, 1);
1990 }
1991
1992 /* Commands with a prefix of `thread'.  */
1993 struct cmd_list_element *thread_cmd_list = NULL;
1994
1995 /* Implementation of `thread' variable.  */
1996
1997 static const struct internalvar_funcs thread_funcs =
1998 {
1999   thread_id_per_inf_num_make_value,
2000   NULL,
2001   NULL
2002 };
2003
2004 /* Implementation of `gthread' variable.  */
2005
2006 static const struct internalvar_funcs gthread_funcs =
2007 {
2008   global_thread_id_make_value,
2009   NULL,
2010   NULL
2011 };
2012
2013 void
2014 _initialize_thread (void)
2015 {
2016   static struct cmd_list_element *thread_apply_list = NULL;
2017
2018   add_info ("threads", info_threads_command,
2019             _("Display currently known threads.\n\
2020 Usage: info threads [-gid] [ID]...\n\
2021 -gid: Show global thread IDs.\n\
2022 If ID is given, it is a space-separated list of IDs of threads to display.\n\
2023 Otherwise, all threads are displayed."));
2024
2025   add_prefix_cmd ("thread", class_run, thread_command, _("\
2026 Use this command to switch between threads.\n\
2027 The new thread ID must be currently known."),
2028                   &thread_cmd_list, "thread ", 1, &cmdlist);
2029
2030   add_prefix_cmd ("apply", class_run, thread_apply_command,
2031                   _("Apply a command to a list of threads.\n\
2032 Usage: thread apply ID... COMMAND\n\
2033 ID is a space-separated list of IDs of threads to apply COMMAND on."),
2034                   &thread_apply_list, "thread apply ", 1, &thread_cmd_list);
2035
2036   add_cmd ("all", class_run, thread_apply_all_command,
2037            _("\
2038 Apply a command to all threads.\n\
2039 \n\
2040 Usage: thread apply all [-ascending] COMMAND\n\
2041 -ascending: Call COMMAND for all threads in ascending order.\n\
2042             The default is descending order.\
2043 "),
2044            &thread_apply_list);
2045
2046   add_cmd ("name", class_run, thread_name_command,
2047            _("Set the current thread's name.\n\
2048 Usage: thread name [NAME]\n\
2049 If NAME is not given, then any existing name is removed."), &thread_cmd_list);
2050
2051   add_cmd ("find", class_run, thread_find_command, _("\
2052 Find threads that match a regular expression.\n\
2053 Usage: thread find REGEXP\n\
2054 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
2055            &thread_cmd_list);
2056
2057   add_com_alias ("t", "thread", class_run, 1);
2058
2059   add_setshow_boolean_cmd ("thread-events", no_class,
2060                            &print_thread_events, _("\
2061 Set printing of thread events (such as thread start and exit)."), _("\
2062 Show printing of thread events (such as thread start and exit)."), NULL,
2063                            NULL,
2064                            show_print_thread_events,
2065                            &setprintlist, &showprintlist);
2066
2067   create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
2068   create_internalvar_type_lazy ("_gthread", &gthread_funcs, NULL);
2069 }