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