windows-nat: Don't change current_event.dwThreadId in handle_output_debug_string()
[deliverable/binutils-gdb.git] / gdb / thread.c
CommitLineData
c906108c 1/* Multi-process/thread control for GDB, the GNU debugger.
8926118c 2
32d0add0 3 Copyright (C) 1986-2015 Free Software Foundation, Inc.
8926118c 4
b6ba6518 5 Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
23#include "symtab.h"
24#include "frame.h"
25#include "inferior.h"
26#include "environ.h"
27#include "value.h"
28#include "target.h"
29#include "gdbthread.h"
30#include "command.h"
31#include "gdbcmd.h"
4e052eda 32#include "regcache.h"
5b7f31a4 33#include "gdb.h"
02d27625 34#include "btrace.h"
c906108c
SS
35
36#include <ctype.h>
37#include <sys/types.h>
38#include <signal.h>
8b93c638 39#include "ui-out.h"
683f2885 40#include "observer.h"
d4fc5b1e 41#include "annotate.h"
94cc34af 42#include "cli/cli-decode.h"
60f98dde 43#include "gdb_regex.h"
aea5b279 44#include "cli/cli-utils.h"
be34f849 45#include "continuations.h"
94cc34af 46
c378eb4e 47/* Definition of struct thread_info exported to gdbthread.h. */
c906108c 48
c378eb4e 49/* Prototypes for exported functions. */
c906108c 50
a14ed312 51void _initialize_thread (void);
c906108c 52
c378eb4e 53/* Prototypes for local functions. */
c906108c 54
e5ef252a 55struct thread_info *thread_list = NULL;
c906108c
SS
56static int highest_thread_num;
57
b57bacec
PA
58/* True if any thread is, or may be executing. We need to track this
59 separately because until we fully sync the thread list, we won't
60 know whether the target is fully stopped, even if we see stop
61 events for all known threads, because any of those threads may have
62 spawned new threads we haven't heard of yet. */
63static int threads_executing;
64
a14ed312
KB
65static void thread_apply_all_command (char *, int);
66static int thread_alive (struct thread_info *);
67static void info_threads_command (char *, int);
68static void thread_apply_command (char *, int);
39f77062 69static void restore_current_thread (ptid_t);
c906108c 70
054e8d9e
AA
71/* Data to cleanup thread array. */
72
73struct thread_array_cleanup
74{
75 /* Array of thread pointers used to set
76 reference count. */
77 struct thread_info **tp_array;
78
79 /* Thread count in the array. */
80 int count;
81};
82
83
a5321aa4 84struct thread_info*
4e1c45ea 85inferior_thread (void)
8601f500 86{
e09875d4 87 struct thread_info *tp = find_thread_ptid (inferior_ptid);
4e1c45ea
PA
88 gdb_assert (tp);
89 return tp;
90}
8601f500 91
5b834a0a
PA
92/* Delete the breakpoint pointed at by BP_P, if there's one. */
93
94static void
95delete_thread_breakpoint (struct breakpoint **bp_p)
4e1c45ea 96{
5b834a0a 97 if (*bp_p != NULL)
8601f500 98 {
5b834a0a
PA
99 delete_breakpoint (*bp_p);
100 *bp_p = NULL;
8601f500
MS
101 }
102}
103
5b834a0a
PA
104void
105delete_step_resume_breakpoint (struct thread_info *tp)
106{
107 if (tp != NULL)
108 delete_thread_breakpoint (&tp->control.step_resume_breakpoint);
109}
110
186c406b
TT
111void
112delete_exception_resume_breakpoint (struct thread_info *tp)
113{
5b834a0a
PA
114 if (tp != NULL)
115 delete_thread_breakpoint (&tp->control.exception_resume_breakpoint);
116}
117
34b7e8a6
PA
118/* See gdbthread.h. */
119
120void
121delete_single_step_breakpoints (struct thread_info *tp)
122{
123 if (tp != NULL)
124 delete_thread_breakpoint (&tp->control.single_step_breakpoints);
125}
126
5b834a0a
PA
127/* Delete the breakpoint pointed at by BP_P at the next stop, if
128 there's one. */
129
130static void
131delete_at_next_stop (struct breakpoint **bp)
132{
133 if (*bp != NULL)
186c406b 134 {
5b834a0a
PA
135 (*bp)->disposition = disp_del_at_next_stop;
136 *bp = NULL;
186c406b
TT
137 }
138}
139
34b7e8a6
PA
140/* See gdbthread.h. */
141
142int
143thread_has_single_step_breakpoints_set (struct thread_info *tp)
144{
145 return tp->control.single_step_breakpoints != NULL;
146}
147
148/* See gdbthread.h. */
149
150int
151thread_has_single_step_breakpoint_here (struct thread_info *tp,
152 struct address_space *aspace,
153 CORE_ADDR addr)
154{
155 struct breakpoint *ss_bps = tp->control.single_step_breakpoints;
156
157 return (ss_bps != NULL
158 && breakpoint_has_location_inserted_here (ss_bps, aspace, addr));
159}
160
7c952b6d 161static void
4f8d22e3 162clear_thread_inferior_resources (struct thread_info *tp)
7c952b6d
ND
163{
164 /* NOTE: this will take care of any left-over step_resume breakpoints,
4d8453a5
DJ
165 but not any user-specified thread-specific breakpoints. We can not
166 delete the breakpoint straight-off, because the inferior might not
167 be stopped at the moment. */
5b834a0a
PA
168 delete_at_next_stop (&tp->control.step_resume_breakpoint);
169 delete_at_next_stop (&tp->control.exception_resume_breakpoint);
34b7e8a6 170 delete_at_next_stop (&tp->control.single_step_breakpoints);
186c406b 171
f59f708a
PA
172 delete_longjmp_breakpoint_at_next_stop (tp->num);
173
16c381f0 174 bpstat_clear (&tp->control.stop_bpstat);
95e54da7 175
02d27625
MM
176 btrace_teardown (tp);
177
fa4cd53f
PA
178 do_all_intermediate_continuations_thread (tp, 1);
179 do_all_continuations_thread (tp, 1);
4f8d22e3
PA
180}
181
182static void
183free_thread (struct thread_info *tp)
184{
fe978cb0 185 if (tp->priv)
dc146f7c
VP
186 {
187 if (tp->private_dtor)
fe978cb0 188 tp->private_dtor (tp->priv);
dc146f7c 189 else
fe978cb0 190 xfree (tp->priv);
dc146f7c 191 }
7c952b6d 192
4694da01 193 xfree (tp->name);
b8c9b27d 194 xfree (tp);
7c952b6d
ND
195}
196
c906108c 197void
fba45db2 198init_thread_list (void)
c906108c
SS
199{
200 struct thread_info *tp, *tpnext;
201
7c952b6d 202 highest_thread_num = 0;
8ea051c5 203
c906108c
SS
204 if (!thread_list)
205 return;
206
207 for (tp = thread_list; tp; tp = tpnext)
208 {
209 tpnext = tp->next;
7c952b6d 210 free_thread (tp);
c906108c
SS
211 }
212
213 thread_list = NULL;
b57bacec 214 threads_executing = 0;
c906108c
SS
215}
216
e58b0e63
PA
217/* Allocate a new thread with target id PTID and add it to the thread
218 list. */
219
220static struct thread_info *
221new_thread (ptid_t ptid)
222{
223 struct thread_info *tp;
224
225 tp = xcalloc (1, sizeof (*tp));
226
227 tp->ptid = ptid;
228 tp->num = ++highest_thread_num;
229 tp->next = thread_list;
230 thread_list = tp;
231
232 /* Nothing to follow yet. */
233 tp->pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
30596231 234 tp->state = THREAD_STOPPED;
e58b0e63
PA
235
236 return tp;
237}
238
0d06e24b 239struct thread_info *
93815fbf 240add_thread_silent (ptid_t ptid)
c906108c
SS
241{
242 struct thread_info *tp;
243
e09875d4 244 tp = find_thread_ptid (ptid);
4f8d22e3
PA
245 if (tp)
246 /* Found an old thread with the same id. It has to be dead,
247 otherwise we wouldn't be adding a new thread with the same id.
248 The OS is reusing this id --- delete it, and recreate a new
249 one. */
250 {
251 /* In addition to deleting the thread, if this is the current
dcf4fbde
PA
252 thread, then we need to take care that delete_thread doesn't
253 really delete the thread if it is inferior_ptid. Create a
254 new template thread in the list with an invalid ptid, switch
255 to it, delete the original thread, reset the new thread's
256 ptid, and switch to it. */
4f8d22e3
PA
257
258 if (ptid_equal (inferior_ptid, ptid))
259 {
c820c52a 260 tp = new_thread (null_ptid);
dcf4fbde
PA
261
262 /* Make switch_to_thread not read from the thread. */
30596231 263 tp->state = THREAD_EXITED;
c820c52a 264 switch_to_thread (null_ptid);
4f8d22e3
PA
265
266 /* Now we can delete it. */
267 delete_thread (ptid);
268
dcf4fbde 269 /* Now reset its ptid, and reswitch inferior_ptid to it. */
4f8d22e3 270 tp->ptid = ptid;
30596231 271 tp->state = THREAD_STOPPED;
4f8d22e3
PA
272 switch_to_thread (ptid);
273
274 observer_notify_new_thread (tp);
275
276 /* All done. */
277 return tp;
278 }
279 else
280 /* Just go ahead and delete it. */
281 delete_thread (ptid);
282 }
283
e58b0e63 284 tp = new_thread (ptid);
cfc01461
VP
285 observer_notify_new_thread (tp);
286
0d06e24b 287 return tp;
c906108c
SS
288}
289
93815fbf 290struct thread_info *
fe978cb0 291add_thread_with_info (ptid_t ptid, struct private_thread_info *priv)
93815fbf
VP
292{
293 struct thread_info *result = add_thread_silent (ptid);
294
fe978cb0 295 result->priv = priv;
17faa917 296
93815fbf 297 if (print_thread_events)
fd532e2e 298 printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid));
d4fc5b1e
NR
299
300 annotate_new_thread ();
93815fbf
VP
301 return result;
302}
303
17faa917
DJ
304struct thread_info *
305add_thread (ptid_t ptid)
306{
307 return add_thread_with_info (ptid, NULL);
308}
309
5e0b29c1
PA
310/* Delete thread PTID. If SILENT, don't notify the observer of this
311 exit. */
312static void
313delete_thread_1 (ptid_t ptid, int silent)
c906108c
SS
314{
315 struct thread_info *tp, *tpprev;
316
317 tpprev = NULL;
318
319 for (tp = thread_list; tp; tpprev = tp, tp = tp->next)
39f77062 320 if (ptid_equal (tp->ptid, ptid))
c906108c
SS
321 break;
322
323 if (!tp)
324 return;
325
4f8d22e3
PA
326 /* If this is the current thread, or there's code out there that
327 relies on it existing (refcount > 0) we can't delete yet. Mark
328 it as exited, and notify it. */
329 if (tp->refcount > 0
330 || ptid_equal (tp->ptid, inferior_ptid))
331 {
30596231 332 if (tp->state != THREAD_EXITED)
4f8d22e3 333 {
a07daef3 334 observer_notify_thread_exit (tp, silent);
4f8d22e3
PA
335
336 /* Tag it as exited. */
30596231 337 tp->state = THREAD_EXITED;
4f8d22e3
PA
338
339 /* Clear breakpoints, etc. associated with this thread. */
340 clear_thread_inferior_resources (tp);
341 }
342
343 /* Will be really deleted some other time. */
344 return;
345 }
346
fa4cd53f 347 /* Notify thread exit, but only if we haven't already. */
30596231 348 if (tp->state != THREAD_EXITED)
fa4cd53f
PA
349 observer_notify_thread_exit (tp, silent);
350
351 /* Tag it as exited. */
30596231 352 tp->state = THREAD_EXITED;
fa4cd53f
PA
353 clear_thread_inferior_resources (tp);
354
c906108c
SS
355 if (tpprev)
356 tpprev->next = tp->next;
357 else
358 thread_list = tp->next;
359
7c952b6d 360 free_thread (tp);
c906108c
SS
361}
362
4f8d22e3
PA
363/* Delete thread PTID and notify of thread exit. If this is
364 inferior_ptid, don't actually delete it, but tag it as exited and
365 do the notification. If PTID is the user selected thread, clear
366 it. */
5e0b29c1
PA
367void
368delete_thread (ptid_t ptid)
369{
370 delete_thread_1 (ptid, 0 /* not silent */);
371}
372
373void
374delete_thread_silent (ptid_t ptid)
375{
376 delete_thread_1 (ptid, 1 /* silent */);
377}
378
1e92afda 379struct thread_info *
fba45db2 380find_thread_id (int num)
c906108c
SS
381{
382 struct thread_info *tp;
383
384 for (tp = thread_list; tp; tp = tp->next)
385 if (tp->num == num)
386 return tp;
387
388 return NULL;
389}
390
39f77062 391/* Find a thread_info by matching PTID. */
0d06e24b 392struct thread_info *
e09875d4 393find_thread_ptid (ptid_t ptid)
0d06e24b
JM
394{
395 struct thread_info *tp;
396
397 for (tp = thread_list; tp; tp = tp->next)
39f77062 398 if (ptid_equal (tp->ptid, ptid))
0d06e24b
JM
399 return tp;
400
401 return NULL;
402}
403
404/*
405 * Thread iterator function.
406 *
407 * Calls a callback function once for each thread, so long as
408 * the callback function returns false. If the callback function
409 * returns true, the iteration will end and the current thread
410 * will be returned. This can be useful for implementing a
411 * search for a thread with arbitrary attributes, or for applying
412 * some operation to every thread.
413 *
414 * FIXME: some of the existing functionality, such as
415 * "Thread apply all", might be rewritten using this functionality.
416 */
417
418struct thread_info *
fd118b61
KB
419iterate_over_threads (int (*callback) (struct thread_info *, void *),
420 void *data)
0d06e24b 421{
4f8d22e3 422 struct thread_info *tp, *next;
0d06e24b 423
4f8d22e3
PA
424 for (tp = thread_list; tp; tp = next)
425 {
426 next = tp->next;
427 if ((*callback) (tp, data))
428 return tp;
429 }
0d06e24b
JM
430
431 return NULL;
432}
433
20874c92
VP
434int
435thread_count (void)
436{
437 int result = 0;
438 struct thread_info *tp;
439
440 for (tp = thread_list; tp; tp = tp->next)
441 ++result;
442
443 return result;
444}
445
c906108c 446int
fba45db2 447valid_thread_id (int num)
c906108c
SS
448{
449 struct thread_info *tp;
450
451 for (tp = thread_list; tp; tp = tp->next)
452 if (tp->num == num)
453 return 1;
454
455 return 0;
456}
457
458int
39f77062 459pid_to_thread_id (ptid_t ptid)
c906108c
SS
460{
461 struct thread_info *tp;
462
463 for (tp = thread_list; tp; tp = tp->next)
39f77062 464 if (ptid_equal (tp->ptid, ptid))
c906108c
SS
465 return tp->num;
466
467 return 0;
468}
469
39f77062 470ptid_t
fba45db2 471thread_id_to_pid (int num)
c906108c
SS
472{
473 struct thread_info *thread = find_thread_id (num);
5d502164 474
c906108c 475 if (thread)
39f77062 476 return thread->ptid;
c906108c 477 else
39f77062 478 return pid_to_ptid (-1);
c906108c
SS
479}
480
481int
39f77062 482in_thread_list (ptid_t ptid)
c906108c
SS
483{
484 struct thread_info *tp;
485
486 for (tp = thread_list; tp; tp = tp->next)
39f77062 487 if (ptid_equal (tp->ptid, ptid))
c906108c
SS
488 return 1;
489
c378eb4e 490 return 0; /* Never heard of 'im. */
c906108c 491}
8926118c 492
bad34192
PA
493/* Finds the first thread of the inferior given by PID. If PID is -1,
494 return the first thread in the list. */
495
496struct thread_info *
497first_thread_of_process (int pid)
498{
499 struct thread_info *tp, *ret = NULL;
500
501 for (tp = thread_list; tp; tp = tp->next)
502 if (pid == -1 || ptid_get_pid (tp->ptid) == pid)
503 if (ret == NULL || tp->num < ret->num)
504 ret = tp;
505
506 return ret;
507}
508
2277426b
PA
509struct thread_info *
510any_thread_of_process (int pid)
511{
512 struct thread_info *tp;
513
32990ada
PA
514 gdb_assert (pid != 0);
515
516 /* Prefer the current thread. */
517 if (ptid_get_pid (inferior_ptid) == pid)
518 return inferior_thread ();
519
520 ALL_NON_EXITED_THREADS (tp)
2277426b
PA
521 if (ptid_get_pid (tp->ptid) == pid)
522 return tp;
523
524 return NULL;
525}
526
6c95b8df
PA
527struct thread_info *
528any_live_thread_of_process (int pid)
529{
32990ada 530 struct thread_info *curr_tp = NULL;
6c95b8df 531 struct thread_info *tp;
9941e0c5 532 struct thread_info *tp_executing = NULL;
6c95b8df 533
32990ada
PA
534 gdb_assert (pid != 0);
535
536 /* Prefer the current thread if it's not executing. */
537 if (ptid_get_pid (inferior_ptid) == pid)
538 {
539 /* If the current thread is dead, forget it. If it's not
540 executing, use it. Otherwise, still choose it (below), but
541 only if no other non-executing thread is found. */
542 curr_tp = inferior_thread ();
543 if (curr_tp->state == THREAD_EXITED)
544 curr_tp = NULL;
545 else if (!curr_tp->executing)
546 return curr_tp;
547 }
548
549 ALL_NON_EXITED_THREADS (tp)
550 if (ptid_get_pid (tp->ptid) == pid)
6c95b8df 551 {
32990ada 552 if (!tp->executing)
6c95b8df 553 return tp;
32990ada
PA
554
555 tp_executing = tp;
6c95b8df
PA
556 }
557
32990ada
PA
558 /* If both the current thread and all live threads are executing,
559 prefer the current thread. */
560 if (curr_tp != NULL)
561 return curr_tp;
562
563 /* Otherwise, just return an executing thread, if any. */
9941e0c5 564 return tp_executing;
6c95b8df
PA
565}
566
8b93c638 567/* Print a list of thread ids currently known, and the total number of
c378eb4e 568 threads. To be used from within catch_errors. */
6949171e
JJ
569static int
570do_captured_list_thread_ids (struct ui_out *uiout, void *arg)
8b93c638
JM
571{
572 struct thread_info *tp;
573 int num = 0;
3b31d625 574 struct cleanup *cleanup_chain;
592375cd 575 int current_thread = -1;
8b93c638 576
dc146f7c 577 update_thread_list ();
7990a578 578
3b31d625 579 cleanup_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "thread-ids");
8b93c638
JM
580
581 for (tp = thread_list; tp; tp = tp->next)
582 {
30596231 583 if (tp->state == THREAD_EXITED)
4f8d22e3 584 continue;
592375cd
VP
585
586 if (ptid_equal (tp->ptid, inferior_ptid))
587 current_thread = tp->num;
588
8b93c638
JM
589 num++;
590 ui_out_field_int (uiout, "thread-id", tp->num);
591 }
592
3b31d625 593 do_cleanups (cleanup_chain);
592375cd
VP
594
595 if (current_thread != -1)
596 ui_out_field_int (uiout, "current-thread-id", current_thread);
8b93c638
JM
597 ui_out_field_int (uiout, "number-of-threads", num);
598 return GDB_RC_OK;
599}
600
601/* Official gdblib interface function to get a list of thread ids and
c378eb4e 602 the total number. */
8b93c638 603enum gdb_rc
ce43223b 604gdb_list_thread_ids (struct ui_out *uiout, char **error_message)
8b93c638 605{
b0b13bb4
DJ
606 if (catch_exceptions_with_msg (uiout, do_captured_list_thread_ids, NULL,
607 error_message, RETURN_MASK_ALL) < 0)
608 return GDB_RC_FAIL;
609 return GDB_RC_OK;
8b93c638 610}
c906108c 611
c378eb4e 612/* Return true if TP is an active thread. */
c906108c 613static int
fba45db2 614thread_alive (struct thread_info *tp)
c906108c 615{
30596231 616 if (tp->state == THREAD_EXITED)
c906108c 617 return 0;
39f77062 618 if (!target_thread_alive (tp->ptid))
4f8d22e3 619 return 0;
c906108c
SS
620 return 1;
621}
622
e8032dde
PA
623/* See gdbthreads.h. */
624
625void
fba45db2 626prune_threads (void)
c906108c 627{
8a06aea7 628 struct thread_info *tp, *tmp;
c906108c 629
8a06aea7 630 ALL_THREADS_SAFE (tp, tmp)
c906108c 631 {
c906108c 632 if (!thread_alive (tp))
39f77062 633 delete_thread (tp->ptid);
c906108c
SS
634 }
635}
636
8a06aea7
PA
637/* See gdbthreads.h. */
638
639void
640delete_exited_threads (void)
641{
642 struct thread_info *tp, *tmp;
643
644 ALL_THREADS_SAFE (tp, tmp)
645 {
646 if (tp->state == THREAD_EXITED)
647 delete_thread (tp->ptid);
648 }
649}
650
6c659fc2
SC
651/* Disable storing stack temporaries for the thread whose id is
652 stored in DATA. */
653
654static void
655disable_thread_stack_temporaries (void *data)
656{
657 ptid_t *pd = data;
658 struct thread_info *tp = find_thread_ptid (*pd);
659
660 if (tp != NULL)
661 {
662 tp->stack_temporaries_enabled = 0;
663 VEC_free (value_ptr, tp->stack_temporaries);
664 }
665
666 xfree (pd);
667}
668
669/* Enable storing stack temporaries for thread with id PTID and return a
670 cleanup which can disable and clear the stack temporaries. */
671
672struct cleanup *
673enable_thread_stack_temporaries (ptid_t ptid)
674{
675 struct thread_info *tp = find_thread_ptid (ptid);
676 ptid_t *data;
677 struct cleanup *c;
678
679 gdb_assert (tp != NULL);
680
681 tp->stack_temporaries_enabled = 1;
682 tp->stack_temporaries = NULL;
683 data = (ptid_t *) xmalloc (sizeof (ptid_t));
684 *data = ptid;
685 c = make_cleanup (disable_thread_stack_temporaries, data);
686
687 return c;
688}
689
690/* Return non-zero value if stack temporaies are enabled for the thread
691 with id PTID. */
692
693int
694thread_stack_temporaries_enabled_p (ptid_t ptid)
695{
696 struct thread_info *tp = find_thread_ptid (ptid);
697
698 if (tp == NULL)
699 return 0;
700 else
701 return tp->stack_temporaries_enabled;
702}
703
704/* Push V on to the stack temporaries of the thread with id PTID. */
705
706void
707push_thread_stack_temporary (ptid_t ptid, struct value *v)
708{
709 struct thread_info *tp = find_thread_ptid (ptid);
710
711 gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
712 VEC_safe_push (value_ptr, tp->stack_temporaries, v);
713}
714
715/* Return 1 if VAL is among the stack temporaries of the thread
716 with id PTID. Return 0 otherwise. */
717
718int
719value_in_thread_stack_temporaries (struct value *val, ptid_t ptid)
720{
721 struct thread_info *tp = find_thread_ptid (ptid);
722
723 gdb_assert (tp != NULL && tp->stack_temporaries_enabled);
724 if (!VEC_empty (value_ptr, tp->stack_temporaries))
725 {
726 struct value *v;
727 int i;
728
729 for (i = 0; VEC_iterate (value_ptr, tp->stack_temporaries, i, v); i++)
730 if (v == val)
731 return 1;
732 }
733
734 return 0;
735}
736
737/* Return the last of the stack temporaries for thread with id PTID.
738 Return NULL if there are no stack temporaries for the thread. */
739
740struct value *
741get_last_thread_stack_temporary (ptid_t ptid)
742{
743 struct value *lastval = NULL;
744 struct thread_info *tp = find_thread_ptid (ptid);
745
746 gdb_assert (tp != NULL);
747 if (!VEC_empty (value_ptr, tp->stack_temporaries))
748 lastval = VEC_last (value_ptr, tp->stack_temporaries);
749
750 return lastval;
751}
752
5231c1fd
PA
753void
754thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid)
755{
82f73884
PA
756 struct inferior *inf;
757 struct thread_info *tp;
758
759 /* It can happen that what we knew as the target inferior id
760 changes. E.g, target remote may only discover the remote process
761 pid after adding the inferior to GDB's list. */
c9657e70 762 inf = find_inferior_ptid (old_ptid);
82f73884
PA
763 inf->pid = ptid_get_pid (new_ptid);
764
e09875d4 765 tp = find_thread_ptid (old_ptid);
5231c1fd
PA
766 tp->ptid = new_ptid;
767
768 observer_notify_thread_ptid_changed (old_ptid, new_ptid);
769}
770
e1ac3328
VP
771void
772set_running (ptid_t ptid, int running)
773{
774 struct thread_info *tp;
d90e17a7 775 int all = ptid_equal (ptid, minus_one_ptid);
e1ac3328 776
e1ac3328
VP
777 /* We try not to notify the observer if no thread has actually changed
778 the running state -- merely to reduce the number of messages to
779 frontend. Frontend is supposed to handle multiple *running just fine. */
d90e17a7 780 if (all || ptid_is_pid (ptid))
e1ac3328
VP
781 {
782 int any_started = 0;
5d502164 783
e1ac3328 784 for (tp = thread_list; tp; tp = tp->next)
d90e17a7
PA
785 if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
786 {
30596231 787 if (tp->state == THREAD_EXITED)
d90e17a7 788 continue;
30596231 789 if (running && tp->state == THREAD_STOPPED)
d90e17a7 790 any_started = 1;
30596231 791 tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
d90e17a7 792 }
c5a4d20b
PA
793 if (any_started)
794 observer_notify_target_resumed (ptid);
e1ac3328
VP
795 }
796 else
797 {
4f8d22e3 798 int started = 0;
5d502164 799
e09875d4 800 tp = find_thread_ptid (ptid);
e1ac3328 801 gdb_assert (tp);
30596231
PA
802 gdb_assert (tp->state != THREAD_EXITED);
803 if (running && tp->state == THREAD_STOPPED)
4f8d22e3 804 started = 1;
30596231 805 tp->state = running ? THREAD_RUNNING : THREAD_STOPPED;
c5a4d20b 806 if (started)
4f8d22e3
PA
807 observer_notify_target_resumed (ptid);
808 }
e1ac3328
VP
809}
810
4f8d22e3
PA
811static int
812is_thread_state (ptid_t ptid, enum thread_state state)
e1ac3328
VP
813{
814 struct thread_info *tp;
815
e09875d4 816 tp = find_thread_ptid (ptid);
e1ac3328 817 gdb_assert (tp);
30596231 818 return tp->state == state;
4f8d22e3
PA
819}
820
821int
822is_stopped (ptid_t ptid)
823{
4f8d22e3
PA
824 return is_thread_state (ptid, THREAD_STOPPED);
825}
826
827int
828is_exited (ptid_t ptid)
829{
4f8d22e3
PA
830 return is_thread_state (ptid, THREAD_EXITED);
831}
832
833int
834is_running (ptid_t ptid)
835{
4f8d22e3 836 return is_thread_state (ptid, THREAD_RUNNING);
e1ac3328
VP
837}
838
8ea051c5
PA
839int
840is_executing (ptid_t ptid)
841{
842 struct thread_info *tp;
843
e09875d4 844 tp = find_thread_ptid (ptid);
8ea051c5 845 gdb_assert (tp);
30596231 846 return tp->executing;
8ea051c5
PA
847}
848
849void
850set_executing (ptid_t ptid, int executing)
851{
852 struct thread_info *tp;
d90e17a7 853 int all = ptid_equal (ptid, minus_one_ptid);
8ea051c5 854
d90e17a7 855 if (all || ptid_is_pid (ptid))
8ea051c5
PA
856 {
857 for (tp = thread_list; tp; tp = tp->next)
d90e17a7 858 if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
30596231 859 tp->executing = executing;
8ea051c5
PA
860 }
861 else
862 {
e09875d4 863 tp = find_thread_ptid (ptid);
8ea051c5 864 gdb_assert (tp);
30596231 865 tp->executing = executing;
8ea051c5 866 }
b57bacec
PA
867
868 /* It only takes one running thread to spawn more threads.*/
869 if (executing)
870 threads_executing = 1;
871 /* Only clear the flag if the caller is telling us everything is
872 stopped. */
873 else if (ptid_equal (minus_one_ptid, ptid))
874 threads_executing = 0;
875}
876
877/* See gdbthread.h. */
878
879int
880threads_are_executing (void)
881{
882 return threads_executing;
8ea051c5
PA
883}
884
252fbfc8
PA
885void
886set_stop_requested (ptid_t ptid, int stop)
887{
888 struct thread_info *tp;
889 int all = ptid_equal (ptid, minus_one_ptid);
890
891 if (all || ptid_is_pid (ptid))
892 {
893 for (tp = thread_list; tp; tp = tp->next)
894 if (all || ptid_get_pid (tp->ptid) == ptid_get_pid (ptid))
895 tp->stop_requested = stop;
896 }
897 else
898 {
e09875d4 899 tp = find_thread_ptid (ptid);
252fbfc8
PA
900 gdb_assert (tp);
901 tp->stop_requested = stop;
902 }
903
904 /* Call the stop requested observer so other components of GDB can
905 react to this request. */
906 if (stop)
907 observer_notify_thread_stop_requested (ptid);
908}
909
29f49a6a
PA
910void
911finish_thread_state (ptid_t ptid)
912{
913 struct thread_info *tp;
914 int all;
915 int any_started = 0;
916
917 all = ptid_equal (ptid, minus_one_ptid);
918
919 if (all || ptid_is_pid (ptid))
920 {
921 for (tp = thread_list; tp; tp = tp->next)
922 {
30596231 923 if (tp->state == THREAD_EXITED)
29f49a6a
PA
924 continue;
925 if (all || ptid_get_pid (ptid) == ptid_get_pid (tp->ptid))
926 {
30596231 927 if (tp->executing && tp->state == THREAD_STOPPED)
29f49a6a 928 any_started = 1;
30596231 929 tp->state = tp->executing ? THREAD_RUNNING : THREAD_STOPPED;
29f49a6a
PA
930 }
931 }
932 }
933 else
934 {
e09875d4 935 tp = find_thread_ptid (ptid);
29f49a6a 936 gdb_assert (tp);
30596231 937 if (tp->state != THREAD_EXITED)
29f49a6a 938 {
30596231 939 if (tp->executing && tp->state == THREAD_STOPPED)
29f49a6a 940 any_started = 1;
30596231 941 tp->state = tp->executing ? THREAD_RUNNING : THREAD_STOPPED;
29f49a6a
PA
942 }
943 }
944
945 if (any_started)
946 observer_notify_target_resumed (ptid);
947}
948
949void
950finish_thread_state_cleanup (void *arg)
951{
952 ptid_t *ptid_p = arg;
953
954 gdb_assert (arg);
955
956 finish_thread_state (*ptid_p);
957}
958
ce4c476a
PA
959int
960pc_in_thread_step_range (CORE_ADDR pc, struct thread_info *thread)
961{
962 return (pc >= thread->control.step_range_start
963 && pc < thread->control.step_range_end);
964}
965
8e8901c5 966/* Prints the list of threads and their details on UIOUT.
aea5b279 967 This is a version of 'info_threads_command' suitable for
c378eb4e 968 use from MI.
4f8d22e3 969 If REQUESTED_THREAD is not -1, it's the GDB id of the thread
8e8901c5 970 that should be printed. Otherwise, all threads are
c378eb4e 971 printed.
3ee1c036 972 If PID is not -1, only print threads from the process PID.
c378eb4e 973 Otherwise, threads from all attached PIDs are printed.
3ee1c036
VP
974 If both REQUESTED_THREAD and PID are not -1, then the thread
975 is printed if it belongs to the specified process. Otherwise,
976 an error is raised. */
8e8901c5 977void
aea5b279 978print_thread_info (struct ui_out *uiout, char *requested_threads, int pid)
c906108c
SS
979{
980 struct thread_info *tp;
39f77062 981 ptid_t current_ptid;
99b3d574 982 struct cleanup *old_chain;
4694da01 983 char *extra_info, *name, *target_id;
8e8901c5 984 int current_thread = -1;
c906108c 985
dc146f7c 986 update_thread_list ();
39f77062 987 current_ptid = inferior_ptid;
4f8d22e3
PA
988
989 /* We'll be switching threads temporarily. */
990 old_chain = make_cleanup_restore_current_thread ();
991
a7658b96
TT
992 /* For backward compatibility, we make a list for MI. A table is
993 preferable for the CLI, though, because it shows table
994 headers. */
995 if (ui_out_is_mi_like_p (uiout))
996 make_cleanup_ui_out_list_begin_end (uiout, "threads");
997 else
998 {
999 int n_threads = 0;
1000
1001 for (tp = thread_list; tp; tp = tp->next)
1002 {
aea5b279 1003 if (!number_is_in_list (requested_threads, tp->num))
a7658b96
TT
1004 continue;
1005
dfd4cc63 1006 if (pid != -1 && ptid_get_pid (tp->ptid) != pid)
a7658b96
TT
1007 continue;
1008
30596231 1009 if (tp->state == THREAD_EXITED)
a7658b96
TT
1010 continue;
1011
1012 ++n_threads;
1013 }
1014
1015 if (n_threads == 0)
1016 {
aea5b279 1017 if (requested_threads == NULL || *requested_threads == '\0')
a7658b96
TT
1018 ui_out_message (uiout, 0, _("No threads.\n"));
1019 else
aea5b279
MS
1020 ui_out_message (uiout, 0, _("No threads match '%s'.\n"),
1021 requested_threads);
a7658b96
TT
1022 do_cleanups (old_chain);
1023 return;
1024 }
1025
4694da01 1026 make_cleanup_ui_out_table_begin_end (uiout, 4, n_threads, "threads");
a7658b96
TT
1027
1028 ui_out_table_header (uiout, 1, ui_left, "current", "");
1029 ui_out_table_header (uiout, 4, ui_left, "id", "Id");
1030 ui_out_table_header (uiout, 17, ui_left, "target-id", "Target Id");
a7658b96
TT
1031 ui_out_table_header (uiout, 1, ui_left, "frame", "Frame");
1032 ui_out_table_body (uiout);
1033 }
1034
c906108c
SS
1035 for (tp = thread_list; tp; tp = tp->next)
1036 {
8e8901c5 1037 struct cleanup *chain2;
dc146f7c 1038 int core;
8e8901c5 1039
aea5b279 1040 if (!number_is_in_list (requested_threads, tp->num))
8e8901c5
VP
1041 continue;
1042
dfd4cc63 1043 if (pid != -1 && ptid_get_pid (tp->ptid) != pid)
3ee1c036 1044 {
aea5b279 1045 if (requested_threads != NULL && *requested_threads != '\0')
3ee1c036
VP
1046 error (_("Requested thread not found in requested process"));
1047 continue;
1048 }
1049
4f8d22e3
PA
1050 if (ptid_equal (tp->ptid, current_ptid))
1051 current_thread = tp->num;
1052
30596231 1053 if (tp->state == THREAD_EXITED)
4f8d22e3
PA
1054 continue;
1055
8e8901c5
VP
1056 chain2 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1057
a7658b96
TT
1058 if (ui_out_is_mi_like_p (uiout))
1059 {
1060 /* Compatibility. */
1061 if (ptid_equal (tp->ptid, current_ptid))
1062 ui_out_text (uiout, "* ");
1063 else
1064 ui_out_text (uiout, " ");
1065 }
c906108c 1066 else
a7658b96
TT
1067 {
1068 if (ptid_equal (tp->ptid, current_ptid))
1069 ui_out_field_string (uiout, "current", "*");
1070 else
1071 ui_out_field_skip (uiout, "current");
1072 }
c906108c 1073
8e8901c5 1074 ui_out_field_int (uiout, "id", tp->num);
0d06e24b 1075
4694da01
TT
1076 /* For the CLI, we stuff everything into the target-id field.
1077 This is a gross hack to make the output come out looking
1078 correct. The underlying problem here is that ui-out has no
1079 way to specify that a field's space allocation should be
1080 shared by several fields. For MI, we do the right thing
1081 instead. */
1082
1083 target_id = target_pid_to_str (tp->ptid);
ed406532 1084 extra_info = target_extra_thread_info (tp);
4694da01
TT
1085 name = tp->name ? tp->name : target_thread_name (tp);
1086
1087 if (ui_out_is_mi_like_p (uiout))
8e8901c5 1088 {
4694da01
TT
1089 ui_out_field_string (uiout, "target-id", target_id);
1090 if (extra_info)
1091 ui_out_field_string (uiout, "details", extra_info);
1092 if (name)
1093 ui_out_field_string (uiout, "name", name);
1094 }
1095 else
1096 {
1097 struct cleanup *str_cleanup;
1098 char *contents;
1099
1100 if (extra_info && name)
1101 contents = xstrprintf ("%s \"%s\" (%s)", target_id,
1102 name, extra_info);
1103 else if (extra_info)
1104 contents = xstrprintf ("%s (%s)", target_id, extra_info);
1105 else if (name)
1106 contents = xstrprintf ("%s \"%s\"", target_id, name);
1107 else
1108 contents = xstrdup (target_id);
1109 str_cleanup = make_cleanup (xfree, contents);
1110
1111 ui_out_field_string (uiout, "target-id", contents);
1112 do_cleanups (str_cleanup);
8e8901c5 1113 }
4f8d22e3 1114
30596231 1115 if (tp->state == THREAD_RUNNING)
94cc34af
PA
1116 ui_out_text (uiout, "(running)\n");
1117 else
1118 {
1119 /* The switch below puts us at the top of the stack (leaf
1120 frame). */
1121 switch_to_thread (tp->ptid);
1122 print_stack_frame (get_selected_frame (NULL),
1123 /* For MI output, print frame level. */
1124 ui_out_is_mi_like_p (uiout),
08d72866 1125 LOCATION, 0);
94cc34af 1126 }
8e8901c5 1127
90139f7d
VP
1128 if (ui_out_is_mi_like_p (uiout))
1129 {
1130 char *state = "stopped";
5d502164 1131
30596231 1132 if (tp->state == THREAD_RUNNING)
90139f7d
VP
1133 state = "running";
1134 ui_out_field_string (uiout, "state", state);
1135 }
1136
dc146f7c
VP
1137 core = target_core_of_thread (tp->ptid);
1138 if (ui_out_is_mi_like_p (uiout) && core != -1)
1139 ui_out_field_int (uiout, "core", core);
1140
8e8901c5 1141 do_cleanups (chain2);
c906108c
SS
1142 }
1143
99b3d574
DP
1144 /* Restores the current thread and the frame selected before
1145 the "info threads" command. */
1146 do_cleanups (old_chain);
c906108c 1147
aea5b279 1148 if (pid == -1 && requested_threads == NULL)
8e8901c5 1149 {
4f8d22e3 1150 gdb_assert (current_thread != -1
d729566a
PA
1151 || !thread_list
1152 || ptid_equal (inferior_ptid, null_ptid));
0bcd3e20 1153 if (current_thread != -1 && ui_out_is_mi_like_p (uiout))
8e8901c5 1154 ui_out_field_int (uiout, "current-thread-id", current_thread);
94cc34af 1155
4f8d22e3
PA
1156 if (current_thread != -1 && is_exited (current_ptid))
1157 ui_out_message (uiout, 0, "\n\
1158The current thread <Thread ID %d> has terminated. See `help thread'.\n",
1159 current_thread);
d729566a
PA
1160 else if (thread_list
1161 && current_thread == -1
1162 && ptid_equal (current_ptid, null_ptid))
1163 ui_out_message (uiout, 0, "\n\
1164No selected thread. See `help thread'.\n");
c906108c 1165 }
c906108c
SS
1166}
1167
8e8901c5
VP
1168/* Print information about currently known threads
1169
60f98dde
MS
1170 Optional ARG is a thread id, or list of thread ids.
1171
1172 Note: this has the drawback that it _really_ switches
1173 threads, which frees the frame cache. A no-side
1174 effects info-threads command would be nicer. */
8e8901c5
VP
1175
1176static void
1177info_threads_command (char *arg, int from_tty)
1178{
79a45e25 1179 print_thread_info (current_uiout, arg, -1);
8e8901c5
VP
1180}
1181
c378eb4e 1182/* Switch from one thread to another. */
c906108c 1183
6a6b96b9 1184void
39f77062 1185switch_to_thread (ptid_t ptid)
c906108c 1186{
6c95b8df
PA
1187 /* Switch the program space as well, if we can infer it from the now
1188 current thread. Otherwise, it's up to the caller to select the
1189 space it wants. */
1190 if (!ptid_equal (ptid, null_ptid))
1191 {
1192 struct inferior *inf;
1193
c9657e70 1194 inf = find_inferior_ptid (ptid);
6c95b8df
PA
1195 gdb_assert (inf != NULL);
1196 set_current_program_space (inf->pspace);
1197 set_current_inferior (inf);
1198 }
1199
39f77062 1200 if (ptid_equal (ptid, inferior_ptid))
c906108c
SS
1201 return;
1202
39f77062 1203 inferior_ptid = ptid;
35f196d9 1204 reinit_frame_cache ();
94cc34af 1205
4f8d22e3
PA
1206 /* We don't check for is_stopped, because we're called at times
1207 while in the TARGET_RUNNING state, e.g., while handling an
1208 internal event. */
d729566a
PA
1209 if (!ptid_equal (inferior_ptid, null_ptid)
1210 && !is_exited (ptid)
1211 && !is_executing (ptid))
fb14de7b 1212 stop_pc = regcache_read_pc (get_thread_regcache (ptid));
94cc34af
PA
1213 else
1214 stop_pc = ~(CORE_ADDR) 0;
c906108c
SS
1215}
1216
1217static void
39f77062 1218restore_current_thread (ptid_t ptid)
c906108c 1219{
dcf4fbde 1220 switch_to_thread (ptid);
99b3d574
DP
1221}
1222
1223static void
4f8d22e3 1224restore_selected_frame (struct frame_id a_frame_id, int frame_level)
99b3d574 1225{
4f8d22e3
PA
1226 struct frame_info *frame = NULL;
1227 int count;
1228
eb8c0621
TT
1229 /* This means there was no selected frame. */
1230 if (frame_level == -1)
1231 {
1232 select_frame (NULL);
1233 return;
1234 }
1235
4f8d22e3
PA
1236 gdb_assert (frame_level >= 0);
1237
1238 /* Restore by level first, check if the frame id is the same as
1239 expected. If that fails, try restoring by frame id. If that
1240 fails, nothing to do, just warn the user. */
1241
1242 count = frame_level;
1243 frame = find_relative_frame (get_current_frame (), &count);
1244 if (count == 0
1245 && frame != NULL
005ca36a
JB
1246 /* The frame ids must match - either both valid or both outer_frame_id.
1247 The latter case is not failsafe, but since it's highly unlikely
4f8d22e3
PA
1248 the search by level finds the wrong frame, it's 99.9(9)% of
1249 the time (for all practical purposes) safe. */
005ca36a 1250 && frame_id_eq (get_frame_id (frame), a_frame_id))
4f8d22e3
PA
1251 {
1252 /* Cool, all is fine. */
1253 select_frame (frame);
1254 return;
1255 }
99b3d574 1256
4f8d22e3
PA
1257 frame = frame_find_by_id (a_frame_id);
1258 if (frame != NULL)
1259 {
1260 /* Cool, refound it. */
1261 select_frame (frame);
1262 return;
1263 }
99b3d574 1264
0c501536
PA
1265 /* Nothing else to do, the frame layout really changed. Select the
1266 innermost stack frame. */
1267 select_frame (get_current_frame ());
1268
1269 /* Warn the user. */
79a45e25 1270 if (frame_level > 0 && !ui_out_is_mi_like_p (current_uiout))
99b3d574 1271 {
3e43a32a 1272 warning (_("Couldn't restore frame #%d in "
e0162910 1273 "current thread. Bottom (innermost) frame selected:"),
4f8d22e3
PA
1274 frame_level);
1275 /* For MI, we should probably have a notification about
1276 current frame change. But this error is not very
1277 likely, so don't bother for now. */
08d72866 1278 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
c906108c
SS
1279 }
1280}
1281
6ecce94d
AC
1282struct current_thread_cleanup
1283{
39f77062 1284 ptid_t inferior_ptid;
99b3d574 1285 struct frame_id selected_frame_id;
4f8d22e3
PA
1286 int selected_frame_level;
1287 int was_stopped;
6c95b8df 1288 int inf_id;
9addecb9 1289 int was_removable;
6ecce94d
AC
1290};
1291
1292static void
1293do_restore_current_thread_cleanup (void *arg)
1294{
4f8d22e3 1295 struct thread_info *tp;
6ecce94d 1296 struct current_thread_cleanup *old = arg;
d729566a 1297
e09875d4 1298 tp = find_thread_ptid (old->inferior_ptid);
d729566a
PA
1299
1300 /* If the previously selected thread belonged to a process that has
1301 in the mean time been deleted (due to normal exit, detach, etc.),
1302 then don't revert back to it, but instead simply drop back to no
1303 thread selected. */
1304 if (tp
c9657e70 1305 && find_inferior_ptid (tp->ptid) != NULL)
d729566a 1306 restore_current_thread (old->inferior_ptid);
88fc996f 1307 else
6c95b8df
PA
1308 {
1309 restore_current_thread (null_ptid);
1310 set_current_inferior (find_inferior_id (old->inf_id));
1311 }
94cc34af 1312
4f8d22e3
PA
1313 /* The running state of the originally selected thread may have
1314 changed, so we have to recheck it here. */
d729566a
PA
1315 if (!ptid_equal (inferior_ptid, null_ptid)
1316 && old->was_stopped
4f8d22e3
PA
1317 && is_stopped (inferior_ptid)
1318 && target_has_registers
1319 && target_has_stack
1320 && target_has_memory)
1321 restore_selected_frame (old->selected_frame_id,
1322 old->selected_frame_level);
1323}
1324
1325static void
1326restore_current_thread_cleanup_dtor (void *arg)
1327{
1328 struct current_thread_cleanup *old = arg;
1329 struct thread_info *tp;
9addecb9 1330 struct inferior *inf;
5d502164 1331
e09875d4 1332 tp = find_thread_ptid (old->inferior_ptid);
4f8d22e3
PA
1333 if (tp)
1334 tp->refcount--;
9addecb9
TT
1335 inf = find_inferior_id (old->inf_id);
1336 if (inf != NULL)
1337 inf->removable = old->was_removable;
b8c9b27d 1338 xfree (old);
6ecce94d
AC
1339}
1340
054e8d9e
AA
1341/* Set the thread reference count. */
1342
1343static void
1344set_thread_refcount (void *data)
1345{
1346 int k;
1347 struct thread_array_cleanup *ta_cleanup = data;
1348
1349 for (k = 0; k != ta_cleanup->count; k++)
1350 ta_cleanup->tp_array[k]->refcount--;
1351}
1352
6208b47d 1353struct cleanup *
4f8d22e3 1354make_cleanup_restore_current_thread (void)
6ecce94d 1355{
4f8d22e3
PA
1356 struct thread_info *tp;
1357 struct frame_info *frame;
1358 struct current_thread_cleanup *old;
1359
1360 old = xmalloc (sizeof (struct current_thread_cleanup));
39f77062 1361 old->inferior_ptid = inferior_ptid;
6c95b8df 1362 old->inf_id = current_inferior ()->num;
9addecb9 1363 old->was_removable = current_inferior ()->removable;
4f8d22e3 1364
d729566a
PA
1365 if (!ptid_equal (inferior_ptid, null_ptid))
1366 {
1367 old->was_stopped = is_stopped (inferior_ptid);
1368 if (old->was_stopped
1369 && target_has_registers
1370 && target_has_stack
1371 && target_has_memory)
eb8c0621
TT
1372 {
1373 /* When processing internal events, there might not be a
1374 selected frame. If we naively call get_selected_frame
1375 here, then we can end up reading debuginfo for the
1376 current frame, but we don't generally need the debuginfo
1377 at this point. */
1378 frame = get_selected_frame_if_set ();
1379 }
d729566a
PA
1380 else
1381 frame = NULL;
4f8d22e3 1382
d729566a
PA
1383 old->selected_frame_id = get_frame_id (frame);
1384 old->selected_frame_level = frame_relative_level (frame);
1385
e09875d4 1386 tp = find_thread_ptid (inferior_ptid);
d729566a
PA
1387 if (tp)
1388 tp->refcount++;
1389 }
4f8d22e3 1390
9addecb9
TT
1391 current_inferior ()->removable = 0;
1392
4f8d22e3
PA
1393 return make_cleanup_dtor (do_restore_current_thread_cleanup, old,
1394 restore_current_thread_cleanup_dtor);
6ecce94d
AC
1395}
1396
253828f1
JK
1397/* If non-zero tp_array_compar should sort in ascending order, otherwise in
1398 descending order. */
1399
1400static int tp_array_compar_ascending;
1401
1402/* Sort an array for struct thread_info pointers by their NUM, order is
1403 determined by TP_ARRAY_COMPAR_ASCENDING. */
1404
1405static int
1406tp_array_compar (const void *ap_voidp, const void *bp_voidp)
1407{
1408 const struct thread_info *const *ap = ap_voidp;
1409 const struct thread_info *const *bp = bp_voidp;
1410
1411 return ((((*ap)->num > (*bp)->num) - ((*ap)->num < (*bp)->num))
1412 * (tp_array_compar_ascending ? +1 : -1));
1413}
1414
c906108c
SS
1415/* Apply a GDB command to a list of threads. List syntax is a whitespace
1416 seperated list of numbers, or ranges, or the keyword `all'. Ranges consist
1417 of two numbers seperated by a hyphen. Examples:
1418
c5aa993b
JM
1419 thread apply 1 2 7 4 backtrace Apply backtrace cmd to threads 1,2,7,4
1420 thread apply 2-7 9 p foo(1) Apply p foo(1) cmd to threads 2->7 & 9
c378eb4e 1421 thread apply all p x/i $pc Apply x/i $pc cmd to all threads. */
c906108c
SS
1422
1423static void
fba45db2 1424thread_apply_all_command (char *cmd, int from_tty)
c906108c 1425{
4f8d22e3 1426 struct cleanup *old_chain;
e35ce267 1427 char *saved_cmd;
054e8d9e
AA
1428 int tc;
1429 struct thread_array_cleanup ta_cleanup;
c906108c 1430
253828f1
JK
1431 tp_array_compar_ascending = 0;
1432 if (cmd != NULL
1433 && check_for_argument (&cmd, "-ascending", strlen ("-ascending")))
1434 {
1435 cmd = skip_spaces (cmd);
1436 tp_array_compar_ascending = 1;
1437 }
1438
c906108c 1439 if (cmd == NULL || *cmd == '\000')
8a3fe4f8 1440 error (_("Please specify a command following the thread ID list"));
94cc34af 1441
dc146f7c 1442 update_thread_list ();
e9d196c5 1443
4f8d22e3
PA
1444 old_chain = make_cleanup_restore_current_thread ();
1445
e35ce267 1446 /* Save a copy of the command in case it is clobbered by
c378eb4e 1447 execute_command. */
5b616ba1 1448 saved_cmd = xstrdup (cmd);
94cc34af 1449 make_cleanup (xfree, saved_cmd);
94cc34af 1450
a25d8bf9
PA
1451 /* Note this includes exited threads. */
1452 tc = thread_count ();
1453 if (tc != 0)
054e8d9e
AA
1454 {
1455 struct thread_info **tp_array;
1456 struct thread_info *tp;
1457 int i = 0, k;
1458
1459 /* Save a copy of the thread_list in case we execute detach
1460 command. */
1461 tp_array = xmalloc (sizeof (struct thread_info *) * tc);
1462 make_cleanup (xfree, tp_array);
054e8d9e 1463
034f788c 1464 ALL_NON_EXITED_THREADS (tp)
054e8d9e
AA
1465 {
1466 tp_array[i] = tp;
1467 tp->refcount++;
1468 i++;
1469 }
a25d8bf9
PA
1470 /* Because we skipped exited threads, we may end up with fewer
1471 threads in the array than the total count of threads. */
1472 gdb_assert (i <= tc);
054e8d9e 1473
a25d8bf9
PA
1474 if (i != 0)
1475 qsort (tp_array, i, sizeof (*tp_array), tp_array_compar);
253828f1 1476
a25d8bf9
PA
1477 ta_cleanup.tp_array = tp_array;
1478 ta_cleanup.count = i;
054e8d9e
AA
1479 make_cleanup (set_thread_refcount, &ta_cleanup);
1480
1481 for (k = 0; k != i; k++)
1482 if (thread_alive (tp_array[k]))
1483 {
1484 switch_to_thread (tp_array[k]->ptid);
1485 printf_filtered (_("\nThread %d (%s):\n"),
1486 tp_array[k]->num,
1487 target_pid_to_str (inferior_ptid));
1488 execute_command (cmd, from_tty);
1489
1490 /* Restore exact command used previously. */
1491 strcpy (cmd, saved_cmd);
1492 }
1493 }
6ecce94d
AC
1494
1495 do_cleanups (old_chain);
c906108c
SS
1496}
1497
1498static void
fba45db2 1499thread_apply_command (char *tidlist, int from_tty)
c906108c
SS
1500{
1501 char *cmd;
c906108c 1502 struct cleanup *old_chain;
e35ce267 1503 char *saved_cmd;
197f0a60 1504 struct get_number_or_range_state state;
c906108c
SS
1505
1506 if (tidlist == NULL || *tidlist == '\000')
8a3fe4f8 1507 error (_("Please specify a thread ID list"));
c906108c 1508
c5aa993b 1509 for (cmd = tidlist; *cmd != '\000' && !isalpha (*cmd); cmd++);
c906108c
SS
1510
1511 if (*cmd == '\000')
8a3fe4f8 1512 error (_("Please specify a command following the thread ID list"));
c906108c 1513
e35ce267 1514 /* Save a copy of the command in case it is clobbered by
c378eb4e 1515 execute_command. */
5b616ba1 1516 saved_cmd = xstrdup (cmd);
4f8d22e3 1517 old_chain = make_cleanup (xfree, saved_cmd);
197f0a60
TT
1518
1519 init_number_or_range (&state, tidlist);
1520 while (!state.finished && state.string < cmd)
c906108c
SS
1521 {
1522 struct thread_info *tp;
65ebfb52 1523 int start;
c906108c 1524
197f0a60 1525 start = get_number_or_range (&state);
c906108c 1526
65fc9b77
PA
1527 make_cleanup_restore_current_thread ();
1528
65ebfb52 1529 tp = find_thread_id (start);
c906108c 1530
65ebfb52
MS
1531 if (!tp)
1532 warning (_("Unknown thread %d."), start);
1533 else if (!thread_alive (tp))
1534 warning (_("Thread %d has terminated."), start);
1535 else
1536 {
1537 switch_to_thread (tp->ptid);
4f8d22e3 1538
65ebfb52
MS
1539 printf_filtered (_("\nThread %d (%s):\n"), tp->num,
1540 target_pid_to_str (inferior_ptid));
1541 execute_command (cmd, from_tty);
4f8d22e3 1542
65ebfb52
MS
1543 /* Restore exact command used previously. */
1544 strcpy (cmd, saved_cmd);
c906108c
SS
1545 }
1546 }
6ecce94d
AC
1547
1548 do_cleanups (old_chain);
c906108c
SS
1549}
1550
1551/* Switch to the specified thread. Will dispatch off to thread_apply_command
1552 if prefix of arg is `apply'. */
1553
f0e8c4c5 1554void
fba45db2 1555thread_command (char *tidstr, int from_tty)
c906108c 1556{
c906108c
SS
1557 if (!tidstr)
1558 {
d729566a
PA
1559 if (ptid_equal (inferior_ptid, null_ptid))
1560 error (_("No thread selected"));
1561
c906108c 1562 if (target_has_stack)
4f8d22e3
PA
1563 {
1564 if (is_exited (inferior_ptid))
1565 printf_filtered (_("[Current thread is %d (%s) (exited)]\n"),
1566 pid_to_thread_id (inferior_ptid),
54ba13f7 1567 target_pid_to_str (inferior_ptid));
4f8d22e3
PA
1568 else
1569 printf_filtered (_("[Current thread is %d (%s)]\n"),
1570 pid_to_thread_id (inferior_ptid),
54ba13f7 1571 target_pid_to_str (inferior_ptid));
4f8d22e3 1572 }
c906108c 1573 else
8a3fe4f8 1574 error (_("No stack."));
c906108c
SS
1575 return;
1576 }
c5394b80 1577
79a45e25 1578 gdb_thread_select (current_uiout, tidstr, NULL);
c5394b80
JM
1579}
1580
4694da01
TT
1581/* Implementation of `thread name'. */
1582
1583static void
1584thread_name_command (char *arg, int from_tty)
1585{
1586 struct thread_info *info;
1587
1588 if (ptid_equal (inferior_ptid, null_ptid))
1589 error (_("No thread selected"));
1590
529480d0 1591 arg = skip_spaces (arg);
4694da01
TT
1592
1593 info = inferior_thread ();
1594 xfree (info->name);
1595 info->name = arg ? xstrdup (arg) : NULL;
1596}
1597
60f98dde
MS
1598/* Find thread ids with a name, target pid, or extra info matching ARG. */
1599
1600static void
1601thread_find_command (char *arg, int from_tty)
1602{
1603 struct thread_info *tp;
1604 char *tmp;
1605 unsigned long match = 0;
1606
1607 if (arg == NULL || *arg == '\0')
1608 error (_("Command requires an argument."));
1609
1610 tmp = re_comp (arg);
1611 if (tmp != 0)
1612 error (_("Invalid regexp (%s): %s"), tmp, arg);
1613
1614 update_thread_list ();
1615 for (tp = thread_list; tp; tp = tp->next)
1616 {
1617 if (tp->name != NULL && re_exec (tp->name))
1618 {
1619 printf_filtered (_("Thread %d has name '%s'\n"),
1620 tp->num, tp->name);
1621 match++;
1622 }
1623
1624 tmp = target_thread_name (tp);
1625 if (tmp != NULL && re_exec (tmp))
1626 {
1627 printf_filtered (_("Thread %d has target name '%s'\n"),
1628 tp->num, tmp);
1629 match++;
1630 }
1631
1632 tmp = target_pid_to_str (tp->ptid);
1633 if (tmp != NULL && re_exec (tmp))
1634 {
1635 printf_filtered (_("Thread %d has target id '%s'\n"),
1636 tp->num, tmp);
1637 match++;
1638 }
1639
1640 tmp = target_extra_thread_info (tp);
1641 if (tmp != NULL && re_exec (tmp))
1642 {
1643 printf_filtered (_("Thread %d has extra info '%s'\n"),
1644 tp->num, tmp);
1645 match++;
1646 }
1647 }
1648 if (!match)
1649 printf_filtered (_("No threads match '%s'\n"), arg);
1650}
1651
93815fbf
VP
1652/* Print notices when new threads are attached and detached. */
1653int print_thread_events = 1;
1654static void
1655show_print_thread_events (struct ui_file *file, int from_tty,
1656 struct cmd_list_element *c, const char *value)
1657{
3e43a32a
MS
1658 fprintf_filtered (file,
1659 _("Printing of thread events is %s.\n"),
93815fbf
VP
1660 value);
1661}
1662
c5394b80 1663static int
6949171e 1664do_captured_thread_select (struct ui_out *uiout, void *tidstr)
c5394b80
JM
1665{
1666 int num;
1667 struct thread_info *tp;
1668
81490ea1 1669 num = value_as_long (parse_and_eval (tidstr));
c906108c
SS
1670
1671 tp = find_thread_id (num);
1672
8b93c638 1673 if (!tp)
8a3fe4f8 1674 error (_("Thread ID %d not known."), num);
c906108c
SS
1675
1676 if (!thread_alive (tp))
8a3fe4f8 1677 error (_("Thread ID %d has terminated."), num);
c906108c 1678
dcf4fbde 1679 switch_to_thread (tp->ptid);
c906108c 1680
db5a7484
NR
1681 annotate_thread_changed ();
1682
8b93c638 1683 ui_out_text (uiout, "[Switching to thread ");
39f77062 1684 ui_out_field_int (uiout, "new-thread-id", pid_to_thread_id (inferior_ptid));
8b93c638 1685 ui_out_text (uiout, " (");
54ba13f7 1686 ui_out_text (uiout, target_pid_to_str (inferior_ptid));
8b93c638 1687 ui_out_text (uiout, ")]");
c5394b80 1688
4f8d22e3
PA
1689 /* Note that we can't reach this with an exited thread, due to the
1690 thread_alive check above. */
30596231 1691 if (tp->state == THREAD_RUNNING)
94cc34af 1692 ui_out_text (uiout, "(running)\n");
4f8d22e3 1693 else
98871305
TT
1694 {
1695 ui_out_text (uiout, "\n");
08d72866 1696 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
98871305 1697 }
4f8d22e3
PA
1698
1699 /* Since the current thread may have changed, see if there is any
1700 exited thread we can now delete. */
1701 prune_threads ();
94cc34af 1702
c5394b80
JM
1703 return GDB_RC_OK;
1704}
1705
1706enum gdb_rc
ce43223b 1707gdb_thread_select (struct ui_out *uiout, char *tidstr, char **error_message)
c5394b80 1708{
b0b13bb4
DJ
1709 if (catch_exceptions_with_msg (uiout, do_captured_thread_select, tidstr,
1710 error_message, RETURN_MASK_ALL) < 0)
1711 return GDB_RC_FAIL;
1712 return GDB_RC_OK;
c906108c
SS
1713}
1714
b57bacec
PA
1715/* Update the 'threads_executing' global based on the threads we know
1716 about right now. */
1717
1718static void
1719update_threads_executing (void)
1720{
1721 struct thread_info *tp;
1722
1723 threads_executing = 0;
1724 ALL_NON_EXITED_THREADS (tp)
1725 {
1726 if (tp->executing)
1727 {
1728 threads_executing = 1;
1729 break;
1730 }
1731 }
1732}
1733
dc146f7c
VP
1734void
1735update_thread_list (void)
1736{
e8032dde 1737 target_update_thread_list ();
b57bacec 1738 update_threads_executing ();
dc146f7c
VP
1739}
1740
6aed2dbc
SS
1741/* Return a new value for the selected thread's id. Return a value of 0 if
1742 no thread is selected, or no threads exist. */
1743
1744static struct value *
22d2b532
SDJ
1745thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
1746 void *ignore)
6aed2dbc
SS
1747{
1748 struct thread_info *tp = find_thread_ptid (inferior_ptid);
1749
1750 return value_from_longest (builtin_type (gdbarch)->builtin_int,
1751 (tp ? tp->num : 0));
1752}
1753
c906108c
SS
1754/* Commands with a prefix of `thread'. */
1755struct cmd_list_element *thread_cmd_list = NULL;
1756
22d2b532
SDJ
1757/* Implementation of `thread' variable. */
1758
1759static const struct internalvar_funcs thread_funcs =
1760{
1761 thread_id_make_value,
1762 NULL,
1763 NULL
1764};
1765
c906108c 1766void
fba45db2 1767_initialize_thread (void)
c906108c
SS
1768{
1769 static struct cmd_list_element *thread_apply_list = NULL;
c906108c 1770
60f98dde
MS
1771 add_info ("threads", info_threads_command,
1772 _("Display currently known threads.\n\
1773Usage: info threads [ID]...\n\
1774Optional arguments are thread IDs with spaces between.\n\
1775If no arguments, all threads are displayed."));
c906108c 1776
d729566a 1777 add_prefix_cmd ("thread", class_run, thread_command, _("\
1bedd215
AC
1778Use this command to switch between threads.\n\
1779The new thread ID must be currently known."),
d729566a 1780 &thread_cmd_list, "thread ", 1, &cmdlist);
c906108c 1781
d729566a
PA
1782 add_prefix_cmd ("apply", class_run, thread_apply_command,
1783 _("Apply a command to a list of threads."),
1784 &thread_apply_list, "thread apply ", 1, &thread_cmd_list);
c906108c 1785
d729566a 1786 add_cmd ("all", class_run, thread_apply_all_command,
253828f1
JK
1787 _("\
1788Apply a command to all threads.\n\
1789\n\
1790Usage: thread apply all [-ascending] <command>\n\
1791-ascending: Call <command> for all threads in ascending order.\n\
1792 The default is descending order.\
1793"),
1794 &thread_apply_list);
c906108c 1795
4694da01
TT
1796 add_cmd ("name", class_run, thread_name_command,
1797 _("Set the current thread's name.\n\
1798Usage: thread name [NAME]\n\
1799If NAME is not given, then any existing name is removed."), &thread_cmd_list);
1800
60f98dde
MS
1801 add_cmd ("find", class_run, thread_find_command, _("\
1802Find threads that match a regular expression.\n\
1803Usage: thread find REGEXP\n\
1804Will display thread ids whose name, target ID, or extra info matches REGEXP."),
1805 &thread_cmd_list);
1806
4f45d445 1807 add_com_alias ("t", "thread", class_run, 1);
93815fbf
VP
1808
1809 add_setshow_boolean_cmd ("thread-events", no_class,
1810 &print_thread_events, _("\
11c68c47
EZ
1811Set printing of thread events (such as thread start and exit)."), _("\
1812Show printing of thread events (such as thread start and exit)."), NULL,
93815fbf
VP
1813 NULL,
1814 show_print_thread_events,
1815 &setprintlist, &showprintlist);
6aed2dbc 1816
22d2b532 1817 create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
c906108c 1818}
This page took 2.346054 seconds and 4 git commands to generate.