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