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