ld/testsuite/
[external/binutils.git] / gdb / thread.c
1 /* Multi-process/thread control for GDB, the GNU debugger.
2
3    Copyright (C) 1986-1988, 1993-2004, 2007-2012 Free Software
4    Foundation, Inc.
5
6    Contributed by Lynx Real-Time Systems, Inc.  Los Gatos, CA.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "symtab.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "environ.h"
28 #include "value.h"
29 #include "target.h"
30 #include "gdbthread.h"
31 #include "exceptions.h"
32 #include "command.h"
33 #include "gdbcmd.h"
34 #include "regcache.h"
35 #include "gdb.h"
36 #include "gdb_string.h"
37
38 #include <ctype.h>
39 #include <sys/types.h>
40 #include <signal.h>
41 #include "ui-out.h"
42 #include "observer.h"
43 #include "annotate.h"
44 #include "cli/cli-decode.h"
45 #include "gdb_regex.h"
46 #include "cli/cli-utils.h"
47 #include "continuations.h"
48
49 /* Definition of struct thread_info exported to gdbthread.h.  */
50
51 /* Prototypes for exported functions.  */
52
53 void _initialize_thread (void);
54
55 /* Prototypes for local functions.  */
56
57 struct thread_info *thread_list = NULL;
58 static int highest_thread_num;
59
60 static void thread_command (char *tidstr, int from_tty);
61 static void thread_apply_all_command (char *, int);
62 static int thread_alive (struct thread_info *);
63 static void info_threads_command (char *, int);
64 static void thread_apply_command (char *, int);
65 static void restore_current_thread (ptid_t);
66 static void prune_threads (void);
67
68 struct thread_info*
69 inferior_thread (void)
70 {
71   struct thread_info *tp = find_thread_ptid (inferior_ptid);
72   gdb_assert (tp);
73   return tp;
74 }
75
76 void
77 delete_step_resume_breakpoint (struct thread_info *tp)
78 {
79   if (tp && tp->control.step_resume_breakpoint)
80     {
81       delete_breakpoint (tp->control.step_resume_breakpoint);
82       tp->control.step_resume_breakpoint = NULL;
83     }
84 }
85
86 void
87 delete_exception_resume_breakpoint (struct thread_info *tp)
88 {
89   if (tp && tp->control.exception_resume_breakpoint)
90     {
91       delete_breakpoint (tp->control.exception_resume_breakpoint);
92       tp->control.exception_resume_breakpoint = NULL;
93     }
94 }
95
96 static void
97 clear_thread_inferior_resources (struct thread_info *tp)
98 {
99   /* NOTE: this will take care of any left-over step_resume breakpoints,
100      but not any user-specified thread-specific breakpoints.  We can not
101      delete the breakpoint straight-off, because the inferior might not
102      be stopped at the moment.  */
103   if (tp->control.step_resume_breakpoint)
104     {
105       tp->control.step_resume_breakpoint->disposition = disp_del_at_next_stop;
106       tp->control.step_resume_breakpoint = NULL;
107     }
108
109   if (tp->control.exception_resume_breakpoint)
110     {
111       tp->control.exception_resume_breakpoint->disposition
112         = disp_del_at_next_stop;
113       tp->control.exception_resume_breakpoint = NULL;
114     }
115
116   delete_longjmp_breakpoint_at_next_stop (tp->num);
117
118   bpstat_clear (&tp->control.stop_bpstat);
119
120   do_all_intermediate_continuations_thread (tp, 1);
121   do_all_continuations_thread (tp, 1);
122 }
123
124 static void
125 free_thread (struct thread_info *tp)
126 {
127   if (tp->private)
128     {
129       if (tp->private_dtor)
130         tp->private_dtor (tp->private);
131       else
132         xfree (tp->private);
133     }
134
135   xfree (tp->name);
136   xfree (tp);
137 }
138
139 void
140 init_thread_list (void)
141 {
142   struct thread_info *tp, *tpnext;
143
144   highest_thread_num = 0;
145
146   if (!thread_list)
147     return;
148
149   for (tp = thread_list; tp; tp = tpnext)
150     {
151       tpnext = tp->next;
152       free_thread (tp);
153     }
154
155   thread_list = NULL;
156 }
157
158 /* Allocate a new thread with target id PTID and add it to the thread
159    list.  */
160
161 static struct thread_info *
162 new_thread (ptid_t ptid)
163 {
164   struct thread_info *tp;
165
166   tp = xcalloc (1, sizeof (*tp));
167
168   tp->ptid = ptid;
169   tp->num = ++highest_thread_num;
170   tp->next = thread_list;
171   thread_list = tp;
172
173   /* Nothing to follow yet.  */
174   tp->pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
175   tp->state = THREAD_STOPPED;
176
177   return tp;
178 }
179
180 struct thread_info *
181 add_thread_silent (ptid_t ptid)
182 {
183   struct thread_info *tp;
184
185   tp = find_thread_ptid (ptid);
186   if (tp)
187     /* Found an old thread with the same id.  It has to be dead,
188        otherwise we wouldn't be adding a new thread with the same id.
189        The OS is reusing this id --- delete it, and recreate a new
190        one.  */
191     {
192       /* In addition to deleting the thread, if this is the current
193          thread, then we need to take care that delete_thread doesn't
194          really delete the thread if it is inferior_ptid.  Create a
195          new template thread in the list with an invalid ptid, switch
196          to it, delete the original thread, reset the new thread's
197          ptid, and switch to it.  */
198
199       if (ptid_equal (inferior_ptid, ptid))
200         {
201           tp = new_thread (null_ptid);
202
203           /* Make switch_to_thread not read from the thread.  */
204           tp->state = THREAD_EXITED;
205           switch_to_thread (null_ptid);
206
207           /* Now we can delete it.  */
208           delete_thread (ptid);
209
210           /* Now reset its ptid, and reswitch inferior_ptid to it.  */
211           tp->ptid = ptid;
212           tp->state = THREAD_STOPPED;
213           switch_to_thread (ptid);
214
215           observer_notify_new_thread (tp);
216
217           /* All done.  */
218           return tp;
219         }
220       else
221         /* Just go ahead and delete it.  */
222         delete_thread (ptid);
223     }
224
225   tp = new_thread (ptid);
226   observer_notify_new_thread (tp);
227
228   return tp;
229 }
230
231 struct thread_info *
232 add_thread_with_info (ptid_t ptid, struct private_thread_info *private)
233 {
234   struct thread_info *result = add_thread_silent (ptid);
235
236   result->private = private;
237
238   if (print_thread_events)
239     printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid));
240
241   annotate_new_thread ();
242   return result;
243 }
244
245 struct thread_info *
246 add_thread (ptid_t ptid)
247 {
248   return add_thread_with_info (ptid, NULL);
249 }
250
251 /* Delete thread PTID.  If SILENT, don't notify the observer of this
252    exit.  */
253 static void
254 delete_thread_1 (ptid_t ptid, int silent)
255 {
256   struct thread_info *tp, *tpprev;
257
258   tpprev = NULL;
259
260   for (tp = thread_list; tp; tpprev = tp, tp = tp->next)
261     if (ptid_equal (tp->ptid, ptid))
262       break;
263
264   if (!tp)
265     return;
266
267   /* If this is the current thread, or there's code out there that
268      relies on it existing (refcount > 0) we can't delete yet.  Mark
269      it as exited, and notify it.  */
270   if (tp->refcount > 0
271       || ptid_equal (tp->ptid, inferior_ptid))
272     {
273       if (tp->state != THREAD_EXITED)
274         {
275           observer_notify_thread_exit (tp, silent);
276
277           /* Tag it as exited.  */
278           tp->state = THREAD_EXITED;
279
280           /* Clear breakpoints, etc. associated with this thread.  */
281           clear_thread_inferior_resources (tp);
282         }
283
284        /* Will be really deleted some other time.  */
285        return;
286      }
287
288   /* Notify thread exit, but only if we haven't already.  */
289   if (tp->state != THREAD_EXITED)
290     observer_notify_thread_exit (tp, silent);
291
292   /* Tag it as exited.  */
293   tp->state = THREAD_EXITED;
294   clear_thread_inferior_resources (tp);
295
296   if (tpprev)
297     tpprev->next = tp->next;
298   else
299     thread_list = tp->next;
300
301   free_thread (tp);
302 }
303
304 /* Delete thread PTID and notify of thread exit.  If this is
305    inferior_ptid, don't actually delete it, but tag it as exited and
306    do the notification.  If PTID is the user selected thread, clear
307    it.  */
308 void
309 delete_thread (ptid_t ptid)
310 {
311   delete_thread_1 (ptid, 0 /* not silent */);
312 }
313
314 void
315 delete_thread_silent (ptid_t ptid)
316 {
317   delete_thread_1 (ptid, 1 /* silent */);
318 }
319
320 struct thread_info *
321 find_thread_id (int num)
322 {
323   struct thread_info *tp;
324
325   for (tp = thread_list; tp; tp = tp->next)
326     if (tp->num == num)
327       return tp;
328
329   return NULL;
330 }
331
332 /* Find a thread_info by matching PTID.  */
333 struct thread_info *
334 find_thread_ptid (ptid_t ptid)
335 {
336   struct thread_info *tp;
337
338   for (tp = thread_list; tp; tp = tp->next)
339     if (ptid_equal (tp->ptid, ptid))
340       return tp;
341
342   return NULL;
343 }
344
345 /*
346  * Thread iterator function.
347  *
348  * Calls a callback function once for each thread, so long as
349  * the callback function returns false.  If the callback function
350  * returns true, the iteration will end and the current thread
351  * will be returned.  This can be useful for implementing a 
352  * search for a thread with arbitrary attributes, or for applying
353  * some operation to every thread.
354  *
355  * FIXME: some of the existing functionality, such as 
356  * "Thread apply all", might be rewritten using this functionality.
357  */
358
359 struct thread_info *
360 iterate_over_threads (int (*callback) (struct thread_info *, void *),
361                       void *data)
362 {
363   struct thread_info *tp, *next;
364
365   for (tp = thread_list; tp; tp = next)
366     {
367       next = tp->next;
368       if ((*callback) (tp, data))
369         return tp;
370     }
371
372   return NULL;
373 }
374
375 int
376 thread_count (void)
377 {
378   int result = 0;
379   struct thread_info *tp;
380
381   for (tp = thread_list; tp; tp = tp->next)
382     ++result;
383
384   return result;  
385 }
386
387 int
388 valid_thread_id (int num)
389 {
390   struct thread_info *tp;
391
392   for (tp = thread_list; tp; tp = tp->next)
393     if (tp->num == num)
394       return 1;
395
396   return 0;
397 }
398
399 int
400 pid_to_thread_id (ptid_t ptid)
401 {
402   struct thread_info *tp;
403
404   for (tp = thread_list; tp; tp = tp->next)
405     if (ptid_equal (tp->ptid, ptid))
406       return tp->num;
407
408   return 0;
409 }
410
411 ptid_t
412 thread_id_to_pid (int num)
413 {
414   struct thread_info *thread = find_thread_id (num);
415
416   if (thread)
417     return thread->ptid;
418   else
419     return pid_to_ptid (-1);
420 }
421
422 int
423 in_thread_list (ptid_t ptid)
424 {
425   struct thread_info *tp;
426
427   for (tp = thread_list; tp; tp = tp->next)
428     if (ptid_equal (tp->ptid, ptid))
429       return 1;
430
431   return 0;                     /* Never heard of 'im.  */
432 }
433
434 /* Finds the first thread of the inferior given by PID.  If PID is -1,
435    return the first thread in the list.  */
436
437 struct thread_info *
438 first_thread_of_process (int pid)
439 {
440   struct thread_info *tp, *ret = NULL;
441
442   for (tp = thread_list; tp; tp = tp->next)
443     if (pid == -1 || ptid_get_pid (tp->ptid) == pid)
444       if (ret == NULL || tp->num < ret->num)
445         ret = tp;
446
447   return ret;
448 }
449
450 struct thread_info *
451 any_thread_of_process (int pid)
452 {
453   struct thread_info *tp;
454
455   for (tp = thread_list; tp; tp = tp->next)
456     if (ptid_get_pid (tp->ptid) == pid)
457       return tp;
458
459   return NULL;
460 }
461
462 struct thread_info *
463 any_live_thread_of_process (int pid)
464 {
465   struct thread_info *tp;
466   struct thread_info *tp_executing = NULL;
467
468   for (tp = thread_list; tp; tp = tp->next)
469     if (tp->state != THREAD_EXITED && ptid_get_pid (tp->ptid) == pid)
470       {
471         if (tp->executing)
472           tp_executing = tp;
473         else
474           return tp;
475       }
476
477   return tp_executing;
478 }
479
480 /* Print a list of thread ids currently known, and the total number of
481    threads.  To be used from within catch_errors.  */
482 static int
483 do_captured_list_thread_ids (struct ui_out *uiout, void *arg)
484 {
485   struct thread_info *tp;
486   int num = 0;
487   struct cleanup *cleanup_chain;
488   int current_thread = -1;
489
490   update_thread_list ();
491
492   cleanup_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "thread-ids");
493
494   for (tp = thread_list; tp; tp = tp->next)
495     {
496       if (tp->state == THREAD_EXITED)
497         continue;
498
499       if (ptid_equal (tp->ptid, inferior_ptid))
500         current_thread = tp->num;
501
502       num++;
503       ui_out_field_int (uiout, "thread-id", tp->num);
504     }
505
506   do_cleanups (cleanup_chain);
507
508   if (current_thread != -1)
509     ui_out_field_int (uiout, "current-thread-id", current_thread);
510   ui_out_field_int (uiout, "number-of-threads", num);
511   return GDB_RC_OK;
512 }
513
514 /* Official gdblib interface function to get a list of thread ids and
515    the total number.  */
516 enum gdb_rc
517 gdb_list_thread_ids (struct ui_out *uiout, char **error_message)
518 {
519   if (catch_exceptions_with_msg (uiout, do_captured_list_thread_ids, NULL,
520                                  error_message, RETURN_MASK_ALL) < 0)
521     return GDB_RC_FAIL;
522   return GDB_RC_OK;
523 }
524
525 /* Return true if TP is an active thread.  */
526 static int
527 thread_alive (struct thread_info *tp)
528 {
529   if (tp->state == THREAD_EXITED)
530     return 0;
531   if (!target_thread_alive (tp->ptid))
532     return 0;
533   return 1;
534 }
535
536 static void
537 prune_threads (void)
538 {
539   struct thread_info *tp, *next;
540
541   for (tp = thread_list; tp; tp = next)
542     {
543       next = tp->next;
544       if (!thread_alive (tp))
545         delete_thread (tp->ptid);
546     }
547 }
548
549 void
550 thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid)
551 {
552   struct inferior *inf;
553   struct thread_info *tp;
554
555   /* It can happen that what we knew as the target inferior id
556      changes.  E.g, target remote may only discover the remote process
557      pid after adding the inferior to GDB's list.  */
558   inf = find_inferior_pid (ptid_get_pid (old_ptid));
559   inf->pid = ptid_get_pid (new_ptid);
560
561   tp = find_thread_ptid (old_ptid);
562   tp->ptid = new_ptid;
563
564   observer_notify_thread_ptid_changed (old_ptid, new_ptid);
565 }
566
567 void
568 set_running (ptid_t ptid, int running)
569 {
570   struct thread_info *tp;
571   int all = ptid_equal (ptid, minus_one_ptid);
572
573   /* We try not to notify the observer if no thread has actually changed 
574      the running state -- merely to reduce the number of messages to 
575      frontend.  Frontend is supposed to handle multiple *running just fine.  */
576   if (all || ptid_is_pid (ptid))
577     {
578       int any_started = 0;
579
580       for (tp = thread_list; tp; tp = tp->next)
581         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
582           {
583             if (tp->state == THREAD_EXITED)
584               continue;
585             if (running && tp->state == THREAD_STOPPED)
586               any_started = 1;
587             tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
588           }
589       if (any_started)
590         observer_notify_target_resumed (ptid);
591     }
592   else
593     {
594       int started = 0;
595
596       tp = find_thread_ptid (ptid);
597       gdb_assert (tp);
598       gdb_assert (tp->state != THREAD_EXITED);
599       if (running && tp->state == THREAD_STOPPED)
600         started = 1;
601       tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
602       if (started)
603         observer_notify_target_resumed (ptid);
604     }
605 }
606
607 static int
608 is_thread_state (ptid_t ptid, enum thread_state state)
609 {
610   struct thread_info *tp;
611
612   tp = find_thread_ptid (ptid);
613   gdb_assert (tp);
614   return tp->state == state;
615 }
616
617 int
618 is_stopped (ptid_t ptid)
619 {
620   return is_thread_state (ptid, THREAD_STOPPED);
621 }
622
623 int
624 is_exited (ptid_t ptid)
625 {
626   return is_thread_state (ptid, THREAD_EXITED);
627 }
628
629 int
630 is_running (ptid_t ptid)
631 {
632   return is_thread_state (ptid, THREAD_RUNNING);
633 }
634
635 int
636 any_running (void)
637 {
638   struct thread_info *tp;
639
640   for (tp = thread_list; tp; tp = tp->next)
641     if (tp->state == THREAD_RUNNING)
642       return 1;
643
644   return 0;
645 }
646
647 int
648 is_executing (ptid_t ptid)
649 {
650   struct thread_info *tp;
651
652   tp = find_thread_ptid (ptid);
653   gdb_assert (tp);
654   return tp->executing;
655 }
656
657 void
658 set_executing (ptid_t ptid, int executing)
659 {
660   struct thread_info *tp;
661   int all = ptid_equal (ptid, minus_one_ptid);
662
663   if (all || ptid_is_pid (ptid))
664     {
665       for (tp = thread_list; tp; tp = tp->next)
666         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
667           tp->executing = executing;
668     }
669   else
670     {
671       tp = find_thread_ptid (ptid);
672       gdb_assert (tp);
673       tp->executing = executing;
674     }
675 }
676
677 void
678 set_stop_requested (ptid_t ptid, int stop)
679 {
680   struct thread_info *tp;
681   int all = ptid_equal (ptid, minus_one_ptid);
682
683   if (all || ptid_is_pid (ptid))
684     {
685       for (tp = thread_list; tp; tp = tp->next)
686         if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
687           tp->stop_requested = stop;
688     }
689   else
690     {
691       tp = find_thread_ptid (ptid);
692       gdb_assert (tp);
693       tp->stop_requested = stop;
694     }
695
696   /* Call the stop requested observer so other components of GDB can
697      react to this request.  */
698   if (stop)
699     observer_notify_thread_stop_requested (ptid);
700 }
701
702 void
703 finish_thread_state (ptid_t ptid)
704 {
705   struct thread_info *tp;
706   int all;
707   int any_started = 0;
708
709   all = ptid_equal (ptid, minus_one_ptid);
710
711   if (all || ptid_is_pid (ptid))
712     {
713       for (tp = thread_list; tp; tp = tp->next)
714         {
715           if (tp->state == THREAD_EXITED)
716             continue;
717           if (all || ptid_get_pid (ptid) == ptid_get_pid (tp->ptid))
718             {
719               if (tp->executing && tp->state == THREAD_STOPPED)
720                 any_started = 1;
721               tp->state = tp->executing ? THREAD_RUNNING : THREAD_STOPPED;
722             }
723         }
724     }
725   else
726     {
727       tp = find_thread_ptid (ptid);
728       gdb_assert (tp);
729       if (tp->state != THREAD_EXITED)
730         {
731           if (tp->executing && tp->state == THREAD_STOPPED)
732             any_started = 1;
733           tp->state = tp->executing ? THREAD_RUNNING : THREAD_STOPPED;
734         }
735     }
736
737   if (any_started)
738     observer_notify_target_resumed (ptid);
739 }
740
741 void
742 finish_thread_state_cleanup (void *arg)
743 {
744   ptid_t *ptid_p = arg;
745
746   gdb_assert (arg);
747
748   finish_thread_state (*ptid_p);
749 }
750
751 /* Prints the list of threads and their details on UIOUT.
752    This is a version of 'info_threads_command' suitable for
753    use from MI.
754    If REQUESTED_THREAD is not -1, it's the GDB id of the thread
755    that should be printed.  Otherwise, all threads are
756    printed.
757    If PID is not -1, only print threads from the process PID.
758    Otherwise, threads from all attached PIDs are printed.
759    If both REQUESTED_THREAD and PID are not -1, then the thread
760    is printed if it belongs to the specified process.  Otherwise,
761    an error is raised.  */
762 void
763 print_thread_info (struct ui_out *uiout, char *requested_threads, int pid)
764 {
765   struct thread_info *tp;
766   ptid_t current_ptid;
767   struct cleanup *old_chain;
768   char *extra_info, *name, *target_id;
769   int current_thread = -1;
770
771   update_thread_list ();
772   current_ptid = inferior_ptid;
773
774   /* We'll be switching threads temporarily.  */
775   old_chain = make_cleanup_restore_current_thread ();
776
777   /* For backward compatibility, we make a list for MI.  A table is
778      preferable for the CLI, though, because it shows table
779      headers.  */
780   if (ui_out_is_mi_like_p (uiout))
781     make_cleanup_ui_out_list_begin_end (uiout, "threads");
782   else
783     {
784       int n_threads = 0;
785
786       for (tp = thread_list; tp; tp = tp->next)
787         {
788           if (!number_is_in_list (requested_threads, tp->num))
789             continue;
790
791           if (pid != -1 && PIDGET (tp->ptid) != pid)
792             continue;
793
794           if (tp->state == THREAD_EXITED)
795             continue;
796
797           ++n_threads;
798         }
799
800       if (n_threads == 0)
801         {
802           if (requested_threads == NULL || *requested_threads == '\0')
803             ui_out_message (uiout, 0, _("No threads.\n"));
804           else
805             ui_out_message (uiout, 0, _("No threads match '%s'.\n"),
806                             requested_threads);
807           do_cleanups (old_chain);
808           return;
809         }
810
811       make_cleanup_ui_out_table_begin_end (uiout, 4, n_threads, "threads");
812
813       ui_out_table_header (uiout, 1, ui_left, "current", "");
814       ui_out_table_header (uiout, 4, ui_left, "id", "Id");
815       ui_out_table_header (uiout, 17, ui_left, "target-id", "Target Id");
816       ui_out_table_header (uiout, 1, ui_left, "frame", "Frame");
817       ui_out_table_body (uiout);
818     }
819
820   for (tp = thread_list; tp; tp = tp->next)
821     {
822       struct cleanup *chain2;
823       int core;
824
825       if (!number_is_in_list (requested_threads, tp->num))
826         continue;
827
828       if (pid != -1 && PIDGET (tp->ptid) != pid)
829         {
830           if (requested_threads != NULL && *requested_threads != '\0')
831             error (_("Requested thread not found in requested process"));
832           continue;
833         }
834
835       if (ptid_equal (tp->ptid, current_ptid))
836         current_thread = tp->num;
837
838       if (tp->state == THREAD_EXITED)
839         continue;
840
841       chain2 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
842
843       if (ui_out_is_mi_like_p (uiout))
844         {
845           /* Compatibility.  */
846           if (ptid_equal (tp->ptid, current_ptid))
847             ui_out_text (uiout, "* ");
848           else
849             ui_out_text (uiout, "  ");
850         }
851       else
852         {
853           if (ptid_equal (tp->ptid, current_ptid))
854             ui_out_field_string (uiout, "current", "*");
855           else
856             ui_out_field_skip (uiout, "current");
857         }
858
859       ui_out_field_int (uiout, "id", tp->num);
860
861       /* For the CLI, we stuff everything into the target-id field.
862          This is a gross hack to make the output come out looking
863          correct.  The underlying problem here is that ui-out has no
864          way to specify that a field's space allocation should be
865          shared by several fields.  For MI, we do the right thing
866          instead.  */
867
868       target_id = target_pid_to_str (tp->ptid);
869       extra_info = target_extra_thread_info (tp);
870       name = tp->name ? tp->name : target_thread_name (tp);
871
872       if (ui_out_is_mi_like_p (uiout))
873         {
874           ui_out_field_string (uiout, "target-id", target_id);
875           if (extra_info)
876             ui_out_field_string (uiout, "details", extra_info);
877           if (name)
878             ui_out_field_string (uiout, "name", name);
879         }
880       else
881         {
882           struct cleanup *str_cleanup;
883           char *contents;
884
885           if (extra_info && name)
886             contents = xstrprintf ("%s \"%s\" (%s)", target_id,
887                                    name, extra_info);
888           else if (extra_info)
889             contents = xstrprintf ("%s (%s)", target_id, extra_info);
890           else if (name)
891             contents = xstrprintf ("%s \"%s\"", target_id, name);
892           else
893             contents = xstrdup (target_id);
894           str_cleanup = make_cleanup (xfree, contents);
895
896           ui_out_field_string (uiout, "target-id", contents);
897           do_cleanups (str_cleanup);
898         }
899
900       if (tp->state == THREAD_RUNNING)
901         ui_out_text (uiout, "(running)\n");
902       else
903         {
904           /* The switch below puts us at the top of the stack (leaf
905              frame).  */
906           switch_to_thread (tp->ptid);
907           print_stack_frame (get_selected_frame (NULL),
908                              /* For MI output, print frame level.  */
909                              ui_out_is_mi_like_p (uiout),
910                              LOCATION);
911         }
912
913       if (ui_out_is_mi_like_p (uiout))
914         {
915           char *state = "stopped";
916
917           if (tp->state == THREAD_RUNNING)
918             state = "running";
919           ui_out_field_string (uiout, "state", state);
920         }
921
922       core = target_core_of_thread (tp->ptid);
923       if (ui_out_is_mi_like_p (uiout) && core != -1)
924         ui_out_field_int (uiout, "core", core);
925
926       do_cleanups (chain2);
927     }
928
929   /* Restores the current thread and the frame selected before
930      the "info threads" command.  */
931   do_cleanups (old_chain);
932
933   if (pid == -1 && requested_threads == NULL)
934     {
935       gdb_assert (current_thread != -1
936                   || !thread_list
937                   || ptid_equal (inferior_ptid, null_ptid));
938       if (current_thread != -1 && ui_out_is_mi_like_p (uiout))
939         ui_out_field_int (uiout, "current-thread-id", current_thread);
940
941       if (current_thread != -1 && is_exited (current_ptid))
942         ui_out_message (uiout, 0, "\n\
943 The current thread <Thread ID %d> has terminated.  See `help thread'.\n",
944                         current_thread);
945       else if (thread_list
946                && current_thread == -1
947                && ptid_equal (current_ptid, null_ptid))
948         ui_out_message (uiout, 0, "\n\
949 No selected thread.  See `help thread'.\n");
950     }
951 }
952
953 /* Print information about currently known threads 
954
955    Optional ARG is a thread id, or list of thread ids.
956
957    Note: this has the drawback that it _really_ switches
958          threads, which frees the frame cache.  A no-side
959          effects info-threads command would be nicer.  */
960
961 static void
962 info_threads_command (char *arg, int from_tty)
963 {
964   print_thread_info (current_uiout, arg, -1);
965 }
966
967 /* Switch from one thread to another.  */
968
969 void
970 switch_to_thread (ptid_t ptid)
971 {
972   /* Switch the program space as well, if we can infer it from the now
973      current thread.  Otherwise, it's up to the caller to select the
974      space it wants.  */
975   if (!ptid_equal (ptid, null_ptid))
976     {
977       struct inferior *inf;
978
979       inf = find_inferior_pid (ptid_get_pid (ptid));
980       gdb_assert (inf != NULL);
981       set_current_program_space (inf->pspace);
982       set_current_inferior (inf);
983     }
984
985   if (ptid_equal (ptid, inferior_ptid))
986     return;
987
988   inferior_ptid = ptid;
989   reinit_frame_cache ();
990   registers_changed ();
991
992   /* We don't check for is_stopped, because we're called at times
993      while in the TARGET_RUNNING state, e.g., while handling an
994      internal event.  */
995   if (!ptid_equal (inferior_ptid, null_ptid)
996       && !is_exited (ptid)
997       && !is_executing (ptid))
998     stop_pc = regcache_read_pc (get_thread_regcache (ptid));
999   else
1000     stop_pc = ~(CORE_ADDR) 0;
1001 }
1002
1003 static void
1004 restore_current_thread (ptid_t ptid)
1005 {
1006   switch_to_thread (ptid);
1007 }
1008
1009 static void
1010 restore_selected_frame (struct frame_id a_frame_id, int frame_level)
1011 {
1012   struct frame_info *frame = NULL;
1013   int count;
1014
1015   /* This means there was no selected frame.  */
1016   if (frame_level == -1)
1017     {
1018       select_frame (NULL);
1019       return;
1020     }
1021
1022   gdb_assert (frame_level >= 0);
1023
1024   /* Restore by level first, check if the frame id is the same as
1025      expected.  If that fails, try restoring by frame id.  If that
1026      fails, nothing to do, just warn the user.  */
1027
1028   count = frame_level;
1029   frame = find_relative_frame (get_current_frame (), &count);
1030   if (count == 0
1031       && frame != NULL
1032       /* The frame ids must match - either both valid or both outer_frame_id.
1033          The latter case is not failsafe, but since it's highly unlikely
1034          the search by level finds the wrong frame, it's 99.9(9)% of
1035          the time (for all practical purposes) safe.  */
1036       && frame_id_eq (get_frame_id (frame), a_frame_id))
1037     {
1038       /* Cool, all is fine.  */
1039       select_frame (frame);
1040       return;
1041     }
1042
1043   frame = frame_find_by_id (a_frame_id);
1044   if (frame != NULL)
1045     {
1046       /* Cool, refound it.  */
1047       select_frame (frame);
1048       return;
1049     }
1050
1051   /* Nothing else to do, the frame layout really changed.  Select the
1052      innermost stack frame.  */
1053   select_frame (get_current_frame ());
1054
1055   /* Warn the user.  */
1056   if (frame_level > 0 && !ui_out_is_mi_like_p (current_uiout))
1057     {
1058       warning (_("Couldn't restore frame #%d in "
1059                  "current thread, at reparsed frame #0\n"),
1060                frame_level);
1061       /* For MI, we should probably have a notification about
1062          current frame change.  But this error is not very
1063          likely, so don't bother for now.  */
1064       print_stack_frame (get_selected_frame (NULL), 1, SRC_LINE);
1065     }
1066 }
1067
1068 struct current_thread_cleanup
1069 {
1070   ptid_t inferior_ptid;
1071   struct frame_id selected_frame_id;
1072   int selected_frame_level;
1073   int was_stopped;
1074   int inf_id;
1075   int was_removable;
1076 };
1077
1078 static void
1079 do_restore_current_thread_cleanup (void *arg)
1080 {
1081   struct thread_info *tp;
1082   struct current_thread_cleanup *old = arg;
1083
1084   tp = find_thread_ptid (old->inferior_ptid);
1085
1086   /* If the previously selected thread belonged to a process that has
1087      in the mean time been deleted (due to normal exit, detach, etc.),
1088      then don't revert back to it, but instead simply drop back to no
1089      thread selected.  */
1090   if (tp
1091       && find_inferior_pid (ptid_get_pid (tp->ptid)) != NULL)
1092     restore_current_thread (old->inferior_ptid);
1093   else
1094     {
1095       restore_current_thread (null_ptid);
1096       set_current_inferior (find_inferior_id (old->inf_id));
1097     }
1098
1099   /* The running state of the originally selected thread may have
1100      changed, so we have to recheck it here.  */
1101   if (!ptid_equal (inferior_ptid, null_ptid)
1102       && old->was_stopped
1103       && is_stopped (inferior_ptid)
1104       && target_has_registers
1105       && target_has_stack
1106       && target_has_memory)
1107     restore_selected_frame (old->selected_frame_id,
1108                             old->selected_frame_level);
1109 }
1110
1111 static void
1112 restore_current_thread_cleanup_dtor (void *arg)
1113 {
1114   struct current_thread_cleanup *old = arg;
1115   struct thread_info *tp;
1116   struct inferior *inf;
1117
1118   tp = find_thread_ptid (old->inferior_ptid);
1119   if (tp)
1120     tp->refcount--;
1121   inf = find_inferior_id (old->inf_id);
1122   if (inf != NULL)
1123     inf->removable = old->was_removable;
1124   xfree (old);
1125 }
1126
1127 struct cleanup *
1128 make_cleanup_restore_current_thread (void)
1129 {
1130   struct thread_info *tp;
1131   struct frame_info *frame;
1132   struct current_thread_cleanup *old;
1133
1134   old = xmalloc (sizeof (struct current_thread_cleanup));
1135   old->inferior_ptid = inferior_ptid;
1136   old->inf_id = current_inferior ()->num;
1137   old->was_removable = current_inferior ()->removable;
1138
1139   if (!ptid_equal (inferior_ptid, null_ptid))
1140     {
1141       old->was_stopped = is_stopped (inferior_ptid);
1142       if (old->was_stopped
1143           && target_has_registers
1144           && target_has_stack
1145           && target_has_memory)
1146         {
1147           /* When processing internal events, there might not be a
1148              selected frame.  If we naively call get_selected_frame
1149              here, then we can end up reading debuginfo for the
1150              current frame, but we don't generally need the debuginfo
1151              at this point.  */
1152           frame = get_selected_frame_if_set ();
1153         }
1154       else
1155         frame = NULL;
1156
1157       old->selected_frame_id = get_frame_id (frame);
1158       old->selected_frame_level = frame_relative_level (frame);
1159
1160       tp = find_thread_ptid (inferior_ptid);
1161       if (tp)
1162         tp->refcount++;
1163     }
1164
1165   current_inferior ()->removable = 0;
1166
1167   return make_cleanup_dtor (do_restore_current_thread_cleanup, old,
1168                             restore_current_thread_cleanup_dtor);
1169 }
1170
1171 /* Apply a GDB command to a list of threads.  List syntax is a whitespace
1172    seperated list of numbers, or ranges, or the keyword `all'.  Ranges consist
1173    of two numbers seperated by a hyphen.  Examples:
1174
1175    thread apply 1 2 7 4 backtrace       Apply backtrace cmd to threads 1,2,7,4
1176    thread apply 2-7 9 p foo(1)  Apply p foo(1) cmd to threads 2->7 & 9
1177    thread apply all p x/i $pc   Apply x/i $pc cmd to all threads.  */
1178
1179 static void
1180 thread_apply_all_command (char *cmd, int from_tty)
1181 {
1182   struct thread_info *tp;
1183   struct cleanup *old_chain;
1184   char *saved_cmd;
1185
1186   if (cmd == NULL || *cmd == '\000')
1187     error (_("Please specify a command following the thread ID list"));
1188
1189   update_thread_list ();
1190
1191   old_chain = make_cleanup_restore_current_thread ();
1192
1193   /* Save a copy of the command in case it is clobbered by
1194      execute_command.  */
1195   saved_cmd = xstrdup (cmd);
1196   make_cleanup (xfree, saved_cmd);
1197   for (tp = thread_list; tp; tp = tp->next)
1198     if (thread_alive (tp))
1199       {
1200         switch_to_thread (tp->ptid);
1201
1202         printf_filtered (_("\nThread %d (%s):\n"),
1203                          tp->num, target_pid_to_str (inferior_ptid));
1204         execute_command (cmd, from_tty);
1205         strcpy (cmd, saved_cmd);        /* Restore exact command used
1206                                            previously.  */
1207       }
1208
1209   do_cleanups (old_chain);
1210 }
1211
1212 static void
1213 thread_apply_command (char *tidlist, int from_tty)
1214 {
1215   char *cmd;
1216   struct cleanup *old_chain;
1217   char *saved_cmd;
1218   struct get_number_or_range_state state;
1219
1220   if (tidlist == NULL || *tidlist == '\000')
1221     error (_("Please specify a thread ID list"));
1222
1223   for (cmd = tidlist; *cmd != '\000' && !isalpha (*cmd); cmd++);
1224
1225   if (*cmd == '\000')
1226     error (_("Please specify a command following the thread ID list"));
1227
1228   /* Save a copy of the command in case it is clobbered by
1229      execute_command.  */
1230   saved_cmd = xstrdup (cmd);
1231   old_chain = make_cleanup (xfree, saved_cmd);
1232
1233   init_number_or_range (&state, tidlist);
1234   while (!state.finished && state.string < cmd)
1235     {
1236       struct thread_info *tp;
1237       int start;
1238       char *p = tidlist;
1239
1240       start = get_number_or_range (&state);
1241
1242       make_cleanup_restore_current_thread ();
1243
1244       tp = find_thread_id (start);
1245
1246       if (!tp)
1247         warning (_("Unknown thread %d."), start);
1248       else if (!thread_alive (tp))
1249         warning (_("Thread %d has terminated."), start);
1250       else
1251         {
1252           switch_to_thread (tp->ptid);
1253
1254           printf_filtered (_("\nThread %d (%s):\n"), tp->num,
1255                            target_pid_to_str (inferior_ptid));
1256           execute_command (cmd, from_tty);
1257
1258           /* Restore exact command used previously.  */
1259           strcpy (cmd, saved_cmd);
1260         }
1261     }
1262
1263   do_cleanups (old_chain);
1264 }
1265
1266 /* Switch to the specified thread.  Will dispatch off to thread_apply_command
1267    if prefix of arg is `apply'.  */
1268
1269 static void
1270 thread_command (char *tidstr, int from_tty)
1271 {
1272   if (!tidstr)
1273     {
1274       if (ptid_equal (inferior_ptid, null_ptid))
1275         error (_("No thread selected"));
1276
1277       if (target_has_stack)
1278         {
1279           if (is_exited (inferior_ptid))
1280             printf_filtered (_("[Current thread is %d (%s) (exited)]\n"),
1281                              pid_to_thread_id (inferior_ptid),
1282                              target_pid_to_str (inferior_ptid));
1283           else
1284             printf_filtered (_("[Current thread is %d (%s)]\n"),
1285                              pid_to_thread_id (inferior_ptid),
1286                              target_pid_to_str (inferior_ptid));
1287         }
1288       else
1289         error (_("No stack."));
1290       return;
1291     }
1292
1293   gdb_thread_select (current_uiout, tidstr, NULL);
1294 }
1295
1296 /* Implementation of `thread name'.  */
1297
1298 static void
1299 thread_name_command (char *arg, int from_tty)
1300 {
1301   struct thread_info *info;
1302
1303   if (ptid_equal (inferior_ptid, null_ptid))
1304     error (_("No thread selected"));
1305
1306   while (arg && isspace (*arg))
1307     ++arg;
1308
1309   info = inferior_thread ();
1310   xfree (info->name);
1311   info->name = arg ? xstrdup (arg) : NULL;
1312 }
1313
1314 /* Find thread ids with a name, target pid, or extra info matching ARG.  */
1315
1316 static void
1317 thread_find_command (char *arg, int from_tty)
1318 {
1319   struct thread_info *tp;
1320   char *tmp;
1321   unsigned long match = 0;
1322
1323   if (arg == NULL || *arg == '\0')
1324     error (_("Command requires an argument."));
1325
1326   tmp = re_comp (arg);
1327   if (tmp != 0)
1328     error (_("Invalid regexp (%s): %s"), tmp, arg);
1329
1330   update_thread_list ();
1331   for (tp = thread_list; tp; tp = tp->next)
1332     {
1333       if (tp->name != NULL && re_exec (tp->name))
1334         {
1335           printf_filtered (_("Thread %d has name '%s'\n"),
1336                            tp->num, tp->name);
1337           match++;
1338         }
1339
1340       tmp = target_thread_name (tp);
1341       if (tmp != NULL && re_exec (tmp))
1342         {
1343           printf_filtered (_("Thread %d has target name '%s'\n"),
1344                            tp->num, tmp);
1345           match++;
1346         }
1347
1348       tmp = target_pid_to_str (tp->ptid);
1349       if (tmp != NULL && re_exec (tmp))
1350         {
1351           printf_filtered (_("Thread %d has target id '%s'\n"),
1352                            tp->num, tmp);
1353           match++;
1354         }
1355
1356       tmp = target_extra_thread_info (tp);
1357       if (tmp != NULL && re_exec (tmp))
1358         {
1359           printf_filtered (_("Thread %d has extra info '%s'\n"),
1360                            tp->num, tmp);
1361           match++;
1362         }
1363     }
1364   if (!match)
1365     printf_filtered (_("No threads match '%s'\n"), arg);
1366 }
1367
1368 /* Print notices when new threads are attached and detached.  */
1369 int print_thread_events = 1;
1370 static void
1371 show_print_thread_events (struct ui_file *file, int from_tty,
1372                           struct cmd_list_element *c, const char *value)
1373 {
1374   fprintf_filtered (file,
1375                     _("Printing of thread events is %s.\n"),
1376                     value);
1377 }
1378
1379 static int
1380 do_captured_thread_select (struct ui_out *uiout, void *tidstr)
1381 {
1382   int num;
1383   struct thread_info *tp;
1384
1385   num = value_as_long (parse_and_eval (tidstr));
1386
1387   tp = find_thread_id (num);
1388
1389   if (!tp)
1390     error (_("Thread ID %d not known."), num);
1391
1392   if (!thread_alive (tp))
1393     error (_("Thread ID %d has terminated."), num);
1394
1395   switch_to_thread (tp->ptid);
1396
1397   annotate_thread_changed ();
1398
1399   ui_out_text (uiout, "[Switching to thread ");
1400   ui_out_field_int (uiout, "new-thread-id", pid_to_thread_id (inferior_ptid));
1401   ui_out_text (uiout, " (");
1402   ui_out_text (uiout, target_pid_to_str (inferior_ptid));
1403   ui_out_text (uiout, ")]");
1404
1405   /* Note that we can't reach this with an exited thread, due to the
1406      thread_alive check above.  */
1407   if (tp->state == THREAD_RUNNING)
1408     ui_out_text (uiout, "(running)\n");
1409   else
1410     {
1411       ui_out_text (uiout, "\n");
1412       print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
1413     }
1414
1415   /* Since the current thread may have changed, see if there is any
1416      exited thread we can now delete.  */
1417   prune_threads ();
1418
1419   return GDB_RC_OK;
1420 }
1421
1422 enum gdb_rc
1423 gdb_thread_select (struct ui_out *uiout, char *tidstr, char **error_message)
1424 {
1425   if (catch_exceptions_with_msg (uiout, do_captured_thread_select, tidstr,
1426                                  error_message, RETURN_MASK_ALL) < 0)
1427     return GDB_RC_FAIL;
1428   return GDB_RC_OK;
1429 }
1430
1431 void
1432 update_thread_list (void)
1433 {
1434   prune_threads ();
1435   target_find_new_threads ();
1436 }
1437
1438 /* Return a new value for the selected thread's id.  Return a value of 0 if
1439    no thread is selected, or no threads exist.  */
1440
1441 static struct value *
1442 thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
1443                       void *ignore)
1444 {
1445   struct thread_info *tp = find_thread_ptid (inferior_ptid);
1446
1447   return value_from_longest (builtin_type (gdbarch)->builtin_int,
1448                              (tp ? tp->num : 0));
1449 }
1450
1451 /* Commands with a prefix of `thread'.  */
1452 struct cmd_list_element *thread_cmd_list = NULL;
1453
1454 /* Implementation of `thread' variable.  */
1455
1456 static const struct internalvar_funcs thread_funcs =
1457 {
1458   thread_id_make_value,
1459   NULL,
1460   NULL
1461 };
1462
1463 void
1464 _initialize_thread (void)
1465 {
1466   static struct cmd_list_element *thread_apply_list = NULL;
1467
1468   add_info ("threads", info_threads_command, 
1469             _("Display currently known threads.\n\
1470 Usage: info threads [ID]...\n\
1471 Optional arguments are thread IDs with spaces between.\n\
1472 If no arguments, all threads are displayed."));
1473
1474   add_prefix_cmd ("thread", class_run, thread_command, _("\
1475 Use this command to switch between threads.\n\
1476 The new thread ID must be currently known."),
1477                   &thread_cmd_list, "thread ", 1, &cmdlist);
1478
1479   add_prefix_cmd ("apply", class_run, thread_apply_command,
1480                   _("Apply a command to a list of threads."),
1481                   &thread_apply_list, "thread apply ", 1, &thread_cmd_list);
1482
1483   add_cmd ("all", class_run, thread_apply_all_command,
1484            _("Apply a command to all threads."), &thread_apply_list);
1485
1486   add_cmd ("name", class_run, thread_name_command,
1487            _("Set the current thread's name.\n\
1488 Usage: thread name [NAME]\n\
1489 If NAME is not given, then any existing name is removed."), &thread_cmd_list);
1490
1491   add_cmd ("find", class_run, thread_find_command, _("\
1492 Find threads that match a regular expression.\n\
1493 Usage: thread find REGEXP\n\
1494 Will display thread ids whose name, target ID, or extra info matches REGEXP."),
1495            &thread_cmd_list);
1496
1497   if (!xdb_commands)
1498     add_com_alias ("t", "thread", class_run, 1);
1499
1500   add_setshow_boolean_cmd ("thread-events", no_class,
1501          &print_thread_events, _("\
1502 Set printing of thread events (such as thread start and exit)."), _("\
1503 Show printing of thread events (such as thread start and exit)."), NULL,
1504          NULL,
1505          show_print_thread_events,
1506          &setprintlist, &showprintlist);
1507
1508   create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
1509 }