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