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