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