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