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