Automatic date update in version.in
[platform/upstream/binutils.git] / gdb / linux-nat.c
1 /* GNU/Linux native-dependent code common to multiple platforms.
2
3    Copyright (C) 2001-2014 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "inferior.h"
22 #include "infrun.h"
23 #include "target.h"
24 #include "nat/linux-nat.h"
25 #include "nat/linux-waitpid.h"
26 #include "gdb_wait.h"
27 #ifdef HAVE_TKILL_SYSCALL
28 #include <unistd.h>
29 #include <sys/syscall.h>
30 #endif
31 #include <sys/ptrace.h>
32 #include "linux-nat.h"
33 #include "nat/linux-ptrace.h"
34 #include "nat/linux-procfs.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-child.h"
41 #include "inf-ptrace.h"
42 #include "auxv.h"
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 <sys/stat.h>           /* for struct stat */
49 #include <fcntl.h>              /* for O_RDONLY */
50 #include "inf-loop.h"
51 #include "event-loop.h"
52 #include "event-top.h"
53 #include <pwd.h>
54 #include <sys/types.h>
55 #include <dirent.h>
56 #include "xml-support.h"
57 #include <sys/vfs.h>
58 #include "solib.h"
59 #include "nat/linux-osdata.h"
60 #include "linux-tdep.h"
61 #include "symfile.h"
62 #include "agent.h"
63 #include "tracepoint.h"
64 #include "buffer.h"
65 #include "target-descriptions.h"
66 #include "filestuff.h"
67 #include "objfiles.h"
68
69 #ifndef SPUFS_MAGIC
70 #define SPUFS_MAGIC 0x23c9b64e
71 #endif
72
73 #ifdef HAVE_PERSONALITY
74 # include <sys/personality.h>
75 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
76 #  define ADDR_NO_RANDOMIZE 0x0040000
77 # endif
78 #endif /* HAVE_PERSONALITY */
79
80 /* This comment documents high-level logic of this file.
81
82 Waiting for events in sync mode
83 ===============================
84
85 When waiting for an event in a specific thread, we just use waitpid, passing
86 the specific pid, and not passing WNOHANG.
87
88 When waiting for an event in all threads, waitpid is not quite good.  Prior to
89 version 2.4, Linux can either wait for event in main thread, or in secondary
90 threads.  (2.4 has the __WALL flag).  So, if we use blocking waitpid, we might
91 miss an event.  The solution is to use non-blocking waitpid, together with
92 sigsuspend.  First, we use non-blocking waitpid to get an event in the main 
93 process, if any.  Second, we use non-blocking waitpid with the __WCLONED
94 flag to check for events in cloned processes.  If nothing is found, we use
95 sigsuspend to wait for SIGCHLD.  When SIGCHLD arrives, it means something
96 happened to a child process -- and SIGCHLD will be delivered both for events
97 in main debugged process and in cloned processes.  As soon as we know there's
98 an event, we get back to calling nonblocking waitpid with and without 
99 __WCLONED.
100
101 Note that SIGCHLD should be blocked between waitpid and sigsuspend calls,
102 so that we don't miss a signal.  If SIGCHLD arrives in between, when it's
103 blocked, the signal becomes pending and sigsuspend immediately
104 notices it and returns.
105
106 Waiting for events in async mode
107 ================================
108
109 In async mode, GDB should always be ready to handle both user input
110 and target events, so neither blocking waitpid nor sigsuspend are
111 viable options.  Instead, we should asynchronously notify the GDB main
112 event loop whenever there's an unprocessed event from the target.  We
113 detect asynchronous target events by handling SIGCHLD signals.  To
114 notify the event loop about target events, the self-pipe trick is used
115 --- a pipe is registered as waitable event source in the event loop,
116 the event loop select/poll's on the read end of this pipe (as well on
117 other event sources, e.g., stdin), and the SIGCHLD handler writes a
118 byte to this pipe.  This is more portable than relying on
119 pselect/ppoll, since on kernels that lack those syscalls, libc
120 emulates them with select/poll+sigprocmask, and that is racy
121 (a.k.a. plain broken).
122
123 Obviously, if we fail to notify the event loop if there's a target
124 event, it's bad.  OTOH, if we notify the event loop when there's no
125 event from the target, linux_nat_wait will detect that there's no real
126 event to report, and return event of type TARGET_WAITKIND_IGNORE.
127 This is mostly harmless, but it will waste time and is better avoided.
128
129 The main design point is that every time GDB is outside linux-nat.c,
130 we have a SIGCHLD handler installed that is called when something
131 happens to the target and notifies the GDB event loop.  Whenever GDB
132 core decides to handle the event, and calls into linux-nat.c, we
133 process things as in sync mode, except that the we never block in
134 sigsuspend.
135
136 While processing an event, we may end up momentarily blocked in
137 waitpid calls.  Those waitpid calls, while blocking, are guarantied to
138 return quickly.  E.g., in all-stop mode, before reporting to the core
139 that an LWP hit a breakpoint, all LWPs are stopped by sending them
140 SIGSTOP, and synchronously waiting for the SIGSTOP to be reported.
141 Note that this is different from blocking indefinitely waiting for the
142 next event --- here, we're already handling an event.
143
144 Use of signals
145 ==============
146
147 We stop threads by sending a SIGSTOP.  The use of SIGSTOP instead of another
148 signal is not entirely significant; we just need for a signal to be delivered,
149 so that we can intercept it.  SIGSTOP's advantage is that it can not be
150 blocked.  A disadvantage is that it is not a real-time signal, so it can only
151 be queued once; we do not keep track of other sources of SIGSTOP.
152
153 Two other signals that can't be blocked are SIGCONT and SIGKILL.  But we can't
154 use them, because they have special behavior when the signal is generated -
155 not when it is delivered.  SIGCONT resumes the entire thread group and SIGKILL
156 kills the entire thread group.
157
158 A delivered SIGSTOP would stop the entire thread group, not just the thread we
159 tkill'd.  But we never let the SIGSTOP be delivered; we always intercept and 
160 cancel it (by PTRACE_CONT without passing SIGSTOP).
161
162 We could use a real-time signal instead.  This would solve those problems; we
163 could use PTRACE_GETSIGINFO to locate the specific stop signals sent by GDB.
164 But we would still have to have some support for SIGSTOP, since PTRACE_ATTACH
165 generates it, and there are races with trying to find a signal that is not
166 blocked.  */
167
168 #ifndef O_LARGEFILE
169 #define O_LARGEFILE 0
170 #endif
171
172 /* The single-threaded native GNU/Linux target_ops.  We save a pointer for
173    the use of the multi-threaded target.  */
174 static struct target_ops *linux_ops;
175 static struct target_ops linux_ops_saved;
176
177 /* The method to call, if any, when a new thread is attached.  */
178 static void (*linux_nat_new_thread) (struct lwp_info *);
179
180 /* The method to call, if any, when a new fork is attached.  */
181 static linux_nat_new_fork_ftype *linux_nat_new_fork;
182
183 /* The method to call, if any, when a process is no longer
184    attached.  */
185 static linux_nat_forget_process_ftype *linux_nat_forget_process_hook;
186
187 /* Hook to call prior to resuming a thread.  */
188 static void (*linux_nat_prepare_to_resume) (struct lwp_info *);
189
190 /* The method to call, if any, when the siginfo object needs to be
191    converted between the layout returned by ptrace, and the layout in
192    the architecture of the inferior.  */
193 static int (*linux_nat_siginfo_fixup) (siginfo_t *,
194                                        gdb_byte *,
195                                        int);
196
197 /* The saved to_xfer_partial method, inherited from inf-ptrace.c.
198    Called by our to_xfer_partial.  */
199 static target_xfer_partial_ftype *super_xfer_partial;
200
201 /* The saved to_close method, inherited from inf-ptrace.c.
202    Called by our to_close.  */
203 static void (*super_close) (struct target_ops *);
204
205 static unsigned int debug_linux_nat;
206 static void
207 show_debug_linux_nat (struct ui_file *file, int from_tty,
208                       struct cmd_list_element *c, const char *value)
209 {
210   fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
211                     value);
212 }
213
214 struct simple_pid_list
215 {
216   int pid;
217   int status;
218   struct simple_pid_list *next;
219 };
220 struct simple_pid_list *stopped_pids;
221
222 /* Async mode support.  */
223
224 /* The read/write ends of the pipe registered as waitable file in the
225    event loop.  */
226 static int linux_nat_event_pipe[2] = { -1, -1 };
227
228 /* Flush the event pipe.  */
229
230 static void
231 async_file_flush (void)
232 {
233   int ret;
234   char buf;
235
236   do
237     {
238       ret = read (linux_nat_event_pipe[0], &buf, 1);
239     }
240   while (ret >= 0 || (ret == -1 && errno == EINTR));
241 }
242
243 /* Put something (anything, doesn't matter what, or how much) in event
244    pipe, so that the select/poll in the event-loop realizes we have
245    something to process.  */
246
247 static void
248 async_file_mark (void)
249 {
250   int ret;
251
252   /* It doesn't really matter what the pipe contains, as long we end
253      up with something in it.  Might as well flush the previous
254      left-overs.  */
255   async_file_flush ();
256
257   do
258     {
259       ret = write (linux_nat_event_pipe[1], "+", 1);
260     }
261   while (ret == -1 && errno == EINTR);
262
263   /* Ignore EAGAIN.  If the pipe is full, the event loop will already
264      be awakened anyway.  */
265 }
266
267 static int kill_lwp (int lwpid, int signo);
268
269 static int stop_callback (struct lwp_info *lp, void *data);
270
271 static void block_child_signals (sigset_t *prev_mask);
272 static void restore_child_signals_mask (sigset_t *prev_mask);
273
274 struct lwp_info;
275 static struct lwp_info *add_lwp (ptid_t ptid);
276 static void purge_lwp_list (int pid);
277 static void delete_lwp (ptid_t ptid);
278 static struct lwp_info *find_lwp_pid (ptid_t ptid);
279
280 \f
281 /* Trivial list manipulation functions to keep track of a list of
282    new stopped processes.  */
283 static void
284 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
285 {
286   struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
287
288   new_pid->pid = pid;
289   new_pid->status = status;
290   new_pid->next = *listp;
291   *listp = new_pid;
292 }
293
294 static int
295 in_pid_list_p (struct simple_pid_list *list, int pid)
296 {
297   struct simple_pid_list *p;
298
299   for (p = list; p != NULL; p = p->next)
300     if (p->pid == pid)
301       return 1;
302   return 0;
303 }
304
305 static int
306 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
307 {
308   struct simple_pid_list **p;
309
310   for (p = listp; *p != NULL; p = &(*p)->next)
311     if ((*p)->pid == pid)
312       {
313         struct simple_pid_list *next = (*p)->next;
314
315         *statusp = (*p)->status;
316         xfree (*p);
317         *p = next;
318         return 1;
319       }
320   return 0;
321 }
322
323 /* Initialize ptrace warnings and check for supported ptrace
324    features given PID.  */
325
326 static void
327 linux_init_ptrace (pid_t pid)
328 {
329   linux_enable_event_reporting (pid);
330   linux_ptrace_init_warnings ();
331 }
332
333 static void
334 linux_child_post_attach (struct target_ops *self, int pid)
335 {
336   linux_init_ptrace (pid);
337 }
338
339 static void
340 linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid)
341 {
342   linux_init_ptrace (ptid_get_pid (ptid));
343 }
344
345 /* Return the number of known LWPs in the tgid given by PID.  */
346
347 static int
348 num_lwps (int pid)
349 {
350   int count = 0;
351   struct lwp_info *lp;
352
353   for (lp = lwp_list; lp; lp = lp->next)
354     if (ptid_get_pid (lp->ptid) == pid)
355       count++;
356
357   return count;
358 }
359
360 /* Call delete_lwp with prototype compatible for make_cleanup.  */
361
362 static void
363 delete_lwp_cleanup (void *lp_voidp)
364 {
365   struct lwp_info *lp = lp_voidp;
366
367   delete_lwp (lp->ptid);
368 }
369
370 /* Target hook for follow_fork.  On entry inferior_ptid must be the
371    ptid of the followed inferior.  At return, inferior_ptid will be
372    unchanged.  */
373
374 static int
375 linux_child_follow_fork (struct target_ops *ops, int follow_child,
376                          int detach_fork)
377 {
378   if (!follow_child)
379     {
380       struct lwp_info *child_lp = NULL;
381       int status = W_STOPCODE (0);
382       struct cleanup *old_chain;
383       int has_vforked;
384       int parent_pid, child_pid;
385
386       has_vforked = (inferior_thread ()->pending_follow.kind
387                      == TARGET_WAITKIND_VFORKED);
388       parent_pid = ptid_get_lwp (inferior_ptid);
389       if (parent_pid == 0)
390         parent_pid = ptid_get_pid (inferior_ptid);
391       child_pid
392         = ptid_get_pid (inferior_thread ()->pending_follow.value.related_pid);
393
394
395       /* We're already attached to the parent, by default.  */
396       old_chain = save_inferior_ptid ();
397       inferior_ptid = ptid_build (child_pid, child_pid, 0);
398       child_lp = add_lwp (inferior_ptid);
399       child_lp->stopped = 1;
400       child_lp->last_resume_kind = resume_stop;
401
402       /* Detach new forked process?  */
403       if (detach_fork)
404         {
405           make_cleanup (delete_lwp_cleanup, child_lp);
406
407           if (linux_nat_prepare_to_resume != NULL)
408             linux_nat_prepare_to_resume (child_lp);
409
410           /* When debugging an inferior in an architecture that supports
411              hardware single stepping on a kernel without commit
412              6580807da14c423f0d0a708108e6df6ebc8bc83d, the vfork child
413              process starts with the TIF_SINGLESTEP/X86_EFLAGS_TF bits
414              set if the parent process had them set.
415              To work around this, single step the child process
416              once before detaching to clear the flags.  */
417
418           if (!gdbarch_software_single_step_p (target_thread_architecture
419                                                    (child_lp->ptid)))
420             {
421               linux_disable_event_reporting (child_pid);
422               if (ptrace (PTRACE_SINGLESTEP, child_pid, 0, 0) < 0)
423                 perror_with_name (_("Couldn't do single step"));
424               if (my_waitpid (child_pid, &status, 0) < 0)
425                 perror_with_name (_("Couldn't wait vfork process"));
426             }
427
428           if (WIFSTOPPED (status))
429             {
430               int signo;
431
432               signo = WSTOPSIG (status);
433               if (signo != 0
434                   && !signal_pass_state (gdb_signal_from_host (signo)))
435                 signo = 0;
436               ptrace (PTRACE_DETACH, child_pid, 0, signo);
437             }
438
439           /* Resets value of inferior_ptid to parent ptid.  */
440           do_cleanups (old_chain);
441         }
442       else
443         {
444           /* Let the thread_db layer learn about this new process.  */
445           check_for_thread_db ();
446         }
447
448       do_cleanups (old_chain);
449
450       if (has_vforked)
451         {
452           struct lwp_info *parent_lp;
453
454           parent_lp = find_lwp_pid (pid_to_ptid (parent_pid));
455           gdb_assert (linux_supports_tracefork () >= 0);
456
457           if (linux_supports_tracevforkdone ())
458             {
459               if (debug_linux_nat)
460                 fprintf_unfiltered (gdb_stdlog,
461                                     "LCFF: waiting for VFORK_DONE on %d\n",
462                                     parent_pid);
463               parent_lp->stopped = 1;
464
465               /* We'll handle the VFORK_DONE event like any other
466                  event, in target_wait.  */
467             }
468           else
469             {
470               /* We can't insert breakpoints until the child has
471                  finished with the shared memory region.  We need to
472                  wait until that happens.  Ideal would be to just
473                  call:
474                  - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
475                  - waitpid (parent_pid, &status, __WALL);
476                  However, most architectures can't handle a syscall
477                  being traced on the way out if it wasn't traced on
478                  the way in.
479
480                  We might also think to loop, continuing the child
481                  until it exits or gets a SIGTRAP.  One problem is
482                  that the child might call ptrace with PTRACE_TRACEME.
483
484                  There's no simple and reliable way to figure out when
485                  the vforked child will be done with its copy of the
486                  shared memory.  We could step it out of the syscall,
487                  two instructions, let it go, and then single-step the
488                  parent once.  When we have hardware single-step, this
489                  would work; with software single-step it could still
490                  be made to work but we'd have to be able to insert
491                  single-step breakpoints in the child, and we'd have
492                  to insert -just- the single-step breakpoint in the
493                  parent.  Very awkward.
494
495                  In the end, the best we can do is to make sure it
496                  runs for a little while.  Hopefully it will be out of
497                  range of any breakpoints we reinsert.  Usually this
498                  is only the single-step breakpoint at vfork's return
499                  point.  */
500
501               if (debug_linux_nat)
502                 fprintf_unfiltered (gdb_stdlog,
503                                     "LCFF: no VFORK_DONE "
504                                     "support, sleeping a bit\n");
505
506               usleep (10000);
507
508               /* Pretend we've seen a PTRACE_EVENT_VFORK_DONE event,
509                  and leave it pending.  The next linux_nat_resume call
510                  will notice a pending event, and bypasses actually
511                  resuming the inferior.  */
512               parent_lp->status = 0;
513               parent_lp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE;
514               parent_lp->stopped = 1;
515
516               /* If we're in async mode, need to tell the event loop
517                  there's something here to process.  */
518               if (target_can_async_p ())
519                 async_file_mark ();
520             }
521         }
522     }
523   else
524     {
525       struct lwp_info *child_lp;
526
527       child_lp = add_lwp (inferior_ptid);
528       child_lp->stopped = 1;
529       child_lp->last_resume_kind = resume_stop;
530
531       /* Let the thread_db layer learn about this new process.  */
532       check_for_thread_db ();
533     }
534
535   return 0;
536 }
537
538 \f
539 static int
540 linux_child_insert_fork_catchpoint (struct target_ops *self, int pid)
541 {
542   return !linux_supports_tracefork ();
543 }
544
545 static int
546 linux_child_remove_fork_catchpoint (struct target_ops *self, int pid)
547 {
548   return 0;
549 }
550
551 static int
552 linux_child_insert_vfork_catchpoint (struct target_ops *self, int pid)
553 {
554   return !linux_supports_tracefork ();
555 }
556
557 static int
558 linux_child_remove_vfork_catchpoint (struct target_ops *self, int pid)
559 {
560   return 0;
561 }
562
563 static int
564 linux_child_insert_exec_catchpoint (struct target_ops *self, int pid)
565 {
566   return !linux_supports_tracefork ();
567 }
568
569 static int
570 linux_child_remove_exec_catchpoint (struct target_ops *self, int pid)
571 {
572   return 0;
573 }
574
575 static int
576 linux_child_set_syscall_catchpoint (struct target_ops *self,
577                                     int pid, int needed, int any_count,
578                                     int table_size, int *table)
579 {
580   if (!linux_supports_tracesysgood ())
581     return 1;
582
583   /* On GNU/Linux, we ignore the arguments.  It means that we only
584      enable the syscall catchpoints, but do not disable them.
585
586      Also, we do not use the `table' information because we do not
587      filter system calls here.  We let GDB do the logic for us.  */
588   return 0;
589 }
590
591 /* On GNU/Linux there are no real LWP's.  The closest thing to LWP's
592    are processes sharing the same VM space.  A multi-threaded process
593    is basically a group of such processes.  However, such a grouping
594    is almost entirely a user-space issue; the kernel doesn't enforce
595    such a grouping at all (this might change in the future).  In
596    general, we'll rely on the threads library (i.e. the GNU/Linux
597    Threads library) to provide such a grouping.
598
599    It is perfectly well possible to write a multi-threaded application
600    without the assistance of a threads library, by using the clone
601    system call directly.  This module should be able to give some
602    rudimentary support for debugging such applications if developers
603    specify the CLONE_PTRACE flag in the clone system call, and are
604    using the Linux kernel 2.4 or above.
605
606    Note that there are some peculiarities in GNU/Linux that affect
607    this code:
608
609    - In general one should specify the __WCLONE flag to waitpid in
610      order to make it report events for any of the cloned processes
611      (and leave it out for the initial process).  However, if a cloned
612      process has exited the exit status is only reported if the
613      __WCLONE flag is absent.  Linux kernel 2.4 has a __WALL flag, but
614      we cannot use it since GDB must work on older systems too.
615
616    - When a traced, cloned process exits and is waited for by the
617      debugger, the kernel reassigns it to the original parent and
618      keeps it around as a "zombie".  Somehow, the GNU/Linux Threads
619      library doesn't notice this, which leads to the "zombie problem":
620      When debugged a multi-threaded process that spawns a lot of
621      threads will run out of processes, even if the threads exit,
622      because the "zombies" stay around.  */
623
624 /* List of known LWPs.  */
625 struct lwp_info *lwp_list;
626 \f
627
628 /* Original signal mask.  */
629 static sigset_t normal_mask;
630
631 /* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
632    _initialize_linux_nat.  */
633 static sigset_t suspend_mask;
634
635 /* Signals to block to make that sigsuspend work.  */
636 static sigset_t blocked_mask;
637
638 /* SIGCHLD action.  */
639 struct sigaction sigchld_action;
640
641 /* Block child signals (SIGCHLD and linux threads signals), and store
642    the previous mask in PREV_MASK.  */
643
644 static void
645 block_child_signals (sigset_t *prev_mask)
646 {
647   /* Make sure SIGCHLD is blocked.  */
648   if (!sigismember (&blocked_mask, SIGCHLD))
649     sigaddset (&blocked_mask, SIGCHLD);
650
651   sigprocmask (SIG_BLOCK, &blocked_mask, prev_mask);
652 }
653
654 /* Restore child signals mask, previously returned by
655    block_child_signals.  */
656
657 static void
658 restore_child_signals_mask (sigset_t *prev_mask)
659 {
660   sigprocmask (SIG_SETMASK, prev_mask, NULL);
661 }
662
663 /* Mask of signals to pass directly to the inferior.  */
664 static sigset_t pass_mask;
665
666 /* Update signals to pass to the inferior.  */
667 static void
668 linux_nat_pass_signals (struct target_ops *self,
669                         int numsigs, unsigned char *pass_signals)
670 {
671   int signo;
672
673   sigemptyset (&pass_mask);
674
675   for (signo = 1; signo < NSIG; signo++)
676     {
677       int target_signo = gdb_signal_from_host (signo);
678       if (target_signo < numsigs && pass_signals[target_signo])
679         sigaddset (&pass_mask, signo);
680     }
681 }
682
683 \f
684
685 /* Prototypes for local functions.  */
686 static int stop_wait_callback (struct lwp_info *lp, void *data);
687 static int linux_thread_alive (ptid_t ptid);
688 static char *linux_child_pid_to_exec_file (struct target_ops *self, int pid);
689
690 \f
691
692 /* Destroy and free LP.  */
693
694 static void
695 lwp_free (struct lwp_info *lp)
696 {
697   xfree (lp->arch_private);
698   xfree (lp);
699 }
700
701 /* Remove all LWPs belong to PID from the lwp list.  */
702
703 static void
704 purge_lwp_list (int pid)
705 {
706   struct lwp_info *lp, *lpprev, *lpnext;
707
708   lpprev = NULL;
709
710   for (lp = lwp_list; lp; lp = lpnext)
711     {
712       lpnext = lp->next;
713
714       if (ptid_get_pid (lp->ptid) == pid)
715         {
716           if (lp == lwp_list)
717             lwp_list = lp->next;
718           else
719             lpprev->next = lp->next;
720
721           lwp_free (lp);
722         }
723       else
724         lpprev = lp;
725     }
726 }
727
728 /* Add the LWP specified by PTID to the list.  PTID is the first LWP
729    in the process.  Return a pointer to the structure describing the
730    new LWP.
731
732    This differs from add_lwp in that we don't let the arch specific
733    bits know about this new thread.  Current clients of this callback
734    take the opportunity to install watchpoints in the new thread, and
735    we shouldn't do that for the first thread.  If we're spawning a
736    child ("run"), the thread executes the shell wrapper first, and we
737    shouldn't touch it until it execs the program we want to debug.
738    For "attach", it'd be okay to call the callback, but it's not
739    necessary, because watchpoints can't yet have been inserted into
740    the inferior.  */
741
742 static struct lwp_info *
743 add_initial_lwp (ptid_t ptid)
744 {
745   struct lwp_info *lp;
746
747   gdb_assert (ptid_lwp_p (ptid));
748
749   lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
750
751   memset (lp, 0, sizeof (struct lwp_info));
752
753   lp->last_resume_kind = resume_continue;
754   lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
755
756   lp->ptid = ptid;
757   lp->core = -1;
758
759   lp->next = lwp_list;
760   lwp_list = lp;
761
762   return lp;
763 }
764
765 /* Add the LWP specified by PID to the list.  Return a pointer to the
766    structure describing the new LWP.  The LWP should already be
767    stopped.  */
768
769 static struct lwp_info *
770 add_lwp (ptid_t ptid)
771 {
772   struct lwp_info *lp;
773
774   lp = add_initial_lwp (ptid);
775
776   /* Let the arch specific bits know about this new thread.  Current
777      clients of this callback take the opportunity to install
778      watchpoints in the new thread.  We don't do this for the first
779      thread though.  See add_initial_lwp.  */
780   if (linux_nat_new_thread != NULL)
781     linux_nat_new_thread (lp);
782
783   return lp;
784 }
785
786 /* Remove the LWP specified by PID from the list.  */
787
788 static void
789 delete_lwp (ptid_t ptid)
790 {
791   struct lwp_info *lp, *lpprev;
792
793   lpprev = NULL;
794
795   for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
796     if (ptid_equal (lp->ptid, ptid))
797       break;
798
799   if (!lp)
800     return;
801
802   if (lpprev)
803     lpprev->next = lp->next;
804   else
805     lwp_list = lp->next;
806
807   lwp_free (lp);
808 }
809
810 /* Return a pointer to the structure describing the LWP corresponding
811    to PID.  If no corresponding LWP could be found, return NULL.  */
812
813 static struct lwp_info *
814 find_lwp_pid (ptid_t ptid)
815 {
816   struct lwp_info *lp;
817   int lwp;
818
819   if (ptid_lwp_p (ptid))
820     lwp = ptid_get_lwp (ptid);
821   else
822     lwp = ptid_get_pid (ptid);
823
824   for (lp = lwp_list; lp; lp = lp->next)
825     if (lwp == ptid_get_lwp (lp->ptid))
826       return lp;
827
828   return NULL;
829 }
830
831 /* Call CALLBACK with its second argument set to DATA for every LWP in
832    the list.  If CALLBACK returns 1 for a particular LWP, return a
833    pointer to the structure describing that LWP immediately.
834    Otherwise return NULL.  */
835
836 struct lwp_info *
837 iterate_over_lwps (ptid_t filter,
838                    int (*callback) (struct lwp_info *, void *),
839                    void *data)
840 {
841   struct lwp_info *lp, *lpnext;
842
843   for (lp = lwp_list; lp; lp = lpnext)
844     {
845       lpnext = lp->next;
846
847       if (ptid_match (lp->ptid, filter))
848         {
849           if ((*callback) (lp, data))
850             return lp;
851         }
852     }
853
854   return NULL;
855 }
856
857 /* Update our internal state when changing from one checkpoint to
858    another indicated by NEW_PTID.  We can only switch single-threaded
859    applications, so we only create one new LWP, and the previous list
860    is discarded.  */
861
862 void
863 linux_nat_switch_fork (ptid_t new_ptid)
864 {
865   struct lwp_info *lp;
866
867   purge_lwp_list (ptid_get_pid (inferior_ptid));
868
869   lp = add_lwp (new_ptid);
870   lp->stopped = 1;
871
872   /* This changes the thread's ptid while preserving the gdb thread
873      num.  Also changes the inferior pid, while preserving the
874      inferior num.  */
875   thread_change_ptid (inferior_ptid, new_ptid);
876
877   /* We've just told GDB core that the thread changed target id, but,
878      in fact, it really is a different thread, with different register
879      contents.  */
880   registers_changed ();
881 }
882
883 /* Handle the exit of a single thread LP.  */
884
885 static void
886 exit_lwp (struct lwp_info *lp)
887 {
888   struct thread_info *th = find_thread_ptid (lp->ptid);
889
890   if (th)
891     {
892       if (print_thread_events)
893         printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
894
895       delete_thread (lp->ptid);
896     }
897
898   delete_lwp (lp->ptid);
899 }
900
901 /* Wait for the LWP specified by LP, which we have just attached to.
902    Returns a wait status for that LWP, to cache.  */
903
904 static int
905 linux_nat_post_attach_wait (ptid_t ptid, int first, int *cloned,
906                             int *signalled)
907 {
908   pid_t new_pid, pid = ptid_get_lwp (ptid);
909   int status;
910
911   if (linux_proc_pid_is_stopped (pid))
912     {
913       if (debug_linux_nat)
914         fprintf_unfiltered (gdb_stdlog,
915                             "LNPAW: Attaching to a stopped process\n");
916
917       /* The process is definitely stopped.  It is in a job control
918          stop, unless the kernel predates the TASK_STOPPED /
919          TASK_TRACED distinction, in which case it might be in a
920          ptrace stop.  Make sure it is in a ptrace stop; from there we
921          can kill it, signal it, et cetera.
922
923          First make sure there is a pending SIGSTOP.  Since we are
924          already attached, the process can not transition from stopped
925          to running without a PTRACE_CONT; so we know this signal will
926          go into the queue.  The SIGSTOP generated by PTRACE_ATTACH is
927          probably already in the queue (unless this kernel is old
928          enough to use TASK_STOPPED for ptrace stops); but since SIGSTOP
929          is not an RT signal, it can only be queued once.  */
930       kill_lwp (pid, SIGSTOP);
931
932       /* Finally, resume the stopped process.  This will deliver the SIGSTOP
933          (or a higher priority signal, just like normal PTRACE_ATTACH).  */
934       ptrace (PTRACE_CONT, pid, 0, 0);
935     }
936
937   /* Make sure the initial process is stopped.  The user-level threads
938      layer might want to poke around in the inferior, and that won't
939      work if things haven't stabilized yet.  */
940   new_pid = my_waitpid (pid, &status, 0);
941   if (new_pid == -1 && errno == ECHILD)
942     {
943       if (first)
944         warning (_("%s is a cloned process"), target_pid_to_str (ptid));
945
946       /* Try again with __WCLONE to check cloned processes.  */
947       new_pid = my_waitpid (pid, &status, __WCLONE);
948       *cloned = 1;
949     }
950
951   gdb_assert (pid == new_pid);
952
953   if (!WIFSTOPPED (status))
954     {
955       /* The pid we tried to attach has apparently just exited.  */
956       if (debug_linux_nat)
957         fprintf_unfiltered (gdb_stdlog, "LNPAW: Failed to stop %d: %s",
958                             pid, status_to_str (status));
959       return status;
960     }
961
962   if (WSTOPSIG (status) != SIGSTOP)
963     {
964       *signalled = 1;
965       if (debug_linux_nat)
966         fprintf_unfiltered (gdb_stdlog,
967                             "LNPAW: Received %s after attaching\n",
968                             status_to_str (status));
969     }
970
971   return status;
972 }
973
974 /* Attach to the LWP specified by PID.  Return 0 if successful, -1 if
975    the new LWP could not be attached, or 1 if we're already auto
976    attached to this thread, but haven't processed the
977    PTRACE_EVENT_CLONE event of its parent thread, so we just ignore
978    its existance, without considering it an error.  */
979
980 int
981 lin_lwp_attach_lwp (ptid_t ptid)
982 {
983   struct lwp_info *lp;
984   int lwpid;
985
986   gdb_assert (ptid_lwp_p (ptid));
987
988   lp = find_lwp_pid (ptid);
989   lwpid = ptid_get_lwp (ptid);
990
991   /* We assume that we're already attached to any LWP that has an id
992      equal to the overall process id, and to any LWP that is already
993      in our list of LWPs.  If we're not seeing exit events from threads
994      and we've had PID wraparound since we last tried to stop all threads,
995      this assumption might be wrong; fortunately, this is very unlikely
996      to happen.  */
997   if (lwpid != ptid_get_pid (ptid) && lp == NULL)
998     {
999       int status, cloned = 0, signalled = 0;
1000
1001       if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) < 0)
1002         {
1003           if (linux_supports_tracefork ())
1004             {
1005               /* If we haven't stopped all threads when we get here,
1006                  we may have seen a thread listed in thread_db's list,
1007                  but not processed the PTRACE_EVENT_CLONE yet.  If
1008                  that's the case, ignore this new thread, and let
1009                  normal event handling discover it later.  */
1010               if (in_pid_list_p (stopped_pids, lwpid))
1011                 {
1012                   /* We've already seen this thread stop, but we
1013                      haven't seen the PTRACE_EVENT_CLONE extended
1014                      event yet.  */
1015                   return 0;
1016                 }
1017               else
1018                 {
1019                   int new_pid;
1020                   int status;
1021
1022                   /* See if we've got a stop for this new child
1023                      pending.  If so, we're already attached.  */
1024                   new_pid = my_waitpid (lwpid, &status, WNOHANG);
1025                   if (new_pid == -1 && errno == ECHILD)
1026                     new_pid = my_waitpid (lwpid, &status, __WCLONE | WNOHANG);
1027                   if (new_pid != -1)
1028                     {
1029                       if (WIFSTOPPED (status))
1030                         add_to_pid_list (&stopped_pids, lwpid, status);
1031                       return 1;
1032                     }
1033                 }
1034             }
1035
1036           /* If we fail to attach to the thread, issue a warning,
1037              but continue.  One way this can happen is if thread
1038              creation is interrupted; as of Linux kernel 2.6.19, a
1039              bug may place threads in the thread list and then fail
1040              to create them.  */
1041           warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
1042                    safe_strerror (errno));
1043           return -1;
1044         }
1045
1046       if (debug_linux_nat)
1047         fprintf_unfiltered (gdb_stdlog,
1048                             "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
1049                             target_pid_to_str (ptid));
1050
1051       status = linux_nat_post_attach_wait (ptid, 0, &cloned, &signalled);
1052       if (!WIFSTOPPED (status))
1053         return 1;
1054
1055       lp = add_lwp (ptid);
1056       lp->stopped = 1;
1057       lp->cloned = cloned;
1058       lp->signalled = signalled;
1059       if (WSTOPSIG (status) != SIGSTOP)
1060         {
1061           lp->resumed = 1;
1062           lp->status = status;
1063         }
1064
1065       target_post_attach (ptid_get_lwp (lp->ptid));
1066
1067       if (debug_linux_nat)
1068         {
1069           fprintf_unfiltered (gdb_stdlog,
1070                               "LLAL: waitpid %s received %s\n",
1071                               target_pid_to_str (ptid),
1072                               status_to_str (status));
1073         }
1074     }
1075   else
1076     {
1077       /* We assume that the LWP representing the original process is
1078          already stopped.  Mark it as stopped in the data structure
1079          that the GNU/linux ptrace layer uses to keep track of
1080          threads.  Note that this won't have already been done since
1081          the main thread will have, we assume, been stopped by an
1082          attach from a different layer.  */
1083       if (lp == NULL)
1084         lp = add_lwp (ptid);
1085       lp->stopped = 1;
1086     }
1087
1088   lp->last_resume_kind = resume_stop;
1089   return 0;
1090 }
1091
1092 static void
1093 linux_nat_create_inferior (struct target_ops *ops, 
1094                            char *exec_file, char *allargs, char **env,
1095                            int from_tty)
1096 {
1097 #ifdef HAVE_PERSONALITY
1098   int personality_orig = 0, personality_set = 0;
1099 #endif /* HAVE_PERSONALITY */
1100
1101   /* The fork_child mechanism is synchronous and calls target_wait, so
1102      we have to mask the async mode.  */
1103
1104 #ifdef HAVE_PERSONALITY
1105   if (disable_randomization)
1106     {
1107       errno = 0;
1108       personality_orig = personality (0xffffffff);
1109       if (errno == 0 && !(personality_orig & ADDR_NO_RANDOMIZE))
1110         {
1111           personality_set = 1;
1112           personality (personality_orig | ADDR_NO_RANDOMIZE);
1113         }
1114       if (errno != 0 || (personality_set
1115                          && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
1116         warning (_("Error disabling address space randomization: %s"),
1117                  safe_strerror (errno));
1118     }
1119 #endif /* HAVE_PERSONALITY */
1120
1121   /* Make sure we report all signals during startup.  */
1122   linux_nat_pass_signals (ops, 0, NULL);
1123
1124   linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty);
1125
1126 #ifdef HAVE_PERSONALITY
1127   if (personality_set)
1128     {
1129       errno = 0;
1130       personality (personality_orig);
1131       if (errno != 0)
1132         warning (_("Error restoring address space randomization: %s"),
1133                  safe_strerror (errno));
1134     }
1135 #endif /* HAVE_PERSONALITY */
1136 }
1137
1138 static void
1139 linux_nat_attach (struct target_ops *ops, const char *args, int from_tty)
1140 {
1141   struct lwp_info *lp;
1142   int status;
1143   ptid_t ptid;
1144   volatile struct gdb_exception ex;
1145
1146   /* Make sure we report all signals during attach.  */
1147   linux_nat_pass_signals (ops, 0, NULL);
1148
1149   TRY_CATCH (ex, RETURN_MASK_ERROR)
1150     {
1151       linux_ops->to_attach (ops, args, from_tty);
1152     }
1153   if (ex.reason < 0)
1154     {
1155       pid_t pid = parse_pid_to_attach (args);
1156       struct buffer buffer;
1157       char *message, *buffer_s;
1158
1159       message = xstrdup (ex.message);
1160       make_cleanup (xfree, message);
1161
1162       buffer_init (&buffer);
1163       linux_ptrace_attach_fail_reason (pid, &buffer);
1164
1165       buffer_grow_str0 (&buffer, "");
1166       buffer_s = buffer_finish (&buffer);
1167       make_cleanup (xfree, buffer_s);
1168
1169       if (*buffer_s != '\0')
1170         throw_error (ex.error, "warning: %s\n%s", buffer_s, message);
1171       else
1172         throw_error (ex.error, "%s", message);
1173     }
1174
1175   /* The ptrace base target adds the main thread with (pid,0,0)
1176      format.  Decorate it with lwp info.  */
1177   ptid = ptid_build (ptid_get_pid (inferior_ptid),
1178                      ptid_get_pid (inferior_ptid),
1179                      0);
1180   thread_change_ptid (inferior_ptid, ptid);
1181
1182   /* Add the initial process as the first LWP to the list.  */
1183   lp = add_initial_lwp (ptid);
1184
1185   status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->cloned,
1186                                        &lp->signalled);
1187   if (!WIFSTOPPED (status))
1188     {
1189       if (WIFEXITED (status))
1190         {
1191           int exit_code = WEXITSTATUS (status);
1192
1193           target_terminal_ours ();
1194           target_mourn_inferior ();
1195           if (exit_code == 0)
1196             error (_("Unable to attach: program exited normally."));
1197           else
1198             error (_("Unable to attach: program exited with code %d."),
1199                    exit_code);
1200         }
1201       else if (WIFSIGNALED (status))
1202         {
1203           enum gdb_signal signo;
1204
1205           target_terminal_ours ();
1206           target_mourn_inferior ();
1207
1208           signo = gdb_signal_from_host (WTERMSIG (status));
1209           error (_("Unable to attach: program terminated with signal "
1210                    "%s, %s."),
1211                  gdb_signal_to_name (signo),
1212                  gdb_signal_to_string (signo));
1213         }
1214
1215       internal_error (__FILE__, __LINE__,
1216                       _("unexpected status %d for PID %ld"),
1217                       status, (long) ptid_get_lwp (ptid));
1218     }
1219
1220   lp->stopped = 1;
1221
1222   /* Save the wait status to report later.  */
1223   lp->resumed = 1;
1224   if (debug_linux_nat)
1225     fprintf_unfiltered (gdb_stdlog,
1226                         "LNA: waitpid %ld, saving status %s\n",
1227                         (long) ptid_get_pid (lp->ptid), status_to_str (status));
1228
1229   lp->status = status;
1230
1231   if (target_can_async_p ())
1232     target_async (inferior_event_handler, 0);
1233 }
1234
1235 /* Get pending status of LP.  */
1236 static int
1237 get_pending_status (struct lwp_info *lp, int *status)
1238 {
1239   enum gdb_signal signo = GDB_SIGNAL_0;
1240
1241   /* If we paused threads momentarily, we may have stored pending
1242      events in lp->status or lp->waitstatus (see stop_wait_callback),
1243      and GDB core hasn't seen any signal for those threads.
1244      Otherwise, the last signal reported to the core is found in the
1245      thread object's stop_signal.
1246
1247      There's a corner case that isn't handled here at present.  Only
1248      if the thread stopped with a TARGET_WAITKIND_STOPPED does
1249      stop_signal make sense as a real signal to pass to the inferior.
1250      Some catchpoint related events, like
1251      TARGET_WAITKIND_(V)FORK|EXEC|SYSCALL, have their stop_signal set
1252      to GDB_SIGNAL_SIGTRAP when the catchpoint triggers.  But,
1253      those traps are debug API (ptrace in our case) related and
1254      induced; the inferior wouldn't see them if it wasn't being
1255      traced.  Hence, we should never pass them to the inferior, even
1256      when set to pass state.  Since this corner case isn't handled by
1257      infrun.c when proceeding with a signal, for consistency, neither
1258      do we handle it here (or elsewhere in the file we check for
1259      signal pass state).  Normally SIGTRAP isn't set to pass state, so
1260      this is really a corner case.  */
1261
1262   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
1263     signo = GDB_SIGNAL_0; /* a pending ptrace event, not a real signal.  */
1264   else if (lp->status)
1265     signo = gdb_signal_from_host (WSTOPSIG (lp->status));
1266   else if (non_stop && !is_executing (lp->ptid))
1267     {
1268       struct thread_info *tp = find_thread_ptid (lp->ptid);
1269
1270       signo = tp->suspend.stop_signal;
1271     }
1272   else if (!non_stop)
1273     {
1274       struct target_waitstatus last;
1275       ptid_t last_ptid;
1276
1277       get_last_target_status (&last_ptid, &last);
1278
1279       if (ptid_get_lwp (lp->ptid) == ptid_get_lwp (last_ptid))
1280         {
1281           struct thread_info *tp = find_thread_ptid (lp->ptid);
1282
1283           signo = tp->suspend.stop_signal;
1284         }
1285     }
1286
1287   *status = 0;
1288
1289   if (signo == GDB_SIGNAL_0)
1290     {
1291       if (debug_linux_nat)
1292         fprintf_unfiltered (gdb_stdlog,
1293                             "GPT: lwp %s has no pending signal\n",
1294                             target_pid_to_str (lp->ptid));
1295     }
1296   else if (!signal_pass_state (signo))
1297     {
1298       if (debug_linux_nat)
1299         fprintf_unfiltered (gdb_stdlog,
1300                             "GPT: lwp %s had signal %s, "
1301                             "but it is in no pass state\n",
1302                             target_pid_to_str (lp->ptid),
1303                             gdb_signal_to_string (signo));
1304     }
1305   else
1306     {
1307       *status = W_STOPCODE (gdb_signal_to_host (signo));
1308
1309       if (debug_linux_nat)
1310         fprintf_unfiltered (gdb_stdlog,
1311                             "GPT: lwp %s has pending signal %s\n",
1312                             target_pid_to_str (lp->ptid),
1313                             gdb_signal_to_string (signo));
1314     }
1315
1316   return 0;
1317 }
1318
1319 static int
1320 detach_callback (struct lwp_info *lp, void *data)
1321 {
1322   gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1323
1324   if (debug_linux_nat && lp->status)
1325     fprintf_unfiltered (gdb_stdlog, "DC:  Pending %s for %s on detach.\n",
1326                         strsignal (WSTOPSIG (lp->status)),
1327                         target_pid_to_str (lp->ptid));
1328
1329   /* If there is a pending SIGSTOP, get rid of it.  */
1330   if (lp->signalled)
1331     {
1332       if (debug_linux_nat)
1333         fprintf_unfiltered (gdb_stdlog,
1334                             "DC: Sending SIGCONT to %s\n",
1335                             target_pid_to_str (lp->ptid));
1336
1337       kill_lwp (ptid_get_lwp (lp->ptid), SIGCONT);
1338       lp->signalled = 0;
1339     }
1340
1341   /* We don't actually detach from the LWP that has an id equal to the
1342      overall process id just yet.  */
1343   if (ptid_get_lwp (lp->ptid) != ptid_get_pid (lp->ptid))
1344     {
1345       int status = 0;
1346
1347       /* Pass on any pending signal for this LWP.  */
1348       get_pending_status (lp, &status);
1349
1350       if (linux_nat_prepare_to_resume != NULL)
1351         linux_nat_prepare_to_resume (lp);
1352       errno = 0;
1353       if (ptrace (PTRACE_DETACH, ptid_get_lwp (lp->ptid), 0,
1354                   WSTOPSIG (status)) < 0)
1355         error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
1356                safe_strerror (errno));
1357
1358       if (debug_linux_nat)
1359         fprintf_unfiltered (gdb_stdlog,
1360                             "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1361                             target_pid_to_str (lp->ptid),
1362                             strsignal (WSTOPSIG (status)));
1363
1364       delete_lwp (lp->ptid);
1365     }
1366
1367   return 0;
1368 }
1369
1370 static void
1371 linux_nat_detach (struct target_ops *ops, const char *args, int from_tty)
1372 {
1373   int pid;
1374   int status;
1375   struct lwp_info *main_lwp;
1376
1377   pid = ptid_get_pid (inferior_ptid);
1378
1379   /* Don't unregister from the event loop, as there may be other
1380      inferiors running. */
1381
1382   /* Stop all threads before detaching.  ptrace requires that the
1383      thread is stopped to sucessfully detach.  */
1384   iterate_over_lwps (pid_to_ptid (pid), stop_callback, NULL);
1385   /* ... and wait until all of them have reported back that
1386      they're no longer running.  */
1387   iterate_over_lwps (pid_to_ptid (pid), stop_wait_callback, NULL);
1388
1389   iterate_over_lwps (pid_to_ptid (pid), detach_callback, NULL);
1390
1391   /* Only the initial process should be left right now.  */
1392   gdb_assert (num_lwps (ptid_get_pid (inferior_ptid)) == 1);
1393
1394   main_lwp = find_lwp_pid (pid_to_ptid (pid));
1395
1396   /* Pass on any pending signal for the last LWP.  */
1397   if ((args == NULL || *args == '\0')
1398       && get_pending_status (main_lwp, &status) != -1
1399       && WIFSTOPPED (status))
1400     {
1401       char *tem;
1402
1403       /* Put the signal number in ARGS so that inf_ptrace_detach will
1404          pass it along with PTRACE_DETACH.  */
1405       tem = alloca (8);
1406       xsnprintf (tem, 8, "%d", (int) WSTOPSIG (status));
1407       args = tem;
1408       if (debug_linux_nat)
1409         fprintf_unfiltered (gdb_stdlog,
1410                             "LND: Sending signal %s to %s\n",
1411                             args,
1412                             target_pid_to_str (main_lwp->ptid));
1413     }
1414
1415   if (linux_nat_prepare_to_resume != NULL)
1416     linux_nat_prepare_to_resume (main_lwp);
1417   delete_lwp (main_lwp->ptid);
1418
1419   if (forks_exist_p ())
1420     {
1421       /* Multi-fork case.  The current inferior_ptid is being detached
1422          from, but there are other viable forks to debug.  Detach from
1423          the current fork, and context-switch to the first
1424          available.  */
1425       linux_fork_detach (args, from_tty);
1426     }
1427   else
1428     linux_ops->to_detach (ops, args, from_tty);
1429 }
1430
1431 /* Resume LP.  */
1432
1433 static void
1434 resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
1435 {
1436   if (lp->stopped)
1437     {
1438       struct inferior *inf = find_inferior_pid (ptid_get_pid (lp->ptid));
1439
1440       if (inf->vfork_child != NULL)
1441         {
1442           if (debug_linux_nat)
1443             fprintf_unfiltered (gdb_stdlog,
1444                                 "RC: Not resuming %s (vfork parent)\n",
1445                                 target_pid_to_str (lp->ptid));
1446         }
1447       else if (lp->status == 0
1448                && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
1449         {
1450           if (debug_linux_nat)
1451             fprintf_unfiltered (gdb_stdlog,
1452                                 "RC: Resuming sibling %s, %s, %s\n",
1453                                 target_pid_to_str (lp->ptid),
1454                                 (signo != GDB_SIGNAL_0
1455                                  ? strsignal (gdb_signal_to_host (signo))
1456                                  : "0"),
1457                                 step ? "step" : "resume");
1458
1459           if (linux_nat_prepare_to_resume != NULL)
1460             linux_nat_prepare_to_resume (lp);
1461           linux_ops->to_resume (linux_ops,
1462                                 pid_to_ptid (ptid_get_lwp (lp->ptid)),
1463                                 step, signo);
1464           lp->stopped = 0;
1465           lp->step = step;
1466           lp->stopped_by_watchpoint = 0;
1467         }
1468       else
1469         {
1470           if (debug_linux_nat)
1471             fprintf_unfiltered (gdb_stdlog,
1472                                 "RC: Not resuming sibling %s (has pending)\n",
1473                                 target_pid_to_str (lp->ptid));
1474         }
1475     }
1476   else
1477     {
1478       if (debug_linux_nat)
1479         fprintf_unfiltered (gdb_stdlog,
1480                             "RC: Not resuming sibling %s (not stopped)\n",
1481                             target_pid_to_str (lp->ptid));
1482     }
1483 }
1484
1485 /* Callback for iterate_over_lwps.  If LWP is EXCEPT, do nothing.
1486    Resume LWP with the last stop signal, if it is in pass state.  */
1487
1488 static int
1489 linux_nat_resume_callback (struct lwp_info *lp, void *except)
1490 {
1491   enum gdb_signal signo = GDB_SIGNAL_0;
1492
1493   if (lp == except)
1494     return 0;
1495
1496   if (lp->stopped)
1497     {
1498       struct thread_info *thread;
1499
1500       thread = find_thread_ptid (lp->ptid);
1501       if (thread != NULL)
1502         {
1503           signo = thread->suspend.stop_signal;
1504           thread->suspend.stop_signal = GDB_SIGNAL_0;
1505         }
1506     }
1507
1508   resume_lwp (lp, 0, signo);
1509   return 0;
1510 }
1511
1512 static int
1513 resume_clear_callback (struct lwp_info *lp, void *data)
1514 {
1515   lp->resumed = 0;
1516   lp->last_resume_kind = resume_stop;
1517   return 0;
1518 }
1519
1520 static int
1521 resume_set_callback (struct lwp_info *lp, void *data)
1522 {
1523   lp->resumed = 1;
1524   lp->last_resume_kind = resume_continue;
1525   return 0;
1526 }
1527
1528 static void
1529 linux_nat_resume (struct target_ops *ops,
1530                   ptid_t ptid, int step, enum gdb_signal signo)
1531 {
1532   struct lwp_info *lp;
1533   int resume_many;
1534
1535   if (debug_linux_nat)
1536     fprintf_unfiltered (gdb_stdlog,
1537                         "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1538                         step ? "step" : "resume",
1539                         target_pid_to_str (ptid),
1540                         (signo != GDB_SIGNAL_0
1541                          ? strsignal (gdb_signal_to_host (signo)) : "0"),
1542                         target_pid_to_str (inferior_ptid));
1543
1544   /* A specific PTID means `step only this process id'.  */
1545   resume_many = (ptid_equal (minus_one_ptid, ptid)
1546                  || ptid_is_pid (ptid));
1547
1548   /* Mark the lwps we're resuming as resumed.  */
1549   iterate_over_lwps (ptid, resume_set_callback, NULL);
1550
1551   /* See if it's the current inferior that should be handled
1552      specially.  */
1553   if (resume_many)
1554     lp = find_lwp_pid (inferior_ptid);
1555   else
1556     lp = find_lwp_pid (ptid);
1557   gdb_assert (lp != NULL);
1558
1559   /* Remember if we're stepping.  */
1560   lp->step = step;
1561   lp->last_resume_kind = step ? resume_step : resume_continue;
1562
1563   /* If we have a pending wait status for this thread, there is no
1564      point in resuming the process.  But first make sure that
1565      linux_nat_wait won't preemptively handle the event - we
1566      should never take this short-circuit if we are going to
1567      leave LP running, since we have skipped resuming all the
1568      other threads.  This bit of code needs to be synchronized
1569      with linux_nat_wait.  */
1570
1571   if (lp->status && WIFSTOPPED (lp->status))
1572     {
1573       if (!lp->step
1574           && WSTOPSIG (lp->status)
1575           && sigismember (&pass_mask, WSTOPSIG (lp->status)))
1576         {
1577           if (debug_linux_nat)
1578             fprintf_unfiltered (gdb_stdlog,
1579                                 "LLR: Not short circuiting for ignored "
1580                                 "status 0x%x\n", lp->status);
1581
1582           /* FIXME: What should we do if we are supposed to continue
1583              this thread with a signal?  */
1584           gdb_assert (signo == GDB_SIGNAL_0);
1585           signo = gdb_signal_from_host (WSTOPSIG (lp->status));
1586           lp->status = 0;
1587         }
1588     }
1589
1590   if (lp->status || lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
1591     {
1592       /* FIXME: What should we do if we are supposed to continue
1593          this thread with a signal?  */
1594       gdb_assert (signo == GDB_SIGNAL_0);
1595
1596       if (debug_linux_nat)
1597         fprintf_unfiltered (gdb_stdlog,
1598                             "LLR: Short circuiting for status 0x%x\n",
1599                             lp->status);
1600
1601       if (target_can_async_p ())
1602         {
1603           target_async (inferior_event_handler, 0);
1604           /* Tell the event loop we have something to process.  */
1605           async_file_mark ();
1606         }
1607       return;
1608     }
1609
1610   if (resume_many)
1611     iterate_over_lwps (ptid, linux_nat_resume_callback, lp);
1612
1613   /* Convert to something the lower layer understands.  */
1614   ptid = pid_to_ptid (ptid_get_lwp (lp->ptid));
1615
1616   if (linux_nat_prepare_to_resume != NULL)
1617     linux_nat_prepare_to_resume (lp);
1618   linux_ops->to_resume (linux_ops, ptid, step, signo);
1619   lp->stopped_by_watchpoint = 0;
1620   lp->stopped = 0;
1621
1622   if (debug_linux_nat)
1623     fprintf_unfiltered (gdb_stdlog,
1624                         "LLR: %s %s, %s (resume event thread)\n",
1625                         step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1626                         target_pid_to_str (ptid),
1627                         (signo != GDB_SIGNAL_0
1628                          ? strsignal (gdb_signal_to_host (signo)) : "0"));
1629
1630   if (target_can_async_p ())
1631     target_async (inferior_event_handler, 0);
1632 }
1633
1634 /* Send a signal to an LWP.  */
1635
1636 static int
1637 kill_lwp (int lwpid, int signo)
1638 {
1639   /* Use tkill, if possible, in case we are using nptl threads.  If tkill
1640      fails, then we are not using nptl threads and we should be using kill.  */
1641
1642 #ifdef HAVE_TKILL_SYSCALL
1643   {
1644     static int tkill_failed;
1645
1646     if (!tkill_failed)
1647       {
1648         int ret;
1649
1650         errno = 0;
1651         ret = syscall (__NR_tkill, lwpid, signo);
1652         if (errno != ENOSYS)
1653           return ret;
1654         tkill_failed = 1;
1655       }
1656   }
1657 #endif
1658
1659   return kill (lwpid, signo);
1660 }
1661
1662 /* Handle a GNU/Linux syscall trap wait response.  If we see a syscall
1663    event, check if the core is interested in it: if not, ignore the
1664    event, and keep waiting; otherwise, we need to toggle the LWP's
1665    syscall entry/exit status, since the ptrace event itself doesn't
1666    indicate it, and report the trap to higher layers.  */
1667
1668 static int
1669 linux_handle_syscall_trap (struct lwp_info *lp, int stopping)
1670 {
1671   struct target_waitstatus *ourstatus = &lp->waitstatus;
1672   struct gdbarch *gdbarch = target_thread_architecture (lp->ptid);
1673   int syscall_number = (int) gdbarch_get_syscall_number (gdbarch, lp->ptid);
1674
1675   if (stopping)
1676     {
1677       /* If we're stopping threads, there's a SIGSTOP pending, which
1678          makes it so that the LWP reports an immediate syscall return,
1679          followed by the SIGSTOP.  Skip seeing that "return" using
1680          PTRACE_CONT directly, and let stop_wait_callback collect the
1681          SIGSTOP.  Later when the thread is resumed, a new syscall
1682          entry event.  If we didn't do this (and returned 0), we'd
1683          leave a syscall entry pending, and our caller, by using
1684          PTRACE_CONT to collect the SIGSTOP, skips the syscall return
1685          itself.  Later, when the user re-resumes this LWP, we'd see
1686          another syscall entry event and we'd mistake it for a return.
1687
1688          If stop_wait_callback didn't force the SIGSTOP out of the LWP
1689          (leaving immediately with LWP->signalled set, without issuing
1690          a PTRACE_CONT), it would still be problematic to leave this
1691          syscall enter pending, as later when the thread is resumed,
1692          it would then see the same syscall exit mentioned above,
1693          followed by the delayed SIGSTOP, while the syscall didn't
1694          actually get to execute.  It seems it would be even more
1695          confusing to the user.  */
1696
1697       if (debug_linux_nat)
1698         fprintf_unfiltered (gdb_stdlog,
1699                             "LHST: ignoring syscall %d "
1700                             "for LWP %ld (stopping threads), "
1701                             "resuming with PTRACE_CONT for SIGSTOP\n",
1702                             syscall_number,
1703                             ptid_get_lwp (lp->ptid));
1704
1705       lp->syscall_state = TARGET_WAITKIND_IGNORE;
1706       ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
1707       lp->stopped = 0;
1708       return 1;
1709     }
1710
1711   if (catch_syscall_enabled ())
1712     {
1713       /* Always update the entry/return state, even if this particular
1714          syscall isn't interesting to the core now.  In async mode,
1715          the user could install a new catchpoint for this syscall
1716          between syscall enter/return, and we'll need to know to
1717          report a syscall return if that happens.  */
1718       lp->syscall_state = (lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
1719                            ? TARGET_WAITKIND_SYSCALL_RETURN
1720                            : TARGET_WAITKIND_SYSCALL_ENTRY);
1721
1722       if (catching_syscall_number (syscall_number))
1723         {
1724           /* Alright, an event to report.  */
1725           ourstatus->kind = lp->syscall_state;
1726           ourstatus->value.syscall_number = syscall_number;
1727
1728           if (debug_linux_nat)
1729             fprintf_unfiltered (gdb_stdlog,
1730                                 "LHST: stopping for %s of syscall %d"
1731                                 " for LWP %ld\n",
1732                                 lp->syscall_state
1733                                 == TARGET_WAITKIND_SYSCALL_ENTRY
1734                                 ? "entry" : "return",
1735                                 syscall_number,
1736                                 ptid_get_lwp (lp->ptid));
1737           return 0;
1738         }
1739
1740       if (debug_linux_nat)
1741         fprintf_unfiltered (gdb_stdlog,
1742                             "LHST: ignoring %s of syscall %d "
1743                             "for LWP %ld\n",
1744                             lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
1745                             ? "entry" : "return",
1746                             syscall_number,
1747                             ptid_get_lwp (lp->ptid));
1748     }
1749   else
1750     {
1751       /* If we had been syscall tracing, and hence used PT_SYSCALL
1752          before on this LWP, it could happen that the user removes all
1753          syscall catchpoints before we get to process this event.
1754          There are two noteworthy issues here:
1755
1756          - When stopped at a syscall entry event, resuming with
1757            PT_STEP still resumes executing the syscall and reports a
1758            syscall return.
1759
1760          - Only PT_SYSCALL catches syscall enters.  If we last
1761            single-stepped this thread, then this event can't be a
1762            syscall enter.  If we last single-stepped this thread, this
1763            has to be a syscall exit.
1764
1765          The points above mean that the next resume, be it PT_STEP or
1766          PT_CONTINUE, can not trigger a syscall trace event.  */
1767       if (debug_linux_nat)
1768         fprintf_unfiltered (gdb_stdlog,
1769                             "LHST: caught syscall event "
1770                             "with no syscall catchpoints."
1771                             " %d for LWP %ld, ignoring\n",
1772                             syscall_number,
1773                             ptid_get_lwp (lp->ptid));
1774       lp->syscall_state = TARGET_WAITKIND_IGNORE;
1775     }
1776
1777   /* The core isn't interested in this event.  For efficiency, avoid
1778      stopping all threads only to have the core resume them all again.
1779      Since we're not stopping threads, if we're still syscall tracing
1780      and not stepping, we can't use PTRACE_CONT here, as we'd miss any
1781      subsequent syscall.  Simply resume using the inf-ptrace layer,
1782      which knows when to use PT_SYSCALL or PT_CONTINUE.  */
1783
1784   /* Note that gdbarch_get_syscall_number may access registers, hence
1785      fill a regcache.  */
1786   registers_changed ();
1787   if (linux_nat_prepare_to_resume != NULL)
1788     linux_nat_prepare_to_resume (lp);
1789   linux_ops->to_resume (linux_ops, pid_to_ptid (ptid_get_lwp (lp->ptid)),
1790                         lp->step, GDB_SIGNAL_0);
1791   lp->stopped = 0;
1792   return 1;
1793 }
1794
1795 /* Handle a GNU/Linux extended wait response.  If we see a clone
1796    event, we need to add the new LWP to our list (and not report the
1797    trap to higher layers).  This function returns non-zero if the
1798    event should be ignored and we should wait again.  If STOPPING is
1799    true, the new LWP remains stopped, otherwise it is continued.  */
1800
1801 static int
1802 linux_handle_extended_wait (struct lwp_info *lp, int status,
1803                             int stopping)
1804 {
1805   int pid = ptid_get_lwp (lp->ptid);
1806   struct target_waitstatus *ourstatus = &lp->waitstatus;
1807   int event = linux_ptrace_get_extended_event (status);
1808
1809   if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1810       || event == PTRACE_EVENT_CLONE)
1811     {
1812       unsigned long new_pid;
1813       int ret;
1814
1815       ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
1816
1817       /* If we haven't already seen the new PID stop, wait for it now.  */
1818       if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1819         {
1820           /* The new child has a pending SIGSTOP.  We can't affect it until it
1821              hits the SIGSTOP, but we're already attached.  */
1822           ret = my_waitpid (new_pid, &status,
1823                             (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1824           if (ret == -1)
1825             perror_with_name (_("waiting for new child"));
1826           else if (ret != new_pid)
1827             internal_error (__FILE__, __LINE__,
1828                             _("wait returned unexpected PID %d"), ret);
1829           else if (!WIFSTOPPED (status))
1830             internal_error (__FILE__, __LINE__,
1831                             _("wait returned unexpected status 0x%x"), status);
1832         }
1833
1834       ourstatus->value.related_pid = ptid_build (new_pid, new_pid, 0);
1835
1836       if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK)
1837         {
1838           /* The arch-specific native code may need to know about new
1839              forks even if those end up never mapped to an
1840              inferior.  */
1841           if (linux_nat_new_fork != NULL)
1842             linux_nat_new_fork (lp, new_pid);
1843         }
1844
1845       if (event == PTRACE_EVENT_FORK
1846           && linux_fork_checkpointing_p (ptid_get_pid (lp->ptid)))
1847         {
1848           /* Handle checkpointing by linux-fork.c here as a special
1849              case.  We don't want the follow-fork-mode or 'catch fork'
1850              to interfere with this.  */
1851
1852           /* This won't actually modify the breakpoint list, but will
1853              physically remove the breakpoints from the child.  */
1854           detach_breakpoints (ptid_build (new_pid, new_pid, 0));
1855
1856           /* Retain child fork in ptrace (stopped) state.  */
1857           if (!find_fork_pid (new_pid))
1858             add_fork (new_pid);
1859
1860           /* Report as spurious, so that infrun doesn't want to follow
1861              this fork.  We're actually doing an infcall in
1862              linux-fork.c.  */
1863           ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
1864
1865           /* Report the stop to the core.  */
1866           return 0;
1867         }
1868
1869       if (event == PTRACE_EVENT_FORK)
1870         ourstatus->kind = TARGET_WAITKIND_FORKED;
1871       else if (event == PTRACE_EVENT_VFORK)
1872         ourstatus->kind = TARGET_WAITKIND_VFORKED;
1873       else
1874         {
1875           struct lwp_info *new_lp;
1876
1877           ourstatus->kind = TARGET_WAITKIND_IGNORE;
1878
1879           if (debug_linux_nat)
1880             fprintf_unfiltered (gdb_stdlog,
1881                                 "LHEW: Got clone event "
1882                                 "from LWP %d, new child is LWP %ld\n",
1883                                 pid, new_pid);
1884
1885           new_lp = add_lwp (ptid_build (ptid_get_pid (lp->ptid), new_pid, 0));
1886           new_lp->cloned = 1;
1887           new_lp->stopped = 1;
1888
1889           if (WSTOPSIG (status) != SIGSTOP)
1890             {
1891               /* This can happen if someone starts sending signals to
1892                  the new thread before it gets a chance to run, which
1893                  have a lower number than SIGSTOP (e.g. SIGUSR1).
1894                  This is an unlikely case, and harder to handle for
1895                  fork / vfork than for clone, so we do not try - but
1896                  we handle it for clone events here.  We'll send
1897                  the other signal on to the thread below.  */
1898
1899               new_lp->signalled = 1;
1900             }
1901           else
1902             {
1903               struct thread_info *tp;
1904
1905               /* When we stop for an event in some other thread, and
1906                  pull the thread list just as this thread has cloned,
1907                  we'll have seen the new thread in the thread_db list
1908                  before handling the CLONE event (glibc's
1909                  pthread_create adds the new thread to the thread list
1910                  before clone'ing, and has the kernel fill in the
1911                  thread's tid on the clone call with
1912                  CLONE_PARENT_SETTID).  If that happened, and the core
1913                  had requested the new thread to stop, we'll have
1914                  killed it with SIGSTOP.  But since SIGSTOP is not an
1915                  RT signal, it can only be queued once.  We need to be
1916                  careful to not resume the LWP if we wanted it to
1917                  stop.  In that case, we'll leave the SIGSTOP pending.
1918                  It will later be reported as GDB_SIGNAL_0.  */
1919               tp = find_thread_ptid (new_lp->ptid);
1920               if (tp != NULL && tp->stop_requested)
1921                 new_lp->last_resume_kind = resume_stop;
1922               else
1923                 status = 0;
1924             }
1925
1926           if (non_stop)
1927             {
1928               /* Add the new thread to GDB's lists as soon as possible
1929                  so that:
1930
1931                  1) the frontend doesn't have to wait for a stop to
1932                  display them, and,
1933
1934                  2) we tag it with the correct running state.  */
1935
1936               /* If the thread_db layer is active, let it know about
1937                  this new thread, and add it to GDB's list.  */
1938               if (!thread_db_attach_lwp (new_lp->ptid))
1939                 {
1940                   /* We're not using thread_db.  Add it to GDB's
1941                      list.  */
1942                   target_post_attach (ptid_get_lwp (new_lp->ptid));
1943                   add_thread (new_lp->ptid);
1944                 }
1945
1946               if (!stopping)
1947                 {
1948                   set_running (new_lp->ptid, 1);
1949                   set_executing (new_lp->ptid, 1);
1950                   /* thread_db_attach_lwp -> lin_lwp_attach_lwp forced
1951                      resume_stop.  */
1952                   new_lp->last_resume_kind = resume_continue;
1953                 }
1954             }
1955
1956           if (status != 0)
1957             {
1958               /* We created NEW_LP so it cannot yet contain STATUS.  */
1959               gdb_assert (new_lp->status == 0);
1960
1961               /* Save the wait status to report later.  */
1962               if (debug_linux_nat)
1963                 fprintf_unfiltered (gdb_stdlog,
1964                                     "LHEW: waitpid of new LWP %ld, "
1965                                     "saving status %s\n",
1966                                     (long) ptid_get_lwp (new_lp->ptid),
1967                                     status_to_str (status));
1968               new_lp->status = status;
1969             }
1970
1971           /* Note the need to use the low target ops to resume, to
1972              handle resuming with PT_SYSCALL if we have syscall
1973              catchpoints.  */
1974           if (!stopping)
1975             {
1976               new_lp->resumed = 1;
1977
1978               if (status == 0)
1979                 {
1980                   gdb_assert (new_lp->last_resume_kind == resume_continue);
1981                   if (debug_linux_nat)
1982                     fprintf_unfiltered (gdb_stdlog,
1983                                         "LHEW: resuming new LWP %ld\n",
1984                                         ptid_get_lwp (new_lp->ptid));
1985                   if (linux_nat_prepare_to_resume != NULL)
1986                     linux_nat_prepare_to_resume (new_lp);
1987                   linux_ops->to_resume (linux_ops, pid_to_ptid (new_pid),
1988                                         0, GDB_SIGNAL_0);
1989                   new_lp->stopped = 0;
1990                 }
1991             }
1992
1993           if (debug_linux_nat)
1994             fprintf_unfiltered (gdb_stdlog,
1995                                 "LHEW: resuming parent LWP %d\n", pid);
1996           if (linux_nat_prepare_to_resume != NULL)
1997             linux_nat_prepare_to_resume (lp);
1998           linux_ops->to_resume (linux_ops,
1999                                 pid_to_ptid (ptid_get_lwp (lp->ptid)),
2000                                 0, GDB_SIGNAL_0);
2001           lp->stopped = 0;
2002           return 1;
2003         }
2004
2005       return 0;
2006     }
2007
2008   if (event == PTRACE_EVENT_EXEC)
2009     {
2010       if (debug_linux_nat)
2011         fprintf_unfiltered (gdb_stdlog,
2012                             "LHEW: Got exec event from LWP %ld\n",
2013                             ptid_get_lwp (lp->ptid));
2014
2015       ourstatus->kind = TARGET_WAITKIND_EXECD;
2016       ourstatus->value.execd_pathname
2017         = xstrdup (linux_child_pid_to_exec_file (NULL, pid));
2018
2019       return 0;
2020     }
2021
2022   if (event == PTRACE_EVENT_VFORK_DONE)
2023     {
2024       if (current_inferior ()->waiting_for_vfork_done)
2025         {
2026           if (debug_linux_nat)
2027             fprintf_unfiltered (gdb_stdlog,
2028                                 "LHEW: Got expected PTRACE_EVENT_"
2029                                 "VFORK_DONE from LWP %ld: stopping\n",
2030                                 ptid_get_lwp (lp->ptid));
2031
2032           ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
2033           return 0;
2034         }
2035
2036       if (debug_linux_nat)
2037         fprintf_unfiltered (gdb_stdlog,
2038                             "LHEW: Got PTRACE_EVENT_VFORK_DONE "
2039                             "from LWP %ld: resuming\n",
2040                             ptid_get_lwp (lp->ptid));
2041       ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
2042       return 1;
2043     }
2044
2045   internal_error (__FILE__, __LINE__,
2046                   _("unknown ptrace event %d"), event);
2047 }
2048
2049 /* Wait for LP to stop.  Returns the wait status, or 0 if the LWP has
2050    exited.  */
2051
2052 static int
2053 wait_lwp (struct lwp_info *lp)
2054 {
2055   pid_t pid;
2056   int status = 0;
2057   int thread_dead = 0;
2058   sigset_t prev_mask;
2059
2060   gdb_assert (!lp->stopped);
2061   gdb_assert (lp->status == 0);
2062
2063   /* Make sure SIGCHLD is blocked for sigsuspend avoiding a race below.  */
2064   block_child_signals (&prev_mask);
2065
2066   for (;;)
2067     {
2068       /* If my_waitpid returns 0 it means the __WCLONE vs. non-__WCLONE kind
2069          was right and we should just call sigsuspend.  */
2070
2071       pid = my_waitpid (ptid_get_lwp (lp->ptid), &status, WNOHANG);
2072       if (pid == -1 && errno == ECHILD)
2073         pid = my_waitpid (ptid_get_lwp (lp->ptid), &status, __WCLONE | WNOHANG);
2074       if (pid == -1 && errno == ECHILD)
2075         {
2076           /* The thread has previously exited.  We need to delete it
2077              now because, for some vendor 2.4 kernels with NPTL
2078              support backported, there won't be an exit event unless
2079              it is the main thread.  2.6 kernels will report an exit
2080              event for each thread that exits, as expected.  */
2081           thread_dead = 1;
2082           if (debug_linux_nat)
2083             fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
2084                                 target_pid_to_str (lp->ptid));
2085         }
2086       if (pid != 0)
2087         break;
2088
2089       /* Bugs 10970, 12702.
2090          Thread group leader may have exited in which case we'll lock up in
2091          waitpid if there are other threads, even if they are all zombies too.
2092          Basically, we're not supposed to use waitpid this way.
2093          __WCLONE is not applicable for the leader so we can't use that.
2094          LINUX_NAT_THREAD_ALIVE cannot be used here as it requires a STOPPED
2095          process; it gets ESRCH both for the zombie and for running processes.
2096
2097          As a workaround, check if we're waiting for the thread group leader and
2098          if it's a zombie, and avoid calling waitpid if it is.
2099
2100          This is racy, what if the tgl becomes a zombie right after we check?
2101          Therefore always use WNOHANG with sigsuspend - it is equivalent to
2102          waiting waitpid but linux_proc_pid_is_zombie is safe this way.  */
2103
2104       if (ptid_get_pid (lp->ptid) == ptid_get_lwp (lp->ptid)
2105           && linux_proc_pid_is_zombie (ptid_get_lwp (lp->ptid)))
2106         {
2107           thread_dead = 1;
2108           if (debug_linux_nat)
2109             fprintf_unfiltered (gdb_stdlog,
2110                                 "WL: Thread group leader %s vanished.\n",
2111                                 target_pid_to_str (lp->ptid));
2112           break;
2113         }
2114
2115       /* Wait for next SIGCHLD and try again.  This may let SIGCHLD handlers
2116          get invoked despite our caller had them intentionally blocked by
2117          block_child_signals.  This is sensitive only to the loop of
2118          linux_nat_wait_1 and there if we get called my_waitpid gets called
2119          again before it gets to sigsuspend so we can safely let the handlers
2120          get executed here.  */
2121
2122       if (debug_linux_nat)
2123         fprintf_unfiltered (gdb_stdlog, "WL: about to sigsuspend\n");
2124       sigsuspend (&suspend_mask);
2125     }
2126
2127   restore_child_signals_mask (&prev_mask);
2128
2129   if (!thread_dead)
2130     {
2131       gdb_assert (pid == ptid_get_lwp (lp->ptid));
2132
2133       if (debug_linux_nat)
2134         {
2135           fprintf_unfiltered (gdb_stdlog,
2136                               "WL: waitpid %s received %s\n",
2137                               target_pid_to_str (lp->ptid),
2138                               status_to_str (status));
2139         }
2140
2141       /* Check if the thread has exited.  */
2142       if (WIFEXITED (status) || WIFSIGNALED (status))
2143         {
2144           thread_dead = 1;
2145           if (debug_linux_nat)
2146             fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
2147                                 target_pid_to_str (lp->ptid));
2148         }
2149     }
2150
2151   if (thread_dead)
2152     {
2153       exit_lwp (lp);
2154       return 0;
2155     }
2156
2157   gdb_assert (WIFSTOPPED (status));
2158   lp->stopped = 1;
2159
2160   /* Handle GNU/Linux's syscall SIGTRAPs.  */
2161   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
2162     {
2163       /* No longer need the sysgood bit.  The ptrace event ends up
2164          recorded in lp->waitstatus if we care for it.  We can carry
2165          on handling the event like a regular SIGTRAP from here
2166          on.  */
2167       status = W_STOPCODE (SIGTRAP);
2168       if (linux_handle_syscall_trap (lp, 1))
2169         return wait_lwp (lp);
2170     }
2171
2172   /* Handle GNU/Linux's extended waitstatus for trace events.  */
2173   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP
2174       && linux_is_extended_waitstatus (status))
2175     {
2176       if (debug_linux_nat)
2177         fprintf_unfiltered (gdb_stdlog,
2178                             "WL: Handling extended status 0x%06x\n",
2179                             status);
2180       if (linux_handle_extended_wait (lp, status, 1))
2181         return wait_lwp (lp);
2182     }
2183
2184   return status;
2185 }
2186
2187 /* Send a SIGSTOP to LP.  */
2188
2189 static int
2190 stop_callback (struct lwp_info *lp, void *data)
2191 {
2192   if (!lp->stopped && !lp->signalled)
2193     {
2194       int ret;
2195
2196       if (debug_linux_nat)
2197         {
2198           fprintf_unfiltered (gdb_stdlog,
2199                               "SC:  kill %s **<SIGSTOP>**\n",
2200                               target_pid_to_str (lp->ptid));
2201         }
2202       errno = 0;
2203       ret = kill_lwp (ptid_get_lwp (lp->ptid), SIGSTOP);
2204       if (debug_linux_nat)
2205         {
2206           fprintf_unfiltered (gdb_stdlog,
2207                               "SC:  lwp kill %d %s\n",
2208                               ret,
2209                               errno ? safe_strerror (errno) : "ERRNO-OK");
2210         }
2211
2212       lp->signalled = 1;
2213       gdb_assert (lp->status == 0);
2214     }
2215
2216   return 0;
2217 }
2218
2219 /* Request a stop on LWP.  */
2220
2221 void
2222 linux_stop_lwp (struct lwp_info *lwp)
2223 {
2224   stop_callback (lwp, NULL);
2225 }
2226
2227 /* Return non-zero if LWP PID has a pending SIGINT.  */
2228
2229 static int
2230 linux_nat_has_pending_sigint (int pid)
2231 {
2232   sigset_t pending, blocked, ignored;
2233
2234   linux_proc_pending_signals (pid, &pending, &blocked, &ignored);
2235
2236   if (sigismember (&pending, SIGINT)
2237       && !sigismember (&ignored, SIGINT))
2238     return 1;
2239
2240   return 0;
2241 }
2242
2243 /* Set a flag in LP indicating that we should ignore its next SIGINT.  */
2244
2245 static int
2246 set_ignore_sigint (struct lwp_info *lp, void *data)
2247 {
2248   /* If a thread has a pending SIGINT, consume it; otherwise, set a
2249      flag to consume the next one.  */
2250   if (lp->stopped && lp->status != 0 && WIFSTOPPED (lp->status)
2251       && WSTOPSIG (lp->status) == SIGINT)
2252     lp->status = 0;
2253   else
2254     lp->ignore_sigint = 1;
2255
2256   return 0;
2257 }
2258
2259 /* If LP does not have a SIGINT pending, then clear the ignore_sigint flag.
2260    This function is called after we know the LWP has stopped; if the LWP
2261    stopped before the expected SIGINT was delivered, then it will never have
2262    arrived.  Also, if the signal was delivered to a shared queue and consumed
2263    by a different thread, it will never be delivered to this LWP.  */
2264
2265 static void
2266 maybe_clear_ignore_sigint (struct lwp_info *lp)
2267 {
2268   if (!lp->ignore_sigint)
2269     return;
2270
2271   if (!linux_nat_has_pending_sigint (ptid_get_lwp (lp->ptid)))
2272     {
2273       if (debug_linux_nat)
2274         fprintf_unfiltered (gdb_stdlog,
2275                             "MCIS: Clearing bogus flag for %s\n",
2276                             target_pid_to_str (lp->ptid));
2277       lp->ignore_sigint = 0;
2278     }
2279 }
2280
2281 /* Fetch the possible triggered data watchpoint info and store it in
2282    LP.
2283
2284    On some archs, like x86, that use debug registers to set
2285    watchpoints, it's possible that the way to know which watched
2286    address trapped, is to check the register that is used to select
2287    which address to watch.  Problem is, between setting the watchpoint
2288    and reading back which data address trapped, the user may change
2289    the set of watchpoints, and, as a consequence, GDB changes the
2290    debug registers in the inferior.  To avoid reading back a stale
2291    stopped-data-address when that happens, we cache in LP the fact
2292    that a watchpoint trapped, and the corresponding data address, as
2293    soon as we see LP stop with a SIGTRAP.  If GDB changes the debug
2294    registers meanwhile, we have the cached data we can rely on.  */
2295
2296 static void
2297 save_sigtrap (struct lwp_info *lp)
2298 {
2299   struct cleanup *old_chain;
2300
2301   if (linux_ops->to_stopped_by_watchpoint == NULL)
2302     {
2303       lp->stopped_by_watchpoint = 0;
2304       return;
2305     }
2306
2307   old_chain = save_inferior_ptid ();
2308   inferior_ptid = lp->ptid;
2309
2310   lp->stopped_by_watchpoint = linux_ops->to_stopped_by_watchpoint (linux_ops);
2311
2312   if (lp->stopped_by_watchpoint)
2313     {
2314       if (linux_ops->to_stopped_data_address != NULL)
2315         lp->stopped_data_address_p =
2316           linux_ops->to_stopped_data_address (&current_target,
2317                                               &lp->stopped_data_address);
2318       else
2319         lp->stopped_data_address_p = 0;
2320     }
2321
2322   do_cleanups (old_chain);
2323 }
2324
2325 /* See save_sigtrap.  */
2326
2327 static int
2328 linux_nat_stopped_by_watchpoint (struct target_ops *ops)
2329 {
2330   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2331
2332   gdb_assert (lp != NULL);
2333
2334   return lp->stopped_by_watchpoint;
2335 }
2336
2337 static int
2338 linux_nat_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
2339 {
2340   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2341
2342   gdb_assert (lp != NULL);
2343
2344   *addr_p = lp->stopped_data_address;
2345
2346   return lp->stopped_data_address_p;
2347 }
2348
2349 /* Commonly any breakpoint / watchpoint generate only SIGTRAP.  */
2350
2351 static int
2352 sigtrap_is_event (int status)
2353 {
2354   return WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP;
2355 }
2356
2357 /* SIGTRAP-like events recognizer.  */
2358
2359 static int (*linux_nat_status_is_event) (int status) = sigtrap_is_event;
2360
2361 /* Check for SIGTRAP-like events in LP.  */
2362
2363 static int
2364 linux_nat_lp_status_is_event (struct lwp_info *lp)
2365 {
2366   /* We check for lp->waitstatus in addition to lp->status, because we can
2367      have pending process exits recorded in lp->status
2368      and W_EXITCODE(0,0) == 0.  We should probably have an additional
2369      lp->status_p flag.  */
2370
2371   return (lp->waitstatus.kind == TARGET_WAITKIND_IGNORE
2372           && linux_nat_status_is_event (lp->status));
2373 }
2374
2375 /* Set alternative SIGTRAP-like events recognizer.  If
2376    breakpoint_inserted_here_p there then gdbarch_decr_pc_after_break will be
2377    applied.  */
2378
2379 void
2380 linux_nat_set_status_is_event (struct target_ops *t,
2381                                int (*status_is_event) (int status))
2382 {
2383   linux_nat_status_is_event = status_is_event;
2384 }
2385
2386 /* Wait until LP is stopped.  */
2387
2388 static int
2389 stop_wait_callback (struct lwp_info *lp, void *data)
2390 {
2391   struct inferior *inf = find_inferior_pid (ptid_get_pid (lp->ptid));
2392
2393   /* If this is a vfork parent, bail out, it is not going to report
2394      any SIGSTOP until the vfork is done with.  */
2395   if (inf->vfork_child != NULL)
2396     return 0;
2397
2398   if (!lp->stopped)
2399     {
2400       int status;
2401
2402       status = wait_lwp (lp);
2403       if (status == 0)
2404         return 0;
2405
2406       if (lp->ignore_sigint && WIFSTOPPED (status)
2407           && WSTOPSIG (status) == SIGINT)
2408         {
2409           lp->ignore_sigint = 0;
2410
2411           errno = 0;
2412           ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
2413           lp->stopped = 0;
2414           if (debug_linux_nat)
2415             fprintf_unfiltered (gdb_stdlog,
2416                                 "PTRACE_CONT %s, 0, 0 (%s) "
2417                                 "(discarding SIGINT)\n",
2418                                 target_pid_to_str (lp->ptid),
2419                                 errno ? safe_strerror (errno) : "OK");
2420
2421           return stop_wait_callback (lp, NULL);
2422         }
2423
2424       maybe_clear_ignore_sigint (lp);
2425
2426       if (WSTOPSIG (status) != SIGSTOP)
2427         {
2428           /* The thread was stopped with a signal other than SIGSTOP.  */
2429
2430           save_sigtrap (lp);
2431
2432           if (debug_linux_nat)
2433             fprintf_unfiltered (gdb_stdlog,
2434                                 "SWC: Pending event %s in %s\n",
2435                                 status_to_str ((int) status),
2436                                 target_pid_to_str (lp->ptid));
2437
2438           /* Save the sigtrap event.  */
2439           lp->status = status;
2440           gdb_assert (lp->signalled);
2441         }
2442       else
2443         {
2444           /* We caught the SIGSTOP that we intended to catch, so
2445              there's no SIGSTOP pending.  */
2446
2447           if (debug_linux_nat)
2448             fprintf_unfiltered (gdb_stdlog,
2449                                 "SWC: Delayed SIGSTOP caught for %s.\n",
2450                                 target_pid_to_str (lp->ptid));
2451
2452           /* Reset SIGNALLED only after the stop_wait_callback call
2453              above as it does gdb_assert on SIGNALLED.  */
2454           lp->signalled = 0;
2455         }
2456     }
2457
2458   return 0;
2459 }
2460
2461 /* Return non-zero if LP has a wait status pending.  */
2462
2463 static int
2464 status_callback (struct lwp_info *lp, void *data)
2465 {
2466   /* Only report a pending wait status if we pretend that this has
2467      indeed been resumed.  */
2468   if (!lp->resumed)
2469     return 0;
2470
2471   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2472     {
2473       /* A ptrace event, like PTRACE_FORK|VFORK|EXEC, syscall event,
2474          or a pending process exit.  Note that `W_EXITCODE(0,0) ==
2475          0', so a clean process exit can not be stored pending in
2476          lp->status, it is indistinguishable from
2477          no-pending-status.  */
2478       return 1;
2479     }
2480
2481   if (lp->status != 0)
2482     return 1;
2483
2484   return 0;
2485 }
2486
2487 /* Return non-zero if LP isn't stopped.  */
2488
2489 static int
2490 running_callback (struct lwp_info *lp, void *data)
2491 {
2492   return (!lp->stopped
2493           || ((lp->status != 0
2494                || lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2495               && lp->resumed));
2496 }
2497
2498 /* Count the LWP's that have had events.  */
2499
2500 static int
2501 count_events_callback (struct lwp_info *lp, void *data)
2502 {
2503   int *count = data;
2504
2505   gdb_assert (count != NULL);
2506
2507   /* Count only resumed LWPs that have a SIGTRAP event pending.  */
2508   if (lp->resumed && linux_nat_lp_status_is_event (lp))
2509     (*count)++;
2510
2511   return 0;
2512 }
2513
2514 /* Select the LWP (if any) that is currently being single-stepped.  */
2515
2516 static int
2517 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2518 {
2519   if (lp->last_resume_kind == resume_step
2520       && lp->status != 0)
2521     return 1;
2522   else
2523     return 0;
2524 }
2525
2526 /* Select the Nth LWP that has had a SIGTRAP event.  */
2527
2528 static int
2529 select_event_lwp_callback (struct lwp_info *lp, void *data)
2530 {
2531   int *selector = data;
2532
2533   gdb_assert (selector != NULL);
2534
2535   /* Select only resumed LWPs that have a SIGTRAP event pending.  */
2536   if (lp->resumed && linux_nat_lp_status_is_event (lp))
2537     if ((*selector)-- == 0)
2538       return 1;
2539
2540   return 0;
2541 }
2542
2543 static int
2544 cancel_breakpoint (struct lwp_info *lp)
2545 {
2546   /* Arrange for a breakpoint to be hit again later.  We don't keep
2547      the SIGTRAP status and don't forward the SIGTRAP signal to the
2548      LWP.  We will handle the current event, eventually we will resume
2549      this LWP, and this breakpoint will trap again.
2550
2551      If we do not do this, then we run the risk that the user will
2552      delete or disable the breakpoint, but the LWP will have already
2553      tripped on it.  */
2554
2555   struct regcache *regcache = get_thread_regcache (lp->ptid);
2556   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2557   CORE_ADDR pc;
2558
2559   pc = regcache_read_pc (regcache) - target_decr_pc_after_break (gdbarch);
2560   if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
2561     {
2562       if (debug_linux_nat)
2563         fprintf_unfiltered (gdb_stdlog,
2564                             "CB: Push back breakpoint for %s\n",
2565                             target_pid_to_str (lp->ptid));
2566
2567       /* Back up the PC if necessary.  */
2568       if (target_decr_pc_after_break (gdbarch))
2569         regcache_write_pc (regcache, pc);
2570
2571       return 1;
2572     }
2573   return 0;
2574 }
2575
2576 static int
2577 cancel_breakpoints_callback (struct lwp_info *lp, void *data)
2578 {
2579   struct lwp_info *event_lp = data;
2580
2581   /* Leave the LWP that has been elected to receive a SIGTRAP alone.  */
2582   if (lp == event_lp)
2583     return 0;
2584
2585   /* If a LWP other than the LWP that we're reporting an event for has
2586      hit a GDB breakpoint (as opposed to some random trap signal),
2587      then just arrange for it to hit it again later.  We don't keep
2588      the SIGTRAP status and don't forward the SIGTRAP signal to the
2589      LWP.  We will handle the current event, eventually we will resume
2590      all LWPs, and this one will get its breakpoint trap again.
2591
2592      If we do not do this, then we run the risk that the user will
2593      delete or disable the breakpoint, but the LWP will have already
2594      tripped on it.  */
2595
2596   if (linux_nat_lp_status_is_event (lp)
2597       && cancel_breakpoint (lp))
2598     /* Throw away the SIGTRAP.  */
2599     lp->status = 0;
2600
2601   return 0;
2602 }
2603
2604 /* Select one LWP out of those that have events pending.  */
2605
2606 static void
2607 select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
2608 {
2609   int num_events = 0;
2610   int random_selector;
2611   struct lwp_info *event_lp;
2612
2613   /* Record the wait status for the original LWP.  */
2614   (*orig_lp)->status = *status;
2615
2616   /* Give preference to any LWP that is being single-stepped.  */
2617   event_lp = iterate_over_lwps (filter,
2618                                 select_singlestep_lwp_callback, NULL);
2619   if (event_lp != NULL)
2620     {
2621       if (debug_linux_nat)
2622         fprintf_unfiltered (gdb_stdlog,
2623                             "SEL: Select single-step %s\n",
2624                             target_pid_to_str (event_lp->ptid));
2625     }
2626   else
2627     {
2628       /* No single-stepping LWP.  Select one at random, out of those
2629          which have had SIGTRAP events.  */
2630
2631       /* First see how many SIGTRAP events we have.  */
2632       iterate_over_lwps (filter, count_events_callback, &num_events);
2633
2634       /* Now randomly pick a LWP out of those that have had a SIGTRAP.  */
2635       random_selector = (int)
2636         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2637
2638       if (debug_linux_nat && num_events > 1)
2639         fprintf_unfiltered (gdb_stdlog,
2640                             "SEL: Found %d SIGTRAP events, selecting #%d\n",
2641                             num_events, random_selector);
2642
2643       event_lp = iterate_over_lwps (filter,
2644                                     select_event_lwp_callback,
2645                                     &random_selector);
2646     }
2647
2648   if (event_lp != NULL)
2649     {
2650       /* Switch the event LWP.  */
2651       *orig_lp = event_lp;
2652       *status = event_lp->status;
2653     }
2654
2655   /* Flush the wait status for the event LWP.  */
2656   (*orig_lp)->status = 0;
2657 }
2658
2659 /* Return non-zero if LP has been resumed.  */
2660
2661 static int
2662 resumed_callback (struct lwp_info *lp, void *data)
2663 {
2664   return lp->resumed;
2665 }
2666
2667 /* Stop an active thread, verify it still exists, then resume it.  If
2668    the thread ends up with a pending status, then it is not resumed,
2669    and *DATA (really a pointer to int), is set.  */
2670
2671 static int
2672 stop_and_resume_callback (struct lwp_info *lp, void *data)
2673 {
2674   int *new_pending_p = data;
2675
2676   if (!lp->stopped)
2677     {
2678       ptid_t ptid = lp->ptid;
2679
2680       stop_callback (lp, NULL);
2681       stop_wait_callback (lp, NULL);
2682
2683       /* Resume if the lwp still exists, and the core wanted it
2684          running.  */
2685       lp = find_lwp_pid (ptid);
2686       if (lp != NULL)
2687         {
2688           if (lp->last_resume_kind == resume_stop
2689               && lp->status == 0)
2690             {
2691               /* The core wanted the LWP to stop.  Even if it stopped
2692                  cleanly (with SIGSTOP), leave the event pending.  */
2693               if (debug_linux_nat)
2694                 fprintf_unfiltered (gdb_stdlog,
2695                                     "SARC: core wanted LWP %ld stopped "
2696                                     "(leaving SIGSTOP pending)\n",
2697                                     ptid_get_lwp (lp->ptid));
2698               lp->status = W_STOPCODE (SIGSTOP);
2699             }
2700
2701           if (lp->status == 0)
2702             {
2703               if (debug_linux_nat)
2704                 fprintf_unfiltered (gdb_stdlog,
2705                                     "SARC: re-resuming LWP %ld\n",
2706                                     ptid_get_lwp (lp->ptid));
2707               resume_lwp (lp, lp->step, GDB_SIGNAL_0);
2708             }
2709           else
2710             {
2711               if (debug_linux_nat)
2712                 fprintf_unfiltered (gdb_stdlog,
2713                                     "SARC: not re-resuming LWP %ld "
2714                                     "(has pending)\n",
2715                                     ptid_get_lwp (lp->ptid));
2716               if (new_pending_p)
2717                 *new_pending_p = 1;
2718             }
2719         }
2720     }
2721   return 0;
2722 }
2723
2724 /* Check if we should go on and pass this event to common code.
2725    Return the affected lwp if we are, or NULL otherwise.  If we stop
2726    all lwps temporarily, we may end up with new pending events in some
2727    other lwp.  In that case set *NEW_PENDING_P to true.  */
2728
2729 static struct lwp_info *
2730 linux_nat_filter_event (int lwpid, int status, int *new_pending_p)
2731 {
2732   struct lwp_info *lp;
2733   int event = linux_ptrace_get_extended_event (status);
2734
2735   *new_pending_p = 0;
2736
2737   lp = find_lwp_pid (pid_to_ptid (lwpid));
2738
2739   /* Check for stop events reported by a process we didn't already
2740      know about - anything not already in our LWP list.
2741
2742      If we're expecting to receive stopped processes after
2743      fork, vfork, and clone events, then we'll just add the
2744      new one to our list and go back to waiting for the event
2745      to be reported - the stopped process might be returned
2746      from waitpid before or after the event is.
2747
2748      But note the case of a non-leader thread exec'ing after the
2749      leader having exited, and gone from our lists.  The non-leader
2750      thread changes its tid to the tgid.  */
2751
2752   if (WIFSTOPPED (status) && lp == NULL
2753       && (WSTOPSIG (status) == SIGTRAP && event == PTRACE_EVENT_EXEC))
2754     {
2755       /* A multi-thread exec after we had seen the leader exiting.  */
2756       if (debug_linux_nat)
2757         fprintf_unfiltered (gdb_stdlog,
2758                             "LLW: Re-adding thread group leader LWP %d.\n",
2759                             lwpid);
2760
2761       lp = add_lwp (ptid_build (lwpid, lwpid, 0));
2762       lp->stopped = 1;
2763       lp->resumed = 1;
2764       add_thread (lp->ptid);
2765     }
2766
2767   if (WIFSTOPPED (status) && !lp)
2768     {
2769       add_to_pid_list (&stopped_pids, lwpid, status);
2770       return NULL;
2771     }
2772
2773   /* Make sure we don't report an event for the exit of an LWP not in
2774      our list, i.e. not part of the current process.  This can happen
2775      if we detach from a program we originally forked and then it
2776      exits.  */
2777   if (!WIFSTOPPED (status) && !lp)
2778     return NULL;
2779
2780   /* This LWP is stopped now.  (And if dead, this prevents it from
2781      ever being continued.)  */
2782   lp->stopped = 1;
2783
2784   /* Handle GNU/Linux's syscall SIGTRAPs.  */
2785   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
2786     {
2787       /* No longer need the sysgood bit.  The ptrace event ends up
2788          recorded in lp->waitstatus if we care for it.  We can carry
2789          on handling the event like a regular SIGTRAP from here
2790          on.  */
2791       status = W_STOPCODE (SIGTRAP);
2792       if (linux_handle_syscall_trap (lp, 0))
2793         return NULL;
2794     }
2795
2796   /* Handle GNU/Linux's extended waitstatus for trace events.  */
2797   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP
2798       && linux_is_extended_waitstatus (status))
2799     {
2800       if (debug_linux_nat)
2801         fprintf_unfiltered (gdb_stdlog,
2802                             "LLW: Handling extended status 0x%06x\n",
2803                             status);
2804       if (linux_handle_extended_wait (lp, status, 0))
2805         return NULL;
2806     }
2807
2808   if (linux_nat_status_is_event (status))
2809     save_sigtrap (lp);
2810
2811   /* Check if the thread has exited.  */
2812   if ((WIFEXITED (status) || WIFSIGNALED (status))
2813       && num_lwps (ptid_get_pid (lp->ptid)) > 1)
2814     {
2815       /* If this is the main thread, we must stop all threads and verify
2816          if they are still alive.  This is because in the nptl thread model
2817          on Linux 2.4, there is no signal issued for exiting LWPs
2818          other than the main thread.  We only get the main thread exit
2819          signal once all child threads have already exited.  If we
2820          stop all the threads and use the stop_wait_callback to check
2821          if they have exited we can determine whether this signal
2822          should be ignored or whether it means the end of the debugged
2823          application, regardless of which threading model is being
2824          used.  */
2825       if (ptid_get_pid (lp->ptid) == ptid_get_lwp (lp->ptid))
2826         {
2827           iterate_over_lwps (pid_to_ptid (ptid_get_pid (lp->ptid)),
2828                              stop_and_resume_callback, new_pending_p);
2829         }
2830
2831       if (debug_linux_nat)
2832         fprintf_unfiltered (gdb_stdlog,
2833                             "LLW: %s exited.\n",
2834                             target_pid_to_str (lp->ptid));
2835
2836       if (num_lwps (ptid_get_pid (lp->ptid)) > 1)
2837        {
2838          /* If there is at least one more LWP, then the exit signal
2839             was not the end of the debugged application and should be
2840             ignored.  */
2841          exit_lwp (lp);
2842          return NULL;
2843        }
2844     }
2845
2846   /* Check if the current LWP has previously exited.  In the nptl
2847      thread model, LWPs other than the main thread do not issue
2848      signals when they exit so we must check whenever the thread has
2849      stopped.  A similar check is made in stop_wait_callback().  */
2850   if (num_lwps (ptid_get_pid (lp->ptid)) > 1 && !linux_thread_alive (lp->ptid))
2851     {
2852       ptid_t ptid = pid_to_ptid (ptid_get_pid (lp->ptid));
2853
2854       if (debug_linux_nat)
2855         fprintf_unfiltered (gdb_stdlog,
2856                             "LLW: %s exited.\n",
2857                             target_pid_to_str (lp->ptid));
2858
2859       exit_lwp (lp);
2860
2861       /* Make sure there is at least one thread running.  */
2862       gdb_assert (iterate_over_lwps (ptid, running_callback, NULL));
2863
2864       /* Discard the event.  */
2865       return NULL;
2866     }
2867
2868   /* Make sure we don't report a SIGSTOP that we sent ourselves in
2869      an attempt to stop an LWP.  */
2870   if (lp->signalled
2871       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2872     {
2873       if (debug_linux_nat)
2874         fprintf_unfiltered (gdb_stdlog,
2875                             "LLW: Delayed SIGSTOP caught for %s.\n",
2876                             target_pid_to_str (lp->ptid));
2877
2878       lp->signalled = 0;
2879
2880       if (lp->last_resume_kind != resume_stop)
2881         {
2882           /* This is a delayed SIGSTOP.  */
2883
2884           registers_changed ();
2885
2886           if (linux_nat_prepare_to_resume != NULL)
2887             linux_nat_prepare_to_resume (lp);
2888           linux_ops->to_resume (linux_ops,
2889                                 pid_to_ptid (ptid_get_lwp (lp->ptid)),
2890                                 lp->step, GDB_SIGNAL_0);
2891           if (debug_linux_nat)
2892             fprintf_unfiltered (gdb_stdlog,
2893                                 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
2894                                 lp->step ?
2895                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2896                                 target_pid_to_str (lp->ptid));
2897
2898           lp->stopped = 0;
2899           gdb_assert (lp->resumed);
2900
2901           /* Discard the event.  */
2902           return NULL;
2903         }
2904     }
2905
2906   /* Make sure we don't report a SIGINT that we have already displayed
2907      for another thread.  */
2908   if (lp->ignore_sigint
2909       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT)
2910     {
2911       if (debug_linux_nat)
2912         fprintf_unfiltered (gdb_stdlog,
2913                             "LLW: Delayed SIGINT caught for %s.\n",
2914                             target_pid_to_str (lp->ptid));
2915
2916       /* This is a delayed SIGINT.  */
2917       lp->ignore_sigint = 0;
2918
2919       registers_changed ();
2920       if (linux_nat_prepare_to_resume != NULL)
2921         linux_nat_prepare_to_resume (lp);
2922       linux_ops->to_resume (linux_ops, pid_to_ptid (ptid_get_lwp (lp->ptid)),
2923                             lp->step, GDB_SIGNAL_0);
2924       if (debug_linux_nat)
2925         fprintf_unfiltered (gdb_stdlog,
2926                             "LLW: %s %s, 0, 0 (discard SIGINT)\n",
2927                             lp->step ?
2928                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2929                             target_pid_to_str (lp->ptid));
2930
2931       lp->stopped = 0;
2932       gdb_assert (lp->resumed);
2933
2934       /* Discard the event.  */
2935       return NULL;
2936     }
2937
2938   /* An interesting event.  */
2939   gdb_assert (lp);
2940   lp->status = status;
2941   return lp;
2942 }
2943
2944 /* Detect zombie thread group leaders, and "exit" them.  We can't reap
2945    their exits until all other threads in the group have exited.  */
2946
2947 static void
2948 check_zombie_leaders (void)
2949 {
2950   struct inferior *inf;
2951
2952   ALL_INFERIORS (inf)
2953     {
2954       struct lwp_info *leader_lp;
2955
2956       if (inf->pid == 0)
2957         continue;
2958
2959       leader_lp = find_lwp_pid (pid_to_ptid (inf->pid));
2960       if (leader_lp != NULL
2961           /* Check if there are other threads in the group, as we may
2962              have raced with the inferior simply exiting.  */
2963           && num_lwps (inf->pid) > 1
2964           && linux_proc_pid_is_zombie (inf->pid))
2965         {
2966           if (debug_linux_nat)
2967             fprintf_unfiltered (gdb_stdlog,
2968                                 "CZL: Thread group leader %d zombie "
2969                                 "(it exited, or another thread execd).\n",
2970                                 inf->pid);
2971
2972           /* A leader zombie can mean one of two things:
2973
2974              - It exited, and there's an exit status pending
2975              available, or only the leader exited (not the whole
2976              program).  In the latter case, we can't waitpid the
2977              leader's exit status until all other threads are gone.
2978
2979              - There are 3 or more threads in the group, and a thread
2980              other than the leader exec'd.  On an exec, the Linux
2981              kernel destroys all other threads (except the execing
2982              one) in the thread group, and resets the execing thread's
2983              tid to the tgid.  No exit notification is sent for the
2984              execing thread -- from the ptracer's perspective, it
2985              appears as though the execing thread just vanishes.
2986              Until we reap all other threads except the leader and the
2987              execing thread, the leader will be zombie, and the
2988              execing thread will be in `D (disc sleep)'.  As soon as
2989              all other threads are reaped, the execing thread changes
2990              it's tid to the tgid, and the previous (zombie) leader
2991              vanishes, giving place to the "new" leader.  We could try
2992              distinguishing the exit and exec cases, by waiting once
2993              more, and seeing if something comes out, but it doesn't
2994              sound useful.  The previous leader _does_ go away, and
2995              we'll re-add the new one once we see the exec event
2996              (which is just the same as what would happen if the
2997              previous leader did exit voluntarily before some other
2998              thread execs).  */
2999
3000           if (debug_linux_nat)
3001             fprintf_unfiltered (gdb_stdlog,
3002                                 "CZL: Thread group leader %d vanished.\n",
3003                                 inf->pid);
3004           exit_lwp (leader_lp);
3005         }
3006     }
3007 }
3008
3009 static ptid_t
3010 linux_nat_wait_1 (struct target_ops *ops,
3011                   ptid_t ptid, struct target_waitstatus *ourstatus,
3012                   int target_options)
3013 {
3014   static sigset_t prev_mask;
3015   enum resume_kind last_resume_kind;
3016   struct lwp_info *lp;
3017   int status;
3018
3019   if (debug_linux_nat)
3020     fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
3021
3022   /* The first time we get here after starting a new inferior, we may
3023      not have added it to the LWP list yet - this is the earliest
3024      moment at which we know its PID.  */
3025   if (ptid_is_pid (inferior_ptid))
3026     {
3027       /* Upgrade the main thread's ptid.  */
3028       thread_change_ptid (inferior_ptid,
3029                           ptid_build (ptid_get_pid (inferior_ptid),
3030                                       ptid_get_pid (inferior_ptid), 0));
3031
3032       lp = add_initial_lwp (inferior_ptid);
3033       lp->resumed = 1;
3034     }
3035
3036   /* Make sure SIGCHLD is blocked until the sigsuspend below.  */
3037   block_child_signals (&prev_mask);
3038
3039 retry:
3040   lp = NULL;
3041   status = 0;
3042
3043   /* First check if there is a LWP with a wait status pending.  */
3044   if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
3045     {
3046       /* Any LWP in the PTID group that's been resumed will do.  */
3047       lp = iterate_over_lwps (ptid, status_callback, NULL);
3048       if (lp)
3049         {
3050           if (debug_linux_nat && lp->status)
3051             fprintf_unfiltered (gdb_stdlog,
3052                                 "LLW: Using pending wait status %s for %s.\n",
3053                                 status_to_str (lp->status),
3054                                 target_pid_to_str (lp->ptid));
3055         }
3056     }
3057   else if (ptid_lwp_p (ptid))
3058     {
3059       if (debug_linux_nat)
3060         fprintf_unfiltered (gdb_stdlog,
3061                             "LLW: Waiting for specific LWP %s.\n",
3062                             target_pid_to_str (ptid));
3063
3064       /* We have a specific LWP to check.  */
3065       lp = find_lwp_pid (ptid);
3066       gdb_assert (lp);
3067
3068       if (debug_linux_nat && lp->status)
3069         fprintf_unfiltered (gdb_stdlog,
3070                             "LLW: Using pending wait status %s for %s.\n",
3071                             status_to_str (lp->status),
3072                             target_pid_to_str (lp->ptid));
3073
3074       /* We check for lp->waitstatus in addition to lp->status,
3075          because we can have pending process exits recorded in
3076          lp->status and W_EXITCODE(0,0) == 0.  We should probably have
3077          an additional lp->status_p flag.  */
3078       if (lp->status == 0 && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
3079         lp = NULL;
3080     }
3081
3082   if (!target_can_async_p ())
3083     {
3084       /* Causes SIGINT to be passed on to the attached process.  */
3085       set_sigint_trap ();
3086     }
3087
3088   /* But if we don't find a pending event, we'll have to wait.  */
3089
3090   while (lp == NULL)
3091     {
3092       pid_t lwpid;
3093
3094       /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace
3095          quirks:
3096
3097          - If the thread group leader exits while other threads in the
3098            thread group still exist, waitpid(TGID, ...) hangs.  That
3099            waitpid won't return an exit status until the other threads
3100            in the group are reapped.
3101
3102          - When a non-leader thread execs, that thread just vanishes
3103            without reporting an exit (so we'd hang if we waited for it
3104            explicitly in that case).  The exec event is reported to
3105            the TGID pid.  */
3106
3107       errno = 0;
3108       lwpid = my_waitpid (-1, &status,  __WCLONE | WNOHANG);
3109       if (lwpid == 0 || (lwpid == -1 && errno == ECHILD))
3110         lwpid = my_waitpid (-1, &status, WNOHANG);
3111
3112       if (debug_linux_nat)
3113         fprintf_unfiltered (gdb_stdlog,
3114                             "LNW: waitpid(-1, ...) returned %d, %s\n",
3115                             lwpid, errno ? safe_strerror (errno) : "ERRNO-OK");
3116
3117       if (lwpid > 0)
3118         {
3119           /* If this is true, then we paused LWPs momentarily, and may
3120              now have pending events to handle.  */
3121           int new_pending;
3122
3123           if (debug_linux_nat)
3124             {
3125               fprintf_unfiltered (gdb_stdlog,
3126                                   "LLW: waitpid %ld received %s\n",
3127                                   (long) lwpid, status_to_str (status));
3128             }
3129
3130           lp = linux_nat_filter_event (lwpid, status, &new_pending);
3131
3132           /* STATUS is now no longer valid, use LP->STATUS instead.  */
3133           status = 0;
3134
3135           if (lp && !ptid_match (lp->ptid, ptid))
3136             {
3137               gdb_assert (lp->resumed);
3138
3139               if (debug_linux_nat)
3140                 fprintf_unfiltered (gdb_stdlog,
3141                                     "LWP %ld got an event %06x, "
3142                                     "leaving pending.\n",
3143                                     ptid_get_lwp (lp->ptid), lp->status);
3144
3145               if (WIFSTOPPED (lp->status))
3146                 {
3147                   if (WSTOPSIG (lp->status) != SIGSTOP)
3148                     {
3149                       /* Cancel breakpoint hits.  The breakpoint may
3150                          be removed before we fetch events from this
3151                          process to report to the core.  It is best
3152                          not to assume the moribund breakpoints
3153                          heuristic always handles these cases --- it
3154                          could be too many events go through to the
3155                          core before this one is handled.  All-stop
3156                          always cancels breakpoint hits in all
3157                          threads.  */
3158                       if (non_stop
3159                           && linux_nat_lp_status_is_event (lp)
3160                           && cancel_breakpoint (lp))
3161                         {
3162                           /* Throw away the SIGTRAP.  */
3163                           lp->status = 0;
3164
3165                           if (debug_linux_nat)
3166                             fprintf_unfiltered (gdb_stdlog,
3167                                                 "LLW: LWP %ld hit a "
3168                                                 "breakpoint while "
3169                                                 "waiting for another "
3170                                                 "process; "
3171                                                 "cancelled it\n",
3172                                                 ptid_get_lwp (lp->ptid));
3173                         }
3174                     }
3175                   else
3176                     lp->signalled = 0;
3177                 }
3178               else if (WIFEXITED (lp->status) || WIFSIGNALED (lp->status))
3179                 {
3180                   if (debug_linux_nat)
3181                     fprintf_unfiltered (gdb_stdlog,
3182                                         "Process %ld exited while stopping "
3183                                         "LWPs\n",
3184                                         ptid_get_lwp (lp->ptid));
3185
3186                   /* This was the last lwp in the process.  Since
3187                      events are serialized to GDB core, and we can't
3188                      report this one right now, but GDB core and the
3189                      other target layers will want to be notified
3190                      about the exit code/signal, leave the status
3191                      pending for the next time we're able to report
3192                      it.  */
3193
3194                   /* Dead LWP's aren't expected to reported a pending
3195                      sigstop.  */
3196                   lp->signalled = 0;
3197
3198                   /* Store the pending event in the waitstatus as
3199                      well, because W_EXITCODE(0,0) == 0.  */
3200                   store_waitstatus (&lp->waitstatus, lp->status);
3201                 }
3202
3203               /* Keep looking.  */
3204               lp = NULL;
3205             }
3206
3207           if (new_pending)
3208             {
3209               /* Some LWP now has a pending event.  Go all the way
3210                  back to check it.  */
3211               goto retry;
3212             }
3213
3214           if (lp)
3215             {
3216               /* We got an event to report to the core.  */
3217               break;
3218             }
3219
3220           /* Retry until nothing comes out of waitpid.  A single
3221              SIGCHLD can indicate more than one child stopped.  */
3222           continue;
3223         }
3224
3225       /* Check for zombie thread group leaders.  Those can't be reaped
3226          until all other threads in the thread group are.  */
3227       check_zombie_leaders ();
3228
3229       /* If there are no resumed children left, bail.  We'd be stuck
3230          forever in the sigsuspend call below otherwise.  */
3231       if (iterate_over_lwps (ptid, resumed_callback, NULL) == NULL)
3232         {
3233           if (debug_linux_nat)
3234             fprintf_unfiltered (gdb_stdlog, "LLW: exit (no resumed LWP)\n");
3235
3236           ourstatus->kind = TARGET_WAITKIND_NO_RESUMED;
3237
3238           if (!target_can_async_p ())
3239             clear_sigint_trap ();
3240
3241           restore_child_signals_mask (&prev_mask);
3242           return minus_one_ptid;
3243         }
3244
3245       /* No interesting event to report to the core.  */
3246
3247       if (target_options & TARGET_WNOHANG)
3248         {
3249           if (debug_linux_nat)
3250             fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3251
3252           ourstatus->kind = TARGET_WAITKIND_IGNORE;
3253           restore_child_signals_mask (&prev_mask);
3254           return minus_one_ptid;
3255         }
3256
3257       /* We shouldn't end up here unless we want to try again.  */
3258       gdb_assert (lp == NULL);
3259
3260       /* Block until we get an event reported with SIGCHLD.  */
3261       if (debug_linux_nat)
3262         fprintf_unfiltered (gdb_stdlog, "LNW: about to sigsuspend\n");
3263       sigsuspend (&suspend_mask);
3264     }
3265
3266   if (!target_can_async_p ())
3267     clear_sigint_trap ();
3268
3269   gdb_assert (lp);
3270
3271   status = lp->status;
3272   lp->status = 0;
3273
3274   /* Don't report signals that GDB isn't interested in, such as
3275      signals that are neither printed nor stopped upon.  Stopping all
3276      threads can be a bit time-consuming so if we want decent
3277      performance with heavily multi-threaded programs, especially when
3278      they're using a high frequency timer, we'd better avoid it if we
3279      can.  */
3280
3281   if (WIFSTOPPED (status))
3282     {
3283       enum gdb_signal signo = gdb_signal_from_host (WSTOPSIG (status));
3284
3285       /* When using hardware single-step, we need to report every signal.
3286          Otherwise, signals in pass_mask may be short-circuited.  */
3287       if (!lp->step
3288           && WSTOPSIG (status) && sigismember (&pass_mask, WSTOPSIG (status)))
3289         {
3290           /* FIMXE: kettenis/2001-06-06: Should we resume all threads
3291              here?  It is not clear we should.  GDB may not expect
3292              other threads to run.  On the other hand, not resuming
3293              newly attached threads may cause an unwanted delay in
3294              getting them running.  */
3295           registers_changed ();
3296           if (linux_nat_prepare_to_resume != NULL)
3297             linux_nat_prepare_to_resume (lp);
3298           linux_ops->to_resume (linux_ops,
3299                                 pid_to_ptid (ptid_get_lwp (lp->ptid)),
3300                                 lp->step, signo);
3301           if (debug_linux_nat)
3302             fprintf_unfiltered (gdb_stdlog,
3303                                 "LLW: %s %s, %s (preempt 'handle')\n",
3304                                 lp->step ?
3305                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3306                                 target_pid_to_str (lp->ptid),
3307                                 (signo != GDB_SIGNAL_0
3308                                  ? strsignal (gdb_signal_to_host (signo))
3309                                  : "0"));
3310           lp->stopped = 0;
3311           goto retry;
3312         }
3313
3314       if (!non_stop)
3315         {
3316           /* Only do the below in all-stop, as we currently use SIGINT
3317              to implement target_stop (see linux_nat_stop) in
3318              non-stop.  */
3319           if (signo == GDB_SIGNAL_INT && signal_pass_state (signo) == 0)
3320             {
3321               /* If ^C/BREAK is typed at the tty/console, SIGINT gets
3322                  forwarded to the entire process group, that is, all LWPs
3323                  will receive it - unless they're using CLONE_THREAD to
3324                  share signals.  Since we only want to report it once, we
3325                  mark it as ignored for all LWPs except this one.  */
3326               iterate_over_lwps (pid_to_ptid (ptid_get_pid (ptid)),
3327                                               set_ignore_sigint, NULL);
3328               lp->ignore_sigint = 0;
3329             }
3330           else
3331             maybe_clear_ignore_sigint (lp);
3332         }
3333     }
3334
3335   /* This LWP is stopped now.  */
3336   lp->stopped = 1;
3337
3338   if (debug_linux_nat)
3339     fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
3340                         status_to_str (status), target_pid_to_str (lp->ptid));
3341
3342   if (!non_stop)
3343     {
3344       /* Now stop all other LWP's ...  */
3345       iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
3346
3347       /* ... and wait until all of them have reported back that
3348          they're no longer running.  */
3349       iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
3350
3351       /* If we're not waiting for a specific LWP, choose an event LWP
3352          from among those that have had events.  Giving equal priority
3353          to all LWPs that have had events helps prevent
3354          starvation.  */
3355       if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
3356         select_event_lwp (ptid, &lp, &status);
3357
3358       /* Now that we've selected our final event LWP, cancel any
3359          breakpoints in other LWPs that have hit a GDB breakpoint.
3360          See the comment in cancel_breakpoints_callback to find out
3361          why.  */
3362       iterate_over_lwps (minus_one_ptid, cancel_breakpoints_callback, lp);
3363
3364       /* We'll need this to determine whether to report a SIGSTOP as
3365          TARGET_WAITKIND_0.  Need to take a copy because
3366          resume_clear_callback clears it.  */
3367       last_resume_kind = lp->last_resume_kind;
3368
3369       /* In all-stop, from the core's perspective, all LWPs are now
3370          stopped until a new resume action is sent over.  */
3371       iterate_over_lwps (minus_one_ptid, resume_clear_callback, NULL);
3372     }
3373   else
3374     {
3375       /* See above.  */
3376       last_resume_kind = lp->last_resume_kind;
3377       resume_clear_callback (lp, NULL);
3378     }
3379
3380   if (linux_nat_status_is_event (status))
3381     {
3382       if (debug_linux_nat)
3383         fprintf_unfiltered (gdb_stdlog,
3384                             "LLW: trap ptid is %s.\n",
3385                             target_pid_to_str (lp->ptid));
3386     }
3387
3388   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
3389     {
3390       *ourstatus = lp->waitstatus;
3391       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
3392     }
3393   else
3394     store_waitstatus (ourstatus, status);
3395
3396   if (debug_linux_nat)
3397     fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
3398
3399   restore_child_signals_mask (&prev_mask);
3400
3401   if (last_resume_kind == resume_stop
3402       && ourstatus->kind == TARGET_WAITKIND_STOPPED
3403       && WSTOPSIG (status) == SIGSTOP)
3404     {
3405       /* A thread that has been requested to stop by GDB with
3406          target_stop, and it stopped cleanly, so report as SIG0.  The
3407          use of SIGSTOP is an implementation detail.  */
3408       ourstatus->value.sig = GDB_SIGNAL_0;
3409     }
3410
3411   if (ourstatus->kind == TARGET_WAITKIND_EXITED
3412       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
3413     lp->core = -1;
3414   else
3415     lp->core = linux_common_core_of_thread (lp->ptid);
3416
3417   return lp->ptid;
3418 }
3419
3420 /* Resume LWPs that are currently stopped without any pending status
3421    to report, but are resumed from the core's perspective.  */
3422
3423 static int
3424 resume_stopped_resumed_lwps (struct lwp_info *lp, void *data)
3425 {
3426   ptid_t *wait_ptid_p = data;
3427
3428   if (lp->stopped
3429       && lp->resumed
3430       && lp->status == 0
3431       && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
3432     {
3433       struct regcache *regcache = get_thread_regcache (lp->ptid);
3434       struct gdbarch *gdbarch = get_regcache_arch (regcache);
3435       CORE_ADDR pc = regcache_read_pc (regcache);
3436
3437       gdb_assert (is_executing (lp->ptid));
3438
3439       /* Don't bother if there's a breakpoint at PC that we'd hit
3440          immediately, and we're not waiting for this LWP.  */
3441       if (!ptid_match (lp->ptid, *wait_ptid_p))
3442         {
3443           if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
3444             return 0;
3445         }
3446
3447       if (debug_linux_nat)
3448         fprintf_unfiltered (gdb_stdlog,
3449                             "RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n",
3450                             target_pid_to_str (lp->ptid),
3451                             paddress (gdbarch, pc),
3452                             lp->step);
3453
3454       registers_changed ();
3455       if (linux_nat_prepare_to_resume != NULL)
3456         linux_nat_prepare_to_resume (lp);
3457       linux_ops->to_resume (linux_ops, pid_to_ptid (ptid_get_lwp (lp->ptid)),
3458                             lp->step, GDB_SIGNAL_0);
3459       lp->stopped = 0;
3460       lp->stopped_by_watchpoint = 0;
3461     }
3462
3463   return 0;
3464 }
3465
3466 static ptid_t
3467 linux_nat_wait (struct target_ops *ops,
3468                 ptid_t ptid, struct target_waitstatus *ourstatus,
3469                 int target_options)
3470 {
3471   ptid_t event_ptid;
3472
3473   if (debug_linux_nat)
3474     {
3475       char *options_string;
3476
3477       options_string = target_options_to_string (target_options);
3478       fprintf_unfiltered (gdb_stdlog,
3479                           "linux_nat_wait: [%s], [%s]\n",
3480                           target_pid_to_str (ptid),
3481                           options_string);
3482       xfree (options_string);
3483     }
3484
3485   /* Flush the async file first.  */
3486   if (target_can_async_p ())
3487     async_file_flush ();
3488
3489   /* Resume LWPs that are currently stopped without any pending status
3490      to report, but are resumed from the core's perspective.  LWPs get
3491      in this state if we find them stopping at a time we're not
3492      interested in reporting the event (target_wait on a
3493      specific_process, for example, see linux_nat_wait_1), and
3494      meanwhile the event became uninteresting.  Don't bother resuming
3495      LWPs we're not going to wait for if they'd stop immediately.  */
3496   if (non_stop)
3497     iterate_over_lwps (minus_one_ptid, resume_stopped_resumed_lwps, &ptid);
3498
3499   event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus, target_options);
3500
3501   /* If we requested any event, and something came out, assume there
3502      may be more.  If we requested a specific lwp or process, also
3503      assume there may be more.  */
3504   if (target_can_async_p ()
3505       && ((ourstatus->kind != TARGET_WAITKIND_IGNORE
3506            && ourstatus->kind != TARGET_WAITKIND_NO_RESUMED)
3507           || !ptid_equal (ptid, minus_one_ptid)))
3508     async_file_mark ();
3509
3510   /* Get ready for the next event.  */
3511   if (target_can_async_p ())
3512     target_async (inferior_event_handler, 0);
3513
3514   return event_ptid;
3515 }
3516
3517 static int
3518 kill_callback (struct lwp_info *lp, void *data)
3519 {
3520   /* PTRACE_KILL may resume the inferior.  Send SIGKILL first.  */
3521
3522   errno = 0;
3523   kill_lwp (ptid_get_lwp (lp->ptid), SIGKILL);
3524   if (debug_linux_nat)
3525     {
3526       int save_errno = errno;
3527
3528       fprintf_unfiltered (gdb_stdlog,
3529                           "KC:  kill (SIGKILL) %s, 0, 0 (%s)\n",
3530                           target_pid_to_str (lp->ptid),
3531                           save_errno ? safe_strerror (save_errno) : "OK");
3532     }
3533
3534   /* Some kernels ignore even SIGKILL for processes under ptrace.  */
3535
3536   errno = 0;
3537   ptrace (PTRACE_KILL, ptid_get_lwp (lp->ptid), 0, 0);
3538   if (debug_linux_nat)
3539     {
3540       int save_errno = errno;
3541
3542       fprintf_unfiltered (gdb_stdlog,
3543                           "KC:  PTRACE_KILL %s, 0, 0 (%s)\n",
3544                           target_pid_to_str (lp->ptid),
3545                           save_errno ? safe_strerror (save_errno) : "OK");
3546     }
3547
3548   return 0;
3549 }
3550
3551 static int
3552 kill_wait_callback (struct lwp_info *lp, void *data)
3553 {
3554   pid_t pid;
3555
3556   /* We must make sure that there are no pending events (delayed
3557      SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
3558      program doesn't interfere with any following debugging session.  */
3559
3560   /* For cloned processes we must check both with __WCLONE and
3561      without, since the exit status of a cloned process isn't reported
3562      with __WCLONE.  */
3563   if (lp->cloned)
3564     {
3565       do
3566         {
3567           pid = my_waitpid (ptid_get_lwp (lp->ptid), NULL, __WCLONE);
3568           if (pid != (pid_t) -1)
3569             {
3570               if (debug_linux_nat)
3571                 fprintf_unfiltered (gdb_stdlog,
3572                                     "KWC: wait %s received unknown.\n",
3573                                     target_pid_to_str (lp->ptid));
3574               /* The Linux kernel sometimes fails to kill a thread
3575                  completely after PTRACE_KILL; that goes from the stop
3576                  point in do_fork out to the one in
3577                  get_signal_to_deliever and waits again.  So kill it
3578                  again.  */
3579               kill_callback (lp, NULL);
3580             }
3581         }
3582       while (pid == ptid_get_lwp (lp->ptid));
3583
3584       gdb_assert (pid == -1 && errno == ECHILD);
3585     }
3586
3587   do
3588     {
3589       pid = my_waitpid (ptid_get_lwp (lp->ptid), NULL, 0);
3590       if (pid != (pid_t) -1)
3591         {
3592           if (debug_linux_nat)
3593             fprintf_unfiltered (gdb_stdlog,
3594                                 "KWC: wait %s received unk.\n",
3595                                 target_pid_to_str (lp->ptid));
3596           /* See the call to kill_callback above.  */
3597           kill_callback (lp, NULL);
3598         }
3599     }
3600   while (pid == ptid_get_lwp (lp->ptid));
3601
3602   gdb_assert (pid == -1 && errno == ECHILD);
3603   return 0;
3604 }
3605
3606 static void
3607 linux_nat_kill (struct target_ops *ops)
3608 {
3609   struct target_waitstatus last;
3610   ptid_t last_ptid;
3611   int status;
3612
3613   /* If we're stopped while forking and we haven't followed yet,
3614      kill the other task.  We need to do this first because the
3615      parent will be sleeping if this is a vfork.  */
3616
3617   get_last_target_status (&last_ptid, &last);
3618
3619   if (last.kind == TARGET_WAITKIND_FORKED
3620       || last.kind == TARGET_WAITKIND_VFORKED)
3621     {
3622       ptrace (PT_KILL, ptid_get_pid (last.value.related_pid), 0, 0);
3623       wait (&status);
3624
3625       /* Let the arch-specific native code know this process is
3626          gone.  */
3627       linux_nat_forget_process (ptid_get_pid (last.value.related_pid));
3628     }
3629
3630   if (forks_exist_p ())
3631     linux_fork_killall ();
3632   else
3633     {
3634       ptid_t ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
3635
3636       /* Stop all threads before killing them, since ptrace requires
3637          that the thread is stopped to sucessfully PTRACE_KILL.  */
3638       iterate_over_lwps (ptid, stop_callback, NULL);
3639       /* ... and wait until all of them have reported back that
3640          they're no longer running.  */
3641       iterate_over_lwps (ptid, stop_wait_callback, NULL);
3642
3643       /* Kill all LWP's ...  */
3644       iterate_over_lwps (ptid, kill_callback, NULL);
3645
3646       /* ... and wait until we've flushed all events.  */
3647       iterate_over_lwps (ptid, kill_wait_callback, NULL);
3648     }
3649
3650   target_mourn_inferior ();
3651 }
3652
3653 static void
3654 linux_nat_mourn_inferior (struct target_ops *ops)
3655 {
3656   int pid = ptid_get_pid (inferior_ptid);
3657
3658   purge_lwp_list (pid);
3659
3660   if (! forks_exist_p ())
3661     /* Normal case, no other forks available.  */
3662     linux_ops->to_mourn_inferior (ops);
3663   else
3664     /* Multi-fork case.  The current inferior_ptid has exited, but
3665        there are other viable forks to debug.  Delete the exiting
3666        one and context-switch to the first available.  */
3667     linux_fork_mourn_inferior ();
3668
3669   /* Let the arch-specific native code know this process is gone.  */
3670   linux_nat_forget_process (pid);
3671 }
3672
3673 /* Convert a native/host siginfo object, into/from the siginfo in the
3674    layout of the inferiors' architecture.  */
3675
3676 static void
3677 siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
3678 {
3679   int done = 0;
3680
3681   if (linux_nat_siginfo_fixup != NULL)
3682     done = linux_nat_siginfo_fixup (siginfo, inf_siginfo, direction);
3683
3684   /* If there was no callback, or the callback didn't do anything,
3685      then just do a straight memcpy.  */
3686   if (!done)
3687     {
3688       if (direction == 1)
3689         memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
3690       else
3691         memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
3692     }
3693 }
3694
3695 static enum target_xfer_status
3696 linux_xfer_siginfo (struct target_ops *ops, enum target_object object,
3697                     const char *annex, gdb_byte *readbuf,
3698                     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
3699                     ULONGEST *xfered_len)
3700 {
3701   int pid;
3702   siginfo_t siginfo;
3703   gdb_byte inf_siginfo[sizeof (siginfo_t)];
3704
3705   gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
3706   gdb_assert (readbuf || writebuf);
3707
3708   pid = ptid_get_lwp (inferior_ptid);
3709   if (pid == 0)
3710     pid = ptid_get_pid (inferior_ptid);
3711
3712   if (offset > sizeof (siginfo))
3713     return TARGET_XFER_E_IO;
3714
3715   errno = 0;
3716   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3717   if (errno != 0)
3718     return TARGET_XFER_E_IO;
3719
3720   /* When GDB is built as a 64-bit application, ptrace writes into
3721      SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
3722      inferior with a 64-bit GDB should look the same as debugging it
3723      with a 32-bit GDB, we need to convert it.  GDB core always sees
3724      the converted layout, so any read/write will have to be done
3725      post-conversion.  */
3726   siginfo_fixup (&siginfo, inf_siginfo, 0);
3727
3728   if (offset + len > sizeof (siginfo))
3729     len = sizeof (siginfo) - offset;
3730
3731   if (readbuf != NULL)
3732     memcpy (readbuf, inf_siginfo + offset, len);
3733   else
3734     {
3735       memcpy (inf_siginfo + offset, writebuf, len);
3736
3737       /* Convert back to ptrace layout before flushing it out.  */
3738       siginfo_fixup (&siginfo, inf_siginfo, 1);
3739
3740       errno = 0;
3741       ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3742       if (errno != 0)
3743         return TARGET_XFER_E_IO;
3744     }
3745
3746   *xfered_len = len;
3747   return TARGET_XFER_OK;
3748 }
3749
3750 static enum target_xfer_status
3751 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
3752                         const char *annex, gdb_byte *readbuf,
3753                         const gdb_byte *writebuf,
3754                         ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
3755 {
3756   struct cleanup *old_chain;
3757   enum target_xfer_status xfer;
3758
3759   if (object == TARGET_OBJECT_SIGNAL_INFO)
3760     return linux_xfer_siginfo (ops, object, annex, readbuf, writebuf,
3761                                offset, len, xfered_len);
3762
3763   /* The target is connected but no live inferior is selected.  Pass
3764      this request down to a lower stratum (e.g., the executable
3765      file).  */
3766   if (object == TARGET_OBJECT_MEMORY && ptid_equal (inferior_ptid, null_ptid))
3767     return TARGET_XFER_EOF;
3768
3769   old_chain = save_inferior_ptid ();
3770
3771   if (ptid_lwp_p (inferior_ptid))
3772     inferior_ptid = pid_to_ptid (ptid_get_lwp (inferior_ptid));
3773
3774   xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
3775                                      offset, len, xfered_len);
3776
3777   do_cleanups (old_chain);
3778   return xfer;
3779 }
3780
3781 static int
3782 linux_thread_alive (ptid_t ptid)
3783 {
3784   int err, tmp_errno;
3785
3786   gdb_assert (ptid_lwp_p (ptid));
3787
3788   /* Send signal 0 instead of anything ptrace, because ptracing a
3789      running thread errors out claiming that the thread doesn't
3790      exist.  */
3791   err = kill_lwp (ptid_get_lwp (ptid), 0);
3792   tmp_errno = errno;
3793   if (debug_linux_nat)
3794     fprintf_unfiltered (gdb_stdlog,
3795                         "LLTA: KILL(SIG0) %s (%s)\n",
3796                         target_pid_to_str (ptid),
3797                         err ? safe_strerror (tmp_errno) : "OK");
3798
3799   if (err != 0)
3800     return 0;
3801
3802   return 1;
3803 }
3804
3805 static int
3806 linux_nat_thread_alive (struct target_ops *ops, ptid_t ptid)
3807 {
3808   return linux_thread_alive (ptid);
3809 }
3810
3811 static char *
3812 linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
3813 {
3814   static char buf[64];
3815
3816   if (ptid_lwp_p (ptid)
3817       && (ptid_get_pid (ptid) != ptid_get_lwp (ptid)
3818           || num_lwps (ptid_get_pid (ptid)) > 1))
3819     {
3820       snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
3821       return buf;
3822     }
3823
3824   return normal_pid_to_str (ptid);
3825 }
3826
3827 static char *
3828 linux_nat_thread_name (struct target_ops *self, struct thread_info *thr)
3829 {
3830   int pid = ptid_get_pid (thr->ptid);
3831   long lwp = ptid_get_lwp (thr->ptid);
3832 #define FORMAT "/proc/%d/task/%ld/comm"
3833   char buf[sizeof (FORMAT) + 30];
3834   FILE *comm_file;
3835   char *result = NULL;
3836
3837   snprintf (buf, sizeof (buf), FORMAT, pid, lwp);
3838   comm_file = gdb_fopen_cloexec (buf, "r");
3839   if (comm_file)
3840     {
3841       /* Not exported by the kernel, so we define it here.  */
3842 #define COMM_LEN 16
3843       static char line[COMM_LEN + 1];
3844
3845       if (fgets (line, sizeof (line), comm_file))
3846         {
3847           char *nl = strchr (line, '\n');
3848
3849           if (nl)
3850             *nl = '\0';
3851           if (*line != '\0')
3852             result = line;
3853         }
3854
3855       fclose (comm_file);
3856     }
3857
3858 #undef COMM_LEN
3859 #undef FORMAT
3860
3861   return result;
3862 }
3863
3864 /* Accepts an integer PID; Returns a string representing a file that
3865    can be opened to get the symbols for the child process.  */
3866
3867 static char *
3868 linux_child_pid_to_exec_file (struct target_ops *self, int pid)
3869 {
3870   static char buf[PATH_MAX];
3871   char name[PATH_MAX];
3872
3873   xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
3874   memset (buf, 0, PATH_MAX);
3875   if (readlink (name, buf, PATH_MAX - 1) <= 0)
3876     strcpy (buf, name);
3877
3878   return buf;
3879 }
3880
3881 /* Implement the to_xfer_partial interface for memory reads using the /proc
3882    filesystem.  Because we can use a single read() call for /proc, this
3883    can be much more efficient than banging away at PTRACE_PEEKTEXT,
3884    but it doesn't support writes.  */
3885
3886 static enum target_xfer_status
3887 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3888                          const char *annex, gdb_byte *readbuf,
3889                          const gdb_byte *writebuf,
3890                          ULONGEST offset, LONGEST len, ULONGEST *xfered_len)
3891 {
3892   LONGEST ret;
3893   int fd;
3894   char filename[64];
3895
3896   if (object != TARGET_OBJECT_MEMORY || !readbuf)
3897     return 0;
3898
3899   /* Don't bother for one word.  */
3900   if (len < 3 * sizeof (long))
3901     return TARGET_XFER_EOF;
3902
3903   /* We could keep this file open and cache it - possibly one per
3904      thread.  That requires some juggling, but is even faster.  */
3905   xsnprintf (filename, sizeof filename, "/proc/%d/mem",
3906              ptid_get_pid (inferior_ptid));
3907   fd = gdb_open_cloexec (filename, O_RDONLY | O_LARGEFILE, 0);
3908   if (fd == -1)
3909     return TARGET_XFER_EOF;
3910
3911   /* If pread64 is available, use it.  It's faster if the kernel
3912      supports it (only one syscall), and it's 64-bit safe even on
3913      32-bit platforms (for instance, SPARC debugging a SPARC64
3914      application).  */
3915 #ifdef HAVE_PREAD64
3916   if (pread64 (fd, readbuf, len, offset) != len)
3917 #else
3918   if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
3919 #endif
3920     ret = 0;
3921   else
3922     ret = len;
3923
3924   close (fd);
3925
3926   if (ret == 0)
3927     return TARGET_XFER_EOF;
3928   else
3929     {
3930       *xfered_len = ret;
3931       return TARGET_XFER_OK;
3932     }
3933 }
3934
3935
3936 /* Enumerate spufs IDs for process PID.  */
3937 static LONGEST
3938 spu_enumerate_spu_ids (int pid, gdb_byte *buf, ULONGEST offset, ULONGEST len)
3939 {
3940   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
3941   LONGEST pos = 0;
3942   LONGEST written = 0;
3943   char path[128];
3944   DIR *dir;
3945   struct dirent *entry;
3946
3947   xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
3948   dir = opendir (path);
3949   if (!dir)
3950     return -1;
3951
3952   rewinddir (dir);
3953   while ((entry = readdir (dir)) != NULL)
3954     {
3955       struct stat st;
3956       struct statfs stfs;
3957       int fd;
3958
3959       fd = atoi (entry->d_name);
3960       if (!fd)
3961         continue;
3962
3963       xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
3964       if (stat (path, &st) != 0)
3965         continue;
3966       if (!S_ISDIR (st.st_mode))
3967         continue;
3968
3969       if (statfs (path, &stfs) != 0)
3970         continue;
3971       if (stfs.f_type != SPUFS_MAGIC)
3972         continue;
3973
3974       if (pos >= offset && pos + 4 <= offset + len)
3975         {
3976           store_unsigned_integer (buf + pos - offset, 4, byte_order, fd);
3977           written += 4;
3978         }
3979       pos += 4;
3980     }
3981
3982   closedir (dir);
3983   return written;
3984 }
3985
3986 /* Implement the to_xfer_partial interface for the TARGET_OBJECT_SPU
3987    object type, using the /proc file system.  */
3988
3989 static enum target_xfer_status
3990 linux_proc_xfer_spu (struct target_ops *ops, enum target_object object,
3991                      const char *annex, gdb_byte *readbuf,
3992                      const gdb_byte *writebuf,
3993                      ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
3994 {
3995   char buf[128];
3996   int fd = 0;
3997   int ret = -1;
3998   int pid = ptid_get_pid (inferior_ptid);
3999
4000   if (!annex)
4001     {
4002       if (!readbuf)
4003         return TARGET_XFER_E_IO;
4004       else
4005         {
4006           LONGEST l = spu_enumerate_spu_ids (pid, readbuf, offset, len);
4007
4008           if (l < 0)
4009             return TARGET_XFER_E_IO;
4010           else if (l == 0)
4011             return TARGET_XFER_EOF;
4012           else
4013             {
4014               *xfered_len = (ULONGEST) l;
4015               return TARGET_XFER_OK;
4016             }
4017         }
4018     }
4019
4020   xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
4021   fd = gdb_open_cloexec (buf, writebuf? O_WRONLY : O_RDONLY, 0);
4022   if (fd <= 0)
4023     return TARGET_XFER_E_IO;
4024
4025   if (offset != 0
4026       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4027     {
4028       close (fd);
4029       return TARGET_XFER_EOF;
4030     }
4031
4032   if (writebuf)
4033     ret = write (fd, writebuf, (size_t) len);
4034   else if (readbuf)
4035     ret = read (fd, readbuf, (size_t) len);
4036
4037   close (fd);
4038
4039   if (ret < 0)
4040     return TARGET_XFER_E_IO;
4041   else if (ret == 0)
4042     return TARGET_XFER_EOF;
4043   else
4044     {
4045       *xfered_len = (ULONGEST) ret;
4046       return TARGET_XFER_OK;
4047     }
4048 }
4049
4050
4051 /* Parse LINE as a signal set and add its set bits to SIGS.  */
4052
4053 static void
4054 add_line_to_sigset (const char *line, sigset_t *sigs)
4055 {
4056   int len = strlen (line) - 1;
4057   const char *p;
4058   int signum;
4059
4060   if (line[len] != '\n')
4061     error (_("Could not parse signal set: %s"), line);
4062
4063   p = line;
4064   signum = len * 4;
4065   while (len-- > 0)
4066     {
4067       int digit;
4068
4069       if (*p >= '0' && *p <= '9')
4070         digit = *p - '0';
4071       else if (*p >= 'a' && *p <= 'f')
4072         digit = *p - 'a' + 10;
4073       else
4074         error (_("Could not parse signal set: %s"), line);
4075
4076       signum -= 4;
4077
4078       if (digit & 1)
4079         sigaddset (sigs, signum + 1);
4080       if (digit & 2)
4081         sigaddset (sigs, signum + 2);
4082       if (digit & 4)
4083         sigaddset (sigs, signum + 3);
4084       if (digit & 8)
4085         sigaddset (sigs, signum + 4);
4086
4087       p++;
4088     }
4089 }
4090
4091 /* Find process PID's pending signals from /proc/pid/status and set
4092    SIGS to match.  */
4093
4094 void
4095 linux_proc_pending_signals (int pid, sigset_t *pending,
4096                             sigset_t *blocked, sigset_t *ignored)
4097 {
4098   FILE *procfile;
4099   char buffer[PATH_MAX], fname[PATH_MAX];
4100   struct cleanup *cleanup;
4101
4102   sigemptyset (pending);
4103   sigemptyset (blocked);
4104   sigemptyset (ignored);
4105   xsnprintf (fname, sizeof fname, "/proc/%d/status", pid);
4106   procfile = gdb_fopen_cloexec (fname, "r");
4107   if (procfile == NULL)
4108     error (_("Could not open %s"), fname);
4109   cleanup = make_cleanup_fclose (procfile);
4110
4111   while (fgets (buffer, PATH_MAX, procfile) != NULL)
4112     {
4113       /* Normal queued signals are on the SigPnd line in the status
4114          file.  However, 2.6 kernels also have a "shared" pending
4115          queue for delivering signals to a thread group, so check for
4116          a ShdPnd line also.
4117
4118          Unfortunately some Red Hat kernels include the shared pending
4119          queue but not the ShdPnd status field.  */
4120
4121       if (strncmp (buffer, "SigPnd:\t", 8) == 0)
4122         add_line_to_sigset (buffer + 8, pending);
4123       else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
4124         add_line_to_sigset (buffer + 8, pending);
4125       else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
4126         add_line_to_sigset (buffer + 8, blocked);
4127       else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
4128         add_line_to_sigset (buffer + 8, ignored);
4129     }
4130
4131   do_cleanups (cleanup);
4132 }
4133
4134 static enum target_xfer_status
4135 linux_nat_xfer_osdata (struct target_ops *ops, enum target_object object,
4136                        const char *annex, gdb_byte *readbuf,
4137                        const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
4138                        ULONGEST *xfered_len)
4139 {
4140   gdb_assert (object == TARGET_OBJECT_OSDATA);
4141
4142   *xfered_len = linux_common_xfer_osdata (annex, readbuf, offset, len);
4143   if (*xfered_len == 0)
4144     return TARGET_XFER_EOF;
4145   else
4146     return TARGET_XFER_OK;
4147 }
4148
4149 static enum target_xfer_status
4150 linux_xfer_partial (struct target_ops *ops, enum target_object object,
4151                     const char *annex, gdb_byte *readbuf,
4152                     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
4153                     ULONGEST *xfered_len)
4154 {
4155   enum target_xfer_status xfer;
4156
4157   if (object == TARGET_OBJECT_AUXV)
4158     return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
4159                              offset, len, xfered_len);
4160
4161   if (object == TARGET_OBJECT_OSDATA)
4162     return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
4163                                   offset, len, xfered_len);
4164
4165   if (object == TARGET_OBJECT_SPU)
4166     return linux_proc_xfer_spu (ops, object, annex, readbuf, writebuf,
4167                                 offset, len, xfered_len);
4168
4169   /* GDB calculates all the addresses in possibly larget width of the address.
4170      Address width needs to be masked before its final use - either by
4171      linux_proc_xfer_partial or inf_ptrace_xfer_partial.
4172
4173      Compare ADDR_BIT first to avoid a compiler warning on shift overflow.  */
4174
4175   if (object == TARGET_OBJECT_MEMORY)
4176     {
4177       int addr_bit = gdbarch_addr_bit (target_gdbarch ());
4178
4179       if (addr_bit < (sizeof (ULONGEST) * HOST_CHAR_BIT))
4180         offset &= ((ULONGEST) 1 << addr_bit) - 1;
4181     }
4182
4183   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
4184                                   offset, len, xfered_len);
4185   if (xfer != TARGET_XFER_EOF)
4186     return xfer;
4187
4188   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
4189                              offset, len, xfered_len);
4190 }
4191
4192 static void
4193 cleanup_target_stop (void *arg)
4194 {
4195   ptid_t *ptid = (ptid_t *) arg;
4196
4197   gdb_assert (arg != NULL);
4198
4199   /* Unpause all */
4200   target_resume (*ptid, 0, GDB_SIGNAL_0);
4201 }
4202
4203 static VEC(static_tracepoint_marker_p) *
4204 linux_child_static_tracepoint_markers_by_strid (struct target_ops *self,
4205                                                 const char *strid)
4206 {
4207   char s[IPA_CMD_BUF_SIZE];
4208   struct cleanup *old_chain;
4209   int pid = ptid_get_pid (inferior_ptid);
4210   VEC(static_tracepoint_marker_p) *markers = NULL;
4211   struct static_tracepoint_marker *marker = NULL;
4212   char *p = s;
4213   ptid_t ptid = ptid_build (pid, 0, 0);
4214
4215   /* Pause all */
4216   target_stop (ptid);
4217
4218   memcpy (s, "qTfSTM", sizeof ("qTfSTM"));
4219   s[sizeof ("qTfSTM")] = 0;
4220
4221   agent_run_command (pid, s, strlen (s) + 1);
4222
4223   old_chain = make_cleanup (free_current_marker, &marker);
4224   make_cleanup (cleanup_target_stop, &ptid);
4225
4226   while (*p++ == 'm')
4227     {
4228       if (marker == NULL)
4229         marker = XCNEW (struct static_tracepoint_marker);
4230
4231       do
4232         {
4233           parse_static_tracepoint_marker_definition (p, &p, marker);
4234
4235           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
4236             {
4237               VEC_safe_push (static_tracepoint_marker_p,
4238                              markers, marker);
4239               marker = NULL;
4240             }
4241           else
4242             {
4243               release_static_tracepoint_marker (marker);
4244               memset (marker, 0, sizeof (*marker));
4245             }
4246         }
4247       while (*p++ == ',');      /* comma-separated list */
4248
4249       memcpy (s, "qTsSTM", sizeof ("qTsSTM"));
4250       s[sizeof ("qTsSTM")] = 0;
4251       agent_run_command (pid, s, strlen (s) + 1);
4252       p = s;
4253     }
4254
4255   do_cleanups (old_chain);
4256
4257   return markers;
4258 }
4259
4260 /* Create a prototype generic GNU/Linux target.  The client can override
4261    it with local methods.  */
4262
4263 static void
4264 linux_target_install_ops (struct target_ops *t)
4265 {
4266   t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
4267   t->to_remove_fork_catchpoint = linux_child_remove_fork_catchpoint;
4268   t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
4269   t->to_remove_vfork_catchpoint = linux_child_remove_vfork_catchpoint;
4270   t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
4271   t->to_remove_exec_catchpoint = linux_child_remove_exec_catchpoint;
4272   t->to_set_syscall_catchpoint = linux_child_set_syscall_catchpoint;
4273   t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
4274   t->to_post_startup_inferior = linux_child_post_startup_inferior;
4275   t->to_post_attach = linux_child_post_attach;
4276   t->to_follow_fork = linux_child_follow_fork;
4277
4278   super_xfer_partial = t->to_xfer_partial;
4279   t->to_xfer_partial = linux_xfer_partial;
4280
4281   t->to_static_tracepoint_markers_by_strid
4282     = linux_child_static_tracepoint_markers_by_strid;
4283 }
4284
4285 struct target_ops *
4286 linux_target (void)
4287 {
4288   struct target_ops *t;
4289
4290   t = inf_ptrace_target ();
4291   linux_target_install_ops (t);
4292
4293   return t;
4294 }
4295
4296 struct target_ops *
4297 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
4298 {
4299   struct target_ops *t;
4300
4301   t = inf_ptrace_trad_target (register_u_offset);
4302   linux_target_install_ops (t);
4303
4304   return t;
4305 }
4306
4307 /* target_is_async_p implementation.  */
4308
4309 static int
4310 linux_nat_is_async_p (struct target_ops *ops)
4311 {
4312   /* NOTE: palves 2008-03-21: We're only async when the user requests
4313      it explicitly with the "set target-async" command.
4314      Someday, linux will always be async.  */
4315   return target_async_permitted;
4316 }
4317
4318 /* target_can_async_p implementation.  */
4319
4320 static int
4321 linux_nat_can_async_p (struct target_ops *ops)
4322 {
4323   /* NOTE: palves 2008-03-21: We're only async when the user requests
4324      it explicitly with the "set target-async" command.
4325      Someday, linux will always be async.  */
4326   return target_async_permitted;
4327 }
4328
4329 static int
4330 linux_nat_supports_non_stop (struct target_ops *self)
4331 {
4332   return 1;
4333 }
4334
4335 /* True if we want to support multi-process.  To be removed when GDB
4336    supports multi-exec.  */
4337
4338 int linux_multi_process = 1;
4339
4340 static int
4341 linux_nat_supports_multi_process (struct target_ops *self)
4342 {
4343   return linux_multi_process;
4344 }
4345
4346 static int
4347 linux_nat_supports_disable_randomization (struct target_ops *self)
4348 {
4349 #ifdef HAVE_PERSONALITY
4350   return 1;
4351 #else
4352   return 0;
4353 #endif
4354 }
4355
4356 static int async_terminal_is_ours = 1;
4357
4358 /* target_terminal_inferior implementation.
4359
4360    This is a wrapper around child_terminal_inferior to add async support.  */
4361
4362 static void
4363 linux_nat_terminal_inferior (struct target_ops *self)
4364 {
4365   if (!target_is_async_p ())
4366     {
4367       /* Async mode is disabled.  */
4368       child_terminal_inferior (self);
4369       return;
4370     }
4371
4372   child_terminal_inferior (self);
4373
4374   /* Calls to target_terminal_*() are meant to be idempotent.  */
4375   if (!async_terminal_is_ours)
4376     return;
4377
4378   delete_file_handler (input_fd);
4379   async_terminal_is_ours = 0;
4380   set_sigint_trap ();
4381 }
4382
4383 /* target_terminal_ours implementation.
4384
4385    This is a wrapper around child_terminal_ours to add async support (and
4386    implement the target_terminal_ours vs target_terminal_ours_for_output
4387    distinction).  child_terminal_ours is currently no different than
4388    child_terminal_ours_for_output.
4389    We leave target_terminal_ours_for_output alone, leaving it to
4390    child_terminal_ours_for_output.  */
4391
4392 static void
4393 linux_nat_terminal_ours (struct target_ops *self)
4394 {
4395   if (!target_is_async_p ())
4396     {
4397       /* Async mode is disabled.  */
4398       child_terminal_ours (self);
4399       return;
4400     }
4401
4402   /* GDB should never give the terminal to the inferior if the
4403      inferior is running in the background (run&, continue&, etc.),
4404      but claiming it sure should.  */
4405   child_terminal_ours (self);
4406
4407   if (async_terminal_is_ours)
4408     return;
4409
4410   clear_sigint_trap ();
4411   add_file_handler (input_fd, stdin_event_handler, 0);
4412   async_terminal_is_ours = 1;
4413 }
4414
4415 static void (*async_client_callback) (enum inferior_event_type event_type,
4416                                       void *context);
4417 static void *async_client_context;
4418
4419 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
4420    so we notice when any child changes state, and notify the
4421    event-loop; it allows us to use sigsuspend in linux_nat_wait_1
4422    above to wait for the arrival of a SIGCHLD.  */
4423
4424 static void
4425 sigchld_handler (int signo)
4426 {
4427   int old_errno = errno;
4428
4429   if (debug_linux_nat)
4430     ui_file_write_async_safe (gdb_stdlog,
4431                               "sigchld\n", sizeof ("sigchld\n") - 1);
4432
4433   if (signo == SIGCHLD
4434       && linux_nat_event_pipe[0] != -1)
4435     async_file_mark (); /* Let the event loop know that there are
4436                            events to handle.  */
4437
4438   errno = old_errno;
4439 }
4440
4441 /* Callback registered with the target events file descriptor.  */
4442
4443 static void
4444 handle_target_event (int error, gdb_client_data client_data)
4445 {
4446   (*async_client_callback) (INF_REG_EVENT, async_client_context);
4447 }
4448
4449 /* Create/destroy the target events pipe.  Returns previous state.  */
4450
4451 static int
4452 linux_async_pipe (int enable)
4453 {
4454   int previous = (linux_nat_event_pipe[0] != -1);
4455
4456   if (previous != enable)
4457     {
4458       sigset_t prev_mask;
4459
4460       /* Block child signals while we create/destroy the pipe, as
4461          their handler writes to it.  */
4462       block_child_signals (&prev_mask);
4463
4464       if (enable)
4465         {
4466           if (gdb_pipe_cloexec (linux_nat_event_pipe) == -1)
4467             internal_error (__FILE__, __LINE__,
4468                             "creating event pipe failed.");
4469
4470           fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
4471           fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
4472         }
4473       else
4474         {
4475           close (linux_nat_event_pipe[0]);
4476           close (linux_nat_event_pipe[1]);
4477           linux_nat_event_pipe[0] = -1;
4478           linux_nat_event_pipe[1] = -1;
4479         }
4480
4481       restore_child_signals_mask (&prev_mask);
4482     }
4483
4484   return previous;
4485 }
4486
4487 /* target_async implementation.  */
4488
4489 static void
4490 linux_nat_async (struct target_ops *ops,
4491                  void (*callback) (enum inferior_event_type event_type,
4492                                    void *context),
4493                  void *context)
4494 {
4495   if (callback != NULL)
4496     {
4497       async_client_callback = callback;
4498       async_client_context = context;
4499       if (!linux_async_pipe (1))
4500         {
4501           add_file_handler (linux_nat_event_pipe[0],
4502                             handle_target_event, NULL);
4503           /* There may be pending events to handle.  Tell the event loop
4504              to poll them.  */
4505           async_file_mark ();
4506         }
4507     }
4508   else
4509     {
4510       async_client_callback = callback;
4511       async_client_context = context;
4512       delete_file_handler (linux_nat_event_pipe[0]);
4513       linux_async_pipe (0);
4514     }
4515   return;
4516 }
4517
4518 /* Stop an LWP, and push a GDB_SIGNAL_0 stop status if no other
4519    event came out.  */
4520
4521 static int
4522 linux_nat_stop_lwp (struct lwp_info *lwp, void *data)
4523 {
4524   if (!lwp->stopped)
4525     {
4526       if (debug_linux_nat)
4527         fprintf_unfiltered (gdb_stdlog,
4528                             "LNSL: running -> suspending %s\n",
4529                             target_pid_to_str (lwp->ptid));
4530
4531
4532       if (lwp->last_resume_kind == resume_stop)
4533         {
4534           if (debug_linux_nat)
4535             fprintf_unfiltered (gdb_stdlog,
4536                                 "linux-nat: already stopping LWP %ld at "
4537                                 "GDB's request\n",
4538                                 ptid_get_lwp (lwp->ptid));
4539           return 0;
4540         }
4541
4542       stop_callback (lwp, NULL);
4543       lwp->last_resume_kind = resume_stop;
4544     }
4545   else
4546     {
4547       /* Already known to be stopped; do nothing.  */
4548
4549       if (debug_linux_nat)
4550         {
4551           if (find_thread_ptid (lwp->ptid)->stop_requested)
4552             fprintf_unfiltered (gdb_stdlog,
4553                                 "LNSL: already stopped/stop_requested %s\n",
4554                                 target_pid_to_str (lwp->ptid));
4555           else
4556             fprintf_unfiltered (gdb_stdlog,
4557                                 "LNSL: already stopped/no "
4558                                 "stop_requested yet %s\n",
4559                                 target_pid_to_str (lwp->ptid));
4560         }
4561     }
4562   return 0;
4563 }
4564
4565 static void
4566 linux_nat_stop (struct target_ops *self, ptid_t ptid)
4567 {
4568   if (non_stop)
4569     iterate_over_lwps (ptid, linux_nat_stop_lwp, NULL);
4570   else
4571     linux_ops->to_stop (linux_ops, ptid);
4572 }
4573
4574 static void
4575 linux_nat_close (struct target_ops *self)
4576 {
4577   /* Unregister from the event loop.  */
4578   if (linux_nat_is_async_p (self))
4579     linux_nat_async (self, NULL, NULL);
4580
4581   if (linux_ops->to_close)
4582     linux_ops->to_close (linux_ops);
4583
4584   super_close (self);
4585 }
4586
4587 /* When requests are passed down from the linux-nat layer to the
4588    single threaded inf-ptrace layer, ptids of (lwpid,0,0) form are
4589    used.  The address space pointer is stored in the inferior object,
4590    but the common code that is passed such ptid can't tell whether
4591    lwpid is a "main" process id or not (it assumes so).  We reverse
4592    look up the "main" process id from the lwp here.  */
4593
4594 static struct address_space *
4595 linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
4596 {
4597   struct lwp_info *lwp;
4598   struct inferior *inf;
4599   int pid;
4600
4601   if (ptid_get_lwp (ptid) == 0)
4602     {
4603       /* An (lwpid,0,0) ptid.  Look up the lwp object to get at the
4604          tgid.  */
4605       lwp = find_lwp_pid (ptid);
4606       pid = ptid_get_pid (lwp->ptid);
4607     }
4608   else
4609     {
4610       /* A (pid,lwpid,0) ptid.  */
4611       pid = ptid_get_pid (ptid);
4612     }
4613
4614   inf = find_inferior_pid (pid);
4615   gdb_assert (inf != NULL);
4616   return inf->aspace;
4617 }
4618
4619 /* Return the cached value of the processor core for thread PTID.  */
4620
4621 static int
4622 linux_nat_core_of_thread (struct target_ops *ops, ptid_t ptid)
4623 {
4624   struct lwp_info *info = find_lwp_pid (ptid);
4625
4626   if (info)
4627     return info->core;
4628   return -1;
4629 }
4630
4631 void
4632 linux_nat_add_target (struct target_ops *t)
4633 {
4634   /* Save the provided single-threaded target.  We save this in a separate
4635      variable because another target we've inherited from (e.g. inf-ptrace)
4636      may have saved a pointer to T; we want to use it for the final
4637      process stratum target.  */
4638   linux_ops_saved = *t;
4639   linux_ops = &linux_ops_saved;
4640
4641   /* Override some methods for multithreading.  */
4642   t->to_create_inferior = linux_nat_create_inferior;
4643   t->to_attach = linux_nat_attach;
4644   t->to_detach = linux_nat_detach;
4645   t->to_resume = linux_nat_resume;
4646   t->to_wait = linux_nat_wait;
4647   t->to_pass_signals = linux_nat_pass_signals;
4648   t->to_xfer_partial = linux_nat_xfer_partial;
4649   t->to_kill = linux_nat_kill;
4650   t->to_mourn_inferior = linux_nat_mourn_inferior;
4651   t->to_thread_alive = linux_nat_thread_alive;
4652   t->to_pid_to_str = linux_nat_pid_to_str;
4653   t->to_thread_name = linux_nat_thread_name;
4654   t->to_has_thread_control = tc_schedlock;
4655   t->to_thread_address_space = linux_nat_thread_address_space;
4656   t->to_stopped_by_watchpoint = linux_nat_stopped_by_watchpoint;
4657   t->to_stopped_data_address = linux_nat_stopped_data_address;
4658
4659   t->to_can_async_p = linux_nat_can_async_p;
4660   t->to_is_async_p = linux_nat_is_async_p;
4661   t->to_supports_non_stop = linux_nat_supports_non_stop;
4662   t->to_async = linux_nat_async;
4663   t->to_terminal_inferior = linux_nat_terminal_inferior;
4664   t->to_terminal_ours = linux_nat_terminal_ours;
4665
4666   super_close = t->to_close;
4667   t->to_close = linux_nat_close;
4668
4669   /* Methods for non-stop support.  */
4670   t->to_stop = linux_nat_stop;
4671
4672   t->to_supports_multi_process = linux_nat_supports_multi_process;
4673
4674   t->to_supports_disable_randomization
4675     = linux_nat_supports_disable_randomization;
4676
4677   t->to_core_of_thread = linux_nat_core_of_thread;
4678
4679   /* We don't change the stratum; this target will sit at
4680      process_stratum and thread_db will set at thread_stratum.  This
4681      is a little strange, since this is a multi-threaded-capable
4682      target, but we want to be on the stack below thread_db, and we
4683      also want to be used for single-threaded processes.  */
4684
4685   add_target (t);
4686 }
4687
4688 /* Register a method to call whenever a new thread is attached.  */
4689 void
4690 linux_nat_set_new_thread (struct target_ops *t,
4691                           void (*new_thread) (struct lwp_info *))
4692 {
4693   /* Save the pointer.  We only support a single registered instance
4694      of the GNU/Linux native target, so we do not need to map this to
4695      T.  */
4696   linux_nat_new_thread = new_thread;
4697 }
4698
4699 /* See declaration in linux-nat.h.  */
4700
4701 void
4702 linux_nat_set_new_fork (struct target_ops *t,
4703                         linux_nat_new_fork_ftype *new_fork)
4704 {
4705   /* Save the pointer.  */
4706   linux_nat_new_fork = new_fork;
4707 }
4708
4709 /* See declaration in linux-nat.h.  */
4710
4711 void
4712 linux_nat_set_forget_process (struct target_ops *t,
4713                               linux_nat_forget_process_ftype *fn)
4714 {
4715   /* Save the pointer.  */
4716   linux_nat_forget_process_hook = fn;
4717 }
4718
4719 /* See declaration in linux-nat.h.  */
4720
4721 void
4722 linux_nat_forget_process (pid_t pid)
4723 {
4724   if (linux_nat_forget_process_hook != NULL)
4725     linux_nat_forget_process_hook (pid);
4726 }
4727
4728 /* Register a method that converts a siginfo object between the layout
4729    that ptrace returns, and the layout in the architecture of the
4730    inferior.  */
4731 void
4732 linux_nat_set_siginfo_fixup (struct target_ops *t,
4733                              int (*siginfo_fixup) (siginfo_t *,
4734                                                    gdb_byte *,
4735                                                    int))
4736 {
4737   /* Save the pointer.  */
4738   linux_nat_siginfo_fixup = siginfo_fixup;
4739 }
4740
4741 /* Register a method to call prior to resuming a thread.  */
4742
4743 void
4744 linux_nat_set_prepare_to_resume (struct target_ops *t,
4745                                  void (*prepare_to_resume) (struct lwp_info *))
4746 {
4747   /* Save the pointer.  */
4748   linux_nat_prepare_to_resume = prepare_to_resume;
4749 }
4750
4751 /* See linux-nat.h.  */
4752
4753 int
4754 linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo)
4755 {
4756   int pid;
4757
4758   pid = ptid_get_lwp (ptid);
4759   if (pid == 0)
4760     pid = ptid_get_pid (ptid);
4761
4762   errno = 0;
4763   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, siginfo);
4764   if (errno != 0)
4765     {
4766       memset (siginfo, 0, sizeof (*siginfo));
4767       return 0;
4768     }
4769   return 1;
4770 }
4771
4772 /* Provide a prototype to silence -Wmissing-prototypes.  */
4773 extern initialize_file_ftype _initialize_linux_nat;
4774
4775 void
4776 _initialize_linux_nat (void)
4777 {
4778   add_setshow_zuinteger_cmd ("lin-lwp", class_maintenance,
4779                              &debug_linux_nat, _("\
4780 Set debugging of GNU/Linux lwp module."), _("\
4781 Show debugging of GNU/Linux lwp module."), _("\
4782 Enables printf debugging output."),
4783                              NULL,
4784                              show_debug_linux_nat,
4785                              &setdebuglist, &showdebuglist);
4786
4787   /* Save this mask as the default.  */
4788   sigprocmask (SIG_SETMASK, NULL, &normal_mask);
4789
4790   /* Install a SIGCHLD handler.  */
4791   sigchld_action.sa_handler = sigchld_handler;
4792   sigemptyset (&sigchld_action.sa_mask);
4793   sigchld_action.sa_flags = SA_RESTART;
4794
4795   /* Make it the default.  */
4796   sigaction (SIGCHLD, &sigchld_action, NULL);
4797
4798   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
4799   sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
4800   sigdelset (&suspend_mask, SIGCHLD);
4801
4802   sigemptyset (&blocked_mask);
4803
4804   /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to
4805      support read-only process state.  */
4806   linux_ptrace_set_additional_flags (PTRACE_O_TRACESYSGOOD
4807                                      | PTRACE_O_TRACEVFORKDONE
4808                                      | PTRACE_O_TRACEVFORK
4809                                      | PTRACE_O_TRACEFORK
4810                                      | PTRACE_O_TRACEEXEC);
4811 }
4812 \f
4813
4814 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
4815    the GNU/Linux Threads library and therefore doesn't really belong
4816    here.  */
4817
4818 /* Read variable NAME in the target and return its value if found.
4819    Otherwise return zero.  It is assumed that the type of the variable
4820    is `int'.  */
4821
4822 static int
4823 get_signo (const char *name)
4824 {
4825   struct bound_minimal_symbol ms;
4826   int signo;
4827
4828   ms = lookup_minimal_symbol (name, NULL, NULL);
4829   if (ms.minsym == NULL)
4830     return 0;
4831
4832   if (target_read_memory (BMSYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
4833                           sizeof (signo)) != 0)
4834     return 0;
4835
4836   return signo;
4837 }
4838
4839 /* Return the set of signals used by the threads library in *SET.  */
4840
4841 void
4842 lin_thread_get_thread_signals (sigset_t *set)
4843 {
4844   struct sigaction action;
4845   int restart, cancel;
4846
4847   sigemptyset (&blocked_mask);
4848   sigemptyset (set);
4849
4850   restart = get_signo ("__pthread_sig_restart");
4851   cancel = get_signo ("__pthread_sig_cancel");
4852
4853   /* LinuxThreads normally uses the first two RT signals, but in some legacy
4854      cases may use SIGUSR1/SIGUSR2.  NPTL always uses RT signals, but does
4855      not provide any way for the debugger to query the signal numbers -
4856      fortunately they don't change!  */
4857
4858   if (restart == 0)
4859     restart = __SIGRTMIN;
4860
4861   if (cancel == 0)
4862     cancel = __SIGRTMIN + 1;
4863
4864   sigaddset (set, restart);
4865   sigaddset (set, cancel);
4866
4867   /* The GNU/Linux Threads library makes terminating threads send a
4868      special "cancel" signal instead of SIGCHLD.  Make sure we catch
4869      those (to prevent them from terminating GDB itself, which is
4870      likely to be their default action) and treat them the same way as
4871      SIGCHLD.  */
4872
4873   action.sa_handler = sigchld_handler;
4874   sigemptyset (&action.sa_mask);
4875   action.sa_flags = SA_RESTART;
4876   sigaction (cancel, &action, NULL);
4877
4878   /* We block the "cancel" signal throughout this code ...  */
4879   sigaddset (&blocked_mask, cancel);
4880   sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
4881
4882   /* ... except during a sigsuspend.  */
4883   sigdelset (&suspend_mask, cancel);
4884 }