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