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