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