gdbserver/Linux: unbreak thread event randomization
[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 static int resume_stopped_resumed_lwps (struct lwp_info *lp, void *data);
268
269 static void block_child_signals (sigset_t *prev_mask);
270 static void restore_child_signals_mask (sigset_t *prev_mask);
271
272 struct lwp_info;
273 static struct lwp_info *add_lwp (ptid_t ptid);
274 static void purge_lwp_list (int pid);
275 static void delete_lwp (ptid_t ptid);
276 static struct lwp_info *find_lwp_pid (ptid_t ptid);
277
278 static int lwp_status_pending_p (struct lwp_info *lp);
279
280 static int check_stopped_by_breakpoint (struct lwp_info *lp);
281 static int sigtrap_is_event (int status);
282 static int (*linux_nat_status_is_event) (int status) = sigtrap_is_event;
283
284 \f
285 /* Trivial list manipulation functions to keep track of a list of
286    new stopped processes.  */
287 static void
288 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
289 {
290   struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
291
292   new_pid->pid = pid;
293   new_pid->status = status;
294   new_pid->next = *listp;
295   *listp = new_pid;
296 }
297
298 static int
299 in_pid_list_p (struct simple_pid_list *list, int pid)
300 {
301   struct simple_pid_list *p;
302
303   for (p = list; p != NULL; p = p->next)
304     if (p->pid == pid)
305       return 1;
306   return 0;
307 }
308
309 static int
310 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
311 {
312   struct simple_pid_list **p;
313
314   for (p = listp; *p != NULL; p = &(*p)->next)
315     if ((*p)->pid == pid)
316       {
317         struct simple_pid_list *next = (*p)->next;
318
319         *statusp = (*p)->status;
320         xfree (*p);
321         *p = next;
322         return 1;
323       }
324   return 0;
325 }
326
327 /* Initialize ptrace warnings and check for supported ptrace
328    features given PID.
329
330    ATTACHED should be nonzero iff we attached to the inferior.  */
331
332 static void
333 linux_init_ptrace (pid_t pid, int attached)
334 {
335   linux_enable_event_reporting (pid, attached);
336   linux_ptrace_init_warnings ();
337 }
338
339 static void
340 linux_child_post_attach (struct target_ops *self, int pid)
341 {
342   linux_init_ptrace (pid, 1);
343 }
344
345 static void
346 linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid)
347 {
348   linux_init_ptrace (ptid_get_pid (ptid), 0);
349 }
350
351 /* Return the number of known LWPs in the tgid given by PID.  */
352
353 static int
354 num_lwps (int pid)
355 {
356   int count = 0;
357   struct lwp_info *lp;
358
359   for (lp = lwp_list; lp; lp = lp->next)
360     if (ptid_get_pid (lp->ptid) == pid)
361       count++;
362
363   return count;
364 }
365
366 /* Call delete_lwp with prototype compatible for make_cleanup.  */
367
368 static void
369 delete_lwp_cleanup (void *lp_voidp)
370 {
371   struct lwp_info *lp = lp_voidp;
372
373   delete_lwp (lp->ptid);
374 }
375
376 /* Target hook for follow_fork.  On entry inferior_ptid must be the
377    ptid of the followed inferior.  At return, inferior_ptid will be
378    unchanged.  */
379
380 static int
381 linux_child_follow_fork (struct target_ops *ops, int follow_child,
382                          int detach_fork)
383 {
384   if (!follow_child)
385     {
386       struct lwp_info *child_lp = NULL;
387       int status = W_STOPCODE (0);
388       struct cleanup *old_chain;
389       int has_vforked;
390       ptid_t parent_ptid, child_ptid;
391       int parent_pid, child_pid;
392
393       has_vforked = (inferior_thread ()->pending_follow.kind
394                      == TARGET_WAITKIND_VFORKED);
395       parent_ptid = inferior_ptid;
396       child_ptid = inferior_thread ()->pending_follow.value.related_pid;
397       parent_pid = ptid_get_lwp (parent_ptid);
398       child_pid = ptid_get_lwp (child_ptid);
399
400       /* We're already attached to the parent, by default.  */
401       old_chain = save_inferior_ptid ();
402       inferior_ptid = child_ptid;
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 (parent_ptid);
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 is already
998      in our list of LWPs.  If we're not seeing exit events from threads
999      and we've had PID wraparound since we last tried to stop all threads,
1000      this assumption might be wrong; fortunately, this is very unlikely
1001      to happen.  */
1002   if (lp == NULL)
1003     {
1004       int status, cloned = 0, signalled = 0;
1005
1006       if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) < 0)
1007         {
1008           if (linux_supports_tracefork ())
1009             {
1010               /* If we haven't stopped all threads when we get here,
1011                  we may have seen a thread listed in thread_db's list,
1012                  but not processed the PTRACE_EVENT_CLONE yet.  If
1013                  that's the case, ignore this new thread, and let
1014                  normal event handling discover it later.  */
1015               if (in_pid_list_p (stopped_pids, lwpid))
1016                 {
1017                   /* We've already seen this thread stop, but we
1018                      haven't seen the PTRACE_EVENT_CLONE extended
1019                      event yet.  */
1020                   if (debug_linux_nat)
1021                     fprintf_unfiltered (gdb_stdlog,
1022                                         "LLAL: attach failed, but already seen "
1023                                         "this thread %s stop\n",
1024                                         target_pid_to_str (ptid));
1025                   return 1;
1026                 }
1027               else
1028                 {
1029                   int new_pid;
1030                   int status;
1031
1032                   if (debug_linux_nat)
1033                     fprintf_unfiltered (gdb_stdlog,
1034                                         "LLAL: attach failed, and haven't seen "
1035                                         "this thread %s stop yet\n",
1036                                         target_pid_to_str (ptid));
1037
1038                   /* We may or may not be attached to the LWP already.
1039                      Try waitpid on it.  If that errors, we're not
1040                      attached to the LWP yet.  Otherwise, we're
1041                      already attached.  */
1042                   gdb_assert (lwpid > 0);
1043                   new_pid = my_waitpid (lwpid, &status, WNOHANG);
1044                   if (new_pid == -1 && errno == ECHILD)
1045                     new_pid = my_waitpid (lwpid, &status, __WCLONE | WNOHANG);
1046                   if (new_pid != -1)
1047                     {
1048                       if (new_pid == 0)
1049                         {
1050                           /* The child hasn't stopped for its initial
1051                              SIGSTOP stop yet.  */
1052                           if (debug_linux_nat)
1053                             fprintf_unfiltered (gdb_stdlog,
1054                                                 "LLAL: child hasn't "
1055                                                 "stopped yet\n");
1056                         }
1057                       else if (WIFSTOPPED (status))
1058                         {
1059                           if (debug_linux_nat)
1060                             fprintf_unfiltered (gdb_stdlog,
1061                                                 "LLAL: adding to stopped_pids\n");
1062                           add_to_pid_list (&stopped_pids, lwpid, status);
1063                         }
1064                       return 1;
1065                     }
1066                 }
1067             }
1068
1069           /* If we fail to attach to the thread, issue a warning,
1070              but continue.  One way this can happen is if thread
1071              creation is interrupted; as of Linux kernel 2.6.19, a
1072              bug may place threads in the thread list and then fail
1073              to create them.  */
1074           warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
1075                    safe_strerror (errno));
1076           return -1;
1077         }
1078
1079       if (debug_linux_nat)
1080         fprintf_unfiltered (gdb_stdlog,
1081                             "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
1082                             target_pid_to_str (ptid));
1083
1084       status = linux_nat_post_attach_wait (ptid, 0, &cloned, &signalled);
1085       if (!WIFSTOPPED (status))
1086         return 1;
1087
1088       lp = add_lwp (ptid);
1089       lp->stopped = 1;
1090       lp->last_resume_kind = resume_stop;
1091       lp->cloned = cloned;
1092       lp->signalled = signalled;
1093       if (WSTOPSIG (status) != SIGSTOP)
1094         {
1095           lp->resumed = 1;
1096           lp->status = status;
1097         }
1098
1099       target_post_attach (ptid_get_lwp (lp->ptid));
1100
1101       if (debug_linux_nat)
1102         {
1103           fprintf_unfiltered (gdb_stdlog,
1104                               "LLAL: waitpid %s received %s\n",
1105                               target_pid_to_str (ptid),
1106                               status_to_str (status));
1107         }
1108     }
1109
1110   return 0;
1111 }
1112
1113 static void
1114 linux_nat_create_inferior (struct target_ops *ops, 
1115                            char *exec_file, char *allargs, char **env,
1116                            int from_tty)
1117 {
1118   struct cleanup *restore_personality
1119     = maybe_disable_address_space_randomization (disable_randomization);
1120
1121   /* The fork_child mechanism is synchronous and calls target_wait, so
1122      we have to mask the async mode.  */
1123
1124   /* Make sure we report all signals during startup.  */
1125   linux_nat_pass_signals (ops, 0, NULL);
1126
1127   linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty);
1128
1129   do_cleanups (restore_personality);
1130 }
1131
1132 /* Callback for linux_proc_attach_tgid_threads.  Attach to PTID if not
1133    already attached.  Returns true if a new LWP is found, false
1134    otherwise.  */
1135
1136 static int
1137 attach_proc_task_lwp_callback (ptid_t ptid)
1138 {
1139   struct lwp_info *lp;
1140
1141   /* Ignore LWPs we're already attached to.  */
1142   lp = find_lwp_pid (ptid);
1143   if (lp == NULL)
1144     {
1145       int lwpid = ptid_get_lwp (ptid);
1146
1147       if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) < 0)
1148         {
1149           int err = errno;
1150
1151           /* Be quiet if we simply raced with the thread exiting.
1152              EPERM is returned if the thread's task still exists, and
1153              is marked as exited or zombie, as well as other
1154              conditions, so in that case, confirm the status in
1155              /proc/PID/status.  */
1156           if (err == ESRCH
1157               || (err == EPERM && linux_proc_pid_is_gone (lwpid)))
1158             {
1159               if (debug_linux_nat)
1160                 {
1161                   fprintf_unfiltered (gdb_stdlog,
1162                                       "Cannot attach to lwp %d: "
1163                                       "thread is gone (%d: %s)\n",
1164                                       lwpid, err, safe_strerror (err));
1165                 }
1166             }
1167           else
1168             {
1169               warning (_("Cannot attach to lwp %d: %s"),
1170                        lwpid,
1171                        linux_ptrace_attach_fail_reason_string (ptid,
1172                                                                err));
1173             }
1174         }
1175       else
1176         {
1177           if (debug_linux_nat)
1178             fprintf_unfiltered (gdb_stdlog,
1179                                 "PTRACE_ATTACH %s, 0, 0 (OK)\n",
1180                                 target_pid_to_str (ptid));
1181
1182           lp = add_lwp (ptid);
1183           lp->cloned = 1;
1184
1185           /* The next time we wait for this LWP we'll see a SIGSTOP as
1186              PTRACE_ATTACH brings it to a halt.  */
1187           lp->signalled = 1;
1188
1189           /* We need to wait for a stop before being able to make the
1190              next ptrace call on this LWP.  */
1191           lp->must_set_ptrace_flags = 1;
1192         }
1193
1194       return 1;
1195     }
1196   return 0;
1197 }
1198
1199 static void
1200 linux_nat_attach (struct target_ops *ops, const char *args, int from_tty)
1201 {
1202   struct lwp_info *lp;
1203   int status;
1204   ptid_t ptid;
1205
1206   /* Make sure we report all signals during attach.  */
1207   linux_nat_pass_signals (ops, 0, NULL);
1208
1209   TRY
1210     {
1211       linux_ops->to_attach (ops, args, from_tty);
1212     }
1213   CATCH (ex, RETURN_MASK_ERROR)
1214     {
1215       pid_t pid = parse_pid_to_attach (args);
1216       struct buffer buffer;
1217       char *message, *buffer_s;
1218
1219       message = xstrdup (ex.message);
1220       make_cleanup (xfree, message);
1221
1222       buffer_init (&buffer);
1223       linux_ptrace_attach_fail_reason (pid, &buffer);
1224
1225       buffer_grow_str0 (&buffer, "");
1226       buffer_s = buffer_finish (&buffer);
1227       make_cleanup (xfree, buffer_s);
1228
1229       if (*buffer_s != '\0')
1230         throw_error (ex.error, "warning: %s\n%s", buffer_s, message);
1231       else
1232         throw_error (ex.error, "%s", message);
1233     }
1234   END_CATCH
1235
1236   /* The ptrace base target adds the main thread with (pid,0,0)
1237      format.  Decorate it with lwp info.  */
1238   ptid = ptid_build (ptid_get_pid (inferior_ptid),
1239                      ptid_get_pid (inferior_ptid),
1240                      0);
1241   thread_change_ptid (inferior_ptid, ptid);
1242
1243   /* Add the initial process as the first LWP to the list.  */
1244   lp = add_initial_lwp (ptid);
1245
1246   status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->cloned,
1247                                        &lp->signalled);
1248   if (!WIFSTOPPED (status))
1249     {
1250       if (WIFEXITED (status))
1251         {
1252           int exit_code = WEXITSTATUS (status);
1253
1254           target_terminal_ours ();
1255           target_mourn_inferior ();
1256           if (exit_code == 0)
1257             error (_("Unable to attach: program exited normally."));
1258           else
1259             error (_("Unable to attach: program exited with code %d."),
1260                    exit_code);
1261         }
1262       else if (WIFSIGNALED (status))
1263         {
1264           enum gdb_signal signo;
1265
1266           target_terminal_ours ();
1267           target_mourn_inferior ();
1268
1269           signo = gdb_signal_from_host (WTERMSIG (status));
1270           error (_("Unable to attach: program terminated with signal "
1271                    "%s, %s."),
1272                  gdb_signal_to_name (signo),
1273                  gdb_signal_to_string (signo));
1274         }
1275
1276       internal_error (__FILE__, __LINE__,
1277                       _("unexpected status %d for PID %ld"),
1278                       status, (long) ptid_get_lwp (ptid));
1279     }
1280
1281   lp->stopped = 1;
1282
1283   /* Save the wait status to report later.  */
1284   lp->resumed = 1;
1285   if (debug_linux_nat)
1286     fprintf_unfiltered (gdb_stdlog,
1287                         "LNA: waitpid %ld, saving status %s\n",
1288                         (long) ptid_get_pid (lp->ptid), status_to_str (status));
1289
1290   lp->status = status;
1291
1292   /* We must attach to every LWP.  If /proc is mounted, use that to
1293      find them now.  The inferior may be using raw clone instead of
1294      using pthreads.  But even if it is using pthreads, thread_db
1295      walks structures in the inferior's address space to find the list
1296      of threads/LWPs, and those structures may well be corrupted.
1297      Note that once thread_db is loaded, we'll still use it to list
1298      threads and associate pthread info with each LWP.  */
1299   linux_proc_attach_tgid_threads (ptid_get_pid (lp->ptid),
1300                                   attach_proc_task_lwp_callback);
1301
1302   if (target_can_async_p ())
1303     target_async (inferior_event_handler, 0);
1304 }
1305
1306 /* Get pending status of LP.  */
1307 static int
1308 get_pending_status (struct lwp_info *lp, int *status)
1309 {
1310   enum gdb_signal signo = GDB_SIGNAL_0;
1311
1312   /* If we paused threads momentarily, we may have stored pending
1313      events in lp->status or lp->waitstatus (see stop_wait_callback),
1314      and GDB core hasn't seen any signal for those threads.
1315      Otherwise, the last signal reported to the core is found in the
1316      thread object's stop_signal.
1317
1318      There's a corner case that isn't handled here at present.  Only
1319      if the thread stopped with a TARGET_WAITKIND_STOPPED does
1320      stop_signal make sense as a real signal to pass to the inferior.
1321      Some catchpoint related events, like
1322      TARGET_WAITKIND_(V)FORK|EXEC|SYSCALL, have their stop_signal set
1323      to GDB_SIGNAL_SIGTRAP when the catchpoint triggers.  But,
1324      those traps are debug API (ptrace in our case) related and
1325      induced; the inferior wouldn't see them if it wasn't being
1326      traced.  Hence, we should never pass them to the inferior, even
1327      when set to pass state.  Since this corner case isn't handled by
1328      infrun.c when proceeding with a signal, for consistency, neither
1329      do we handle it here (or elsewhere in the file we check for
1330      signal pass state).  Normally SIGTRAP isn't set to pass state, so
1331      this is really a corner case.  */
1332
1333   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
1334     signo = GDB_SIGNAL_0; /* a pending ptrace event, not a real signal.  */
1335   else if (lp->status)
1336     signo = gdb_signal_from_host (WSTOPSIG (lp->status));
1337   else if (non_stop && !is_executing (lp->ptid))
1338     {
1339       struct thread_info *tp = find_thread_ptid (lp->ptid);
1340
1341       signo = tp->suspend.stop_signal;
1342     }
1343   else if (!non_stop)
1344     {
1345       struct target_waitstatus last;
1346       ptid_t last_ptid;
1347
1348       get_last_target_status (&last_ptid, &last);
1349
1350       if (ptid_get_lwp (lp->ptid) == ptid_get_lwp (last_ptid))
1351         {
1352           struct thread_info *tp = find_thread_ptid (lp->ptid);
1353
1354           signo = tp->suspend.stop_signal;
1355         }
1356     }
1357
1358   *status = 0;
1359
1360   if (signo == GDB_SIGNAL_0)
1361     {
1362       if (debug_linux_nat)
1363         fprintf_unfiltered (gdb_stdlog,
1364                             "GPT: lwp %s has no pending signal\n",
1365                             target_pid_to_str (lp->ptid));
1366     }
1367   else if (!signal_pass_state (signo))
1368     {
1369       if (debug_linux_nat)
1370         fprintf_unfiltered (gdb_stdlog,
1371                             "GPT: lwp %s had signal %s, "
1372                             "but it is in no pass state\n",
1373                             target_pid_to_str (lp->ptid),
1374                             gdb_signal_to_string (signo));
1375     }
1376   else
1377     {
1378       *status = W_STOPCODE (gdb_signal_to_host (signo));
1379
1380       if (debug_linux_nat)
1381         fprintf_unfiltered (gdb_stdlog,
1382                             "GPT: lwp %s has pending signal %s\n",
1383                             target_pid_to_str (lp->ptid),
1384                             gdb_signal_to_string (signo));
1385     }
1386
1387   return 0;
1388 }
1389
1390 static int
1391 detach_callback (struct lwp_info *lp, void *data)
1392 {
1393   gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1394
1395   if (debug_linux_nat && lp->status)
1396     fprintf_unfiltered (gdb_stdlog, "DC:  Pending %s for %s on detach.\n",
1397                         strsignal (WSTOPSIG (lp->status)),
1398                         target_pid_to_str (lp->ptid));
1399
1400   /* If there is a pending SIGSTOP, get rid of it.  */
1401   if (lp->signalled)
1402     {
1403       if (debug_linux_nat)
1404         fprintf_unfiltered (gdb_stdlog,
1405                             "DC: Sending SIGCONT to %s\n",
1406                             target_pid_to_str (lp->ptid));
1407
1408       kill_lwp (ptid_get_lwp (lp->ptid), SIGCONT);
1409       lp->signalled = 0;
1410     }
1411
1412   /* We don't actually detach from the LWP that has an id equal to the
1413      overall process id just yet.  */
1414   if (ptid_get_lwp (lp->ptid) != ptid_get_pid (lp->ptid))
1415     {
1416       int status = 0;
1417
1418       /* Pass on any pending signal for this LWP.  */
1419       get_pending_status (lp, &status);
1420
1421       if (linux_nat_prepare_to_resume != NULL)
1422         linux_nat_prepare_to_resume (lp);
1423       errno = 0;
1424       if (ptrace (PTRACE_DETACH, ptid_get_lwp (lp->ptid), 0,
1425                   WSTOPSIG (status)) < 0)
1426         error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
1427                safe_strerror (errno));
1428
1429       if (debug_linux_nat)
1430         fprintf_unfiltered (gdb_stdlog,
1431                             "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1432                             target_pid_to_str (lp->ptid),
1433                             strsignal (WSTOPSIG (status)));
1434
1435       delete_lwp (lp->ptid);
1436     }
1437
1438   return 0;
1439 }
1440
1441 static void
1442 linux_nat_detach (struct target_ops *ops, const char *args, int from_tty)
1443 {
1444   int pid;
1445   int status;
1446   struct lwp_info *main_lwp;
1447
1448   pid = ptid_get_pid (inferior_ptid);
1449
1450   /* Don't unregister from the event loop, as there may be other
1451      inferiors running. */
1452
1453   /* Stop all threads before detaching.  ptrace requires that the
1454      thread is stopped to sucessfully detach.  */
1455   iterate_over_lwps (pid_to_ptid (pid), stop_callback, NULL);
1456   /* ... and wait until all of them have reported back that
1457      they're no longer running.  */
1458   iterate_over_lwps (pid_to_ptid (pid), stop_wait_callback, NULL);
1459
1460   iterate_over_lwps (pid_to_ptid (pid), detach_callback, NULL);
1461
1462   /* Only the initial process should be left right now.  */
1463   gdb_assert (num_lwps (ptid_get_pid (inferior_ptid)) == 1);
1464
1465   main_lwp = find_lwp_pid (pid_to_ptid (pid));
1466
1467   /* Pass on any pending signal for the last LWP.  */
1468   if ((args == NULL || *args == '\0')
1469       && get_pending_status (main_lwp, &status) != -1
1470       && WIFSTOPPED (status))
1471     {
1472       char *tem;
1473
1474       /* Put the signal number in ARGS so that inf_ptrace_detach will
1475          pass it along with PTRACE_DETACH.  */
1476       tem = alloca (8);
1477       xsnprintf (tem, 8, "%d", (int) WSTOPSIG (status));
1478       args = tem;
1479       if (debug_linux_nat)
1480         fprintf_unfiltered (gdb_stdlog,
1481                             "LND: Sending signal %s to %s\n",
1482                             args,
1483                             target_pid_to_str (main_lwp->ptid));
1484     }
1485
1486   if (linux_nat_prepare_to_resume != NULL)
1487     linux_nat_prepare_to_resume (main_lwp);
1488   delete_lwp (main_lwp->ptid);
1489
1490   if (forks_exist_p ())
1491     {
1492       /* Multi-fork case.  The current inferior_ptid is being detached
1493          from, but there are other viable forks to debug.  Detach from
1494          the current fork, and context-switch to the first
1495          available.  */
1496       linux_fork_detach (args, from_tty);
1497     }
1498   else
1499     linux_ops->to_detach (ops, args, from_tty);
1500 }
1501
1502 /* Resume execution of the inferior process.  If STEP is nonzero,
1503    single-step it.  If SIGNAL is nonzero, give it that signal.  */
1504
1505 static void
1506 linux_resume_one_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
1507 {
1508   lp->step = step;
1509
1510   /* stop_pc doubles as the PC the LWP had when it was last resumed.
1511      We only presently need that if the LWP is stepped though (to
1512      handle the case of stepping a breakpoint instruction).  */
1513   if (step)
1514     {
1515       struct regcache *regcache = get_thread_regcache (lp->ptid);
1516
1517       lp->stop_pc = regcache_read_pc (regcache);
1518     }
1519   else
1520     lp->stop_pc = 0;
1521
1522   if (linux_nat_prepare_to_resume != NULL)
1523     linux_nat_prepare_to_resume (lp);
1524   linux_ops->to_resume (linux_ops, lp->ptid, step, signo);
1525   lp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
1526   lp->stopped = 0;
1527   registers_changed_ptid (lp->ptid);
1528 }
1529
1530 /* Resume LP.  */
1531
1532 static void
1533 resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
1534 {
1535   if (lp->stopped)
1536     {
1537       struct inferior *inf = find_inferior_ptid (lp->ptid);
1538
1539       if (inf->vfork_child != NULL)
1540         {
1541           if (debug_linux_nat)
1542             fprintf_unfiltered (gdb_stdlog,
1543                                 "RC: Not resuming %s (vfork parent)\n",
1544                                 target_pid_to_str (lp->ptid));
1545         }
1546       else if (!lwp_status_pending_p (lp))
1547         {
1548           if (debug_linux_nat)
1549             fprintf_unfiltered (gdb_stdlog,
1550                                 "RC: Resuming sibling %s, %s, %s\n",
1551                                 target_pid_to_str (lp->ptid),
1552                                 (signo != GDB_SIGNAL_0
1553                                  ? strsignal (gdb_signal_to_host (signo))
1554                                  : "0"),
1555                                 step ? "step" : "resume");
1556
1557           linux_resume_one_lwp (lp, step, signo);
1558         }
1559       else
1560         {
1561           if (debug_linux_nat)
1562             fprintf_unfiltered (gdb_stdlog,
1563                                 "RC: Not resuming sibling %s (has pending)\n",
1564                                 target_pid_to_str (lp->ptid));
1565         }
1566     }
1567   else
1568     {
1569       if (debug_linux_nat)
1570         fprintf_unfiltered (gdb_stdlog,
1571                             "RC: Not resuming sibling %s (not stopped)\n",
1572                             target_pid_to_str (lp->ptid));
1573     }
1574 }
1575
1576 /* Callback for iterate_over_lwps.  If LWP is EXCEPT, do nothing.
1577    Resume LWP with the last stop signal, if it is in pass state.  */
1578
1579 static int
1580 linux_nat_resume_callback (struct lwp_info *lp, void *except)
1581 {
1582   enum gdb_signal signo = GDB_SIGNAL_0;
1583
1584   if (lp == except)
1585     return 0;
1586
1587   if (lp->stopped)
1588     {
1589       struct thread_info *thread;
1590
1591       thread = find_thread_ptid (lp->ptid);
1592       if (thread != NULL)
1593         {
1594           signo = thread->suspend.stop_signal;
1595           thread->suspend.stop_signal = GDB_SIGNAL_0;
1596         }
1597     }
1598
1599   resume_lwp (lp, 0, signo);
1600   return 0;
1601 }
1602
1603 static int
1604 resume_clear_callback (struct lwp_info *lp, void *data)
1605 {
1606   lp->resumed = 0;
1607   lp->last_resume_kind = resume_stop;
1608   return 0;
1609 }
1610
1611 static int
1612 resume_set_callback (struct lwp_info *lp, void *data)
1613 {
1614   lp->resumed = 1;
1615   lp->last_resume_kind = resume_continue;
1616   return 0;
1617 }
1618
1619 static void
1620 linux_nat_resume (struct target_ops *ops,
1621                   ptid_t ptid, int step, enum gdb_signal signo)
1622 {
1623   struct lwp_info *lp;
1624   int resume_many;
1625
1626   if (debug_linux_nat)
1627     fprintf_unfiltered (gdb_stdlog,
1628                         "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1629                         step ? "step" : "resume",
1630                         target_pid_to_str (ptid),
1631                         (signo != GDB_SIGNAL_0
1632                          ? strsignal (gdb_signal_to_host (signo)) : "0"),
1633                         target_pid_to_str (inferior_ptid));
1634
1635   /* A specific PTID means `step only this process id'.  */
1636   resume_many = (ptid_equal (minus_one_ptid, ptid)
1637                  || ptid_is_pid (ptid));
1638
1639   /* Mark the lwps we're resuming as resumed.  */
1640   iterate_over_lwps (ptid, resume_set_callback, NULL);
1641
1642   /* See if it's the current inferior that should be handled
1643      specially.  */
1644   if (resume_many)
1645     lp = find_lwp_pid (inferior_ptid);
1646   else
1647     lp = find_lwp_pid (ptid);
1648   gdb_assert (lp != NULL);
1649
1650   /* Remember if we're stepping.  */
1651   lp->last_resume_kind = step ? resume_step : resume_continue;
1652
1653   /* If we have a pending wait status for this thread, there is no
1654      point in resuming the process.  But first make sure that
1655      linux_nat_wait won't preemptively handle the event - we
1656      should never take this short-circuit if we are going to
1657      leave LP running, since we have skipped resuming all the
1658      other threads.  This bit of code needs to be synchronized
1659      with linux_nat_wait.  */
1660
1661   if (lp->status && WIFSTOPPED (lp->status))
1662     {
1663       if (!lp->step
1664           && WSTOPSIG (lp->status)
1665           && sigismember (&pass_mask, WSTOPSIG (lp->status)))
1666         {
1667           if (debug_linux_nat)
1668             fprintf_unfiltered (gdb_stdlog,
1669                                 "LLR: Not short circuiting for ignored "
1670                                 "status 0x%x\n", lp->status);
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           signo = gdb_signal_from_host (WSTOPSIG (lp->status));
1676           lp->status = 0;
1677         }
1678     }
1679
1680   if (lwp_status_pending_p (lp))
1681     {
1682       /* FIXME: What should we do if we are supposed to continue
1683          this thread with a signal?  */
1684       gdb_assert (signo == GDB_SIGNAL_0);
1685
1686       if (debug_linux_nat)
1687         fprintf_unfiltered (gdb_stdlog,
1688                             "LLR: Short circuiting for status 0x%x\n",
1689                             lp->status);
1690
1691       if (target_can_async_p ())
1692         {
1693           target_async (inferior_event_handler, 0);
1694           /* Tell the event loop we have something to process.  */
1695           async_file_mark ();
1696         }
1697       return;
1698     }
1699
1700   if (resume_many)
1701     iterate_over_lwps (ptid, linux_nat_resume_callback, lp);
1702
1703   linux_resume_one_lwp (lp, step, signo);
1704
1705   if (debug_linux_nat)
1706     fprintf_unfiltered (gdb_stdlog,
1707                         "LLR: %s %s, %s (resume event thread)\n",
1708                         step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1709                         target_pid_to_str (ptid),
1710                         (signo != GDB_SIGNAL_0
1711                          ? strsignal (gdb_signal_to_host (signo)) : "0"));
1712
1713   if (target_can_async_p ())
1714     target_async (inferior_event_handler, 0);
1715 }
1716
1717 /* Send a signal to an LWP.  */
1718
1719 static int
1720 kill_lwp (int lwpid, int signo)
1721 {
1722   /* Use tkill, if possible, in case we are using nptl threads.  If tkill
1723      fails, then we are not using nptl threads and we should be using kill.  */
1724
1725 #ifdef HAVE_TKILL_SYSCALL
1726   {
1727     static int tkill_failed;
1728
1729     if (!tkill_failed)
1730       {
1731         int ret;
1732
1733         errno = 0;
1734         ret = syscall (__NR_tkill, lwpid, signo);
1735         if (errno != ENOSYS)
1736           return ret;
1737         tkill_failed = 1;
1738       }
1739   }
1740 #endif
1741
1742   return kill (lwpid, signo);
1743 }
1744
1745 /* Handle a GNU/Linux syscall trap wait response.  If we see a syscall
1746    event, check if the core is interested in it: if not, ignore the
1747    event, and keep waiting; otherwise, we need to toggle the LWP's
1748    syscall entry/exit status, since the ptrace event itself doesn't
1749    indicate it, and report the trap to higher layers.  */
1750
1751 static int
1752 linux_handle_syscall_trap (struct lwp_info *lp, int stopping)
1753 {
1754   struct target_waitstatus *ourstatus = &lp->waitstatus;
1755   struct gdbarch *gdbarch = target_thread_architecture (lp->ptid);
1756   int syscall_number = (int) gdbarch_get_syscall_number (gdbarch, lp->ptid);
1757
1758   if (stopping)
1759     {
1760       /* If we're stopping threads, there's a SIGSTOP pending, which
1761          makes it so that the LWP reports an immediate syscall return,
1762          followed by the SIGSTOP.  Skip seeing that "return" using
1763          PTRACE_CONT directly, and let stop_wait_callback collect the
1764          SIGSTOP.  Later when the thread is resumed, a new syscall
1765          entry event.  If we didn't do this (and returned 0), we'd
1766          leave a syscall entry pending, and our caller, by using
1767          PTRACE_CONT to collect the SIGSTOP, skips the syscall return
1768          itself.  Later, when the user re-resumes this LWP, we'd see
1769          another syscall entry event and we'd mistake it for a return.
1770
1771          If stop_wait_callback didn't force the SIGSTOP out of the LWP
1772          (leaving immediately with LWP->signalled set, without issuing
1773          a PTRACE_CONT), it would still be problematic to leave this
1774          syscall enter pending, as later when the thread is resumed,
1775          it would then see the same syscall exit mentioned above,
1776          followed by the delayed SIGSTOP, while the syscall didn't
1777          actually get to execute.  It seems it would be even more
1778          confusing to the user.  */
1779
1780       if (debug_linux_nat)
1781         fprintf_unfiltered (gdb_stdlog,
1782                             "LHST: ignoring syscall %d "
1783                             "for LWP %ld (stopping threads), "
1784                             "resuming with PTRACE_CONT for SIGSTOP\n",
1785                             syscall_number,
1786                             ptid_get_lwp (lp->ptid));
1787
1788       lp->syscall_state = TARGET_WAITKIND_IGNORE;
1789       ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
1790       lp->stopped = 0;
1791       return 1;
1792     }
1793
1794   if (catch_syscall_enabled ())
1795     {
1796       /* Always update the entry/return state, even if this particular
1797          syscall isn't interesting to the core now.  In async mode,
1798          the user could install a new catchpoint for this syscall
1799          between syscall enter/return, and we'll need to know to
1800          report a syscall return if that happens.  */
1801       lp->syscall_state = (lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
1802                            ? TARGET_WAITKIND_SYSCALL_RETURN
1803                            : TARGET_WAITKIND_SYSCALL_ENTRY);
1804
1805       if (catching_syscall_number (syscall_number))
1806         {
1807           /* Alright, an event to report.  */
1808           ourstatus->kind = lp->syscall_state;
1809           ourstatus->value.syscall_number = syscall_number;
1810
1811           if (debug_linux_nat)
1812             fprintf_unfiltered (gdb_stdlog,
1813                                 "LHST: stopping for %s of syscall %d"
1814                                 " for LWP %ld\n",
1815                                 lp->syscall_state
1816                                 == TARGET_WAITKIND_SYSCALL_ENTRY
1817                                 ? "entry" : "return",
1818                                 syscall_number,
1819                                 ptid_get_lwp (lp->ptid));
1820           return 0;
1821         }
1822
1823       if (debug_linux_nat)
1824         fprintf_unfiltered (gdb_stdlog,
1825                             "LHST: ignoring %s of syscall %d "
1826                             "for LWP %ld\n",
1827                             lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
1828                             ? "entry" : "return",
1829                             syscall_number,
1830                             ptid_get_lwp (lp->ptid));
1831     }
1832   else
1833     {
1834       /* If we had been syscall tracing, and hence used PT_SYSCALL
1835          before on this LWP, it could happen that the user removes all
1836          syscall catchpoints before we get to process this event.
1837          There are two noteworthy issues here:
1838
1839          - When stopped at a syscall entry event, resuming with
1840            PT_STEP still resumes executing the syscall and reports a
1841            syscall return.
1842
1843          - Only PT_SYSCALL catches syscall enters.  If we last
1844            single-stepped this thread, then this event can't be a
1845            syscall enter.  If we last single-stepped this thread, this
1846            has to be a syscall exit.
1847
1848          The points above mean that the next resume, be it PT_STEP or
1849          PT_CONTINUE, can not trigger a syscall trace event.  */
1850       if (debug_linux_nat)
1851         fprintf_unfiltered (gdb_stdlog,
1852                             "LHST: caught syscall event "
1853                             "with no syscall catchpoints."
1854                             " %d for LWP %ld, ignoring\n",
1855                             syscall_number,
1856                             ptid_get_lwp (lp->ptid));
1857       lp->syscall_state = TARGET_WAITKIND_IGNORE;
1858     }
1859
1860   /* The core isn't interested in this event.  For efficiency, avoid
1861      stopping all threads only to have the core resume them all again.
1862      Since we're not stopping threads, if we're still syscall tracing
1863      and not stepping, we can't use PTRACE_CONT here, as we'd miss any
1864      subsequent syscall.  Simply resume using the inf-ptrace layer,
1865      which knows when to use PT_SYSCALL or PT_CONTINUE.  */
1866
1867   linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
1868   return 1;
1869 }
1870
1871 /* Handle a GNU/Linux extended wait response.  If we see a clone
1872    event, we need to add the new LWP to our list (and not report the
1873    trap to higher layers).  This function returns non-zero if the
1874    event should be ignored and we should wait again.  If STOPPING is
1875    true, the new LWP remains stopped, otherwise it is continued.  */
1876
1877 static int
1878 linux_handle_extended_wait (struct lwp_info *lp, int status,
1879                             int stopping)
1880 {
1881   int pid = ptid_get_lwp (lp->ptid);
1882   struct target_waitstatus *ourstatus = &lp->waitstatus;
1883   int event = linux_ptrace_get_extended_event (status);
1884
1885   if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1886       || event == PTRACE_EVENT_CLONE)
1887     {
1888       unsigned long new_pid;
1889       int ret;
1890
1891       ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
1892
1893       /* If we haven't already seen the new PID stop, wait for it now.  */
1894       if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1895         {
1896           /* The new child has a pending SIGSTOP.  We can't affect it until it
1897              hits the SIGSTOP, but we're already attached.  */
1898           ret = my_waitpid (new_pid, &status,
1899                             (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1900           if (ret == -1)
1901             perror_with_name (_("waiting for new child"));
1902           else if (ret != new_pid)
1903             internal_error (__FILE__, __LINE__,
1904                             _("wait returned unexpected PID %d"), ret);
1905           else if (!WIFSTOPPED (status))
1906             internal_error (__FILE__, __LINE__,
1907                             _("wait returned unexpected status 0x%x"), status);
1908         }
1909
1910       ourstatus->value.related_pid = ptid_build (new_pid, new_pid, 0);
1911
1912       if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK)
1913         {
1914           /* The arch-specific native code may need to know about new
1915              forks even if those end up never mapped to an
1916              inferior.  */
1917           if (linux_nat_new_fork != NULL)
1918             linux_nat_new_fork (lp, new_pid);
1919         }
1920
1921       if (event == PTRACE_EVENT_FORK
1922           && linux_fork_checkpointing_p (ptid_get_pid (lp->ptid)))
1923         {
1924           /* Handle checkpointing by linux-fork.c here as a special
1925              case.  We don't want the follow-fork-mode or 'catch fork'
1926              to interfere with this.  */
1927
1928           /* This won't actually modify the breakpoint list, but will
1929              physically remove the breakpoints from the child.  */
1930           detach_breakpoints (ptid_build (new_pid, new_pid, 0));
1931
1932           /* Retain child fork in ptrace (stopped) state.  */
1933           if (!find_fork_pid (new_pid))
1934             add_fork (new_pid);
1935
1936           /* Report as spurious, so that infrun doesn't want to follow
1937              this fork.  We're actually doing an infcall in
1938              linux-fork.c.  */
1939           ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
1940
1941           /* Report the stop to the core.  */
1942           return 0;
1943         }
1944
1945       if (event == PTRACE_EVENT_FORK)
1946         ourstatus->kind = TARGET_WAITKIND_FORKED;
1947       else if (event == PTRACE_EVENT_VFORK)
1948         ourstatus->kind = TARGET_WAITKIND_VFORKED;
1949       else
1950         {
1951           struct lwp_info *new_lp;
1952
1953           ourstatus->kind = TARGET_WAITKIND_IGNORE;
1954
1955           if (debug_linux_nat)
1956             fprintf_unfiltered (gdb_stdlog,
1957                                 "LHEW: Got clone event "
1958                                 "from LWP %d, new child is LWP %ld\n",
1959                                 pid, new_pid);
1960
1961           new_lp = add_lwp (ptid_build (ptid_get_pid (lp->ptid), new_pid, 0));
1962           new_lp->cloned = 1;
1963           new_lp->stopped = 1;
1964
1965           if (WSTOPSIG (status) != SIGSTOP)
1966             {
1967               /* This can happen if someone starts sending signals to
1968                  the new thread before it gets a chance to run, which
1969                  have a lower number than SIGSTOP (e.g. SIGUSR1).
1970                  This is an unlikely case, and harder to handle for
1971                  fork / vfork than for clone, so we do not try - but
1972                  we handle it for clone events here.  We'll send
1973                  the other signal on to the thread below.  */
1974
1975               new_lp->signalled = 1;
1976             }
1977           else
1978             {
1979               struct thread_info *tp;
1980
1981               /* When we stop for an event in some other thread, and
1982                  pull the thread list just as this thread has cloned,
1983                  we'll have seen the new thread in the thread_db list
1984                  before handling the CLONE event (glibc's
1985                  pthread_create adds the new thread to the thread list
1986                  before clone'ing, and has the kernel fill in the
1987                  thread's tid on the clone call with
1988                  CLONE_PARENT_SETTID).  If that happened, and the core
1989                  had requested the new thread to stop, we'll have
1990                  killed it with SIGSTOP.  But since SIGSTOP is not an
1991                  RT signal, it can only be queued once.  We need to be
1992                  careful to not resume the LWP if we wanted it to
1993                  stop.  In that case, we'll leave the SIGSTOP pending.
1994                  It will later be reported as GDB_SIGNAL_0.  */
1995               tp = find_thread_ptid (new_lp->ptid);
1996               if (tp != NULL && tp->stop_requested)
1997                 new_lp->last_resume_kind = resume_stop;
1998               else
1999                 status = 0;
2000             }
2001
2002           /* If the thread_db layer is active, let it record the user
2003              level thread id and status, and add the thread to GDB's
2004              list.  */
2005           if (!thread_db_notice_clone (lp->ptid, new_lp->ptid))
2006             {
2007               /* The process is not using thread_db.  Add the LWP to
2008                  GDB's list.  */
2009               target_post_attach (ptid_get_lwp (new_lp->ptid));
2010               add_thread (new_lp->ptid);
2011             }
2012
2013           if (!stopping)
2014             {
2015               set_running (new_lp->ptid, 1);
2016               set_executing (new_lp->ptid, 1);
2017               /* thread_db_attach_lwp -> lin_lwp_attach_lwp forced
2018                  resume_stop.  */
2019               new_lp->last_resume_kind = resume_continue;
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 /* See linux-nat.h  */
2275
2276 void
2277 linux_stop_and_wait_all_lwps (void)
2278 {
2279   /* Stop all LWP's ...  */
2280   iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
2281
2282   /* ... and wait until all of them have reported back that
2283      they're no longer running.  */
2284   iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
2285 }
2286
2287 /* See linux-nat.h  */
2288
2289 void
2290 linux_unstop_all_lwps (void)
2291 {
2292   iterate_over_lwps (minus_one_ptid,
2293                      resume_stopped_resumed_lwps, &minus_one_ptid);
2294 }
2295
2296 /* Return non-zero if LWP PID has a pending SIGINT.  */
2297
2298 static int
2299 linux_nat_has_pending_sigint (int pid)
2300 {
2301   sigset_t pending, blocked, ignored;
2302
2303   linux_proc_pending_signals (pid, &pending, &blocked, &ignored);
2304
2305   if (sigismember (&pending, SIGINT)
2306       && !sigismember (&ignored, SIGINT))
2307     return 1;
2308
2309   return 0;
2310 }
2311
2312 /* Set a flag in LP indicating that we should ignore its next SIGINT.  */
2313
2314 static int
2315 set_ignore_sigint (struct lwp_info *lp, void *data)
2316 {
2317   /* If a thread has a pending SIGINT, consume it; otherwise, set a
2318      flag to consume the next one.  */
2319   if (lp->stopped && lp->status != 0 && WIFSTOPPED (lp->status)
2320       && WSTOPSIG (lp->status) == SIGINT)
2321     lp->status = 0;
2322   else
2323     lp->ignore_sigint = 1;
2324
2325   return 0;
2326 }
2327
2328 /* If LP does not have a SIGINT pending, then clear the ignore_sigint flag.
2329    This function is called after we know the LWP has stopped; if the LWP
2330    stopped before the expected SIGINT was delivered, then it will never have
2331    arrived.  Also, if the signal was delivered to a shared queue and consumed
2332    by a different thread, it will never be delivered to this LWP.  */
2333
2334 static void
2335 maybe_clear_ignore_sigint (struct lwp_info *lp)
2336 {
2337   if (!lp->ignore_sigint)
2338     return;
2339
2340   if (!linux_nat_has_pending_sigint (ptid_get_lwp (lp->ptid)))
2341     {
2342       if (debug_linux_nat)
2343         fprintf_unfiltered (gdb_stdlog,
2344                             "MCIS: Clearing bogus flag for %s\n",
2345                             target_pid_to_str (lp->ptid));
2346       lp->ignore_sigint = 0;
2347     }
2348 }
2349
2350 /* Fetch the possible triggered data watchpoint info and store it in
2351    LP.
2352
2353    On some archs, like x86, that use debug registers to set
2354    watchpoints, it's possible that the way to know which watched
2355    address trapped, is to check the register that is used to select
2356    which address to watch.  Problem is, between setting the watchpoint
2357    and reading back which data address trapped, the user may change
2358    the set of watchpoints, and, as a consequence, GDB changes the
2359    debug registers in the inferior.  To avoid reading back a stale
2360    stopped-data-address when that happens, we cache in LP the fact
2361    that a watchpoint trapped, and the corresponding data address, as
2362    soon as we see LP stop with a SIGTRAP.  If GDB changes the debug
2363    registers meanwhile, we have the cached data we can rely on.  */
2364
2365 static int
2366 check_stopped_by_watchpoint (struct lwp_info *lp)
2367 {
2368   struct cleanup *old_chain;
2369
2370   if (linux_ops->to_stopped_by_watchpoint == NULL)
2371     return 0;
2372
2373   old_chain = save_inferior_ptid ();
2374   inferior_ptid = lp->ptid;
2375
2376   if (linux_ops->to_stopped_by_watchpoint (linux_ops))
2377     {
2378       lp->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
2379
2380       if (linux_ops->to_stopped_data_address != NULL)
2381         lp->stopped_data_address_p =
2382           linux_ops->to_stopped_data_address (&current_target,
2383                                               &lp->stopped_data_address);
2384       else
2385         lp->stopped_data_address_p = 0;
2386     }
2387
2388   do_cleanups (old_chain);
2389
2390   return lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
2391 }
2392
2393 /* Called when the LWP stopped for a trap that could be explained by a
2394    watchpoint or a breakpoint.  */
2395
2396 static void
2397 save_sigtrap (struct lwp_info *lp)
2398 {
2399   gdb_assert (lp->stop_reason == TARGET_STOPPED_BY_NO_REASON);
2400   gdb_assert (lp->status != 0);
2401
2402   /* Check first if this was a SW/HW breakpoint before checking
2403      watchpoints, because at least s390 can't tell the data address of
2404      hardware watchpoint hits, and the kernel returns
2405      stopped-by-watchpoint as long as there's a watchpoint set.  */
2406   if (linux_nat_status_is_event (lp->status))
2407     check_stopped_by_breakpoint (lp);
2408
2409   /* Note that TRAP_HWBKPT can indicate either a hardware breakpoint
2410      or hardware watchpoint.  Check which is which if we got
2411      TARGET_STOPPED_BY_HW_BREAKPOINT.  */
2412   if (lp->stop_reason == TARGET_STOPPED_BY_NO_REASON
2413       || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
2414     check_stopped_by_watchpoint (lp);
2415 }
2416
2417 /* Returns true if the LWP had stopped for a watchpoint.  */
2418
2419 static int
2420 linux_nat_stopped_by_watchpoint (struct target_ops *ops)
2421 {
2422   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2423
2424   gdb_assert (lp != NULL);
2425
2426   return lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
2427 }
2428
2429 static int
2430 linux_nat_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
2431 {
2432   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2433
2434   gdb_assert (lp != NULL);
2435
2436   *addr_p = lp->stopped_data_address;
2437
2438   return lp->stopped_data_address_p;
2439 }
2440
2441 /* Commonly any breakpoint / watchpoint generate only SIGTRAP.  */
2442
2443 static int
2444 sigtrap_is_event (int status)
2445 {
2446   return WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP;
2447 }
2448
2449 /* Set alternative SIGTRAP-like events recognizer.  If
2450    breakpoint_inserted_here_p there then gdbarch_decr_pc_after_break will be
2451    applied.  */
2452
2453 void
2454 linux_nat_set_status_is_event (struct target_ops *t,
2455                                int (*status_is_event) (int status))
2456 {
2457   linux_nat_status_is_event = status_is_event;
2458 }
2459
2460 /* Wait until LP is stopped.  */
2461
2462 static int
2463 stop_wait_callback (struct lwp_info *lp, void *data)
2464 {
2465   struct inferior *inf = find_inferior_ptid (lp->ptid);
2466
2467   /* If this is a vfork parent, bail out, it is not going to report
2468      any SIGSTOP until the vfork is done with.  */
2469   if (inf->vfork_child != NULL)
2470     return 0;
2471
2472   if (!lp->stopped)
2473     {
2474       int status;
2475
2476       status = wait_lwp (lp);
2477       if (status == 0)
2478         return 0;
2479
2480       if (lp->ignore_sigint && WIFSTOPPED (status)
2481           && WSTOPSIG (status) == SIGINT)
2482         {
2483           lp->ignore_sigint = 0;
2484
2485           errno = 0;
2486           ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
2487           lp->stopped = 0;
2488           if (debug_linux_nat)
2489             fprintf_unfiltered (gdb_stdlog,
2490                                 "PTRACE_CONT %s, 0, 0 (%s) "
2491                                 "(discarding SIGINT)\n",
2492                                 target_pid_to_str (lp->ptid),
2493                                 errno ? safe_strerror (errno) : "OK");
2494
2495           return stop_wait_callback (lp, NULL);
2496         }
2497
2498       maybe_clear_ignore_sigint (lp);
2499
2500       if (WSTOPSIG (status) != SIGSTOP)
2501         {
2502           /* The thread was stopped with a signal other than SIGSTOP.  */
2503
2504           if (debug_linux_nat)
2505             fprintf_unfiltered (gdb_stdlog,
2506                                 "SWC: Pending event %s in %s\n",
2507                                 status_to_str ((int) status),
2508                                 target_pid_to_str (lp->ptid));
2509
2510           /* Save the sigtrap event.  */
2511           lp->status = status;
2512           gdb_assert (lp->signalled);
2513           save_sigtrap (lp);
2514         }
2515       else
2516         {
2517           /* We caught the SIGSTOP that we intended to catch, so
2518              there's no SIGSTOP pending.  */
2519
2520           if (debug_linux_nat)
2521             fprintf_unfiltered (gdb_stdlog,
2522                                 "SWC: Delayed SIGSTOP caught for %s.\n",
2523                                 target_pid_to_str (lp->ptid));
2524
2525           /* Reset SIGNALLED only after the stop_wait_callback call
2526              above as it does gdb_assert on SIGNALLED.  */
2527           lp->signalled = 0;
2528         }
2529     }
2530
2531   return 0;
2532 }
2533
2534 /* Return non-zero if LP has a wait status pending.  Discard the
2535    pending event and resume the LWP if the event that originally
2536    caused the stop became uninteresting.  */
2537
2538 static int
2539 status_callback (struct lwp_info *lp, void *data)
2540 {
2541   /* Only report a pending wait status if we pretend that this has
2542      indeed been resumed.  */
2543   if (!lp->resumed)
2544     return 0;
2545
2546   if (!lwp_status_pending_p (lp))
2547     return 0;
2548
2549   if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
2550       || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
2551     {
2552       struct regcache *regcache = get_thread_regcache (lp->ptid);
2553       struct gdbarch *gdbarch = get_regcache_arch (regcache);
2554       CORE_ADDR pc;
2555       int discard = 0;
2556
2557       pc = regcache_read_pc (regcache);
2558
2559       if (pc != lp->stop_pc)
2560         {
2561           if (debug_linux_nat)
2562             fprintf_unfiltered (gdb_stdlog,
2563                                 "SC: PC of %s changed.  was=%s, now=%s\n",
2564                                 target_pid_to_str (lp->ptid),
2565                                 paddress (target_gdbarch (), lp->stop_pc),
2566                                 paddress (target_gdbarch (), pc));
2567           discard = 1;
2568         }
2569
2570 #if !USE_SIGTRAP_SIGINFO
2571       else if (!breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
2572         {
2573           if (debug_linux_nat)
2574             fprintf_unfiltered (gdb_stdlog,
2575                                 "SC: previous breakpoint of %s, at %s gone\n",
2576                                 target_pid_to_str (lp->ptid),
2577                                 paddress (target_gdbarch (), lp->stop_pc));
2578
2579           discard = 1;
2580         }
2581 #endif
2582
2583       if (discard)
2584         {
2585           if (debug_linux_nat)
2586             fprintf_unfiltered (gdb_stdlog,
2587                                 "SC: pending event of %s cancelled.\n",
2588                                 target_pid_to_str (lp->ptid));
2589
2590           lp->status = 0;
2591           linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
2592           return 0;
2593         }
2594     }
2595
2596   return 1;
2597 }
2598
2599 /* Return non-zero if LP isn't stopped.  */
2600
2601 static int
2602 running_callback (struct lwp_info *lp, void *data)
2603 {
2604   return (!lp->stopped
2605           || (lwp_status_pending_p (lp) && lp->resumed));
2606 }
2607
2608 /* Count the LWP's that have had events.  */
2609
2610 static int
2611 count_events_callback (struct lwp_info *lp, void *data)
2612 {
2613   int *count = data;
2614
2615   gdb_assert (count != NULL);
2616
2617   /* Select only resumed LWPs that have an event pending.  */
2618   if (lp->resumed && lwp_status_pending_p (lp))
2619     (*count)++;
2620
2621   return 0;
2622 }
2623
2624 /* Select the LWP (if any) that is currently being single-stepped.  */
2625
2626 static int
2627 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2628 {
2629   if (lp->last_resume_kind == resume_step
2630       && lp->status != 0)
2631     return 1;
2632   else
2633     return 0;
2634 }
2635
2636 /* Returns true if LP has a status pending.  */
2637
2638 static int
2639 lwp_status_pending_p (struct lwp_info *lp)
2640 {
2641   /* We check for lp->waitstatus in addition to lp->status, because we
2642      can have pending process exits recorded in lp->status and
2643      W_EXITCODE(0,0) happens to be 0.  */
2644   return lp->status != 0 || lp->waitstatus.kind != TARGET_WAITKIND_IGNORE;
2645 }
2646
2647 /* Select the Nth LWP that has had an event.  */
2648
2649 static int
2650 select_event_lwp_callback (struct lwp_info *lp, void *data)
2651 {
2652   int *selector = data;
2653
2654   gdb_assert (selector != NULL);
2655
2656   /* Select only resumed LWPs that have an event pending.  */
2657   if (lp->resumed && lwp_status_pending_p (lp))
2658     if ((*selector)-- == 0)
2659       return 1;
2660
2661   return 0;
2662 }
2663
2664 /* Called when the LWP got a signal/trap that could be explained by a
2665    software or hardware breakpoint.  */
2666
2667 static int
2668 check_stopped_by_breakpoint (struct lwp_info *lp)
2669 {
2670   /* Arrange for a breakpoint to be hit again later.  We don't keep
2671      the SIGTRAP status and don't forward the SIGTRAP signal to the
2672      LWP.  We will handle the current event, eventually we will resume
2673      this LWP, and this breakpoint will trap again.
2674
2675      If we do not do this, then we run the risk that the user will
2676      delete or disable the breakpoint, but the LWP will have already
2677      tripped on it.  */
2678
2679   struct regcache *regcache = get_thread_regcache (lp->ptid);
2680   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2681   CORE_ADDR pc;
2682   CORE_ADDR sw_bp_pc;
2683 #if USE_SIGTRAP_SIGINFO
2684   siginfo_t siginfo;
2685 #endif
2686
2687   pc = regcache_read_pc (regcache);
2688   sw_bp_pc = pc - gdbarch_decr_pc_after_break (gdbarch);
2689
2690 #if USE_SIGTRAP_SIGINFO
2691   if (linux_nat_get_siginfo (lp->ptid, &siginfo))
2692     {
2693       if (siginfo.si_signo == SIGTRAP)
2694         {
2695           if (siginfo.si_code == GDB_ARCH_TRAP_BRKPT)
2696             {
2697               if (debug_linux_nat)
2698                 fprintf_unfiltered (gdb_stdlog,
2699                                     "CSBB: Push back software "
2700                                     "breakpoint for %s\n",
2701                                     target_pid_to_str (lp->ptid));
2702
2703               /* Back up the PC if necessary.  */
2704               if (pc != sw_bp_pc)
2705                 regcache_write_pc (regcache, sw_bp_pc);
2706
2707               lp->stop_pc = sw_bp_pc;
2708               lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
2709               return 1;
2710             }
2711           else if (siginfo.si_code == TRAP_HWBKPT)
2712             {
2713               if (debug_linux_nat)
2714                 fprintf_unfiltered (gdb_stdlog,
2715                                     "CSBB: Push back hardware "
2716                                     "breakpoint/watchpoint for %s\n",
2717                                     target_pid_to_str (lp->ptid));
2718
2719               lp->stop_pc = pc;
2720               lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
2721               return 1;
2722             }
2723         }
2724     }
2725 #else
2726   if ((!lp->step || lp->stop_pc == sw_bp_pc)
2727       && software_breakpoint_inserted_here_p (get_regcache_aspace (regcache),
2728                                               sw_bp_pc))
2729     {
2730       /* The LWP was either continued, or stepped a software
2731          breakpoint instruction.  */
2732       if (debug_linux_nat)
2733         fprintf_unfiltered (gdb_stdlog,
2734                             "CB: Push back software breakpoint for %s\n",
2735                             target_pid_to_str (lp->ptid));
2736
2737       /* Back up the PC if necessary.  */
2738       if (pc != sw_bp_pc)
2739         regcache_write_pc (regcache, sw_bp_pc);
2740
2741       lp->stop_pc = sw_bp_pc;
2742       lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
2743       return 1;
2744     }
2745
2746   if (hardware_breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
2747     {
2748       if (debug_linux_nat)
2749         fprintf_unfiltered (gdb_stdlog,
2750                             "CB: Push back hardware breakpoint for %s\n",
2751                             target_pid_to_str (lp->ptid));
2752
2753       lp->stop_pc = pc;
2754       lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
2755       return 1;
2756     }
2757 #endif
2758
2759   return 0;
2760 }
2761
2762
2763 /* Returns true if the LWP had stopped for a software breakpoint.  */
2764
2765 static int
2766 linux_nat_stopped_by_sw_breakpoint (struct target_ops *ops)
2767 {
2768   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2769
2770   gdb_assert (lp != NULL);
2771
2772   return lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT;
2773 }
2774
2775 /* Implement the supports_stopped_by_sw_breakpoint method.  */
2776
2777 static int
2778 linux_nat_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
2779 {
2780   return USE_SIGTRAP_SIGINFO;
2781 }
2782
2783 /* Returns true if the LWP had stopped for a hardware
2784    breakpoint/watchpoint.  */
2785
2786 static int
2787 linux_nat_stopped_by_hw_breakpoint (struct target_ops *ops)
2788 {
2789   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2790
2791   gdb_assert (lp != NULL);
2792
2793   return lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT;
2794 }
2795
2796 /* Implement the supports_stopped_by_hw_breakpoint method.  */
2797
2798 static int
2799 linux_nat_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
2800 {
2801   return USE_SIGTRAP_SIGINFO;
2802 }
2803
2804 /* Select one LWP out of those that have events pending.  */
2805
2806 static void
2807 select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
2808 {
2809   int num_events = 0;
2810   int random_selector;
2811   struct lwp_info *event_lp = NULL;
2812
2813   /* Record the wait status for the original LWP.  */
2814   (*orig_lp)->status = *status;
2815
2816   /* In all-stop, give preference to the LWP that is being
2817      single-stepped.  There will be at most one, and it will be the
2818      LWP that the core is most interested in.  If we didn't do this,
2819      then we'd have to handle pending step SIGTRAPs somehow in case
2820      the core later continues the previously-stepped thread, as
2821      otherwise we'd report the pending SIGTRAP then, and the core, not
2822      having stepped the thread, wouldn't understand what the trap was
2823      for, and therefore would report it to the user as a random
2824      signal.  */
2825   if (!non_stop)
2826     {
2827       event_lp = iterate_over_lwps (filter,
2828                                     select_singlestep_lwp_callback, NULL);
2829       if (event_lp != NULL)
2830         {
2831           if (debug_linux_nat)
2832             fprintf_unfiltered (gdb_stdlog,
2833                                 "SEL: Select single-step %s\n",
2834                                 target_pid_to_str (event_lp->ptid));
2835         }
2836     }
2837
2838   if (event_lp == NULL)
2839     {
2840       /* Pick one at random, out of those which have had events.  */
2841
2842       /* First see how many events we have.  */
2843       iterate_over_lwps (filter, count_events_callback, &num_events);
2844       gdb_assert (num_events > 0);
2845
2846       /* Now randomly pick a LWP out of those that have had
2847          events.  */
2848       random_selector = (int)
2849         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2850
2851       if (debug_linux_nat && num_events > 1)
2852         fprintf_unfiltered (gdb_stdlog,
2853                             "SEL: Found %d events, selecting #%d\n",
2854                             num_events, random_selector);
2855
2856       event_lp = iterate_over_lwps (filter,
2857                                     select_event_lwp_callback,
2858                                     &random_selector);
2859     }
2860
2861   if (event_lp != NULL)
2862     {
2863       /* Switch the event LWP.  */
2864       *orig_lp = event_lp;
2865       *status = event_lp->status;
2866     }
2867
2868   /* Flush the wait status for the event LWP.  */
2869   (*orig_lp)->status = 0;
2870 }
2871
2872 /* Return non-zero if LP has been resumed.  */
2873
2874 static int
2875 resumed_callback (struct lwp_info *lp, void *data)
2876 {
2877   return lp->resumed;
2878 }
2879
2880 /* Stop an active thread, verify it still exists, then resume it.  If
2881    the thread ends up with a pending status, then it is not resumed,
2882    and *DATA (really a pointer to int), is set.  */
2883
2884 static int
2885 stop_and_resume_callback (struct lwp_info *lp, void *data)
2886 {
2887   if (!lp->stopped)
2888     {
2889       ptid_t ptid = lp->ptid;
2890
2891       stop_callback (lp, NULL);
2892       stop_wait_callback (lp, NULL);
2893
2894       /* Resume if the lwp still exists, and the core wanted it
2895          running.  */
2896       lp = find_lwp_pid (ptid);
2897       if (lp != NULL)
2898         {
2899           if (lp->last_resume_kind == resume_stop
2900               && !lwp_status_pending_p (lp))
2901             {
2902               /* The core wanted the LWP to stop.  Even if it stopped
2903                  cleanly (with SIGSTOP), leave the event pending.  */
2904               if (debug_linux_nat)
2905                 fprintf_unfiltered (gdb_stdlog,
2906                                     "SARC: core wanted LWP %ld stopped "
2907                                     "(leaving SIGSTOP pending)\n",
2908                                     ptid_get_lwp (lp->ptid));
2909               lp->status = W_STOPCODE (SIGSTOP);
2910             }
2911
2912           if (!lwp_status_pending_p (lp))
2913             {
2914               if (debug_linux_nat)
2915                 fprintf_unfiltered (gdb_stdlog,
2916                                     "SARC: re-resuming LWP %ld\n",
2917                                     ptid_get_lwp (lp->ptid));
2918               resume_lwp (lp, lp->step, GDB_SIGNAL_0);
2919             }
2920           else
2921             {
2922               if (debug_linux_nat)
2923                 fprintf_unfiltered (gdb_stdlog,
2924                                     "SARC: not re-resuming LWP %ld "
2925                                     "(has pending)\n",
2926                                     ptid_get_lwp (lp->ptid));
2927             }
2928         }
2929     }
2930   return 0;
2931 }
2932
2933 /* Check if we should go on and pass this event to common code.
2934    Return the affected lwp if we are, or NULL otherwise.  */
2935
2936 static struct lwp_info *
2937 linux_nat_filter_event (int lwpid, int status)
2938 {
2939   struct lwp_info *lp;
2940   int event = linux_ptrace_get_extended_event (status);
2941
2942   lp = find_lwp_pid (pid_to_ptid (lwpid));
2943
2944   /* Check for stop events reported by a process we didn't already
2945      know about - anything not already in our LWP list.
2946
2947      If we're expecting to receive stopped processes after
2948      fork, vfork, and clone events, then we'll just add the
2949      new one to our list and go back to waiting for the event
2950      to be reported - the stopped process might be returned
2951      from waitpid before or after the event is.
2952
2953      But note the case of a non-leader thread exec'ing after the
2954      leader having exited, and gone from our lists.  The non-leader
2955      thread changes its tid to the tgid.  */
2956
2957   if (WIFSTOPPED (status) && lp == NULL
2958       && (WSTOPSIG (status) == SIGTRAP && event == PTRACE_EVENT_EXEC))
2959     {
2960       /* A multi-thread exec after we had seen the leader exiting.  */
2961       if (debug_linux_nat)
2962         fprintf_unfiltered (gdb_stdlog,
2963                             "LLW: Re-adding thread group leader LWP %d.\n",
2964                             lwpid);
2965
2966       lp = add_lwp (ptid_build (lwpid, lwpid, 0));
2967       lp->stopped = 1;
2968       lp->resumed = 1;
2969       add_thread (lp->ptid);
2970     }
2971
2972   if (WIFSTOPPED (status) && !lp)
2973     {
2974       if (debug_linux_nat)
2975         fprintf_unfiltered (gdb_stdlog,
2976                             "LHEW: saving LWP %ld status %s in stopped_pids list\n",
2977                             (long) lwpid, status_to_str (status));
2978       add_to_pid_list (&stopped_pids, lwpid, status);
2979       return NULL;
2980     }
2981
2982   /* Make sure we don't report an event for the exit of an LWP not in
2983      our list, i.e. not part of the current process.  This can happen
2984      if we detach from a program we originally forked and then it
2985      exits.  */
2986   if (!WIFSTOPPED (status) && !lp)
2987     return NULL;
2988
2989   /* This LWP is stopped now.  (And if dead, this prevents it from
2990      ever being continued.)  */
2991   lp->stopped = 1;
2992
2993   if (WIFSTOPPED (status) && lp->must_set_ptrace_flags)
2994     {
2995       struct inferior *inf = find_inferior_pid (ptid_get_pid (lp->ptid));
2996
2997       linux_enable_event_reporting (ptid_get_lwp (lp->ptid), inf->attach_flag);
2998       lp->must_set_ptrace_flags = 0;
2999     }
3000
3001   /* Handle GNU/Linux's syscall SIGTRAPs.  */
3002   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
3003     {
3004       /* No longer need the sysgood bit.  The ptrace event ends up
3005          recorded in lp->waitstatus if we care for it.  We can carry
3006          on handling the event like a regular SIGTRAP from here
3007          on.  */
3008       status = W_STOPCODE (SIGTRAP);
3009       if (linux_handle_syscall_trap (lp, 0))
3010         return NULL;
3011     }
3012
3013   /* Handle GNU/Linux's extended waitstatus for trace events.  */
3014   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP
3015       && linux_is_extended_waitstatus (status))
3016     {
3017       if (debug_linux_nat)
3018         fprintf_unfiltered (gdb_stdlog,
3019                             "LLW: Handling extended status 0x%06x\n",
3020                             status);
3021       if (linux_handle_extended_wait (lp, status, 0))
3022         return NULL;
3023     }
3024
3025   /* Check if the thread has exited.  */
3026   if (WIFEXITED (status) || WIFSIGNALED (status))
3027     {
3028       if (num_lwps (ptid_get_pid (lp->ptid)) > 1)
3029         {
3030           /* If this is the main thread, we must stop all threads and
3031              verify if they are still alive.  This is because in the
3032              nptl thread model on Linux 2.4, there is no signal issued
3033              for exiting LWPs other than the main thread.  We only get
3034              the main thread exit signal once all child threads have
3035              already exited.  If we stop all the threads and use the
3036              stop_wait_callback to check if they have exited we can
3037              determine whether this signal should be ignored or
3038              whether it means the end of the debugged application,
3039              regardless of which threading model is being used.  */
3040           if (ptid_get_pid (lp->ptid) == ptid_get_lwp (lp->ptid))
3041             {
3042               iterate_over_lwps (pid_to_ptid (ptid_get_pid (lp->ptid)),
3043                                  stop_and_resume_callback, NULL);
3044             }
3045
3046           if (debug_linux_nat)
3047             fprintf_unfiltered (gdb_stdlog,
3048                                 "LLW: %s exited.\n",
3049                                 target_pid_to_str (lp->ptid));
3050
3051           if (num_lwps (ptid_get_pid (lp->ptid)) > 1)
3052             {
3053               /* If there is at least one more LWP, then the exit signal
3054                  was not the end of the debugged application and should be
3055                  ignored.  */
3056               exit_lwp (lp);
3057               return NULL;
3058             }
3059         }
3060
3061       gdb_assert (lp->resumed);
3062
3063       if (debug_linux_nat)
3064         fprintf_unfiltered (gdb_stdlog,
3065                             "Process %ld exited\n",
3066                             ptid_get_lwp (lp->ptid));
3067
3068       /* This was the last lwp in the process.  Since events are
3069          serialized to GDB core, we may not be able report this one
3070          right now, but GDB core and the other target layers will want
3071          to be notified about the exit code/signal, leave the status
3072          pending for the next time we're able to report it.  */
3073
3074       /* Dead LWP's aren't expected to reported a pending sigstop.  */
3075       lp->signalled = 0;
3076
3077       /* Store the pending event in the waitstatus, because
3078          W_EXITCODE(0,0) == 0.  */
3079       store_waitstatus (&lp->waitstatus, status);
3080       return lp;
3081     }
3082
3083   /* Check if the current LWP has previously exited.  In the nptl
3084      thread model, LWPs other than the main thread do not issue
3085      signals when they exit so we must check whenever the thread has
3086      stopped.  A similar check is made in stop_wait_callback().  */
3087   if (num_lwps (ptid_get_pid (lp->ptid)) > 1 && !linux_thread_alive (lp->ptid))
3088     {
3089       ptid_t ptid = pid_to_ptid (ptid_get_pid (lp->ptid));
3090
3091       if (debug_linux_nat)
3092         fprintf_unfiltered (gdb_stdlog,
3093                             "LLW: %s exited.\n",
3094                             target_pid_to_str (lp->ptid));
3095
3096       exit_lwp (lp);
3097
3098       /* Make sure there is at least one thread running.  */
3099       gdb_assert (iterate_over_lwps (ptid, running_callback, NULL));
3100
3101       /* Discard the event.  */
3102       return NULL;
3103     }
3104
3105   /* Make sure we don't report a SIGSTOP that we sent ourselves in
3106      an attempt to stop an LWP.  */
3107   if (lp->signalled
3108       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
3109     {
3110       if (debug_linux_nat)
3111         fprintf_unfiltered (gdb_stdlog,
3112                             "LLW: Delayed SIGSTOP caught for %s.\n",
3113                             target_pid_to_str (lp->ptid));
3114
3115       lp->signalled = 0;
3116
3117       if (lp->last_resume_kind != resume_stop)
3118         {
3119           /* This is a delayed SIGSTOP.  */
3120
3121           linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
3122           if (debug_linux_nat)
3123             fprintf_unfiltered (gdb_stdlog,
3124                                 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
3125                                 lp->step ?
3126                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3127                                 target_pid_to_str (lp->ptid));
3128
3129           gdb_assert (lp->resumed);
3130
3131           /* Discard the event.  */
3132           return NULL;
3133         }
3134     }
3135
3136   /* Make sure we don't report a SIGINT that we have already displayed
3137      for another thread.  */
3138   if (lp->ignore_sigint
3139       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT)
3140     {
3141       if (debug_linux_nat)
3142         fprintf_unfiltered (gdb_stdlog,
3143                             "LLW: Delayed SIGINT caught for %s.\n",
3144                             target_pid_to_str (lp->ptid));
3145
3146       /* This is a delayed SIGINT.  */
3147       lp->ignore_sigint = 0;
3148
3149       linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
3150       if (debug_linux_nat)
3151         fprintf_unfiltered (gdb_stdlog,
3152                             "LLW: %s %s, 0, 0 (discard SIGINT)\n",
3153                             lp->step ?
3154                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3155                             target_pid_to_str (lp->ptid));
3156       gdb_assert (lp->resumed);
3157
3158       /* Discard the event.  */
3159       return NULL;
3160     }
3161
3162   /* Don't report signals that GDB isn't interested in, such as
3163      signals that are neither printed nor stopped upon.  Stopping all
3164      threads can be a bit time-consuming so if we want decent
3165      performance with heavily multi-threaded programs, especially when
3166      they're using a high frequency timer, we'd better avoid it if we
3167      can.  */
3168   if (WIFSTOPPED (status))
3169     {
3170       enum gdb_signal signo = gdb_signal_from_host (WSTOPSIG (status));
3171
3172       if (!non_stop)
3173         {
3174           /* Only do the below in all-stop, as we currently use SIGSTOP
3175              to implement target_stop (see linux_nat_stop) in
3176              non-stop.  */
3177           if (signo == GDB_SIGNAL_INT && signal_pass_state (signo) == 0)
3178             {
3179               /* If ^C/BREAK is typed at the tty/console, SIGINT gets
3180                  forwarded to the entire process group, that is, all LWPs
3181                  will receive it - unless they're using CLONE_THREAD to
3182                  share signals.  Since we only want to report it once, we
3183                  mark it as ignored for all LWPs except this one.  */
3184               iterate_over_lwps (pid_to_ptid (ptid_get_pid (lp->ptid)),
3185                                               set_ignore_sigint, NULL);
3186               lp->ignore_sigint = 0;
3187             }
3188           else
3189             maybe_clear_ignore_sigint (lp);
3190         }
3191
3192       /* When using hardware single-step, we need to report every signal.
3193          Otherwise, signals in pass_mask may be short-circuited
3194          except signals that might be caused by a breakpoint.  */
3195       if (!lp->step
3196           && WSTOPSIG (status) && sigismember (&pass_mask, WSTOPSIG (status))
3197           && !linux_wstatus_maybe_breakpoint (status))
3198         {
3199           linux_resume_one_lwp (lp, lp->step, signo);
3200           if (debug_linux_nat)
3201             fprintf_unfiltered (gdb_stdlog,
3202                                 "LLW: %s %s, %s (preempt 'handle')\n",
3203                                 lp->step ?
3204                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3205                                 target_pid_to_str (lp->ptid),
3206                                 (signo != GDB_SIGNAL_0
3207                                  ? strsignal (gdb_signal_to_host (signo))
3208                                  : "0"));
3209           return NULL;
3210         }
3211     }
3212
3213   /* An interesting event.  */
3214   gdb_assert (lp);
3215   lp->status = status;
3216   save_sigtrap (lp);
3217   return lp;
3218 }
3219
3220 /* Detect zombie thread group leaders, and "exit" them.  We can't reap
3221    their exits until all other threads in the group have exited.  */
3222
3223 static void
3224 check_zombie_leaders (void)
3225 {
3226   struct inferior *inf;
3227
3228   ALL_INFERIORS (inf)
3229     {
3230       struct lwp_info *leader_lp;
3231
3232       if (inf->pid == 0)
3233         continue;
3234
3235       leader_lp = find_lwp_pid (pid_to_ptid (inf->pid));
3236       if (leader_lp != NULL
3237           /* Check if there are other threads in the group, as we may
3238              have raced with the inferior simply exiting.  */
3239           && num_lwps (inf->pid) > 1
3240           && linux_proc_pid_is_zombie (inf->pid))
3241         {
3242           if (debug_linux_nat)
3243             fprintf_unfiltered (gdb_stdlog,
3244                                 "CZL: Thread group leader %d zombie "
3245                                 "(it exited, or another thread execd).\n",
3246                                 inf->pid);
3247
3248           /* A leader zombie can mean one of two things:
3249
3250              - It exited, and there's an exit status pending
3251              available, or only the leader exited (not the whole
3252              program).  In the latter case, we can't waitpid the
3253              leader's exit status until all other threads are gone.
3254
3255              - There are 3 or more threads in the group, and a thread
3256              other than the leader exec'd.  On an exec, the Linux
3257              kernel destroys all other threads (except the execing
3258              one) in the thread group, and resets the execing thread's
3259              tid to the tgid.  No exit notification is sent for the
3260              execing thread -- from the ptracer's perspective, it
3261              appears as though the execing thread just vanishes.
3262              Until we reap all other threads except the leader and the
3263              execing thread, the leader will be zombie, and the
3264              execing thread will be in `D (disc sleep)'.  As soon as
3265              all other threads are reaped, the execing thread changes
3266              it's tid to the tgid, and the previous (zombie) leader
3267              vanishes, giving place to the "new" leader.  We could try
3268              distinguishing the exit and exec cases, by waiting once
3269              more, and seeing if something comes out, but it doesn't
3270              sound useful.  The previous leader _does_ go away, and
3271              we'll re-add the new one once we see the exec event
3272              (which is just the same as what would happen if the
3273              previous leader did exit voluntarily before some other
3274              thread execs).  */
3275
3276           if (debug_linux_nat)
3277             fprintf_unfiltered (gdb_stdlog,
3278                                 "CZL: Thread group leader %d vanished.\n",
3279                                 inf->pid);
3280           exit_lwp (leader_lp);
3281         }
3282     }
3283 }
3284
3285 static ptid_t
3286 linux_nat_wait_1 (struct target_ops *ops,
3287                   ptid_t ptid, struct target_waitstatus *ourstatus,
3288                   int target_options)
3289 {
3290   sigset_t prev_mask;
3291   enum resume_kind last_resume_kind;
3292   struct lwp_info *lp;
3293   int status;
3294
3295   if (debug_linux_nat)
3296     fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
3297
3298   /* The first time we get here after starting a new inferior, we may
3299      not have added it to the LWP list yet - this is the earliest
3300      moment at which we know its PID.  */
3301   if (ptid_is_pid (inferior_ptid))
3302     {
3303       /* Upgrade the main thread's ptid.  */
3304       thread_change_ptid (inferior_ptid,
3305                           ptid_build (ptid_get_pid (inferior_ptid),
3306                                       ptid_get_pid (inferior_ptid), 0));
3307
3308       lp = add_initial_lwp (inferior_ptid);
3309       lp->resumed = 1;
3310     }
3311
3312   /* Make sure SIGCHLD is blocked until the sigsuspend below.  */
3313   block_child_signals (&prev_mask);
3314
3315   /* First check if there is a LWP with a wait status pending.  */
3316   lp = iterate_over_lwps (ptid, status_callback, NULL);
3317   if (lp != NULL)
3318     {
3319       if (debug_linux_nat)
3320         fprintf_unfiltered (gdb_stdlog,
3321                             "LLW: Using pending wait status %s for %s.\n",
3322                             status_to_str (lp->status),
3323                             target_pid_to_str (lp->ptid));
3324     }
3325
3326   if (!target_is_async_p ())
3327     {
3328       /* Causes SIGINT to be passed on to the attached process.  */
3329       set_sigint_trap ();
3330     }
3331
3332   /* But if we don't find a pending event, we'll have to wait.  Always
3333      pull all events out of the kernel.  We'll randomly select an
3334      event LWP out of all that have events, to prevent starvation.  */
3335
3336   while (lp == NULL)
3337     {
3338       pid_t lwpid;
3339
3340       /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace
3341          quirks:
3342
3343          - If the thread group leader exits while other threads in the
3344            thread group still exist, waitpid(TGID, ...) hangs.  That
3345            waitpid won't return an exit status until the other threads
3346            in the group are reapped.
3347
3348          - When a non-leader thread execs, that thread just vanishes
3349            without reporting an exit (so we'd hang if we waited for it
3350            explicitly in that case).  The exec event is reported to
3351            the TGID pid.  */
3352
3353       errno = 0;
3354       lwpid = my_waitpid (-1, &status,  __WCLONE | WNOHANG);
3355       if (lwpid == 0 || (lwpid == -1 && errno == ECHILD))
3356         lwpid = my_waitpid (-1, &status, WNOHANG);
3357
3358       if (debug_linux_nat)
3359         fprintf_unfiltered (gdb_stdlog,
3360                             "LNW: waitpid(-1, ...) returned %d, %s\n",
3361                             lwpid, errno ? safe_strerror (errno) : "ERRNO-OK");
3362
3363       if (lwpid > 0)
3364         {
3365           if (debug_linux_nat)
3366             {
3367               fprintf_unfiltered (gdb_stdlog,
3368                                   "LLW: waitpid %ld received %s\n",
3369                                   (long) lwpid, status_to_str (status));
3370             }
3371
3372           linux_nat_filter_event (lwpid, status);
3373           /* Retry until nothing comes out of waitpid.  A single
3374              SIGCHLD can indicate more than one child stopped.  */
3375           continue;
3376         }
3377
3378       /* Now that we've pulled all events out of the kernel, resume
3379          LWPs that don't have an interesting event to report.  */
3380       iterate_over_lwps (minus_one_ptid,
3381                          resume_stopped_resumed_lwps, &minus_one_ptid);
3382
3383       /* ... and find an LWP with a status to report to the core, if
3384          any.  */
3385       lp = iterate_over_lwps (ptid, status_callback, NULL);
3386       if (lp != NULL)
3387         break;
3388
3389       /* Check for zombie thread group leaders.  Those can't be reaped
3390          until all other threads in the thread group are.  */
3391       check_zombie_leaders ();
3392
3393       /* If there are no resumed children left, bail.  We'd be stuck
3394          forever in the sigsuspend call below otherwise.  */
3395       if (iterate_over_lwps (ptid, resumed_callback, NULL) == NULL)
3396         {
3397           if (debug_linux_nat)
3398             fprintf_unfiltered (gdb_stdlog, "LLW: exit (no resumed LWP)\n");
3399
3400           ourstatus->kind = TARGET_WAITKIND_NO_RESUMED;
3401
3402           if (!target_is_async_p ())
3403             clear_sigint_trap ();
3404
3405           restore_child_signals_mask (&prev_mask);
3406           return minus_one_ptid;
3407         }
3408
3409       /* No interesting event to report to the core.  */
3410
3411       if (target_options & TARGET_WNOHANG)
3412         {
3413           if (debug_linux_nat)
3414             fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3415
3416           ourstatus->kind = TARGET_WAITKIND_IGNORE;
3417           restore_child_signals_mask (&prev_mask);
3418           return minus_one_ptid;
3419         }
3420
3421       /* We shouldn't end up here unless we want to try again.  */
3422       gdb_assert (lp == NULL);
3423
3424       /* Block until we get an event reported with SIGCHLD.  */
3425       if (debug_linux_nat)
3426         fprintf_unfiltered (gdb_stdlog, "LNW: about to sigsuspend\n");
3427       sigsuspend (&suspend_mask);
3428     }
3429
3430   if (!target_is_async_p ())
3431     clear_sigint_trap ();
3432
3433   gdb_assert (lp);
3434
3435   status = lp->status;
3436   lp->status = 0;
3437
3438   if (!non_stop)
3439     {
3440       /* Now stop all other LWP's ...  */
3441       iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
3442
3443       /* ... and wait until all of them have reported back that
3444          they're no longer running.  */
3445       iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
3446     }
3447
3448   /* If we're not waiting for a specific LWP, choose an event LWP from
3449      among those that have had events.  Giving equal priority to all
3450      LWPs that have had events helps prevent starvation.  */
3451   if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
3452     select_event_lwp (ptid, &lp, &status);
3453
3454   gdb_assert (lp != NULL);
3455
3456   /* Now that we've selected our final event LWP, un-adjust its PC if
3457      it was a software breakpoint, and we can't reliably support the
3458      "stopped by software breakpoint" stop reason.  */
3459   if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
3460       && !USE_SIGTRAP_SIGINFO)
3461     {
3462       struct regcache *regcache = get_thread_regcache (lp->ptid);
3463       struct gdbarch *gdbarch = get_regcache_arch (regcache);
3464       int decr_pc = gdbarch_decr_pc_after_break (gdbarch);
3465
3466       if (decr_pc != 0)
3467         {
3468           CORE_ADDR pc;
3469
3470           pc = regcache_read_pc (regcache);
3471           regcache_write_pc (regcache, pc + decr_pc);
3472         }
3473     }
3474
3475   /* We'll need this to determine whether to report a SIGSTOP as
3476      GDB_SIGNAL_0.  Need to take a copy because resume_clear_callback
3477      clears it.  */
3478   last_resume_kind = lp->last_resume_kind;
3479
3480   if (!non_stop)
3481     {
3482       /* In all-stop, from the core's perspective, all LWPs are now
3483          stopped until a new resume action is sent over.  */
3484       iterate_over_lwps (minus_one_ptid, resume_clear_callback, NULL);
3485     }
3486   else
3487     {
3488       resume_clear_callback (lp, NULL);
3489     }
3490
3491   if (linux_nat_status_is_event (status))
3492     {
3493       if (debug_linux_nat)
3494         fprintf_unfiltered (gdb_stdlog,
3495                             "LLW: trap ptid is %s.\n",
3496                             target_pid_to_str (lp->ptid));
3497     }
3498
3499   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
3500     {
3501       *ourstatus = lp->waitstatus;
3502       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
3503     }
3504   else
3505     store_waitstatus (ourstatus, status);
3506
3507   if (debug_linux_nat)
3508     fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
3509
3510   restore_child_signals_mask (&prev_mask);
3511
3512   if (last_resume_kind == resume_stop
3513       && ourstatus->kind == TARGET_WAITKIND_STOPPED
3514       && WSTOPSIG (status) == SIGSTOP)
3515     {
3516       /* A thread that has been requested to stop by GDB with
3517          target_stop, and it stopped cleanly, so report as SIG0.  The
3518          use of SIGSTOP is an implementation detail.  */
3519       ourstatus->value.sig = GDB_SIGNAL_0;
3520     }
3521
3522   if (ourstatus->kind == TARGET_WAITKIND_EXITED
3523       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
3524     lp->core = -1;
3525   else
3526     lp->core = linux_common_core_of_thread (lp->ptid);
3527
3528   return lp->ptid;
3529 }
3530
3531 /* Resume LWPs that are currently stopped without any pending status
3532    to report, but are resumed from the core's perspective.  */
3533
3534 static int
3535 resume_stopped_resumed_lwps (struct lwp_info *lp, void *data)
3536 {
3537   ptid_t *wait_ptid_p = data;
3538
3539   if (lp->stopped
3540       && lp->resumed
3541       && !lwp_status_pending_p (lp))
3542     {
3543       struct regcache *regcache = get_thread_regcache (lp->ptid);
3544       struct gdbarch *gdbarch = get_regcache_arch (regcache);
3545       CORE_ADDR pc = regcache_read_pc (regcache);
3546
3547       /* Don't bother if there's a breakpoint at PC that we'd hit
3548          immediately, and we're not waiting for this LWP.  */
3549       if (!ptid_match (lp->ptid, *wait_ptid_p))
3550         {
3551           if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
3552             return 0;
3553         }
3554
3555       if (debug_linux_nat)
3556         fprintf_unfiltered (gdb_stdlog,
3557                             "RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n",
3558                             target_pid_to_str (lp->ptid),
3559                             paddress (gdbarch, pc),
3560                             lp->step);
3561
3562       linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
3563     }
3564
3565   return 0;
3566 }
3567
3568 static ptid_t
3569 linux_nat_wait (struct target_ops *ops,
3570                 ptid_t ptid, struct target_waitstatus *ourstatus,
3571                 int target_options)
3572 {
3573   ptid_t event_ptid;
3574
3575   if (debug_linux_nat)
3576     {
3577       char *options_string;
3578
3579       options_string = target_options_to_string (target_options);
3580       fprintf_unfiltered (gdb_stdlog,
3581                           "linux_nat_wait: [%s], [%s]\n",
3582                           target_pid_to_str (ptid),
3583                           options_string);
3584       xfree (options_string);
3585     }
3586
3587   /* Flush the async file first.  */
3588   if (target_is_async_p ())
3589     async_file_flush ();
3590
3591   /* Resume LWPs that are currently stopped without any pending status
3592      to report, but are resumed from the core's perspective.  LWPs get
3593      in this state if we find them stopping at a time we're not
3594      interested in reporting the event (target_wait on a
3595      specific_process, for example, see linux_nat_wait_1), and
3596      meanwhile the event became uninteresting.  Don't bother resuming
3597      LWPs we're not going to wait for if they'd stop immediately.  */
3598   if (non_stop)
3599     iterate_over_lwps (minus_one_ptid, resume_stopped_resumed_lwps, &ptid);
3600
3601   event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus, target_options);
3602
3603   /* If we requested any event, and something came out, assume there
3604      may be more.  If we requested a specific lwp or process, also
3605      assume there may be more.  */
3606   if (target_is_async_p ()
3607       && ((ourstatus->kind != TARGET_WAITKIND_IGNORE
3608            && ourstatus->kind != TARGET_WAITKIND_NO_RESUMED)
3609           || !ptid_equal (ptid, minus_one_ptid)))
3610     async_file_mark ();
3611
3612   return event_ptid;
3613 }
3614
3615 static int
3616 kill_callback (struct lwp_info *lp, void *data)
3617 {
3618   /* PTRACE_KILL may resume the inferior.  Send SIGKILL first.  */
3619
3620   errno = 0;
3621   kill_lwp (ptid_get_lwp (lp->ptid), SIGKILL);
3622   if (debug_linux_nat)
3623     {
3624       int save_errno = errno;
3625
3626       fprintf_unfiltered (gdb_stdlog,
3627                           "KC:  kill (SIGKILL) %s, 0, 0 (%s)\n",
3628                           target_pid_to_str (lp->ptid),
3629                           save_errno ? safe_strerror (save_errno) : "OK");
3630     }
3631
3632   /* Some kernels ignore even SIGKILL for processes under ptrace.  */
3633
3634   errno = 0;
3635   ptrace (PTRACE_KILL, ptid_get_lwp (lp->ptid), 0, 0);
3636   if (debug_linux_nat)
3637     {
3638       int save_errno = errno;
3639
3640       fprintf_unfiltered (gdb_stdlog,
3641                           "KC:  PTRACE_KILL %s, 0, 0 (%s)\n",
3642                           target_pid_to_str (lp->ptid),
3643                           save_errno ? safe_strerror (save_errno) : "OK");
3644     }
3645
3646   return 0;
3647 }
3648
3649 static int
3650 kill_wait_callback (struct lwp_info *lp, void *data)
3651 {
3652   pid_t pid;
3653
3654   /* We must make sure that there are no pending events (delayed
3655      SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
3656      program doesn't interfere with any following debugging session.  */
3657
3658   /* For cloned processes we must check both with __WCLONE and
3659      without, since the exit status of a cloned process isn't reported
3660      with __WCLONE.  */
3661   if (lp->cloned)
3662     {
3663       do
3664         {
3665           pid = my_waitpid (ptid_get_lwp (lp->ptid), NULL, __WCLONE);
3666           if (pid != (pid_t) -1)
3667             {
3668               if (debug_linux_nat)
3669                 fprintf_unfiltered (gdb_stdlog,
3670                                     "KWC: wait %s received unknown.\n",
3671                                     target_pid_to_str (lp->ptid));
3672               /* The Linux kernel sometimes fails to kill a thread
3673                  completely after PTRACE_KILL; that goes from the stop
3674                  point in do_fork out to the one in
3675                  get_signal_to_deliever and waits again.  So kill it
3676                  again.  */
3677               kill_callback (lp, NULL);
3678             }
3679         }
3680       while (pid == ptid_get_lwp (lp->ptid));
3681
3682       gdb_assert (pid == -1 && errno == ECHILD);
3683     }
3684
3685   do
3686     {
3687       pid = my_waitpid (ptid_get_lwp (lp->ptid), NULL, 0);
3688       if (pid != (pid_t) -1)
3689         {
3690           if (debug_linux_nat)
3691             fprintf_unfiltered (gdb_stdlog,
3692                                 "KWC: wait %s received unk.\n",
3693                                 target_pid_to_str (lp->ptid));
3694           /* See the call to kill_callback above.  */
3695           kill_callback (lp, NULL);
3696         }
3697     }
3698   while (pid == ptid_get_lwp (lp->ptid));
3699
3700   gdb_assert (pid == -1 && errno == ECHILD);
3701   return 0;
3702 }
3703
3704 static void
3705 linux_nat_kill (struct target_ops *ops)
3706 {
3707   struct target_waitstatus last;
3708   ptid_t last_ptid;
3709   int status;
3710
3711   /* If we're stopped while forking and we haven't followed yet,
3712      kill the other task.  We need to do this first because the
3713      parent will be sleeping if this is a vfork.  */
3714
3715   get_last_target_status (&last_ptid, &last);
3716
3717   if (last.kind == TARGET_WAITKIND_FORKED
3718       || last.kind == TARGET_WAITKIND_VFORKED)
3719     {
3720       ptrace (PT_KILL, ptid_get_pid (last.value.related_pid), 0, 0);
3721       wait (&status);
3722
3723       /* Let the arch-specific native code know this process is
3724          gone.  */
3725       linux_nat_forget_process (ptid_get_pid (last.value.related_pid));
3726     }
3727
3728   if (forks_exist_p ())
3729     linux_fork_killall ();
3730   else
3731     {
3732       ptid_t ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
3733
3734       /* Stop all threads before killing them, since ptrace requires
3735          that the thread is stopped to sucessfully PTRACE_KILL.  */
3736       iterate_over_lwps (ptid, stop_callback, NULL);
3737       /* ... and wait until all of them have reported back that
3738          they're no longer running.  */
3739       iterate_over_lwps (ptid, stop_wait_callback, NULL);
3740
3741       /* Kill all LWP's ...  */
3742       iterate_over_lwps (ptid, kill_callback, NULL);
3743
3744       /* ... and wait until we've flushed all events.  */
3745       iterate_over_lwps (ptid, kill_wait_callback, NULL);
3746     }
3747
3748   target_mourn_inferior ();
3749 }
3750
3751 static void
3752 linux_nat_mourn_inferior (struct target_ops *ops)
3753 {
3754   int pid = ptid_get_pid (inferior_ptid);
3755
3756   purge_lwp_list (pid);
3757
3758   if (! forks_exist_p ())
3759     /* Normal case, no other forks available.  */
3760     linux_ops->to_mourn_inferior (ops);
3761   else
3762     /* Multi-fork case.  The current inferior_ptid has exited, but
3763        there are other viable forks to debug.  Delete the exiting
3764        one and context-switch to the first available.  */
3765     linux_fork_mourn_inferior ();
3766
3767   /* Let the arch-specific native code know this process is gone.  */
3768   linux_nat_forget_process (pid);
3769 }
3770
3771 /* Convert a native/host siginfo object, into/from the siginfo in the
3772    layout of the inferiors' architecture.  */
3773
3774 static void
3775 siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
3776 {
3777   int done = 0;
3778
3779   if (linux_nat_siginfo_fixup != NULL)
3780     done = linux_nat_siginfo_fixup (siginfo, inf_siginfo, direction);
3781
3782   /* If there was no callback, or the callback didn't do anything,
3783      then just do a straight memcpy.  */
3784   if (!done)
3785     {
3786       if (direction == 1)
3787         memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
3788       else
3789         memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
3790     }
3791 }
3792
3793 static enum target_xfer_status
3794 linux_xfer_siginfo (struct target_ops *ops, enum target_object object,
3795                     const char *annex, gdb_byte *readbuf,
3796                     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
3797                     ULONGEST *xfered_len)
3798 {
3799   int pid;
3800   siginfo_t siginfo;
3801   gdb_byte inf_siginfo[sizeof (siginfo_t)];
3802
3803   gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
3804   gdb_assert (readbuf || writebuf);
3805
3806   pid = ptid_get_lwp (inferior_ptid);
3807   if (pid == 0)
3808     pid = ptid_get_pid (inferior_ptid);
3809
3810   if (offset > sizeof (siginfo))
3811     return TARGET_XFER_E_IO;
3812
3813   errno = 0;
3814   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3815   if (errno != 0)
3816     return TARGET_XFER_E_IO;
3817
3818   /* When GDB is built as a 64-bit application, ptrace writes into
3819      SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
3820      inferior with a 64-bit GDB should look the same as debugging it
3821      with a 32-bit GDB, we need to convert it.  GDB core always sees
3822      the converted layout, so any read/write will have to be done
3823      post-conversion.  */
3824   siginfo_fixup (&siginfo, inf_siginfo, 0);
3825
3826   if (offset + len > sizeof (siginfo))
3827     len = sizeof (siginfo) - offset;
3828
3829   if (readbuf != NULL)
3830     memcpy (readbuf, inf_siginfo + offset, len);
3831   else
3832     {
3833       memcpy (inf_siginfo + offset, writebuf, len);
3834
3835       /* Convert back to ptrace layout before flushing it out.  */
3836       siginfo_fixup (&siginfo, inf_siginfo, 1);
3837
3838       errno = 0;
3839       ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3840       if (errno != 0)
3841         return TARGET_XFER_E_IO;
3842     }
3843
3844   *xfered_len = len;
3845   return TARGET_XFER_OK;
3846 }
3847
3848 static enum target_xfer_status
3849 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
3850                         const char *annex, gdb_byte *readbuf,
3851                         const gdb_byte *writebuf,
3852                         ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
3853 {
3854   struct cleanup *old_chain;
3855   enum target_xfer_status xfer;
3856
3857   if (object == TARGET_OBJECT_SIGNAL_INFO)
3858     return linux_xfer_siginfo (ops, object, annex, readbuf, writebuf,
3859                                offset, len, xfered_len);
3860
3861   /* The target is connected but no live inferior is selected.  Pass
3862      this request down to a lower stratum (e.g., the executable
3863      file).  */
3864   if (object == TARGET_OBJECT_MEMORY && ptid_equal (inferior_ptid, null_ptid))
3865     return TARGET_XFER_EOF;
3866
3867   old_chain = save_inferior_ptid ();
3868
3869   if (ptid_lwp_p (inferior_ptid))
3870     inferior_ptid = pid_to_ptid (ptid_get_lwp (inferior_ptid));
3871
3872   xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
3873                                      offset, len, xfered_len);
3874
3875   do_cleanups (old_chain);
3876   return xfer;
3877 }
3878
3879 static int
3880 linux_thread_alive (ptid_t ptid)
3881 {
3882   int err, tmp_errno;
3883
3884   gdb_assert (ptid_lwp_p (ptid));
3885
3886   /* Send signal 0 instead of anything ptrace, because ptracing a
3887      running thread errors out claiming that the thread doesn't
3888      exist.  */
3889   err = kill_lwp (ptid_get_lwp (ptid), 0);
3890   tmp_errno = errno;
3891   if (debug_linux_nat)
3892     fprintf_unfiltered (gdb_stdlog,
3893                         "LLTA: KILL(SIG0) %s (%s)\n",
3894                         target_pid_to_str (ptid),
3895                         err ? safe_strerror (tmp_errno) : "OK");
3896
3897   if (err != 0)
3898     return 0;
3899
3900   return 1;
3901 }
3902
3903 static int
3904 linux_nat_thread_alive (struct target_ops *ops, ptid_t ptid)
3905 {
3906   return linux_thread_alive (ptid);
3907 }
3908
3909 static char *
3910 linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
3911 {
3912   static char buf[64];
3913
3914   if (ptid_lwp_p (ptid)
3915       && (ptid_get_pid (ptid) != ptid_get_lwp (ptid)
3916           || num_lwps (ptid_get_pid (ptid)) > 1))
3917     {
3918       snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
3919       return buf;
3920     }
3921
3922   return normal_pid_to_str (ptid);
3923 }
3924
3925 static char *
3926 linux_nat_thread_name (struct target_ops *self, struct thread_info *thr)
3927 {
3928   int pid = ptid_get_pid (thr->ptid);
3929   long lwp = ptid_get_lwp (thr->ptid);
3930 #define FORMAT "/proc/%d/task/%ld/comm"
3931   char buf[sizeof (FORMAT) + 30];
3932   FILE *comm_file;
3933   char *result = NULL;
3934
3935   snprintf (buf, sizeof (buf), FORMAT, pid, lwp);
3936   comm_file = gdb_fopen_cloexec (buf, "r");
3937   if (comm_file)
3938     {
3939       /* Not exported by the kernel, so we define it here.  */
3940 #define COMM_LEN 16
3941       static char line[COMM_LEN + 1];
3942
3943       if (fgets (line, sizeof (line), comm_file))
3944         {
3945           char *nl = strchr (line, '\n');
3946
3947           if (nl)
3948             *nl = '\0';
3949           if (*line != '\0')
3950             result = line;
3951         }
3952
3953       fclose (comm_file);
3954     }
3955
3956 #undef COMM_LEN
3957 #undef FORMAT
3958
3959   return result;
3960 }
3961
3962 /* Accepts an integer PID; Returns a string representing a file that
3963    can be opened to get the symbols for the child process.  */
3964
3965 static char *
3966 linux_child_pid_to_exec_file (struct target_ops *self, int pid)
3967 {
3968   static char buf[PATH_MAX];
3969   char name[PATH_MAX];
3970
3971   xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
3972   memset (buf, 0, PATH_MAX);
3973   if (readlink (name, buf, PATH_MAX - 1) <= 0)
3974     strcpy (buf, name);
3975
3976   return buf;
3977 }
3978
3979 /* Implement the to_xfer_partial interface for memory reads using the /proc
3980    filesystem.  Because we can use a single read() call for /proc, this
3981    can be much more efficient than banging away at PTRACE_PEEKTEXT,
3982    but it doesn't support writes.  */
3983
3984 static enum target_xfer_status
3985 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3986                          const char *annex, gdb_byte *readbuf,
3987                          const gdb_byte *writebuf,
3988                          ULONGEST offset, LONGEST len, ULONGEST *xfered_len)
3989 {
3990   LONGEST ret;
3991   int fd;
3992   char filename[64];
3993
3994   if (object != TARGET_OBJECT_MEMORY || !readbuf)
3995     return 0;
3996
3997   /* Don't bother for one word.  */
3998   if (len < 3 * sizeof (long))
3999     return TARGET_XFER_EOF;
4000
4001   /* We could keep this file open and cache it - possibly one per
4002      thread.  That requires some juggling, but is even faster.  */
4003   xsnprintf (filename, sizeof filename, "/proc/%d/mem",
4004              ptid_get_pid (inferior_ptid));
4005   fd = gdb_open_cloexec (filename, O_RDONLY | O_LARGEFILE, 0);
4006   if (fd == -1)
4007     return TARGET_XFER_EOF;
4008
4009   /* If pread64 is available, use it.  It's faster if the kernel
4010      supports it (only one syscall), and it's 64-bit safe even on
4011      32-bit platforms (for instance, SPARC debugging a SPARC64
4012      application).  */
4013 #ifdef HAVE_PREAD64
4014   if (pread64 (fd, readbuf, len, offset) != len)
4015 #else
4016   if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
4017 #endif
4018     ret = 0;
4019   else
4020     ret = len;
4021
4022   close (fd);
4023
4024   if (ret == 0)
4025     return TARGET_XFER_EOF;
4026   else
4027     {
4028       *xfered_len = ret;
4029       return TARGET_XFER_OK;
4030     }
4031 }
4032
4033
4034 /* Enumerate spufs IDs for process PID.  */
4035 static LONGEST
4036 spu_enumerate_spu_ids (int pid, gdb_byte *buf, ULONGEST offset, ULONGEST len)
4037 {
4038   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
4039   LONGEST pos = 0;
4040   LONGEST written = 0;
4041   char path[128];
4042   DIR *dir;
4043   struct dirent *entry;
4044
4045   xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
4046   dir = opendir (path);
4047   if (!dir)
4048     return -1;
4049
4050   rewinddir (dir);
4051   while ((entry = readdir (dir)) != NULL)
4052     {
4053       struct stat st;
4054       struct statfs stfs;
4055       int fd;
4056
4057       fd = atoi (entry->d_name);
4058       if (!fd)
4059         continue;
4060
4061       xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
4062       if (stat (path, &st) != 0)
4063         continue;
4064       if (!S_ISDIR (st.st_mode))
4065         continue;
4066
4067       if (statfs (path, &stfs) != 0)
4068         continue;
4069       if (stfs.f_type != SPUFS_MAGIC)
4070         continue;
4071
4072       if (pos >= offset && pos + 4 <= offset + len)
4073         {
4074           store_unsigned_integer (buf + pos - offset, 4, byte_order, fd);
4075           written += 4;
4076         }
4077       pos += 4;
4078     }
4079
4080   closedir (dir);
4081   return written;
4082 }
4083
4084 /* Implement the to_xfer_partial interface for the TARGET_OBJECT_SPU
4085    object type, using the /proc file system.  */
4086
4087 static enum target_xfer_status
4088 linux_proc_xfer_spu (struct target_ops *ops, enum target_object object,
4089                      const char *annex, gdb_byte *readbuf,
4090                      const gdb_byte *writebuf,
4091                      ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
4092 {
4093   char buf[128];
4094   int fd = 0;
4095   int ret = -1;
4096   int pid = ptid_get_pid (inferior_ptid);
4097
4098   if (!annex)
4099     {
4100       if (!readbuf)
4101         return TARGET_XFER_E_IO;
4102       else
4103         {
4104           LONGEST l = spu_enumerate_spu_ids (pid, readbuf, offset, len);
4105
4106           if (l < 0)
4107             return TARGET_XFER_E_IO;
4108           else if (l == 0)
4109             return TARGET_XFER_EOF;
4110           else
4111             {
4112               *xfered_len = (ULONGEST) l;
4113               return TARGET_XFER_OK;
4114             }
4115         }
4116     }
4117
4118   xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
4119   fd = gdb_open_cloexec (buf, writebuf? O_WRONLY : O_RDONLY, 0);
4120   if (fd <= 0)
4121     return TARGET_XFER_E_IO;
4122
4123   if (offset != 0
4124       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4125     {
4126       close (fd);
4127       return TARGET_XFER_EOF;
4128     }
4129
4130   if (writebuf)
4131     ret = write (fd, writebuf, (size_t) len);
4132   else if (readbuf)
4133     ret = read (fd, readbuf, (size_t) len);
4134
4135   close (fd);
4136
4137   if (ret < 0)
4138     return TARGET_XFER_E_IO;
4139   else if (ret == 0)
4140     return TARGET_XFER_EOF;
4141   else
4142     {
4143       *xfered_len = (ULONGEST) ret;
4144       return TARGET_XFER_OK;
4145     }
4146 }
4147
4148
4149 /* Parse LINE as a signal set and add its set bits to SIGS.  */
4150
4151 static void
4152 add_line_to_sigset (const char *line, sigset_t *sigs)
4153 {
4154   int len = strlen (line) - 1;
4155   const char *p;
4156   int signum;
4157
4158   if (line[len] != '\n')
4159     error (_("Could not parse signal set: %s"), line);
4160
4161   p = line;
4162   signum = len * 4;
4163   while (len-- > 0)
4164     {
4165       int digit;
4166
4167       if (*p >= '0' && *p <= '9')
4168         digit = *p - '0';
4169       else if (*p >= 'a' && *p <= 'f')
4170         digit = *p - 'a' + 10;
4171       else
4172         error (_("Could not parse signal set: %s"), line);
4173
4174       signum -= 4;
4175
4176       if (digit & 1)
4177         sigaddset (sigs, signum + 1);
4178       if (digit & 2)
4179         sigaddset (sigs, signum + 2);
4180       if (digit & 4)
4181         sigaddset (sigs, signum + 3);
4182       if (digit & 8)
4183         sigaddset (sigs, signum + 4);
4184
4185       p++;
4186     }
4187 }
4188
4189 /* Find process PID's pending signals from /proc/pid/status and set
4190    SIGS to match.  */
4191
4192 void
4193 linux_proc_pending_signals (int pid, sigset_t *pending,
4194                             sigset_t *blocked, sigset_t *ignored)
4195 {
4196   FILE *procfile;
4197   char buffer[PATH_MAX], fname[PATH_MAX];
4198   struct cleanup *cleanup;
4199
4200   sigemptyset (pending);
4201   sigemptyset (blocked);
4202   sigemptyset (ignored);
4203   xsnprintf (fname, sizeof fname, "/proc/%d/status", pid);
4204   procfile = gdb_fopen_cloexec (fname, "r");
4205   if (procfile == NULL)
4206     error (_("Could not open %s"), fname);
4207   cleanup = make_cleanup_fclose (procfile);
4208
4209   while (fgets (buffer, PATH_MAX, procfile) != NULL)
4210     {
4211       /* Normal queued signals are on the SigPnd line in the status
4212          file.  However, 2.6 kernels also have a "shared" pending
4213          queue for delivering signals to a thread group, so check for
4214          a ShdPnd line also.
4215
4216          Unfortunately some Red Hat kernels include the shared pending
4217          queue but not the ShdPnd status field.  */
4218
4219       if (startswith (buffer, "SigPnd:\t"))
4220         add_line_to_sigset (buffer + 8, pending);
4221       else if (startswith (buffer, "ShdPnd:\t"))
4222         add_line_to_sigset (buffer + 8, pending);
4223       else if (startswith (buffer, "SigBlk:\t"))
4224         add_line_to_sigset (buffer + 8, blocked);
4225       else if (startswith (buffer, "SigIgn:\t"))
4226         add_line_to_sigset (buffer + 8, ignored);
4227     }
4228
4229   do_cleanups (cleanup);
4230 }
4231
4232 static enum target_xfer_status
4233 linux_nat_xfer_osdata (struct target_ops *ops, enum target_object object,
4234                        const char *annex, gdb_byte *readbuf,
4235                        const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
4236                        ULONGEST *xfered_len)
4237 {
4238   gdb_assert (object == TARGET_OBJECT_OSDATA);
4239
4240   *xfered_len = linux_common_xfer_osdata (annex, readbuf, offset, len);
4241   if (*xfered_len == 0)
4242     return TARGET_XFER_EOF;
4243   else
4244     return TARGET_XFER_OK;
4245 }
4246
4247 static enum target_xfer_status
4248 linux_xfer_partial (struct target_ops *ops, enum target_object object,
4249                     const char *annex, gdb_byte *readbuf,
4250                     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
4251                     ULONGEST *xfered_len)
4252 {
4253   enum target_xfer_status xfer;
4254
4255   if (object == TARGET_OBJECT_AUXV)
4256     return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
4257                              offset, len, xfered_len);
4258
4259   if (object == TARGET_OBJECT_OSDATA)
4260     return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
4261                                   offset, len, xfered_len);
4262
4263   if (object == TARGET_OBJECT_SPU)
4264     return linux_proc_xfer_spu (ops, object, annex, readbuf, writebuf,
4265                                 offset, len, xfered_len);
4266
4267   /* GDB calculates all the addresses in possibly larget width of the address.
4268      Address width needs to be masked before its final use - either by
4269      linux_proc_xfer_partial or inf_ptrace_xfer_partial.
4270
4271      Compare ADDR_BIT first to avoid a compiler warning on shift overflow.  */
4272
4273   if (object == TARGET_OBJECT_MEMORY)
4274     {
4275       int addr_bit = gdbarch_addr_bit (target_gdbarch ());
4276
4277       if (addr_bit < (sizeof (ULONGEST) * HOST_CHAR_BIT))
4278         offset &= ((ULONGEST) 1 << addr_bit) - 1;
4279     }
4280
4281   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
4282                                   offset, len, xfered_len);
4283   if (xfer != TARGET_XFER_EOF)
4284     return xfer;
4285
4286   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
4287                              offset, len, xfered_len);
4288 }
4289
4290 static void
4291 cleanup_target_stop (void *arg)
4292 {
4293   ptid_t *ptid = (ptid_t *) arg;
4294
4295   gdb_assert (arg != NULL);
4296
4297   /* Unpause all */
4298   target_resume (*ptid, 0, GDB_SIGNAL_0);
4299 }
4300
4301 static VEC(static_tracepoint_marker_p) *
4302 linux_child_static_tracepoint_markers_by_strid (struct target_ops *self,
4303                                                 const char *strid)
4304 {
4305   char s[IPA_CMD_BUF_SIZE];
4306   struct cleanup *old_chain;
4307   int pid = ptid_get_pid (inferior_ptid);
4308   VEC(static_tracepoint_marker_p) *markers = NULL;
4309   struct static_tracepoint_marker *marker = NULL;
4310   char *p = s;
4311   ptid_t ptid = ptid_build (pid, 0, 0);
4312
4313   /* Pause all */
4314   target_stop (ptid);
4315
4316   memcpy (s, "qTfSTM", sizeof ("qTfSTM"));
4317   s[sizeof ("qTfSTM")] = 0;
4318
4319   agent_run_command (pid, s, strlen (s) + 1);
4320
4321   old_chain = make_cleanup (free_current_marker, &marker);
4322   make_cleanup (cleanup_target_stop, &ptid);
4323
4324   while (*p++ == 'm')
4325     {
4326       if (marker == NULL)
4327         marker = XCNEW (struct static_tracepoint_marker);
4328
4329       do
4330         {
4331           parse_static_tracepoint_marker_definition (p, &p, marker);
4332
4333           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
4334             {
4335               VEC_safe_push (static_tracepoint_marker_p,
4336                              markers, marker);
4337               marker = NULL;
4338             }
4339           else
4340             {
4341               release_static_tracepoint_marker (marker);
4342               memset (marker, 0, sizeof (*marker));
4343             }
4344         }
4345       while (*p++ == ',');      /* comma-separated list */
4346
4347       memcpy (s, "qTsSTM", sizeof ("qTsSTM"));
4348       s[sizeof ("qTsSTM")] = 0;
4349       agent_run_command (pid, s, strlen (s) + 1);
4350       p = s;
4351     }
4352
4353   do_cleanups (old_chain);
4354
4355   return markers;
4356 }
4357
4358 /* Create a prototype generic GNU/Linux target.  The client can override
4359    it with local methods.  */
4360
4361 static void
4362 linux_target_install_ops (struct target_ops *t)
4363 {
4364   t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
4365   t->to_remove_fork_catchpoint = linux_child_remove_fork_catchpoint;
4366   t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
4367   t->to_remove_vfork_catchpoint = linux_child_remove_vfork_catchpoint;
4368   t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
4369   t->to_remove_exec_catchpoint = linux_child_remove_exec_catchpoint;
4370   t->to_set_syscall_catchpoint = linux_child_set_syscall_catchpoint;
4371   t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
4372   t->to_post_startup_inferior = linux_child_post_startup_inferior;
4373   t->to_post_attach = linux_child_post_attach;
4374   t->to_follow_fork = linux_child_follow_fork;
4375
4376   super_xfer_partial = t->to_xfer_partial;
4377   t->to_xfer_partial = linux_xfer_partial;
4378
4379   t->to_static_tracepoint_markers_by_strid
4380     = linux_child_static_tracepoint_markers_by_strid;
4381 }
4382
4383 struct target_ops *
4384 linux_target (void)
4385 {
4386   struct target_ops *t;
4387
4388   t = inf_ptrace_target ();
4389   linux_target_install_ops (t);
4390
4391   return t;
4392 }
4393
4394 struct target_ops *
4395 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
4396 {
4397   struct target_ops *t;
4398
4399   t = inf_ptrace_trad_target (register_u_offset);
4400   linux_target_install_ops (t);
4401
4402   return t;
4403 }
4404
4405 /* target_is_async_p implementation.  */
4406
4407 static int
4408 linux_nat_is_async_p (struct target_ops *ops)
4409 {
4410   return linux_is_async_p ();
4411 }
4412
4413 /* target_can_async_p implementation.  */
4414
4415 static int
4416 linux_nat_can_async_p (struct target_ops *ops)
4417 {
4418   /* NOTE: palves 2008-03-21: We're only async when the user requests
4419      it explicitly with the "set target-async" command.
4420      Someday, linux will always be async.  */
4421   return target_async_permitted;
4422 }
4423
4424 static int
4425 linux_nat_supports_non_stop (struct target_ops *self)
4426 {
4427   return 1;
4428 }
4429
4430 /* True if we want to support multi-process.  To be removed when GDB
4431    supports multi-exec.  */
4432
4433 int linux_multi_process = 1;
4434
4435 static int
4436 linux_nat_supports_multi_process (struct target_ops *self)
4437 {
4438   return linux_multi_process;
4439 }
4440
4441 static int
4442 linux_nat_supports_disable_randomization (struct target_ops *self)
4443 {
4444 #ifdef HAVE_PERSONALITY
4445   return 1;
4446 #else
4447   return 0;
4448 #endif
4449 }
4450
4451 static int async_terminal_is_ours = 1;
4452
4453 /* target_terminal_inferior implementation.
4454
4455    This is a wrapper around child_terminal_inferior to add async support.  */
4456
4457 static void
4458 linux_nat_terminal_inferior (struct target_ops *self)
4459 {
4460   /* Like target_terminal_inferior, use target_can_async_p, not
4461      target_is_async_p, since at this point the target is not async
4462      yet.  If it can async, then we know it will become async prior to
4463      resume.  */
4464   if (!target_can_async_p ())
4465     {
4466       /* Async mode is disabled.  */
4467       child_terminal_inferior (self);
4468       return;
4469     }
4470
4471   child_terminal_inferior (self);
4472
4473   /* Calls to target_terminal_*() are meant to be idempotent.  */
4474   if (!async_terminal_is_ours)
4475     return;
4476
4477   delete_file_handler (input_fd);
4478   async_terminal_is_ours = 0;
4479   set_sigint_trap ();
4480 }
4481
4482 /* target_terminal_ours implementation.
4483
4484    This is a wrapper around child_terminal_ours to add async support (and
4485    implement the target_terminal_ours vs target_terminal_ours_for_output
4486    distinction).  child_terminal_ours is currently no different than
4487    child_terminal_ours_for_output.
4488    We leave target_terminal_ours_for_output alone, leaving it to
4489    child_terminal_ours_for_output.  */
4490
4491 static void
4492 linux_nat_terminal_ours (struct target_ops *self)
4493 {
4494   /* GDB should never give the terminal to the inferior if the
4495      inferior is running in the background (run&, continue&, etc.),
4496      but claiming it sure should.  */
4497   child_terminal_ours (self);
4498
4499   if (async_terminal_is_ours)
4500     return;
4501
4502   clear_sigint_trap ();
4503   add_file_handler (input_fd, stdin_event_handler, 0);
4504   async_terminal_is_ours = 1;
4505 }
4506
4507 static void (*async_client_callback) (enum inferior_event_type event_type,
4508                                       void *context);
4509 static void *async_client_context;
4510
4511 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
4512    so we notice when any child changes state, and notify the
4513    event-loop; it allows us to use sigsuspend in linux_nat_wait_1
4514    above to wait for the arrival of a SIGCHLD.  */
4515
4516 static void
4517 sigchld_handler (int signo)
4518 {
4519   int old_errno = errno;
4520
4521   if (debug_linux_nat)
4522     ui_file_write_async_safe (gdb_stdlog,
4523                               "sigchld\n", sizeof ("sigchld\n") - 1);
4524
4525   if (signo == SIGCHLD
4526       && linux_nat_event_pipe[0] != -1)
4527     async_file_mark (); /* Let the event loop know that there are
4528                            events to handle.  */
4529
4530   errno = old_errno;
4531 }
4532
4533 /* Callback registered with the target events file descriptor.  */
4534
4535 static void
4536 handle_target_event (int error, gdb_client_data client_data)
4537 {
4538   (*async_client_callback) (INF_REG_EVENT, async_client_context);
4539 }
4540
4541 /* Create/destroy the target events pipe.  Returns previous state.  */
4542
4543 static int
4544 linux_async_pipe (int enable)
4545 {
4546   int previous = linux_is_async_p ();
4547
4548   if (previous != enable)
4549     {
4550       sigset_t prev_mask;
4551
4552       /* Block child signals while we create/destroy the pipe, as
4553          their handler writes to it.  */
4554       block_child_signals (&prev_mask);
4555
4556       if (enable)
4557         {
4558           if (gdb_pipe_cloexec (linux_nat_event_pipe) == -1)
4559             internal_error (__FILE__, __LINE__,
4560                             "creating event pipe failed.");
4561
4562           fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
4563           fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
4564         }
4565       else
4566         {
4567           close (linux_nat_event_pipe[0]);
4568           close (linux_nat_event_pipe[1]);
4569           linux_nat_event_pipe[0] = -1;
4570           linux_nat_event_pipe[1] = -1;
4571         }
4572
4573       restore_child_signals_mask (&prev_mask);
4574     }
4575
4576   return previous;
4577 }
4578
4579 /* target_async implementation.  */
4580
4581 static void
4582 linux_nat_async (struct target_ops *ops,
4583                  void (*callback) (enum inferior_event_type event_type,
4584                                    void *context),
4585                  void *context)
4586 {
4587   if (callback != NULL)
4588     {
4589       async_client_callback = callback;
4590       async_client_context = context;
4591       if (!linux_async_pipe (1))
4592         {
4593           add_file_handler (linux_nat_event_pipe[0],
4594                             handle_target_event, NULL);
4595           /* There may be pending events to handle.  Tell the event loop
4596              to poll them.  */
4597           async_file_mark ();
4598         }
4599     }
4600   else
4601     {
4602       async_client_callback = callback;
4603       async_client_context = context;
4604       delete_file_handler (linux_nat_event_pipe[0]);
4605       linux_async_pipe (0);
4606     }
4607   return;
4608 }
4609
4610 /* Stop an LWP, and push a GDB_SIGNAL_0 stop status if no other
4611    event came out.  */
4612
4613 static int
4614 linux_nat_stop_lwp (struct lwp_info *lwp, void *data)
4615 {
4616   if (!lwp->stopped)
4617     {
4618       if (debug_linux_nat)
4619         fprintf_unfiltered (gdb_stdlog,
4620                             "LNSL: running -> suspending %s\n",
4621                             target_pid_to_str (lwp->ptid));
4622
4623
4624       if (lwp->last_resume_kind == resume_stop)
4625         {
4626           if (debug_linux_nat)
4627             fprintf_unfiltered (gdb_stdlog,
4628                                 "linux-nat: already stopping LWP %ld at "
4629                                 "GDB's request\n",
4630                                 ptid_get_lwp (lwp->ptid));
4631           return 0;
4632         }
4633
4634       stop_callback (lwp, NULL);
4635       lwp->last_resume_kind = resume_stop;
4636     }
4637   else
4638     {
4639       /* Already known to be stopped; do nothing.  */
4640
4641       if (debug_linux_nat)
4642         {
4643           if (find_thread_ptid (lwp->ptid)->stop_requested)
4644             fprintf_unfiltered (gdb_stdlog,
4645                                 "LNSL: already stopped/stop_requested %s\n",
4646                                 target_pid_to_str (lwp->ptid));
4647           else
4648             fprintf_unfiltered (gdb_stdlog,
4649                                 "LNSL: already stopped/no "
4650                                 "stop_requested yet %s\n",
4651                                 target_pid_to_str (lwp->ptid));
4652         }
4653     }
4654   return 0;
4655 }
4656
4657 static void
4658 linux_nat_stop (struct target_ops *self, ptid_t ptid)
4659 {
4660   if (non_stop)
4661     iterate_over_lwps (ptid, linux_nat_stop_lwp, NULL);
4662   else
4663     linux_ops->to_stop (linux_ops, ptid);
4664 }
4665
4666 static void
4667 linux_nat_close (struct target_ops *self)
4668 {
4669   /* Unregister from the event loop.  */
4670   if (linux_nat_is_async_p (self))
4671     linux_nat_async (self, NULL, NULL);
4672
4673   if (linux_ops->to_close)
4674     linux_ops->to_close (linux_ops);
4675
4676   super_close (self);
4677 }
4678
4679 /* When requests are passed down from the linux-nat layer to the
4680    single threaded inf-ptrace layer, ptids of (lwpid,0,0) form are
4681    used.  The address space pointer is stored in the inferior object,
4682    but the common code that is passed such ptid can't tell whether
4683    lwpid is a "main" process id or not (it assumes so).  We reverse
4684    look up the "main" process id from the lwp here.  */
4685
4686 static struct address_space *
4687 linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
4688 {
4689   struct lwp_info *lwp;
4690   struct inferior *inf;
4691   int pid;
4692
4693   if (ptid_get_lwp (ptid) == 0)
4694     {
4695       /* An (lwpid,0,0) ptid.  Look up the lwp object to get at the
4696          tgid.  */
4697       lwp = find_lwp_pid (ptid);
4698       pid = ptid_get_pid (lwp->ptid);
4699     }
4700   else
4701     {
4702       /* A (pid,lwpid,0) ptid.  */
4703       pid = ptid_get_pid (ptid);
4704     }
4705
4706   inf = find_inferior_pid (pid);
4707   gdb_assert (inf != NULL);
4708   return inf->aspace;
4709 }
4710
4711 /* Return the cached value of the processor core for thread PTID.  */
4712
4713 static int
4714 linux_nat_core_of_thread (struct target_ops *ops, ptid_t ptid)
4715 {
4716   struct lwp_info *info = find_lwp_pid (ptid);
4717
4718   if (info)
4719     return info->core;
4720   return -1;
4721 }
4722
4723 void
4724 linux_nat_add_target (struct target_ops *t)
4725 {
4726   /* Save the provided single-threaded target.  We save this in a separate
4727      variable because another target we've inherited from (e.g. inf-ptrace)
4728      may have saved a pointer to T; we want to use it for the final
4729      process stratum target.  */
4730   linux_ops_saved = *t;
4731   linux_ops = &linux_ops_saved;
4732
4733   /* Override some methods for multithreading.  */
4734   t->to_create_inferior = linux_nat_create_inferior;
4735   t->to_attach = linux_nat_attach;
4736   t->to_detach = linux_nat_detach;
4737   t->to_resume = linux_nat_resume;
4738   t->to_wait = linux_nat_wait;
4739   t->to_pass_signals = linux_nat_pass_signals;
4740   t->to_xfer_partial = linux_nat_xfer_partial;
4741   t->to_kill = linux_nat_kill;
4742   t->to_mourn_inferior = linux_nat_mourn_inferior;
4743   t->to_thread_alive = linux_nat_thread_alive;
4744   t->to_pid_to_str = linux_nat_pid_to_str;
4745   t->to_thread_name = linux_nat_thread_name;
4746   t->to_has_thread_control = tc_schedlock;
4747   t->to_thread_address_space = linux_nat_thread_address_space;
4748   t->to_stopped_by_watchpoint = linux_nat_stopped_by_watchpoint;
4749   t->to_stopped_data_address = linux_nat_stopped_data_address;
4750   t->to_stopped_by_sw_breakpoint = linux_nat_stopped_by_sw_breakpoint;
4751   t->to_supports_stopped_by_sw_breakpoint = linux_nat_supports_stopped_by_sw_breakpoint;
4752   t->to_stopped_by_hw_breakpoint = linux_nat_stopped_by_hw_breakpoint;
4753   t->to_supports_stopped_by_hw_breakpoint = linux_nat_supports_stopped_by_hw_breakpoint;
4754
4755   t->to_can_async_p = linux_nat_can_async_p;
4756   t->to_is_async_p = linux_nat_is_async_p;
4757   t->to_supports_non_stop = linux_nat_supports_non_stop;
4758   t->to_async = linux_nat_async;
4759   t->to_terminal_inferior = linux_nat_terminal_inferior;
4760   t->to_terminal_ours = linux_nat_terminal_ours;
4761
4762   super_close = t->to_close;
4763   t->to_close = linux_nat_close;
4764
4765   /* Methods for non-stop support.  */
4766   t->to_stop = linux_nat_stop;
4767
4768   t->to_supports_multi_process = linux_nat_supports_multi_process;
4769
4770   t->to_supports_disable_randomization
4771     = linux_nat_supports_disable_randomization;
4772
4773   t->to_core_of_thread = linux_nat_core_of_thread;
4774
4775   /* We don't change the stratum; this target will sit at
4776      process_stratum and thread_db will set at thread_stratum.  This
4777      is a little strange, since this is a multi-threaded-capable
4778      target, but we want to be on the stack below thread_db, and we
4779      also want to be used for single-threaded processes.  */
4780
4781   add_target (t);
4782 }
4783
4784 /* Register a method to call whenever a new thread is attached.  */
4785 void
4786 linux_nat_set_new_thread (struct target_ops *t,
4787                           void (*new_thread) (struct lwp_info *))
4788 {
4789   /* Save the pointer.  We only support a single registered instance
4790      of the GNU/Linux native target, so we do not need to map this to
4791      T.  */
4792   linux_nat_new_thread = new_thread;
4793 }
4794
4795 /* See declaration in linux-nat.h.  */
4796
4797 void
4798 linux_nat_set_new_fork (struct target_ops *t,
4799                         linux_nat_new_fork_ftype *new_fork)
4800 {
4801   /* Save the pointer.  */
4802   linux_nat_new_fork = new_fork;
4803 }
4804
4805 /* See declaration in linux-nat.h.  */
4806
4807 void
4808 linux_nat_set_forget_process (struct target_ops *t,
4809                               linux_nat_forget_process_ftype *fn)
4810 {
4811   /* Save the pointer.  */
4812   linux_nat_forget_process_hook = fn;
4813 }
4814
4815 /* See declaration in linux-nat.h.  */
4816
4817 void
4818 linux_nat_forget_process (pid_t pid)
4819 {
4820   if (linux_nat_forget_process_hook != NULL)
4821     linux_nat_forget_process_hook (pid);
4822 }
4823
4824 /* Register a method that converts a siginfo object between the layout
4825    that ptrace returns, and the layout in the architecture of the
4826    inferior.  */
4827 void
4828 linux_nat_set_siginfo_fixup (struct target_ops *t,
4829                              int (*siginfo_fixup) (siginfo_t *,
4830                                                    gdb_byte *,
4831                                                    int))
4832 {
4833   /* Save the pointer.  */
4834   linux_nat_siginfo_fixup = siginfo_fixup;
4835 }
4836
4837 /* Register a method to call prior to resuming a thread.  */
4838
4839 void
4840 linux_nat_set_prepare_to_resume (struct target_ops *t,
4841                                  void (*prepare_to_resume) (struct lwp_info *))
4842 {
4843   /* Save the pointer.  */
4844   linux_nat_prepare_to_resume = prepare_to_resume;
4845 }
4846
4847 /* See linux-nat.h.  */
4848
4849 int
4850 linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo)
4851 {
4852   int pid;
4853
4854   pid = ptid_get_lwp (ptid);
4855   if (pid == 0)
4856     pid = ptid_get_pid (ptid);
4857
4858   errno = 0;
4859   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, siginfo);
4860   if (errno != 0)
4861     {
4862       memset (siginfo, 0, sizeof (*siginfo));
4863       return 0;
4864     }
4865   return 1;
4866 }
4867
4868 /* Provide a prototype to silence -Wmissing-prototypes.  */
4869 extern initialize_file_ftype _initialize_linux_nat;
4870
4871 void
4872 _initialize_linux_nat (void)
4873 {
4874   add_setshow_zuinteger_cmd ("lin-lwp", class_maintenance,
4875                              &debug_linux_nat, _("\
4876 Set debugging of GNU/Linux lwp module."), _("\
4877 Show debugging of GNU/Linux lwp module."), _("\
4878 Enables printf debugging output."),
4879                              NULL,
4880                              show_debug_linux_nat,
4881                              &setdebuglist, &showdebuglist);
4882
4883   /* Save this mask as the default.  */
4884   sigprocmask (SIG_SETMASK, NULL, &normal_mask);
4885
4886   /* Install a SIGCHLD handler.  */
4887   sigchld_action.sa_handler = sigchld_handler;
4888   sigemptyset (&sigchld_action.sa_mask);
4889   sigchld_action.sa_flags = SA_RESTART;
4890
4891   /* Make it the default.  */
4892   sigaction (SIGCHLD, &sigchld_action, NULL);
4893
4894   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
4895   sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
4896   sigdelset (&suspend_mask, SIGCHLD);
4897
4898   sigemptyset (&blocked_mask);
4899
4900   /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to
4901      support read-only process state.  */
4902   linux_ptrace_set_additional_flags (PTRACE_O_TRACESYSGOOD
4903                                      | PTRACE_O_TRACEVFORKDONE
4904                                      | PTRACE_O_TRACEVFORK
4905                                      | PTRACE_O_TRACEFORK
4906                                      | PTRACE_O_TRACEEXEC);
4907 }
4908 \f
4909
4910 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
4911    the GNU/Linux Threads library and therefore doesn't really belong
4912    here.  */
4913
4914 /* Read variable NAME in the target and return its value if found.
4915    Otherwise return zero.  It is assumed that the type of the variable
4916    is `int'.  */
4917
4918 static int
4919 get_signo (const char *name)
4920 {
4921   struct bound_minimal_symbol ms;
4922   int signo;
4923
4924   ms = lookup_minimal_symbol (name, NULL, NULL);
4925   if (ms.minsym == NULL)
4926     return 0;
4927
4928   if (target_read_memory (BMSYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
4929                           sizeof (signo)) != 0)
4930     return 0;
4931
4932   return signo;
4933 }
4934
4935 /* Return the set of signals used by the threads library in *SET.  */
4936
4937 void
4938 lin_thread_get_thread_signals (sigset_t *set)
4939 {
4940   struct sigaction action;
4941   int restart, cancel;
4942
4943   sigemptyset (&blocked_mask);
4944   sigemptyset (set);
4945
4946   restart = get_signo ("__pthread_sig_restart");
4947   cancel = get_signo ("__pthread_sig_cancel");
4948
4949   /* LinuxThreads normally uses the first two RT signals, but in some legacy
4950      cases may use SIGUSR1/SIGUSR2.  NPTL always uses RT signals, but does
4951      not provide any way for the debugger to query the signal numbers -
4952      fortunately they don't change!  */
4953
4954   if (restart == 0)
4955     restart = __SIGRTMIN;
4956
4957   if (cancel == 0)
4958     cancel = __SIGRTMIN + 1;
4959
4960   sigaddset (set, restart);
4961   sigaddset (set, cancel);
4962
4963   /* The GNU/Linux Threads library makes terminating threads send a
4964      special "cancel" signal instead of SIGCHLD.  Make sure we catch
4965      those (to prevent them from terminating GDB itself, which is
4966      likely to be their default action) and treat them the same way as
4967      SIGCHLD.  */
4968
4969   action.sa_handler = sigchld_handler;
4970   sigemptyset (&action.sa_mask);
4971   action.sa_flags = SA_RESTART;
4972   sigaction (cancel, &action, NULL);
4973
4974   /* We block the "cancel" signal throughout this code ...  */
4975   sigaddset (&blocked_mask, cancel);
4976   sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
4977
4978   /* ... except during a sigsuspend.  */
4979   sigdelset (&suspend_mask, cancel);
4980 }