OSDN Git Service

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