* linux-nat.c (linux_nat_filter_event): New, refactored from
[external/binutils.git] / gdb / linux-nat.c
1 /* GNU/Linux native-dependent code common to multiple platforms.
2
3    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
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.
12
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.
17
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/>.  */
20
21 #include "defs.h"
22 #include "inferior.h"
23 #include "target.h"
24 #include "gdb_string.h"
25 #include "gdb_wait.h"
26 #include "gdb_assert.h"
27 #ifdef HAVE_TKILL_SYSCALL
28 #include <unistd.h>
29 #include <sys/syscall.h>
30 #endif
31 #include <sys/ptrace.h>
32 #include "linux-nat.h"
33 #include "linux-fork.h"
34 #include "gdbthread.h"
35 #include "gdbcmd.h"
36 #include "regcache.h"
37 #include "regset.h"
38 #include "inf-ptrace.h"
39 #include "auxv.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 */
49
50 #ifndef O_LARGEFILE
51 #define O_LARGEFILE 0
52 #endif
53
54 /* If the system headers did not provide the constants, hard-code the normal
55    values.  */
56 #ifndef PTRACE_EVENT_FORK
57
58 #define PTRACE_SETOPTIONS       0x4200
59 #define PTRACE_GETEVENTMSG      0x4201
60
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
69
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
77
78 #endif /* PTRACE_EVENT_FORK */
79
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
82    here.  */
83 #ifndef __WALL
84 #define __WALL          0x40000000 /* Wait for any child.  */
85 #endif
86
87 #ifndef PTRACE_GETSIGINFO
88 #define PTRACE_GETSIGINFO    0x4202
89 #endif
90
91 /* The single-threaded native GNU/Linux target_ops.  We save a pointer for
92    the use of the multi-threaded target.  */
93 static struct target_ops *linux_ops;
94 static struct target_ops linux_ops_saved;
95
96 /* The method to call, if any, when a new thread is attached.  */
97 static void (*linux_nat_new_thread) (ptid_t);
98
99 /* The saved to_xfer_partial method, inherited from inf-ptrace.c.
100    Called by our to_xfer_partial.  */
101 static LONGEST (*super_xfer_partial) (struct target_ops *, 
102                                       enum target_object,
103                                       const char *, gdb_byte *, 
104                                       const gdb_byte *,
105                                       ULONGEST, LONGEST);
106
107 static int debug_linux_nat;
108 static void
109 show_debug_linux_nat (struct ui_file *file, int from_tty,
110                       struct cmd_list_element *c, const char *value)
111 {
112   fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
113                     value);
114 }
115
116 static int linux_parent_pid;
117
118 struct simple_pid_list
119 {
120   int pid;
121   int status;
122   struct simple_pid_list *next;
123 };
124 struct simple_pid_list *stopped_pids;
125
126 /* This variable is a tri-state flag: -1 for unknown, 0 if PTRACE_O_TRACEFORK
127    can not be used, 1 if it can.  */
128
129 static int linux_supports_tracefork_flag = -1;
130
131 /* If we have PTRACE_O_TRACEFORK, this flag indicates whether we also have
132    PTRACE_O_TRACEVFORKDONE.  */
133
134 static int linux_supports_tracevforkdone_flag = -1;
135
136 \f
137 /* Trivial list manipulation functions to keep track of a list of
138    new stopped processes.  */
139 static void
140 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
141 {
142   struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
143   new_pid->pid = pid;
144   new_pid->status = status;
145   new_pid->next = *listp;
146   *listp = new_pid;
147 }
148
149 static int
150 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *status)
151 {
152   struct simple_pid_list **p;
153
154   for (p = listp; *p != NULL; p = &(*p)->next)
155     if ((*p)->pid == pid)
156       {
157         struct simple_pid_list *next = (*p)->next;
158         *status = (*p)->status;
159         xfree (*p);
160         *p = next;
161         return 1;
162       }
163   return 0;
164 }
165
166 static void
167 linux_record_stopped_pid (int pid, int status)
168 {
169   add_to_pid_list (&stopped_pids, pid, status);
170 }
171
172 \f
173 /* A helper function for linux_test_for_tracefork, called after fork ().  */
174
175 static void
176 linux_tracefork_child (void)
177 {
178   int ret;
179
180   ptrace (PTRACE_TRACEME, 0, 0, 0);
181   kill (getpid (), SIGSTOP);
182   fork ();
183   _exit (0);
184 }
185
186 /* Wrapper function for waitpid which handles EINTR.  */
187
188 static int
189 my_waitpid (int pid, int *status, int flags)
190 {
191   int ret;
192   do
193     {
194       ret = waitpid (pid, status, flags);
195     }
196   while (ret == -1 && errno == EINTR);
197
198   return ret;
199 }
200
201 /* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
202
203    First, we try to enable fork tracing on ORIGINAL_PID.  If this fails,
204    we know that the feature is not available.  This may change the tracing
205    options for ORIGINAL_PID, but we'll be setting them shortly anyway.
206
207    However, if it succeeds, we don't know for sure that the feature is
208    available; old versions of PTRACE_SETOPTIONS ignored unknown options.  We
209    create a child process, attach to it, use PTRACE_SETOPTIONS to enable
210    fork tracing, and let it fork.  If the process exits, we assume that we
211    can't use TRACEFORK; if we get the fork notification, and we can extract
212    the new child's PID, then we assume that we can.  */
213
214 static void
215 linux_test_for_tracefork (int original_pid)
216 {
217   int child_pid, ret, status;
218   long second_pid;
219
220   linux_supports_tracefork_flag = 0;
221   linux_supports_tracevforkdone_flag = 0;
222
223   ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
224   if (ret != 0)
225     return;
226
227   child_pid = fork ();
228   if (child_pid == -1)
229     perror_with_name (("fork"));
230
231   if (child_pid == 0)
232     linux_tracefork_child ();
233
234   ret = my_waitpid (child_pid, &status, 0);
235   if (ret == -1)
236     perror_with_name (("waitpid"));
237   else if (ret != child_pid)
238     error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret);
239   if (! WIFSTOPPED (status))
240     error (_("linux_test_for_tracefork: waitpid: unexpected status %d."), status);
241
242   ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
243   if (ret != 0)
244     {
245       ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
246       if (ret != 0)
247         {
248           warning (_("linux_test_for_tracefork: failed to kill child"));
249           return;
250         }
251
252       ret = my_waitpid (child_pid, &status, 0);
253       if (ret != child_pid)
254         warning (_("linux_test_for_tracefork: failed to wait for killed child"));
255       else if (!WIFSIGNALED (status))
256         warning (_("linux_test_for_tracefork: unexpected wait status 0x%x from "
257                  "killed child"), status);
258
259       return;
260     }
261
262   /* Check whether PTRACE_O_TRACEVFORKDONE is available.  */
263   ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
264                 PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
265   linux_supports_tracevforkdone_flag = (ret == 0);
266
267   ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
268   if (ret != 0)
269     warning (_("linux_test_for_tracefork: failed to resume child"));
270
271   ret = my_waitpid (child_pid, &status, 0);
272
273   if (ret == child_pid && WIFSTOPPED (status)
274       && status >> 16 == PTRACE_EVENT_FORK)
275     {
276       second_pid = 0;
277       ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
278       if (ret == 0 && second_pid != 0)
279         {
280           int second_status;
281
282           linux_supports_tracefork_flag = 1;
283           my_waitpid (second_pid, &second_status, 0);
284           ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
285           if (ret != 0)
286             warning (_("linux_test_for_tracefork: failed to kill second child"));
287           my_waitpid (second_pid, &status, 0);
288         }
289     }
290   else
291     warning (_("linux_test_for_tracefork: unexpected result from waitpid "
292              "(%d, status 0x%x)"), ret, status);
293
294   ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
295   if (ret != 0)
296     warning (_("linux_test_for_tracefork: failed to kill child"));
297   my_waitpid (child_pid, &status, 0);
298 }
299
300 /* Return non-zero iff we have tracefork functionality available.
301    This function also sets linux_supports_tracefork_flag.  */
302
303 static int
304 linux_supports_tracefork (int pid)
305 {
306   if (linux_supports_tracefork_flag == -1)
307     linux_test_for_tracefork (pid);
308   return linux_supports_tracefork_flag;
309 }
310
311 static int
312 linux_supports_tracevforkdone (int pid)
313 {
314   if (linux_supports_tracefork_flag == -1)
315     linux_test_for_tracefork (pid);
316   return linux_supports_tracevforkdone_flag;
317 }
318
319 \f
320 void
321 linux_enable_event_reporting (ptid_t ptid)
322 {
323   int pid = ptid_get_lwp (ptid);
324   int options;
325
326   if (pid == 0)
327     pid = ptid_get_pid (ptid);
328
329   if (! linux_supports_tracefork (pid))
330     return;
331
332   options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC
333     | PTRACE_O_TRACECLONE;
334   if (linux_supports_tracevforkdone (pid))
335     options |= PTRACE_O_TRACEVFORKDONE;
336
337   /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
338      read-only process state.  */
339
340   ptrace (PTRACE_SETOPTIONS, pid, 0, options);
341 }
342
343 static void
344 linux_child_post_attach (int pid)
345 {
346   linux_enable_event_reporting (pid_to_ptid (pid));
347   check_for_thread_db ();
348 }
349
350 static void
351 linux_child_post_startup_inferior (ptid_t ptid)
352 {
353   linux_enable_event_reporting (ptid);
354   check_for_thread_db ();
355 }
356
357 static int
358 linux_child_follow_fork (struct target_ops *ops, int follow_child)
359 {
360   ptid_t last_ptid;
361   struct target_waitstatus last_status;
362   int has_vforked;
363   int parent_pid, child_pid;
364
365   get_last_target_status (&last_ptid, &last_status);
366   has_vforked = (last_status.kind == TARGET_WAITKIND_VFORKED);
367   parent_pid = ptid_get_lwp (last_ptid);
368   if (parent_pid == 0)
369     parent_pid = ptid_get_pid (last_ptid);
370   child_pid = last_status.value.related_pid;
371
372   if (! follow_child)
373     {
374       /* We're already attached to the parent, by default. */
375
376       /* Before detaching from the child, remove all breakpoints from
377          it.  (This won't actually modify the breakpoint list, but will
378          physically remove the breakpoints from the child.) */
379       /* If we vforked this will remove the breakpoints from the parent
380          also, but they'll be reinserted below.  */
381       detach_breakpoints (child_pid);
382
383       /* Detach new forked process?  */
384       if (detach_fork)
385         {
386           if (info_verbose || debug_linux_nat)
387             {
388               target_terminal_ours ();
389               fprintf_filtered (gdb_stdlog,
390                                 "Detaching after fork from child process %d.\n",
391                                 child_pid);
392             }
393
394           ptrace (PTRACE_DETACH, child_pid, 0, 0);
395         }
396       else
397         {
398           struct fork_info *fp;
399           /* Retain child fork in ptrace (stopped) state.  */
400           fp = find_fork_pid (child_pid);
401           if (!fp)
402             fp = add_fork (child_pid);
403           fork_save_infrun_state (fp, 0);
404         }
405
406       if (has_vforked)
407         {
408           gdb_assert (linux_supports_tracefork_flag >= 0);
409           if (linux_supports_tracevforkdone (0))
410             {
411               int status;
412
413               ptrace (PTRACE_CONT, parent_pid, 0, 0);
414               my_waitpid (parent_pid, &status, __WALL);
415               if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
416                 warning (_("Unexpected waitpid result %06x when waiting for "
417                          "vfork-done"), status);
418             }
419           else
420             {
421               /* We can't insert breakpoints until the child has
422                  finished with the shared memory region.  We need to
423                  wait until that happens.  Ideal would be to just
424                  call:
425                  - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
426                  - waitpid (parent_pid, &status, __WALL);
427                  However, most architectures can't handle a syscall
428                  being traced on the way out if it wasn't traced on
429                  the way in.
430
431                  We might also think to loop, continuing the child
432                  until it exits or gets a SIGTRAP.  One problem is
433                  that the child might call ptrace with PTRACE_TRACEME.
434
435                  There's no simple and reliable way to figure out when
436                  the vforked child will be done with its copy of the
437                  shared memory.  We could step it out of the syscall,
438                  two instructions, let it go, and then single-step the
439                  parent once.  When we have hardware single-step, this
440                  would work; with software single-step it could still
441                  be made to work but we'd have to be able to insert
442                  single-step breakpoints in the child, and we'd have
443                  to insert -just- the single-step breakpoint in the
444                  parent.  Very awkward.
445
446                  In the end, the best we can do is to make sure it
447                  runs for a little while.  Hopefully it will be out of
448                  range of any breakpoints we reinsert.  Usually this
449                  is only the single-step breakpoint at vfork's return
450                  point.  */
451
452               usleep (10000);
453             }
454
455           /* Since we vforked, breakpoints were removed in the parent
456              too.  Put them back.  */
457           reattach_breakpoints (parent_pid);
458         }
459     }
460   else
461     {
462       char child_pid_spelling[40];
463
464       /* Needed to keep the breakpoint lists in sync.  */
465       if (! has_vforked)
466         detach_breakpoints (child_pid);
467
468       /* Before detaching from the parent, remove all breakpoints from it. */
469       remove_breakpoints ();
470
471       if (info_verbose || debug_linux_nat)
472         {
473           target_terminal_ours ();
474           fprintf_filtered (gdb_stdlog,
475                             "Attaching after fork to child process %d.\n",
476                             child_pid);
477         }
478
479       /* If we're vforking, we may want to hold on to the parent until
480          the child exits or execs.  At exec time we can remove the old
481          breakpoints from the parent and detach it; at exit time we
482          could do the same (or even, sneakily, resume debugging it - the
483          child's exec has failed, or something similar).
484
485          This doesn't clean up "properly", because we can't call
486          target_detach, but that's OK; if the current target is "child",
487          then it doesn't need any further cleanups, and lin_lwp will
488          generally not encounter vfork (vfork is defined to fork
489          in libpthread.so).
490
491          The holding part is very easy if we have VFORKDONE events;
492          but keeping track of both processes is beyond GDB at the
493          moment.  So we don't expose the parent to the rest of GDB.
494          Instead we quietly hold onto it until such time as we can
495          safely resume it.  */
496
497       if (has_vforked)
498         linux_parent_pid = parent_pid;
499       else if (!detach_fork)
500         {
501           struct fork_info *fp;
502           /* Retain parent fork in ptrace (stopped) state.  */
503           fp = find_fork_pid (parent_pid);
504           if (!fp)
505             fp = add_fork (parent_pid);
506           fork_save_infrun_state (fp, 0);
507         }
508       else
509         {
510           target_detach (NULL, 0);
511         }
512
513       inferior_ptid = ptid_build (child_pid, child_pid, 0);
514
515       /* Reinstall ourselves, since we might have been removed in
516          target_detach (which does other necessary cleanup).  */
517
518       push_target (ops);
519       linux_nat_switch_fork (inferior_ptid);
520       check_for_thread_db ();
521
522       /* Reset breakpoints in the child as appropriate.  */
523       follow_inferior_reset_breakpoints ();
524     }
525
526   return 0;
527 }
528
529 \f
530 static void
531 linux_child_insert_fork_catchpoint (int pid)
532 {
533   if (! linux_supports_tracefork (pid))
534     error (_("Your system does not support fork catchpoints."));
535 }
536
537 static void
538 linux_child_insert_vfork_catchpoint (int pid)
539 {
540   if (!linux_supports_tracefork (pid))
541     error (_("Your system does not support vfork catchpoints."));
542 }
543
544 static void
545 linux_child_insert_exec_catchpoint (int pid)
546 {
547   if (!linux_supports_tracefork (pid))
548     error (_("Your system does not support exec catchpoints."));
549 }
550
551 /* On GNU/Linux there are no real LWP's.  The closest thing to LWP's
552    are processes sharing the same VM space.  A multi-threaded process
553    is basically a group of such processes.  However, such a grouping
554    is almost entirely a user-space issue; the kernel doesn't enforce
555    such a grouping at all (this might change in the future).  In
556    general, we'll rely on the threads library (i.e. the GNU/Linux
557    Threads library) to provide such a grouping.
558
559    It is perfectly well possible to write a multi-threaded application
560    without the assistance of a threads library, by using the clone
561    system call directly.  This module should be able to give some
562    rudimentary support for debugging such applications if developers
563    specify the CLONE_PTRACE flag in the clone system call, and are
564    using the Linux kernel 2.4 or above.
565
566    Note that there are some peculiarities in GNU/Linux that affect
567    this code:
568
569    - In general one should specify the __WCLONE flag to waitpid in
570      order to make it report events for any of the cloned processes
571      (and leave it out for the initial process).  However, if a cloned
572      process has exited the exit status is only reported if the
573      __WCLONE flag is absent.  Linux kernel 2.4 has a __WALL flag, but
574      we cannot use it since GDB must work on older systems too.
575
576    - When a traced, cloned process exits and is waited for by the
577      debugger, the kernel reassigns it to the original parent and
578      keeps it around as a "zombie".  Somehow, the GNU/Linux Threads
579      library doesn't notice this, which leads to the "zombie problem":
580      When debugged a multi-threaded process that spawns a lot of
581      threads will run out of processes, even if the threads exit,
582      because the "zombies" stay around.  */
583
584 /* List of known LWPs.  */
585 struct lwp_info *lwp_list;
586
587 /* Number of LWPs in the list.  */
588 static int num_lwps;
589 \f
590
591 #define GET_LWP(ptid)           ptid_get_lwp (ptid)
592 #define GET_PID(ptid)           ptid_get_pid (ptid)
593 #define is_lwp(ptid)            (GET_LWP (ptid) != 0)
594 #define BUILD_LWP(lwp, pid)     ptid_build (pid, lwp, 0)
595
596 /* If the last reported event was a SIGTRAP, this variable is set to
597    the process id of the LWP/thread that got it.  */
598 ptid_t trap_ptid;
599 \f
600
601 /* Since we cannot wait (in linux_nat_wait) for the initial process and
602    any cloned processes with a single call to waitpid, we have to use
603    the WNOHANG flag and call waitpid in a loop.  To optimize
604    things a bit we use `sigsuspend' to wake us up when a process has
605    something to report (it will send us a SIGCHLD if it has).  To make
606    this work we have to juggle with the signal mask.  We save the
607    original signal mask such that we can restore it before creating a
608    new process in order to avoid blocking certain signals in the
609    inferior.  We then block SIGCHLD during the waitpid/sigsuspend
610    loop.  */
611
612 /* Original signal mask.  */
613 static sigset_t normal_mask;
614
615 /* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
616    _initialize_linux_nat.  */
617 static sigset_t suspend_mask;
618
619 /* Signals to block to make that sigsuspend work.  */
620 static sigset_t blocked_mask;
621 \f
622
623 /* Prototypes for local functions.  */
624 static int stop_wait_callback (struct lwp_info *lp, void *data);
625 static int linux_nat_thread_alive (ptid_t ptid);
626 static char *linux_child_pid_to_exec_file (int pid);
627 \f
628 /* Convert wait status STATUS to a string.  Used for printing debug
629    messages only.  */
630
631 static char *
632 status_to_str (int status)
633 {
634   static char buf[64];
635
636   if (WIFSTOPPED (status))
637     snprintf (buf, sizeof (buf), "%s (stopped)",
638               strsignal (WSTOPSIG (status)));
639   else if (WIFSIGNALED (status))
640     snprintf (buf, sizeof (buf), "%s (terminated)",
641               strsignal (WSTOPSIG (status)));
642   else
643     snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
644
645   return buf;
646 }
647
648 /* Initialize the list of LWPs.  Note that this module, contrary to
649    what GDB's generic threads layer does for its thread list,
650    re-initializes the LWP lists whenever we mourn or detach (which
651    doesn't involve mourning) the inferior.  */
652
653 static void
654 init_lwp_list (void)
655 {
656   struct lwp_info *lp, *lpnext;
657
658   for (lp = lwp_list; lp; lp = lpnext)
659     {
660       lpnext = lp->next;
661       xfree (lp);
662     }
663
664   lwp_list = NULL;
665   num_lwps = 0;
666 }
667
668 /* Add the LWP specified by PID to the list.  Return a pointer to the
669    structure describing the new LWP.  The LWP should already be stopped
670    (with an exception for the very first LWP).  */
671
672 static struct lwp_info *
673 add_lwp (ptid_t ptid)
674 {
675   struct lwp_info *lp;
676
677   gdb_assert (is_lwp (ptid));
678
679   lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
680
681   memset (lp, 0, sizeof (struct lwp_info));
682
683   lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
684
685   lp->ptid = ptid;
686
687   lp->next = lwp_list;
688   lwp_list = lp;
689   ++num_lwps;
690
691   if (num_lwps > 1 && linux_nat_new_thread != NULL)
692     linux_nat_new_thread (ptid);
693
694   return lp;
695 }
696
697 /* Remove the LWP specified by PID from the list.  */
698
699 static void
700 delete_lwp (ptid_t ptid)
701 {
702   struct lwp_info *lp, *lpprev;
703
704   lpprev = NULL;
705
706   for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
707     if (ptid_equal (lp->ptid, ptid))
708       break;
709
710   if (!lp)
711     return;
712
713   num_lwps--;
714
715   if (lpprev)
716     lpprev->next = lp->next;
717   else
718     lwp_list = lp->next;
719
720   xfree (lp);
721 }
722
723 /* Return a pointer to the structure describing the LWP corresponding
724    to PID.  If no corresponding LWP could be found, return NULL.  */
725
726 static struct lwp_info *
727 find_lwp_pid (ptid_t ptid)
728 {
729   struct lwp_info *lp;
730   int lwp;
731
732   if (is_lwp (ptid))
733     lwp = GET_LWP (ptid);
734   else
735     lwp = GET_PID (ptid);
736
737   for (lp = lwp_list; lp; lp = lp->next)
738     if (lwp == GET_LWP (lp->ptid))
739       return lp;
740
741   return NULL;
742 }
743
744 /* Call CALLBACK with its second argument set to DATA for every LWP in
745    the list.  If CALLBACK returns 1 for a particular LWP, return a
746    pointer to the structure describing that LWP immediately.
747    Otherwise return NULL.  */
748
749 struct lwp_info *
750 iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
751 {
752   struct lwp_info *lp, *lpnext;
753
754   for (lp = lwp_list; lp; lp = lpnext)
755     {
756       lpnext = lp->next;
757       if ((*callback) (lp, data))
758         return lp;
759     }
760
761   return NULL;
762 }
763
764 /* Update our internal state when changing from one fork (checkpoint,
765    et cetera) to another indicated by NEW_PTID.  We can only switch
766    single-threaded applications, so we only create one new LWP, and
767    the previous list is discarded.  */
768
769 void
770 linux_nat_switch_fork (ptid_t new_ptid)
771 {
772   struct lwp_info *lp;
773
774   init_lwp_list ();
775   lp = add_lwp (new_ptid);
776   lp->stopped = 1;
777 }
778
779 /* Record a PTID for later deletion.  */
780
781 struct saved_ptids
782 {
783   ptid_t ptid;
784   struct saved_ptids *next;
785 };
786 static struct saved_ptids *threads_to_delete;
787
788 static void
789 record_dead_thread (ptid_t ptid)
790 {
791   struct saved_ptids *p = xmalloc (sizeof (struct saved_ptids));
792   p->ptid = ptid;
793   p->next = threads_to_delete;
794   threads_to_delete = p;
795 }
796
797 /* Delete any dead threads which are not the current thread.  */
798
799 static void
800 prune_lwps (void)
801 {
802   struct saved_ptids **p = &threads_to_delete;
803
804   while (*p)
805     if (! ptid_equal ((*p)->ptid, inferior_ptid))
806       {
807         struct saved_ptids *tmp = *p;
808         delete_thread (tmp->ptid);
809         *p = tmp->next;
810         xfree (tmp);
811       }
812     else
813       p = &(*p)->next;
814 }
815
816 /* Callback for iterate_over_threads that finds a thread corresponding
817    to the given LWP.  */
818
819 static int
820 find_thread_from_lwp (struct thread_info *thr, void *dummy)
821 {
822   ptid_t *ptid_p = dummy;
823
824   if (GET_LWP (thr->ptid) && GET_LWP (thr->ptid) == GET_LWP (*ptid_p))
825     return 1;
826   else
827     return 0;
828 }
829
830 /* Handle the exit of a single thread LP.  */
831
832 static void
833 exit_lwp (struct lwp_info *lp)
834 {
835   if (in_thread_list (lp->ptid))
836     {
837       /* Core GDB cannot deal with us deleting the current thread.  */
838       if (!ptid_equal (lp->ptid, inferior_ptid))
839         delete_thread (lp->ptid);
840       else
841         record_dead_thread (lp->ptid);
842       printf_unfiltered (_("[%s exited]\n"),
843                          target_pid_to_str (lp->ptid));
844     }
845   else
846     {
847       /* Even if LP->PTID is not in the global GDB thread list, the
848          LWP may be - with an additional thread ID.  We don't need
849          to print anything in this case; thread_db is in use and
850          already took care of that.  But it didn't delete the thread
851          in order to handle zombies correctly.  */
852
853       struct thread_info *thr;
854
855       thr = iterate_over_threads (find_thread_from_lwp, &lp->ptid);
856       if (thr)
857         {
858           if (!ptid_equal (thr->ptid, inferior_ptid))
859             delete_thread (thr->ptid);
860           else
861             record_dead_thread (thr->ptid);
862         }
863     }
864
865   delete_lwp (lp->ptid);
866 }
867
868 /* Attach to the LWP specified by PID.  If VERBOSE is non-zero, print
869    a message telling the user that a new LWP has been added to the
870    process.  Return 0 if successful or -1 if the new LWP could not
871    be attached.  */
872
873 int
874 lin_lwp_attach_lwp (ptid_t ptid)
875 {
876   struct lwp_info *lp;
877
878   gdb_assert (is_lwp (ptid));
879
880   /* Make sure SIGCHLD is blocked.  We don't want SIGCHLD events
881      to interrupt either the ptrace() or waitpid() calls below.  */
882   if (!sigismember (&blocked_mask, SIGCHLD))
883     {
884       sigaddset (&blocked_mask, SIGCHLD);
885       sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
886     }
887
888   lp = find_lwp_pid (ptid);
889
890   /* We assume that we're already attached to any LWP that has an id
891      equal to the overall process id, and to any LWP that is already
892      in our list of LWPs.  If we're not seeing exit events from threads
893      and we've had PID wraparound since we last tried to stop all threads,
894      this assumption might be wrong; fortunately, this is very unlikely
895      to happen.  */
896   if (GET_LWP (ptid) != GET_PID (ptid) && lp == NULL)
897     {
898       pid_t pid;
899       int status;
900       int cloned = 0;
901
902       if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
903         {
904           /* If we fail to attach to the thread, issue a warning,
905              but continue.  One way this can happen is if thread
906              creation is interrupted; as of Linux kernel 2.6.19, a
907              bug may place threads in the thread list and then fail
908              to create them.  */
909           warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
910                    safe_strerror (errno));
911           return -1;
912         }
913
914       if (debug_linux_nat)
915         fprintf_unfiltered (gdb_stdlog,
916                             "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
917                             target_pid_to_str (ptid));
918
919       pid = my_waitpid (GET_LWP (ptid), &status, 0);
920       if (pid == -1 && errno == ECHILD)
921         {
922           /* Try again with __WCLONE to check cloned processes.  */
923           pid = my_waitpid (GET_LWP (ptid), &status, __WCLONE);
924           cloned = 1;
925         }
926
927       gdb_assert (pid == GET_LWP (ptid)
928                   && WIFSTOPPED (status) && WSTOPSIG (status));
929
930       if (lp == NULL)
931         lp = add_lwp (ptid);
932       lp->cloned = cloned;
933
934       target_post_attach (pid);
935
936       lp->stopped = 1;
937
938       if (debug_linux_nat)
939         {
940           fprintf_unfiltered (gdb_stdlog,
941                               "LLAL: waitpid %s received %s\n",
942                               target_pid_to_str (ptid),
943                               status_to_str (status));
944         }
945     }
946   else
947     {
948       /* We assume that the LWP representing the original process is
949          already stopped.  Mark it as stopped in the data structure
950          that the GNU/linux ptrace layer uses to keep track of
951          threads.  Note that this won't have already been done since
952          the main thread will have, we assume, been stopped by an
953          attach from a different layer.  */
954       if (lp == NULL)
955         lp = add_lwp (ptid);
956       lp->stopped = 1;
957     }
958
959   return 0;
960 }
961
962 static void
963 linux_nat_attach (char *args, int from_tty)
964 {
965   struct lwp_info *lp;
966   pid_t pid;
967   int status;
968   int cloned = 0;
969
970   /* FIXME: We should probably accept a list of process id's, and
971      attach all of them.  */
972   linux_ops->to_attach (args, from_tty);
973
974   /* Make sure the initial process is stopped.  The user-level threads
975      layer might want to poke around in the inferior, and that won't
976      work if things haven't stabilized yet.  */
977   pid = my_waitpid (GET_PID (inferior_ptid), &status, 0);
978   if (pid == -1 && errno == ECHILD)
979     {
980       warning (_("%s is a cloned process"), target_pid_to_str (inferior_ptid));
981
982       /* Try again with __WCLONE to check cloned processes.  */
983       pid = my_waitpid (GET_PID (inferior_ptid), &status, __WCLONE);
984       cloned = 1;
985     }
986
987   gdb_assert (pid == GET_PID (inferior_ptid)
988               && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP);
989
990   /* Add the initial process as the first LWP to the list.  */
991   inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
992   lp = add_lwp (inferior_ptid);
993   lp->cloned = cloned;
994
995   lp->stopped = 1;
996
997   /* Fake the SIGSTOP that core GDB expects.  */
998   lp->status = W_STOPCODE (SIGSTOP);
999   lp->resumed = 1;
1000   if (debug_linux_nat)
1001     {
1002       fprintf_unfiltered (gdb_stdlog,
1003                           "LLA: waitpid %ld, faking SIGSTOP\n", (long) pid);
1004     }
1005 }
1006
1007 static int
1008 detach_callback (struct lwp_info *lp, void *data)
1009 {
1010   gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1011
1012   if (debug_linux_nat && lp->status)
1013     fprintf_unfiltered (gdb_stdlog, "DC:  Pending %s for %s on detach.\n",
1014                         strsignal (WSTOPSIG (lp->status)),
1015                         target_pid_to_str (lp->ptid));
1016
1017   while (lp->signalled && lp->stopped)
1018     {
1019       errno = 0;
1020       if (ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
1021                   WSTOPSIG (lp->status)) < 0)
1022         error (_("Can't continue %s: %s"), target_pid_to_str (lp->ptid),
1023                safe_strerror (errno));
1024
1025       if (debug_linux_nat)
1026         fprintf_unfiltered (gdb_stdlog,
1027                             "DC:  PTRACE_CONTINUE (%s, 0, %s) (OK)\n",
1028                             target_pid_to_str (lp->ptid),
1029                             status_to_str (lp->status));
1030
1031       lp->stopped = 0;
1032       lp->signalled = 0;
1033       lp->status = 0;
1034       /* FIXME drow/2003-08-26: There was a call to stop_wait_callback
1035          here.  But since lp->signalled was cleared above,
1036          stop_wait_callback didn't do anything; the process was left
1037          running.  Shouldn't we be waiting for it to stop?
1038          I've removed the call, since stop_wait_callback now does do
1039          something when called with lp->signalled == 0.  */
1040
1041       gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1042     }
1043
1044   /* We don't actually detach from the LWP that has an id equal to the
1045      overall process id just yet.  */
1046   if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
1047     {
1048       errno = 0;
1049       if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
1050                   WSTOPSIG (lp->status)) < 0)
1051         error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
1052                safe_strerror (errno));
1053
1054       if (debug_linux_nat)
1055         fprintf_unfiltered (gdb_stdlog,
1056                             "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1057                             target_pid_to_str (lp->ptid),
1058                             strsignal (WSTOPSIG (lp->status)));
1059
1060       delete_lwp (lp->ptid);
1061     }
1062
1063   return 0;
1064 }
1065
1066 static void
1067 linux_nat_detach (char *args, int from_tty)
1068 {
1069   iterate_over_lwps (detach_callback, NULL);
1070
1071   /* Only the initial process should be left right now.  */
1072   gdb_assert (num_lwps == 1);
1073
1074   trap_ptid = null_ptid;
1075
1076   /* Destroy LWP info; it's no longer valid.  */
1077   init_lwp_list ();
1078
1079   /* Restore the original signal mask.  */
1080   sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1081   sigemptyset (&blocked_mask);
1082
1083   inferior_ptid = pid_to_ptid (GET_PID (inferior_ptid));
1084   linux_ops->to_detach (args, from_tty);
1085 }
1086
1087 /* Resume LP.  */
1088
1089 static int
1090 resume_callback (struct lwp_info *lp, void *data)
1091 {
1092   if (lp->stopped && lp->status == 0)
1093     {
1094       linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1095                             0, TARGET_SIGNAL_0);
1096       if (debug_linux_nat)
1097         fprintf_unfiltered (gdb_stdlog,
1098                             "RC:  PTRACE_CONT %s, 0, 0 (resume sibling)\n",
1099                             target_pid_to_str (lp->ptid));
1100       lp->stopped = 0;
1101       lp->step = 0;
1102       memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1103     }
1104
1105   return 0;
1106 }
1107
1108 static int
1109 resume_clear_callback (struct lwp_info *lp, void *data)
1110 {
1111   lp->resumed = 0;
1112   return 0;
1113 }
1114
1115 static int
1116 resume_set_callback (struct lwp_info *lp, void *data)
1117 {
1118   lp->resumed = 1;
1119   return 0;
1120 }
1121
1122 static void
1123 linux_nat_resume (ptid_t ptid, int step, enum target_signal signo)
1124 {
1125   struct lwp_info *lp;
1126   int resume_all;
1127
1128   if (debug_linux_nat)
1129     fprintf_unfiltered (gdb_stdlog,
1130                         "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1131                         step ? "step" : "resume",
1132                         target_pid_to_str (ptid),
1133                         signo ? strsignal (signo) : "0",
1134                         target_pid_to_str (inferior_ptid));
1135
1136   prune_lwps ();
1137
1138   /* A specific PTID means `step only this process id'.  */
1139   resume_all = (PIDGET (ptid) == -1);
1140
1141   if (resume_all)
1142     iterate_over_lwps (resume_set_callback, NULL);
1143   else
1144     iterate_over_lwps (resume_clear_callback, NULL);
1145
1146   /* If PID is -1, it's the current inferior that should be
1147      handled specially.  */
1148   if (PIDGET (ptid) == -1)
1149     ptid = inferior_ptid;
1150
1151   lp = find_lwp_pid (ptid);
1152   gdb_assert (lp != NULL);
1153
1154   ptid = pid_to_ptid (GET_LWP (lp->ptid));
1155
1156   /* Remember if we're stepping.  */
1157   lp->step = step;
1158
1159   /* Mark this LWP as resumed.  */
1160   lp->resumed = 1;
1161
1162   /* If we have a pending wait status for this thread, there is no
1163      point in resuming the process.  But first make sure that
1164      linux_nat_wait won't preemptively handle the event - we
1165      should never take this short-circuit if we are going to
1166      leave LP running, since we have skipped resuming all the
1167      other threads.  This bit of code needs to be synchronized
1168      with linux_nat_wait.  */
1169
1170   if (lp->status && WIFSTOPPED (lp->status))
1171     {
1172       int saved_signo = target_signal_from_host (WSTOPSIG (lp->status));
1173
1174       if (signal_stop_state (saved_signo) == 0
1175           && signal_print_state (saved_signo) == 0
1176           && signal_pass_state (saved_signo) == 1)
1177         {
1178           if (debug_linux_nat)
1179             fprintf_unfiltered (gdb_stdlog,
1180                                 "LLR: Not short circuiting for ignored "
1181                                 "status 0x%x\n", lp->status);
1182
1183           /* FIXME: What should we do if we are supposed to continue
1184              this thread with a signal?  */
1185           gdb_assert (signo == TARGET_SIGNAL_0);
1186           signo = saved_signo;
1187           lp->status = 0;
1188         }
1189     }
1190
1191   if (lp->status)
1192     {
1193       /* FIXME: What should we do if we are supposed to continue
1194          this thread with a signal?  */
1195       gdb_assert (signo == TARGET_SIGNAL_0);
1196
1197       if (debug_linux_nat)
1198         fprintf_unfiltered (gdb_stdlog,
1199                             "LLR: Short circuiting for status 0x%x\n",
1200                             lp->status);
1201
1202       return;
1203     }
1204
1205   /* Mark LWP as not stopped to prevent it from being continued by
1206      resume_callback.  */
1207   lp->stopped = 0;
1208
1209   if (resume_all)
1210     iterate_over_lwps (resume_callback, NULL);
1211
1212   linux_ops->to_resume (ptid, step, signo);
1213   memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1214
1215   if (debug_linux_nat)
1216     fprintf_unfiltered (gdb_stdlog,
1217                         "LLR: %s %s, %s (resume event thread)\n",
1218                         step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1219                         target_pid_to_str (ptid),
1220                         signo ? strsignal (signo) : "0");
1221 }
1222
1223 /* Issue kill to specified lwp.  */
1224
1225 static int tkill_failed;
1226
1227 static int
1228 kill_lwp (int lwpid, int signo)
1229 {
1230   errno = 0;
1231
1232 /* Use tkill, if possible, in case we are using nptl threads.  If tkill
1233    fails, then we are not using nptl threads and we should be using kill.  */
1234
1235 #ifdef HAVE_TKILL_SYSCALL
1236   if (!tkill_failed)
1237     {
1238       int ret = syscall (__NR_tkill, lwpid, signo);
1239       if (errno != ENOSYS)
1240         return ret;
1241       errno = 0;
1242       tkill_failed = 1;
1243     }
1244 #endif
1245
1246   return kill (lwpid, signo);
1247 }
1248
1249 /* Handle a GNU/Linux extended wait response.  If we see a clone
1250    event, we need to add the new LWP to our list (and not report the
1251    trap to higher layers).  This function returns non-zero if the
1252    event should be ignored and we should wait again.  If STOPPING is
1253    true, the new LWP remains stopped, otherwise it is continued.  */
1254
1255 static int
1256 linux_handle_extended_wait (struct lwp_info *lp, int status,
1257                             int stopping)
1258 {
1259   int pid = GET_LWP (lp->ptid);
1260   struct target_waitstatus *ourstatus = &lp->waitstatus;
1261   struct lwp_info *new_lp = NULL;
1262   int event = status >> 16;
1263
1264   if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1265       || event == PTRACE_EVENT_CLONE)
1266     {
1267       unsigned long new_pid;
1268       int ret;
1269
1270       ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
1271
1272       /* If we haven't already seen the new PID stop, wait for it now.  */
1273       if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1274         {
1275           /* The new child has a pending SIGSTOP.  We can't affect it until it
1276              hits the SIGSTOP, but we're already attached.  */
1277           ret = my_waitpid (new_pid, &status,
1278                             (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1279           if (ret == -1)
1280             perror_with_name (_("waiting for new child"));
1281           else if (ret != new_pid)
1282             internal_error (__FILE__, __LINE__,
1283                             _("wait returned unexpected PID %d"), ret);
1284           else if (!WIFSTOPPED (status))
1285             internal_error (__FILE__, __LINE__,
1286                             _("wait returned unexpected status 0x%x"), status);
1287         }
1288
1289       ourstatus->value.related_pid = new_pid;
1290
1291       if (event == PTRACE_EVENT_FORK)
1292         ourstatus->kind = TARGET_WAITKIND_FORKED;
1293       else if (event == PTRACE_EVENT_VFORK)
1294         ourstatus->kind = TARGET_WAITKIND_VFORKED;
1295       else
1296         {
1297           ourstatus->kind = TARGET_WAITKIND_IGNORE;
1298           new_lp = add_lwp (BUILD_LWP (new_pid, GET_PID (inferior_ptid)));
1299           new_lp->cloned = 1;
1300
1301           if (WSTOPSIG (status) != SIGSTOP)
1302             {
1303               /* This can happen if someone starts sending signals to
1304                  the new thread before it gets a chance to run, which
1305                  have a lower number than SIGSTOP (e.g. SIGUSR1).
1306                  This is an unlikely case, and harder to handle for
1307                  fork / vfork than for clone, so we do not try - but
1308                  we handle it for clone events here.  We'll send
1309                  the other signal on to the thread below.  */
1310
1311               new_lp->signalled = 1;
1312             }
1313           else
1314             status = 0;
1315
1316           if (stopping)
1317             new_lp->stopped = 1;
1318           else
1319             {
1320               new_lp->resumed = 1;
1321               ptrace (PTRACE_CONT, lp->waitstatus.value.related_pid, 0,
1322                       status ? WSTOPSIG (status) : 0);
1323             }
1324
1325           if (debug_linux_nat)
1326             fprintf_unfiltered (gdb_stdlog,
1327                                 "LHEW: Got clone event from LWP %ld, resuming\n",
1328                                 GET_LWP (lp->ptid));
1329           ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1330
1331           return 1;
1332         }
1333
1334       return 0;
1335     }
1336
1337   if (event == PTRACE_EVENT_EXEC)
1338     {
1339       ourstatus->kind = TARGET_WAITKIND_EXECD;
1340       ourstatus->value.execd_pathname
1341         = xstrdup (linux_child_pid_to_exec_file (pid));
1342
1343       if (linux_parent_pid)
1344         {
1345           detach_breakpoints (linux_parent_pid);
1346           ptrace (PTRACE_DETACH, linux_parent_pid, 0, 0);
1347
1348           linux_parent_pid = 0;
1349         }
1350
1351       return 0;
1352     }
1353
1354   internal_error (__FILE__, __LINE__,
1355                   _("unknown ptrace event %d"), event);
1356 }
1357
1358 /* Wait for LP to stop.  Returns the wait status, or 0 if the LWP has
1359    exited.  */
1360
1361 static int
1362 wait_lwp (struct lwp_info *lp)
1363 {
1364   pid_t pid;
1365   int status;
1366   int thread_dead = 0;
1367
1368   gdb_assert (!lp->stopped);
1369   gdb_assert (lp->status == 0);
1370
1371   pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
1372   if (pid == -1 && errno == ECHILD)
1373     {
1374       pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
1375       if (pid == -1 && errno == ECHILD)
1376         {
1377           /* The thread has previously exited.  We need to delete it
1378              now because, for some vendor 2.4 kernels with NPTL
1379              support backported, there won't be an exit event unless
1380              it is the main thread.  2.6 kernels will report an exit
1381              event for each thread that exits, as expected.  */
1382           thread_dead = 1;
1383           if (debug_linux_nat)
1384             fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
1385                                 target_pid_to_str (lp->ptid));
1386         }
1387     }
1388
1389   if (!thread_dead)
1390     {
1391       gdb_assert (pid == GET_LWP (lp->ptid));
1392
1393       if (debug_linux_nat)
1394         {
1395           fprintf_unfiltered (gdb_stdlog,
1396                               "WL: waitpid %s received %s\n",
1397                               target_pid_to_str (lp->ptid),
1398                               status_to_str (status));
1399         }
1400     }
1401
1402   /* Check if the thread has exited.  */
1403   if (WIFEXITED (status) || WIFSIGNALED (status))
1404     {
1405       thread_dead = 1;
1406       if (debug_linux_nat)
1407         fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
1408                             target_pid_to_str (lp->ptid));
1409     }
1410
1411   if (thread_dead)
1412     {
1413       exit_lwp (lp);
1414       return 0;
1415     }
1416
1417   gdb_assert (WIFSTOPPED (status));
1418
1419   /* Handle GNU/Linux's extended waitstatus for trace events.  */
1420   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1421     {
1422       if (debug_linux_nat)
1423         fprintf_unfiltered (gdb_stdlog,
1424                             "WL: Handling extended status 0x%06x\n",
1425                             status);
1426       if (linux_handle_extended_wait (lp, status, 1))
1427         return wait_lwp (lp);
1428     }
1429
1430   return status;
1431 }
1432
1433 /* Save the most recent siginfo for LP.  This is currently only called
1434    for SIGTRAP; some ports use the si_addr field for
1435    target_stopped_data_address.  In the future, it may also be used to
1436    restore the siginfo of requeued signals.  */
1437
1438 static void
1439 save_siginfo (struct lwp_info *lp)
1440 {
1441   errno = 0;
1442   ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid),
1443           (PTRACE_TYPE_ARG3) 0, &lp->siginfo);
1444
1445   if (errno != 0)
1446     memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1447 }
1448
1449 /* Send a SIGSTOP to LP.  */
1450
1451 static int
1452 stop_callback (struct lwp_info *lp, void *data)
1453 {
1454   if (!lp->stopped && !lp->signalled)
1455     {
1456       int ret;
1457
1458       if (debug_linux_nat)
1459         {
1460           fprintf_unfiltered (gdb_stdlog,
1461                               "SC:  kill %s **<SIGSTOP>**\n",
1462                               target_pid_to_str (lp->ptid));
1463         }
1464       errno = 0;
1465       ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
1466       if (debug_linux_nat)
1467         {
1468           fprintf_unfiltered (gdb_stdlog,
1469                               "SC:  lwp kill %d %s\n",
1470                               ret,
1471                               errno ? safe_strerror (errno) : "ERRNO-OK");
1472         }
1473
1474       lp->signalled = 1;
1475       gdb_assert (lp->status == 0);
1476     }
1477
1478   return 0;
1479 }
1480
1481 /* Wait until LP is stopped.  If DATA is non-null it is interpreted as
1482    a pointer to a set of signals to be flushed immediately.  */
1483
1484 static int
1485 stop_wait_callback (struct lwp_info *lp, void *data)
1486 {
1487   sigset_t *flush_mask = data;
1488
1489   if (!lp->stopped)
1490     {
1491       int status;
1492
1493       status = wait_lwp (lp);
1494       if (status == 0)
1495         return 0;
1496
1497       /* Ignore any signals in FLUSH_MASK.  */
1498       if (flush_mask && sigismember (flush_mask, WSTOPSIG (status)))
1499         {
1500           if (!lp->signalled)
1501             {
1502               lp->stopped = 1;
1503               return 0;
1504             }
1505
1506           errno = 0;
1507           ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1508           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");
1513
1514           return stop_wait_callback (lp, flush_mask);
1515         }
1516
1517       if (WSTOPSIG (status) != SIGSTOP)
1518         {
1519           if (WSTOPSIG (status) == SIGTRAP)
1520             {
1521               /* If a LWP other than the LWP that we're reporting an
1522                  event for has hit a GDB breakpoint (as opposed to
1523                  some random trap signal), then just arrange for it to
1524                  hit it again later.  We don't keep the SIGTRAP status
1525                  and don't forward the SIGTRAP signal to the LWP.  We
1526                  will handle the current event, eventually we will
1527                  resume all LWPs, and this one will get its breakpoint
1528                  trap again.
1529
1530                  If we do not do this, then we run the risk that the
1531                  user will delete or disable the breakpoint, but the
1532                  thread will have already tripped on it.  */
1533
1534               /* Save the trap's siginfo in case we need it later.  */
1535               save_siginfo (lp);
1536
1537               /* Now resume this LWP and get the SIGSTOP event. */
1538               errno = 0;
1539               ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1540               if (debug_linux_nat)
1541                 {
1542                   fprintf_unfiltered (gdb_stdlog,
1543                                       "PTRACE_CONT %s, 0, 0 (%s)\n",
1544                                       target_pid_to_str (lp->ptid),
1545                                       errno ? safe_strerror (errno) : "OK");
1546
1547                   fprintf_unfiltered (gdb_stdlog,
1548                                       "SWC: Candidate SIGTRAP event in %s\n",
1549                                       target_pid_to_str (lp->ptid));
1550                 }
1551               /* Hold the SIGTRAP for handling by linux_nat_wait. */
1552               stop_wait_callback (lp, data);
1553               /* If there's another event, throw it back into the queue. */
1554               if (lp->status)
1555                 {
1556                   if (debug_linux_nat)
1557                     {
1558                       fprintf_unfiltered (gdb_stdlog,
1559                                           "SWC: kill %s, %s\n",
1560                                           target_pid_to_str (lp->ptid),
1561                                           status_to_str ((int) status));
1562                     }
1563                   kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
1564                 }
1565               /* Save the sigtrap event. */
1566               lp->status = status;
1567               return 0;
1568             }
1569           else
1570             {
1571               /* The thread was stopped with a signal other than
1572                  SIGSTOP, and didn't accidentally trip a breakpoint. */
1573
1574               if (debug_linux_nat)
1575                 {
1576                   fprintf_unfiltered (gdb_stdlog,
1577                                       "SWC: Pending event %s in %s\n",
1578                                       status_to_str ((int) status),
1579                                       target_pid_to_str (lp->ptid));
1580                 }
1581               /* Now resume this LWP and get the SIGSTOP event. */
1582               errno = 0;
1583               ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1584               if (debug_linux_nat)
1585                 fprintf_unfiltered (gdb_stdlog,
1586                                     "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
1587                                     target_pid_to_str (lp->ptid),
1588                                     errno ? safe_strerror (errno) : "OK");
1589
1590               /* Hold this event/waitstatus while we check to see if
1591                  there are any more (we still want to get that SIGSTOP). */
1592               stop_wait_callback (lp, data);
1593               /* If the lp->status field is still empty, use it to hold
1594                  this event.  If not, then this event must be returned
1595                  to the event queue of the LWP.  */
1596               if (lp->status == 0)
1597                 lp->status = status;
1598               else
1599                 {
1600                   if (debug_linux_nat)
1601                     {
1602                       fprintf_unfiltered (gdb_stdlog,
1603                                           "SWC: kill %s, %s\n",
1604                                           target_pid_to_str (lp->ptid),
1605                                           status_to_str ((int) status));
1606                     }
1607                   kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
1608                 }
1609               return 0;
1610             }
1611         }
1612       else
1613         {
1614           /* We caught the SIGSTOP that we intended to catch, so
1615              there's no SIGSTOP pending.  */
1616           lp->stopped = 1;
1617           lp->signalled = 0;
1618         }
1619     }
1620
1621   return 0;
1622 }
1623
1624 /* Check whether PID has any pending signals in FLUSH_MASK.  If so set
1625    the appropriate bits in PENDING, and return 1 - otherwise return 0.  */
1626
1627 static int
1628 linux_nat_has_pending (int pid, sigset_t *pending, sigset_t *flush_mask)
1629 {
1630   sigset_t blocked, ignored;
1631   int i;
1632
1633   linux_proc_pending_signals (pid, pending, &blocked, &ignored);
1634
1635   if (!flush_mask)
1636     return 0;
1637
1638   for (i = 1; i < NSIG; i++)
1639     if (sigismember (pending, i))
1640       if (!sigismember (flush_mask, i)
1641           || sigismember (&blocked, i)
1642           || sigismember (&ignored, i))
1643         sigdelset (pending, i);
1644
1645   if (sigisemptyset (pending))
1646     return 0;
1647
1648   return 1;
1649 }
1650
1651 /* DATA is interpreted as a mask of signals to flush.  If LP has
1652    signals pending, and they are all in the flush mask, then arrange
1653    to flush them.  LP should be stopped, as should all other threads
1654    it might share a signal queue with.  */
1655
1656 static int
1657 flush_callback (struct lwp_info *lp, void *data)
1658 {
1659   sigset_t *flush_mask = data;
1660   sigset_t pending, intersection, blocked, ignored;
1661   int pid, status;
1662
1663   /* Normally, when an LWP exits, it is removed from the LWP list.  The
1664      last LWP isn't removed till later, however.  So if there is only
1665      one LWP on the list, make sure it's alive.  */
1666   if (lwp_list == lp && lp->next == NULL)
1667     if (!linux_nat_thread_alive (lp->ptid))
1668       return 0;
1669
1670   /* Just because the LWP is stopped doesn't mean that new signals
1671      can't arrive from outside, so this function must be careful of
1672      race conditions.  However, because all threads are stopped, we
1673      can assume that the pending mask will not shrink unless we resume
1674      the LWP, and that it will then get another signal.  We can't
1675      control which one, however.  */
1676
1677   if (lp->status)
1678     {
1679       if (debug_linux_nat)
1680         printf_unfiltered (_("FC: LP has pending status %06x\n"), lp->status);
1681       if (WIFSTOPPED (lp->status) && sigismember (flush_mask, WSTOPSIG (lp->status)))
1682         lp->status = 0;
1683     }
1684
1685   /* While there is a pending signal we would like to flush, continue
1686      the inferior and collect another signal.  But if there's already
1687      a saved status that we don't want to flush, we can't resume the
1688      inferior - if it stopped for some other reason we wouldn't have
1689      anywhere to save the new status.  In that case, we must leave the
1690      signal unflushed (and possibly generate an extra SIGINT stop).
1691      That's much less bad than losing a signal.  */
1692   while (lp->status == 0
1693          && linux_nat_has_pending (GET_LWP (lp->ptid), &pending, flush_mask))
1694     {
1695       int ret;
1696       
1697       errno = 0;
1698       ret = ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1699       if (debug_linux_nat)
1700         fprintf_unfiltered (gdb_stderr,
1701                             "FC: Sent PTRACE_CONT, ret %d %d\n", ret, errno);
1702
1703       lp->stopped = 0;
1704       stop_wait_callback (lp, flush_mask);
1705       if (debug_linux_nat)
1706         fprintf_unfiltered (gdb_stderr,
1707                             "FC: Wait finished; saved status is %d\n",
1708                             lp->status);
1709     }
1710
1711   return 0;
1712 }
1713
1714 /* Return non-zero if LP has a wait status pending.  */
1715
1716 static int
1717 status_callback (struct lwp_info *lp, void *data)
1718 {
1719   /* Only report a pending wait status if we pretend that this has
1720      indeed been resumed.  */
1721   return (lp->status != 0 && lp->resumed);
1722 }
1723
1724 /* Return non-zero if LP isn't stopped.  */
1725
1726 static int
1727 running_callback (struct lwp_info *lp, void *data)
1728 {
1729   return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
1730 }
1731
1732 /* Count the LWP's that have had events.  */
1733
1734 static int
1735 count_events_callback (struct lwp_info *lp, void *data)
1736 {
1737   int *count = data;
1738
1739   gdb_assert (count != NULL);
1740
1741   /* Count only LWPs that have a SIGTRAP event pending.  */
1742   if (lp->status != 0
1743       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
1744     (*count)++;
1745
1746   return 0;
1747 }
1748
1749 /* Select the LWP (if any) that is currently being single-stepped.  */
1750
1751 static int
1752 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
1753 {
1754   if (lp->step && lp->status != 0)
1755     return 1;
1756   else
1757     return 0;
1758 }
1759
1760 /* Select the Nth LWP that has had a SIGTRAP event.  */
1761
1762 static int
1763 select_event_lwp_callback (struct lwp_info *lp, void *data)
1764 {
1765   int *selector = data;
1766
1767   gdb_assert (selector != NULL);
1768
1769   /* Select only LWPs that have a SIGTRAP event pending. */
1770   if (lp->status != 0
1771       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
1772     if ((*selector)-- == 0)
1773       return 1;
1774
1775   return 0;
1776 }
1777
1778 static int
1779 cancel_breakpoints_callback (struct lwp_info *lp, void *data)
1780 {
1781   struct lwp_info *event_lp = data;
1782
1783   /* Leave the LWP that has been elected to receive a SIGTRAP alone.  */
1784   if (lp == event_lp)
1785     return 0;
1786
1787   /* If a LWP other than the LWP that we're reporting an event for has
1788      hit a GDB breakpoint (as opposed to some random trap signal),
1789      then just arrange for it to hit it again later.  We don't keep
1790      the SIGTRAP status and don't forward the SIGTRAP signal to the
1791      LWP.  We will handle the current event, eventually we will resume
1792      all LWPs, and this one will get its breakpoint trap again.
1793
1794      If we do not do this, then we run the risk that the user will
1795      delete or disable the breakpoint, but the LWP will have already
1796      tripped on it.  */
1797
1798   if (lp->status != 0
1799       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP
1800       && breakpoint_inserted_here_p (read_pc_pid (lp->ptid) -
1801                                      gdbarch_decr_pc_after_break
1802                                        (current_gdbarch)))
1803     {
1804       if (debug_linux_nat)
1805         fprintf_unfiltered (gdb_stdlog,
1806                             "CBC: Push back breakpoint for %s\n",
1807                             target_pid_to_str (lp->ptid));
1808
1809       /* Back up the PC if necessary.  */
1810       if (gdbarch_decr_pc_after_break (current_gdbarch))
1811         write_pc_pid (read_pc_pid (lp->ptid) - gdbarch_decr_pc_after_break
1812                                                  (current_gdbarch),
1813                       lp->ptid);
1814
1815       /* Throw away the SIGTRAP.  */
1816       lp->status = 0;
1817     }
1818
1819   return 0;
1820 }
1821
1822 /* Select one LWP out of those that have events pending.  */
1823
1824 static void
1825 select_event_lwp (struct lwp_info **orig_lp, int *status)
1826 {
1827   int num_events = 0;
1828   int random_selector;
1829   struct lwp_info *event_lp;
1830
1831   /* Record the wait status for the original LWP.  */
1832   (*orig_lp)->status = *status;
1833
1834   /* Give preference to any LWP that is being single-stepped.  */
1835   event_lp = iterate_over_lwps (select_singlestep_lwp_callback, NULL);
1836   if (event_lp != NULL)
1837     {
1838       if (debug_linux_nat)
1839         fprintf_unfiltered (gdb_stdlog,
1840                             "SEL: Select single-step %s\n",
1841                             target_pid_to_str (event_lp->ptid));
1842     }
1843   else
1844     {
1845       /* No single-stepping LWP.  Select one at random, out of those
1846          which have had SIGTRAP events.  */
1847
1848       /* First see how many SIGTRAP events we have.  */
1849       iterate_over_lwps (count_events_callback, &num_events);
1850
1851       /* Now randomly pick a LWP out of those that have had a SIGTRAP.  */
1852       random_selector = (int)
1853         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
1854
1855       if (debug_linux_nat && num_events > 1)
1856         fprintf_unfiltered (gdb_stdlog,
1857                             "SEL: Found %d SIGTRAP events, selecting #%d\n",
1858                             num_events, random_selector);
1859
1860       event_lp = iterate_over_lwps (select_event_lwp_callback,
1861                                     &random_selector);
1862     }
1863
1864   if (event_lp != NULL)
1865     {
1866       /* Switch the event LWP.  */
1867       *orig_lp = event_lp;
1868       *status = event_lp->status;
1869     }
1870
1871   /* Flush the wait status for the event LWP.  */
1872   (*orig_lp)->status = 0;
1873 }
1874
1875 /* Return non-zero if LP has been resumed.  */
1876
1877 static int
1878 resumed_callback (struct lwp_info *lp, void *data)
1879 {
1880   return lp->resumed;
1881 }
1882
1883 /* Stop an active thread, verify it still exists, then resume it.  */
1884
1885 static int
1886 stop_and_resume_callback (struct lwp_info *lp, void *data)
1887 {
1888   struct lwp_info *ptr;
1889
1890   if (!lp->stopped && !lp->signalled)
1891     {
1892       stop_callback (lp, NULL);
1893       stop_wait_callback (lp, NULL);
1894       /* Resume if the lwp still exists.  */
1895       for (ptr = lwp_list; ptr; ptr = ptr->next)
1896         if (lp == ptr)
1897           {
1898             resume_callback (lp, NULL);
1899             resume_set_callback (lp, NULL);
1900           }
1901     }
1902   return 0;
1903 }
1904
1905 /* Check if we should go on and pass this event to common code.
1906    Return the affected lpw if we are, or NULL otherwise.  */
1907 static struct lwp_info *
1908 linux_nat_filter_event (int lwpid, int status, int options)
1909 {
1910   struct lwp_info *lp;
1911
1912   lp = find_lwp_pid (pid_to_ptid (lwpid));
1913
1914   /* Check for stop events reported by a process we didn't already
1915      know about - anything not already in our LWP list.
1916
1917      If we're expecting to receive stopped processes after
1918      fork, vfork, and clone events, then we'll just add the
1919      new one to our list and go back to waiting for the event
1920      to be reported - the stopped process might be returned
1921      from waitpid before or after the event is.  */
1922   if (WIFSTOPPED (status) && !lp)
1923     {
1924       linux_record_stopped_pid (lwpid, status);
1925       return NULL;
1926     }
1927
1928   /* Make sure we don't report an event for the exit of an LWP not in
1929      our list, i.e.  not part of the current process.  This can happen
1930      if we detach from a program we original forked and then it
1931      exits.  */
1932   if (!WIFSTOPPED (status) && !lp)
1933     return NULL;
1934
1935   /* NOTE drow/2003-06-17: This code seems to be meant for debugging
1936      CLONE_PTRACE processes which do not use the thread library -
1937      otherwise we wouldn't find the new LWP this way.  That doesn't
1938      currently work, and the following code is currently unreachable
1939      due to the two blocks above.  If it's fixed some day, this code
1940      should be broken out into a function so that we can also pick up
1941      LWPs from the new interface.  */
1942   if (!lp)
1943     {
1944       lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
1945       if (options & __WCLONE)
1946         lp->cloned = 1;
1947
1948       gdb_assert (WIFSTOPPED (status)
1949                   && WSTOPSIG (status) == SIGSTOP);
1950       lp->signalled = 1;
1951
1952       if (!in_thread_list (inferior_ptid))
1953         {
1954           inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
1955                                      GET_PID (inferior_ptid));
1956           add_thread (inferior_ptid);
1957         }
1958
1959       add_thread (lp->ptid);
1960     }
1961
1962   /* Save the trap's siginfo in case we need it later.  */
1963   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
1964     save_siginfo (lp);
1965
1966   /* Handle GNU/Linux's extended waitstatus for trace events.  */
1967   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1968     {
1969       if (debug_linux_nat)
1970         fprintf_unfiltered (gdb_stdlog,
1971                             "LLW: Handling extended status 0x%06x\n",
1972                             status);
1973       if (linux_handle_extended_wait (lp, status, 0))
1974         return NULL;
1975     }
1976
1977   /* Check if the thread has exited.  */
1978   if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
1979     {
1980       /* If this is the main thread, we must stop all threads and
1981          verify if they are still alive.  This is because in the nptl
1982          thread model, there is no signal issued for exiting LWPs
1983          other than the main thread.  We only get the main thread exit
1984          signal once all child threads have already exited.  If we
1985          stop all the threads and use the stop_wait_callback to check
1986          if they have exited we can determine whether this signal
1987          should be ignored or whether it means the end of the debugged
1988          application, regardless of which threading model is being
1989          used.  */
1990       if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
1991         {
1992           lp->stopped = 1;
1993           iterate_over_lwps (stop_and_resume_callback, NULL);
1994         }
1995
1996       if (debug_linux_nat)
1997         fprintf_unfiltered (gdb_stdlog,
1998                             "LLW: %s exited.\n",
1999                             target_pid_to_str (lp->ptid));
2000
2001       exit_lwp (lp);
2002
2003       /* If there is at least one more LWP, then the exit signal was
2004          not the end of the debugged application and should be
2005          ignored.  */
2006       if (num_lwps > 0)
2007         {
2008           /* Make sure there is at least one thread running.  */
2009           gdb_assert (iterate_over_lwps (running_callback, NULL));
2010
2011           /* Discard the event.  */
2012           return NULL;
2013         }
2014     }
2015
2016   /* Check if the current LWP has previously exited.  In the nptl
2017      thread model, LWPs other than the main thread do not issue
2018      signals when they exit so we must check whenever the thread has
2019      stopped.  A similar check is made in stop_wait_callback().  */
2020   if (num_lwps > 1 && !linux_nat_thread_alive (lp->ptid))
2021     {
2022       if (debug_linux_nat)
2023         fprintf_unfiltered (gdb_stdlog,
2024                             "LLW: %s exited.\n",
2025                             target_pid_to_str (lp->ptid));
2026
2027       exit_lwp (lp);
2028
2029       /* Make sure there is at least one thread running.  */
2030       gdb_assert (iterate_over_lwps (running_callback, NULL));
2031
2032       /* Discard the event.  */
2033       return NULL;
2034     }
2035
2036   /* Make sure we don't report a SIGSTOP that we sent ourselves in
2037      an attempt to stop an LWP.  */
2038   if (lp->signalled
2039       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2040     {
2041       if (debug_linux_nat)
2042         fprintf_unfiltered (gdb_stdlog,
2043                             "LLW: Delayed SIGSTOP caught for %s.\n",
2044                             target_pid_to_str (lp->ptid));
2045
2046       /* This is a delayed SIGSTOP.  */
2047       lp->signalled = 0;
2048
2049       registers_changed ();
2050
2051       linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2052                             lp->step, TARGET_SIGNAL_0);
2053       if (debug_linux_nat)
2054         fprintf_unfiltered (gdb_stdlog,
2055                             "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
2056                             lp->step ?
2057                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2058                             target_pid_to_str (lp->ptid));
2059
2060       lp->stopped = 0;
2061       gdb_assert (lp->resumed);
2062
2063       /* Discard the event.  */
2064       return NULL;
2065     }
2066
2067   /* An interesting event.  */
2068   gdb_assert (lp);
2069   return lp;
2070 }
2071
2072 static ptid_t
2073 linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
2074 {
2075   struct lwp_info *lp = NULL;
2076   int options = 0;
2077   int status = 0;
2078   pid_t pid = PIDGET (ptid);
2079   sigset_t flush_mask;
2080
2081   /* The first time we get here after starting a new inferior, we may
2082      not have added it to the LWP list yet - this is the earliest
2083      moment at which we know its PID.  */
2084   if (num_lwps == 0)
2085     {
2086       gdb_assert (!is_lwp (inferior_ptid));
2087
2088       inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2089                                  GET_PID (inferior_ptid));
2090       lp = add_lwp (inferior_ptid);
2091       lp->resumed = 1;
2092     }
2093
2094   sigemptyset (&flush_mask);
2095
2096   /* Make sure SIGCHLD is blocked.  */
2097   if (!sigismember (&blocked_mask, SIGCHLD))
2098     {
2099       sigaddset (&blocked_mask, SIGCHLD);
2100       sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
2101     }
2102
2103 retry:
2104
2105   /* Make sure there is at least one LWP that has been resumed.  */
2106   gdb_assert (iterate_over_lwps (resumed_callback, NULL));
2107
2108   /* First check if there is a LWP with a wait status pending.  */
2109   if (pid == -1)
2110     {
2111       /* Any LWP that's been resumed will do.  */
2112       lp = iterate_over_lwps (status_callback, NULL);
2113       if (lp)
2114         {
2115           status = lp->status;
2116           lp->status = 0;
2117
2118           if (debug_linux_nat && status)
2119             fprintf_unfiltered (gdb_stdlog,
2120                                 "LLW: Using pending wait status %s for %s.\n",
2121                                 status_to_str (status),
2122                                 target_pid_to_str (lp->ptid));
2123         }
2124
2125       /* But if we don't fine one, we'll have to wait, and check both
2126          cloned and uncloned processes.  We start with the cloned
2127          processes.  */
2128       options = __WCLONE | WNOHANG;
2129     }
2130   else if (is_lwp (ptid))
2131     {
2132       if (debug_linux_nat)
2133         fprintf_unfiltered (gdb_stdlog,
2134                             "LLW: Waiting for specific LWP %s.\n",
2135                             target_pid_to_str (ptid));
2136
2137       /* We have a specific LWP to check.  */
2138       lp = find_lwp_pid (ptid);
2139       gdb_assert (lp);
2140       status = lp->status;
2141       lp->status = 0;
2142
2143       if (debug_linux_nat && status)
2144         fprintf_unfiltered (gdb_stdlog,
2145                             "LLW: Using pending wait status %s for %s.\n",
2146                             status_to_str (status),
2147                             target_pid_to_str (lp->ptid));
2148
2149       /* If we have to wait, take into account whether PID is a cloned
2150          process or not.  And we have to convert it to something that
2151          the layer beneath us can understand.  */
2152       options = lp->cloned ? __WCLONE : 0;
2153       pid = GET_LWP (ptid);
2154     }
2155
2156   if (status && lp->signalled)
2157     {
2158       /* A pending SIGSTOP may interfere with the normal stream of
2159          events.  In a typical case where interference is a problem,
2160          we have a SIGSTOP signal pending for LWP A while
2161          single-stepping it, encounter an event in LWP B, and take the
2162          pending SIGSTOP while trying to stop LWP A.  After processing
2163          the event in LWP B, LWP A is continued, and we'll never see
2164          the SIGTRAP associated with the last time we were
2165          single-stepping LWP A.  */
2166
2167       /* Resume the thread.  It should halt immediately returning the
2168          pending SIGSTOP.  */
2169       registers_changed ();
2170       linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2171                             lp->step, TARGET_SIGNAL_0);
2172       if (debug_linux_nat)
2173         fprintf_unfiltered (gdb_stdlog,
2174                             "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
2175                             lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2176                             target_pid_to_str (lp->ptid));
2177       lp->stopped = 0;
2178       gdb_assert (lp->resumed);
2179
2180       /* This should catch the pending SIGSTOP.  */
2181       stop_wait_callback (lp, NULL);
2182     }
2183
2184   set_sigint_trap ();           /* Causes SIGINT to be passed on to the
2185                                    attached process. */
2186   set_sigio_trap ();
2187
2188   while (status == 0)
2189     {
2190       pid_t lwpid;
2191
2192       lwpid = my_waitpid (pid, &status, options);
2193       if (lwpid > 0)
2194         {
2195           gdb_assert (pid == -1 || lwpid == pid);
2196
2197           if (debug_linux_nat)
2198             {
2199               fprintf_unfiltered (gdb_stdlog,
2200                                   "LLW: waitpid %ld received %s\n",
2201                                   (long) lwpid, status_to_str (status));
2202             }
2203
2204           lp = linux_nat_filter_event (lwpid, status, options);
2205           if (!lp)
2206             {
2207               /* A discarded event.  */
2208               status = 0;
2209               continue;
2210             }
2211
2212           break;
2213         }
2214
2215       if (pid == -1)
2216         {
2217           /* Alternate between checking cloned and uncloned processes.  */
2218           options ^= __WCLONE;
2219
2220           /* And suspend every time we have checked both.  */
2221           if (options & __WCLONE)
2222             sigsuspend (&suspend_mask);
2223         }
2224
2225       /* We shouldn't end up here unless we want to try again.  */
2226       gdb_assert (status == 0);
2227     }
2228
2229   clear_sigio_trap ();
2230   clear_sigint_trap ();
2231
2232   gdb_assert (lp);
2233
2234   /* Don't report signals that GDB isn't interested in, such as
2235      signals that are neither printed nor stopped upon.  Stopping all
2236      threads can be a bit time-consuming so if we want decent
2237      performance with heavily multi-threaded programs, especially when
2238      they're using a high frequency timer, we'd better avoid it if we
2239      can.  */
2240
2241   if (WIFSTOPPED (status))
2242     {
2243       int signo = target_signal_from_host (WSTOPSIG (status));
2244
2245       /* If we get a signal while single-stepping, we may need special
2246          care, e.g. to skip the signal handler.  Defer to common code.  */
2247       if (!lp->step
2248           && signal_stop_state (signo) == 0
2249           && signal_print_state (signo) == 0
2250           && signal_pass_state (signo) == 1)
2251         {
2252           /* FIMXE: kettenis/2001-06-06: Should we resume all threads
2253              here?  It is not clear we should.  GDB may not expect
2254              other threads to run.  On the other hand, not resuming
2255              newly attached threads may cause an unwanted delay in
2256              getting them running.  */
2257           registers_changed ();
2258           linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2259                                 lp->step, signo);
2260           if (debug_linux_nat)
2261             fprintf_unfiltered (gdb_stdlog,
2262                                 "LLW: %s %s, %s (preempt 'handle')\n",
2263                                 lp->step ?
2264                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2265                                 target_pid_to_str (lp->ptid),
2266                                 signo ? strsignal (signo) : "0");
2267           lp->stopped = 0;
2268           status = 0;
2269           goto retry;
2270         }
2271
2272       if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
2273         {
2274           /* If ^C/BREAK is typed at the tty/console, SIGINT gets
2275              forwarded to the entire process group, that is, all LWP's
2276              will receive it.  Since we only want to report it once,
2277              we try to flush it from all LWPs except this one.  */
2278           sigaddset (&flush_mask, SIGINT);
2279         }
2280     }
2281
2282   /* This LWP is stopped now.  */
2283   lp->stopped = 1;
2284
2285   if (debug_linux_nat)
2286     fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
2287                         status_to_str (status), target_pid_to_str (lp->ptid));
2288
2289   /* Now stop all other LWP's ...  */
2290   iterate_over_lwps (stop_callback, NULL);
2291
2292   /* ... and wait until all of them have reported back that they're no
2293      longer running.  */
2294   iterate_over_lwps (stop_wait_callback, &flush_mask);
2295   iterate_over_lwps (flush_callback, &flush_mask);
2296
2297   /* If we're not waiting for a specific LWP, choose an event LWP from
2298      among those that have had events.  Giving equal priority to all
2299      LWPs that have had events helps prevent starvation.  */
2300   if (pid == -1)
2301     select_event_lwp (&lp, &status);
2302
2303   /* Now that we've selected our final event LWP, cancel any
2304      breakpoints in other LWPs that have hit a GDB breakpoint.  See
2305      the comment in cancel_breakpoints_callback to find out why.  */
2306   iterate_over_lwps (cancel_breakpoints_callback, lp);
2307
2308   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2309     {
2310       trap_ptid = lp->ptid;
2311       if (debug_linux_nat)
2312         fprintf_unfiltered (gdb_stdlog,
2313                             "LLW: trap_ptid is %s.\n",
2314                             target_pid_to_str (trap_ptid));
2315     }
2316   else
2317     trap_ptid = null_ptid;
2318
2319   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2320     {
2321       *ourstatus = lp->waitstatus;
2322       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
2323     }
2324   else
2325     store_waitstatus (ourstatus, status);
2326
2327   return lp->ptid;
2328 }
2329
2330 static int
2331 kill_callback (struct lwp_info *lp, void *data)
2332 {
2333   errno = 0;
2334   ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
2335   if (debug_linux_nat)
2336     fprintf_unfiltered (gdb_stdlog,
2337                         "KC:  PTRACE_KILL %s, 0, 0 (%s)\n",
2338                         target_pid_to_str (lp->ptid),
2339                         errno ? safe_strerror (errno) : "OK");
2340
2341   return 0;
2342 }
2343
2344 static int
2345 kill_wait_callback (struct lwp_info *lp, void *data)
2346 {
2347   pid_t pid;
2348
2349   /* We must make sure that there are no pending events (delayed
2350      SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
2351      program doesn't interfere with any following debugging session.  */
2352
2353   /* For cloned processes we must check both with __WCLONE and
2354      without, since the exit status of a cloned process isn't reported
2355      with __WCLONE.  */
2356   if (lp->cloned)
2357     {
2358       do
2359         {
2360           pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
2361           if (pid != (pid_t) -1)
2362             {
2363               if (debug_linux_nat)
2364                 fprintf_unfiltered (gdb_stdlog,
2365                                     "KWC: wait %s received unknown.\n",
2366                                     target_pid_to_str (lp->ptid));
2367               /* The Linux kernel sometimes fails to kill a thread
2368                  completely after PTRACE_KILL; that goes from the stop
2369                  point in do_fork out to the one in
2370                  get_signal_to_deliever and waits again.  So kill it
2371                  again.  */
2372               kill_callback (lp, NULL);
2373             }
2374         }
2375       while (pid == GET_LWP (lp->ptid));
2376
2377       gdb_assert (pid == -1 && errno == ECHILD);
2378     }
2379
2380   do
2381     {
2382       pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
2383       if (pid != (pid_t) -1)
2384         {
2385           if (debug_linux_nat)
2386             fprintf_unfiltered (gdb_stdlog,
2387                                 "KWC: wait %s received unk.\n",
2388                                 target_pid_to_str (lp->ptid));
2389           /* See the call to kill_callback above.  */
2390           kill_callback (lp, NULL);
2391         }
2392     }
2393   while (pid == GET_LWP (lp->ptid));
2394
2395   gdb_assert (pid == -1 && errno == ECHILD);
2396   return 0;
2397 }
2398
2399 static void
2400 linux_nat_kill (void)
2401 {
2402   struct target_waitstatus last;
2403   ptid_t last_ptid;
2404   int status;
2405
2406   /* If we're stopped while forking and we haven't followed yet,
2407      kill the other task.  We need to do this first because the
2408      parent will be sleeping if this is a vfork.  */
2409
2410   get_last_target_status (&last_ptid, &last);
2411
2412   if (last.kind == TARGET_WAITKIND_FORKED
2413       || last.kind == TARGET_WAITKIND_VFORKED)
2414     {
2415       ptrace (PT_KILL, last.value.related_pid, 0, 0);
2416       wait (&status);
2417     }
2418
2419   if (forks_exist_p ())
2420     linux_fork_killall ();
2421   else
2422     {
2423       /* Kill all LWP's ...  */
2424       iterate_over_lwps (kill_callback, NULL);
2425
2426       /* ... and wait until we've flushed all events.  */
2427       iterate_over_lwps (kill_wait_callback, NULL);
2428     }
2429
2430   target_mourn_inferior ();
2431 }
2432
2433 static void
2434 linux_nat_mourn_inferior (void)
2435 {
2436   trap_ptid = null_ptid;
2437
2438   /* Destroy LWP info; it's no longer valid.  */
2439   init_lwp_list ();
2440
2441   /* Restore the original signal mask.  */
2442   sigprocmask (SIG_SETMASK, &normal_mask, NULL);
2443   sigemptyset (&blocked_mask);
2444
2445   if (! forks_exist_p ())
2446     /* Normal case, no other forks available.  */
2447     linux_ops->to_mourn_inferior ();
2448   else
2449     /* Multi-fork case.  The current inferior_ptid has exited, but
2450        there are other viable forks to debug.  Delete the exiting
2451        one and context-switch to the first available.  */
2452     linux_fork_mourn_inferior ();
2453 }
2454
2455 static LONGEST
2456 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
2457                         const char *annex, gdb_byte *readbuf,
2458                         const gdb_byte *writebuf,
2459                         ULONGEST offset, LONGEST len)
2460 {
2461   struct cleanup *old_chain = save_inferior_ptid ();
2462   LONGEST xfer;
2463
2464   if (is_lwp (inferior_ptid))
2465     inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
2466
2467   xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
2468                                      offset, len);
2469
2470   do_cleanups (old_chain);
2471   return xfer;
2472 }
2473
2474 static int
2475 linux_nat_thread_alive (ptid_t ptid)
2476 {
2477   gdb_assert (is_lwp (ptid));
2478
2479   errno = 0;
2480   ptrace (PTRACE_PEEKUSER, GET_LWP (ptid), 0, 0);
2481   if (debug_linux_nat)
2482     fprintf_unfiltered (gdb_stdlog,
2483                         "LLTA: PTRACE_PEEKUSER %s, 0, 0 (%s)\n",
2484                         target_pid_to_str (ptid),
2485                         errno ? safe_strerror (errno) : "OK");
2486
2487   /* Not every Linux kernel implements PTRACE_PEEKUSER.  But we can
2488      handle that case gracefully since ptrace will first do a lookup
2489      for the process based upon the passed-in pid.  If that fails we
2490      will get either -ESRCH or -EPERM, otherwise the child exists and
2491      is alive.  */
2492   if (errno == ESRCH || errno == EPERM)
2493     return 0;
2494
2495   return 1;
2496 }
2497
2498 static char *
2499 linux_nat_pid_to_str (ptid_t ptid)
2500 {
2501   static char buf[64];
2502
2503   if (lwp_list && lwp_list->next && is_lwp (ptid))
2504     {
2505       snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
2506       return buf;
2507     }
2508
2509   return normal_pid_to_str (ptid);
2510 }
2511
2512 static void
2513 sigchld_handler (int signo)
2514 {
2515   /* Do nothing.  The only reason for this handler is that it allows
2516      us to use sigsuspend in linux_nat_wait above to wait for the
2517      arrival of a SIGCHLD.  */
2518 }
2519
2520 /* Accepts an integer PID; Returns a string representing a file that
2521    can be opened to get the symbols for the child process.  */
2522
2523 static char *
2524 linux_child_pid_to_exec_file (int pid)
2525 {
2526   char *name1, *name2;
2527
2528   name1 = xmalloc (MAXPATHLEN);
2529   name2 = xmalloc (MAXPATHLEN);
2530   make_cleanup (xfree, name1);
2531   make_cleanup (xfree, name2);
2532   memset (name2, 0, MAXPATHLEN);
2533
2534   sprintf (name1, "/proc/%d/exe", pid);
2535   if (readlink (name1, name2, MAXPATHLEN) > 0)
2536     return name2;
2537   else
2538     return name1;
2539 }
2540
2541 /* Service function for corefiles and info proc.  */
2542
2543 static int
2544 read_mapping (FILE *mapfile,
2545               long long *addr,
2546               long long *endaddr,
2547               char *permissions,
2548               long long *offset,
2549               char *device, long long *inode, char *filename)
2550 {
2551   int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
2552                     addr, endaddr, permissions, offset, device, inode);
2553
2554   filename[0] = '\0';
2555   if (ret > 0 && ret != EOF)
2556     {
2557       /* Eat everything up to EOL for the filename.  This will prevent
2558          weird filenames (such as one with embedded whitespace) from
2559          confusing this code.  It also makes this code more robust in
2560          respect to annotations the kernel may add after the filename.
2561
2562          Note the filename is used for informational purposes
2563          only.  */
2564       ret += fscanf (mapfile, "%[^\n]\n", filename);
2565     }
2566
2567   return (ret != 0 && ret != EOF);
2568 }
2569
2570 /* Fills the "to_find_memory_regions" target vector.  Lists the memory
2571    regions in the inferior for a corefile.  */
2572
2573 static int
2574 linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
2575                                             unsigned long,
2576                                             int, int, int, void *), void *obfd)
2577 {
2578   long long pid = PIDGET (inferior_ptid);
2579   char mapsfilename[MAXPATHLEN];
2580   FILE *mapsfile;
2581   long long addr, endaddr, size, offset, inode;
2582   char permissions[8], device[8], filename[MAXPATHLEN];
2583   int read, write, exec;
2584   int ret;
2585
2586   /* Compose the filename for the /proc memory map, and open it.  */
2587   sprintf (mapsfilename, "/proc/%lld/maps", pid);
2588   if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
2589     error (_("Could not open %s."), mapsfilename);
2590
2591   if (info_verbose)
2592     fprintf_filtered (gdb_stdout,
2593                       "Reading memory regions from %s\n", mapsfilename);
2594
2595   /* Now iterate until end-of-file.  */
2596   while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
2597                        &offset, &device[0], &inode, &filename[0]))
2598     {
2599       size = endaddr - addr;
2600
2601       /* Get the segment's permissions.  */
2602       read = (strchr (permissions, 'r') != 0);
2603       write = (strchr (permissions, 'w') != 0);
2604       exec = (strchr (permissions, 'x') != 0);
2605
2606       if (info_verbose)
2607         {
2608           fprintf_filtered (gdb_stdout,
2609                             "Save segment, %lld bytes at 0x%s (%c%c%c)",
2610                             size, paddr_nz (addr),
2611                             read ? 'r' : ' ',
2612                             write ? 'w' : ' ', exec ? 'x' : ' ');
2613           if (filename[0])
2614             fprintf_filtered (gdb_stdout, " for %s", filename);
2615           fprintf_filtered (gdb_stdout, "\n");
2616         }
2617
2618       /* Invoke the callback function to create the corefile
2619          segment.  */
2620       func (addr, size, read, write, exec, obfd);
2621     }
2622   fclose (mapsfile);
2623   return 0;
2624 }
2625
2626 /* Records the thread's register state for the corefile note
2627    section.  */
2628
2629 static char *
2630 linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
2631                                char *note_data, int *note_size)
2632 {
2633   gdb_gregset_t gregs;
2634   gdb_fpregset_t fpregs;
2635 #ifdef FILL_FPXREGSET
2636   gdb_fpxregset_t fpxregs;
2637 #endif
2638   unsigned long lwp = ptid_get_lwp (ptid);
2639   struct regcache *regcache = get_thread_regcache (ptid);
2640   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2641   const struct regset *regset;
2642   int core_regset_p;
2643   struct cleanup *old_chain;
2644
2645   old_chain = save_inferior_ptid ();
2646   inferior_ptid = ptid;
2647   target_fetch_registers (regcache, -1);
2648   do_cleanups (old_chain);
2649
2650   core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
2651   if (core_regset_p
2652       && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
2653                                                      sizeof (gregs))) != NULL
2654       && regset->collect_regset != NULL)
2655     regset->collect_regset (regset, regcache, -1,
2656                             &gregs, sizeof (gregs));
2657   else
2658     fill_gregset (regcache, &gregs, -1);
2659
2660   note_data = (char *) elfcore_write_prstatus (obfd,
2661                                                note_data,
2662                                                note_size,
2663                                                lwp,
2664                                                stop_signal, &gregs);
2665
2666   if (core_regset_p
2667       && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
2668                                                      sizeof (fpregs))) != NULL
2669       && regset->collect_regset != NULL)
2670     regset->collect_regset (regset, regcache, -1,
2671                             &fpregs, sizeof (fpregs));
2672   else
2673     fill_fpregset (regcache, &fpregs, -1);
2674
2675   note_data = (char *) elfcore_write_prfpreg (obfd,
2676                                               note_data,
2677                                               note_size,
2678                                               &fpregs, sizeof (fpregs));
2679
2680 #ifdef FILL_FPXREGSET
2681   if (core_regset_p
2682       && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg-xfp",
2683                                                      sizeof (fpxregs))) != NULL
2684       && regset->collect_regset != NULL)
2685     regset->collect_regset (regset, regcache, -1,
2686                             &fpxregs, sizeof (fpxregs));
2687   else
2688     fill_fpxregset (regcache, &fpxregs, -1);
2689
2690   note_data = (char *) elfcore_write_prxfpreg (obfd,
2691                                                note_data,
2692                                                note_size,
2693                                                &fpxregs, sizeof (fpxregs));
2694 #endif
2695   return note_data;
2696 }
2697
2698 struct linux_nat_corefile_thread_data
2699 {
2700   bfd *obfd;
2701   char *note_data;
2702   int *note_size;
2703   int num_notes;
2704 };
2705
2706 /* Called by gdbthread.c once per thread.  Records the thread's
2707    register state for the corefile note section.  */
2708
2709 static int
2710 linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
2711 {
2712   struct linux_nat_corefile_thread_data *args = data;
2713
2714   args->note_data = linux_nat_do_thread_registers (args->obfd,
2715                                                    ti->ptid,
2716                                                    args->note_data,
2717                                                    args->note_size);
2718   args->num_notes++;
2719
2720   return 0;
2721 }
2722
2723 /* Records the register state for the corefile note section.  */
2724
2725 static char *
2726 linux_nat_do_registers (bfd *obfd, ptid_t ptid,
2727                         char *note_data, int *note_size)
2728 {
2729   return linux_nat_do_thread_registers (obfd,
2730                                         ptid_build (ptid_get_pid (inferior_ptid),
2731                                                     ptid_get_pid (inferior_ptid),
2732                                                     0),
2733                                         note_data, note_size);
2734 }
2735
2736 /* Fills the "to_make_corefile_note" target vector.  Builds the note
2737    section for a corefile, and returns it in a malloc buffer.  */
2738
2739 static char *
2740 linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
2741 {
2742   struct linux_nat_corefile_thread_data thread_args;
2743   struct cleanup *old_chain;
2744   /* The variable size must be >= sizeof (prpsinfo_t.pr_fname).  */
2745   char fname[16] = { '\0' };
2746   /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs).  */
2747   char psargs[80] = { '\0' };
2748   char *note_data = NULL;
2749   ptid_t current_ptid = inferior_ptid;
2750   gdb_byte *auxv;
2751   int auxv_len;
2752
2753   if (get_exec_file (0))
2754     {
2755       strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
2756       strncpy (psargs, get_exec_file (0), sizeof (psargs));
2757       if (get_inferior_args ())
2758         {
2759           char *string_end;
2760           char *psargs_end = psargs + sizeof (psargs);
2761
2762           /* linux_elfcore_write_prpsinfo () handles zero unterminated
2763              strings fine.  */
2764           string_end = memchr (psargs, 0, sizeof (psargs));
2765           if (string_end != NULL)
2766             {
2767               *string_end++ = ' ';
2768               strncpy (string_end, get_inferior_args (),
2769                        psargs_end - string_end);
2770             }
2771         }
2772       note_data = (char *) elfcore_write_prpsinfo (obfd,
2773                                                    note_data,
2774                                                    note_size, fname, psargs);
2775     }
2776
2777   /* Dump information for threads.  */
2778   thread_args.obfd = obfd;
2779   thread_args.note_data = note_data;
2780   thread_args.note_size = note_size;
2781   thread_args.num_notes = 0;
2782   iterate_over_lwps (linux_nat_corefile_thread_callback, &thread_args);
2783   if (thread_args.num_notes == 0)
2784     {
2785       /* iterate_over_threads didn't come up with any threads; just
2786          use inferior_ptid.  */
2787       note_data = linux_nat_do_registers (obfd, inferior_ptid,
2788                                           note_data, note_size);
2789     }
2790   else
2791     {
2792       note_data = thread_args.note_data;
2793     }
2794
2795   auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
2796                                 NULL, &auxv);
2797   if (auxv_len > 0)
2798     {
2799       note_data = elfcore_write_note (obfd, note_data, note_size,
2800                                       "CORE", NT_AUXV, auxv, auxv_len);
2801       xfree (auxv);
2802     }
2803
2804   make_cleanup (xfree, note_data);
2805   return note_data;
2806 }
2807
2808 /* Implement the "info proc" command.  */
2809
2810 static void
2811 linux_nat_info_proc_cmd (char *args, int from_tty)
2812 {
2813   long long pid = PIDGET (inferior_ptid);
2814   FILE *procfile;
2815   char **argv = NULL;
2816   char buffer[MAXPATHLEN];
2817   char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
2818   int cmdline_f = 1;
2819   int cwd_f = 1;
2820   int exe_f = 1;
2821   int mappings_f = 0;
2822   int environ_f = 0;
2823   int status_f = 0;
2824   int stat_f = 0;
2825   int all = 0;
2826   struct stat dummy;
2827
2828   if (args)
2829     {
2830       /* Break up 'args' into an argv array.  */
2831       if ((argv = buildargv (args)) == NULL)
2832         nomem (0);
2833       else
2834         make_cleanup_freeargv (argv);
2835     }
2836   while (argv != NULL && *argv != NULL)
2837     {
2838       if (isdigit (argv[0][0]))
2839         {
2840           pid = strtoul (argv[0], NULL, 10);
2841         }
2842       else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
2843         {
2844           mappings_f = 1;
2845         }
2846       else if (strcmp (argv[0], "status") == 0)
2847         {
2848           status_f = 1;
2849         }
2850       else if (strcmp (argv[0], "stat") == 0)
2851         {
2852           stat_f = 1;
2853         }
2854       else if (strcmp (argv[0], "cmd") == 0)
2855         {
2856           cmdline_f = 1;
2857         }
2858       else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
2859         {
2860           exe_f = 1;
2861         }
2862       else if (strcmp (argv[0], "cwd") == 0)
2863         {
2864           cwd_f = 1;
2865         }
2866       else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
2867         {
2868           all = 1;
2869         }
2870       else
2871         {
2872           /* [...] (future options here) */
2873         }
2874       argv++;
2875     }
2876   if (pid == 0)
2877     error (_("No current process: you must name one."));
2878
2879   sprintf (fname1, "/proc/%lld", pid);
2880   if (stat (fname1, &dummy) != 0)
2881     error (_("No /proc directory: '%s'"), fname1);
2882
2883   printf_filtered (_("process %lld\n"), pid);
2884   if (cmdline_f || all)
2885     {
2886       sprintf (fname1, "/proc/%lld/cmdline", pid);
2887       if ((procfile = fopen (fname1, "r")) != NULL)
2888         {
2889           fgets (buffer, sizeof (buffer), procfile);
2890           printf_filtered ("cmdline = '%s'\n", buffer);
2891           fclose (procfile);
2892         }
2893       else
2894         warning (_("unable to open /proc file '%s'"), fname1);
2895     }
2896   if (cwd_f || all)
2897     {
2898       sprintf (fname1, "/proc/%lld/cwd", pid);
2899       memset (fname2, 0, sizeof (fname2));
2900       if (readlink (fname1, fname2, sizeof (fname2)) > 0)
2901         printf_filtered ("cwd = '%s'\n", fname2);
2902       else
2903         warning (_("unable to read link '%s'"), fname1);
2904     }
2905   if (exe_f || all)
2906     {
2907       sprintf (fname1, "/proc/%lld/exe", pid);
2908       memset (fname2, 0, sizeof (fname2));
2909       if (readlink (fname1, fname2, sizeof (fname2)) > 0)
2910         printf_filtered ("exe = '%s'\n", fname2);
2911       else
2912         warning (_("unable to read link '%s'"), fname1);
2913     }
2914   if (mappings_f || all)
2915     {
2916       sprintf (fname1, "/proc/%lld/maps", pid);
2917       if ((procfile = fopen (fname1, "r")) != NULL)
2918         {
2919           long long addr, endaddr, size, offset, inode;
2920           char permissions[8], device[8], filename[MAXPATHLEN];
2921
2922           printf_filtered (_("Mapped address spaces:\n\n"));
2923           if (gdbarch_addr_bit (current_gdbarch) == 32)
2924             {
2925               printf_filtered ("\t%10s %10s %10s %10s %7s\n",
2926                            "Start Addr",
2927                            "  End Addr",
2928                            "      Size", "    Offset", "objfile");
2929             }
2930           else
2931             {
2932               printf_filtered ("  %18s %18s %10s %10s %7s\n",
2933                            "Start Addr",
2934                            "  End Addr",
2935                            "      Size", "    Offset", "objfile");
2936             }
2937
2938           while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
2939                                &offset, &device[0], &inode, &filename[0]))
2940             {
2941               size = endaddr - addr;
2942
2943               /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
2944                  calls here (and possibly above) should be abstracted
2945                  out into their own functions?  Andrew suggests using
2946                  a generic local_address_string instead to print out
2947                  the addresses; that makes sense to me, too.  */
2948
2949               if (gdbarch_addr_bit (current_gdbarch) == 32)
2950                 {
2951                   printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
2952                                (unsigned long) addr,    /* FIXME: pr_addr */
2953                                (unsigned long) endaddr,
2954                                (int) size,
2955                                (unsigned int) offset,
2956                                filename[0] ? filename : "");
2957                 }
2958               else
2959                 {
2960                   printf_filtered ("  %#18lx %#18lx %#10x %#10x %7s\n",
2961                                (unsigned long) addr,    /* FIXME: pr_addr */
2962                                (unsigned long) endaddr,
2963                                (int) size,
2964                                (unsigned int) offset,
2965                                filename[0] ? filename : "");
2966                 }
2967             }
2968
2969           fclose (procfile);
2970         }
2971       else
2972         warning (_("unable to open /proc file '%s'"), fname1);
2973     }
2974   if (status_f || all)
2975     {
2976       sprintf (fname1, "/proc/%lld/status", pid);
2977       if ((procfile = fopen (fname1, "r")) != NULL)
2978         {
2979           while (fgets (buffer, sizeof (buffer), procfile) != NULL)
2980             puts_filtered (buffer);
2981           fclose (procfile);
2982         }
2983       else
2984         warning (_("unable to open /proc file '%s'"), fname1);
2985     }
2986   if (stat_f || all)
2987     {
2988       sprintf (fname1, "/proc/%lld/stat", pid);
2989       if ((procfile = fopen (fname1, "r")) != NULL)
2990         {
2991           int itmp;
2992           char ctmp;
2993           long ltmp;
2994
2995           if (fscanf (procfile, "%d ", &itmp) > 0)
2996             printf_filtered (_("Process: %d\n"), itmp);
2997           if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
2998             printf_filtered (_("Exec file: %s\n"), buffer);
2999           if (fscanf (procfile, "%c ", &ctmp) > 0)
3000             printf_filtered (_("State: %c\n"), ctmp);
3001           if (fscanf (procfile, "%d ", &itmp) > 0)
3002             printf_filtered (_("Parent process: %d\n"), itmp);
3003           if (fscanf (procfile, "%d ", &itmp) > 0)
3004             printf_filtered (_("Process group: %d\n"), itmp);
3005           if (fscanf (procfile, "%d ", &itmp) > 0)
3006             printf_filtered (_("Session id: %d\n"), itmp);
3007           if (fscanf (procfile, "%d ", &itmp) > 0)
3008             printf_filtered (_("TTY: %d\n"), itmp);
3009           if (fscanf (procfile, "%d ", &itmp) > 0)
3010             printf_filtered (_("TTY owner process group: %d\n"), itmp);
3011           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3012             printf_filtered (_("Flags: 0x%lx\n"), ltmp);
3013           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3014             printf_filtered (_("Minor faults (no memory page): %lu\n"),
3015                              (unsigned long) ltmp);
3016           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3017             printf_filtered (_("Minor faults, children: %lu\n"),
3018                              (unsigned long) ltmp);
3019           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3020             printf_filtered (_("Major faults (memory page faults): %lu\n"),
3021                              (unsigned long) ltmp);
3022           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3023             printf_filtered (_("Major faults, children: %lu\n"),
3024                              (unsigned long) ltmp);
3025           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3026             printf_filtered (_("utime: %ld\n"), ltmp);
3027           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3028             printf_filtered (_("stime: %ld\n"), ltmp);
3029           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3030             printf_filtered (_("utime, children: %ld\n"), ltmp);
3031           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3032             printf_filtered (_("stime, children: %ld\n"), ltmp);
3033           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3034             printf_filtered (_("jiffies remaining in current time slice: %ld\n"),
3035                              ltmp);
3036           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3037             printf_filtered (_("'nice' value: %ld\n"), ltmp);
3038           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3039             printf_filtered (_("jiffies until next timeout: %lu\n"),
3040                              (unsigned long) ltmp);
3041           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3042             printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
3043                              (unsigned long) ltmp);
3044           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3045             printf_filtered (_("start time (jiffies since system boot): %ld\n"),
3046                              ltmp);
3047           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3048             printf_filtered (_("Virtual memory size: %lu\n"),
3049                              (unsigned long) ltmp);
3050           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3051             printf_filtered (_("Resident set size: %lu\n"), (unsigned long) ltmp);
3052           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3053             printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
3054           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3055             printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
3056           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3057             printf_filtered (_("End of text: 0x%lx\n"), ltmp);
3058           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3059             printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
3060 #if 0                           /* Don't know how architecture-dependent the rest is...
3061                                    Anyway the signal bitmap info is available from "status".  */
3062           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch? */
3063             printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
3064           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch? */
3065             printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
3066           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3067             printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
3068           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3069             printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
3070           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3071             printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
3072           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3073             printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
3074           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch? */
3075             printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
3076 #endif
3077           fclose (procfile);
3078         }
3079       else
3080         warning (_("unable to open /proc file '%s'"), fname1);
3081     }
3082 }
3083
3084 /* Implement the to_xfer_partial interface for memory reads using the /proc
3085    filesystem.  Because we can use a single read() call for /proc, this
3086    can be much more efficient than banging away at PTRACE_PEEKTEXT,
3087    but it doesn't support writes.  */
3088
3089 static LONGEST
3090 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3091                          const char *annex, gdb_byte *readbuf,
3092                          const gdb_byte *writebuf,
3093                          ULONGEST offset, LONGEST len)
3094 {
3095   LONGEST ret;
3096   int fd;
3097   char filename[64];
3098
3099   if (object != TARGET_OBJECT_MEMORY || !readbuf)
3100     return 0;
3101
3102   /* Don't bother for one word.  */
3103   if (len < 3 * sizeof (long))
3104     return 0;
3105
3106   /* We could keep this file open and cache it - possibly one per
3107      thread.  That requires some juggling, but is even faster.  */
3108   sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
3109   fd = open (filename, O_RDONLY | O_LARGEFILE);
3110   if (fd == -1)
3111     return 0;
3112
3113   /* If pread64 is available, use it.  It's faster if the kernel
3114      supports it (only one syscall), and it's 64-bit safe even on
3115      32-bit platforms (for instance, SPARC debugging a SPARC64
3116      application).  */
3117 #ifdef HAVE_PREAD64
3118   if (pread64 (fd, readbuf, len, offset) != len)
3119 #else
3120   if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
3121 #endif
3122     ret = 0;
3123   else
3124     ret = len;
3125
3126   close (fd);
3127   return ret;
3128 }
3129
3130 /* Parse LINE as a signal set and add its set bits to SIGS.  */
3131
3132 static void
3133 add_line_to_sigset (const char *line, sigset_t *sigs)
3134 {
3135   int len = strlen (line) - 1;
3136   const char *p;
3137   int signum;
3138
3139   if (line[len] != '\n')
3140     error (_("Could not parse signal set: %s"), line);
3141
3142   p = line;
3143   signum = len * 4;
3144   while (len-- > 0)
3145     {
3146       int digit;
3147
3148       if (*p >= '0' && *p <= '9')
3149         digit = *p - '0';
3150       else if (*p >= 'a' && *p <= 'f')
3151         digit = *p - 'a' + 10;
3152       else
3153         error (_("Could not parse signal set: %s"), line);
3154
3155       signum -= 4;
3156
3157       if (digit & 1)
3158         sigaddset (sigs, signum + 1);
3159       if (digit & 2)
3160         sigaddset (sigs, signum + 2);
3161       if (digit & 4)
3162         sigaddset (sigs, signum + 3);
3163       if (digit & 8)
3164         sigaddset (sigs, signum + 4);
3165
3166       p++;
3167     }
3168 }
3169
3170 /* Find process PID's pending signals from /proc/pid/status and set
3171    SIGS to match.  */
3172
3173 void
3174 linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored)
3175 {
3176   FILE *procfile;
3177   char buffer[MAXPATHLEN], fname[MAXPATHLEN];
3178   int signum;
3179
3180   sigemptyset (pending);
3181   sigemptyset (blocked);
3182   sigemptyset (ignored);
3183   sprintf (fname, "/proc/%d/status", pid);
3184   procfile = fopen (fname, "r");
3185   if (procfile == NULL)
3186     error (_("Could not open %s"), fname);
3187
3188   while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
3189     {
3190       /* Normal queued signals are on the SigPnd line in the status
3191          file.  However, 2.6 kernels also have a "shared" pending
3192          queue for delivering signals to a thread group, so check for
3193          a ShdPnd line also.
3194
3195          Unfortunately some Red Hat kernels include the shared pending
3196          queue but not the ShdPnd status field.  */
3197
3198       if (strncmp (buffer, "SigPnd:\t", 8) == 0)
3199         add_line_to_sigset (buffer + 8, pending);
3200       else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
3201         add_line_to_sigset (buffer + 8, pending);
3202       else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
3203         add_line_to_sigset (buffer + 8, blocked);
3204       else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
3205         add_line_to_sigset (buffer + 8, ignored);
3206     }
3207
3208   fclose (procfile);
3209 }
3210
3211 static LONGEST
3212 linux_xfer_partial (struct target_ops *ops, enum target_object object,
3213                     const char *annex, gdb_byte *readbuf,
3214                     const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3215 {
3216   LONGEST xfer;
3217
3218   if (object == TARGET_OBJECT_AUXV)
3219     return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
3220                              offset, len);
3221
3222   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
3223                                   offset, len);
3224   if (xfer != 0)
3225     return xfer;
3226
3227   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
3228                              offset, len);
3229 }
3230
3231 /* Create a prototype generic GNU/Linux target.  The client can override
3232    it with local methods.  */
3233
3234 static void
3235 linux_target_install_ops (struct target_ops *t)
3236 {
3237   t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
3238   t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
3239   t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
3240   t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
3241   t->to_post_startup_inferior = linux_child_post_startup_inferior;
3242   t->to_post_attach = linux_child_post_attach;
3243   t->to_follow_fork = linux_child_follow_fork;
3244   t->to_find_memory_regions = linux_nat_find_memory_regions;
3245   t->to_make_corefile_notes = linux_nat_make_corefile_notes;
3246
3247   super_xfer_partial = t->to_xfer_partial;
3248   t->to_xfer_partial = linux_xfer_partial;
3249 }
3250
3251 struct target_ops *
3252 linux_target (void)
3253 {
3254   struct target_ops *t;
3255
3256   t = inf_ptrace_target ();
3257   linux_target_install_ops (t);
3258
3259   return t;
3260 }
3261
3262 struct target_ops *
3263 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
3264 {
3265   struct target_ops *t;
3266
3267   t = inf_ptrace_trad_target (register_u_offset);
3268   linux_target_install_ops (t);
3269
3270   return t;
3271 }
3272
3273 void
3274 linux_nat_add_target (struct target_ops *t)
3275 {
3276   /* Save the provided single-threaded target.  We save this in a separate
3277      variable because another target we've inherited from (e.g. inf-ptrace)
3278      may have saved a pointer to T; we want to use it for the final
3279      process stratum target.  */
3280   linux_ops_saved = *t;
3281   linux_ops = &linux_ops_saved;
3282
3283   /* Override some methods for multithreading.  */
3284   t->to_attach = linux_nat_attach;
3285   t->to_detach = linux_nat_detach;
3286   t->to_resume = linux_nat_resume;
3287   t->to_wait = linux_nat_wait;
3288   t->to_xfer_partial = linux_nat_xfer_partial;
3289   t->to_kill = linux_nat_kill;
3290   t->to_mourn_inferior = linux_nat_mourn_inferior;
3291   t->to_thread_alive = linux_nat_thread_alive;
3292   t->to_pid_to_str = linux_nat_pid_to_str;
3293   t->to_has_thread_control = tc_schedlock;
3294
3295   /* We don't change the stratum; this target will sit at
3296      process_stratum and thread_db will set at thread_stratum.  This
3297      is a little strange, since this is a multi-threaded-capable
3298      target, but we want to be on the stack below thread_db, and we
3299      also want to be used for single-threaded processes.  */
3300
3301   add_target (t);
3302
3303   /* TODO: Eliminate this and have libthread_db use
3304      find_target_beneath.  */
3305   thread_db_init (t);
3306 }
3307
3308 /* Register a method to call whenever a new thread is attached.  */
3309 void
3310 linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
3311 {
3312   /* Save the pointer.  We only support a single registered instance
3313      of the GNU/Linux native target, so we do not need to map this to
3314      T.  */
3315   linux_nat_new_thread = new_thread;
3316 }
3317
3318 /* Return the saved siginfo associated with PTID.  */
3319 struct siginfo *
3320 linux_nat_get_siginfo (ptid_t ptid)
3321 {
3322   struct lwp_info *lp = find_lwp_pid (ptid);
3323
3324   gdb_assert (lp != NULL);
3325
3326   return &lp->siginfo;
3327 }
3328
3329 void
3330 _initialize_linux_nat (void)
3331 {
3332   struct sigaction action;
3333
3334   add_info ("proc", linux_nat_info_proc_cmd, _("\
3335 Show /proc process information about any running process.\n\
3336 Specify any process id, or use the program being debugged by default.\n\
3337 Specify any of the following keywords for detailed info:\n\
3338   mappings -- list of mapped memory regions.\n\
3339   stat     -- list a bunch of random process info.\n\
3340   status   -- list a different bunch of random process info.\n\
3341   all      -- list all available /proc info."));
3342
3343   /* Save the original signal mask.  */
3344   sigprocmask (SIG_SETMASK, NULL, &normal_mask);
3345
3346   action.sa_handler = sigchld_handler;
3347   sigemptyset (&action.sa_mask);
3348   action.sa_flags = SA_RESTART;
3349   sigaction (SIGCHLD, &action, NULL);
3350
3351   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
3352   sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
3353   sigdelset (&suspend_mask, SIGCHLD);
3354
3355   sigemptyset (&blocked_mask);
3356
3357   add_setshow_zinteger_cmd ("lin-lwp", no_class, &debug_linux_nat, _("\
3358 Set debugging of GNU/Linux lwp module."), _("\
3359 Show debugging of GNU/Linux lwp module."), _("\
3360 Enables printf debugging output."),
3361                             NULL,
3362                             show_debug_linux_nat,
3363                             &setdebuglist, &showdebuglist);
3364 }
3365 \f
3366
3367 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
3368    the GNU/Linux Threads library and therefore doesn't really belong
3369    here.  */
3370
3371 /* Read variable NAME in the target and return its value if found.
3372    Otherwise return zero.  It is assumed that the type of the variable
3373    is `int'.  */
3374
3375 static int
3376 get_signo (const char *name)
3377 {
3378   struct minimal_symbol *ms;
3379   int signo;
3380
3381   ms = lookup_minimal_symbol (name, NULL, NULL);
3382   if (ms == NULL)
3383     return 0;
3384
3385   if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
3386                           sizeof (signo)) != 0)
3387     return 0;
3388
3389   return signo;
3390 }
3391
3392 /* Return the set of signals used by the threads library in *SET.  */
3393
3394 void
3395 lin_thread_get_thread_signals (sigset_t *set)
3396 {
3397   struct sigaction action;
3398   int restart, cancel;
3399
3400   sigemptyset (set);
3401
3402   restart = get_signo ("__pthread_sig_restart");
3403   cancel = get_signo ("__pthread_sig_cancel");
3404
3405   /* LinuxThreads normally uses the first two RT signals, but in some legacy
3406      cases may use SIGUSR1/SIGUSR2.  NPTL always uses RT signals, but does
3407      not provide any way for the debugger to query the signal numbers -
3408      fortunately they don't change!  */
3409
3410   if (restart == 0)
3411     restart = __SIGRTMIN;
3412
3413   if (cancel == 0)
3414     cancel = __SIGRTMIN + 1;
3415
3416   sigaddset (set, restart);
3417   sigaddset (set, cancel);
3418
3419   /* The GNU/Linux Threads library makes terminating threads send a
3420      special "cancel" signal instead of SIGCHLD.  Make sure we catch
3421      those (to prevent them from terminating GDB itself, which is
3422      likely to be their default action) and treat them the same way as
3423      SIGCHLD.  */
3424
3425   action.sa_handler = sigchld_handler;
3426   sigemptyset (&action.sa_mask);
3427   action.sa_flags = SA_RESTART;
3428   sigaction (cancel, &action, NULL);
3429
3430   /* We block the "cancel" signal throughout this code ...  */
3431   sigaddset (&blocked_mask, cancel);
3432   sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
3433
3434   /* ... except during a sigsuspend.  */
3435   sigdelset (&suspend_mask, cancel);
3436 }
3437