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