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