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