OSDN Git Service

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