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