1 /* GNU/Linux native-dependent code common to multiple platforms.
3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "gdb_string.h"
26 #include "gdb_assert.h"
27 #ifdef HAVE_TKILL_SYSCALL
29 #include <sys/syscall.h>
31 #include <sys/ptrace.h>
32 #include "linux-nat.h"
33 #include "linux-fork.h"
34 #include "gdbthread.h"
38 #include "inf-ptrace.h"
40 #include <sys/param.h> /* for MAXPATHLEN */
41 #include <sys/procfs.h> /* for elf_gregset etc. */
42 #include "elf-bfd.h" /* for elfcore_write_* */
43 #include "gregset.h" /* for gregset */
44 #include "gdbcore.h" /* for get_exec_file */
45 #include <ctype.h> /* for isdigit */
46 #include "gdbthread.h" /* for struct thread_info etc. */
47 #include "gdb_stat.h" /* for struct stat */
48 #include <fcntl.h> /* for O_RDONLY */
54 /* If the system headers did not provide the constants, hard-code the normal
56 #ifndef PTRACE_EVENT_FORK
58 #define PTRACE_SETOPTIONS 0x4200
59 #define PTRACE_GETEVENTMSG 0x4201
61 /* options set using PTRACE_SETOPTIONS */
62 #define PTRACE_O_TRACESYSGOOD 0x00000001
63 #define PTRACE_O_TRACEFORK 0x00000002
64 #define PTRACE_O_TRACEVFORK 0x00000004
65 #define PTRACE_O_TRACECLONE 0x00000008
66 #define PTRACE_O_TRACEEXEC 0x00000010
67 #define PTRACE_O_TRACEVFORKDONE 0x00000020
68 #define PTRACE_O_TRACEEXIT 0x00000040
70 /* Wait extended result codes for the above trace options. */
71 #define PTRACE_EVENT_FORK 1
72 #define PTRACE_EVENT_VFORK 2
73 #define PTRACE_EVENT_CLONE 3
74 #define PTRACE_EVENT_EXEC 4
75 #define PTRACE_EVENT_VFORK_DONE 5
76 #define PTRACE_EVENT_EXIT 6
78 #endif /* PTRACE_EVENT_FORK */
80 /* We can't always assume that this flag is available, but all systems
81 with the ptrace event handlers also have __WALL, so it's safe to use
84 #define __WALL 0x40000000 /* Wait for any child. */
87 /* The single-threaded native GNU/Linux target_ops. We save a pointer for
88 the use of the multi-threaded target. */
89 static struct target_ops *linux_ops;
90 static struct target_ops linux_ops_saved;
92 /* The saved to_xfer_partial method, inherited from inf-ptrace.c.
93 Called by our to_xfer_partial. */
94 static LONGEST (*super_xfer_partial) (struct target_ops *,
96 const char *, gdb_byte *,
100 static int debug_linux_nat;
102 show_debug_linux_nat (struct ui_file *file, int from_tty,
103 struct cmd_list_element *c, const char *value)
105 fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
109 static int linux_parent_pid;
111 struct simple_pid_list
115 struct simple_pid_list *next;
117 struct simple_pid_list *stopped_pids;
119 /* This variable is a tri-state flag: -1 for unknown, 0 if PTRACE_O_TRACEFORK
120 can not be used, 1 if it can. */
122 static int linux_supports_tracefork_flag = -1;
124 /* If we have PTRACE_O_TRACEFORK, this flag indicates whether we also have
125 PTRACE_O_TRACEVFORKDONE. */
127 static int linux_supports_tracevforkdone_flag = -1;
130 /* Trivial list manipulation functions to keep track of a list of
131 new stopped processes. */
133 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
135 struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
137 new_pid->status = status;
138 new_pid->next = *listp;
143 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *status)
145 struct simple_pid_list **p;
147 for (p = listp; *p != NULL; p = &(*p)->next)
148 if ((*p)->pid == pid)
150 struct simple_pid_list *next = (*p)->next;
151 *status = (*p)->status;
160 linux_record_stopped_pid (int pid, int status)
162 add_to_pid_list (&stopped_pids, pid, status);
166 /* A helper function for linux_test_for_tracefork, called after fork (). */
169 linux_tracefork_child (void)
173 ptrace (PTRACE_TRACEME, 0, 0, 0);
174 kill (getpid (), SIGSTOP);
179 /* Wrapper function for waitpid which handles EINTR. */
182 my_waitpid (int pid, int *status, int flags)
187 ret = waitpid (pid, status, flags);
189 while (ret == -1 && errno == EINTR);
194 /* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
196 First, we try to enable fork tracing on ORIGINAL_PID. If this fails,
197 we know that the feature is not available. This may change the tracing
198 options for ORIGINAL_PID, but we'll be setting them shortly anyway.
200 However, if it succeeds, we don't know for sure that the feature is
201 available; old versions of PTRACE_SETOPTIONS ignored unknown options. We
202 create a child process, attach to it, use PTRACE_SETOPTIONS to enable
203 fork tracing, and let it fork. If the process exits, we assume that we
204 can't use TRACEFORK; if we get the fork notification, and we can extract
205 the new child's PID, then we assume that we can. */
208 linux_test_for_tracefork (int original_pid)
210 int child_pid, ret, status;
213 linux_supports_tracefork_flag = 0;
214 linux_supports_tracevforkdone_flag = 0;
216 ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
222 perror_with_name (("fork"));
225 linux_tracefork_child ();
227 ret = my_waitpid (child_pid, &status, 0);
229 perror_with_name (("waitpid"));
230 else if (ret != child_pid)
231 error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret);
232 if (! WIFSTOPPED (status))
233 error (_("linux_test_for_tracefork: waitpid: unexpected status %d."), status);
235 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
238 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
241 warning (_("linux_test_for_tracefork: failed to kill child"));
245 ret = my_waitpid (child_pid, &status, 0);
246 if (ret != child_pid)
247 warning (_("linux_test_for_tracefork: failed to wait for killed child"));
248 else if (!WIFSIGNALED (status))
249 warning (_("linux_test_for_tracefork: unexpected wait status 0x%x from "
250 "killed child"), status);
255 /* Check whether PTRACE_O_TRACEVFORKDONE is available. */
256 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
257 PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
258 linux_supports_tracevforkdone_flag = (ret == 0);
260 ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
262 warning (_("linux_test_for_tracefork: failed to resume child"));
264 ret = my_waitpid (child_pid, &status, 0);
266 if (ret == child_pid && WIFSTOPPED (status)
267 && status >> 16 == PTRACE_EVENT_FORK)
270 ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
271 if (ret == 0 && second_pid != 0)
275 linux_supports_tracefork_flag = 1;
276 my_waitpid (second_pid, &second_status, 0);
277 ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
279 warning (_("linux_test_for_tracefork: failed to kill second child"));
280 my_waitpid (second_pid, &status, 0);
284 warning (_("linux_test_for_tracefork: unexpected result from waitpid "
285 "(%d, status 0x%x)"), ret, status);
287 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
289 warning (_("linux_test_for_tracefork: failed to kill child"));
290 my_waitpid (child_pid, &status, 0);
293 /* Return non-zero iff we have tracefork functionality available.
294 This function also sets linux_supports_tracefork_flag. */
297 linux_supports_tracefork (int pid)
299 if (linux_supports_tracefork_flag == -1)
300 linux_test_for_tracefork (pid);
301 return linux_supports_tracefork_flag;
305 linux_supports_tracevforkdone (int pid)
307 if (linux_supports_tracefork_flag == -1)
308 linux_test_for_tracefork (pid);
309 return linux_supports_tracevforkdone_flag;
314 linux_enable_event_reporting (ptid_t ptid)
316 int pid = ptid_get_lwp (ptid);
320 pid = ptid_get_pid (ptid);
322 if (! linux_supports_tracefork (pid))
325 options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC
326 | PTRACE_O_TRACECLONE;
327 if (linux_supports_tracevforkdone (pid))
328 options |= PTRACE_O_TRACEVFORKDONE;
330 /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
331 read-only process state. */
333 ptrace (PTRACE_SETOPTIONS, pid, 0, options);
337 linux_child_post_attach (int pid)
339 linux_enable_event_reporting (pid_to_ptid (pid));
340 check_for_thread_db ();
344 linux_child_post_startup_inferior (ptid_t ptid)
346 linux_enable_event_reporting (ptid);
347 check_for_thread_db ();
351 linux_child_follow_fork (struct target_ops *ops, int follow_child)
354 struct target_waitstatus last_status;
356 int parent_pid, child_pid;
358 get_last_target_status (&last_ptid, &last_status);
359 has_vforked = (last_status.kind == TARGET_WAITKIND_VFORKED);
360 parent_pid = ptid_get_lwp (last_ptid);
362 parent_pid = ptid_get_pid (last_ptid);
363 child_pid = last_status.value.related_pid;
367 /* We're already attached to the parent, by default. */
369 /* Before detaching from the child, remove all breakpoints from
370 it. (This won't actually modify the breakpoint list, but will
371 physically remove the breakpoints from the child.) */
372 /* If we vforked this will remove the breakpoints from the parent
373 also, but they'll be reinserted below. */
374 detach_breakpoints (child_pid);
376 /* Detach new forked process? */
381 target_terminal_ours ();
382 fprintf_filtered (gdb_stdlog,
383 "Detaching after fork from child process %d.\n",
387 ptrace (PTRACE_DETACH, child_pid, 0, 0);
391 struct fork_info *fp;
392 /* Retain child fork in ptrace (stopped) state. */
393 fp = find_fork_pid (child_pid);
395 fp = add_fork (child_pid);
396 fork_save_infrun_state (fp, 0);
401 gdb_assert (linux_supports_tracefork_flag >= 0);
402 if (linux_supports_tracevforkdone (0))
406 ptrace (PTRACE_CONT, parent_pid, 0, 0);
407 my_waitpid (parent_pid, &status, __WALL);
408 if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
409 warning (_("Unexpected waitpid result %06x when waiting for "
410 "vfork-done"), status);
414 /* We can't insert breakpoints until the child has
415 finished with the shared memory region. We need to
416 wait until that happens. Ideal would be to just
418 - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
419 - waitpid (parent_pid, &status, __WALL);
420 However, most architectures can't handle a syscall
421 being traced on the way out if it wasn't traced on
424 We might also think to loop, continuing the child
425 until it exits or gets a SIGTRAP. One problem is
426 that the child might call ptrace with PTRACE_TRACEME.
428 There's no simple and reliable way to figure out when
429 the vforked child will be done with its copy of the
430 shared memory. We could step it out of the syscall,
431 two instructions, let it go, and then single-step the
432 parent once. When we have hardware single-step, this
433 would work; with software single-step it could still
434 be made to work but we'd have to be able to insert
435 single-step breakpoints in the child, and we'd have
436 to insert -just- the single-step breakpoint in the
437 parent. Very awkward.
439 In the end, the best we can do is to make sure it
440 runs for a little while. Hopefully it will be out of
441 range of any breakpoints we reinsert. Usually this
442 is only the single-step breakpoint at vfork's return
448 /* Since we vforked, breakpoints were removed in the parent
449 too. Put them back. */
450 reattach_breakpoints (parent_pid);
455 char child_pid_spelling[40];
457 /* Needed to keep the breakpoint lists in sync. */
459 detach_breakpoints (child_pid);
461 /* Before detaching from the parent, remove all breakpoints from it. */
462 remove_breakpoints ();
466 target_terminal_ours ();
467 fprintf_filtered (gdb_stdlog,
468 "Attaching after fork to child process %d.\n",
472 /* If we're vforking, we may want to hold on to the parent until
473 the child exits or execs. At exec time we can remove the old
474 breakpoints from the parent and detach it; at exit time we
475 could do the same (or even, sneakily, resume debugging it - the
476 child's exec has failed, or something similar).
478 This doesn't clean up "properly", because we can't call
479 target_detach, but that's OK; if the current target is "child",
480 then it doesn't need any further cleanups, and lin_lwp will
481 generally not encounter vfork (vfork is defined to fork
484 The holding part is very easy if we have VFORKDONE events;
485 but keeping track of both processes is beyond GDB at the
486 moment. So we don't expose the parent to the rest of GDB.
487 Instead we quietly hold onto it until such time as we can
491 linux_parent_pid = parent_pid;
492 else if (!detach_fork)
494 struct fork_info *fp;
495 /* Retain parent fork in ptrace (stopped) state. */
496 fp = find_fork_pid (parent_pid);
498 fp = add_fork (parent_pid);
499 fork_save_infrun_state (fp, 0);
503 target_detach (NULL, 0);
506 inferior_ptid = pid_to_ptid (child_pid);
508 /* Reinstall ourselves, since we might have been removed in
509 target_detach (which does other necessary cleanup). */
513 /* Reset breakpoints in the child as appropriate. */
514 follow_inferior_reset_breakpoints ();
522 linux_child_insert_fork_catchpoint (int pid)
524 if (! linux_supports_tracefork (pid))
525 error (_("Your system does not support fork catchpoints."));
529 linux_child_insert_vfork_catchpoint (int pid)
531 if (!linux_supports_tracefork (pid))
532 error (_("Your system does not support vfork catchpoints."));
536 linux_child_insert_exec_catchpoint (int pid)
538 if (!linux_supports_tracefork (pid))
539 error (_("Your system does not support exec catchpoints."));
542 /* On GNU/Linux there are no real LWP's. The closest thing to LWP's
543 are processes sharing the same VM space. A multi-threaded process
544 is basically a group of such processes. However, such a grouping
545 is almost entirely a user-space issue; the kernel doesn't enforce
546 such a grouping at all (this might change in the future). In
547 general, we'll rely on the threads library (i.e. the GNU/Linux
548 Threads library) to provide such a grouping.
550 It is perfectly well possible to write a multi-threaded application
551 without the assistance of a threads library, by using the clone
552 system call directly. This module should be able to give some
553 rudimentary support for debugging such applications if developers
554 specify the CLONE_PTRACE flag in the clone system call, and are
555 using the Linux kernel 2.4 or above.
557 Note that there are some peculiarities in GNU/Linux that affect
560 - In general one should specify the __WCLONE flag to waitpid in
561 order to make it report events for any of the cloned processes
562 (and leave it out for the initial process). However, if a cloned
563 process has exited the exit status is only reported if the
564 __WCLONE flag is absent. Linux kernel 2.4 has a __WALL flag, but
565 we cannot use it since GDB must work on older systems too.
567 - When a traced, cloned process exits and is waited for by the
568 debugger, the kernel reassigns it to the original parent and
569 keeps it around as a "zombie". Somehow, the GNU/Linux Threads
570 library doesn't notice this, which leads to the "zombie problem":
571 When debugged a multi-threaded process that spawns a lot of
572 threads will run out of processes, even if the threads exit,
573 because the "zombies" stay around. */
575 /* List of known LWPs. */
576 static struct lwp_info *lwp_list;
578 /* Number of LWPs in the list. */
582 #define GET_LWP(ptid) ptid_get_lwp (ptid)
583 #define GET_PID(ptid) ptid_get_pid (ptid)
584 #define is_lwp(ptid) (GET_LWP (ptid) != 0)
585 #define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
587 /* If the last reported event was a SIGTRAP, this variable is set to
588 the process id of the LWP/thread that got it. */
592 /* Since we cannot wait (in linux_nat_wait) for the initial process and
593 any cloned processes with a single call to waitpid, we have to use
594 the WNOHANG flag and call waitpid in a loop. To optimize
595 things a bit we use `sigsuspend' to wake us up when a process has
596 something to report (it will send us a SIGCHLD if it has). To make
597 this work we have to juggle with the signal mask. We save the
598 original signal mask such that we can restore it before creating a
599 new process in order to avoid blocking certain signals in the
600 inferior. We then block SIGCHLD during the waitpid/sigsuspend
603 /* Original signal mask. */
604 static sigset_t normal_mask;
606 /* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
607 _initialize_linux_nat. */
608 static sigset_t suspend_mask;
610 /* Signals to block to make that sigsuspend work. */
611 static sigset_t blocked_mask;
614 /* Prototypes for local functions. */
615 static int stop_wait_callback (struct lwp_info *lp, void *data);
616 static int linux_nat_thread_alive (ptid_t ptid);
617 static char *linux_child_pid_to_exec_file (int pid);
619 /* Convert wait status STATUS to a string. Used for printing debug
623 status_to_str (int status)
627 if (WIFSTOPPED (status))
628 snprintf (buf, sizeof (buf), "%s (stopped)",
629 strsignal (WSTOPSIG (status)));
630 else if (WIFSIGNALED (status))
631 snprintf (buf, sizeof (buf), "%s (terminated)",
632 strsignal (WSTOPSIG (status)));
634 snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
639 /* Initialize the list of LWPs. Note that this module, contrary to
640 what GDB's generic threads layer does for its thread list,
641 re-initializes the LWP lists whenever we mourn or detach (which
642 doesn't involve mourning) the inferior. */
647 struct lwp_info *lp, *lpnext;
649 for (lp = lwp_list; lp; lp = lpnext)
659 /* Add the LWP specified by PID to the list. Return a pointer to the
660 structure describing the new LWP. */
662 static struct lwp_info *
663 add_lwp (ptid_t ptid)
667 gdb_assert (is_lwp (ptid));
669 lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
671 memset (lp, 0, sizeof (struct lwp_info));
673 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
684 /* Remove the LWP specified by PID from the list. */
687 delete_lwp (ptid_t ptid)
689 struct lwp_info *lp, *lpprev;
693 for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
694 if (ptid_equal (lp->ptid, ptid))
703 lpprev->next = lp->next;
710 /* Return a pointer to the structure describing the LWP corresponding
711 to PID. If no corresponding LWP could be found, return NULL. */
713 static struct lwp_info *
714 find_lwp_pid (ptid_t ptid)
720 lwp = GET_LWP (ptid);
722 lwp = GET_PID (ptid);
724 for (lp = lwp_list; lp; lp = lp->next)
725 if (lwp == GET_LWP (lp->ptid))
731 /* Call CALLBACK with its second argument set to DATA for every LWP in
732 the list. If CALLBACK returns 1 for a particular LWP, return a
733 pointer to the structure describing that LWP immediately.
734 Otherwise return NULL. */
737 iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
739 struct lwp_info *lp, *lpnext;
741 for (lp = lwp_list; lp; lp = lpnext)
744 if ((*callback) (lp, data))
751 /* Update our internal state when changing from one fork (checkpoint,
752 et cetera) to another indicated by NEW_PTID. We can only switch
753 single-threaded applications, so we only create one new LWP, and
754 the previous list is discarded. */
757 linux_nat_switch_fork (ptid_t new_ptid)
762 lp = add_lwp (new_ptid);
766 /* Record a PTID for later deletion. */
771 struct saved_ptids *next;
773 static struct saved_ptids *threads_to_delete;
776 record_dead_thread (ptid_t ptid)
778 struct saved_ptids *p = xmalloc (sizeof (struct saved_ptids));
780 p->next = threads_to_delete;
781 threads_to_delete = p;
784 /* Delete any dead threads which are not the current thread. */
789 struct saved_ptids **p = &threads_to_delete;
792 if (! ptid_equal ((*p)->ptid, inferior_ptid))
794 struct saved_ptids *tmp = *p;
795 delete_thread (tmp->ptid);
803 /* Callback for iterate_over_threads that finds a thread corresponding
807 find_thread_from_lwp (struct thread_info *thr, void *dummy)
809 ptid_t *ptid_p = dummy;
811 if (GET_LWP (thr->ptid) && GET_LWP (thr->ptid) == GET_LWP (*ptid_p))
817 /* Handle the exit of a single thread LP. */
820 exit_lwp (struct lwp_info *lp)
822 if (in_thread_list (lp->ptid))
824 /* Core GDB cannot deal with us deleting the current thread. */
825 if (!ptid_equal (lp->ptid, inferior_ptid))
826 delete_thread (lp->ptid);
828 record_dead_thread (lp->ptid);
829 printf_unfiltered (_("[%s exited]\n"),
830 target_pid_to_str (lp->ptid));
834 /* Even if LP->PTID is not in the global GDB thread list, the
835 LWP may be - with an additional thread ID. We don't need
836 to print anything in this case; thread_db is in use and
837 already took care of that. But it didn't delete the thread
838 in order to handle zombies correctly. */
840 struct thread_info *thr;
842 thr = iterate_over_threads (find_thread_from_lwp, &lp->ptid);
845 if (!ptid_equal (thr->ptid, inferior_ptid))
846 delete_thread (thr->ptid);
848 record_dead_thread (thr->ptid);
852 delete_lwp (lp->ptid);
855 /* Attach to the LWP specified by PID. If VERBOSE is non-zero, print
856 a message telling the user that a new LWP has been added to the
857 process. Return 0 if successful or -1 if the new LWP could not
861 lin_lwp_attach_lwp (ptid_t ptid, int verbose)
865 gdb_assert (is_lwp (ptid));
867 /* Make sure SIGCHLD is blocked. We don't want SIGCHLD events
868 to interrupt either the ptrace() or waitpid() calls below. */
869 if (!sigismember (&blocked_mask, SIGCHLD))
871 sigaddset (&blocked_mask, SIGCHLD);
872 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
875 lp = find_lwp_pid (ptid);
877 /* We assume that we're already attached to any LWP that has an id
878 equal to the overall process id, and to any LWP that is already
879 in our list of LWPs. If we're not seeing exit events from threads
880 and we've had PID wraparound since we last tried to stop all threads,
881 this assumption might be wrong; fortunately, this is very unlikely
883 if (GET_LWP (ptid) != GET_PID (ptid) && lp == NULL)
888 if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
890 /* If we fail to attach to the thread, issue a warning,
891 but continue. One way this can happen is if thread
892 creation is interrupted; as of Linux 2.6.19, a kernel
893 bug may place threads in the thread list and then fail
895 warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
896 safe_strerror (errno));
904 fprintf_unfiltered (gdb_stdlog,
905 "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
906 target_pid_to_str (ptid));
908 pid = my_waitpid (GET_LWP (ptid), &status, 0);
909 if (pid == -1 && errno == ECHILD)
911 /* Try again with __WCLONE to check cloned processes. */
912 pid = my_waitpid (GET_LWP (ptid), &status, __WCLONE);
916 gdb_assert (pid == GET_LWP (ptid)
917 && WIFSTOPPED (status) && WSTOPSIG (status));
919 target_post_attach (pid);
925 fprintf_unfiltered (gdb_stdlog,
926 "LLAL: waitpid %s received %s\n",
927 target_pid_to_str (ptid),
928 status_to_str (status));
933 /* We assume that the LWP representing the original process is
934 already stopped. Mark it as stopped in the data structure
935 that the GNU/linux ptrace layer uses to keep track of
936 threads. Note that this won't have already been done since
937 the main thread will have, we assume, been stopped by an
938 attach from a different layer. */
945 printf_filtered (_("[New %s]\n"), target_pid_to_str (ptid));
951 linux_nat_attach (char *args, int from_tty)
957 /* FIXME: We should probably accept a list of process id's, and
958 attach all of them. */
959 linux_ops->to_attach (args, from_tty);
961 /* Add the initial process as the first LWP to the list. */
962 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
963 lp = add_lwp (inferior_ptid);
965 /* Make sure the initial process is stopped. The user-level threads
966 layer might want to poke around in the inferior, and that won't
967 work if things haven't stabilized yet. */
968 pid = my_waitpid (GET_PID (inferior_ptid), &status, 0);
969 if (pid == -1 && errno == ECHILD)
971 warning (_("%s is a cloned process"), target_pid_to_str (inferior_ptid));
973 /* Try again with __WCLONE to check cloned processes. */
974 pid = my_waitpid (GET_PID (inferior_ptid), &status, __WCLONE);
978 gdb_assert (pid == GET_PID (inferior_ptid)
979 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP);
983 /* Fake the SIGSTOP that core GDB expects. */
984 lp->status = W_STOPCODE (SIGSTOP);
988 fprintf_unfiltered (gdb_stdlog,
989 "LLA: waitpid %ld, faking SIGSTOP\n", (long) pid);
994 detach_callback (struct lwp_info *lp, void *data)
996 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
998 if (debug_linux_nat && lp->status)
999 fprintf_unfiltered (gdb_stdlog, "DC: Pending %s for %s on detach.\n",
1000 strsignal (WSTOPSIG (lp->status)),
1001 target_pid_to_str (lp->ptid));
1003 while (lp->signalled && lp->stopped)
1006 if (ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
1007 WSTOPSIG (lp->status)) < 0)
1008 error (_("Can't continue %s: %s"), target_pid_to_str (lp->ptid),
1009 safe_strerror (errno));
1011 if (debug_linux_nat)
1012 fprintf_unfiltered (gdb_stdlog,
1013 "DC: PTRACE_CONTINUE (%s, 0, %s) (OK)\n",
1014 target_pid_to_str (lp->ptid),
1015 status_to_str (lp->status));
1020 /* FIXME drow/2003-08-26: There was a call to stop_wait_callback
1021 here. But since lp->signalled was cleared above,
1022 stop_wait_callback didn't do anything; the process was left
1023 running. Shouldn't we be waiting for it to stop?
1024 I've removed the call, since stop_wait_callback now does do
1025 something when called with lp->signalled == 0. */
1027 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1030 /* We don't actually detach from the LWP that has an id equal to the
1031 overall process id just yet. */
1032 if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
1035 if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
1036 WSTOPSIG (lp->status)) < 0)
1037 error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
1038 safe_strerror (errno));
1040 if (debug_linux_nat)
1041 fprintf_unfiltered (gdb_stdlog,
1042 "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1043 target_pid_to_str (lp->ptid),
1044 strsignal (WSTOPSIG (lp->status)));
1046 delete_lwp (lp->ptid);
1053 linux_nat_detach (char *args, int from_tty)
1055 iterate_over_lwps (detach_callback, NULL);
1057 /* Only the initial process should be left right now. */
1058 gdb_assert (num_lwps == 1);
1060 trap_ptid = null_ptid;
1062 /* Destroy LWP info; it's no longer valid. */
1065 /* Restore the original signal mask. */
1066 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1067 sigemptyset (&blocked_mask);
1069 inferior_ptid = pid_to_ptid (GET_PID (inferior_ptid));
1070 linux_ops->to_detach (args, from_tty);
1076 resume_callback (struct lwp_info *lp, void *data)
1078 if (lp->stopped && lp->status == 0)
1080 struct thread_info *tp;
1082 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1083 0, TARGET_SIGNAL_0);
1084 if (debug_linux_nat)
1085 fprintf_unfiltered (gdb_stdlog,
1086 "RC: PTRACE_CONT %s, 0, 0 (resume sibling)\n",
1087 target_pid_to_str (lp->ptid));
1096 resume_clear_callback (struct lwp_info *lp, void *data)
1103 resume_set_callback (struct lwp_info *lp, void *data)
1110 linux_nat_resume (ptid_t ptid, int step, enum target_signal signo)
1112 struct lwp_info *lp;
1115 if (debug_linux_nat)
1116 fprintf_unfiltered (gdb_stdlog,
1117 "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1118 step ? "step" : "resume",
1119 target_pid_to_str (ptid),
1120 signo ? strsignal (signo) : "0",
1121 target_pid_to_str (inferior_ptid));
1125 /* A specific PTID means `step only this process id'. */
1126 resume_all = (PIDGET (ptid) == -1);
1129 iterate_over_lwps (resume_set_callback, NULL);
1131 iterate_over_lwps (resume_clear_callback, NULL);
1133 /* If PID is -1, it's the current inferior that should be
1134 handled specially. */
1135 if (PIDGET (ptid) == -1)
1136 ptid = inferior_ptid;
1138 lp = find_lwp_pid (ptid);
1141 ptid = pid_to_ptid (GET_LWP (lp->ptid));
1143 /* Remember if we're stepping. */
1146 /* Mark this LWP as resumed. */
1149 /* If we have a pending wait status for this thread, there is no
1150 point in resuming the process. But first make sure that
1151 linux_nat_wait won't preemptively handle the event - we
1152 should never take this short-circuit if we are going to
1153 leave LP running, since we have skipped resuming all the
1154 other threads. This bit of code needs to be synchronized
1155 with linux_nat_wait. */
1157 if (lp->status && WIFSTOPPED (lp->status))
1159 int saved_signo = target_signal_from_host (WSTOPSIG (lp->status));
1161 if (signal_stop_state (saved_signo) == 0
1162 && signal_print_state (saved_signo) == 0
1163 && signal_pass_state (saved_signo) == 1)
1165 if (debug_linux_nat)
1166 fprintf_unfiltered (gdb_stdlog,
1167 "LLR: Not short circuiting for ignored "
1168 "status 0x%x\n", lp->status);
1170 /* FIXME: What should we do if we are supposed to continue
1171 this thread with a signal? */
1172 gdb_assert (signo == TARGET_SIGNAL_0);
1173 signo = saved_signo;
1180 /* FIXME: What should we do if we are supposed to continue
1181 this thread with a signal? */
1182 gdb_assert (signo == TARGET_SIGNAL_0);
1184 if (debug_linux_nat)
1185 fprintf_unfiltered (gdb_stdlog,
1186 "LLR: Short circuiting for status 0x%x\n",
1192 /* Mark LWP as not stopped to prevent it from being continued by
1198 iterate_over_lwps (resume_callback, NULL);
1200 linux_ops->to_resume (ptid, step, signo);
1201 if (debug_linux_nat)
1202 fprintf_unfiltered (gdb_stdlog,
1203 "LLR: %s %s, %s (resume event thread)\n",
1204 step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1205 target_pid_to_str (ptid),
1206 signo ? strsignal (signo) : "0");
1209 /* Issue kill to specified lwp. */
1211 static int tkill_failed;
1214 kill_lwp (int lwpid, int signo)
1218 /* Use tkill, if possible, in case we are using nptl threads. If tkill
1219 fails, then we are not using nptl threads and we should be using kill. */
1221 #ifdef HAVE_TKILL_SYSCALL
1224 int ret = syscall (__NR_tkill, lwpid, signo);
1225 if (errno != ENOSYS)
1232 return kill (lwpid, signo);
1235 /* Handle a GNU/Linux extended wait response. If we see a clone
1236 event, we need to add the new LWP to our list (and not report the
1237 trap to higher layers). This function returns non-zero if the
1238 event should be ignored and we should wait again. If STOPPING is
1239 true, the new LWP remains stopped, otherwise it is continued. */
1242 linux_handle_extended_wait (struct lwp_info *lp, int status,
1245 int pid = GET_LWP (lp->ptid);
1246 struct target_waitstatus *ourstatus = &lp->waitstatus;
1247 struct lwp_info *new_lp = NULL;
1248 int event = status >> 16;
1250 if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1251 || event == PTRACE_EVENT_CLONE)
1253 unsigned long new_pid;
1256 ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
1258 /* If we haven't already seen the new PID stop, wait for it now. */
1259 if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1261 /* The new child has a pending SIGSTOP. We can't affect it until it
1262 hits the SIGSTOP, but we're already attached. */
1263 ret = my_waitpid (new_pid, &status,
1264 (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1266 perror_with_name (_("waiting for new child"));
1267 else if (ret != new_pid)
1268 internal_error (__FILE__, __LINE__,
1269 _("wait returned unexpected PID %d"), ret);
1270 else if (!WIFSTOPPED (status))
1271 internal_error (__FILE__, __LINE__,
1272 _("wait returned unexpected status 0x%x"), status);
1275 ourstatus->value.related_pid = new_pid;
1277 if (event == PTRACE_EVENT_FORK)
1278 ourstatus->kind = TARGET_WAITKIND_FORKED;
1279 else if (event == PTRACE_EVENT_VFORK)
1280 ourstatus->kind = TARGET_WAITKIND_VFORKED;
1283 ourstatus->kind = TARGET_WAITKIND_IGNORE;
1284 new_lp = add_lwp (BUILD_LWP (new_pid, GET_PID (inferior_ptid)));
1287 if (WSTOPSIG (status) != SIGSTOP)
1289 /* This can happen if someone starts sending signals to
1290 the new thread before it gets a chance to run, which
1291 have a lower number than SIGSTOP (e.g. SIGUSR1).
1292 This is an unlikely case, and harder to handle for
1293 fork / vfork than for clone, so we do not try - but
1294 we handle it for clone events here. We'll send
1295 the other signal on to the thread below. */
1297 new_lp->signalled = 1;
1303 new_lp->stopped = 1;
1306 new_lp->resumed = 1;
1307 ptrace (PTRACE_CONT, lp->waitstatus.value.related_pid, 0,
1308 status ? WSTOPSIG (status) : 0);
1311 if (debug_linux_nat)
1312 fprintf_unfiltered (gdb_stdlog,
1313 "LHEW: Got clone event from LWP %ld, resuming\n",
1314 GET_LWP (lp->ptid));
1315 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1323 if (event == PTRACE_EVENT_EXEC)
1325 ourstatus->kind = TARGET_WAITKIND_EXECD;
1326 ourstatus->value.execd_pathname
1327 = xstrdup (linux_child_pid_to_exec_file (pid));
1329 if (linux_parent_pid)
1331 detach_breakpoints (linux_parent_pid);
1332 ptrace (PTRACE_DETACH, linux_parent_pid, 0, 0);
1334 linux_parent_pid = 0;
1340 internal_error (__FILE__, __LINE__,
1341 _("unknown ptrace event %d"), event);
1344 /* Wait for LP to stop. Returns the wait status, or 0 if the LWP has
1348 wait_lwp (struct lwp_info *lp)
1352 int thread_dead = 0;
1354 gdb_assert (!lp->stopped);
1355 gdb_assert (lp->status == 0);
1357 pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
1358 if (pid == -1 && errno == ECHILD)
1360 pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
1361 if (pid == -1 && errno == ECHILD)
1363 /* The thread has previously exited. We need to delete it
1364 now because, for some vendor 2.4 kernels with NPTL
1365 support backported, there won't be an exit event unless
1366 it is the main thread. 2.6 kernels will report an exit
1367 event for each thread that exits, as expected. */
1369 if (debug_linux_nat)
1370 fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
1371 target_pid_to_str (lp->ptid));
1377 gdb_assert (pid == GET_LWP (lp->ptid));
1379 if (debug_linux_nat)
1381 fprintf_unfiltered (gdb_stdlog,
1382 "WL: waitpid %s received %s\n",
1383 target_pid_to_str (lp->ptid),
1384 status_to_str (status));
1388 /* Check if the thread has exited. */
1389 if (WIFEXITED (status) || WIFSIGNALED (status))
1392 if (debug_linux_nat)
1393 fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
1394 target_pid_to_str (lp->ptid));
1403 gdb_assert (WIFSTOPPED (status));
1405 /* Handle GNU/Linux's extended waitstatus for trace events. */
1406 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1408 if (debug_linux_nat)
1409 fprintf_unfiltered (gdb_stdlog,
1410 "WL: Handling extended status 0x%06x\n",
1412 if (linux_handle_extended_wait (lp, status, 1))
1413 return wait_lwp (lp);
1419 /* Send a SIGSTOP to LP. */
1422 stop_callback (struct lwp_info *lp, void *data)
1424 if (!lp->stopped && !lp->signalled)
1428 if (debug_linux_nat)
1430 fprintf_unfiltered (gdb_stdlog,
1431 "SC: kill %s **<SIGSTOP>**\n",
1432 target_pid_to_str (lp->ptid));
1435 ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
1436 if (debug_linux_nat)
1438 fprintf_unfiltered (gdb_stdlog,
1439 "SC: lwp kill %d %s\n",
1441 errno ? safe_strerror (errno) : "ERRNO-OK");
1445 gdb_assert (lp->status == 0);
1451 /* Wait until LP is stopped. If DATA is non-null it is interpreted as
1452 a pointer to a set of signals to be flushed immediately. */
1455 stop_wait_callback (struct lwp_info *lp, void *data)
1457 sigset_t *flush_mask = data;
1463 status = wait_lwp (lp);
1467 /* Ignore any signals in FLUSH_MASK. */
1468 if (flush_mask && sigismember (flush_mask, WSTOPSIG (status)))
1477 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1478 if (debug_linux_nat)
1479 fprintf_unfiltered (gdb_stdlog,
1480 "PTRACE_CONT %s, 0, 0 (%s)\n",
1481 target_pid_to_str (lp->ptid),
1482 errno ? safe_strerror (errno) : "OK");
1484 return stop_wait_callback (lp, flush_mask);
1487 if (WSTOPSIG (status) != SIGSTOP)
1489 if (WSTOPSIG (status) == SIGTRAP)
1491 /* If a LWP other than the LWP that we're reporting an
1492 event for has hit a GDB breakpoint (as opposed to
1493 some random trap signal), then just arrange for it to
1494 hit it again later. We don't keep the SIGTRAP status
1495 and don't forward the SIGTRAP signal to the LWP. We
1496 will handle the current event, eventually we will
1497 resume all LWPs, and this one will get its breakpoint
1500 If we do not do this, then we run the risk that the
1501 user will delete or disable the breakpoint, but the
1502 thread will have already tripped on it. */
1504 /* Now resume this LWP and get the SIGSTOP event. */
1506 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1507 if (debug_linux_nat)
1509 fprintf_unfiltered (gdb_stdlog,
1510 "PTRACE_CONT %s, 0, 0 (%s)\n",
1511 target_pid_to_str (lp->ptid),
1512 errno ? safe_strerror (errno) : "OK");
1514 fprintf_unfiltered (gdb_stdlog,
1515 "SWC: Candidate SIGTRAP event in %s\n",
1516 target_pid_to_str (lp->ptid));
1518 /* Hold the SIGTRAP for handling by linux_nat_wait. */
1519 stop_wait_callback (lp, data);
1520 /* If there's another event, throw it back into the queue. */
1523 if (debug_linux_nat)
1525 fprintf_unfiltered (gdb_stdlog,
1526 "SWC: kill %s, %s\n",
1527 target_pid_to_str (lp->ptid),
1528 status_to_str ((int) status));
1530 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
1532 /* Save the sigtrap event. */
1533 lp->status = status;
1538 /* The thread was stopped with a signal other than
1539 SIGSTOP, and didn't accidentally trip a breakpoint. */
1541 if (debug_linux_nat)
1543 fprintf_unfiltered (gdb_stdlog,
1544 "SWC: Pending event %s in %s\n",
1545 status_to_str ((int) status),
1546 target_pid_to_str (lp->ptid));
1548 /* Now resume this LWP and get the SIGSTOP event. */
1550 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1551 if (debug_linux_nat)
1552 fprintf_unfiltered (gdb_stdlog,
1553 "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
1554 target_pid_to_str (lp->ptid),
1555 errno ? safe_strerror (errno) : "OK");
1557 /* Hold this event/waitstatus while we check to see if
1558 there are any more (we still want to get that SIGSTOP). */
1559 stop_wait_callback (lp, data);
1560 /* If the lp->status field is still empty, use it to hold
1561 this event. If not, then this event must be returned
1562 to the event queue of the LWP. */
1563 if (lp->status == 0)
1564 lp->status = status;
1567 if (debug_linux_nat)
1569 fprintf_unfiltered (gdb_stdlog,
1570 "SWC: kill %s, %s\n",
1571 target_pid_to_str (lp->ptid),
1572 status_to_str ((int) status));
1574 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
1581 /* We caught the SIGSTOP that we intended to catch, so
1582 there's no SIGSTOP pending. */
1591 /* Check whether PID has any pending signals in FLUSH_MASK. If so set
1592 the appropriate bits in PENDING, and return 1 - otherwise return 0. */
1595 linux_nat_has_pending (int pid, sigset_t *pending, sigset_t *flush_mask)
1597 sigset_t blocked, ignored;
1600 linux_proc_pending_signals (pid, pending, &blocked, &ignored);
1605 for (i = 1; i < NSIG; i++)
1606 if (sigismember (pending, i))
1607 if (!sigismember (flush_mask, i)
1608 || sigismember (&blocked, i)
1609 || sigismember (&ignored, i))
1610 sigdelset (pending, i);
1612 if (sigisemptyset (pending))
1618 /* DATA is interpreted as a mask of signals to flush. If LP has
1619 signals pending, and they are all in the flush mask, then arrange
1620 to flush them. LP should be stopped, as should all other threads
1621 it might share a signal queue with. */
1624 flush_callback (struct lwp_info *lp, void *data)
1626 sigset_t *flush_mask = data;
1627 sigset_t pending, intersection, blocked, ignored;
1630 /* Normally, when an LWP exits, it is removed from the LWP list. The
1631 last LWP isn't removed till later, however. So if there is only
1632 one LWP on the list, make sure it's alive. */
1633 if (lwp_list == lp && lp->next == NULL)
1634 if (!linux_nat_thread_alive (lp->ptid))
1637 /* Just because the LWP is stopped doesn't mean that new signals
1638 can't arrive from outside, so this function must be careful of
1639 race conditions. However, because all threads are stopped, we
1640 can assume that the pending mask will not shrink unless we resume
1641 the LWP, and that it will then get another signal. We can't
1642 control which one, however. */
1646 if (debug_linux_nat)
1647 printf_unfiltered (_("FC: LP has pending status %06x\n"), lp->status);
1648 if (WIFSTOPPED (lp->status) && sigismember (flush_mask, WSTOPSIG (lp->status)))
1652 /* While there is a pending signal we would like to flush, continue
1653 the inferior and collect another signal. But if there's already
1654 a saved status that we don't want to flush, we can't resume the
1655 inferior - if it stopped for some other reason we wouldn't have
1656 anywhere to save the new status. In that case, we must leave the
1657 signal unflushed (and possibly generate an extra SIGINT stop).
1658 That's much less bad than losing a signal. */
1659 while (lp->status == 0
1660 && linux_nat_has_pending (GET_LWP (lp->ptid), &pending, flush_mask))
1665 ret = ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1666 if (debug_linux_nat)
1667 fprintf_unfiltered (gdb_stderr,
1668 "FC: Sent PTRACE_CONT, ret %d %d\n", ret, errno);
1671 stop_wait_callback (lp, flush_mask);
1672 if (debug_linux_nat)
1673 fprintf_unfiltered (gdb_stderr,
1674 "FC: Wait finished; saved status is %d\n",
1681 /* Return non-zero if LP has a wait status pending. */
1684 status_callback (struct lwp_info *lp, void *data)
1686 /* Only report a pending wait status if we pretend that this has
1687 indeed been resumed. */
1688 return (lp->status != 0 && lp->resumed);
1691 /* Return non-zero if LP isn't stopped. */
1694 running_callback (struct lwp_info *lp, void *data)
1696 return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
1699 /* Count the LWP's that have had events. */
1702 count_events_callback (struct lwp_info *lp, void *data)
1706 gdb_assert (count != NULL);
1708 /* Count only LWPs that have a SIGTRAP event pending. */
1710 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
1716 /* Select the LWP (if any) that is currently being single-stepped. */
1719 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
1721 if (lp->step && lp->status != 0)
1727 /* Select the Nth LWP that has had a SIGTRAP event. */
1730 select_event_lwp_callback (struct lwp_info *lp, void *data)
1732 int *selector = data;
1734 gdb_assert (selector != NULL);
1736 /* Select only LWPs that have a SIGTRAP event pending. */
1738 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
1739 if ((*selector)-- == 0)
1746 cancel_breakpoints_callback (struct lwp_info *lp, void *data)
1748 struct lwp_info *event_lp = data;
1750 /* Leave the LWP that has been elected to receive a SIGTRAP alone. */
1754 /* If a LWP other than the LWP that we're reporting an event for has
1755 hit a GDB breakpoint (as opposed to some random trap signal),
1756 then just arrange for it to hit it again later. We don't keep
1757 the SIGTRAP status and don't forward the SIGTRAP signal to the
1758 LWP. We will handle the current event, eventually we will resume
1759 all LWPs, and this one will get its breakpoint trap again.
1761 If we do not do this, then we run the risk that the user will
1762 delete or disable the breakpoint, but the LWP will have already
1766 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP
1767 && breakpoint_inserted_here_p (read_pc_pid (lp->ptid) -
1768 gdbarch_decr_pc_after_break
1771 if (debug_linux_nat)
1772 fprintf_unfiltered (gdb_stdlog,
1773 "CBC: Push back breakpoint for %s\n",
1774 target_pid_to_str (lp->ptid));
1776 /* Back up the PC if necessary. */
1777 if (gdbarch_decr_pc_after_break (current_gdbarch))
1778 write_pc_pid (read_pc_pid (lp->ptid) - gdbarch_decr_pc_after_break
1782 /* Throw away the SIGTRAP. */
1789 /* Select one LWP out of those that have events pending. */
1792 select_event_lwp (struct lwp_info **orig_lp, int *status)
1795 int random_selector;
1796 struct lwp_info *event_lp;
1798 /* Record the wait status for the original LWP. */
1799 (*orig_lp)->status = *status;
1801 /* Give preference to any LWP that is being single-stepped. */
1802 event_lp = iterate_over_lwps (select_singlestep_lwp_callback, NULL);
1803 if (event_lp != NULL)
1805 if (debug_linux_nat)
1806 fprintf_unfiltered (gdb_stdlog,
1807 "SEL: Select single-step %s\n",
1808 target_pid_to_str (event_lp->ptid));
1812 /* No single-stepping LWP. Select one at random, out of those
1813 which have had SIGTRAP events. */
1815 /* First see how many SIGTRAP events we have. */
1816 iterate_over_lwps (count_events_callback, &num_events);
1818 /* Now randomly pick a LWP out of those that have had a SIGTRAP. */
1819 random_selector = (int)
1820 ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
1822 if (debug_linux_nat && num_events > 1)
1823 fprintf_unfiltered (gdb_stdlog,
1824 "SEL: Found %d SIGTRAP events, selecting #%d\n",
1825 num_events, random_selector);
1827 event_lp = iterate_over_lwps (select_event_lwp_callback,
1831 if (event_lp != NULL)
1833 /* Switch the event LWP. */
1834 *orig_lp = event_lp;
1835 *status = event_lp->status;
1838 /* Flush the wait status for the event LWP. */
1839 (*orig_lp)->status = 0;
1842 /* Return non-zero if LP has been resumed. */
1845 resumed_callback (struct lwp_info *lp, void *data)
1850 /* Stop an active thread, verify it still exists, then resume it. */
1853 stop_and_resume_callback (struct lwp_info *lp, void *data)
1855 struct lwp_info *ptr;
1857 if (!lp->stopped && !lp->signalled)
1859 stop_callback (lp, NULL);
1860 stop_wait_callback (lp, NULL);
1861 /* Resume if the lwp still exists. */
1862 for (ptr = lwp_list; ptr; ptr = ptr->next)
1865 resume_callback (lp, NULL);
1866 resume_set_callback (lp, NULL);
1873 linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
1875 struct lwp_info *lp = NULL;
1878 pid_t pid = PIDGET (ptid);
1879 sigset_t flush_mask;
1881 /* The first time we get here after starting a new inferior, we may
1882 not have added it to the LWP list yet - this is the earliest
1883 moment at which we know its PID. */
1886 gdb_assert (!is_lwp (inferior_ptid));
1888 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
1889 GET_PID (inferior_ptid));
1890 lp = add_lwp (inferior_ptid);
1894 sigemptyset (&flush_mask);
1896 /* Make sure SIGCHLD is blocked. */
1897 if (!sigismember (&blocked_mask, SIGCHLD))
1899 sigaddset (&blocked_mask, SIGCHLD);
1900 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
1905 /* Make sure there is at least one LWP that has been resumed. */
1906 gdb_assert (iterate_over_lwps (resumed_callback, NULL));
1908 /* First check if there is a LWP with a wait status pending. */
1911 /* Any LWP that's been resumed will do. */
1912 lp = iterate_over_lwps (status_callback, NULL);
1915 status = lp->status;
1918 if (debug_linux_nat && status)
1919 fprintf_unfiltered (gdb_stdlog,
1920 "LLW: Using pending wait status %s for %s.\n",
1921 status_to_str (status),
1922 target_pid_to_str (lp->ptid));
1925 /* But if we don't fine one, we'll have to wait, and check both
1926 cloned and uncloned processes. We start with the cloned
1928 options = __WCLONE | WNOHANG;
1930 else if (is_lwp (ptid))
1932 if (debug_linux_nat)
1933 fprintf_unfiltered (gdb_stdlog,
1934 "LLW: Waiting for specific LWP %s.\n",
1935 target_pid_to_str (ptid));
1937 /* We have a specific LWP to check. */
1938 lp = find_lwp_pid (ptid);
1940 status = lp->status;
1943 if (debug_linux_nat && status)
1944 fprintf_unfiltered (gdb_stdlog,
1945 "LLW: Using pending wait status %s for %s.\n",
1946 status_to_str (status),
1947 target_pid_to_str (lp->ptid));
1949 /* If we have to wait, take into account whether PID is a cloned
1950 process or not. And we have to convert it to something that
1951 the layer beneath us can understand. */
1952 options = lp->cloned ? __WCLONE : 0;
1953 pid = GET_LWP (ptid);
1956 if (status && lp->signalled)
1958 /* A pending SIGSTOP may interfere with the normal stream of
1959 events. In a typical case where interference is a problem,
1960 we have a SIGSTOP signal pending for LWP A while
1961 single-stepping it, encounter an event in LWP B, and take the
1962 pending SIGSTOP while trying to stop LWP A. After processing
1963 the event in LWP B, LWP A is continued, and we'll never see
1964 the SIGTRAP associated with the last time we were
1965 single-stepping LWP A. */
1967 /* Resume the thread. It should halt immediately returning the
1969 registers_changed ();
1970 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1971 lp->step, TARGET_SIGNAL_0);
1972 if (debug_linux_nat)
1973 fprintf_unfiltered (gdb_stdlog,
1974 "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
1975 lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1976 target_pid_to_str (lp->ptid));
1978 gdb_assert (lp->resumed);
1980 /* This should catch the pending SIGSTOP. */
1981 stop_wait_callback (lp, NULL);
1984 set_sigint_trap (); /* Causes SIGINT to be passed on to the
1985 attached process. */
1992 lwpid = my_waitpid (pid, &status, options);
1995 gdb_assert (pid == -1 || lwpid == pid);
1997 if (debug_linux_nat)
1999 fprintf_unfiltered (gdb_stdlog,
2000 "LLW: waitpid %ld received %s\n",
2001 (long) lwpid, status_to_str (status));
2004 lp = find_lwp_pid (pid_to_ptid (lwpid));
2006 /* Check for stop events reported by a process we didn't
2007 already know about - anything not already in our LWP
2010 If we're expecting to receive stopped processes after
2011 fork, vfork, and clone events, then we'll just add the
2012 new one to our list and go back to waiting for the event
2013 to be reported - the stopped process might be returned
2014 from waitpid before or after the event is. */
2015 if (WIFSTOPPED (status) && !lp)
2017 linux_record_stopped_pid (lwpid, status);
2022 /* Make sure we don't report an event for the exit of an LWP not in
2023 our list, i.e. not part of the current process. This can happen
2024 if we detach from a program we original forked and then it
2026 if (!WIFSTOPPED (status) && !lp)
2032 /* NOTE drow/2003-06-17: This code seems to be meant for debugging
2033 CLONE_PTRACE processes which do not use the thread library -
2034 otherwise we wouldn't find the new LWP this way. That doesn't
2035 currently work, and the following code is currently unreachable
2036 due to the two blocks above. If it's fixed some day, this code
2037 should be broken out into a function so that we can also pick up
2038 LWPs from the new interface. */
2041 lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
2042 if (options & __WCLONE)
2045 gdb_assert (WIFSTOPPED (status)
2046 && WSTOPSIG (status) == SIGSTOP);
2049 if (!in_thread_list (inferior_ptid))
2051 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2052 GET_PID (inferior_ptid));
2053 add_thread (inferior_ptid);
2056 add_thread (lp->ptid);
2057 printf_unfiltered (_("[New %s]\n"),
2058 target_pid_to_str (lp->ptid));
2061 /* Handle GNU/Linux's extended waitstatus for trace events. */
2062 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
2064 if (debug_linux_nat)
2065 fprintf_unfiltered (gdb_stdlog,
2066 "LLW: Handling extended status 0x%06x\n",
2068 if (linux_handle_extended_wait (lp, status, 0))
2075 /* Check if the thread has exited. */
2076 if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
2078 /* If this is the main thread, we must stop all threads and
2079 verify if they are still alive. This is because in the nptl
2080 thread model, there is no signal issued for exiting LWPs
2081 other than the main thread. We only get the main thread
2082 exit signal once all child threads have already exited.
2083 If we stop all the threads and use the stop_wait_callback
2084 to check if they have exited we can determine whether this
2085 signal should be ignored or whether it means the end of the
2086 debugged application, regardless of which threading model
2088 if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
2091 iterate_over_lwps (stop_and_resume_callback, NULL);
2094 if (debug_linux_nat)
2095 fprintf_unfiltered (gdb_stdlog,
2096 "LLW: %s exited.\n",
2097 target_pid_to_str (lp->ptid));
2101 /* If there is at least one more LWP, then the exit signal
2102 was not the end of the debugged application and should be
2106 /* Make sure there is at least one thread running. */
2107 gdb_assert (iterate_over_lwps (running_callback, NULL));
2109 /* Discard the event. */
2115 /* Check if the current LWP has previously exited. In the nptl
2116 thread model, LWPs other than the main thread do not issue
2117 signals when they exit so we must check whenever the thread
2118 has stopped. A similar check is made in stop_wait_callback(). */
2119 if (num_lwps > 1 && !linux_nat_thread_alive (lp->ptid))
2121 if (debug_linux_nat)
2122 fprintf_unfiltered (gdb_stdlog,
2123 "LLW: %s exited.\n",
2124 target_pid_to_str (lp->ptid));
2128 /* Make sure there is at least one thread running. */
2129 gdb_assert (iterate_over_lwps (running_callback, NULL));
2131 /* Discard the event. */
2136 /* Make sure we don't report a SIGSTOP that we sent
2137 ourselves in an attempt to stop an LWP. */
2139 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2141 if (debug_linux_nat)
2142 fprintf_unfiltered (gdb_stdlog,
2143 "LLW: Delayed SIGSTOP caught for %s.\n",
2144 target_pid_to_str (lp->ptid));
2146 /* This is a delayed SIGSTOP. */
2149 registers_changed ();
2150 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2151 lp->step, TARGET_SIGNAL_0);
2152 if (debug_linux_nat)
2153 fprintf_unfiltered (gdb_stdlog,
2154 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
2156 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2157 target_pid_to_str (lp->ptid));
2160 gdb_assert (lp->resumed);
2162 /* Discard the event. */
2172 /* Alternate between checking cloned and uncloned processes. */
2173 options ^= __WCLONE;
2175 /* And suspend every time we have checked both. */
2176 if (options & __WCLONE)
2177 sigsuspend (&suspend_mask);
2180 /* We shouldn't end up here unless we want to try again. */
2181 gdb_assert (status == 0);
2184 clear_sigio_trap ();
2185 clear_sigint_trap ();
2189 /* Don't report signals that GDB isn't interested in, such as
2190 signals that are neither printed nor stopped upon. Stopping all
2191 threads can be a bit time-consuming so if we want decent
2192 performance with heavily multi-threaded programs, especially when
2193 they're using a high frequency timer, we'd better avoid it if we
2196 if (WIFSTOPPED (status))
2198 int signo = target_signal_from_host (WSTOPSIG (status));
2200 /* If we get a signal while single-stepping, we may need special
2201 care, e.g. to skip the signal handler. Defer to common code. */
2203 && signal_stop_state (signo) == 0
2204 && signal_print_state (signo) == 0
2205 && signal_pass_state (signo) == 1)
2207 /* FIMXE: kettenis/2001-06-06: Should we resume all threads
2208 here? It is not clear we should. GDB may not expect
2209 other threads to run. On the other hand, not resuming
2210 newly attached threads may cause an unwanted delay in
2211 getting them running. */
2212 registers_changed ();
2213 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2215 if (debug_linux_nat)
2216 fprintf_unfiltered (gdb_stdlog,
2217 "LLW: %s %s, %s (preempt 'handle')\n",
2219 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2220 target_pid_to_str (lp->ptid),
2221 signo ? strsignal (signo) : "0");
2227 if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
2229 /* If ^C/BREAK is typed at the tty/console, SIGINT gets
2230 forwarded to the entire process group, that is, all LWP's
2231 will receive it. Since we only want to report it once,
2232 we try to flush it from all LWPs except this one. */
2233 sigaddset (&flush_mask, SIGINT);
2237 /* This LWP is stopped now. */
2240 if (debug_linux_nat)
2241 fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
2242 status_to_str (status), target_pid_to_str (lp->ptid));
2244 /* Now stop all other LWP's ... */
2245 iterate_over_lwps (stop_callback, NULL);
2247 /* ... and wait until all of them have reported back that they're no
2249 iterate_over_lwps (stop_wait_callback, &flush_mask);
2250 iterate_over_lwps (flush_callback, &flush_mask);
2252 /* If we're not waiting for a specific LWP, choose an event LWP from
2253 among those that have had events. Giving equal priority to all
2254 LWPs that have had events helps prevent starvation. */
2256 select_event_lwp (&lp, &status);
2258 /* Now that we've selected our final event LWP, cancel any
2259 breakpoints in other LWPs that have hit a GDB breakpoint. See
2260 the comment in cancel_breakpoints_callback to find out why. */
2261 iterate_over_lwps (cancel_breakpoints_callback, lp);
2263 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2265 trap_ptid = lp->ptid;
2266 if (debug_linux_nat)
2267 fprintf_unfiltered (gdb_stdlog,
2268 "LLW: trap_ptid is %s.\n",
2269 target_pid_to_str (trap_ptid));
2272 trap_ptid = null_ptid;
2274 if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2276 *ourstatus = lp->waitstatus;
2277 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
2280 store_waitstatus (ourstatus, status);
2286 kill_callback (struct lwp_info *lp, void *data)
2289 ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
2290 if (debug_linux_nat)
2291 fprintf_unfiltered (gdb_stdlog,
2292 "KC: PTRACE_KILL %s, 0, 0 (%s)\n",
2293 target_pid_to_str (lp->ptid),
2294 errno ? safe_strerror (errno) : "OK");
2300 kill_wait_callback (struct lwp_info *lp, void *data)
2304 /* We must make sure that there are no pending events (delayed
2305 SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
2306 program doesn't interfere with any following debugging session. */
2308 /* For cloned processes we must check both with __WCLONE and
2309 without, since the exit status of a cloned process isn't reported
2315 pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
2316 if (pid != (pid_t) -1 && debug_linux_nat)
2318 fprintf_unfiltered (gdb_stdlog,
2319 "KWC: wait %s received unknown.\n",
2320 target_pid_to_str (lp->ptid));
2323 while (pid == GET_LWP (lp->ptid));
2325 gdb_assert (pid == -1 && errno == ECHILD);
2330 pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
2331 if (pid != (pid_t) -1 && debug_linux_nat)
2333 fprintf_unfiltered (gdb_stdlog,
2334 "KWC: wait %s received unk.\n",
2335 target_pid_to_str (lp->ptid));
2338 while (pid == GET_LWP (lp->ptid));
2340 gdb_assert (pid == -1 && errno == ECHILD);
2345 linux_nat_kill (void)
2347 struct target_waitstatus last;
2351 /* If we're stopped while forking and we haven't followed yet,
2352 kill the other task. We need to do this first because the
2353 parent will be sleeping if this is a vfork. */
2355 get_last_target_status (&last_ptid, &last);
2357 if (last.kind == TARGET_WAITKIND_FORKED
2358 || last.kind == TARGET_WAITKIND_VFORKED)
2360 ptrace (PT_KILL, last.value.related_pid, 0, 0);
2364 if (forks_exist_p ())
2365 linux_fork_killall ();
2368 /* Kill all LWP's ... */
2369 iterate_over_lwps (kill_callback, NULL);
2371 /* ... and wait until we've flushed all events. */
2372 iterate_over_lwps (kill_wait_callback, NULL);
2375 target_mourn_inferior ();
2379 linux_nat_mourn_inferior (void)
2381 trap_ptid = null_ptid;
2383 /* Destroy LWP info; it's no longer valid. */
2386 /* Restore the original signal mask. */
2387 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
2388 sigemptyset (&blocked_mask);
2390 if (! forks_exist_p ())
2391 /* Normal case, no other forks available. */
2392 linux_ops->to_mourn_inferior ();
2394 /* Multi-fork case. The current inferior_ptid has exited, but
2395 there are other viable forks to debug. Delete the exiting
2396 one and context-switch to the first available. */
2397 linux_fork_mourn_inferior ();
2401 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
2402 const char *annex, gdb_byte *readbuf,
2403 const gdb_byte *writebuf,
2404 ULONGEST offset, LONGEST len)
2406 struct cleanup *old_chain = save_inferior_ptid ();
2409 if (is_lwp (inferior_ptid))
2410 inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
2412 xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
2415 do_cleanups (old_chain);
2420 linux_nat_thread_alive (ptid_t ptid)
2422 gdb_assert (is_lwp (ptid));
2425 ptrace (PTRACE_PEEKUSER, GET_LWP (ptid), 0, 0);
2426 if (debug_linux_nat)
2427 fprintf_unfiltered (gdb_stdlog,
2428 "LLTA: PTRACE_PEEKUSER %s, 0, 0 (%s)\n",
2429 target_pid_to_str (ptid),
2430 errno ? safe_strerror (errno) : "OK");
2432 /* Not every Linux kernel implements PTRACE_PEEKUSER. But we can
2433 handle that case gracefully since ptrace will first do a lookup
2434 for the process based upon the passed-in pid. If that fails we
2435 will get either -ESRCH or -EPERM, otherwise the child exists and
2437 if (errno == ESRCH || errno == EPERM)
2444 linux_nat_pid_to_str (ptid_t ptid)
2446 static char buf[64];
2448 if (lwp_list && lwp_list->next && is_lwp (ptid))
2450 snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
2454 return normal_pid_to_str (ptid);
2458 sigchld_handler (int signo)
2460 /* Do nothing. The only reason for this handler is that it allows
2461 us to use sigsuspend in linux_nat_wait above to wait for the
2462 arrival of a SIGCHLD. */
2465 /* Accepts an integer PID; Returns a string representing a file that
2466 can be opened to get the symbols for the child process. */
2469 linux_child_pid_to_exec_file (int pid)
2471 char *name1, *name2;
2473 name1 = xmalloc (MAXPATHLEN);
2474 name2 = xmalloc (MAXPATHLEN);
2475 make_cleanup (xfree, name1);
2476 make_cleanup (xfree, name2);
2477 memset (name2, 0, MAXPATHLEN);
2479 sprintf (name1, "/proc/%d/exe", pid);
2480 if (readlink (name1, name2, MAXPATHLEN) > 0)
2486 /* Service function for corefiles and info proc. */
2489 read_mapping (FILE *mapfile,
2494 char *device, long long *inode, char *filename)
2496 int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
2497 addr, endaddr, permissions, offset, device, inode);
2500 if (ret > 0 && ret != EOF)
2502 /* Eat everything up to EOL for the filename. This will prevent
2503 weird filenames (such as one with embedded whitespace) from
2504 confusing this code. It also makes this code more robust in
2505 respect to annotations the kernel may add after the filename.
2507 Note the filename is used for informational purposes
2509 ret += fscanf (mapfile, "%[^\n]\n", filename);
2512 return (ret != 0 && ret != EOF);
2515 /* Fills the "to_find_memory_regions" target vector. Lists the memory
2516 regions in the inferior for a corefile. */
2519 linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
2521 int, int, int, void *), void *obfd)
2523 long long pid = PIDGET (inferior_ptid);
2524 char mapsfilename[MAXPATHLEN];
2526 long long addr, endaddr, size, offset, inode;
2527 char permissions[8], device[8], filename[MAXPATHLEN];
2528 int read, write, exec;
2531 /* Compose the filename for the /proc memory map, and open it. */
2532 sprintf (mapsfilename, "/proc/%lld/maps", pid);
2533 if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
2534 error (_("Could not open %s."), mapsfilename);
2537 fprintf_filtered (gdb_stdout,
2538 "Reading memory regions from %s\n", mapsfilename);
2540 /* Now iterate until end-of-file. */
2541 while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
2542 &offset, &device[0], &inode, &filename[0]))
2544 size = endaddr - addr;
2546 /* Get the segment's permissions. */
2547 read = (strchr (permissions, 'r') != 0);
2548 write = (strchr (permissions, 'w') != 0);
2549 exec = (strchr (permissions, 'x') != 0);
2553 fprintf_filtered (gdb_stdout,
2554 "Save segment, %lld bytes at 0x%s (%c%c%c)",
2555 size, paddr_nz (addr),
2557 write ? 'w' : ' ', exec ? 'x' : ' ');
2559 fprintf_filtered (gdb_stdout, " for %s", filename);
2560 fprintf_filtered (gdb_stdout, "\n");
2563 /* Invoke the callback function to create the corefile
2565 func (addr, size, read, write, exec, obfd);
2571 /* Records the thread's register state for the corefile note
2575 linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
2576 char *note_data, int *note_size)
2578 gdb_gregset_t gregs;
2579 gdb_fpregset_t fpregs;
2580 #ifdef FILL_FPXREGSET
2581 gdb_fpxregset_t fpxregs;
2583 unsigned long lwp = ptid_get_lwp (ptid);
2584 struct regcache *regcache = get_thread_regcache (ptid);
2585 struct gdbarch *gdbarch = get_regcache_arch (regcache);
2586 const struct regset *regset;
2588 struct cleanup *old_chain;
2590 old_chain = save_inferior_ptid ();
2591 inferior_ptid = ptid;
2592 target_fetch_registers (regcache, -1);
2593 do_cleanups (old_chain);
2595 core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
2597 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
2598 sizeof (gregs))) != NULL
2599 && regset->collect_regset != NULL)
2600 regset->collect_regset (regset, regcache, -1,
2601 &gregs, sizeof (gregs));
2603 fill_gregset (regcache, &gregs, -1);
2605 note_data = (char *) elfcore_write_prstatus (obfd,
2609 stop_signal, &gregs);
2612 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
2613 sizeof (fpregs))) != NULL
2614 && regset->collect_regset != NULL)
2615 regset->collect_regset (regset, regcache, -1,
2616 &fpregs, sizeof (fpregs));
2618 fill_fpregset (regcache, &fpregs, -1);
2620 note_data = (char *) elfcore_write_prfpreg (obfd,
2623 &fpregs, sizeof (fpregs));
2625 #ifdef FILL_FPXREGSET
2627 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg-xfp",
2628 sizeof (fpxregs))) != NULL
2629 && regset->collect_regset != NULL)
2630 regset->collect_regset (regset, regcache, -1,
2631 &fpxregs, sizeof (fpxregs));
2633 fill_fpxregset (regcache, &fpxregs, -1);
2635 note_data = (char *) elfcore_write_prxfpreg (obfd,
2638 &fpxregs, sizeof (fpxregs));
2643 struct linux_nat_corefile_thread_data
2651 /* Called by gdbthread.c once per thread. Records the thread's
2652 register state for the corefile note section. */
2655 linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
2657 struct linux_nat_corefile_thread_data *args = data;
2659 args->note_data = linux_nat_do_thread_registers (args->obfd,
2668 /* Records the register state for the corefile note section. */
2671 linux_nat_do_registers (bfd *obfd, ptid_t ptid,
2672 char *note_data, int *note_size)
2674 return linux_nat_do_thread_registers (obfd,
2675 ptid_build (ptid_get_pid (inferior_ptid),
2676 ptid_get_pid (inferior_ptid),
2678 note_data, note_size);
2681 /* Fills the "to_make_corefile_note" target vector. Builds the note
2682 section for a corefile, and returns it in a malloc buffer. */
2685 linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
2687 struct linux_nat_corefile_thread_data thread_args;
2688 struct cleanup *old_chain;
2689 /* The variable size must be >= sizeof (prpsinfo_t.pr_fname). */
2690 char fname[16] = { '\0' };
2691 /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs). */
2692 char psargs[80] = { '\0' };
2693 char *note_data = NULL;
2694 ptid_t current_ptid = inferior_ptid;
2698 if (get_exec_file (0))
2700 strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
2701 strncpy (psargs, get_exec_file (0), sizeof (psargs));
2702 if (get_inferior_args ())
2705 char *psargs_end = psargs + sizeof (psargs);
2707 /* linux_elfcore_write_prpsinfo () handles zero unterminated
2709 string_end = memchr (psargs, 0, sizeof (psargs));
2710 if (string_end != NULL)
2712 *string_end++ = ' ';
2713 strncpy (string_end, get_inferior_args (),
2714 psargs_end - string_end);
2717 note_data = (char *) elfcore_write_prpsinfo (obfd,
2719 note_size, fname, psargs);
2722 /* Dump information for threads. */
2723 thread_args.obfd = obfd;
2724 thread_args.note_data = note_data;
2725 thread_args.note_size = note_size;
2726 thread_args.num_notes = 0;
2727 iterate_over_lwps (linux_nat_corefile_thread_callback, &thread_args);
2728 if (thread_args.num_notes == 0)
2730 /* iterate_over_threads didn't come up with any threads; just
2731 use inferior_ptid. */
2732 note_data = linux_nat_do_registers (obfd, inferior_ptid,
2733 note_data, note_size);
2737 note_data = thread_args.note_data;
2740 auxv_len = target_read_alloc (¤t_target, TARGET_OBJECT_AUXV,
2744 note_data = elfcore_write_note (obfd, note_data, note_size,
2745 "CORE", NT_AUXV, auxv, auxv_len);
2749 make_cleanup (xfree, note_data);
2753 /* Implement the "info proc" command. */
2756 linux_nat_info_proc_cmd (char *args, int from_tty)
2758 long long pid = PIDGET (inferior_ptid);
2761 char buffer[MAXPATHLEN];
2762 char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
2775 /* Break up 'args' into an argv array. */
2776 if ((argv = buildargv (args)) == NULL)
2779 make_cleanup_freeargv (argv);
2781 while (argv != NULL && *argv != NULL)
2783 if (isdigit (argv[0][0]))
2785 pid = strtoul (argv[0], NULL, 10);
2787 else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
2791 else if (strcmp (argv[0], "status") == 0)
2795 else if (strcmp (argv[0], "stat") == 0)
2799 else if (strcmp (argv[0], "cmd") == 0)
2803 else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
2807 else if (strcmp (argv[0], "cwd") == 0)
2811 else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
2817 /* [...] (future options here) */
2822 error (_("No current process: you must name one."));
2824 sprintf (fname1, "/proc/%lld", pid);
2825 if (stat (fname1, &dummy) != 0)
2826 error (_("No /proc directory: '%s'"), fname1);
2828 printf_filtered (_("process %lld\n"), pid);
2829 if (cmdline_f || all)
2831 sprintf (fname1, "/proc/%lld/cmdline", pid);
2832 if ((procfile = fopen (fname1, "r")) != NULL)
2834 fgets (buffer, sizeof (buffer), procfile);
2835 printf_filtered ("cmdline = '%s'\n", buffer);
2839 warning (_("unable to open /proc file '%s'"), fname1);
2843 sprintf (fname1, "/proc/%lld/cwd", pid);
2844 memset (fname2, 0, sizeof (fname2));
2845 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
2846 printf_filtered ("cwd = '%s'\n", fname2);
2848 warning (_("unable to read link '%s'"), fname1);
2852 sprintf (fname1, "/proc/%lld/exe", pid);
2853 memset (fname2, 0, sizeof (fname2));
2854 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
2855 printf_filtered ("exe = '%s'\n", fname2);
2857 warning (_("unable to read link '%s'"), fname1);
2859 if (mappings_f || all)
2861 sprintf (fname1, "/proc/%lld/maps", pid);
2862 if ((procfile = fopen (fname1, "r")) != NULL)
2864 long long addr, endaddr, size, offset, inode;
2865 char permissions[8], device[8], filename[MAXPATHLEN];
2867 printf_filtered (_("Mapped address spaces:\n\n"));
2868 if (gdbarch_addr_bit (current_gdbarch) == 32)
2870 printf_filtered ("\t%10s %10s %10s %10s %7s\n",
2873 " Size", " Offset", "objfile");
2877 printf_filtered (" %18s %18s %10s %10s %7s\n",
2880 " Size", " Offset", "objfile");
2883 while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
2884 &offset, &device[0], &inode, &filename[0]))
2886 size = endaddr - addr;
2888 /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
2889 calls here (and possibly above) should be abstracted
2890 out into their own functions? Andrew suggests using
2891 a generic local_address_string instead to print out
2892 the addresses; that makes sense to me, too. */
2894 if (gdbarch_addr_bit (current_gdbarch) == 32)
2896 printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
2897 (unsigned long) addr, /* FIXME: pr_addr */
2898 (unsigned long) endaddr,
2900 (unsigned int) offset,
2901 filename[0] ? filename : "");
2905 printf_filtered (" %#18lx %#18lx %#10x %#10x %7s\n",
2906 (unsigned long) addr, /* FIXME: pr_addr */
2907 (unsigned long) endaddr,
2909 (unsigned int) offset,
2910 filename[0] ? filename : "");
2917 warning (_("unable to open /proc file '%s'"), fname1);
2919 if (status_f || all)
2921 sprintf (fname1, "/proc/%lld/status", pid);
2922 if ((procfile = fopen (fname1, "r")) != NULL)
2924 while (fgets (buffer, sizeof (buffer), procfile) != NULL)
2925 puts_filtered (buffer);
2929 warning (_("unable to open /proc file '%s'"), fname1);
2933 sprintf (fname1, "/proc/%lld/stat", pid);
2934 if ((procfile = fopen (fname1, "r")) != NULL)
2940 if (fscanf (procfile, "%d ", &itmp) > 0)
2941 printf_filtered (_("Process: %d\n"), itmp);
2942 if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
2943 printf_filtered (_("Exec file: %s\n"), buffer);
2944 if (fscanf (procfile, "%c ", &ctmp) > 0)
2945 printf_filtered (_("State: %c\n"), ctmp);
2946 if (fscanf (procfile, "%d ", &itmp) > 0)
2947 printf_filtered (_("Parent process: %d\n"), itmp);
2948 if (fscanf (procfile, "%d ", &itmp) > 0)
2949 printf_filtered (_("Process group: %d\n"), itmp);
2950 if (fscanf (procfile, "%d ", &itmp) > 0)
2951 printf_filtered (_("Session id: %d\n"), itmp);
2952 if (fscanf (procfile, "%d ", &itmp) > 0)
2953 printf_filtered (_("TTY: %d\n"), itmp);
2954 if (fscanf (procfile, "%d ", &itmp) > 0)
2955 printf_filtered (_("TTY owner process group: %d\n"), itmp);
2956 if (fscanf (procfile, "%lu ", <mp) > 0)
2957 printf_filtered (_("Flags: 0x%lx\n"), ltmp);
2958 if (fscanf (procfile, "%lu ", <mp) > 0)
2959 printf_filtered (_("Minor faults (no memory page): %lu\n"),
2960 (unsigned long) ltmp);
2961 if (fscanf (procfile, "%lu ", <mp) > 0)
2962 printf_filtered (_("Minor faults, children: %lu\n"),
2963 (unsigned long) ltmp);
2964 if (fscanf (procfile, "%lu ", <mp) > 0)
2965 printf_filtered (_("Major faults (memory page faults): %lu\n"),
2966 (unsigned long) ltmp);
2967 if (fscanf (procfile, "%lu ", <mp) > 0)
2968 printf_filtered (_("Major faults, children: %lu\n"),
2969 (unsigned long) ltmp);
2970 if (fscanf (procfile, "%ld ", <mp) > 0)
2971 printf_filtered (_("utime: %ld\n"), ltmp);
2972 if (fscanf (procfile, "%ld ", <mp) > 0)
2973 printf_filtered (_("stime: %ld\n"), ltmp);
2974 if (fscanf (procfile, "%ld ", <mp) > 0)
2975 printf_filtered (_("utime, children: %ld\n"), ltmp);
2976 if (fscanf (procfile, "%ld ", <mp) > 0)
2977 printf_filtered (_("stime, children: %ld\n"), ltmp);
2978 if (fscanf (procfile, "%ld ", <mp) > 0)
2979 printf_filtered (_("jiffies remaining in current time slice: %ld\n"),
2981 if (fscanf (procfile, "%ld ", <mp) > 0)
2982 printf_filtered (_("'nice' value: %ld\n"), ltmp);
2983 if (fscanf (procfile, "%lu ", <mp) > 0)
2984 printf_filtered (_("jiffies until next timeout: %lu\n"),
2985 (unsigned long) ltmp);
2986 if (fscanf (procfile, "%lu ", <mp) > 0)
2987 printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
2988 (unsigned long) ltmp);
2989 if (fscanf (procfile, "%ld ", <mp) > 0)
2990 printf_filtered (_("start time (jiffies since system boot): %ld\n"),
2992 if (fscanf (procfile, "%lu ", <mp) > 0)
2993 printf_filtered (_("Virtual memory size: %lu\n"),
2994 (unsigned long) ltmp);
2995 if (fscanf (procfile, "%lu ", <mp) > 0)
2996 printf_filtered (_("Resident set size: %lu\n"), (unsigned long) ltmp);
2997 if (fscanf (procfile, "%lu ", <mp) > 0)
2998 printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
2999 if (fscanf (procfile, "%lu ", <mp) > 0)
3000 printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
3001 if (fscanf (procfile, "%lu ", <mp) > 0)
3002 printf_filtered (_("End of text: 0x%lx\n"), ltmp);
3003 if (fscanf (procfile, "%lu ", <mp) > 0)
3004 printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
3005 #if 0 /* Don't know how architecture-dependent the rest is...
3006 Anyway the signal bitmap info is available from "status". */
3007 if (fscanf (procfile, "%lu ", <mp) > 0) /* FIXME arch? */
3008 printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
3009 if (fscanf (procfile, "%lu ", <mp) > 0) /* FIXME arch? */
3010 printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
3011 if (fscanf (procfile, "%ld ", <mp) > 0)
3012 printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
3013 if (fscanf (procfile, "%ld ", <mp) > 0)
3014 printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
3015 if (fscanf (procfile, "%ld ", <mp) > 0)
3016 printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
3017 if (fscanf (procfile, "%ld ", <mp) > 0)
3018 printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
3019 if (fscanf (procfile, "%lu ", <mp) > 0) /* FIXME arch? */
3020 printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
3025 warning (_("unable to open /proc file '%s'"), fname1);
3029 /* Implement the to_xfer_partial interface for memory reads using the /proc
3030 filesystem. Because we can use a single read() call for /proc, this
3031 can be much more efficient than banging away at PTRACE_PEEKTEXT,
3032 but it doesn't support writes. */
3035 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3036 const char *annex, gdb_byte *readbuf,
3037 const gdb_byte *writebuf,
3038 ULONGEST offset, LONGEST len)
3044 if (object != TARGET_OBJECT_MEMORY || !readbuf)
3047 /* Don't bother for one word. */
3048 if (len < 3 * sizeof (long))
3051 /* We could keep this file open and cache it - possibly one per
3052 thread. That requires some juggling, but is even faster. */
3053 sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
3054 fd = open (filename, O_RDONLY | O_LARGEFILE);
3058 /* If pread64 is available, use it. It's faster if the kernel
3059 supports it (only one syscall), and it's 64-bit safe even on
3060 32-bit platforms (for instance, SPARC debugging a SPARC64
3063 if (pread64 (fd, readbuf, len, offset) != len)
3065 if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
3075 /* Parse LINE as a signal set and add its set bits to SIGS. */
3078 add_line_to_sigset (const char *line, sigset_t *sigs)
3080 int len = strlen (line) - 1;
3084 if (line[len] != '\n')
3085 error (_("Could not parse signal set: %s"), line);
3093 if (*p >= '0' && *p <= '9')
3095 else if (*p >= 'a' && *p <= 'f')
3096 digit = *p - 'a' + 10;
3098 error (_("Could not parse signal set: %s"), line);
3103 sigaddset (sigs, signum + 1);
3105 sigaddset (sigs, signum + 2);
3107 sigaddset (sigs, signum + 3);
3109 sigaddset (sigs, signum + 4);
3115 /* Find process PID's pending signals from /proc/pid/status and set
3119 linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored)
3122 char buffer[MAXPATHLEN], fname[MAXPATHLEN];
3125 sigemptyset (pending);
3126 sigemptyset (blocked);
3127 sigemptyset (ignored);
3128 sprintf (fname, "/proc/%d/status", pid);
3129 procfile = fopen (fname, "r");
3130 if (procfile == NULL)
3131 error (_("Could not open %s"), fname);
3133 while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
3135 /* Normal queued signals are on the SigPnd line in the status
3136 file. However, 2.6 kernels also have a "shared" pending
3137 queue for delivering signals to a thread group, so check for
3140 Unfortunately some Red Hat kernels include the shared pending
3141 queue but not the ShdPnd status field. */
3143 if (strncmp (buffer, "SigPnd:\t", 8) == 0)
3144 add_line_to_sigset (buffer + 8, pending);
3145 else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
3146 add_line_to_sigset (buffer + 8, pending);
3147 else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
3148 add_line_to_sigset (buffer + 8, blocked);
3149 else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
3150 add_line_to_sigset (buffer + 8, ignored);
3157 linux_xfer_partial (struct target_ops *ops, enum target_object object,
3158 const char *annex, gdb_byte *readbuf,
3159 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3163 if (object == TARGET_OBJECT_AUXV)
3164 return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
3167 xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
3172 return super_xfer_partial (ops, object, annex, readbuf, writebuf,
3176 /* Create a prototype generic Linux target. The client can override
3177 it with local methods. */
3180 linux_target_install_ops (struct target_ops *t)
3182 t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
3183 t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
3184 t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
3185 t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
3186 t->to_post_startup_inferior = linux_child_post_startup_inferior;
3187 t->to_post_attach = linux_child_post_attach;
3188 t->to_follow_fork = linux_child_follow_fork;
3189 t->to_find_memory_regions = linux_nat_find_memory_regions;
3190 t->to_make_corefile_notes = linux_nat_make_corefile_notes;
3192 super_xfer_partial = t->to_xfer_partial;
3193 t->to_xfer_partial = linux_xfer_partial;
3199 struct target_ops *t;
3201 t = inf_ptrace_target ();
3202 linux_target_install_ops (t);
3208 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
3210 struct target_ops *t;
3212 t = inf_ptrace_trad_target (register_u_offset);
3213 linux_target_install_ops (t);
3219 linux_nat_add_target (struct target_ops *t)
3221 /* Save the provided single-threaded target. We save this in a separate
3222 variable because another target we've inherited from (e.g. inf-ptrace)
3223 may have saved a pointer to T; we want to use it for the final
3224 process stratum target. */
3225 linux_ops_saved = *t;
3226 linux_ops = &linux_ops_saved;
3228 /* Override some methods for multithreading. */
3229 t->to_attach = linux_nat_attach;
3230 t->to_detach = linux_nat_detach;
3231 t->to_resume = linux_nat_resume;
3232 t->to_wait = linux_nat_wait;
3233 t->to_xfer_partial = linux_nat_xfer_partial;
3234 t->to_kill = linux_nat_kill;
3235 t->to_mourn_inferior = linux_nat_mourn_inferior;
3236 t->to_thread_alive = linux_nat_thread_alive;
3237 t->to_pid_to_str = linux_nat_pid_to_str;
3238 t->to_has_thread_control = tc_schedlock;
3240 /* We don't change the stratum; this target will sit at
3241 process_stratum and thread_db will set at thread_stratum. This
3242 is a little strange, since this is a multi-threaded-capable
3243 target, but we want to be on the stack below thread_db, and we
3244 also want to be used for single-threaded processes. */
3248 /* TODO: Eliminate this and have libthread_db use
3249 find_target_beneath. */
3254 _initialize_linux_nat (void)
3256 struct sigaction action;
3258 add_info ("proc", linux_nat_info_proc_cmd, _("\
3259 Show /proc process information about any running process.\n\
3260 Specify any process id, or use the program being debugged by default.\n\
3261 Specify any of the following keywords for detailed info:\n\
3262 mappings -- list of mapped memory regions.\n\
3263 stat -- list a bunch of random process info.\n\
3264 status -- list a different bunch of random process info.\n\
3265 all -- list all available /proc info."));
3267 /* Save the original signal mask. */
3268 sigprocmask (SIG_SETMASK, NULL, &normal_mask);
3270 action.sa_handler = sigchld_handler;
3271 sigemptyset (&action.sa_mask);
3272 action.sa_flags = SA_RESTART;
3273 sigaction (SIGCHLD, &action, NULL);
3275 /* Make sure we don't block SIGCHLD during a sigsuspend. */
3276 sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
3277 sigdelset (&suspend_mask, SIGCHLD);
3279 sigemptyset (&blocked_mask);
3281 add_setshow_zinteger_cmd ("lin-lwp", no_class, &debug_linux_nat, _("\
3282 Set debugging of GNU/Linux lwp module."), _("\
3283 Show debugging of GNU/Linux lwp module."), _("\
3284 Enables printf debugging output."),
3286 show_debug_linux_nat,
3287 &setdebuglist, &showdebuglist);
3291 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
3292 the GNU/Linux Threads library and therefore doesn't really belong
3295 /* Read variable NAME in the target and return its value if found.
3296 Otherwise return zero. It is assumed that the type of the variable
3300 get_signo (const char *name)
3302 struct minimal_symbol *ms;
3305 ms = lookup_minimal_symbol (name, NULL, NULL);
3309 if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
3310 sizeof (signo)) != 0)
3316 /* Return the set of signals used by the threads library in *SET. */
3319 lin_thread_get_thread_signals (sigset_t *set)
3321 struct sigaction action;
3322 int restart, cancel;
3326 restart = get_signo ("__pthread_sig_restart");
3327 cancel = get_signo ("__pthread_sig_cancel");
3329 /* LinuxThreads normally uses the first two RT signals, but in some legacy
3330 cases may use SIGUSR1/SIGUSR2. NPTL always uses RT signals, but does
3331 not provide any way for the debugger to query the signal numbers -
3332 fortunately they don't change! */
3335 restart = __SIGRTMIN;
3338 cancel = __SIGRTMIN + 1;
3340 sigaddset (set, restart);
3341 sigaddset (set, cancel);
3343 /* The GNU/Linux Threads library makes terminating threads send a
3344 special "cancel" signal instead of SIGCHLD. Make sure we catch
3345 those (to prevent them from terminating GDB itself, which is
3346 likely to be their default action) and treat them the same way as
3349 action.sa_handler = sigchld_handler;
3350 sigemptyset (&action.sa_mask);
3351 action.sa_flags = SA_RESTART;
3352 sigaction (cancel, &action, NULL);
3354 /* We block the "cancel" signal throughout this code ... */
3355 sigaddset (&blocked_mask, cancel);
3356 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
3358 /* ... except during a sigsuspend. */
3359 sigdelset (&suspend_mask, cancel);