* sparc64-tdep.h (sparc64_regnum): Fix comment.
[deliverable/binutils-gdb.git] / gdb / lin-lwp.c
1 /* Multi-threaded debugging support for GNU/Linux (LWP layer).
2 Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21 #include "defs.h"
22
23 #include "gdb_assert.h"
24 #include "gdb_string.h"
25 #include <errno.h>
26 #include <signal.h>
27 #ifdef HAVE_TKILL_SYSCALL
28 #include <unistd.h>
29 #include <sys/syscall.h>
30 #endif
31 #include <sys/ptrace.h>
32 #include "gdb_wait.h"
33
34 #include "gdbthread.h"
35 #include "inferior.h"
36 #include "target.h"
37 #include "regcache.h"
38 #include "gdbcmd.h"
39
40 static int debug_lin_lwp;
41 extern char *strsignal (int sig);
42
43 #include "linux-nat.h"
44
45 /* On GNU/Linux there are no real LWP's. The closest thing to LWP's
46 are processes sharing the same VM space. A multi-threaded process
47 is basically a group of such processes. However, such a grouping
48 is almost entirely a user-space issue; the kernel doesn't enforce
49 such a grouping at all (this might change in the future). In
50 general, we'll rely on the threads library (i.e. the GNU/Linux
51 Threads library) to provide such a grouping.
52
53 It is perfectly well possible to write a multi-threaded application
54 without the assistance of a threads library, by using the clone
55 system call directly. This module should be able to give some
56 rudimentary support for debugging such applications if developers
57 specify the CLONE_PTRACE flag in the clone system call, and are
58 using the Linux kernel 2.4 or above.
59
60 Note that there are some peculiarities in GNU/Linux that affect
61 this code:
62
63 - In general one should specify the __WCLONE flag to waitpid in
64 order to make it report events for any of the cloned processes
65 (and leave it out for the initial process). However, if a cloned
66 process has exited the exit status is only reported if the
67 __WCLONE flag is absent. Linux kernel 2.4 has a __WALL flag, but
68 we cannot use it since GDB must work on older systems too.
69
70 - When a traced, cloned process exits and is waited for by the
71 debugger, the kernel reassigns it to the original parent and
72 keeps it around as a "zombie". Somehow, the GNU/Linux Threads
73 library doesn't notice this, which leads to the "zombie problem":
74 When debugged a multi-threaded process that spawns a lot of
75 threads will run out of processes, even if the threads exit,
76 because the "zombies" stay around. */
77
78 /* List of known LWPs. */
79 static struct lwp_info *lwp_list;
80
81 /* Number of LWPs in the list. */
82 static int num_lwps;
83
84 /* Non-zero if we're running in "threaded" mode. */
85 static int threaded;
86 \f
87
88 #define GET_LWP(ptid) ptid_get_lwp (ptid)
89 #define GET_PID(ptid) ptid_get_pid (ptid)
90 #define is_lwp(ptid) (GET_LWP (ptid) != 0)
91 #define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
92
93 /* If the last reported event was a SIGTRAP, this variable is set to
94 the process id of the LWP/thread that got it. */
95 ptid_t trap_ptid;
96 \f
97
98 /* This module's target-specific operations. */
99 static struct target_ops lin_lwp_ops;
100
101 /* The standard child operations. */
102 extern struct target_ops child_ops;
103
104 /* Since we cannot wait (in lin_lwp_wait) for the initial process and
105 any cloned processes with a single call to waitpid, we have to use
106 the WNOHANG flag and call waitpid in a loop. To optimize
107 things a bit we use `sigsuspend' to wake us up when a process has
108 something to report (it will send us a SIGCHLD if it has). To make
109 this work we have to juggle with the signal mask. We save the
110 original signal mask such that we can restore it before creating a
111 new process in order to avoid blocking certain signals in the
112 inferior. We then block SIGCHLD during the waitpid/sigsuspend
113 loop. */
114
115 /* Original signal mask. */
116 static sigset_t normal_mask;
117
118 /* Signal mask for use with sigsuspend in lin_lwp_wait, initialized in
119 _initialize_lin_lwp. */
120 static sigset_t suspend_mask;
121
122 /* Signals to block to make that sigsuspend work. */
123 static sigset_t blocked_mask;
124 \f
125
126 /* Prototypes for local functions. */
127 static int stop_wait_callback (struct lwp_info *lp, void *data);
128 static int lin_lwp_thread_alive (ptid_t ptid);
129 \f
130 /* Convert wait status STATUS to a string. Used for printing debug
131 messages only. */
132
133 static char *
134 status_to_str (int status)
135 {
136 static char buf[64];
137
138 if (WIFSTOPPED (status))
139 snprintf (buf, sizeof (buf), "%s (stopped)",
140 strsignal (WSTOPSIG (status)));
141 else if (WIFSIGNALED (status))
142 snprintf (buf, sizeof (buf), "%s (terminated)",
143 strsignal (WSTOPSIG (status)));
144 else
145 snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
146
147 return buf;
148 }
149 \f
150 /* Initialize the list of LWPs. Note that this module, contrary to
151 what GDB's generic threads layer does for its thread list,
152 re-initializes the LWP lists whenever we mourn or detach (which
153 doesn't involve mourning) the inferior. */
154
155 static void
156 init_lwp_list (void)
157 {
158 struct lwp_info *lp, *lpnext;
159
160 for (lp = lwp_list; lp; lp = lpnext)
161 {
162 lpnext = lp->next;
163 xfree (lp);
164 }
165
166 lwp_list = NULL;
167 num_lwps = 0;
168 threaded = 0;
169 }
170
171 /* Add the LWP specified by PID to the list. If this causes the
172 number of LWPs to become larger than one, go into "threaded" mode.
173 Return a pointer to the structure describing the new LWP. */
174
175 static struct lwp_info *
176 add_lwp (ptid_t ptid)
177 {
178 struct lwp_info *lp;
179
180 gdb_assert (is_lwp (ptid));
181
182 lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
183
184 memset (lp, 0, sizeof (struct lwp_info));
185
186 lp->ptid = ptid;
187
188 lp->next = lwp_list;
189 lwp_list = lp;
190 if (++num_lwps > 1)
191 threaded = 1;
192
193 return lp;
194 }
195
196 /* Remove the LWP specified by PID from the list. */
197
198 static void
199 delete_lwp (ptid_t ptid)
200 {
201 struct lwp_info *lp, *lpprev;
202
203 lpprev = NULL;
204
205 for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
206 if (ptid_equal (lp->ptid, ptid))
207 break;
208
209 if (!lp)
210 return;
211
212 /* We don't go back to "non-threaded" mode if the number of threads
213 becomes less than two. */
214 num_lwps--;
215
216 if (lpprev)
217 lpprev->next = lp->next;
218 else
219 lwp_list = lp->next;
220
221 xfree (lp);
222 }
223
224 /* Return a pointer to the structure describing the LWP corresponding
225 to PID. If no corresponding LWP could be found, return NULL. */
226
227 static struct lwp_info *
228 find_lwp_pid (ptid_t ptid)
229 {
230 struct lwp_info *lp;
231 int lwp;
232
233 if (is_lwp (ptid))
234 lwp = GET_LWP (ptid);
235 else
236 lwp = GET_PID (ptid);
237
238 for (lp = lwp_list; lp; lp = lp->next)
239 if (lwp == GET_LWP (lp->ptid))
240 return lp;
241
242 return NULL;
243 }
244
245 /* Call CALLBACK with its second argument set to DATA for every LWP in
246 the list. If CALLBACK returns 1 for a particular LWP, return a
247 pointer to the structure describing that LWP immediately.
248 Otherwise return NULL. */
249
250 struct lwp_info *
251 iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
252 {
253 struct lwp_info *lp, *lpnext;
254
255 for (lp = lwp_list; lp; lp = lpnext)
256 {
257 lpnext = lp->next;
258 if ((*callback) (lp, data))
259 return lp;
260 }
261
262 return NULL;
263 }
264 \f
265
266 #if 0
267 static void
268 lin_lwp_open (char *args, int from_tty)
269 {
270 push_target (&lin_lwp_ops);
271 }
272 #endif
273
274 /* Attach to the LWP specified by PID. If VERBOSE is non-zero, print
275 a message telling the user that a new LWP has been added to the
276 process. */
277
278 void
279 lin_lwp_attach_lwp (ptid_t ptid, int verbose)
280 {
281 struct lwp_info *lp;
282
283 gdb_assert (is_lwp (ptid));
284
285 /* Make sure SIGCHLD is blocked. We don't want SIGCHLD events
286 to interrupt either the ptrace() or waitpid() calls below. */
287 if (!sigismember (&blocked_mask, SIGCHLD))
288 {
289 sigaddset (&blocked_mask, SIGCHLD);
290 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
291 }
292
293 if (verbose)
294 printf_filtered ("[New %s]\n", target_pid_to_str (ptid));
295
296 lp = find_lwp_pid (ptid);
297 if (lp == NULL)
298 lp = add_lwp (ptid);
299
300 /* We assume that we're already attached to any LWP that has an
301 id equal to the overall process id. */
302 if (GET_LWP (ptid) != GET_PID (ptid))
303 {
304 pid_t pid;
305 int status;
306
307 if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
308 error ("Can't attach %s: %s", target_pid_to_str (ptid),
309 safe_strerror (errno));
310
311 if (debug_lin_lwp)
312 fprintf_unfiltered (gdb_stdlog,
313 "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
314 target_pid_to_str (ptid));
315
316 pid = waitpid (GET_LWP (ptid), &status, 0);
317 if (pid == -1 && errno == ECHILD)
318 {
319 /* Try again with __WCLONE to check cloned processes. */
320 pid = waitpid (GET_LWP (ptid), &status, __WCLONE);
321 lp->cloned = 1;
322 }
323
324 gdb_assert (pid == GET_LWP (ptid)
325 && WIFSTOPPED (status) && WSTOPSIG (status));
326
327 child_post_attach (pid);
328
329 lp->stopped = 1;
330
331 if (debug_lin_lwp)
332 {
333 fprintf_unfiltered (gdb_stdlog,
334 "LLAL: waitpid %s received %s\n",
335 target_pid_to_str (ptid),
336 status_to_str (status));
337 }
338 }
339 else
340 {
341 /* We assume that the LWP representing the original process
342 is already stopped. Mark it as stopped in the data structure
343 that the lin-lwp layer uses to keep track of threads. Note
344 that this won't have already been done since the main thread
345 will have, we assume, been stopped by an attach from a
346 different layer. */
347 lp->stopped = 1;
348 }
349 }
350
351 static void
352 lin_lwp_attach (char *args, int from_tty)
353 {
354 struct lwp_info *lp;
355 pid_t pid;
356 int status;
357
358 /* FIXME: We should probably accept a list of process id's, and
359 attach all of them. */
360 child_ops.to_attach (args, from_tty);
361
362 /* Add the initial process as the first LWP to the list. */
363 lp = add_lwp (BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid)));
364
365 /* Make sure the initial process is stopped. The user-level threads
366 layer might want to poke around in the inferior, and that won't
367 work if things haven't stabilized yet. */
368 pid = waitpid (GET_PID (inferior_ptid), &status, 0);
369 if (pid == -1 && errno == ECHILD)
370 {
371 warning ("%s is a cloned process", target_pid_to_str (inferior_ptid));
372
373 /* Try again with __WCLONE to check cloned processes. */
374 pid = waitpid (GET_PID (inferior_ptid), &status, __WCLONE);
375 lp->cloned = 1;
376 }
377
378 gdb_assert (pid == GET_PID (inferior_ptid)
379 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP);
380
381 lp->stopped = 1;
382
383 /* Fake the SIGSTOP that core GDB expects. */
384 lp->status = W_STOPCODE (SIGSTOP);
385 lp->resumed = 1;
386 if (debug_lin_lwp)
387 {
388 fprintf_unfiltered (gdb_stdlog,
389 "LLA: waitpid %ld, faking SIGSTOP\n", (long) pid);
390 }
391 }
392
393 static int
394 detach_callback (struct lwp_info *lp, void *data)
395 {
396 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
397
398 if (debug_lin_lwp && lp->status)
399 fprintf_unfiltered (gdb_stdlog, "DC: Pending %s for %s on detach.\n",
400 strsignal (WSTOPSIG (lp->status)),
401 target_pid_to_str (lp->ptid));
402
403 while (lp->signalled && lp->stopped)
404 {
405 errno = 0;
406 if (ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
407 WSTOPSIG (lp->status)) < 0)
408 error ("Can't continue %s: %s", target_pid_to_str (lp->ptid),
409 safe_strerror (errno));
410
411 if (debug_lin_lwp)
412 fprintf_unfiltered (gdb_stdlog,
413 "DC: PTRACE_CONTINUE (%s, 0, %s) (OK)\n",
414 target_pid_to_str (lp->ptid),
415 status_to_str (lp->status));
416
417 lp->stopped = 0;
418 lp->signalled = 0;
419 lp->status = 0;
420 stop_wait_callback (lp, NULL);
421
422 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
423 }
424
425 /* We don't actually detach from the LWP that has an id equal to the
426 overall process id just yet. */
427 if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
428 {
429 errno = 0;
430 if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
431 WSTOPSIG (lp->status)) < 0)
432 error ("Can't detach %s: %s", target_pid_to_str (lp->ptid),
433 safe_strerror (errno));
434
435 if (debug_lin_lwp)
436 fprintf_unfiltered (gdb_stdlog,
437 "PTRACE_DETACH (%s, %s, 0) (OK)\n",
438 target_pid_to_str (lp->ptid),
439 strsignal (WSTOPSIG (lp->status)));
440
441 delete_lwp (lp->ptid);
442 }
443
444 return 0;
445 }
446
447 static void
448 lin_lwp_detach (char *args, int from_tty)
449 {
450 iterate_over_lwps (detach_callback, NULL);
451
452 /* Only the initial process should be left right now. */
453 gdb_assert (num_lwps == 1);
454
455 trap_ptid = null_ptid;
456
457 /* Destroy LWP info; it's no longer valid. */
458 init_lwp_list ();
459
460 /* Restore the original signal mask. */
461 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
462 sigemptyset (&blocked_mask);
463
464 inferior_ptid = pid_to_ptid (GET_PID (inferior_ptid));
465 child_ops.to_detach (args, from_tty);
466 }
467 \f
468
469 /* Resume LP. */
470
471 static int
472 resume_callback (struct lwp_info *lp, void *data)
473 {
474 if (lp->stopped && lp->status == 0)
475 {
476 struct thread_info *tp;
477
478 child_resume (pid_to_ptid (GET_LWP (lp->ptid)), 0, TARGET_SIGNAL_0);
479 if (debug_lin_lwp)
480 fprintf_unfiltered (gdb_stdlog,
481 "RC: PTRACE_CONT %s, 0, 0 (resume sibling)\n",
482 target_pid_to_str (lp->ptid));
483 lp->stopped = 0;
484 lp->step = 0;
485 }
486
487 return 0;
488 }
489
490 static int
491 resume_clear_callback (struct lwp_info *lp, void *data)
492 {
493 lp->resumed = 0;
494 return 0;
495 }
496
497 static int
498 resume_set_callback (struct lwp_info *lp, void *data)
499 {
500 lp->resumed = 1;
501 return 0;
502 }
503
504 static void
505 lin_lwp_resume (ptid_t ptid, int step, enum target_signal signo)
506 {
507 struct lwp_info *lp;
508 int resume_all;
509
510 /* A specific PTID means `step only this process id'. */
511 resume_all = (PIDGET (ptid) == -1);
512
513 if (resume_all)
514 iterate_over_lwps (resume_set_callback, NULL);
515 else
516 iterate_over_lwps (resume_clear_callback, NULL);
517
518 /* If PID is -1, it's the current inferior that should be
519 handled specially. */
520 if (PIDGET (ptid) == -1)
521 ptid = inferior_ptid;
522
523 lp = find_lwp_pid (ptid);
524 if (lp)
525 {
526 ptid = pid_to_ptid (GET_LWP (lp->ptid));
527
528 /* Remember if we're stepping. */
529 lp->step = step;
530
531 /* Mark this LWP as resumed. */
532 lp->resumed = 1;
533
534 /* If we have a pending wait status for this thread, there is no
535 point in resuming the process. */
536 if (lp->status)
537 {
538 /* FIXME: What should we do if we are supposed to continue
539 this thread with a signal? */
540 gdb_assert (signo == TARGET_SIGNAL_0);
541 return;
542 }
543
544 /* Mark LWP as not stopped to prevent it from being continued by
545 resume_callback. */
546 lp->stopped = 0;
547 }
548
549 if (resume_all)
550 iterate_over_lwps (resume_callback, NULL);
551
552 child_resume (ptid, step, signo);
553 if (debug_lin_lwp)
554 fprintf_unfiltered (gdb_stdlog,
555 "LLR: %s %s, %s (resume event thread)\n",
556 step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
557 target_pid_to_str (ptid),
558 signo ? strsignal (signo) : "0");
559 }
560 \f
561
562 /* Issue kill to specified lwp. */
563
564 static int tkill_failed;
565
566 static int
567 kill_lwp (int lwpid, int signo)
568 {
569 errno = 0;
570
571 /* Use tkill, if possible, in case we are using nptl threads. If tkill
572 fails, then we are not using nptl threads and we should be using kill. */
573
574 #ifdef HAVE_TKILL_SYSCALL
575 if (!tkill_failed)
576 {
577 int ret = syscall (__NR_tkill, lwpid, signo);
578 if (errno != ENOSYS)
579 return ret;
580 errno = 0;
581 tkill_failed = 1;
582 }
583 #endif
584
585 return kill (lwpid, signo);
586 }
587
588 /* Send a SIGSTOP to LP. */
589
590 static int
591 stop_callback (struct lwp_info *lp, void *data)
592 {
593 if (!lp->stopped && !lp->signalled)
594 {
595 int ret;
596
597 if (debug_lin_lwp)
598 {
599 fprintf_unfiltered (gdb_stdlog,
600 "SC: kill %s **<SIGSTOP>**\n",
601 target_pid_to_str (lp->ptid));
602 }
603 errno = 0;
604 ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
605 if (debug_lin_lwp)
606 {
607 fprintf_unfiltered (gdb_stdlog,
608 "SC: lwp kill %d %s\n",
609 ret,
610 errno ? safe_strerror (errno) : "ERRNO-OK");
611 }
612
613 lp->signalled = 1;
614 gdb_assert (lp->status == 0);
615 }
616
617 return 0;
618 }
619
620 /* Wait until LP is stopped. If DATA is non-null it is interpreted as
621 a pointer to a set of signals to be flushed immediately. */
622
623 static int
624 stop_wait_callback (struct lwp_info *lp, void *data)
625 {
626 sigset_t *flush_mask = data;
627
628 if (!lp->stopped && lp->signalled)
629 {
630 pid_t pid;
631 int status;
632
633 gdb_assert (lp->status == 0);
634
635 pid = waitpid (GET_LWP (lp->ptid), &status, 0);
636 if (pid == -1 && errno == ECHILD)
637 {
638 pid = waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
639 if (pid == -1 && errno == ECHILD)
640 {
641 /* The thread has previously exited. We need to delete it now
642 because in the case of nptl threads, there won't be an
643 exit event unless it is the main thread. */
644 if (debug_lin_lwp)
645 fprintf_unfiltered (gdb_stdlog,
646 "SWC: %s exited.\n",
647 target_pid_to_str (lp->ptid));
648 delete_lwp (lp->ptid);
649 return 0;
650 }
651 }
652
653 gdb_assert (pid == GET_LWP (lp->ptid));
654
655 if (debug_lin_lwp)
656 {
657 fprintf_unfiltered (gdb_stdlog,
658 "SWC: waitpid %s received %s\n",
659 target_pid_to_str (lp->ptid),
660 status_to_str (status));
661 }
662
663 /* Check if the thread has exited. */
664 if (WIFEXITED (status) || WIFSIGNALED (status))
665 {
666 gdb_assert (num_lwps > 1);
667
668 if (in_thread_list (lp->ptid))
669 {
670 /* Core GDB cannot deal with us deleting the current
671 thread. */
672 if (!ptid_equal (lp->ptid, inferior_ptid))
673 delete_thread (lp->ptid);
674 printf_unfiltered ("[%s exited]\n",
675 target_pid_to_str (lp->ptid));
676 }
677 if (debug_lin_lwp)
678 fprintf_unfiltered (gdb_stdlog,
679 "SWC: %s exited.\n",
680 target_pid_to_str (lp->ptid));
681
682 delete_lwp (lp->ptid);
683 return 0;
684 }
685
686 /* Check if the current LWP has previously exited. For nptl threads,
687 there is no exit signal issued for LWPs that are not the
688 main thread so we should check whenever the thread is stopped. */
689 if (!lin_lwp_thread_alive (lp->ptid))
690 {
691 if (in_thread_list (lp->ptid))
692 {
693 /* Core GDB cannot deal with us deleting the current
694 thread. */
695 if (!ptid_equal (lp->ptid, inferior_ptid))
696 delete_thread (lp->ptid);
697 printf_unfiltered ("[%s exited]\n",
698 target_pid_to_str (lp->ptid));
699 }
700 if (debug_lin_lwp)
701 fprintf_unfiltered (gdb_stdlog,
702 "SWC: %s already exited.\n",
703 target_pid_to_str (lp->ptid));
704
705 delete_lwp (lp->ptid);
706 return 0;
707 }
708
709 gdb_assert (WIFSTOPPED (status));
710
711 /* Ignore any signals in FLUSH_MASK. */
712 if (flush_mask && sigismember (flush_mask, WSTOPSIG (status)))
713 {
714 errno = 0;
715 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
716 if (debug_lin_lwp)
717 fprintf_unfiltered (gdb_stdlog,
718 "PTRACE_CONT %s, 0, 0 (%s)\n",
719 target_pid_to_str (lp->ptid),
720 errno ? safe_strerror (errno) : "OK");
721
722 return stop_wait_callback (lp, flush_mask);
723 }
724
725 if (WSTOPSIG (status) != SIGSTOP)
726 {
727 if (WSTOPSIG (status) == SIGTRAP)
728 {
729 /* If a LWP other than the LWP that we're reporting an
730 event for has hit a GDB breakpoint (as opposed to
731 some random trap signal), then just arrange for it to
732 hit it again later. We don't keep the SIGTRAP status
733 and don't forward the SIGTRAP signal to the LWP. We
734 will handle the current event, eventually we will
735 resume all LWPs, and this one will get its breakpoint
736 trap again.
737
738 If we do not do this, then we run the risk that the
739 user will delete or disable the breakpoint, but the
740 thread will have already tripped on it. */
741
742 /* Now resume this LWP and get the SIGSTOP event. */
743 errno = 0;
744 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
745 if (debug_lin_lwp)
746 {
747 fprintf_unfiltered (gdb_stdlog,
748 "PTRACE_CONT %s, 0, 0 (%s)\n",
749 target_pid_to_str (lp->ptid),
750 errno ? safe_strerror (errno) : "OK");
751
752 fprintf_unfiltered (gdb_stdlog,
753 "SWC: Candidate SIGTRAP event in %s\n",
754 target_pid_to_str (lp->ptid));
755 }
756 /* Hold the SIGTRAP for handling by lin_lwp_wait. */
757 stop_wait_callback (lp, data);
758 /* If there's another event, throw it back into the queue. */
759 if (lp->status)
760 {
761 if (debug_lin_lwp)
762 {
763 fprintf_unfiltered (gdb_stdlog,
764 "SWC: kill %s, %s\n",
765 target_pid_to_str (lp->ptid),
766 status_to_str ((int) status));
767 }
768 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
769 }
770 /* Save the sigtrap event. */
771 lp->status = status;
772 return 0;
773 }
774 else
775 {
776 /* The thread was stopped with a signal other than
777 SIGSTOP, and didn't accidentally trip a breakpoint. */
778
779 if (debug_lin_lwp)
780 {
781 fprintf_unfiltered (gdb_stdlog,
782 "SWC: Pending event %s in %s\n",
783 status_to_str ((int) status),
784 target_pid_to_str (lp->ptid));
785 }
786 /* Now resume this LWP and get the SIGSTOP event. */
787 errno = 0;
788 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
789 if (debug_lin_lwp)
790 fprintf_unfiltered (gdb_stdlog,
791 "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
792 target_pid_to_str (lp->ptid),
793 errno ? safe_strerror (errno) : "OK");
794
795 /* Hold this event/waitstatus while we check to see if
796 there are any more (we still want to get that SIGSTOP). */
797 stop_wait_callback (lp, data);
798 /* If the lp->status field is still empty, use it to hold
799 this event. If not, then this event must be returned
800 to the event queue of the LWP. */
801 if (lp->status == 0)
802 lp->status = status;
803 else
804 {
805 if (debug_lin_lwp)
806 {
807 fprintf_unfiltered (gdb_stdlog,
808 "SWC: kill %s, %s\n",
809 target_pid_to_str (lp->ptid),
810 status_to_str ((int) status));
811 }
812 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
813 }
814 return 0;
815 }
816 }
817 else
818 {
819 /* We caught the SIGSTOP that we intended to catch, so
820 there's no SIGSTOP pending. */
821 lp->stopped = 1;
822 lp->signalled = 0;
823 }
824 }
825
826 return 0;
827 }
828
829 /* Return non-zero if LP has a wait status pending. */
830
831 static int
832 status_callback (struct lwp_info *lp, void *data)
833 {
834 /* Only report a pending wait status if we pretend that this has
835 indeed been resumed. */
836 return (lp->status != 0 && lp->resumed);
837 }
838
839 /* Return non-zero if LP isn't stopped. */
840
841 static int
842 running_callback (struct lwp_info *lp, void *data)
843 {
844 return (lp->stopped == 0);
845 }
846
847 /* Count the LWP's that have had events. */
848
849 static int
850 count_events_callback (struct lwp_info *lp, void *data)
851 {
852 int *count = data;
853
854 gdb_assert (count != NULL);
855
856 /* Count only LWPs that have a SIGTRAP event pending. */
857 if (lp->status != 0
858 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
859 (*count)++;
860
861 return 0;
862 }
863
864 /* Select the LWP (if any) that is currently being single-stepped. */
865
866 static int
867 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
868 {
869 if (lp->step && lp->status != 0)
870 return 1;
871 else
872 return 0;
873 }
874
875 /* Select the Nth LWP that has had a SIGTRAP event. */
876
877 static int
878 select_event_lwp_callback (struct lwp_info *lp, void *data)
879 {
880 int *selector = data;
881
882 gdb_assert (selector != NULL);
883
884 /* Select only LWPs that have a SIGTRAP event pending. */
885 if (lp->status != 0
886 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
887 if ((*selector)-- == 0)
888 return 1;
889
890 return 0;
891 }
892
893 static int
894 cancel_breakpoints_callback (struct lwp_info *lp, void *data)
895 {
896 struct lwp_info *event_lp = data;
897
898 /* Leave the LWP that has been elected to receive a SIGTRAP alone. */
899 if (lp == event_lp)
900 return 0;
901
902 /* If a LWP other than the LWP that we're reporting an event for has
903 hit a GDB breakpoint (as opposed to some random trap signal),
904 then just arrange for it to hit it again later. We don't keep
905 the SIGTRAP status and don't forward the SIGTRAP signal to the
906 LWP. We will handle the current event, eventually we will resume
907 all LWPs, and this one will get its breakpoint trap again.
908
909 If we do not do this, then we run the risk that the user will
910 delete or disable the breakpoint, but the LWP will have already
911 tripped on it. */
912
913 if (lp->status != 0
914 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP
915 && breakpoint_inserted_here_p (read_pc_pid (lp->ptid) -
916 DECR_PC_AFTER_BREAK))
917 {
918 if (debug_lin_lwp)
919 fprintf_unfiltered (gdb_stdlog,
920 "CBC: Push back breakpoint for %s\n",
921 target_pid_to_str (lp->ptid));
922
923 /* Back up the PC if necessary. */
924 if (DECR_PC_AFTER_BREAK)
925 write_pc_pid (read_pc_pid (lp->ptid) - DECR_PC_AFTER_BREAK, lp->ptid);
926
927 /* Throw away the SIGTRAP. */
928 lp->status = 0;
929 }
930
931 return 0;
932 }
933
934 /* Select one LWP out of those that have events pending. */
935
936 static void
937 select_event_lwp (struct lwp_info **orig_lp, int *status)
938 {
939 int num_events = 0;
940 int random_selector;
941 struct lwp_info *event_lp;
942
943 /* Record the wait status for the origional LWP. */
944 (*orig_lp)->status = *status;
945
946 /* Give preference to any LWP that is being single-stepped. */
947 event_lp = iterate_over_lwps (select_singlestep_lwp_callback, NULL);
948 if (event_lp != NULL)
949 {
950 if (debug_lin_lwp)
951 fprintf_unfiltered (gdb_stdlog,
952 "SEL: Select single-step %s\n",
953 target_pid_to_str (event_lp->ptid));
954 }
955 else
956 {
957 /* No single-stepping LWP. Select one at random, out of those
958 which have had SIGTRAP events. */
959
960 /* First see how many SIGTRAP events we have. */
961 iterate_over_lwps (count_events_callback, &num_events);
962
963 /* Now randomly pick a LWP out of those that have had a SIGTRAP. */
964 random_selector = (int)
965 ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
966
967 if (debug_lin_lwp && num_events > 1)
968 fprintf_unfiltered (gdb_stdlog,
969 "SEL: Found %d SIGTRAP events, selecting #%d\n",
970 num_events, random_selector);
971
972 event_lp = iterate_over_lwps (select_event_lwp_callback,
973 &random_selector);
974 }
975
976 if (event_lp != NULL)
977 {
978 /* Switch the event LWP. */
979 *orig_lp = event_lp;
980 *status = event_lp->status;
981 }
982
983 /* Flush the wait status for the event LWP. */
984 (*orig_lp)->status = 0;
985 }
986
987 /* Return non-zero if LP has been resumed. */
988
989 static int
990 resumed_callback (struct lwp_info *lp, void *data)
991 {
992 return lp->resumed;
993 }
994
995 #ifdef CHILD_WAIT
996
997 /* We need to override child_wait to support attaching to cloned
998 processes, since a normal wait (as done by the default version)
999 ignores those processes. */
1000
1001 /* Wait for child PTID to do something. Return id of the child,
1002 minus_one_ptid in case of error; store status into *OURSTATUS. */
1003
1004 ptid_t
1005 child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
1006 {
1007 int save_errno;
1008 int status;
1009 pid_t pid;
1010
1011 do
1012 {
1013 set_sigint_trap (); /* Causes SIGINT to be passed on to the
1014 attached process. */
1015 set_sigio_trap ();
1016
1017 pid = waitpid (GET_PID (ptid), &status, 0);
1018 if (pid == -1 && errno == ECHILD)
1019 /* Try again with __WCLONE to check cloned processes. */
1020 pid = waitpid (GET_PID (ptid), &status, __WCLONE);
1021
1022 if (debug_lin_lwp)
1023 {
1024 fprintf_unfiltered (gdb_stdlog,
1025 "CW: waitpid %ld received %s\n",
1026 (long) pid, status_to_str (status));
1027 }
1028
1029 save_errno = errno;
1030
1031 /* Make sure we don't report an event for the exit of the
1032 original program, if we've detached from it. */
1033 if (pid != -1 && !WIFSTOPPED (status) && pid != GET_PID (inferior_ptid))
1034 {
1035 pid = -1;
1036 save_errno = EINTR;
1037 }
1038
1039 /* Check for stop events reported by a process we didn't already
1040 know about - in this case, anything other than inferior_ptid.
1041
1042 If we're expecting to receive stopped processes after fork,
1043 vfork, and clone events, then we'll just add the new one to
1044 our list and go back to waiting for the event to be reported
1045 - the stopped process might be returned from waitpid before
1046 or after the event is. If we want to handle debugging of
1047 CLONE_PTRACE processes we need to do more here, i.e. switch
1048 to multi-threaded mode. */
1049 if (pid != -1 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP
1050 && pid != GET_PID (inferior_ptid))
1051 {
1052 linux_record_stopped_pid (pid);
1053 pid = -1;
1054 save_errno = EINTR;
1055 }
1056
1057 clear_sigio_trap ();
1058 clear_sigint_trap ();
1059 }
1060 while (pid == -1 && save_errno == EINTR);
1061
1062 if (pid == -1)
1063 {
1064 warning ("Child process unexpectedly missing: %s",
1065 safe_strerror (errno));
1066
1067 /* Claim it exited with unknown signal. */
1068 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1069 ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
1070 return minus_one_ptid;
1071 }
1072
1073 /* Handle GNU/Linux's extended waitstatus for trace events. */
1074 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1075 return linux_handle_extended_wait (pid, status, ourstatus);
1076
1077 store_waitstatus (ourstatus, status);
1078 return pid_to_ptid (pid);
1079 }
1080
1081 #endif
1082
1083 /* Stop an active thread, verify it still exists, then resume it. */
1084
1085 static int
1086 stop_and_resume_callback (struct lwp_info *lp, void *data)
1087 {
1088 struct lwp_info *ptr;
1089
1090 if (!lp->stopped && !lp->signalled)
1091 {
1092 stop_callback (lp, NULL);
1093 stop_wait_callback (lp, NULL);
1094 /* Resume if the lwp still exists. */
1095 for (ptr = lwp_list; ptr; ptr = ptr->next)
1096 if (lp == ptr)
1097 resume_callback (lp, NULL);
1098 }
1099 return 0;
1100 }
1101
1102 static ptid_t
1103 lin_lwp_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
1104 {
1105 struct lwp_info *lp = NULL;
1106 int options = 0;
1107 int status = 0;
1108 pid_t pid = PIDGET (ptid);
1109 sigset_t flush_mask;
1110
1111 sigemptyset (&flush_mask);
1112
1113 /* Make sure SIGCHLD is blocked. */
1114 if (!sigismember (&blocked_mask, SIGCHLD))
1115 {
1116 sigaddset (&blocked_mask, SIGCHLD);
1117 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
1118 }
1119
1120 retry:
1121
1122 /* Make sure there is at least one LWP that has been resumed, at
1123 least if there are any LWPs at all. */
1124 gdb_assert (num_lwps == 0 || iterate_over_lwps (resumed_callback, NULL));
1125
1126 /* First check if there is a LWP with a wait status pending. */
1127 if (pid == -1)
1128 {
1129 /* Any LWP that's been resumed will do. */
1130 lp = iterate_over_lwps (status_callback, NULL);
1131 if (lp)
1132 {
1133 status = lp->status;
1134 lp->status = 0;
1135
1136 if (debug_lin_lwp && status)
1137 fprintf_unfiltered (gdb_stdlog,
1138 "LLW: Using pending wait status %s for %s.\n",
1139 status_to_str (status),
1140 target_pid_to_str (lp->ptid));
1141 }
1142
1143 /* But if we don't fine one, we'll have to wait, and check both
1144 cloned and uncloned processes. We start with the cloned
1145 processes. */
1146 options = __WCLONE | WNOHANG;
1147 }
1148 else if (is_lwp (ptid))
1149 {
1150 if (debug_lin_lwp)
1151 fprintf_unfiltered (gdb_stdlog,
1152 "LLW: Waiting for specific LWP %s.\n",
1153 target_pid_to_str (ptid));
1154
1155 /* We have a specific LWP to check. */
1156 lp = find_lwp_pid (ptid);
1157 gdb_assert (lp);
1158 status = lp->status;
1159 lp->status = 0;
1160
1161 if (debug_lin_lwp && status)
1162 fprintf_unfiltered (gdb_stdlog,
1163 "LLW: Using pending wait status %s for %s.\n",
1164 status_to_str (status),
1165 target_pid_to_str (lp->ptid));
1166
1167 /* If we have to wait, take into account whether PID is a cloned
1168 process or not. And we have to convert it to something that
1169 the layer beneath us can understand. */
1170 options = lp->cloned ? __WCLONE : 0;
1171 pid = GET_LWP (ptid);
1172 }
1173
1174 if (status && lp->signalled)
1175 {
1176 /* A pending SIGSTOP may interfere with the normal stream of
1177 events. In a typical case where interference is a problem,
1178 we have a SIGSTOP signal pending for LWP A while
1179 single-stepping it, encounter an event in LWP B, and take the
1180 pending SIGSTOP while trying to stop LWP A. After processing
1181 the event in LWP B, LWP A is continued, and we'll never see
1182 the SIGTRAP associated with the last time we were
1183 single-stepping LWP A. */
1184
1185 /* Resume the thread. It should halt immediately returning the
1186 pending SIGSTOP. */
1187 registers_changed ();
1188 child_resume (pid_to_ptid (GET_LWP (lp->ptid)), lp->step,
1189 TARGET_SIGNAL_0);
1190 if (debug_lin_lwp)
1191 fprintf_unfiltered (gdb_stdlog,
1192 "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
1193 lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1194 target_pid_to_str (lp->ptid));
1195 lp->stopped = 0;
1196 gdb_assert (lp->resumed);
1197
1198 /* This should catch the pending SIGSTOP. */
1199 stop_wait_callback (lp, NULL);
1200 }
1201
1202 set_sigint_trap (); /* Causes SIGINT to be passed on to the
1203 attached process. */
1204 set_sigio_trap ();
1205
1206 while (status == 0)
1207 {
1208 pid_t lwpid;
1209
1210 lwpid = waitpid (pid, &status, options);
1211 if (lwpid > 0)
1212 {
1213 gdb_assert (pid == -1 || lwpid == pid);
1214
1215 if (debug_lin_lwp)
1216 {
1217 fprintf_unfiltered (gdb_stdlog,
1218 "LLW: waitpid %ld received %s\n",
1219 (long) lwpid, status_to_str (status));
1220 }
1221
1222 lp = find_lwp_pid (pid_to_ptid (lwpid));
1223
1224 /* Check for stop events reported by a process we didn't
1225 already know about - anything not already in our LWP
1226 list.
1227
1228 If we're expecting to receive stopped processes after
1229 fork, vfork, and clone events, then we'll just add the
1230 new one to our list and go back to waiting for the event
1231 to be reported - the stopped process might be returned
1232 from waitpid before or after the event is. */
1233 if (WIFSTOPPED (status) && !lp)
1234 {
1235 linux_record_stopped_pid (lwpid);
1236 status = 0;
1237 continue;
1238 }
1239
1240 /* Make sure we don't report an event for the exit of an LWP not in
1241 our list, i.e. not part of the current process. This can happen
1242 if we detach from a program we original forked and then it
1243 exits. */
1244 if (!WIFSTOPPED (status) && !lp)
1245 {
1246 status = 0;
1247 continue;
1248 }
1249
1250 /* NOTE drow/2003-06-17: This code seems to be meant for debugging
1251 CLONE_PTRACE processes which do not use the thread library -
1252 otherwise we wouldn't find the new LWP this way. That doesn't
1253 currently work, and the following code is currently unreachable
1254 due to the two blocks above. If it's fixed some day, this code
1255 should be broken out into a function so that we can also pick up
1256 LWPs from the new interface. */
1257 if (!lp)
1258 {
1259 lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
1260 if (options & __WCLONE)
1261 lp->cloned = 1;
1262
1263 if (threaded)
1264 {
1265 gdb_assert (WIFSTOPPED (status)
1266 && WSTOPSIG (status) == SIGSTOP);
1267 lp->signalled = 1;
1268
1269 if (!in_thread_list (inferior_ptid))
1270 {
1271 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
1272 GET_PID (inferior_ptid));
1273 add_thread (inferior_ptid);
1274 }
1275
1276 add_thread (lp->ptid);
1277 printf_unfiltered ("[New %s]\n",
1278 target_pid_to_str (lp->ptid));
1279 }
1280 }
1281
1282 /* Check if the thread has exited. */
1283 if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
1284 {
1285 if (in_thread_list (lp->ptid))
1286 {
1287 /* Core GDB cannot deal with us deleting the current
1288 thread. */
1289 if (!ptid_equal (lp->ptid, inferior_ptid))
1290 delete_thread (lp->ptid);
1291 printf_unfiltered ("[%s exited]\n",
1292 target_pid_to_str (lp->ptid));
1293 }
1294
1295 /* If this is the main thread, we must stop all threads and
1296 verify if they are still alive. This is because in the nptl
1297 thread model, there is no signal issued for exiting LWPs
1298 other than the main thread. We only get the main thread
1299 exit signal once all child threads have already exited.
1300 If we stop all the threads and use the stop_wait_callback
1301 to check if they have exited we can determine whether this
1302 signal should be ignored or whether it means the end of the
1303 debugged application, regardless of which threading model
1304 is being used. */
1305 if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
1306 {
1307 lp->stopped = 1;
1308 iterate_over_lwps (stop_and_resume_callback, NULL);
1309 }
1310
1311 if (debug_lin_lwp)
1312 fprintf_unfiltered (gdb_stdlog,
1313 "LLW: %s exited.\n",
1314 target_pid_to_str (lp->ptid));
1315
1316 delete_lwp (lp->ptid);
1317
1318 /* If there is at least one more LWP, then the exit signal
1319 was not the end of the debugged application and should be
1320 ignored. */
1321 if (num_lwps > 0)
1322 {
1323 /* Make sure there is at least one thread running. */
1324 gdb_assert (iterate_over_lwps (running_callback, NULL));
1325
1326 /* Discard the event. */
1327 status = 0;
1328 continue;
1329 }
1330 }
1331
1332 /* Check if the current LWP has previously exited. In the nptl
1333 thread model, LWPs other than the main thread do not issue
1334 signals when they exit so we must check whenever the thread
1335 has stopped. A similar check is made in stop_wait_callback(). */
1336 if (num_lwps > 1 && !lin_lwp_thread_alive (lp->ptid))
1337 {
1338 if (in_thread_list (lp->ptid))
1339 {
1340 /* Core GDB cannot deal with us deleting the current
1341 thread. */
1342 if (!ptid_equal (lp->ptid, inferior_ptid))
1343 delete_thread (lp->ptid);
1344 printf_unfiltered ("[%s exited]\n",
1345 target_pid_to_str (lp->ptid));
1346 }
1347 if (debug_lin_lwp)
1348 fprintf_unfiltered (gdb_stdlog,
1349 "LLW: %s exited.\n",
1350 target_pid_to_str (lp->ptid));
1351
1352 delete_lwp (lp->ptid);
1353
1354 /* Make sure there is at least one thread running. */
1355 gdb_assert (iterate_over_lwps (running_callback, NULL));
1356
1357 /* Discard the event. */
1358 status = 0;
1359 continue;
1360 }
1361
1362 /* Make sure we don't report a SIGSTOP that we sent
1363 ourselves in an attempt to stop an LWP. */
1364 if (lp->signalled
1365 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
1366 {
1367 if (debug_lin_lwp)
1368 fprintf_unfiltered (gdb_stdlog,
1369 "LLW: Delayed SIGSTOP caught for %s.\n",
1370 target_pid_to_str (lp->ptid));
1371
1372 /* This is a delayed SIGSTOP. */
1373 lp->signalled = 0;
1374
1375 registers_changed ();
1376 child_resume (pid_to_ptid (GET_LWP (lp->ptid)), lp->step,
1377 TARGET_SIGNAL_0);
1378 if (debug_lin_lwp)
1379 fprintf_unfiltered (gdb_stdlog,
1380 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
1381 lp->step ?
1382 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1383 target_pid_to_str (lp->ptid));
1384
1385 lp->stopped = 0;
1386 gdb_assert (lp->resumed);
1387
1388 /* Discard the event. */
1389 status = 0;
1390 continue;
1391 }
1392
1393 break;
1394 }
1395
1396 if (pid == -1)
1397 {
1398 /* Alternate between checking cloned and uncloned processes. */
1399 options ^= __WCLONE;
1400
1401 /* And suspend every time we have checked both. */
1402 if (options & __WCLONE)
1403 sigsuspend (&suspend_mask);
1404 }
1405
1406 /* We shouldn't end up here unless we want to try again. */
1407 gdb_assert (status == 0);
1408 }
1409
1410 clear_sigio_trap ();
1411 clear_sigint_trap ();
1412
1413 gdb_assert (lp);
1414
1415 /* Don't report signals that GDB isn't interested in, such as
1416 signals that are neither printed nor stopped upon. Stopping all
1417 threads can be a bit time-consuming so if we want decent
1418 performance with heavily multi-threaded programs, especially when
1419 they're using a high frequency timer, we'd better avoid it if we
1420 can. */
1421
1422 if (WIFSTOPPED (status))
1423 {
1424 int signo = target_signal_from_host (WSTOPSIG (status));
1425
1426 if (signal_stop_state (signo) == 0
1427 && signal_print_state (signo) == 0
1428 && signal_pass_state (signo) == 1)
1429 {
1430 /* FIMXE: kettenis/2001-06-06: Should we resume all threads
1431 here? It is not clear we should. GDB may not expect
1432 other threads to run. On the other hand, not resuming
1433 newly attached threads may cause an unwanted delay in
1434 getting them running. */
1435 registers_changed ();
1436 child_resume (pid_to_ptid (GET_LWP (lp->ptid)), lp->step, signo);
1437 if (debug_lin_lwp)
1438 fprintf_unfiltered (gdb_stdlog,
1439 "LLW: %s %s, %s (preempt 'handle')\n",
1440 lp->step ?
1441 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1442 target_pid_to_str (lp->ptid),
1443 signo ? strsignal (signo) : "0");
1444 lp->stopped = 0;
1445 status = 0;
1446 goto retry;
1447 }
1448
1449 if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
1450 {
1451 /* If ^C/BREAK is typed at the tty/console, SIGINT gets
1452 forwarded to the entire process group, that is, all LWP's
1453 will receive it. Since we only want to report it once,
1454 we try to flush it from all LWPs except this one. */
1455 sigaddset (&flush_mask, SIGINT);
1456 }
1457 }
1458
1459 /* This LWP is stopped now. */
1460 lp->stopped = 1;
1461
1462 if (debug_lin_lwp)
1463 fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
1464 status_to_str (status), target_pid_to_str (lp->ptid));
1465
1466 /* Now stop all other LWP's ... */
1467 iterate_over_lwps (stop_callback, NULL);
1468
1469 /* ... and wait until all of them have reported back that they're no
1470 longer running. */
1471 iterate_over_lwps (stop_wait_callback, &flush_mask);
1472
1473 /* If we're not waiting for a specific LWP, choose an event LWP from
1474 among those that have had events. Giving equal priority to all
1475 LWPs that have had events helps prevent starvation. */
1476 if (pid == -1)
1477 select_event_lwp (&lp, &status);
1478
1479 /* Now that we've selected our final event LWP, cancel any
1480 breakpoints in other LWPs that have hit a GDB breakpoint. See
1481 the comment in cancel_breakpoints_callback to find out why. */
1482 iterate_over_lwps (cancel_breakpoints_callback, lp);
1483
1484 /* If we're not running in "threaded" mode, we'll report the bare
1485 process id. */
1486
1487 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
1488 {
1489 trap_ptid = (threaded ? lp->ptid : pid_to_ptid (GET_LWP (lp->ptid)));
1490 if (debug_lin_lwp)
1491 fprintf_unfiltered (gdb_stdlog,
1492 "LLW: trap_ptid is %s.\n",
1493 target_pid_to_str (trap_ptid));
1494 }
1495 else
1496 trap_ptid = null_ptid;
1497
1498 /* Handle GNU/Linux's extended waitstatus for trace events. */
1499 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1500 {
1501 linux_handle_extended_wait (ptid_get_pid (trap_ptid),
1502 status, ourstatus);
1503 return trap_ptid;
1504 }
1505
1506 store_waitstatus (ourstatus, status);
1507 return (threaded ? lp->ptid : pid_to_ptid (GET_LWP (lp->ptid)));
1508 }
1509
1510 static int
1511 kill_callback (struct lwp_info *lp, void *data)
1512 {
1513 errno = 0;
1514 ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
1515 if (debug_lin_lwp)
1516 fprintf_unfiltered (gdb_stdlog,
1517 "KC: PTRACE_KILL %s, 0, 0 (%s)\n",
1518 target_pid_to_str (lp->ptid),
1519 errno ? safe_strerror (errno) : "OK");
1520
1521 return 0;
1522 }
1523
1524 static int
1525 kill_wait_callback (struct lwp_info *lp, void *data)
1526 {
1527 pid_t pid;
1528
1529 /* We must make sure that there are no pending events (delayed
1530 SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
1531 program doesn't interfere with any following debugging session. */
1532
1533 /* For cloned processes we must check both with __WCLONE and
1534 without, since the exit status of a cloned process isn't reported
1535 with __WCLONE. */
1536 if (lp->cloned)
1537 {
1538 do
1539 {
1540 pid = waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
1541 if (pid != (pid_t) -1 && debug_lin_lwp)
1542 {
1543 fprintf_unfiltered (gdb_stdlog,
1544 "KWC: wait %s received unknown.\n",
1545 target_pid_to_str (lp->ptid));
1546 }
1547 }
1548 while (pid == GET_LWP (lp->ptid));
1549
1550 gdb_assert (pid == -1 && errno == ECHILD);
1551 }
1552
1553 do
1554 {
1555 pid = waitpid (GET_LWP (lp->ptid), NULL, 0);
1556 if (pid != (pid_t) -1 && debug_lin_lwp)
1557 {
1558 fprintf_unfiltered (gdb_stdlog,
1559 "KWC: wait %s received unk.\n",
1560 target_pid_to_str (lp->ptid));
1561 }
1562 }
1563 while (pid == GET_LWP (lp->ptid));
1564
1565 gdb_assert (pid == -1 && errno == ECHILD);
1566 return 0;
1567 }
1568
1569 static void
1570 lin_lwp_kill (void)
1571 {
1572 /* Kill all LWP's ... */
1573 iterate_over_lwps (kill_callback, NULL);
1574
1575 /* ... and wait until we've flushed all events. */
1576 iterate_over_lwps (kill_wait_callback, NULL);
1577
1578 target_mourn_inferior ();
1579 }
1580
1581 static void
1582 lin_lwp_create_inferior (char *exec_file, char *allargs, char **env)
1583 {
1584 child_ops.to_create_inferior (exec_file, allargs, env);
1585 }
1586
1587 static void
1588 lin_lwp_mourn_inferior (void)
1589 {
1590 trap_ptid = null_ptid;
1591
1592 /* Destroy LWP info; it's no longer valid. */
1593 init_lwp_list ();
1594
1595 /* Restore the original signal mask. */
1596 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1597 sigemptyset (&blocked_mask);
1598
1599 child_ops.to_mourn_inferior ();
1600 }
1601
1602 static int
1603 lin_lwp_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
1604 struct mem_attrib *attrib, struct target_ops *target)
1605 {
1606 struct cleanup *old_chain = save_inferior_ptid ();
1607 int xfer;
1608
1609 if (is_lwp (inferior_ptid))
1610 inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
1611
1612 xfer = linux_proc_xfer_memory (memaddr, myaddr, len, write, attrib, target);
1613 if (xfer == 0)
1614 xfer = child_xfer_memory (memaddr, myaddr, len, write, attrib, target);
1615
1616 do_cleanups (old_chain);
1617 return xfer;
1618 }
1619
1620 static int
1621 lin_lwp_thread_alive (ptid_t ptid)
1622 {
1623 gdb_assert (is_lwp (ptid));
1624
1625 errno = 0;
1626 ptrace (PTRACE_PEEKUSER, GET_LWP (ptid), 0, 0);
1627 if (debug_lin_lwp)
1628 fprintf_unfiltered (gdb_stdlog,
1629 "LLTA: PTRACE_PEEKUSER %s, 0, 0 (%s)\n",
1630 target_pid_to_str (ptid),
1631 errno ? safe_strerror (errno) : "OK");
1632 if (errno)
1633 return 0;
1634
1635 return 1;
1636 }
1637
1638 static char *
1639 lin_lwp_pid_to_str (ptid_t ptid)
1640 {
1641 static char buf[64];
1642
1643 if (is_lwp (ptid))
1644 {
1645 snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
1646 return buf;
1647 }
1648
1649 return normal_pid_to_str (ptid);
1650 }
1651
1652 static void
1653 init_lin_lwp_ops (void)
1654 {
1655 #if 0
1656 lin_lwp_ops.to_open = lin_lwp_open;
1657 #endif
1658 lin_lwp_ops.to_shortname = "lwp-layer";
1659 lin_lwp_ops.to_longname = "lwp-layer";
1660 lin_lwp_ops.to_doc = "Low level threads support (LWP layer)";
1661 lin_lwp_ops.to_attach = lin_lwp_attach;
1662 lin_lwp_ops.to_detach = lin_lwp_detach;
1663 lin_lwp_ops.to_resume = lin_lwp_resume;
1664 lin_lwp_ops.to_wait = lin_lwp_wait;
1665 /* fetch_inferior_registers and store_inferior_registers will
1666 honor the LWP id, so we can use them directly. */
1667 lin_lwp_ops.to_fetch_registers = fetch_inferior_registers;
1668 lin_lwp_ops.to_store_registers = store_inferior_registers;
1669 lin_lwp_ops.to_xfer_memory = lin_lwp_xfer_memory;
1670 lin_lwp_ops.to_kill = lin_lwp_kill;
1671 lin_lwp_ops.to_create_inferior = lin_lwp_create_inferior;
1672 lin_lwp_ops.to_mourn_inferior = lin_lwp_mourn_inferior;
1673 lin_lwp_ops.to_thread_alive = lin_lwp_thread_alive;
1674 lin_lwp_ops.to_pid_to_str = lin_lwp_pid_to_str;
1675 lin_lwp_ops.to_post_startup_inferior = child_post_startup_inferior;
1676 lin_lwp_ops.to_post_attach = child_post_attach;
1677 lin_lwp_ops.to_insert_fork_catchpoint = child_insert_fork_catchpoint;
1678 lin_lwp_ops.to_insert_vfork_catchpoint = child_insert_vfork_catchpoint;
1679 lin_lwp_ops.to_insert_exec_catchpoint = child_insert_exec_catchpoint;
1680
1681 lin_lwp_ops.to_stratum = thread_stratum;
1682 lin_lwp_ops.to_has_thread_control = tc_schedlock;
1683 lin_lwp_ops.to_magic = OPS_MAGIC;
1684 }
1685
1686 static void
1687 sigchld_handler (int signo)
1688 {
1689 /* Do nothing. The only reason for this handler is that it allows
1690 us to use sigsuspend in lin_lwp_wait above to wait for the
1691 arrival of a SIGCHLD. */
1692 }
1693
1694 void
1695 _initialize_lin_lwp (void)
1696 {
1697 struct sigaction action;
1698
1699 extern void thread_db_init (struct target_ops *);
1700
1701 init_lin_lwp_ops ();
1702 add_target (&lin_lwp_ops);
1703 thread_db_init (&lin_lwp_ops);
1704
1705 /* Save the original signal mask. */
1706 sigprocmask (SIG_SETMASK, NULL, &normal_mask);
1707
1708 action.sa_handler = sigchld_handler;
1709 sigemptyset (&action.sa_mask);
1710 action.sa_flags = 0;
1711 sigaction (SIGCHLD, &action, NULL);
1712
1713 /* Make sure we don't block SIGCHLD during a sigsuspend. */
1714 sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
1715 sigdelset (&suspend_mask, SIGCHLD);
1716
1717 sigemptyset (&blocked_mask);
1718
1719 add_show_from_set (add_set_cmd ("lin-lwp", no_class, var_zinteger,
1720 (char *) &debug_lin_lwp,
1721 "Set debugging of GNU/Linux lwp module.\n\
1722 Enables printf debugging output.\n", &setdebuglist), &showdebuglist);
1723 }
1724 \f
1725
1726 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
1727 the GNU/Linux Threads library and therefore doesn't really belong
1728 here. */
1729
1730 /* Read variable NAME in the target and return its value if found.
1731 Otherwise return zero. It is assumed that the type of the variable
1732 is `int'. */
1733
1734 static int
1735 get_signo (const char *name)
1736 {
1737 struct minimal_symbol *ms;
1738 int signo;
1739
1740 ms = lookup_minimal_symbol (name, NULL, NULL);
1741 if (ms == NULL)
1742 return 0;
1743
1744 if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (char *) &signo,
1745 sizeof (signo)) != 0)
1746 return 0;
1747
1748 return signo;
1749 }
1750
1751 /* Return the set of signals used by the threads library in *SET. */
1752
1753 void
1754 lin_thread_get_thread_signals (sigset_t *set)
1755 {
1756 struct sigaction action;
1757 int restart, cancel;
1758
1759 sigemptyset (set);
1760
1761 restart = get_signo ("__pthread_sig_restart");
1762 if (restart == 0)
1763 return;
1764
1765 cancel = get_signo ("__pthread_sig_cancel");
1766 if (cancel == 0)
1767 return;
1768
1769 sigaddset (set, restart);
1770 sigaddset (set, cancel);
1771
1772 /* The GNU/Linux Threads library makes terminating threads send a
1773 special "cancel" signal instead of SIGCHLD. Make sure we catch
1774 those (to prevent them from terminating GDB itself, which is
1775 likely to be their default action) and treat them the same way as
1776 SIGCHLD. */
1777
1778 action.sa_handler = sigchld_handler;
1779 sigemptyset (&action.sa_mask);
1780 action.sa_flags = 0;
1781 sigaction (cancel, &action, NULL);
1782
1783 /* We block the "cancel" signal throughout this code ... */
1784 sigaddset (&blocked_mask, cancel);
1785 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
1786
1787 /* ... except during a sigsuspend. */
1788 sigdelset (&suspend_mask, cancel);
1789 }
This page took 0.065269 seconds and 4 git commands to generate.