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