gdb/
[external/binutils.git] / gdb / linux-nat.c
1 /* GNU/Linux native-dependent code common to multiple platforms.
2
3    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4    2011 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22 #include "inferior.h"
23 #include "target.h"
24 #include "gdb_string.h"
25 #include "gdb_wait.h"
26 #include "gdb_assert.h"
27 #ifdef HAVE_TKILL_SYSCALL
28 #include <unistd.h>
29 #include <sys/syscall.h>
30 #endif
31 #include <sys/ptrace.h>
32 #include "linux-nat.h"
33 #include "linux-ptrace.h"
34 #include "linux-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 /* Wait for LP to stop.  Returns the wait status, or 0 if the LWP has
2360    exited.  */
2361
2362 static int
2363 wait_lwp (struct lwp_info *lp)
2364 {
2365   pid_t pid;
2366   int status;
2367   int thread_dead = 0;
2368
2369   gdb_assert (!lp->stopped);
2370   gdb_assert (lp->status == 0);
2371
2372   pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
2373   if (pid == -1 && errno == ECHILD)
2374     {
2375       pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
2376       if (pid == -1 && errno == ECHILD)
2377         {
2378           /* The thread has previously exited.  We need to delete it
2379              now because, for some vendor 2.4 kernels with NPTL
2380              support backported, there won't be an exit event unless
2381              it is the main thread.  2.6 kernels will report an exit
2382              event for each thread that exits, as expected.  */
2383           thread_dead = 1;
2384           if (debug_linux_nat)
2385             fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
2386                                 target_pid_to_str (lp->ptid));
2387         }
2388     }
2389
2390   if (!thread_dead)
2391     {
2392       gdb_assert (pid == GET_LWP (lp->ptid));
2393
2394       if (debug_linux_nat)
2395         {
2396           fprintf_unfiltered (gdb_stdlog,
2397                               "WL: waitpid %s received %s\n",
2398                               target_pid_to_str (lp->ptid),
2399                               status_to_str (status));
2400         }
2401     }
2402
2403   /* Check if the thread has exited.  */
2404   if (WIFEXITED (status) || WIFSIGNALED (status))
2405     {
2406       thread_dead = 1;
2407       if (debug_linux_nat)
2408         fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
2409                             target_pid_to_str (lp->ptid));
2410     }
2411
2412   if (thread_dead)
2413     {
2414       exit_lwp (lp);
2415       return 0;
2416     }
2417
2418   gdb_assert (WIFSTOPPED (status));
2419
2420   /* Handle GNU/Linux's syscall SIGTRAPs.  */
2421   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
2422     {
2423       /* No longer need the sysgood bit.  The ptrace event ends up
2424          recorded in lp->waitstatus if we care for it.  We can carry
2425          on handling the event like a regular SIGTRAP from here
2426          on.  */
2427       status = W_STOPCODE (SIGTRAP);
2428       if (linux_handle_syscall_trap (lp, 1))
2429         return wait_lwp (lp);
2430     }
2431
2432   /* Handle GNU/Linux's extended waitstatus for trace events.  */
2433   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
2434     {
2435       if (debug_linux_nat)
2436         fprintf_unfiltered (gdb_stdlog,
2437                             "WL: Handling extended status 0x%06x\n",
2438                             status);
2439       if (linux_handle_extended_wait (lp, status, 1))
2440         return wait_lwp (lp);
2441     }
2442
2443   return status;
2444 }
2445
2446 /* Save the most recent siginfo for LP.  This is currently only called
2447    for SIGTRAP; some ports use the si_addr field for
2448    target_stopped_data_address.  In the future, it may also be used to
2449    restore the siginfo of requeued signals.  */
2450
2451 static void
2452 save_siginfo (struct lwp_info *lp)
2453 {
2454   errno = 0;
2455   ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid),
2456           (PTRACE_TYPE_ARG3) 0, &lp->siginfo);
2457
2458   if (errno != 0)
2459     memset (&lp->siginfo, 0, sizeof (lp->siginfo));
2460 }
2461
2462 /* Send a SIGSTOP to LP.  */
2463
2464 static int
2465 stop_callback (struct lwp_info *lp, void *data)
2466 {
2467   if (!lp->stopped && !lp->signalled)
2468     {
2469       int ret;
2470
2471       if (debug_linux_nat)
2472         {
2473           fprintf_unfiltered (gdb_stdlog,
2474                               "SC:  kill %s **<SIGSTOP>**\n",
2475                               target_pid_to_str (lp->ptid));
2476         }
2477       errno = 0;
2478       ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
2479       if (debug_linux_nat)
2480         {
2481           fprintf_unfiltered (gdb_stdlog,
2482                               "SC:  lwp kill %d %s\n",
2483                               ret,
2484                               errno ? safe_strerror (errno) : "ERRNO-OK");
2485         }
2486
2487       lp->signalled = 1;
2488       gdb_assert (lp->status == 0);
2489     }
2490
2491   return 0;
2492 }
2493
2494 /* Return non-zero if LWP PID has a pending SIGINT.  */
2495
2496 static int
2497 linux_nat_has_pending_sigint (int pid)
2498 {
2499   sigset_t pending, blocked, ignored;
2500
2501   linux_proc_pending_signals (pid, &pending, &blocked, &ignored);
2502
2503   if (sigismember (&pending, SIGINT)
2504       && !sigismember (&ignored, SIGINT))
2505     return 1;
2506
2507   return 0;
2508 }
2509
2510 /* Set a flag in LP indicating that we should ignore its next SIGINT.  */
2511
2512 static int
2513 set_ignore_sigint (struct lwp_info *lp, void *data)
2514 {
2515   /* If a thread has a pending SIGINT, consume it; otherwise, set a
2516      flag to consume the next one.  */
2517   if (lp->stopped && lp->status != 0 && WIFSTOPPED (lp->status)
2518       && WSTOPSIG (lp->status) == SIGINT)
2519     lp->status = 0;
2520   else
2521     lp->ignore_sigint = 1;
2522
2523   return 0;
2524 }
2525
2526 /* If LP does not have a SIGINT pending, then clear the ignore_sigint flag.
2527    This function is called after we know the LWP has stopped; if the LWP
2528    stopped before the expected SIGINT was delivered, then it will never have
2529    arrived.  Also, if the signal was delivered to a shared queue and consumed
2530    by a different thread, it will never be delivered to this LWP.  */
2531
2532 static void
2533 maybe_clear_ignore_sigint (struct lwp_info *lp)
2534 {
2535   if (!lp->ignore_sigint)
2536     return;
2537
2538   if (!linux_nat_has_pending_sigint (GET_LWP (lp->ptid)))
2539     {
2540       if (debug_linux_nat)
2541         fprintf_unfiltered (gdb_stdlog,
2542                             "MCIS: Clearing bogus flag for %s\n",
2543                             target_pid_to_str (lp->ptid));
2544       lp->ignore_sigint = 0;
2545     }
2546 }
2547
2548 /* Fetch the possible triggered data watchpoint info and store it in
2549    LP.
2550
2551    On some archs, like x86, that use debug registers to set
2552    watchpoints, it's possible that the way to know which watched
2553    address trapped, is to check the register that is used to select
2554    which address to watch.  Problem is, between setting the watchpoint
2555    and reading back which data address trapped, the user may change
2556    the set of watchpoints, and, as a consequence, GDB changes the
2557    debug registers in the inferior.  To avoid reading back a stale
2558    stopped-data-address when that happens, we cache in LP the fact
2559    that a watchpoint trapped, and the corresponding data address, as
2560    soon as we see LP stop with a SIGTRAP.  If GDB changes the debug
2561    registers meanwhile, we have the cached data we can rely on.  */
2562
2563 static void
2564 save_sigtrap (struct lwp_info *lp)
2565 {
2566   struct cleanup *old_chain;
2567
2568   if (linux_ops->to_stopped_by_watchpoint == NULL)
2569     {
2570       lp->stopped_by_watchpoint = 0;
2571       return;
2572     }
2573
2574   old_chain = save_inferior_ptid ();
2575   inferior_ptid = lp->ptid;
2576
2577   lp->stopped_by_watchpoint = linux_ops->to_stopped_by_watchpoint ();
2578
2579   if (lp->stopped_by_watchpoint)
2580     {
2581       if (linux_ops->to_stopped_data_address != NULL)
2582         lp->stopped_data_address_p =
2583           linux_ops->to_stopped_data_address (&current_target,
2584                                               &lp->stopped_data_address);
2585       else
2586         lp->stopped_data_address_p = 0;
2587     }
2588
2589   do_cleanups (old_chain);
2590 }
2591
2592 /* See save_sigtrap.  */
2593
2594 static int
2595 linux_nat_stopped_by_watchpoint (void)
2596 {
2597   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2598
2599   gdb_assert (lp != NULL);
2600
2601   return lp->stopped_by_watchpoint;
2602 }
2603
2604 static int
2605 linux_nat_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
2606 {
2607   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2608
2609   gdb_assert (lp != NULL);
2610
2611   *addr_p = lp->stopped_data_address;
2612
2613   return lp->stopped_data_address_p;
2614 }
2615
2616 /* Commonly any breakpoint / watchpoint generate only SIGTRAP.  */
2617
2618 static int
2619 sigtrap_is_event (int status)
2620 {
2621   return WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP;
2622 }
2623
2624 /* SIGTRAP-like events recognizer.  */
2625
2626 static int (*linux_nat_status_is_event) (int status) = sigtrap_is_event;
2627
2628 /* Check for SIGTRAP-like events in LP.  */
2629
2630 static int
2631 linux_nat_lp_status_is_event (struct lwp_info *lp)
2632 {
2633   /* We check for lp->waitstatus in addition to lp->status, because we can
2634      have pending process exits recorded in lp->status
2635      and W_EXITCODE(0,0) == 0.  We should probably have an additional
2636      lp->status_p flag.  */
2637
2638   return (lp->waitstatus.kind == TARGET_WAITKIND_IGNORE
2639           && linux_nat_status_is_event (lp->status));
2640 }
2641
2642 /* Set alternative SIGTRAP-like events recognizer.  If
2643    breakpoint_inserted_here_p there then gdbarch_decr_pc_after_break will be
2644    applied.  */
2645
2646 void
2647 linux_nat_set_status_is_event (struct target_ops *t,
2648                                int (*status_is_event) (int status))
2649 {
2650   linux_nat_status_is_event = status_is_event;
2651 }
2652
2653 /* Wait until LP is stopped.  */
2654
2655 static int
2656 stop_wait_callback (struct lwp_info *lp, void *data)
2657 {
2658   struct inferior *inf = find_inferior_pid (GET_PID (lp->ptid));
2659
2660   /* If this is a vfork parent, bail out, it is not going to report
2661      any SIGSTOP until the vfork is done with.  */
2662   if (inf->vfork_child != NULL)
2663     return 0;
2664
2665   if (!lp->stopped)
2666     {
2667       int status;
2668
2669       status = wait_lwp (lp);
2670       if (status == 0)
2671         return 0;
2672
2673       if (lp->ignore_sigint && WIFSTOPPED (status)
2674           && WSTOPSIG (status) == SIGINT)
2675         {
2676           lp->ignore_sigint = 0;
2677
2678           errno = 0;
2679           ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2680           if (debug_linux_nat)
2681             fprintf_unfiltered (gdb_stdlog,
2682                                 "PTRACE_CONT %s, 0, 0 (%s) "
2683                                 "(discarding SIGINT)\n",
2684                                 target_pid_to_str (lp->ptid),
2685                                 errno ? safe_strerror (errno) : "OK");
2686
2687           return stop_wait_callback (lp, NULL);
2688         }
2689
2690       maybe_clear_ignore_sigint (lp);
2691
2692       if (WSTOPSIG (status) != SIGSTOP)
2693         {
2694           if (linux_nat_status_is_event (status))
2695             {
2696               /* If a LWP other than the LWP that we're reporting an
2697                  event for has hit a GDB breakpoint (as opposed to
2698                  some random trap signal), then just arrange for it to
2699                  hit it again later.  We don't keep the SIGTRAP status
2700                  and don't forward the SIGTRAP signal to the LWP.  We
2701                  will handle the current event, eventually we will
2702                  resume all LWPs, and this one will get its breakpoint
2703                  trap again.
2704
2705                  If we do not do this, then we run the risk that the
2706                  user will delete or disable the breakpoint, but the
2707                  thread will have already tripped on it.  */
2708
2709               /* Save the trap's siginfo in case we need it later.  */
2710               save_siginfo (lp);
2711
2712               save_sigtrap (lp);
2713
2714               /* Now resume this LWP and get the SIGSTOP event.  */
2715               errno = 0;
2716               ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2717               if (debug_linux_nat)
2718                 {
2719                   fprintf_unfiltered (gdb_stdlog,
2720                                       "PTRACE_CONT %s, 0, 0 (%s)\n",
2721                                       target_pid_to_str (lp->ptid),
2722                                       errno ? safe_strerror (errno) : "OK");
2723
2724                   fprintf_unfiltered (gdb_stdlog,
2725                                       "SWC: Candidate SIGTRAP event in %s\n",
2726                                       target_pid_to_str (lp->ptid));
2727                 }
2728               /* Hold this event/waitstatus while we check to see if
2729                  there are any more (we still want to get that SIGSTOP).  */
2730               stop_wait_callback (lp, NULL);
2731
2732               /* Hold the SIGTRAP for handling by linux_nat_wait.  If
2733                  there's another event, throw it back into the
2734                  queue.  */
2735               if (lp->status)
2736                 {
2737                   if (debug_linux_nat)
2738                     fprintf_unfiltered (gdb_stdlog,
2739                                         "SWC: kill %s, %s\n",
2740                                         target_pid_to_str (lp->ptid),
2741                                         status_to_str ((int) status));
2742                   kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
2743                 }
2744
2745               /* Save the sigtrap event.  */
2746               lp->status = status;
2747               return 0;
2748             }
2749           else
2750             {
2751               /* The thread was stopped with a signal other than
2752                  SIGSTOP, and didn't accidentally trip a breakpoint.  */
2753
2754               if (debug_linux_nat)
2755                 {
2756                   fprintf_unfiltered (gdb_stdlog,
2757                                       "SWC: Pending event %s in %s\n",
2758                                       status_to_str ((int) status),
2759                                       target_pid_to_str (lp->ptid));
2760                 }
2761               /* Now resume this LWP and get the SIGSTOP event.  */
2762               errno = 0;
2763               ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2764               if (debug_linux_nat)
2765                 fprintf_unfiltered (gdb_stdlog,
2766                                     "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
2767                                     target_pid_to_str (lp->ptid),
2768                                     errno ? safe_strerror (errno) : "OK");
2769
2770               /* Hold this event/waitstatus while we check to see if
2771                  there are any more (we still want to get that SIGSTOP).  */
2772               stop_wait_callback (lp, NULL);
2773
2774               /* If the lp->status field is still empty, use it to
2775                  hold this event.  If not, then this event must be
2776                  returned to the event queue of the LWP.  */
2777               if (lp->status)
2778                 {
2779                   if (debug_linux_nat)
2780                     {
2781                       fprintf_unfiltered (gdb_stdlog,
2782                                           "SWC: kill %s, %s\n",
2783                                           target_pid_to_str (lp->ptid),
2784                                           status_to_str ((int) status));
2785                     }
2786                   kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
2787                 }
2788               else
2789                 lp->status = status;
2790               return 0;
2791             }
2792         }
2793       else
2794         {
2795           /* We caught the SIGSTOP that we intended to catch, so
2796              there's no SIGSTOP pending.  */
2797           lp->stopped = 1;
2798           lp->signalled = 0;
2799         }
2800     }
2801
2802   return 0;
2803 }
2804
2805 /* Return non-zero if LP has a wait status pending.  */
2806
2807 static int
2808 status_callback (struct lwp_info *lp, void *data)
2809 {
2810   /* Only report a pending wait status if we pretend that this has
2811      indeed been resumed.  */
2812   if (!lp->resumed)
2813     return 0;
2814
2815   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2816     {
2817       /* A ptrace event, like PTRACE_FORK|VFORK|EXEC, syscall event,
2818          or a pending process exit.  Note that `W_EXITCODE(0,0) ==
2819          0', so a clean process exit can not be stored pending in
2820          lp->status, it is indistinguishable from
2821          no-pending-status.  */
2822       return 1;
2823     }
2824
2825   if (lp->status != 0)
2826     return 1;
2827
2828   return 0;
2829 }
2830
2831 /* Return non-zero if LP isn't stopped.  */
2832
2833 static int
2834 running_callback (struct lwp_info *lp, void *data)
2835 {
2836   return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
2837 }
2838
2839 /* Count the LWP's that have had events.  */
2840
2841 static int
2842 count_events_callback (struct lwp_info *lp, void *data)
2843 {
2844   int *count = data;
2845
2846   gdb_assert (count != NULL);
2847
2848   /* Count only resumed LWPs that have a SIGTRAP event pending.  */
2849   if (lp->resumed && linux_nat_lp_status_is_event (lp))
2850     (*count)++;
2851
2852   return 0;
2853 }
2854
2855 /* Select the LWP (if any) that is currently being single-stepped.  */
2856
2857 static int
2858 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2859 {
2860   if (lp->step && lp->status != 0)
2861     return 1;
2862   else
2863     return 0;
2864 }
2865
2866 /* Select the Nth LWP that has had a SIGTRAP event.  */
2867
2868 static int
2869 select_event_lwp_callback (struct lwp_info *lp, void *data)
2870 {
2871   int *selector = data;
2872
2873   gdb_assert (selector != NULL);
2874
2875   /* Select only resumed LWPs that have a SIGTRAP event pending.  */
2876   if (lp->resumed && linux_nat_lp_status_is_event (lp))
2877     if ((*selector)-- == 0)
2878       return 1;
2879
2880   return 0;
2881 }
2882
2883 static int
2884 cancel_breakpoint (struct lwp_info *lp)
2885 {
2886   /* Arrange for a breakpoint to be hit again later.  We don't keep
2887      the SIGTRAP status and don't forward the SIGTRAP signal to the
2888      LWP.  We will handle the current event, eventually we will resume
2889      this LWP, and this breakpoint will trap again.
2890
2891      If we do not do this, then we run the risk that the user will
2892      delete or disable the breakpoint, but the LWP will have already
2893      tripped on it.  */
2894
2895   struct regcache *regcache = get_thread_regcache (lp->ptid);
2896   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2897   CORE_ADDR pc;
2898
2899   pc = regcache_read_pc (regcache) - gdbarch_decr_pc_after_break (gdbarch);
2900   if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
2901     {
2902       if (debug_linux_nat)
2903         fprintf_unfiltered (gdb_stdlog,
2904                             "CB: Push back breakpoint for %s\n",
2905                             target_pid_to_str (lp->ptid));
2906
2907       /* Back up the PC if necessary.  */
2908       if (gdbarch_decr_pc_after_break (gdbarch))
2909         regcache_write_pc (regcache, pc);
2910
2911       return 1;
2912     }
2913   return 0;
2914 }
2915
2916 static int
2917 cancel_breakpoints_callback (struct lwp_info *lp, void *data)
2918 {
2919   struct lwp_info *event_lp = data;
2920
2921   /* Leave the LWP that has been elected to receive a SIGTRAP alone.  */
2922   if (lp == event_lp)
2923     return 0;
2924
2925   /* If a LWP other than the LWP that we're reporting an event for has
2926      hit a GDB breakpoint (as opposed to some random trap signal),
2927      then just arrange for it to hit it again later.  We don't keep
2928      the SIGTRAP status and don't forward the SIGTRAP signal to the
2929      LWP.  We will handle the current event, eventually we will resume
2930      all LWPs, and this one will get its breakpoint trap again.
2931
2932      If we do not do this, then we run the risk that the user will
2933      delete or disable the breakpoint, but the LWP will have already
2934      tripped on it.  */
2935
2936   if (linux_nat_lp_status_is_event (lp)
2937       && cancel_breakpoint (lp))
2938     /* Throw away the SIGTRAP.  */
2939     lp->status = 0;
2940
2941   return 0;
2942 }
2943
2944 /* Select one LWP out of those that have events pending.  */
2945
2946 static void
2947 select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
2948 {
2949   int num_events = 0;
2950   int random_selector;
2951   struct lwp_info *event_lp;
2952
2953   /* Record the wait status for the original LWP.  */
2954   (*orig_lp)->status = *status;
2955
2956   /* Give preference to any LWP that is being single-stepped.  */
2957   event_lp = iterate_over_lwps (filter,
2958                                 select_singlestep_lwp_callback, NULL);
2959   if (event_lp != NULL)
2960     {
2961       if (debug_linux_nat)
2962         fprintf_unfiltered (gdb_stdlog,
2963                             "SEL: Select single-step %s\n",
2964                             target_pid_to_str (event_lp->ptid));
2965     }
2966   else
2967     {
2968       /* No single-stepping LWP.  Select one at random, out of those
2969          which have had SIGTRAP events.  */
2970
2971       /* First see how many SIGTRAP events we have.  */
2972       iterate_over_lwps (filter, count_events_callback, &num_events);
2973
2974       /* Now randomly pick a LWP out of those that have had a SIGTRAP.  */
2975       random_selector = (int)
2976         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2977
2978       if (debug_linux_nat && num_events > 1)
2979         fprintf_unfiltered (gdb_stdlog,
2980                             "SEL: Found %d SIGTRAP events, selecting #%d\n",
2981                             num_events, random_selector);
2982
2983       event_lp = iterate_over_lwps (filter,
2984                                     select_event_lwp_callback,
2985                                     &random_selector);
2986     }
2987
2988   if (event_lp != NULL)
2989     {
2990       /* Switch the event LWP.  */
2991       *orig_lp = event_lp;
2992       *status = event_lp->status;
2993     }
2994
2995   /* Flush the wait status for the event LWP.  */
2996   (*orig_lp)->status = 0;
2997 }
2998
2999 /* Return non-zero if LP has been resumed.  */
3000
3001 static int
3002 resumed_callback (struct lwp_info *lp, void *data)
3003 {
3004   return lp->resumed;
3005 }
3006
3007 /* Stop an active thread, verify it still exists, then resume it.  */
3008
3009 static int
3010 stop_and_resume_callback (struct lwp_info *lp, void *data)
3011 {
3012   struct lwp_info *ptr;
3013
3014   if (!lp->stopped && !lp->signalled)
3015     {
3016       stop_callback (lp, NULL);
3017       stop_wait_callback (lp, NULL);
3018       /* Resume if the lwp still exists.  */
3019       for (ptr = lwp_list; ptr; ptr = ptr->next)
3020         if (lp == ptr)
3021           {
3022             resume_callback (lp, NULL);
3023             resume_set_callback (lp, NULL);
3024           }
3025     }
3026   return 0;
3027 }
3028
3029 /* Check if we should go on and pass this event to common code.
3030    Return the affected lwp if we are, or NULL otherwise.  */
3031 static struct lwp_info *
3032 linux_nat_filter_event (int lwpid, int status, int options)
3033 {
3034   struct lwp_info *lp;
3035
3036   lp = find_lwp_pid (pid_to_ptid (lwpid));
3037
3038   /* Check for stop events reported by a process we didn't already
3039      know about - anything not already in our LWP list.
3040
3041      If we're expecting to receive stopped processes after
3042      fork, vfork, and clone events, then we'll just add the
3043      new one to our list and go back to waiting for the event
3044      to be reported - the stopped process might be returned
3045      from waitpid before or after the event is.  */
3046   if (WIFSTOPPED (status) && !lp)
3047     {
3048       linux_record_stopped_pid (lwpid, status);
3049       return NULL;
3050     }
3051
3052   /* Make sure we don't report an event for the exit of an LWP not in
3053      our list, i.e. not part of the current process.  This can happen
3054      if we detach from a program we originally forked and then it
3055      exits.  */
3056   if (!WIFSTOPPED (status) && !lp)
3057     return NULL;
3058
3059   /* NOTE drow/2003-06-17: This code seems to be meant for debugging
3060      CLONE_PTRACE processes which do not use the thread library -
3061      otherwise we wouldn't find the new LWP this way.  That doesn't
3062      currently work, and the following code is currently unreachable
3063      due to the two blocks above.  If it's fixed some day, this code
3064      should be broken out into a function so that we can also pick up
3065      LWPs from the new interface.  */
3066   if (!lp)
3067     {
3068       lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
3069       if (options & __WCLONE)
3070         lp->cloned = 1;
3071
3072       gdb_assert (WIFSTOPPED (status)
3073                   && WSTOPSIG (status) == SIGSTOP);
3074       lp->signalled = 1;
3075
3076       if (!in_thread_list (inferior_ptid))
3077         {
3078           inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
3079                                      GET_PID (inferior_ptid));
3080           add_thread (inferior_ptid);
3081         }
3082
3083       add_thread (lp->ptid);
3084     }
3085
3086   /* Handle GNU/Linux's syscall SIGTRAPs.  */
3087   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
3088     {
3089       /* No longer need the sysgood bit.  The ptrace event ends up
3090          recorded in lp->waitstatus if we care for it.  We can carry
3091          on handling the event like a regular SIGTRAP from here
3092          on.  */
3093       status = W_STOPCODE (SIGTRAP);
3094       if (linux_handle_syscall_trap (lp, 0))
3095         return NULL;
3096     }
3097
3098   /* Handle GNU/Linux's extended waitstatus for trace events.  */
3099   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
3100     {
3101       if (debug_linux_nat)
3102         fprintf_unfiltered (gdb_stdlog,
3103                             "LLW: Handling extended status 0x%06x\n",
3104                             status);
3105       if (linux_handle_extended_wait (lp, status, 0))
3106         return NULL;
3107     }
3108
3109   if (linux_nat_status_is_event (status))
3110     {
3111       /* Save the trap's siginfo in case we need it later.  */
3112       save_siginfo (lp);
3113
3114       save_sigtrap (lp);
3115     }
3116
3117   /* Check if the thread has exited.  */
3118   if ((WIFEXITED (status) || WIFSIGNALED (status))
3119       && num_lwps (GET_PID (lp->ptid)) > 1)
3120     {
3121       /* If this is the main thread, we must stop all threads and verify
3122          if they are still alive.  This is because in the nptl thread model
3123          on Linux 2.4, there is no signal issued for exiting LWPs
3124          other than the main thread.  We only get the main thread exit
3125          signal once all child threads have already exited.  If we
3126          stop all the threads and use the stop_wait_callback to check
3127          if they have exited we can determine whether this signal
3128          should be ignored or whether it means the end of the debugged
3129          application, regardless of which threading model is being
3130          used.  */
3131       if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
3132         {
3133           lp->stopped = 1;
3134           iterate_over_lwps (pid_to_ptid (GET_PID (lp->ptid)),
3135                              stop_and_resume_callback, NULL);
3136         }
3137
3138       if (debug_linux_nat)
3139         fprintf_unfiltered (gdb_stdlog,
3140                             "LLW: %s exited.\n",
3141                             target_pid_to_str (lp->ptid));
3142
3143       if (num_lwps (GET_PID (lp->ptid)) > 1)
3144        {
3145          /* If there is at least one more LWP, then the exit signal
3146             was not the end of the debugged application and should be
3147             ignored.  */
3148          exit_lwp (lp);
3149          return NULL;
3150        }
3151     }
3152
3153   /* Check if the current LWP has previously exited.  In the nptl
3154      thread model, LWPs other than the main thread do not issue
3155      signals when they exit so we must check whenever the thread has
3156      stopped.  A similar check is made in stop_wait_callback().  */
3157   if (num_lwps (GET_PID (lp->ptid)) > 1 && !linux_thread_alive (lp->ptid))
3158     {
3159       ptid_t ptid = pid_to_ptid (GET_PID (lp->ptid));
3160
3161       if (debug_linux_nat)
3162         fprintf_unfiltered (gdb_stdlog,
3163                             "LLW: %s exited.\n",
3164                             target_pid_to_str (lp->ptid));
3165
3166       exit_lwp (lp);
3167
3168       /* Make sure there is at least one thread running.  */
3169       gdb_assert (iterate_over_lwps (ptid, running_callback, NULL));
3170
3171       /* Discard the event.  */
3172       return NULL;
3173     }
3174
3175   /* Make sure we don't report a SIGSTOP that we sent ourselves in
3176      an attempt to stop an LWP.  */
3177   if (lp->signalled
3178       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
3179     {
3180       if (debug_linux_nat)
3181         fprintf_unfiltered (gdb_stdlog,
3182                             "LLW: Delayed SIGSTOP caught for %s.\n",
3183                             target_pid_to_str (lp->ptid));
3184
3185       /* This is a delayed SIGSTOP.  */
3186       lp->signalled = 0;
3187
3188       registers_changed ();
3189
3190       linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
3191                             lp->step, TARGET_SIGNAL_0);
3192       if (debug_linux_nat)
3193         fprintf_unfiltered (gdb_stdlog,
3194                             "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
3195                             lp->step ?
3196                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3197                             target_pid_to_str (lp->ptid));
3198
3199       lp->stopped = 0;
3200       gdb_assert (lp->resumed);
3201
3202       /* Discard the event.  */
3203       return NULL;
3204     }
3205
3206   /* Make sure we don't report a SIGINT that we have already displayed
3207      for another thread.  */
3208   if (lp->ignore_sigint
3209       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT)
3210     {
3211       if (debug_linux_nat)
3212         fprintf_unfiltered (gdb_stdlog,
3213                             "LLW: Delayed SIGINT caught for %s.\n",
3214                             target_pid_to_str (lp->ptid));
3215
3216       /* This is a delayed SIGINT.  */
3217       lp->ignore_sigint = 0;
3218
3219       registers_changed ();
3220       linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
3221                             lp->step, TARGET_SIGNAL_0);
3222       if (debug_linux_nat)
3223         fprintf_unfiltered (gdb_stdlog,
3224                             "LLW: %s %s, 0, 0 (discard SIGINT)\n",
3225                             lp->step ?
3226                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3227                             target_pid_to_str (lp->ptid));
3228
3229       lp->stopped = 0;
3230       gdb_assert (lp->resumed);
3231
3232       /* Discard the event.  */
3233       return NULL;
3234     }
3235
3236   /* An interesting event.  */
3237   gdb_assert (lp);
3238   lp->status = status;
3239   return lp;
3240 }
3241
3242 static ptid_t
3243 linux_nat_wait_1 (struct target_ops *ops,
3244                   ptid_t ptid, struct target_waitstatus *ourstatus,
3245                   int target_options)
3246 {
3247   static sigset_t prev_mask;
3248   struct lwp_info *lp = NULL;
3249   int options = 0;
3250   int status = 0;
3251   pid_t pid;
3252
3253   if (debug_linux_nat)
3254     fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
3255
3256   /* The first time we get here after starting a new inferior, we may
3257      not have added it to the LWP list yet - this is the earliest
3258      moment at which we know its PID.  */
3259   if (ptid_is_pid (inferior_ptid))
3260     {
3261       /* Upgrade the main thread's ptid.  */
3262       thread_change_ptid (inferior_ptid,
3263                           BUILD_LWP (GET_PID (inferior_ptid),
3264                                      GET_PID (inferior_ptid)));
3265
3266       lp = add_lwp (inferior_ptid);
3267       lp->resumed = 1;
3268     }
3269
3270   /* Make sure SIGCHLD is blocked.  */
3271   block_child_signals (&prev_mask);
3272
3273   if (ptid_equal (ptid, minus_one_ptid))
3274     pid = -1;
3275   else if (ptid_is_pid (ptid))
3276     /* A request to wait for a specific tgid.  This is not possible
3277        with waitpid, so instead, we wait for any child, and leave
3278        children we're not interested in right now with a pending
3279        status to report later.  */
3280     pid = -1;
3281   else
3282     pid = GET_LWP (ptid);
3283
3284 retry:
3285   lp = NULL;
3286   status = 0;
3287
3288   /* Make sure that of those LWPs we want to get an event from, there
3289      is at least one LWP that has been resumed.  If there's none, just
3290      bail out.  The core may just be flushing asynchronously all
3291      events.  */
3292   if (iterate_over_lwps (ptid, resumed_callback, NULL) == NULL)
3293     {
3294       ourstatus->kind = TARGET_WAITKIND_IGNORE;
3295
3296       if (debug_linux_nat)
3297         fprintf_unfiltered (gdb_stdlog, "LLW: exit (no resumed LWP)\n");
3298
3299       restore_child_signals_mask (&prev_mask);
3300       return minus_one_ptid;
3301     }
3302
3303   /* First check if there is a LWP with a wait status pending.  */
3304   if (pid == -1)
3305     {
3306       /* Any LWP that's been resumed will do.  */
3307       lp = iterate_over_lwps (ptid, status_callback, NULL);
3308       if (lp)
3309         {
3310           if (debug_linux_nat && lp->status)
3311             fprintf_unfiltered (gdb_stdlog,
3312                                 "LLW: Using pending wait status %s for %s.\n",
3313                                 status_to_str (lp->status),
3314                                 target_pid_to_str (lp->ptid));
3315         }
3316
3317       /* But if we don't find one, we'll have to wait, and check both
3318          cloned and uncloned processes.  We start with the cloned
3319          processes.  */
3320       options = __WCLONE | WNOHANG;
3321     }
3322   else if (is_lwp (ptid))
3323     {
3324       if (debug_linux_nat)
3325         fprintf_unfiltered (gdb_stdlog,
3326                             "LLW: Waiting for specific LWP %s.\n",
3327                             target_pid_to_str (ptid));
3328
3329       /* We have a specific LWP to check.  */
3330       lp = find_lwp_pid (ptid);
3331       gdb_assert (lp);
3332
3333       if (debug_linux_nat && lp->status)
3334         fprintf_unfiltered (gdb_stdlog,
3335                             "LLW: Using pending wait status %s for %s.\n",
3336                             status_to_str (lp->status),
3337                             target_pid_to_str (lp->ptid));
3338
3339       /* If we have to wait, take into account whether PID is a cloned
3340          process or not.  And we have to convert it to something that
3341          the layer beneath us can understand.  */
3342       options = lp->cloned ? __WCLONE : 0;
3343       pid = GET_LWP (ptid);
3344
3345       /* We check for lp->waitstatus in addition to lp->status,
3346          because we can have pending process exits recorded in
3347          lp->status and W_EXITCODE(0,0) == 0.  We should probably have
3348          an additional lp->status_p flag.  */
3349       if (lp->status == 0 && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
3350         lp = NULL;
3351     }
3352
3353   if (lp && lp->signalled)
3354     {
3355       /* A pending SIGSTOP may interfere with the normal stream of
3356          events.  In a typical case where interference is a problem,
3357          we have a SIGSTOP signal pending for LWP A while
3358          single-stepping it, encounter an event in LWP B, and take the
3359          pending SIGSTOP while trying to stop LWP A.  After processing
3360          the event in LWP B, LWP A is continued, and we'll never see
3361          the SIGTRAP associated with the last time we were
3362          single-stepping LWP A.  */
3363
3364       /* Resume the thread.  It should halt immediately returning the
3365          pending SIGSTOP.  */
3366       registers_changed ();
3367       linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
3368                             lp->step, TARGET_SIGNAL_0);
3369       if (debug_linux_nat)
3370         fprintf_unfiltered (gdb_stdlog,
3371                             "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
3372                             lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3373                             target_pid_to_str (lp->ptid));
3374       lp->stopped = 0;
3375       gdb_assert (lp->resumed);
3376
3377       /* Catch the pending SIGSTOP.  */
3378       status = lp->status;
3379       lp->status = 0;
3380
3381       stop_wait_callback (lp, NULL);
3382
3383       /* If the lp->status field isn't empty, we caught another signal
3384          while flushing the SIGSTOP.  Return it back to the event
3385          queue of the LWP, as we already have an event to handle.  */
3386       if (lp->status)
3387         {
3388           if (debug_linux_nat)
3389             fprintf_unfiltered (gdb_stdlog,
3390                                 "LLW: kill %s, %s\n",
3391                                 target_pid_to_str (lp->ptid),
3392                                 status_to_str (lp->status));
3393           kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
3394         }
3395
3396       lp->status = status;
3397     }
3398
3399   if (!target_can_async_p ())
3400     {
3401       /* Causes SIGINT to be passed on to the attached process.  */
3402       set_sigint_trap ();
3403     }
3404
3405   /* Translate generic target_wait options into waitpid options.  */
3406   if (target_options & TARGET_WNOHANG)
3407     options |= WNOHANG;
3408
3409   while (lp == NULL)
3410     {
3411       pid_t lwpid;
3412
3413       lwpid = my_waitpid (pid, &status, options);
3414
3415       if (lwpid > 0)
3416         {
3417           gdb_assert (pid == -1 || lwpid == pid);
3418
3419           if (debug_linux_nat)
3420             {
3421               fprintf_unfiltered (gdb_stdlog,
3422                                   "LLW: waitpid %ld received %s\n",
3423                                   (long) lwpid, status_to_str (status));
3424             }
3425
3426           lp = linux_nat_filter_event (lwpid, status, options);
3427
3428           /* STATUS is now no longer valid, use LP->STATUS instead.  */
3429           status = 0;
3430
3431           if (lp
3432               && ptid_is_pid (ptid)
3433               && ptid_get_pid (lp->ptid) != ptid_get_pid (ptid))
3434             {
3435               gdb_assert (lp->resumed);
3436
3437               if (debug_linux_nat)
3438                 fprintf (stderr,
3439                          "LWP %ld got an event %06x, leaving pending.\n",
3440                          ptid_get_lwp (lp->ptid), lp->status);
3441
3442               if (WIFSTOPPED (lp->status))
3443                 {
3444                   if (WSTOPSIG (lp->status) != SIGSTOP)
3445                     {
3446                       /* Cancel breakpoint hits.  The breakpoint may
3447                          be removed before we fetch events from this
3448                          process to report to the core.  It is best
3449                          not to assume the moribund breakpoints
3450                          heuristic always handles these cases --- it
3451                          could be too many events go through to the
3452                          core before this one is handled.  All-stop
3453                          always cancels breakpoint hits in all
3454                          threads.  */
3455                       if (non_stop
3456                           && linux_nat_lp_status_is_event (lp)
3457                           && cancel_breakpoint (lp))
3458                         {
3459                           /* Throw away the SIGTRAP.  */
3460                           lp->status = 0;
3461
3462                           if (debug_linux_nat)
3463                             fprintf (stderr,
3464                                      "LLW: LWP %ld hit a breakpoint while"
3465                                      " waiting for another process;"
3466                                      " cancelled it\n",
3467                                      ptid_get_lwp (lp->ptid));
3468                         }
3469                       lp->stopped = 1;
3470                     }
3471                   else
3472                     {
3473                       lp->stopped = 1;
3474                       lp->signalled = 0;
3475                     }
3476                 }
3477               else if (WIFEXITED (lp->status) || WIFSIGNALED (lp->status))
3478                 {
3479                   if (debug_linux_nat)
3480                     fprintf (stderr,
3481                              "Process %ld exited while stopping LWPs\n",
3482                              ptid_get_lwp (lp->ptid));
3483
3484                   /* This was the last lwp in the process.  Since
3485                      events are serialized to GDB core, and we can't
3486                      report this one right now, but GDB core and the
3487                      other target layers will want to be notified
3488                      about the exit code/signal, leave the status
3489                      pending for the next time we're able to report
3490                      it.  */
3491
3492                   /* Prevent trying to stop this thread again.  We'll
3493                      never try to resume it because it has a pending
3494                      status.  */
3495                   lp->stopped = 1;
3496
3497                   /* Dead LWP's aren't expected to reported a pending
3498                      sigstop.  */
3499                   lp->signalled = 0;
3500
3501                   /* Store the pending event in the waitstatus as
3502                      well, because W_EXITCODE(0,0) == 0.  */
3503                   store_waitstatus (&lp->waitstatus, lp->status);
3504                 }
3505
3506               /* Keep looking.  */
3507               lp = NULL;
3508               continue;
3509             }
3510
3511           if (lp)
3512             break;
3513           else
3514             {
3515               if (pid == -1)
3516                 {
3517                   /* waitpid did return something.  Restart over.  */
3518                   options |= __WCLONE;
3519                 }
3520               continue;
3521             }
3522         }
3523
3524       if (pid == -1)
3525         {
3526           /* Alternate between checking cloned and uncloned processes.  */
3527           options ^= __WCLONE;
3528
3529           /* And every time we have checked both:
3530              In async mode, return to event loop;
3531              In sync mode, suspend waiting for a SIGCHLD signal.  */
3532           if (options & __WCLONE)
3533             {
3534               if (target_options & TARGET_WNOHANG)
3535                 {
3536                   /* No interesting event.  */
3537                   ourstatus->kind = TARGET_WAITKIND_IGNORE;
3538
3539                   if (debug_linux_nat)
3540                     fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3541
3542                   restore_child_signals_mask (&prev_mask);
3543                   return minus_one_ptid;
3544                 }
3545
3546               sigsuspend (&suspend_mask);
3547             }
3548         }
3549       else if (target_options & TARGET_WNOHANG)
3550         {
3551           /* No interesting event for PID yet.  */
3552           ourstatus->kind = TARGET_WAITKIND_IGNORE;
3553
3554           if (debug_linux_nat)
3555             fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3556
3557           restore_child_signals_mask (&prev_mask);
3558           return minus_one_ptid;
3559         }
3560
3561       /* We shouldn't end up here unless we want to try again.  */
3562       gdb_assert (lp == NULL);
3563     }
3564
3565   if (!target_can_async_p ())
3566     clear_sigint_trap ();
3567
3568   gdb_assert (lp);
3569
3570   status = lp->status;
3571   lp->status = 0;
3572
3573   /* Don't report signals that GDB isn't interested in, such as
3574      signals that are neither printed nor stopped upon.  Stopping all
3575      threads can be a bit time-consuming so if we want decent
3576      performance with heavily multi-threaded programs, especially when
3577      they're using a high frequency timer, we'd better avoid it if we
3578      can.  */
3579
3580   if (WIFSTOPPED (status))
3581     {
3582       enum target_signal signo = target_signal_from_host (WSTOPSIG (status));
3583
3584       /* When using hardware single-step, we need to report every signal.
3585          Otherwise, signals in pass_mask may be short-circuited.  */
3586       if (!lp->step
3587           && WSTOPSIG (status) && sigismember (&pass_mask, WSTOPSIG (status)))
3588         {
3589           /* FIMXE: kettenis/2001-06-06: Should we resume all threads
3590              here?  It is not clear we should.  GDB may not expect
3591              other threads to run.  On the other hand, not resuming
3592              newly attached threads may cause an unwanted delay in
3593              getting them running.  */
3594           registers_changed ();
3595           linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
3596                                 lp->step, signo);
3597           if (debug_linux_nat)
3598             fprintf_unfiltered (gdb_stdlog,
3599                                 "LLW: %s %s, %s (preempt 'handle')\n",
3600                                 lp->step ?
3601                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3602                                 target_pid_to_str (lp->ptid),
3603                                 (signo != TARGET_SIGNAL_0
3604                                  ? strsignal (target_signal_to_host (signo))
3605                                  : "0"));
3606           lp->stopped = 0;
3607           goto retry;
3608         }
3609
3610       if (!non_stop)
3611         {
3612           /* Only do the below in all-stop, as we currently use SIGINT
3613              to implement target_stop (see linux_nat_stop) in
3614              non-stop.  */
3615           if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
3616             {
3617               /* If ^C/BREAK is typed at the tty/console, SIGINT gets
3618                  forwarded to the entire process group, that is, all LWPs
3619                  will receive it - unless they're using CLONE_THREAD to
3620                  share signals.  Since we only want to report it once, we
3621                  mark it as ignored for all LWPs except this one.  */
3622               iterate_over_lwps (pid_to_ptid (ptid_get_pid (ptid)),
3623                                               set_ignore_sigint, NULL);
3624               lp->ignore_sigint = 0;
3625             }
3626           else
3627             maybe_clear_ignore_sigint (lp);
3628         }
3629     }
3630
3631   /* This LWP is stopped now.  */
3632   lp->stopped = 1;
3633
3634   if (debug_linux_nat)
3635     fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
3636                         status_to_str (status), target_pid_to_str (lp->ptid));
3637
3638   if (!non_stop)
3639     {
3640       /* Now stop all other LWP's ...  */
3641       iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
3642
3643       /* ... and wait until all of them have reported back that
3644          they're no longer running.  */
3645       iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
3646
3647       /* If we're not waiting for a specific LWP, choose an event LWP
3648          from among those that have had events.  Giving equal priority
3649          to all LWPs that have had events helps prevent
3650          starvation.  */
3651       if (pid == -1)
3652         select_event_lwp (ptid, &lp, &status);
3653
3654       /* Now that we've selected our final event LWP, cancel any
3655          breakpoints in other LWPs that have hit a GDB breakpoint.
3656          See the comment in cancel_breakpoints_callback to find out
3657          why.  */
3658       iterate_over_lwps (minus_one_ptid, cancel_breakpoints_callback, lp);
3659
3660       /* In all-stop, from the core's perspective, all LWPs are now
3661          stopped until a new resume action is sent over.  */
3662       iterate_over_lwps (minus_one_ptid, resume_clear_callback, NULL);
3663     }
3664   else
3665     lp->resumed = 0;
3666
3667   if (linux_nat_status_is_event (status))
3668     {
3669       if (debug_linux_nat)
3670         fprintf_unfiltered (gdb_stdlog,
3671                             "LLW: trap ptid is %s.\n",
3672                             target_pid_to_str (lp->ptid));
3673     }
3674
3675   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
3676     {
3677       *ourstatus = lp->waitstatus;
3678       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
3679     }
3680   else
3681     store_waitstatus (ourstatus, status);
3682
3683   if (debug_linux_nat)
3684     fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
3685
3686   restore_child_signals_mask (&prev_mask);
3687
3688   if (ourstatus->kind == TARGET_WAITKIND_EXITED
3689       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
3690     lp->core = -1;
3691   else
3692     lp->core = linux_nat_core_of_thread_1 (lp->ptid);
3693
3694   return lp->ptid;
3695 }
3696
3697 /* Resume LWPs that are currently stopped without any pending status
3698    to report, but are resumed from the core's perspective.  */
3699
3700 static int
3701 resume_stopped_resumed_lwps (struct lwp_info *lp, void *data)
3702 {
3703   ptid_t *wait_ptid_p = data;
3704
3705   if (lp->stopped
3706       && lp->resumed
3707       && lp->status == 0
3708       && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
3709     {
3710       gdb_assert (is_executing (lp->ptid));
3711
3712       /* Don't bother if there's a breakpoint at PC that we'd hit
3713          immediately, and we're not waiting for this LWP.  */
3714       if (!ptid_match (lp->ptid, *wait_ptid_p))
3715         {
3716           struct regcache *regcache = get_thread_regcache (lp->ptid);
3717           CORE_ADDR pc = regcache_read_pc (regcache);
3718
3719           if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
3720             return 0;
3721         }
3722
3723       if (debug_linux_nat)
3724         fprintf_unfiltered (gdb_stdlog,
3725                             "RSRL: resuming stopped-resumed LWP %s\n",
3726                             target_pid_to_str (lp->ptid));
3727
3728       linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
3729                             lp->step, TARGET_SIGNAL_0);
3730       lp->stopped = 0;
3731       memset (&lp->siginfo, 0, sizeof (lp->siginfo));
3732       lp->stopped_by_watchpoint = 0;
3733     }
3734
3735   return 0;
3736 }
3737
3738 static ptid_t
3739 linux_nat_wait (struct target_ops *ops,
3740                 ptid_t ptid, struct target_waitstatus *ourstatus,
3741                 int target_options)
3742 {
3743   ptid_t event_ptid;
3744
3745   if (debug_linux_nat)
3746     fprintf_unfiltered (gdb_stdlog,
3747                         "linux_nat_wait: [%s]\n", target_pid_to_str (ptid));
3748
3749   /* Flush the async file first.  */
3750   if (target_can_async_p ())
3751     async_file_flush ();
3752
3753   /* Resume LWPs that are currently stopped without any pending status
3754      to report, but are resumed from the core's perspective.  LWPs get
3755      in this state if we find them stopping at a time we're not
3756      interested in reporting the event (target_wait on a
3757      specific_process, for example, see linux_nat_wait_1), and
3758      meanwhile the event became uninteresting.  Don't bother resuming
3759      LWPs we're not going to wait for if they'd stop immediately.  */
3760   if (non_stop)
3761     iterate_over_lwps (minus_one_ptid, resume_stopped_resumed_lwps, &ptid);
3762
3763   event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus, target_options);
3764
3765   /* If we requested any event, and something came out, assume there
3766      may be more.  If we requested a specific lwp or process, also
3767      assume there may be more.  */
3768   if (target_can_async_p ()
3769       && (ourstatus->kind != TARGET_WAITKIND_IGNORE
3770           || !ptid_equal (ptid, minus_one_ptid)))
3771     async_file_mark ();
3772
3773   /* Get ready for the next event.  */
3774   if (target_can_async_p ())
3775     target_async (inferior_event_handler, 0);
3776
3777   return event_ptid;
3778 }
3779
3780 static int
3781 kill_callback (struct lwp_info *lp, void *data)
3782 {
3783   /* PTRACE_KILL may resume the inferior.  Send SIGKILL first.  */
3784
3785   errno = 0;
3786   kill (GET_LWP (lp->ptid), SIGKILL);
3787   if (debug_linux_nat)
3788     fprintf_unfiltered (gdb_stdlog,
3789                         "KC:  kill (SIGKILL) %s, 0, 0 (%s)\n",
3790                         target_pid_to_str (lp->ptid),
3791                         errno ? safe_strerror (errno) : "OK");
3792
3793   /* Some kernels ignore even SIGKILL for processes under ptrace.  */
3794
3795   errno = 0;
3796   ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
3797   if (debug_linux_nat)
3798     fprintf_unfiltered (gdb_stdlog,
3799                         "KC:  PTRACE_KILL %s, 0, 0 (%s)\n",
3800                         target_pid_to_str (lp->ptid),
3801                         errno ? safe_strerror (errno) : "OK");
3802
3803   return 0;
3804 }
3805
3806 static int
3807 kill_wait_callback (struct lwp_info *lp, void *data)
3808 {
3809   pid_t pid;
3810
3811   /* We must make sure that there are no pending events (delayed
3812      SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
3813      program doesn't interfere with any following debugging session.  */
3814
3815   /* For cloned processes we must check both with __WCLONE and
3816      without, since the exit status of a cloned process isn't reported
3817      with __WCLONE.  */
3818   if (lp->cloned)
3819     {
3820       do
3821         {
3822           pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
3823           if (pid != (pid_t) -1)
3824             {
3825               if (debug_linux_nat)
3826                 fprintf_unfiltered (gdb_stdlog,
3827                                     "KWC: wait %s received unknown.\n",
3828                                     target_pid_to_str (lp->ptid));
3829               /* The Linux kernel sometimes fails to kill a thread
3830                  completely after PTRACE_KILL; that goes from the stop
3831                  point in do_fork out to the one in
3832                  get_signal_to_deliever and waits again.  So kill it
3833                  again.  */
3834               kill_callback (lp, NULL);
3835             }
3836         }
3837       while (pid == GET_LWP (lp->ptid));
3838
3839       gdb_assert (pid == -1 && errno == ECHILD);
3840     }
3841
3842   do
3843     {
3844       pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
3845       if (pid != (pid_t) -1)
3846         {
3847           if (debug_linux_nat)
3848             fprintf_unfiltered (gdb_stdlog,
3849                                 "KWC: wait %s received unk.\n",
3850                                 target_pid_to_str (lp->ptid));
3851           /* See the call to kill_callback above.  */
3852           kill_callback (lp, NULL);
3853         }
3854     }
3855   while (pid == GET_LWP (lp->ptid));
3856
3857   gdb_assert (pid == -1 && errno == ECHILD);
3858   return 0;
3859 }
3860
3861 static void
3862 linux_nat_kill (struct target_ops *ops)
3863 {
3864   struct target_waitstatus last;
3865   ptid_t last_ptid;
3866   int status;
3867
3868   /* If we're stopped while forking and we haven't followed yet,
3869      kill the other task.  We need to do this first because the
3870      parent will be sleeping if this is a vfork.  */
3871
3872   get_last_target_status (&last_ptid, &last);
3873
3874   if (last.kind == TARGET_WAITKIND_FORKED
3875       || last.kind == TARGET_WAITKIND_VFORKED)
3876     {
3877       ptrace (PT_KILL, PIDGET (last.value.related_pid), 0, 0);
3878       wait (&status);
3879     }
3880
3881   if (forks_exist_p ())
3882     linux_fork_killall ();
3883   else
3884     {
3885       ptid_t ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
3886
3887       /* Stop all threads before killing them, since ptrace requires
3888          that the thread is stopped to sucessfully PTRACE_KILL.  */
3889       iterate_over_lwps (ptid, stop_callback, NULL);
3890       /* ... and wait until all of them have reported back that
3891          they're no longer running.  */
3892       iterate_over_lwps (ptid, stop_wait_callback, NULL);
3893
3894       /* Kill all LWP's ...  */
3895       iterate_over_lwps (ptid, kill_callback, NULL);
3896
3897       /* ... and wait until we've flushed all events.  */
3898       iterate_over_lwps (ptid, kill_wait_callback, NULL);
3899     }
3900
3901   target_mourn_inferior ();
3902 }
3903
3904 static void
3905 linux_nat_mourn_inferior (struct target_ops *ops)
3906 {
3907   purge_lwp_list (ptid_get_pid (inferior_ptid));
3908
3909   if (! forks_exist_p ())
3910     /* Normal case, no other forks available.  */
3911     linux_ops->to_mourn_inferior (ops);
3912   else
3913     /* Multi-fork case.  The current inferior_ptid has exited, but
3914        there are other viable forks to debug.  Delete the exiting
3915        one and context-switch to the first available.  */
3916     linux_fork_mourn_inferior ();
3917 }
3918
3919 /* Convert a native/host siginfo object, into/from the siginfo in the
3920    layout of the inferiors' architecture.  */
3921
3922 static void
3923 siginfo_fixup (struct siginfo *siginfo, gdb_byte *inf_siginfo, int direction)
3924 {
3925   int done = 0;
3926
3927   if (linux_nat_siginfo_fixup != NULL)
3928     done = linux_nat_siginfo_fixup (siginfo, inf_siginfo, direction);
3929
3930   /* If there was no callback, or the callback didn't do anything,
3931      then just do a straight memcpy.  */
3932   if (!done)
3933     {
3934       if (direction == 1)
3935         memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
3936       else
3937         memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
3938     }
3939 }
3940
3941 static LONGEST
3942 linux_xfer_siginfo (struct target_ops *ops, enum target_object object,
3943                     const char *annex, gdb_byte *readbuf,
3944                     const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3945 {
3946   int pid;
3947   struct siginfo siginfo;
3948   gdb_byte inf_siginfo[sizeof (struct siginfo)];
3949
3950   gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
3951   gdb_assert (readbuf || writebuf);
3952
3953   pid = GET_LWP (inferior_ptid);
3954   if (pid == 0)
3955     pid = GET_PID (inferior_ptid);
3956
3957   if (offset > sizeof (siginfo))
3958     return -1;
3959
3960   errno = 0;
3961   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3962   if (errno != 0)
3963     return -1;
3964
3965   /* When GDB is built as a 64-bit application, ptrace writes into
3966      SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
3967      inferior with a 64-bit GDB should look the same as debugging it
3968      with a 32-bit GDB, we need to convert it.  GDB core always sees
3969      the converted layout, so any read/write will have to be done
3970      post-conversion.  */
3971   siginfo_fixup (&siginfo, inf_siginfo, 0);
3972
3973   if (offset + len > sizeof (siginfo))
3974     len = sizeof (siginfo) - offset;
3975
3976   if (readbuf != NULL)
3977     memcpy (readbuf, inf_siginfo + offset, len);
3978   else
3979     {
3980       memcpy (inf_siginfo + offset, writebuf, len);
3981
3982       /* Convert back to ptrace layout before flushing it out.  */
3983       siginfo_fixup (&siginfo, inf_siginfo, 1);
3984
3985       errno = 0;
3986       ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3987       if (errno != 0)
3988         return -1;
3989     }
3990
3991   return len;
3992 }
3993
3994 static LONGEST
3995 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
3996                         const char *annex, gdb_byte *readbuf,
3997                         const gdb_byte *writebuf,
3998                         ULONGEST offset, LONGEST len)
3999 {
4000   struct cleanup *old_chain;
4001   LONGEST xfer;
4002
4003   if (object == TARGET_OBJECT_SIGNAL_INFO)
4004     return linux_xfer_siginfo (ops, object, annex, readbuf, writebuf,
4005                                offset, len);
4006
4007   /* The target is connected but no live inferior is selected.  Pass
4008      this request down to a lower stratum (e.g., the executable
4009      file).  */
4010   if (object == TARGET_OBJECT_MEMORY && ptid_equal (inferior_ptid, null_ptid))
4011     return 0;
4012
4013   old_chain = save_inferior_ptid ();
4014
4015   if (is_lwp (inferior_ptid))
4016     inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
4017
4018   xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
4019                                      offset, len);
4020
4021   do_cleanups (old_chain);
4022   return xfer;
4023 }
4024
4025 static int
4026 linux_thread_alive (ptid_t ptid)
4027 {
4028   int err, tmp_errno;
4029
4030   gdb_assert (is_lwp (ptid));
4031
4032   /* Send signal 0 instead of anything ptrace, because ptracing a
4033      running thread errors out claiming that the thread doesn't
4034      exist.  */
4035   err = kill_lwp (GET_LWP (ptid), 0);
4036   tmp_errno = errno;
4037   if (debug_linux_nat)
4038     fprintf_unfiltered (gdb_stdlog,
4039                         "LLTA: KILL(SIG0) %s (%s)\n",
4040                         target_pid_to_str (ptid),
4041                         err ? safe_strerror (tmp_errno) : "OK");
4042
4043   if (err != 0)
4044     return 0;
4045
4046   return 1;
4047 }
4048
4049 static int
4050 linux_nat_thread_alive (struct target_ops *ops, ptid_t ptid)
4051 {
4052   return linux_thread_alive (ptid);
4053 }
4054
4055 static char *
4056 linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
4057 {
4058   static char buf[64];
4059
4060   if (is_lwp (ptid)
4061       && (GET_PID (ptid) != GET_LWP (ptid)
4062           || num_lwps (GET_PID (ptid)) > 1))
4063     {
4064       snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
4065       return buf;
4066     }
4067
4068   return normal_pid_to_str (ptid);
4069 }
4070
4071 static char *
4072 linux_nat_thread_name (struct thread_info *thr)
4073 {
4074   int pid = ptid_get_pid (thr->ptid);
4075   long lwp = ptid_get_lwp (thr->ptid);
4076 #define FORMAT "/proc/%d/task/%ld/comm"
4077   char buf[sizeof (FORMAT) + 30];
4078   FILE *comm_file;
4079   char *result = NULL;
4080
4081   snprintf (buf, sizeof (buf), FORMAT, pid, lwp);
4082   comm_file = fopen (buf, "r");
4083   if (comm_file)
4084     {
4085       /* Not exported by the kernel, so we define it here.  */
4086 #define COMM_LEN 16
4087       static char line[COMM_LEN + 1];
4088
4089       if (fgets (line, sizeof (line), comm_file))
4090         {
4091           char *nl = strchr (line, '\n');
4092
4093           if (nl)
4094             *nl = '\0';
4095           if (*line != '\0')
4096             result = line;
4097         }
4098
4099       fclose (comm_file);
4100     }
4101
4102 #undef COMM_LEN
4103 #undef FORMAT
4104
4105   return result;
4106 }
4107
4108 /* Accepts an integer PID; Returns a string representing a file that
4109    can be opened to get the symbols for the child process.  */
4110
4111 static char *
4112 linux_child_pid_to_exec_file (int pid)
4113 {
4114   char *name1, *name2;
4115
4116   name1 = xmalloc (MAXPATHLEN);
4117   name2 = xmalloc (MAXPATHLEN);
4118   make_cleanup (xfree, name1);
4119   make_cleanup (xfree, name2);
4120   memset (name2, 0, MAXPATHLEN);
4121
4122   sprintf (name1, "/proc/%d/exe", pid);
4123   if (readlink (name1, name2, MAXPATHLEN) > 0)
4124     return name2;
4125   else
4126     return name1;
4127 }
4128
4129 /* Service function for corefiles and info proc.  */
4130
4131 static int
4132 read_mapping (FILE *mapfile,
4133               long long *addr,
4134               long long *endaddr,
4135               char *permissions,
4136               long long *offset,
4137               char *device, long long *inode, char *filename)
4138 {
4139   int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
4140                     addr, endaddr, permissions, offset, device, inode);
4141
4142   filename[0] = '\0';
4143   if (ret > 0 && ret != EOF)
4144     {
4145       /* Eat everything up to EOL for the filename.  This will prevent
4146          weird filenames (such as one with embedded whitespace) from
4147          confusing this code.  It also makes this code more robust in
4148          respect to annotations the kernel may add after the filename.
4149
4150          Note the filename is used for informational purposes
4151          only.  */
4152       ret += fscanf (mapfile, "%[^\n]\n", filename);
4153     }
4154
4155   return (ret != 0 && ret != EOF);
4156 }
4157
4158 /* Fills the "to_find_memory_regions" target vector.  Lists the memory
4159    regions in the inferior for a corefile.  */
4160
4161 static int
4162 linux_nat_find_memory_regions (find_memory_region_ftype func, void *obfd)
4163 {
4164   int pid = PIDGET (inferior_ptid);
4165   char mapsfilename[MAXPATHLEN];
4166   FILE *mapsfile;
4167   long long addr, endaddr, size, offset, inode;
4168   char permissions[8], device[8], filename[MAXPATHLEN];
4169   int read, write, exec;
4170   struct cleanup *cleanup;
4171
4172   /* Compose the filename for the /proc memory map, and open it.  */
4173   sprintf (mapsfilename, "/proc/%d/maps", pid);
4174   if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
4175     error (_("Could not open %s."), mapsfilename);
4176   cleanup = make_cleanup_fclose (mapsfile);
4177
4178   if (info_verbose)
4179     fprintf_filtered (gdb_stdout,
4180                       "Reading memory regions from %s\n", mapsfilename);
4181
4182   /* Now iterate until end-of-file.  */
4183   while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
4184                        &offset, &device[0], &inode, &filename[0]))
4185     {
4186       size = endaddr - addr;
4187
4188       /* Get the segment's permissions.  */
4189       read = (strchr (permissions, 'r') != 0);
4190       write = (strchr (permissions, 'w') != 0);
4191       exec = (strchr (permissions, 'x') != 0);
4192
4193       if (info_verbose)
4194         {
4195           fprintf_filtered (gdb_stdout,
4196                             "Save segment, %s bytes at %s (%c%c%c)",
4197                             plongest (size), paddress (target_gdbarch, addr),
4198                             read ? 'r' : ' ',
4199                             write ? 'w' : ' ', exec ? 'x' : ' ');
4200           if (filename[0])
4201             fprintf_filtered (gdb_stdout, " for %s", filename);
4202           fprintf_filtered (gdb_stdout, "\n");
4203         }
4204
4205       /* Invoke the callback function to create the corefile
4206          segment.  */
4207       func (addr, size, read, write, exec, obfd);
4208     }
4209   do_cleanups (cleanup);
4210   return 0;
4211 }
4212
4213 static int
4214 find_signalled_thread (struct thread_info *info, void *data)
4215 {
4216   if (info->suspend.stop_signal != TARGET_SIGNAL_0
4217       && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
4218     return 1;
4219
4220   return 0;
4221 }
4222
4223 static enum target_signal
4224 find_stop_signal (void)
4225 {
4226   struct thread_info *info =
4227     iterate_over_threads (find_signalled_thread, NULL);
4228
4229   if (info)
4230     return info->suspend.stop_signal;
4231   else
4232     return TARGET_SIGNAL_0;
4233 }
4234
4235 /* Records the thread's register state for the corefile note
4236    section.  */
4237
4238 static char *
4239 linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
4240                                char *note_data, int *note_size,
4241                                enum target_signal stop_signal)
4242 {
4243   unsigned long lwp = ptid_get_lwp (ptid);
4244   struct gdbarch *gdbarch = target_gdbarch;
4245   struct regcache *regcache = get_thread_arch_regcache (ptid, gdbarch);
4246   const struct regset *regset;
4247   int core_regset_p;
4248   struct cleanup *old_chain;
4249   struct core_regset_section *sect_list;
4250   char *gdb_regset;
4251
4252   old_chain = save_inferior_ptid ();
4253   inferior_ptid = ptid;
4254   target_fetch_registers (regcache, -1);
4255   do_cleanups (old_chain);
4256
4257   core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
4258   sect_list = gdbarch_core_regset_sections (gdbarch);
4259
4260   /* The loop below uses the new struct core_regset_section, which stores
4261      the supported section names and sizes for the core file.  Note that
4262      note PRSTATUS needs to be treated specially.  But the other notes are
4263      structurally the same, so they can benefit from the new struct.  */
4264   if (core_regset_p && sect_list != NULL)
4265     while (sect_list->sect_name != NULL)
4266       {
4267         regset = gdbarch_regset_from_core_section (gdbarch,
4268                                                    sect_list->sect_name,
4269                                                    sect_list->size);
4270         gdb_assert (regset && regset->collect_regset);
4271         gdb_regset = xmalloc (sect_list->size);
4272         regset->collect_regset (regset, regcache, -1,
4273                                 gdb_regset, sect_list->size);
4274
4275         if (strcmp (sect_list->sect_name, ".reg") == 0)
4276           note_data = (char *) elfcore_write_prstatus
4277                                 (obfd, note_data, note_size,
4278                                  lwp, target_signal_to_host (stop_signal),
4279                                  gdb_regset);
4280         else
4281           note_data = (char *) elfcore_write_register_note
4282                                 (obfd, note_data, note_size,
4283                                  sect_list->sect_name, gdb_regset,
4284                                  sect_list->size);
4285         xfree (gdb_regset);
4286         sect_list++;
4287       }
4288
4289   /* For architectures that does not have the struct core_regset_section
4290      implemented, we use the old method.  When all the architectures have
4291      the new support, the code below should be deleted.  */
4292   else
4293     {
4294       gdb_gregset_t gregs;
4295       gdb_fpregset_t fpregs;
4296
4297       if (core_regset_p
4298           && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
4299                                                          sizeof (gregs)))
4300           != NULL && regset->collect_regset != NULL)
4301         regset->collect_regset (regset, regcache, -1,
4302                                 &gregs, sizeof (gregs));
4303       else
4304         fill_gregset (regcache, &gregs, -1);
4305
4306       note_data = (char *) elfcore_write_prstatus
4307         (obfd, note_data, note_size, lwp, target_signal_to_host (stop_signal),
4308          &gregs);
4309
4310       if (core_regset_p
4311           && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
4312                                                          sizeof (fpregs)))
4313           != NULL && regset->collect_regset != NULL)
4314         regset->collect_regset (regset, regcache, -1,
4315                                 &fpregs, sizeof (fpregs));
4316       else
4317         fill_fpregset (regcache, &fpregs, -1);
4318
4319       note_data = (char *) elfcore_write_prfpreg (obfd,
4320                                                   note_data,
4321                                                   note_size,
4322                                                   &fpregs, sizeof (fpregs));
4323     }
4324
4325   return note_data;
4326 }
4327
4328 struct linux_nat_corefile_thread_data
4329 {
4330   bfd *obfd;
4331   char *note_data;
4332   int *note_size;
4333   int num_notes;
4334   enum target_signal stop_signal;
4335 };
4336
4337 /* Called by gdbthread.c once per thread.  Records the thread's
4338    register state for the corefile note section.  */
4339
4340 static int
4341 linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
4342 {
4343   struct linux_nat_corefile_thread_data *args = data;
4344
4345   args->note_data = linux_nat_do_thread_registers (args->obfd,
4346                                                    ti->ptid,
4347                                                    args->note_data,
4348                                                    args->note_size,
4349                                                    args->stop_signal);
4350   args->num_notes++;
4351
4352   return 0;
4353 }
4354
4355 /* Enumerate spufs IDs for process PID.  */
4356
4357 static void
4358 iterate_over_spus (int pid, void (*callback) (void *, int), void *data)
4359 {
4360   char path[128];
4361   DIR *dir;
4362   struct dirent *entry;
4363
4364   xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
4365   dir = opendir (path);
4366   if (!dir)
4367     return;
4368
4369   rewinddir (dir);
4370   while ((entry = readdir (dir)) != NULL)
4371     {
4372       struct stat st;
4373       struct statfs stfs;
4374       int fd;
4375
4376       fd = atoi (entry->d_name);
4377       if (!fd)
4378         continue;
4379
4380       xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
4381       if (stat (path, &st) != 0)
4382         continue;
4383       if (!S_ISDIR (st.st_mode))
4384         continue;
4385
4386       if (statfs (path, &stfs) != 0)
4387         continue;
4388       if (stfs.f_type != SPUFS_MAGIC)
4389         continue;
4390
4391       callback (data, fd);
4392     }
4393
4394   closedir (dir);
4395 }
4396
4397 /* Generate corefile notes for SPU contexts.  */
4398
4399 struct linux_spu_corefile_data
4400 {
4401   bfd *obfd;
4402   char *note_data;
4403   int *note_size;
4404 };
4405
4406 static void
4407 linux_spu_corefile_callback (void *data, int fd)
4408 {
4409   struct linux_spu_corefile_data *args = data;
4410   int i;
4411
4412   static const char *spu_files[] =
4413     {
4414       "object-id",
4415       "mem",
4416       "regs",
4417       "fpcr",
4418       "lslr",
4419       "decr",
4420       "decr_status",
4421       "signal1",
4422       "signal1_type",
4423       "signal2",
4424       "signal2_type",
4425       "event_mask",
4426       "event_status",
4427       "mbox_info",
4428       "ibox_info",
4429       "wbox_info",
4430       "dma_info",
4431       "proxydma_info",
4432    };
4433
4434   for (i = 0; i < sizeof (spu_files) / sizeof (spu_files[0]); i++)
4435     {
4436       char annex[32], note_name[32];
4437       gdb_byte *spu_data;
4438       LONGEST spu_len;
4439
4440       xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[i]);
4441       spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
4442                                    annex, &spu_data);
4443       if (spu_len > 0)
4444         {
4445           xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
4446           args->note_data = elfcore_write_note (args->obfd, args->note_data,
4447                                                 args->note_size, note_name,
4448                                                 NT_SPU, spu_data, spu_len);
4449           xfree (spu_data);
4450         }
4451     }
4452 }
4453
4454 static char *
4455 linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
4456 {
4457   struct linux_spu_corefile_data args;
4458
4459   args.obfd = obfd;
4460   args.note_data = note_data;
4461   args.note_size = note_size;
4462
4463   iterate_over_spus (PIDGET (inferior_ptid),
4464                      linux_spu_corefile_callback, &args);
4465
4466   return args.note_data;
4467 }
4468
4469 /* Fills the "to_make_corefile_note" target vector.  Builds the note
4470    section for a corefile, and returns it in a malloc buffer.  */
4471
4472 static char *
4473 linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
4474 {
4475   struct linux_nat_corefile_thread_data thread_args;
4476   /* The variable size must be >= sizeof (prpsinfo_t.pr_fname).  */
4477   char fname[16] = { '\0' };
4478   /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs).  */
4479   char psargs[80] = { '\0' };
4480   char *note_data = NULL;
4481   ptid_t filter = pid_to_ptid (ptid_get_pid (inferior_ptid));
4482   gdb_byte *auxv;
4483   int auxv_len;
4484
4485   if (get_exec_file (0))
4486     {
4487       strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname));
4488       strncpy (psargs, get_exec_file (0), sizeof (psargs));
4489       if (get_inferior_args ())
4490         {
4491           char *string_end;
4492           char *psargs_end = psargs + sizeof (psargs);
4493
4494           /* linux_elfcore_write_prpsinfo () handles zero unterminated
4495              strings fine.  */
4496           string_end = memchr (psargs, 0, sizeof (psargs));
4497           if (string_end != NULL)
4498             {
4499               *string_end++ = ' ';
4500               strncpy (string_end, get_inferior_args (),
4501                        psargs_end - string_end);
4502             }
4503         }
4504       note_data = (char *) elfcore_write_prpsinfo (obfd,
4505                                                    note_data,
4506                                                    note_size, fname, psargs);
4507     }
4508
4509   /* Dump information for threads.  */
4510   thread_args.obfd = obfd;
4511   thread_args.note_data = note_data;
4512   thread_args.note_size = note_size;
4513   thread_args.num_notes = 0;
4514   thread_args.stop_signal = find_stop_signal ();
4515   iterate_over_lwps (filter, linux_nat_corefile_thread_callback, &thread_args);
4516   gdb_assert (thread_args.num_notes != 0);
4517   note_data = thread_args.note_data;
4518
4519   auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
4520                                 NULL, &auxv);
4521   if (auxv_len > 0)
4522     {
4523       note_data = elfcore_write_note (obfd, note_data, note_size,
4524                                       "CORE", NT_AUXV, auxv, auxv_len);
4525       xfree (auxv);
4526     }
4527
4528   note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
4529
4530   make_cleanup (xfree, note_data);
4531   return note_data;
4532 }
4533
4534 /* Implement the "info proc" command.  */
4535
4536 static void
4537 linux_nat_info_proc_cmd (char *args, int from_tty)
4538 {
4539   /* A long is used for pid instead of an int to avoid a loss of precision
4540      compiler warning from the output of strtoul.  */
4541   long pid = PIDGET (inferior_ptid);
4542   FILE *procfile;
4543   char **argv = NULL;
4544   char buffer[MAXPATHLEN];
4545   char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
4546   int cmdline_f = 1;
4547   int cwd_f = 1;
4548   int exe_f = 1;
4549   int mappings_f = 0;
4550   int status_f = 0;
4551   int stat_f = 0;
4552   int all = 0;
4553   struct stat dummy;
4554
4555   if (args)
4556     {
4557       /* Break up 'args' into an argv array.  */
4558       argv = gdb_buildargv (args);
4559       make_cleanup_freeargv (argv);
4560     }
4561   while (argv != NULL && *argv != NULL)
4562     {
4563       if (isdigit (argv[0][0]))
4564         {
4565           pid = strtoul (argv[0], NULL, 10);
4566         }
4567       else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
4568         {
4569           mappings_f = 1;
4570         }
4571       else if (strcmp (argv[0], "status") == 0)
4572         {
4573           status_f = 1;
4574         }
4575       else if (strcmp (argv[0], "stat") == 0)
4576         {
4577           stat_f = 1;
4578         }
4579       else if (strcmp (argv[0], "cmd") == 0)
4580         {
4581           cmdline_f = 1;
4582         }
4583       else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
4584         {
4585           exe_f = 1;
4586         }
4587       else if (strcmp (argv[0], "cwd") == 0)
4588         {
4589           cwd_f = 1;
4590         }
4591       else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
4592         {
4593           all = 1;
4594         }
4595       else
4596         {
4597           /* [...] (future options here).  */
4598         }
4599       argv++;
4600     }
4601   if (pid == 0)
4602     error (_("No current process: you must name one."));
4603
4604   sprintf (fname1, "/proc/%ld", pid);
4605   if (stat (fname1, &dummy) != 0)
4606     error (_("No /proc directory: '%s'"), fname1);
4607
4608   printf_filtered (_("process %ld\n"), pid);
4609   if (cmdline_f || all)
4610     {
4611       sprintf (fname1, "/proc/%ld/cmdline", pid);
4612       if ((procfile = fopen (fname1, "r")) != NULL)
4613         {
4614           struct cleanup *cleanup = make_cleanup_fclose (procfile);
4615
4616           if (fgets (buffer, sizeof (buffer), procfile))
4617             printf_filtered ("cmdline = '%s'\n", buffer);
4618           else
4619             warning (_("unable to read '%s'"), fname1);
4620           do_cleanups (cleanup);
4621         }
4622       else
4623         warning (_("unable to open /proc file '%s'"), fname1);
4624     }
4625   if (cwd_f || all)
4626     {
4627       sprintf (fname1, "/proc/%ld/cwd", pid);
4628       memset (fname2, 0, sizeof (fname2));
4629       if (readlink (fname1, fname2, sizeof (fname2)) > 0)
4630         printf_filtered ("cwd = '%s'\n", fname2);
4631       else
4632         warning (_("unable to read link '%s'"), fname1);
4633     }
4634   if (exe_f || all)
4635     {
4636       sprintf (fname1, "/proc/%ld/exe", pid);
4637       memset (fname2, 0, sizeof (fname2));
4638       if (readlink (fname1, fname2, sizeof (fname2)) > 0)
4639         printf_filtered ("exe = '%s'\n", fname2);
4640       else
4641         warning (_("unable to read link '%s'"), fname1);
4642     }
4643   if (mappings_f || all)
4644     {
4645       sprintf (fname1, "/proc/%ld/maps", pid);
4646       if ((procfile = fopen (fname1, "r")) != NULL)
4647         {
4648           long long addr, endaddr, size, offset, inode;
4649           char permissions[8], device[8], filename[MAXPATHLEN];
4650           struct cleanup *cleanup;
4651
4652           cleanup = make_cleanup_fclose (procfile);
4653           printf_filtered (_("Mapped address spaces:\n\n"));
4654           if (gdbarch_addr_bit (target_gdbarch) == 32)
4655             {
4656               printf_filtered ("\t%10s %10s %10s %10s %7s\n",
4657                            "Start Addr",
4658                            "  End Addr",
4659                            "      Size", "    Offset", "objfile");
4660             }
4661           else
4662             {
4663               printf_filtered ("  %18s %18s %10s %10s %7s\n",
4664                            "Start Addr",
4665                            "  End Addr",
4666                            "      Size", "    Offset", "objfile");
4667             }
4668
4669           while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
4670                                &offset, &device[0], &inode, &filename[0]))
4671             {
4672               size = endaddr - addr;
4673
4674               /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
4675                  calls here (and possibly above) should be abstracted
4676                  out into their own functions?  Andrew suggests using
4677                  a generic local_address_string instead to print out
4678                  the addresses; that makes sense to me, too.  */
4679
4680               if (gdbarch_addr_bit (target_gdbarch) == 32)
4681                 {
4682                   printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
4683                                (unsigned long) addr,    /* FIXME: pr_addr */
4684                                (unsigned long) endaddr,
4685                                (int) size,
4686                                (unsigned int) offset,
4687                                filename[0] ? filename : "");
4688                 }
4689               else
4690                 {
4691                   printf_filtered ("  %#18lx %#18lx %#10x %#10x %7s\n",
4692                                (unsigned long) addr,    /* FIXME: pr_addr */
4693                                (unsigned long) endaddr,
4694                                (int) size,
4695                                (unsigned int) offset,
4696                                filename[0] ? filename : "");
4697                 }
4698             }
4699
4700           do_cleanups (cleanup);
4701         }
4702       else
4703         warning (_("unable to open /proc file '%s'"), fname1);
4704     }
4705   if (status_f || all)
4706     {
4707       sprintf (fname1, "/proc/%ld/status", pid);
4708       if ((procfile = fopen (fname1, "r")) != NULL)
4709         {
4710           struct cleanup *cleanup = make_cleanup_fclose (procfile);
4711
4712           while (fgets (buffer, sizeof (buffer), procfile) != NULL)
4713             puts_filtered (buffer);
4714           do_cleanups (cleanup);
4715         }
4716       else
4717         warning (_("unable to open /proc file '%s'"), fname1);
4718     }
4719   if (stat_f || all)
4720     {
4721       sprintf (fname1, "/proc/%ld/stat", pid);
4722       if ((procfile = fopen (fname1, "r")) != NULL)
4723         {
4724           int itmp;
4725           char ctmp;
4726           long ltmp;
4727           struct cleanup *cleanup = make_cleanup_fclose (procfile);
4728
4729           if (fscanf (procfile, "%d ", &itmp) > 0)
4730             printf_filtered (_("Process: %d\n"), itmp);
4731           if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
4732             printf_filtered (_("Exec file: %s\n"), buffer);
4733           if (fscanf (procfile, "%c ", &ctmp) > 0)
4734             printf_filtered (_("State: %c\n"), ctmp);
4735           if (fscanf (procfile, "%d ", &itmp) > 0)
4736             printf_filtered (_("Parent process: %d\n"), itmp);
4737           if (fscanf (procfile, "%d ", &itmp) > 0)
4738             printf_filtered (_("Process group: %d\n"), itmp);
4739           if (fscanf (procfile, "%d ", &itmp) > 0)
4740             printf_filtered (_("Session id: %d\n"), itmp);
4741           if (fscanf (procfile, "%d ", &itmp) > 0)
4742             printf_filtered (_("TTY: %d\n"), itmp);
4743           if (fscanf (procfile, "%d ", &itmp) > 0)
4744             printf_filtered (_("TTY owner process group: %d\n"), itmp);
4745           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4746             printf_filtered (_("Flags: 0x%lx\n"), ltmp);
4747           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4748             printf_filtered (_("Minor faults (no memory page): %lu\n"),
4749                              (unsigned long) ltmp);
4750           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4751             printf_filtered (_("Minor faults, children: %lu\n"),
4752                              (unsigned long) ltmp);
4753           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4754             printf_filtered (_("Major faults (memory page faults): %lu\n"),
4755                              (unsigned long) ltmp);
4756           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4757             printf_filtered (_("Major faults, children: %lu\n"),
4758                              (unsigned long) ltmp);
4759           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4760             printf_filtered (_("utime: %ld\n"), ltmp);
4761           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4762             printf_filtered (_("stime: %ld\n"), ltmp);
4763           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4764             printf_filtered (_("utime, children: %ld\n"), ltmp);
4765           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4766             printf_filtered (_("stime, children: %ld\n"), ltmp);
4767           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4768             printf_filtered (_("jiffies remaining in current "
4769                                "time slice: %ld\n"), ltmp);
4770           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4771             printf_filtered (_("'nice' value: %ld\n"), ltmp);
4772           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4773             printf_filtered (_("jiffies until next timeout: %lu\n"),
4774                              (unsigned long) ltmp);
4775           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4776             printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
4777                              (unsigned long) ltmp);
4778           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4779             printf_filtered (_("start time (jiffies since "
4780                                "system boot): %ld\n"), ltmp);
4781           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4782             printf_filtered (_("Virtual memory size: %lu\n"),
4783                              (unsigned long) ltmp);
4784           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4785             printf_filtered (_("Resident set size: %lu\n"),
4786                              (unsigned long) ltmp);
4787           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4788             printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
4789           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4790             printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
4791           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4792             printf_filtered (_("End of text: 0x%lx\n"), ltmp);
4793           if (fscanf (procfile, "%lu ", &ltmp) > 0)
4794             printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
4795 #if 0   /* Don't know how architecture-dependent the rest is...
4796            Anyway the signal bitmap info is available from "status".  */
4797           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch?  */
4798             printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
4799           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch?  */
4800             printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
4801           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4802             printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
4803           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4804             printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
4805           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4806             printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
4807           if (fscanf (procfile, "%ld ", &ltmp) > 0)
4808             printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
4809           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch?  */
4810             printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
4811 #endif
4812           do_cleanups (cleanup);
4813         }
4814       else
4815         warning (_("unable to open /proc file '%s'"), fname1);
4816     }
4817 }
4818
4819 /* Implement the to_xfer_partial interface for memory reads using the /proc
4820    filesystem.  Because we can use a single read() call for /proc, this
4821    can be much more efficient than banging away at PTRACE_PEEKTEXT,
4822    but it doesn't support writes.  */
4823
4824 static LONGEST
4825 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
4826                          const char *annex, gdb_byte *readbuf,
4827                          const gdb_byte *writebuf,
4828                          ULONGEST offset, LONGEST len)
4829 {
4830   LONGEST ret;
4831   int fd;
4832   char filename[64];
4833
4834   if (object != TARGET_OBJECT_MEMORY || !readbuf)
4835     return 0;
4836
4837   /* Don't bother for one word.  */
4838   if (len < 3 * sizeof (long))
4839     return 0;
4840
4841   /* We could keep this file open and cache it - possibly one per
4842      thread.  That requires some juggling, but is even faster.  */
4843   sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
4844   fd = open (filename, O_RDONLY | O_LARGEFILE);
4845   if (fd == -1)
4846     return 0;
4847
4848   /* If pread64 is available, use it.  It's faster if the kernel
4849      supports it (only one syscall), and it's 64-bit safe even on
4850      32-bit platforms (for instance, SPARC debugging a SPARC64
4851      application).  */
4852 #ifdef HAVE_PREAD64
4853   if (pread64 (fd, readbuf, len, offset) != len)
4854 #else
4855   if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
4856 #endif
4857     ret = 0;
4858   else
4859     ret = len;
4860
4861   close (fd);
4862   return ret;
4863 }
4864
4865
4866 /* Enumerate spufs IDs for process PID.  */
4867 static LONGEST
4868 spu_enumerate_spu_ids (int pid, gdb_byte *buf, ULONGEST offset, LONGEST len)
4869 {
4870   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
4871   LONGEST pos = 0;
4872   LONGEST written = 0;
4873   char path[128];
4874   DIR *dir;
4875   struct dirent *entry;
4876
4877   xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
4878   dir = opendir (path);
4879   if (!dir)
4880     return -1;
4881
4882   rewinddir (dir);
4883   while ((entry = readdir (dir)) != NULL)
4884     {
4885       struct stat st;
4886       struct statfs stfs;
4887       int fd;
4888
4889       fd = atoi (entry->d_name);
4890       if (!fd)
4891         continue;
4892
4893       xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
4894       if (stat (path, &st) != 0)
4895         continue;
4896       if (!S_ISDIR (st.st_mode))
4897         continue;
4898
4899       if (statfs (path, &stfs) != 0)
4900         continue;
4901       if (stfs.f_type != SPUFS_MAGIC)
4902         continue;
4903
4904       if (pos >= offset && pos + 4 <= offset + len)
4905         {
4906           store_unsigned_integer (buf + pos - offset, 4, byte_order, fd);
4907           written += 4;
4908         }
4909       pos += 4;
4910     }
4911
4912   closedir (dir);
4913   return written;
4914 }
4915
4916 /* Implement the to_xfer_partial interface for the TARGET_OBJECT_SPU
4917    object type, using the /proc file system.  */
4918 static LONGEST
4919 linux_proc_xfer_spu (struct target_ops *ops, enum target_object object,
4920                      const char *annex, gdb_byte *readbuf,
4921                      const gdb_byte *writebuf,
4922                      ULONGEST offset, LONGEST len)
4923 {
4924   char buf[128];
4925   int fd = 0;
4926   int ret = -1;
4927   int pid = PIDGET (inferior_ptid);
4928
4929   if (!annex)
4930     {
4931       if (!readbuf)
4932         return -1;
4933       else
4934         return spu_enumerate_spu_ids (pid, readbuf, offset, len);
4935     }
4936
4937   xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
4938   fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
4939   if (fd <= 0)
4940     return -1;
4941
4942   if (offset != 0
4943       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4944     {
4945       close (fd);
4946       return 0;
4947     }
4948
4949   if (writebuf)
4950     ret = write (fd, writebuf, (size_t) len);
4951   else if (readbuf)
4952     ret = read (fd, readbuf, (size_t) len);
4953
4954   close (fd);
4955   return ret;
4956 }
4957
4958
4959 /* Parse LINE as a signal set and add its set bits to SIGS.  */
4960
4961 static void
4962 add_line_to_sigset (const char *line, sigset_t *sigs)
4963 {
4964   int len = strlen (line) - 1;
4965   const char *p;
4966   int signum;
4967
4968   if (line[len] != '\n')
4969     error (_("Could not parse signal set: %s"), line);
4970
4971   p = line;
4972   signum = len * 4;
4973   while (len-- > 0)
4974     {
4975       int digit;
4976
4977       if (*p >= '0' && *p <= '9')
4978         digit = *p - '0';
4979       else if (*p >= 'a' && *p <= 'f')
4980         digit = *p - 'a' + 10;
4981       else
4982         error (_("Could not parse signal set: %s"), line);
4983
4984       signum -= 4;
4985
4986       if (digit & 1)
4987         sigaddset (sigs, signum + 1);
4988       if (digit & 2)
4989         sigaddset (sigs, signum + 2);
4990       if (digit & 4)
4991         sigaddset (sigs, signum + 3);
4992       if (digit & 8)
4993         sigaddset (sigs, signum + 4);
4994
4995       p++;
4996     }
4997 }
4998
4999 /* Find process PID's pending signals from /proc/pid/status and set
5000    SIGS to match.  */
5001
5002 void
5003 linux_proc_pending_signals (int pid, sigset_t *pending,
5004                             sigset_t *blocked, sigset_t *ignored)
5005 {
5006   FILE *procfile;
5007   char buffer[MAXPATHLEN], fname[MAXPATHLEN];
5008   struct cleanup *cleanup;
5009
5010   sigemptyset (pending);
5011   sigemptyset (blocked);
5012   sigemptyset (ignored);
5013   sprintf (fname, "/proc/%d/status", pid);
5014   procfile = fopen (fname, "r");
5015   if (procfile == NULL)
5016     error (_("Could not open %s"), fname);
5017   cleanup = make_cleanup_fclose (procfile);
5018
5019   while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
5020     {
5021       /* Normal queued signals are on the SigPnd line in the status
5022          file.  However, 2.6 kernels also have a "shared" pending
5023          queue for delivering signals to a thread group, so check for
5024          a ShdPnd line also.
5025
5026          Unfortunately some Red Hat kernels include the shared pending
5027          queue but not the ShdPnd status field.  */
5028
5029       if (strncmp (buffer, "SigPnd:\t", 8) == 0)
5030         add_line_to_sigset (buffer + 8, pending);
5031       else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
5032         add_line_to_sigset (buffer + 8, pending);
5033       else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
5034         add_line_to_sigset (buffer + 8, blocked);
5035       else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
5036         add_line_to_sigset (buffer + 8, ignored);
5037     }
5038
5039   do_cleanups (cleanup);
5040 }
5041
5042 static LONGEST
5043 linux_nat_xfer_osdata (struct target_ops *ops, enum target_object object,
5044                        const char *annex, gdb_byte *readbuf,
5045                        const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
5046 {
5047   /* We make the process list snapshot when the object starts to be
5048      read.  */
5049   static const char *buf;
5050   static LONGEST len_avail = -1;
5051   static struct obstack obstack;
5052
5053   DIR *dirp;
5054
5055   gdb_assert (object == TARGET_OBJECT_OSDATA);
5056
5057   if (!annex)
5058     {
5059       if (offset == 0)
5060         {
5061           if (len_avail != -1 && len_avail != 0)
5062             obstack_free (&obstack, NULL);
5063           len_avail = 0;
5064           buf = NULL;
5065           obstack_init (&obstack);
5066           obstack_grow_str (&obstack, "<osdata type=\"types\">\n");
5067
5068           obstack_xml_printf (&obstack,
5069                               "<item>"
5070                               "<column name=\"Type\">processes</column>"
5071                               "<column name=\"Description\">"
5072                               "Listing of all processes</column>"
5073                               "</item>");
5074
5075           obstack_grow_str0 (&obstack, "</osdata>\n");
5076           buf = obstack_finish (&obstack);
5077           len_avail = strlen (buf);
5078         }
5079
5080       if (offset >= len_avail)
5081         {
5082           /* Done.  Get rid of the obstack.  */
5083           obstack_free (&obstack, NULL);
5084           buf = NULL;
5085           len_avail = 0;
5086           return 0;
5087         }
5088
5089       if (len > len_avail - offset)
5090         len = len_avail - offset;
5091       memcpy (readbuf, buf + offset, len);
5092
5093       return len;
5094     }
5095
5096   if (strcmp (annex, "processes") != 0)
5097     return 0;
5098
5099   gdb_assert (readbuf && !writebuf);
5100
5101   if (offset == 0)
5102     {
5103       if (len_avail != -1 && len_avail != 0)
5104         obstack_free (&obstack, NULL);
5105       len_avail = 0;
5106       buf = NULL;
5107       obstack_init (&obstack);
5108       obstack_grow_str (&obstack, "<osdata type=\"processes\">\n");
5109
5110       dirp = opendir ("/proc");
5111       if (dirp)
5112         {
5113           struct dirent *dp;
5114
5115           while ((dp = readdir (dirp)) != NULL)
5116             {
5117               struct stat statbuf;
5118               char procentry[sizeof ("/proc/4294967295")];
5119
5120               if (!isdigit (dp->d_name[0])
5121                   || NAMELEN (dp) > sizeof ("4294967295") - 1)
5122                 continue;
5123
5124               sprintf (procentry, "/proc/%s", dp->d_name);
5125               if (stat (procentry, &statbuf) == 0
5126                   && S_ISDIR (statbuf.st_mode))
5127                 {
5128                   char *pathname;
5129                   FILE *f;
5130                   char cmd[MAXPATHLEN + 1];
5131                   struct passwd *entry;
5132
5133                   pathname = xstrprintf ("/proc/%s/cmdline", dp->d_name);
5134                   entry = getpwuid (statbuf.st_uid);
5135
5136                   if ((f = fopen (pathname, "r")) != NULL)
5137                     {
5138                       size_t length = fread (cmd, 1, sizeof (cmd) - 1, f);
5139
5140                       if (length > 0)
5141                         {
5142                           int i;
5143
5144                           for (i = 0; i < length; i++)
5145                             if (cmd[i] == '\0')
5146                               cmd[i] = ' ';
5147                           cmd[length] = '\0';
5148
5149                           obstack_xml_printf (
5150                             &obstack,
5151                             "<item>"
5152                             "<column name=\"pid\">%s</column>"
5153                             "<column name=\"user\">%s</column>"
5154                             "<column name=\"command\">%s</column>"
5155                             "</item>",
5156                             dp->d_name,
5157                             entry ? entry->pw_name : "?",
5158                             cmd);
5159                         }
5160                       fclose (f);
5161                     }
5162
5163                   xfree (pathname);
5164                 }
5165             }
5166
5167           closedir (dirp);
5168         }
5169
5170       obstack_grow_str0 (&obstack, "</osdata>\n");
5171       buf = obstack_finish (&obstack);
5172       len_avail = strlen (buf);
5173     }
5174
5175   if (offset >= len_avail)
5176     {
5177       /* Done.  Get rid of the obstack.  */
5178       obstack_free (&obstack, NULL);
5179       buf = NULL;
5180       len_avail = 0;
5181       return 0;
5182     }
5183
5184   if (len > len_avail - offset)
5185     len = len_avail - offset;
5186   memcpy (readbuf, buf + offset, len);
5187
5188   return len;
5189 }
5190
5191 static LONGEST
5192 linux_xfer_partial (struct target_ops *ops, enum target_object object,
5193                     const char *annex, gdb_byte *readbuf,
5194                     const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
5195 {
5196   LONGEST xfer;
5197
5198   if (object == TARGET_OBJECT_AUXV)
5199     return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
5200                              offset, len);
5201
5202   if (object == TARGET_OBJECT_OSDATA)
5203     return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
5204                                offset, len);
5205
5206   if (object == TARGET_OBJECT_SPU)
5207     return linux_proc_xfer_spu (ops, object, annex, readbuf, writebuf,
5208                                 offset, len);
5209
5210   /* GDB calculates all the addresses in possibly larget width of the address.
5211      Address width needs to be masked before its final use - either by
5212      linux_proc_xfer_partial or inf_ptrace_xfer_partial.
5213
5214      Compare ADDR_BIT first to avoid a compiler warning on shift overflow.  */
5215
5216   if (object == TARGET_OBJECT_MEMORY)
5217     {
5218       int addr_bit = gdbarch_addr_bit (target_gdbarch);
5219
5220       if (addr_bit < (sizeof (ULONGEST) * HOST_CHAR_BIT))
5221         offset &= ((ULONGEST) 1 << addr_bit) - 1;
5222     }
5223
5224   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
5225                                   offset, len);
5226   if (xfer != 0)
5227     return xfer;
5228
5229   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
5230                              offset, len);
5231 }
5232
5233 /* Create a prototype generic GNU/Linux target.  The client can override
5234    it with local methods.  */
5235
5236 static void
5237 linux_target_install_ops (struct target_ops *t)
5238 {
5239   t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
5240   t->to_remove_fork_catchpoint = linux_child_remove_fork_catchpoint;
5241   t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
5242   t->to_remove_vfork_catchpoint = linux_child_remove_vfork_catchpoint;
5243   t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
5244   t->to_remove_exec_catchpoint = linux_child_remove_exec_catchpoint;
5245   t->to_set_syscall_catchpoint = linux_child_set_syscall_catchpoint;
5246   t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
5247   t->to_post_startup_inferior = linux_child_post_startup_inferior;
5248   t->to_post_attach = linux_child_post_attach;
5249   t->to_follow_fork = linux_child_follow_fork;
5250   t->to_find_memory_regions = linux_nat_find_memory_regions;
5251   t->to_make_corefile_notes = linux_nat_make_corefile_notes;
5252
5253   super_xfer_partial = t->to_xfer_partial;
5254   t->to_xfer_partial = linux_xfer_partial;
5255 }
5256
5257 struct target_ops *
5258 linux_target (void)
5259 {
5260   struct target_ops *t;
5261
5262   t = inf_ptrace_target ();
5263   linux_target_install_ops (t);
5264
5265   return t;
5266 }
5267
5268 struct target_ops *
5269 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
5270 {
5271   struct target_ops *t;
5272
5273   t = inf_ptrace_trad_target (register_u_offset);
5274   linux_target_install_ops (t);
5275
5276   return t;
5277 }
5278
5279 /* target_is_async_p implementation.  */
5280
5281 static int
5282 linux_nat_is_async_p (void)
5283 {
5284   /* NOTE: palves 2008-03-21: We're only async when the user requests
5285      it explicitly with the "set target-async" command.
5286      Someday, linux will always be async.  */
5287   if (!target_async_permitted)
5288     return 0;
5289
5290   /* See target.h/target_async_mask.  */
5291   return linux_nat_async_mask_value;
5292 }
5293
5294 /* target_can_async_p implementation.  */
5295
5296 static int
5297 linux_nat_can_async_p (void)
5298 {
5299   /* NOTE: palves 2008-03-21: We're only async when the user requests
5300      it explicitly with the "set target-async" command.
5301      Someday, linux will always be async.  */
5302   if (!target_async_permitted)
5303     return 0;
5304
5305   /* See target.h/target_async_mask.  */
5306   return linux_nat_async_mask_value;
5307 }
5308
5309 static int
5310 linux_nat_supports_non_stop (void)
5311 {
5312   return 1;
5313 }
5314
5315 /* True if we want to support multi-process.  To be removed when GDB
5316    supports multi-exec.  */
5317
5318 int linux_multi_process = 1;
5319
5320 static int
5321 linux_nat_supports_multi_process (void)
5322 {
5323   return linux_multi_process;
5324 }
5325
5326 /* target_async_mask implementation.  */
5327
5328 static int
5329 linux_nat_async_mask (int new_mask)
5330 {
5331   int curr_mask = linux_nat_async_mask_value;
5332
5333   if (curr_mask != new_mask)
5334     {
5335       if (new_mask == 0)
5336         {
5337           linux_nat_async (NULL, 0);
5338           linux_nat_async_mask_value = new_mask;
5339         }
5340       else
5341         {
5342           linux_nat_async_mask_value = new_mask;
5343
5344           /* If we're going out of async-mask in all-stop, then the
5345              inferior is stopped.  The next resume will call
5346              target_async.  In non-stop, the target event source
5347              should be always registered in the event loop.  Do so
5348              now.  */
5349           if (non_stop)
5350             linux_nat_async (inferior_event_handler, 0);
5351         }
5352     }
5353
5354   return curr_mask;
5355 }
5356
5357 static int async_terminal_is_ours = 1;
5358
5359 /* target_terminal_inferior implementation.  */
5360
5361 static void
5362 linux_nat_terminal_inferior (void)
5363 {
5364   if (!target_is_async_p ())
5365     {
5366       /* Async mode is disabled.  */
5367       terminal_inferior ();
5368       return;
5369     }
5370
5371   terminal_inferior ();
5372
5373   /* Calls to target_terminal_*() are meant to be idempotent.  */
5374   if (!async_terminal_is_ours)
5375     return;
5376
5377   delete_file_handler (input_fd);
5378   async_terminal_is_ours = 0;
5379   set_sigint_trap ();
5380 }
5381
5382 /* target_terminal_ours implementation.  */
5383
5384 static void
5385 linux_nat_terminal_ours (void)
5386 {
5387   if (!target_is_async_p ())
5388     {
5389       /* Async mode is disabled.  */
5390       terminal_ours ();
5391       return;
5392     }
5393
5394   /* GDB should never give the terminal to the inferior if the
5395      inferior is running in the background (run&, continue&, etc.),
5396      but claiming it sure should.  */
5397   terminal_ours ();
5398
5399   if (async_terminal_is_ours)
5400     return;
5401
5402   clear_sigint_trap ();
5403   add_file_handler (input_fd, stdin_event_handler, 0);
5404   async_terminal_is_ours = 1;
5405 }
5406
5407 static void (*async_client_callback) (enum inferior_event_type event_type,
5408                                       void *context);
5409 static void *async_client_context;
5410
5411 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
5412    so we notice when any child changes state, and notify the
5413    event-loop; it allows us to use sigsuspend in linux_nat_wait_1
5414    above to wait for the arrival of a SIGCHLD.  */
5415
5416 static void
5417 sigchld_handler (int signo)
5418 {
5419   int old_errno = errno;
5420
5421   if (debug_linux_nat)
5422     ui_file_write_async_safe (gdb_stdlog,
5423                               "sigchld\n", sizeof ("sigchld\n") - 1);
5424
5425   if (signo == SIGCHLD
5426       && linux_nat_event_pipe[0] != -1)
5427     async_file_mark (); /* Let the event loop know that there are
5428                            events to handle.  */
5429
5430   errno = old_errno;
5431 }
5432
5433 /* Callback registered with the target events file descriptor.  */
5434
5435 static void
5436 handle_target_event (int error, gdb_client_data client_data)
5437 {
5438   (*async_client_callback) (INF_REG_EVENT, async_client_context);
5439 }
5440
5441 /* Create/destroy the target events pipe.  Returns previous state.  */
5442
5443 static int
5444 linux_async_pipe (int enable)
5445 {
5446   int previous = (linux_nat_event_pipe[0] != -1);
5447
5448   if (previous != enable)
5449     {
5450       sigset_t prev_mask;
5451
5452       block_child_signals (&prev_mask);
5453
5454       if (enable)
5455         {
5456           if (pipe (linux_nat_event_pipe) == -1)
5457             internal_error (__FILE__, __LINE__,
5458                             "creating event pipe failed.");
5459
5460           fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
5461           fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
5462         }
5463       else
5464         {
5465           close (linux_nat_event_pipe[0]);
5466           close (linux_nat_event_pipe[1]);
5467           linux_nat_event_pipe[0] = -1;
5468           linux_nat_event_pipe[1] = -1;
5469         }
5470
5471       restore_child_signals_mask (&prev_mask);
5472     }
5473
5474   return previous;
5475 }
5476
5477 /* target_async implementation.  */
5478
5479 static void
5480 linux_nat_async (void (*callback) (enum inferior_event_type event_type,
5481                                    void *context), void *context)
5482 {
5483   if (linux_nat_async_mask_value == 0 || !target_async_permitted)
5484     internal_error (__FILE__, __LINE__,
5485                     "Calling target_async when async is masked");
5486
5487   if (callback != NULL)
5488     {
5489       async_client_callback = callback;
5490       async_client_context = context;
5491       if (!linux_async_pipe (1))
5492         {
5493           add_file_handler (linux_nat_event_pipe[0],
5494                             handle_target_event, NULL);
5495           /* There may be pending events to handle.  Tell the event loop
5496              to poll them.  */
5497           async_file_mark ();
5498         }
5499     }
5500   else
5501     {
5502       async_client_callback = callback;
5503       async_client_context = context;
5504       delete_file_handler (linux_nat_event_pipe[0]);
5505       linux_async_pipe (0);
5506     }
5507   return;
5508 }
5509
5510 /* Stop an LWP, and push a TARGET_SIGNAL_0 stop status if no other
5511    event came out.  */
5512
5513 static int
5514 linux_nat_stop_lwp (struct lwp_info *lwp, void *data)
5515 {
5516   if (!lwp->stopped)
5517     {
5518       ptid_t ptid = lwp->ptid;
5519
5520       if (debug_linux_nat)
5521         fprintf_unfiltered (gdb_stdlog,
5522                             "LNSL: running -> suspending %s\n",
5523                             target_pid_to_str (lwp->ptid));
5524
5525
5526       stop_callback (lwp, NULL);
5527       stop_wait_callback (lwp, NULL);
5528
5529       /* If the lwp exits while we try to stop it, there's nothing
5530          else to do.  */
5531       lwp = find_lwp_pid (ptid);
5532       if (lwp == NULL)
5533         return 0;
5534
5535       /* If we didn't collect any signal other than SIGSTOP while
5536          stopping the LWP, push a SIGNAL_0 event.  In either case, the
5537          event-loop will end up calling target_wait which will collect
5538          these.  */
5539       if (lwp->status == 0)
5540         lwp->status = W_STOPCODE (0);
5541       async_file_mark ();
5542     }
5543   else
5544     {
5545       /* Already known to be stopped; do nothing.  */
5546
5547       if (debug_linux_nat)
5548         {
5549           if (find_thread_ptid (lwp->ptid)->stop_requested)
5550             fprintf_unfiltered (gdb_stdlog,
5551                                 "LNSL: already stopped/stop_requested %s\n",
5552                                 target_pid_to_str (lwp->ptid));
5553           else
5554             fprintf_unfiltered (gdb_stdlog,
5555                                 "LNSL: already stopped/no "
5556                                 "stop_requested yet %s\n",
5557                                 target_pid_to_str (lwp->ptid));
5558         }
5559     }
5560   return 0;
5561 }
5562
5563 static void
5564 linux_nat_stop (ptid_t ptid)
5565 {
5566   if (non_stop)
5567     iterate_over_lwps (ptid, linux_nat_stop_lwp, NULL);
5568   else
5569     linux_ops->to_stop (ptid);
5570 }
5571
5572 static void
5573 linux_nat_close (int quitting)
5574 {
5575   /* Unregister from the event loop.  */
5576   if (target_is_async_p ())
5577     target_async (NULL, 0);
5578
5579   /* Reset the async_masking.  */
5580   linux_nat_async_mask_value = 1;
5581
5582   if (linux_ops->to_close)
5583     linux_ops->to_close (quitting);
5584 }
5585
5586 /* When requests are passed down from the linux-nat layer to the
5587    single threaded inf-ptrace layer, ptids of (lwpid,0,0) form are
5588    used.  The address space pointer is stored in the inferior object,
5589    but the common code that is passed such ptid can't tell whether
5590    lwpid is a "main" process id or not (it assumes so).  We reverse
5591    look up the "main" process id from the lwp here.  */
5592
5593 struct address_space *
5594 linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
5595 {
5596   struct lwp_info *lwp;
5597   struct inferior *inf;
5598   int pid;
5599
5600   pid = GET_LWP (ptid);
5601   if (GET_LWP (ptid) == 0)
5602     {
5603       /* An (lwpid,0,0) ptid.  Look up the lwp object to get at the
5604          tgid.  */
5605       lwp = find_lwp_pid (ptid);
5606       pid = GET_PID (lwp->ptid);
5607     }
5608   else
5609     {
5610       /* A (pid,lwpid,0) ptid.  */
5611       pid = GET_PID (ptid);
5612     }
5613
5614   inf = find_inferior_pid (pid);
5615   gdb_assert (inf != NULL);
5616   return inf->aspace;
5617 }
5618
5619 int
5620 linux_nat_core_of_thread_1 (ptid_t ptid)
5621 {
5622   struct cleanup *back_to;
5623   char *filename;
5624   FILE *f;
5625   char *content = NULL;
5626   char *p;
5627   char *ts = 0;
5628   int content_read = 0;
5629   int i;
5630   int core;
5631
5632   filename = xstrprintf ("/proc/%d/task/%ld/stat",
5633                          GET_PID (ptid), GET_LWP (ptid));
5634   back_to = make_cleanup (xfree, filename);
5635
5636   f = fopen (filename, "r");
5637   if (!f)
5638     {
5639       do_cleanups (back_to);
5640       return -1;
5641     }
5642
5643   make_cleanup_fclose (f);
5644
5645   for (;;)
5646     {
5647       int n;
5648
5649       content = xrealloc (content, content_read + 1024);
5650       n = fread (content + content_read, 1, 1024, f);
5651       content_read += n;
5652       if (n < 1024)
5653         {
5654           content[content_read] = '\0';
5655           break;
5656         }
5657     }
5658
5659   make_cleanup (xfree, content);
5660
5661   p = strchr (content, '(');
5662
5663   /* Skip ")".  */
5664   if (p != NULL)
5665     p = strchr (p, ')');
5666   if (p != NULL)
5667     p++;
5668
5669   /* If the first field after program name has index 0, then core number is
5670      the field with index 36.  There's no constant for that anywhere.  */
5671   if (p != NULL)
5672     p = strtok_r (p, " ", &ts);
5673   for (i = 0; p != NULL && i != 36; ++i)
5674     p = strtok_r (NULL, " ", &ts);
5675
5676   if (p == NULL || sscanf (p, "%d", &core) == 0)
5677     core = -1;
5678
5679   do_cleanups (back_to);
5680
5681   return core;
5682 }
5683
5684 /* Return the cached value of the processor core for thread PTID.  */
5685
5686 int
5687 linux_nat_core_of_thread (struct target_ops *ops, ptid_t ptid)
5688 {
5689   struct lwp_info *info = find_lwp_pid (ptid);
5690
5691   if (info)
5692     return info->core;
5693   return -1;
5694 }
5695
5696 void
5697 linux_nat_add_target (struct target_ops *t)
5698 {
5699   /* Save the provided single-threaded target.  We save this in a separate
5700      variable because another target we've inherited from (e.g. inf-ptrace)
5701      may have saved a pointer to T; we want to use it for the final
5702      process stratum target.  */
5703   linux_ops_saved = *t;
5704   linux_ops = &linux_ops_saved;
5705
5706   /* Override some methods for multithreading.  */
5707   t->to_create_inferior = linux_nat_create_inferior;
5708   t->to_attach = linux_nat_attach;
5709   t->to_detach = linux_nat_detach;
5710   t->to_resume = linux_nat_resume;
5711   t->to_wait = linux_nat_wait;
5712   t->to_pass_signals = linux_nat_pass_signals;
5713   t->to_xfer_partial = linux_nat_xfer_partial;
5714   t->to_kill = linux_nat_kill;
5715   t->to_mourn_inferior = linux_nat_mourn_inferior;
5716   t->to_thread_alive = linux_nat_thread_alive;
5717   t->to_pid_to_str = linux_nat_pid_to_str;
5718   t->to_thread_name = linux_nat_thread_name;
5719   t->to_has_thread_control = tc_schedlock;
5720   t->to_thread_address_space = linux_nat_thread_address_space;
5721   t->to_stopped_by_watchpoint = linux_nat_stopped_by_watchpoint;
5722   t->to_stopped_data_address = linux_nat_stopped_data_address;
5723
5724   t->to_can_async_p = linux_nat_can_async_p;
5725   t->to_is_async_p = linux_nat_is_async_p;
5726   t->to_supports_non_stop = linux_nat_supports_non_stop;
5727   t->to_async = linux_nat_async;
5728   t->to_async_mask = linux_nat_async_mask;
5729   t->to_terminal_inferior = linux_nat_terminal_inferior;
5730   t->to_terminal_ours = linux_nat_terminal_ours;
5731   t->to_close = linux_nat_close;
5732
5733   /* Methods for non-stop support.  */
5734   t->to_stop = linux_nat_stop;
5735
5736   t->to_supports_multi_process = linux_nat_supports_multi_process;
5737
5738   t->to_core_of_thread = linux_nat_core_of_thread;
5739
5740   /* We don't change the stratum; this target will sit at
5741      process_stratum and thread_db will set at thread_stratum.  This
5742      is a little strange, since this is a multi-threaded-capable
5743      target, but we want to be on the stack below thread_db, and we
5744      also want to be used for single-threaded processes.  */
5745
5746   add_target (t);
5747 }
5748
5749 /* Register a method to call whenever a new thread is attached.  */
5750 void
5751 linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
5752 {
5753   /* Save the pointer.  We only support a single registered instance
5754      of the GNU/Linux native target, so we do not need to map this to
5755      T.  */
5756   linux_nat_new_thread = new_thread;
5757 }
5758
5759 /* Register a method that converts a siginfo object between the layout
5760    that ptrace returns, and the layout in the architecture of the
5761    inferior.  */
5762 void
5763 linux_nat_set_siginfo_fixup (struct target_ops *t,
5764                              int (*siginfo_fixup) (struct siginfo *,
5765                                                    gdb_byte *,
5766                                                    int))
5767 {
5768   /* Save the pointer.  */
5769   linux_nat_siginfo_fixup = siginfo_fixup;
5770 }
5771
5772 /* Return the saved siginfo associated with PTID.  */
5773 struct siginfo *
5774 linux_nat_get_siginfo (ptid_t ptid)
5775 {
5776   struct lwp_info *lp = find_lwp_pid (ptid);
5777
5778   gdb_assert (lp != NULL);
5779
5780   return &lp->siginfo;
5781 }
5782
5783 /* Provide a prototype to silence -Wmissing-prototypes.  */
5784 extern initialize_file_ftype _initialize_linux_nat;
5785
5786 void
5787 _initialize_linux_nat (void)
5788 {
5789   add_info ("proc", linux_nat_info_proc_cmd, _("\
5790 Show /proc process information about any running process.\n\
5791 Specify any process id, or use the program being debugged by default.\n\
5792 Specify any of the following keywords for detailed info:\n\
5793   mappings -- list of mapped memory regions.\n\
5794   stat     -- list a bunch of random process info.\n\
5795   status   -- list a different bunch of random process info.\n\
5796   all      -- list all available /proc info."));
5797
5798   add_setshow_zinteger_cmd ("lin-lwp", class_maintenance,
5799                             &debug_linux_nat, _("\
5800 Set debugging of GNU/Linux lwp module."), _("\
5801 Show debugging of GNU/Linux lwp module."), _("\
5802 Enables printf debugging output."),
5803                             NULL,
5804                             show_debug_linux_nat,
5805                             &setdebuglist, &showdebuglist);
5806
5807   /* Save this mask as the default.  */
5808   sigprocmask (SIG_SETMASK, NULL, &normal_mask);
5809
5810   /* Install a SIGCHLD handler.  */
5811   sigchld_action.sa_handler = sigchld_handler;
5812   sigemptyset (&sigchld_action.sa_mask);
5813   sigchld_action.sa_flags = SA_RESTART;
5814
5815   /* Make it the default.  */
5816   sigaction (SIGCHLD, &sigchld_action, NULL);
5817
5818   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
5819   sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
5820   sigdelset (&suspend_mask, SIGCHLD);
5821
5822   sigemptyset (&blocked_mask);
5823
5824   add_setshow_boolean_cmd ("disable-randomization", class_support,
5825                            &disable_randomization, _("\
5826 Set disabling of debuggee's virtual address space randomization."), _("\
5827 Show disabling of debuggee's virtual address space randomization."), _("\
5828 When this mode is on (which is the default), randomization of the virtual\n\
5829 address space is disabled.  Standalone programs run with the randomization\n\
5830 enabled by default on some platforms."),
5831                            &set_disable_randomization,
5832                            &show_disable_randomization,
5833                            &setlist, &showlist);
5834 }
5835 \f
5836
5837 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
5838    the GNU/Linux Threads library and therefore doesn't really belong
5839    here.  */
5840
5841 /* Read variable NAME in the target and return its value if found.
5842    Otherwise return zero.  It is assumed that the type of the variable
5843    is `int'.  */
5844
5845 static int
5846 get_signo (const char *name)
5847 {
5848   struct minimal_symbol *ms;
5849   int signo;
5850
5851   ms = lookup_minimal_symbol (name, NULL, NULL);
5852   if (ms == NULL)
5853     return 0;
5854
5855   if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
5856                           sizeof (signo)) != 0)
5857     return 0;
5858
5859   return signo;
5860 }
5861
5862 /* Return the set of signals used by the threads library in *SET.  */
5863
5864 void
5865 lin_thread_get_thread_signals (sigset_t *set)
5866 {
5867   struct sigaction action;
5868   int restart, cancel;
5869
5870   sigemptyset (&blocked_mask);
5871   sigemptyset (set);
5872
5873   restart = get_signo ("__pthread_sig_restart");
5874   cancel = get_signo ("__pthread_sig_cancel");
5875
5876   /* LinuxThreads normally uses the first two RT signals, but in some legacy
5877      cases may use SIGUSR1/SIGUSR2.  NPTL always uses RT signals, but does
5878      not provide any way for the debugger to query the signal numbers -
5879      fortunately they don't change!  */
5880
5881   if (restart == 0)
5882     restart = __SIGRTMIN;
5883
5884   if (cancel == 0)
5885     cancel = __SIGRTMIN + 1;
5886
5887   sigaddset (set, restart);
5888   sigaddset (set, cancel);
5889
5890   /* The GNU/Linux Threads library makes terminating threads send a
5891      special "cancel" signal instead of SIGCHLD.  Make sure we catch
5892      those (to prevent them from terminating GDB itself, which is
5893      likely to be their default action) and treat them the same way as
5894      SIGCHLD.  */
5895
5896   action.sa_handler = sigchld_handler;
5897   sigemptyset (&action.sa_mask);
5898   action.sa_flags = SA_RESTART;
5899   sigaction (cancel, &action, NULL);
5900
5901   /* We block the "cancel" signal throughout this code ...  */
5902   sigaddset (&blocked_mask, cancel);
5903   sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
5904
5905   /* ... except during a sigsuspend.  */
5906   sigdelset (&suspend_mask, cancel);
5907 }