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