Add "executing" property to threads.
[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
4    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-fork.h"
34 #include "gdbthread.h"
35 #include "gdbcmd.h"
36 #include "regcache.h"
37 #include "regset.h"
38 #include "inf-ptrace.h"
39 #include "auxv.h"
40 #include <sys/param.h>          /* for MAXPATHLEN */
41 #include <sys/procfs.h>         /* for elf_gregset etc. */
42 #include "elf-bfd.h"            /* for elfcore_write_* */
43 #include "gregset.h"            /* for gregset */
44 #include "gdbcore.h"            /* for get_exec_file */
45 #include <ctype.h>              /* for isdigit */
46 #include "gdbthread.h"          /* for struct thread_info etc. */
47 #include "gdb_stat.h"           /* for struct stat */
48 #include <fcntl.h>              /* for O_RDONLY */
49 #include "inf-loop.h"
50 #include "event-loop.h"
51 #include "event-top.h"
52
53 /* This comment documents high-level logic of this file. 
54
55 Waiting for events in sync mode
56 ===============================
57
58 When waiting for an event in a specific thread, we just use waitpid, passing
59 the specific pid, and not passing WNOHANG.
60
61 When waiting for an event in all threads, waitpid is not quite good. Prior to
62 version 2.4, Linux can either wait for event in main thread, or in secondary
63 threads. (2.4 has the __WALL flag).  So, if we use blocking waitpid, we might
64 miss an event.  The solution is to use non-blocking waitpid, together with
65 sigsuspend.  First, we use non-blocking waitpid to get an event in the main 
66 process, if any. Second, we use non-blocking waitpid with the __WCLONED
67 flag to check for events in cloned processes.  If nothing is found, we use
68 sigsuspend to wait for SIGCHLD.  When SIGCHLD arrives, it means something
69 happened to a child process -- and SIGCHLD will be delivered both for events
70 in main debugged process and in cloned processes.  As soon as we know there's
71 an event, we get back to calling nonblocking waitpid with and without __WCLONED.
72
73 Note that SIGCHLD should be blocked between waitpid and sigsuspend calls,
74 so that we don't miss a signal. If SIGCHLD arrives in between, when it's
75 blocked, the signal becomes pending and sigsuspend immediately
76 notices it and returns.
77
78 Waiting for events in async mode
79 ================================
80
81 In async mode, GDB should always be ready to handle both user input and target
82 events, so neither blocking waitpid nor sigsuspend are viable
83 options. Instead, we should notify the GDB main event loop whenever there's
84 unprocessed event from the target.  The only way to notify this event loop is
85 to make it wait on input from a pipe, and write something to the pipe whenever
86 there's event. Obviously, if we fail to notify the event loop if there's
87 target event, it's bad.  If we notify the event loop when there's no event
88 from target, linux-nat.c will detect that there's no event, actually, and
89 report event of type TARGET_WAITKIND_IGNORE, but it will waste time and
90 better avoided.
91
92 The main design point is that every time GDB is outside linux-nat.c, we have a
93 SIGCHLD handler installed that is called when something happens to the target
94 and notifies the GDB event loop. Also, the event is extracted from the target
95 using waitpid and stored for future use.  Whenever GDB core decides to handle
96 the event, and calls into linux-nat.c, we disable SIGCHLD and process things
97 as in sync mode, except that before waitpid call we check if there are any
98 previously read events.
99
100 It could happen that during event processing, we'll try to get more events
101 than there are events in the local queue, which will result to waitpid call.
102 Those waitpid calls, while blocking, are guarantied to always have
103 something for waitpid to return.  E.g., stopping a thread with SIGSTOP, and
104 waiting for the lwp to stop.
105
106 The event loop is notified about new events using a pipe. SIGCHLD handler does
107 waitpid and writes the results in to a pipe. GDB event loop has the other end
108 of the pipe among the sources. When event loop starts to process the event
109 and calls a function in linux-nat.c, all events from the pipe are transferred
110 into a local queue and SIGCHLD is blocked. Further processing goes as in sync
111 mode. Before we return from linux_nat_wait, we transfer all unprocessed events
112 from local queue back to the pipe, so that when we get back to event loop,
113 event loop will notice there's something more to do.
114
115 SIGCHLD is blocked when we're inside target_wait, so that should we actually
116 want to wait for some more events, SIGCHLD handler does not steal them from
117 us. Technically, it would be possible to add new events to the local queue but
118 it's about the same amount of work as blocking SIGCHLD.
119
120 This moving of events from pipe into local queue and back into pipe when we
121 enter/leave linux-nat.c is somewhat ugly. Unfortunately, GDB event loop is
122 home-grown and incapable to wait on any queue.
123
124 Use of signals
125 ==============
126
127 We stop threads by sending a SIGSTOP.  The use of SIGSTOP instead of another
128 signal is not entirely significant; we just need for a signal to be delivered,
129 so that we can intercept it.  SIGSTOP's advantage is that it can not be
130 blocked.  A disadvantage is that it is not a real-time signal, so it can only
131 be queued once; we do not keep track of other sources of SIGSTOP.
132
133 Two other signals that can't be blocked are SIGCONT and SIGKILL.  But we can't
134 use them, because they have special behavior when the signal is generated -
135 not when it is delivered.  SIGCONT resumes the entire thread group and SIGKILL
136 kills the entire thread group.
137
138 A delivered SIGSTOP would stop the entire thread group, not just the thread we
139 tkill'd.  But we never let the SIGSTOP be delivered; we always intercept and 
140 cancel it (by PTRACE_CONT without passing SIGSTOP).
141
142 We could use a real-time signal instead.  This would solve those problems; we
143 could use PTRACE_GETSIGINFO to locate the specific stop signals sent by GDB.
144 But we would still have to have some support for SIGSTOP, since PTRACE_ATTACH
145 generates it, and there are races with trying to find a signal that is not
146 blocked.  */
147
148 #ifndef O_LARGEFILE
149 #define O_LARGEFILE 0
150 #endif
151
152 /* If the system headers did not provide the constants, hard-code the normal
153    values.  */
154 #ifndef PTRACE_EVENT_FORK
155
156 #define PTRACE_SETOPTIONS       0x4200
157 #define PTRACE_GETEVENTMSG      0x4201
158
159 /* options set using PTRACE_SETOPTIONS */
160 #define PTRACE_O_TRACESYSGOOD   0x00000001
161 #define PTRACE_O_TRACEFORK      0x00000002
162 #define PTRACE_O_TRACEVFORK     0x00000004
163 #define PTRACE_O_TRACECLONE     0x00000008
164 #define PTRACE_O_TRACEEXEC      0x00000010
165 #define PTRACE_O_TRACEVFORKDONE 0x00000020
166 #define PTRACE_O_TRACEEXIT      0x00000040
167
168 /* Wait extended result codes for the above trace options.  */
169 #define PTRACE_EVENT_FORK       1
170 #define PTRACE_EVENT_VFORK      2
171 #define PTRACE_EVENT_CLONE      3
172 #define PTRACE_EVENT_EXEC       4
173 #define PTRACE_EVENT_VFORK_DONE 5
174 #define PTRACE_EVENT_EXIT       6
175
176 #endif /* PTRACE_EVENT_FORK */
177
178 /* We can't always assume that this flag is available, but all systems
179    with the ptrace event handlers also have __WALL, so it's safe to use
180    here.  */
181 #ifndef __WALL
182 #define __WALL          0x40000000 /* Wait for any child.  */
183 #endif
184
185 #ifndef PTRACE_GETSIGINFO
186 #define PTRACE_GETSIGINFO    0x4202
187 #endif
188
189 /* The single-threaded native GNU/Linux target_ops.  We save a pointer for
190    the use of the multi-threaded target.  */
191 static struct target_ops *linux_ops;
192 static struct target_ops linux_ops_saved;
193
194 /* The method to call, if any, when a new thread is attached.  */
195 static void (*linux_nat_new_thread) (ptid_t);
196
197 /* The saved to_xfer_partial method, inherited from inf-ptrace.c.
198    Called by our to_xfer_partial.  */
199 static LONGEST (*super_xfer_partial) (struct target_ops *, 
200                                       enum target_object,
201                                       const char *, gdb_byte *, 
202                                       const gdb_byte *,
203                                       ULONGEST, LONGEST);
204
205 static int debug_linux_nat;
206 static void
207 show_debug_linux_nat (struct ui_file *file, int from_tty,
208                       struct cmd_list_element *c, const char *value)
209 {
210   fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
211                     value);
212 }
213
214 static int debug_linux_nat_async = 0;
215 static void
216 show_debug_linux_nat_async (struct ui_file *file, int from_tty,
217                             struct cmd_list_element *c, const char *value)
218 {
219   fprintf_filtered (file, _("Debugging of GNU/Linux async lwp module is %s.\n"),
220                     value);
221 }
222
223 static int linux_parent_pid;
224
225 struct simple_pid_list
226 {
227   int pid;
228   int status;
229   struct simple_pid_list *next;
230 };
231 struct simple_pid_list *stopped_pids;
232
233 /* This variable is a tri-state flag: -1 for unknown, 0 if PTRACE_O_TRACEFORK
234    can not be used, 1 if it can.  */
235
236 static int linux_supports_tracefork_flag = -1;
237
238 /* If we have PTRACE_O_TRACEFORK, this flag indicates whether we also have
239    PTRACE_O_TRACEVFORKDONE.  */
240
241 static int linux_supports_tracevforkdone_flag = -1;
242
243 /* Async mode support */
244
245 /* True if async mode is currently on.  */
246 static int linux_nat_async_enabled;
247
248 /* Zero if the async mode, although enabled, is masked, which means
249    linux_nat_wait should behave as if async mode was off.  */
250 static int linux_nat_async_mask_value = 1;
251
252 /* The read/write ends of the pipe registered as waitable file in the
253    event loop.  */
254 static int linux_nat_event_pipe[2] = { -1, -1 };
255
256 /* Number of queued events in the pipe.  */
257 static volatile int linux_nat_num_queued_events;
258
259 /* The possible SIGCHLD handling states.  */
260
261 enum sigchld_state
262 {
263   /* SIGCHLD disabled, with action set to sigchld_handler, for the
264      sigsuspend in linux_nat_wait.  */
265   sigchld_sync,
266   /* SIGCHLD enabled, with action set to async_sigchld_handler.  */
267   sigchld_async,
268   /* Set SIGCHLD to default action.  Used while creating an
269      inferior.  */
270   sigchld_default
271 };
272
273 /* The current SIGCHLD handling state.  */
274 static enum sigchld_state linux_nat_async_events_state;
275
276 static enum sigchld_state linux_nat_async_events (enum sigchld_state enable);
277 static void pipe_to_local_event_queue (void);
278 static void local_event_queue_to_pipe (void);
279 static void linux_nat_event_pipe_push (int pid, int status, int options);
280 static int linux_nat_event_pipe_pop (int* ptr_status, int* ptr_options);
281 static void linux_nat_set_async_mode (int on);
282 static void linux_nat_async (void (*callback)
283                              (enum inferior_event_type event_type, void *context),
284                              void *context);
285 static int linux_nat_async_mask (int mask);
286 static int kill_lwp (int lwpid, int signo);
287
288 /* Captures the result of a successful waitpid call, along with the
289    options used in that call.  */
290 struct waitpid_result
291 {
292   int pid;
293   int status;
294   int options;
295   struct waitpid_result *next;
296 };
297
298 /* A singly-linked list of the results of the waitpid calls performed
299    in the async SIGCHLD handler.  */
300 static struct waitpid_result *waitpid_queue = NULL;
301
302 static int
303 queued_waitpid (int pid, int *status, int flags)
304 {
305   struct waitpid_result *msg = waitpid_queue, *prev = NULL;
306
307   if (debug_linux_nat_async)
308     fprintf_unfiltered (gdb_stdlog,
309                         "\
310 QWPID: linux_nat_async_events_state(%d), linux_nat_num_queued_events(%d)\n",
311                         linux_nat_async_events_state,
312                         linux_nat_num_queued_events);
313
314   if (flags & __WALL)
315     {
316       for (; msg; prev = msg, msg = msg->next)
317         if (pid == -1 || pid == msg->pid)
318           break;
319     }
320   else if (flags & __WCLONE)
321     {
322       for (; msg; prev = msg, msg = msg->next)
323         if (msg->options & __WCLONE
324             && (pid == -1 || pid == msg->pid))
325           break;
326     }
327   else
328     {
329       for (; msg; prev = msg, msg = msg->next)
330         if ((msg->options & __WCLONE) == 0
331             && (pid == -1 || pid == msg->pid))
332           break;
333     }
334
335   if (msg)
336     {
337       int pid;
338
339       if (prev)
340         prev->next = msg->next;
341       else
342         waitpid_queue = msg->next;
343
344       msg->next = NULL;
345       if (status)
346         *status = msg->status;
347       pid = msg->pid;
348
349       if (debug_linux_nat_async)
350         fprintf_unfiltered (gdb_stdlog, "QWPID: pid(%d), status(%x)\n",
351                             pid, msg->status);
352       xfree (msg);
353
354       return pid;
355     }
356
357   if (debug_linux_nat_async)
358     fprintf_unfiltered (gdb_stdlog, "QWPID: miss\n");
359
360   if (status)
361     *status = 0;
362   return -1;
363 }
364
365 static void
366 push_waitpid (int pid, int status, int options)
367 {
368   struct waitpid_result *event, *new_event;
369
370   new_event = xmalloc (sizeof (*new_event));
371   new_event->pid = pid;
372   new_event->status = status;
373   new_event->options = options;
374   new_event->next = NULL;
375
376   if (waitpid_queue)
377     {
378       for (event = waitpid_queue;
379            event && event->next;
380            event = event->next)
381         ;
382
383       event->next = new_event;
384     }
385   else
386     waitpid_queue = new_event;
387 }
388
389 /* Drain all queued events of PID.  If PID is -1, the effect is of
390    draining all events.  */
391 static void
392 drain_queued_events (int pid)
393 {
394   while (queued_waitpid (pid, NULL, __WALL) != -1)
395     ;
396 }
397
398 \f
399 /* Trivial list manipulation functions to keep track of a list of
400    new stopped processes.  */
401 static void
402 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
403 {
404   struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
405   new_pid->pid = pid;
406   new_pid->status = status;
407   new_pid->next = *listp;
408   *listp = new_pid;
409 }
410
411 static int
412 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *status)
413 {
414   struct simple_pid_list **p;
415
416   for (p = listp; *p != NULL; p = &(*p)->next)
417     if ((*p)->pid == pid)
418       {
419         struct simple_pid_list *next = (*p)->next;
420         *status = (*p)->status;
421         xfree (*p);
422         *p = next;
423         return 1;
424       }
425   return 0;
426 }
427
428 static void
429 linux_record_stopped_pid (int pid, int status)
430 {
431   add_to_pid_list (&stopped_pids, pid, status);
432 }
433
434 \f
435 /* A helper function for linux_test_for_tracefork, called after fork ().  */
436
437 static void
438 linux_tracefork_child (void)
439 {
440   int ret;
441
442   ptrace (PTRACE_TRACEME, 0, 0, 0);
443   kill (getpid (), SIGSTOP);
444   fork ();
445   _exit (0);
446 }
447
448 /* Wrapper function for waitpid which handles EINTR, and checks for
449    locally queued events.  */
450
451 static int
452 my_waitpid (int pid, int *status, int flags)
453 {
454   int ret;
455
456   /* There should be no concurrent calls to waitpid.  */
457   gdb_assert (linux_nat_async_events_state == sigchld_sync);
458
459   ret = queued_waitpid (pid, status, flags);
460   if (ret != -1)
461     return ret;
462
463   do
464     {
465       ret = waitpid (pid, status, flags);
466     }
467   while (ret == -1 && errno == EINTR);
468
469   return ret;
470 }
471
472 /* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
473
474    First, we try to enable fork tracing on ORIGINAL_PID.  If this fails,
475    we know that the feature is not available.  This may change the tracing
476    options for ORIGINAL_PID, but we'll be setting them shortly anyway.
477
478    However, if it succeeds, we don't know for sure that the feature is
479    available; old versions of PTRACE_SETOPTIONS ignored unknown options.  We
480    create a child process, attach to it, use PTRACE_SETOPTIONS to enable
481    fork tracing, and let it fork.  If the process exits, we assume that we
482    can't use TRACEFORK; if we get the fork notification, and we can extract
483    the new child's PID, then we assume that we can.  */
484
485 static void
486 linux_test_for_tracefork (int original_pid)
487 {
488   int child_pid, ret, status;
489   long second_pid;
490
491   linux_supports_tracefork_flag = 0;
492   linux_supports_tracevforkdone_flag = 0;
493
494   ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
495   if (ret != 0)
496     return;
497
498   child_pid = fork ();
499   if (child_pid == -1)
500     perror_with_name (("fork"));
501
502   if (child_pid == 0)
503     linux_tracefork_child ();
504
505   ret = my_waitpid (child_pid, &status, 0);
506   if (ret == -1)
507     perror_with_name (("waitpid"));
508   else if (ret != child_pid)
509     error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret);
510   if (! WIFSTOPPED (status))
511     error (_("linux_test_for_tracefork: waitpid: unexpected status %d."), status);
512
513   ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
514   if (ret != 0)
515     {
516       ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
517       if (ret != 0)
518         {
519           warning (_("linux_test_for_tracefork: failed to kill child"));
520           return;
521         }
522
523       ret = my_waitpid (child_pid, &status, 0);
524       if (ret != child_pid)
525         warning (_("linux_test_for_tracefork: failed to wait for killed child"));
526       else if (!WIFSIGNALED (status))
527         warning (_("linux_test_for_tracefork: unexpected wait status 0x%x from "
528                  "killed child"), status);
529
530       return;
531     }
532
533   /* Check whether PTRACE_O_TRACEVFORKDONE is available.  */
534   ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
535                 PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
536   linux_supports_tracevforkdone_flag = (ret == 0);
537
538   ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
539   if (ret != 0)
540     warning (_("linux_test_for_tracefork: failed to resume child"));
541
542   ret = my_waitpid (child_pid, &status, 0);
543
544   if (ret == child_pid && WIFSTOPPED (status)
545       && status >> 16 == PTRACE_EVENT_FORK)
546     {
547       second_pid = 0;
548       ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
549       if (ret == 0 && second_pid != 0)
550         {
551           int second_status;
552
553           linux_supports_tracefork_flag = 1;
554           my_waitpid (second_pid, &second_status, 0);
555           ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
556           if (ret != 0)
557             warning (_("linux_test_for_tracefork: failed to kill second child"));
558           my_waitpid (second_pid, &status, 0);
559         }
560     }
561   else
562     warning (_("linux_test_for_tracefork: unexpected result from waitpid "
563              "(%d, status 0x%x)"), ret, status);
564
565   ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
566   if (ret != 0)
567     warning (_("linux_test_for_tracefork: failed to kill child"));
568   my_waitpid (child_pid, &status, 0);
569 }
570
571 /* Return non-zero iff we have tracefork functionality available.
572    This function also sets linux_supports_tracefork_flag.  */
573
574 static int
575 linux_supports_tracefork (int pid)
576 {
577   if (linux_supports_tracefork_flag == -1)
578     linux_test_for_tracefork (pid);
579   return linux_supports_tracefork_flag;
580 }
581
582 static int
583 linux_supports_tracevforkdone (int pid)
584 {
585   if (linux_supports_tracefork_flag == -1)
586     linux_test_for_tracefork (pid);
587   return linux_supports_tracevforkdone_flag;
588 }
589
590 \f
591 void
592 linux_enable_event_reporting (ptid_t ptid)
593 {
594   int pid = ptid_get_lwp (ptid);
595   int options;
596
597   if (pid == 0)
598     pid = ptid_get_pid (ptid);
599
600   if (! linux_supports_tracefork (pid))
601     return;
602
603   options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC
604     | PTRACE_O_TRACECLONE;
605   if (linux_supports_tracevforkdone (pid))
606     options |= PTRACE_O_TRACEVFORKDONE;
607
608   /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
609      read-only process state.  */
610
611   ptrace (PTRACE_SETOPTIONS, pid, 0, options);
612 }
613
614 static void
615 linux_child_post_attach (int pid)
616 {
617   linux_enable_event_reporting (pid_to_ptid (pid));
618   check_for_thread_db ();
619 }
620
621 static void
622 linux_child_post_startup_inferior (ptid_t ptid)
623 {
624   linux_enable_event_reporting (ptid);
625   check_for_thread_db ();
626 }
627
628 static int
629 linux_child_follow_fork (struct target_ops *ops, int follow_child)
630 {
631   ptid_t last_ptid;
632   struct target_waitstatus last_status;
633   int has_vforked;
634   int parent_pid, child_pid;
635
636   if (target_can_async_p ())
637     target_async (NULL, 0);
638
639   get_last_target_status (&last_ptid, &last_status);
640   has_vforked = (last_status.kind == TARGET_WAITKIND_VFORKED);
641   parent_pid = ptid_get_lwp (last_ptid);
642   if (parent_pid == 0)
643     parent_pid = ptid_get_pid (last_ptid);
644   child_pid = last_status.value.related_pid;
645
646   if (! follow_child)
647     {
648       /* We're already attached to the parent, by default. */
649
650       /* Before detaching from the child, remove all breakpoints from
651          it.  (This won't actually modify the breakpoint list, but will
652          physically remove the breakpoints from the child.) */
653       /* If we vforked this will remove the breakpoints from the parent
654          also, but they'll be reinserted below.  */
655       detach_breakpoints (child_pid);
656
657       /* Detach new forked process?  */
658       if (detach_fork)
659         {
660           if (info_verbose || debug_linux_nat)
661             {
662               target_terminal_ours ();
663               fprintf_filtered (gdb_stdlog,
664                                 "Detaching after fork from child process %d.\n",
665                                 child_pid);
666             }
667
668           ptrace (PTRACE_DETACH, child_pid, 0, 0);
669         }
670       else
671         {
672           struct fork_info *fp;
673           /* Retain child fork in ptrace (stopped) state.  */
674           fp = find_fork_pid (child_pid);
675           if (!fp)
676             fp = add_fork (child_pid);
677           fork_save_infrun_state (fp, 0);
678         }
679
680       if (has_vforked)
681         {
682           gdb_assert (linux_supports_tracefork_flag >= 0);
683           if (linux_supports_tracevforkdone (0))
684             {
685               int status;
686
687               ptrace (PTRACE_CONT, parent_pid, 0, 0);
688               my_waitpid (parent_pid, &status, __WALL);
689               if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
690                 warning (_("Unexpected waitpid result %06x when waiting for "
691                          "vfork-done"), status);
692             }
693           else
694             {
695               /* We can't insert breakpoints until the child has
696                  finished with the shared memory region.  We need to
697                  wait until that happens.  Ideal would be to just
698                  call:
699                  - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
700                  - waitpid (parent_pid, &status, __WALL);
701                  However, most architectures can't handle a syscall
702                  being traced on the way out if it wasn't traced on
703                  the way in.
704
705                  We might also think to loop, continuing the child
706                  until it exits or gets a SIGTRAP.  One problem is
707                  that the child might call ptrace with PTRACE_TRACEME.
708
709                  There's no simple and reliable way to figure out when
710                  the vforked child will be done with its copy of the
711                  shared memory.  We could step it out of the syscall,
712                  two instructions, let it go, and then single-step the
713                  parent once.  When we have hardware single-step, this
714                  would work; with software single-step it could still
715                  be made to work but we'd have to be able to insert
716                  single-step breakpoints in the child, and we'd have
717                  to insert -just- the single-step breakpoint in the
718                  parent.  Very awkward.
719
720                  In the end, the best we can do is to make sure it
721                  runs for a little while.  Hopefully it will be out of
722                  range of any breakpoints we reinsert.  Usually this
723                  is only the single-step breakpoint at vfork's return
724                  point.  */
725
726               usleep (10000);
727             }
728
729           /* Since we vforked, breakpoints were removed in the parent
730              too.  Put them back.  */
731           reattach_breakpoints (parent_pid);
732         }
733     }
734   else
735     {
736       char child_pid_spelling[40];
737
738       /* Needed to keep the breakpoint lists in sync.  */
739       if (! has_vforked)
740         detach_breakpoints (child_pid);
741
742       /* Before detaching from the parent, remove all breakpoints from it. */
743       remove_breakpoints ();
744
745       if (info_verbose || debug_linux_nat)
746         {
747           target_terminal_ours ();
748           fprintf_filtered (gdb_stdlog,
749                             "Attaching after fork to child process %d.\n",
750                             child_pid);
751         }
752
753       /* If we're vforking, we may want to hold on to the parent until
754          the child exits or execs.  At exec time we can remove the old
755          breakpoints from the parent and detach it; at exit time we
756          could do the same (or even, sneakily, resume debugging it - the
757          child's exec has failed, or something similar).
758
759          This doesn't clean up "properly", because we can't call
760          target_detach, but that's OK; if the current target is "child",
761          then it doesn't need any further cleanups, and lin_lwp will
762          generally not encounter vfork (vfork is defined to fork
763          in libpthread.so).
764
765          The holding part is very easy if we have VFORKDONE events;
766          but keeping track of both processes is beyond GDB at the
767          moment.  So we don't expose the parent to the rest of GDB.
768          Instead we quietly hold onto it until such time as we can
769          safely resume it.  */
770
771       if (has_vforked)
772         linux_parent_pid = parent_pid;
773       else if (!detach_fork)
774         {
775           struct fork_info *fp;
776           /* Retain parent fork in ptrace (stopped) state.  */
777           fp = find_fork_pid (parent_pid);
778           if (!fp)
779             fp = add_fork (parent_pid);
780           fork_save_infrun_state (fp, 0);
781         }
782       else
783         target_detach (NULL, 0);
784
785       inferior_ptid = ptid_build (child_pid, child_pid, 0);
786
787       /* Reinstall ourselves, since we might have been removed in
788          target_detach (which does other necessary cleanup).  */
789
790       push_target (ops);
791       linux_nat_switch_fork (inferior_ptid);
792       check_for_thread_db ();
793
794       /* Reset breakpoints in the child as appropriate.  */
795       follow_inferior_reset_breakpoints ();
796     }
797
798   if (target_can_async_p ())
799     target_async (inferior_event_handler, 0);
800
801   return 0;
802 }
803
804 \f
805 static void
806 linux_child_insert_fork_catchpoint (int pid)
807 {
808   if (! linux_supports_tracefork (pid))
809     error (_("Your system does not support fork catchpoints."));
810 }
811
812 static void
813 linux_child_insert_vfork_catchpoint (int pid)
814 {
815   if (!linux_supports_tracefork (pid))
816     error (_("Your system does not support vfork catchpoints."));
817 }
818
819 static void
820 linux_child_insert_exec_catchpoint (int pid)
821 {
822   if (!linux_supports_tracefork (pid))
823     error (_("Your system does not support exec catchpoints."));
824 }
825
826 /* On GNU/Linux there are no real LWP's.  The closest thing to LWP's
827    are processes sharing the same VM space.  A multi-threaded process
828    is basically a group of such processes.  However, such a grouping
829    is almost entirely a user-space issue; the kernel doesn't enforce
830    such a grouping at all (this might change in the future).  In
831    general, we'll rely on the threads library (i.e. the GNU/Linux
832    Threads library) to provide such a grouping.
833
834    It is perfectly well possible to write a multi-threaded application
835    without the assistance of a threads library, by using the clone
836    system call directly.  This module should be able to give some
837    rudimentary support for debugging such applications if developers
838    specify the CLONE_PTRACE flag in the clone system call, and are
839    using the Linux kernel 2.4 or above.
840
841    Note that there are some peculiarities in GNU/Linux that affect
842    this code:
843
844    - In general one should specify the __WCLONE flag to waitpid in
845      order to make it report events for any of the cloned processes
846      (and leave it out for the initial process).  However, if a cloned
847      process has exited the exit status is only reported if the
848      __WCLONE flag is absent.  Linux kernel 2.4 has a __WALL flag, but
849      we cannot use it since GDB must work on older systems too.
850
851    - When a traced, cloned process exits and is waited for by the
852      debugger, the kernel reassigns it to the original parent and
853      keeps it around as a "zombie".  Somehow, the GNU/Linux Threads
854      library doesn't notice this, which leads to the "zombie problem":
855      When debugged a multi-threaded process that spawns a lot of
856      threads will run out of processes, even if the threads exit,
857      because the "zombies" stay around.  */
858
859 /* List of known LWPs.  */
860 struct lwp_info *lwp_list;
861
862 /* Number of LWPs in the list.  */
863 static int num_lwps;
864 \f
865
866 /* Original signal mask.  */
867 static sigset_t normal_mask;
868
869 /* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
870    _initialize_linux_nat.  */
871 static sigset_t suspend_mask;
872
873 /* SIGCHLD action for synchronous mode.  */
874 struct sigaction sync_sigchld_action;
875
876 /* SIGCHLD action for asynchronous mode.  */
877 static struct sigaction async_sigchld_action;
878
879 /* SIGCHLD default action, to pass to new inferiors.  */
880 static struct sigaction sigchld_default_action;
881 \f
882
883 /* Prototypes for local functions.  */
884 static int stop_wait_callback (struct lwp_info *lp, void *data);
885 static int linux_nat_thread_alive (ptid_t ptid);
886 static char *linux_child_pid_to_exec_file (int pid);
887 static int cancel_breakpoint (struct lwp_info *lp);
888
889 \f
890 /* Convert wait status STATUS to a string.  Used for printing debug
891    messages only.  */
892
893 static char *
894 status_to_str (int status)
895 {
896   static char buf[64];
897
898   if (WIFSTOPPED (status))
899     snprintf (buf, sizeof (buf), "%s (stopped)",
900               strsignal (WSTOPSIG (status)));
901   else if (WIFSIGNALED (status))
902     snprintf (buf, sizeof (buf), "%s (terminated)",
903               strsignal (WSTOPSIG (status)));
904   else
905     snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
906
907   return buf;
908 }
909
910 /* Initialize the list of LWPs.  Note that this module, contrary to
911    what GDB's generic threads layer does for its thread list,
912    re-initializes the LWP lists whenever we mourn or detach (which
913    doesn't involve mourning) the inferior.  */
914
915 static void
916 init_lwp_list (void)
917 {
918   struct lwp_info *lp, *lpnext;
919
920   for (lp = lwp_list; lp; lp = lpnext)
921     {
922       lpnext = lp->next;
923       xfree (lp);
924     }
925
926   lwp_list = NULL;
927   num_lwps = 0;
928 }
929
930 /* Add the LWP specified by PID to the list.  Return a pointer to the
931    structure describing the new LWP.  The LWP should already be stopped
932    (with an exception for the very first LWP).  */
933
934 static struct lwp_info *
935 add_lwp (ptid_t ptid)
936 {
937   struct lwp_info *lp;
938
939   gdb_assert (is_lwp (ptid));
940
941   lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
942
943   memset (lp, 0, sizeof (struct lwp_info));
944
945   lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
946
947   lp->ptid = ptid;
948
949   lp->next = lwp_list;
950   lwp_list = lp;
951   ++num_lwps;
952
953   if (num_lwps > 1 && linux_nat_new_thread != NULL)
954     linux_nat_new_thread (ptid);
955
956   return lp;
957 }
958
959 /* Remove the LWP specified by PID from the list.  */
960
961 static void
962 delete_lwp (ptid_t ptid)
963 {
964   struct lwp_info *lp, *lpprev;
965
966   lpprev = NULL;
967
968   for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
969     if (ptid_equal (lp->ptid, ptid))
970       break;
971
972   if (!lp)
973     return;
974
975   num_lwps--;
976
977   if (lpprev)
978     lpprev->next = lp->next;
979   else
980     lwp_list = lp->next;
981
982   xfree (lp);
983 }
984
985 /* Return a pointer to the structure describing the LWP corresponding
986    to PID.  If no corresponding LWP could be found, return NULL.  */
987
988 static struct lwp_info *
989 find_lwp_pid (ptid_t ptid)
990 {
991   struct lwp_info *lp;
992   int lwp;
993
994   if (is_lwp (ptid))
995     lwp = GET_LWP (ptid);
996   else
997     lwp = GET_PID (ptid);
998
999   for (lp = lwp_list; lp; lp = lp->next)
1000     if (lwp == GET_LWP (lp->ptid))
1001       return lp;
1002
1003   return NULL;
1004 }
1005
1006 /* Call CALLBACK with its second argument set to DATA for every LWP in
1007    the list.  If CALLBACK returns 1 for a particular LWP, return a
1008    pointer to the structure describing that LWP immediately.
1009    Otherwise return NULL.  */
1010
1011 struct lwp_info *
1012 iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
1013 {
1014   struct lwp_info *lp, *lpnext;
1015
1016   for (lp = lwp_list; lp; lp = lpnext)
1017     {
1018       lpnext = lp->next;
1019       if ((*callback) (lp, data))
1020         return lp;
1021     }
1022
1023   return NULL;
1024 }
1025
1026 /* Update our internal state when changing from one fork (checkpoint,
1027    et cetera) to another indicated by NEW_PTID.  We can only switch
1028    single-threaded applications, so we only create one new LWP, and
1029    the previous list is discarded.  */
1030
1031 void
1032 linux_nat_switch_fork (ptid_t new_ptid)
1033 {
1034   struct lwp_info *lp;
1035
1036   init_thread_list ();
1037   init_lwp_list ();
1038   lp = add_lwp (new_ptid);
1039   add_thread_silent (new_ptid);
1040   lp->stopped = 1;
1041 }
1042
1043 /* Record a PTID for later deletion.  */
1044
1045 struct saved_ptids
1046 {
1047   ptid_t ptid;
1048   struct saved_ptids *next;
1049 };
1050 static struct saved_ptids *threads_to_delete;
1051
1052 static void
1053 record_dead_thread (ptid_t ptid)
1054 {
1055   struct saved_ptids *p = xmalloc (sizeof (struct saved_ptids));
1056   p->ptid = ptid;
1057   p->next = threads_to_delete;
1058   threads_to_delete = p;
1059 }
1060
1061 /* Delete any dead threads which are not the current thread.  */
1062
1063 static void
1064 prune_lwps (void)
1065 {
1066   struct saved_ptids **p = &threads_to_delete;
1067
1068   while (*p)
1069     if (! ptid_equal ((*p)->ptid, inferior_ptid))
1070       {
1071         struct saved_ptids *tmp = *p;
1072         delete_thread (tmp->ptid);
1073         *p = tmp->next;
1074         xfree (tmp);
1075       }
1076     else
1077       p = &(*p)->next;
1078 }
1079
1080 /* Handle the exit of a single thread LP.  */
1081
1082 static void
1083 exit_lwp (struct lwp_info *lp)
1084 {
1085   struct thread_info *th = find_thread_pid (lp->ptid);
1086
1087   if (th)
1088     {
1089       if (print_thread_events)
1090         printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
1091
1092       /* Core GDB cannot deal with us deleting the current thread.  */
1093       if (!ptid_equal (lp->ptid, inferior_ptid))
1094         delete_thread (lp->ptid);
1095       else
1096         record_dead_thread (lp->ptid);
1097     }
1098
1099   delete_lwp (lp->ptid);
1100 }
1101
1102 /* Detect `T (stopped)' in `/proc/PID/status'.
1103    Other states including `T (tracing stop)' are reported as false.  */
1104
1105 static int
1106 pid_is_stopped (pid_t pid)
1107 {
1108   FILE *status_file;
1109   char buf[100];
1110   int retval = 0;
1111
1112   snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
1113   status_file = fopen (buf, "r");
1114   if (status_file != NULL)
1115     {
1116       int have_state = 0;
1117
1118       while (fgets (buf, sizeof (buf), status_file))
1119         {
1120           if (strncmp (buf, "State:", 6) == 0)
1121             {
1122               have_state = 1;
1123               break;
1124             }
1125         }
1126       if (have_state && strstr (buf, "T (stopped)") != NULL)
1127         retval = 1;
1128       fclose (status_file);
1129     }
1130   return retval;
1131 }
1132
1133 /* Wait for the LWP specified by LP, which we have just attached to.
1134    Returns a wait status for that LWP, to cache.  */
1135
1136 static int
1137 linux_nat_post_attach_wait (ptid_t ptid, int first, int *cloned,
1138                             int *signalled)
1139 {
1140   pid_t new_pid, pid = GET_LWP (ptid);
1141   int status;
1142
1143   if (pid_is_stopped (pid))
1144     {
1145       if (debug_linux_nat)
1146         fprintf_unfiltered (gdb_stdlog,
1147                             "LNPAW: Attaching to a stopped process\n");
1148
1149       /* The process is definitely stopped.  It is in a job control
1150          stop, unless the kernel predates the TASK_STOPPED /
1151          TASK_TRACED distinction, in which case it might be in a
1152          ptrace stop.  Make sure it is in a ptrace stop; from there we
1153          can kill it, signal it, et cetera.
1154
1155          First make sure there is a pending SIGSTOP.  Since we are
1156          already attached, the process can not transition from stopped
1157          to running without a PTRACE_CONT; so we know this signal will
1158          go into the queue.  The SIGSTOP generated by PTRACE_ATTACH is
1159          probably already in the queue (unless this kernel is old
1160          enough to use TASK_STOPPED for ptrace stops); but since SIGSTOP
1161          is not an RT signal, it can only be queued once.  */
1162       kill_lwp (pid, SIGSTOP);
1163
1164       /* Finally, resume the stopped process.  This will deliver the SIGSTOP
1165          (or a higher priority signal, just like normal PTRACE_ATTACH).  */
1166       ptrace (PTRACE_CONT, pid, 0, 0);
1167     }
1168
1169   /* Make sure the initial process is stopped.  The user-level threads
1170      layer might want to poke around in the inferior, and that won't
1171      work if things haven't stabilized yet.  */
1172   new_pid = my_waitpid (pid, &status, 0);
1173   if (new_pid == -1 && errno == ECHILD)
1174     {
1175       if (first)
1176         warning (_("%s is a cloned process"), target_pid_to_str (ptid));
1177
1178       /* Try again with __WCLONE to check cloned processes.  */
1179       new_pid = my_waitpid (pid, &status, __WCLONE);
1180       *cloned = 1;
1181     }
1182
1183   gdb_assert (pid == new_pid && WIFSTOPPED (status));
1184
1185   if (WSTOPSIG (status) != SIGSTOP)
1186     {
1187       *signalled = 1;
1188       if (debug_linux_nat)
1189         fprintf_unfiltered (gdb_stdlog,
1190                             "LNPAW: Received %s after attaching\n",
1191                             status_to_str (status));
1192     }
1193
1194   return status;
1195 }
1196
1197 /* Attach to the LWP specified by PID.  Return 0 if successful or -1
1198    if the new LWP could not be attached.  */
1199
1200 int
1201 lin_lwp_attach_lwp (ptid_t ptid)
1202 {
1203   struct lwp_info *lp;
1204   enum sigchld_state async_events_original_state;
1205
1206   gdb_assert (is_lwp (ptid));
1207
1208   async_events_original_state = linux_nat_async_events (sigchld_sync);
1209
1210   lp = find_lwp_pid (ptid);
1211
1212   /* We assume that we're already attached to any LWP that has an id
1213      equal to the overall process id, and to any LWP that is already
1214      in our list of LWPs.  If we're not seeing exit events from threads
1215      and we've had PID wraparound since we last tried to stop all threads,
1216      this assumption might be wrong; fortunately, this is very unlikely
1217      to happen.  */
1218   if (GET_LWP (ptid) != GET_PID (ptid) && lp == NULL)
1219     {
1220       int status, cloned = 0, signalled = 0;
1221
1222       if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
1223         {
1224           /* If we fail to attach to the thread, issue a warning,
1225              but continue.  One way this can happen is if thread
1226              creation is interrupted; as of Linux kernel 2.6.19, a
1227              bug may place threads in the thread list and then fail
1228              to create them.  */
1229           warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
1230                    safe_strerror (errno));
1231           return -1;
1232         }
1233
1234       if (debug_linux_nat)
1235         fprintf_unfiltered (gdb_stdlog,
1236                             "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
1237                             target_pid_to_str (ptid));
1238
1239       status = linux_nat_post_attach_wait (ptid, 0, &cloned, &signalled);
1240       lp = add_lwp (ptid);
1241       lp->stopped = 1;
1242       lp->cloned = cloned;
1243       lp->signalled = signalled;
1244       if (WSTOPSIG (status) != SIGSTOP)
1245         {
1246           lp->resumed = 1;
1247           lp->status = status;
1248         }
1249
1250       target_post_attach (GET_LWP (lp->ptid));
1251
1252       if (debug_linux_nat)
1253         {
1254           fprintf_unfiltered (gdb_stdlog,
1255                               "LLAL: waitpid %s received %s\n",
1256                               target_pid_to_str (ptid),
1257                               status_to_str (status));
1258         }
1259     }
1260   else
1261     {
1262       /* We assume that the LWP representing the original process is
1263          already stopped.  Mark it as stopped in the data structure
1264          that the GNU/linux ptrace layer uses to keep track of
1265          threads.  Note that this won't have already been done since
1266          the main thread will have, we assume, been stopped by an
1267          attach from a different layer.  */
1268       if (lp == NULL)
1269         lp = add_lwp (ptid);
1270       lp->stopped = 1;
1271     }
1272
1273   linux_nat_async_events (async_events_original_state);
1274   return 0;
1275 }
1276
1277 static void
1278 linux_nat_create_inferior (char *exec_file, char *allargs, char **env,
1279                            int from_tty)
1280 {
1281   int saved_async = 0;
1282
1283   /* The fork_child mechanism is synchronous and calls target_wait, so
1284      we have to mask the async mode.  */
1285
1286   if (target_can_async_p ())
1287     /* Mask async mode.  Creating a child requires a loop calling
1288        wait_for_inferior currently.  */
1289     saved_async = linux_nat_async_mask (0);
1290   else
1291     {
1292       /* Restore the original signal mask.  */
1293       sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1294       /* Make sure we don't block SIGCHLD during a sigsuspend.  */
1295       suspend_mask = normal_mask;
1296       sigdelset (&suspend_mask, SIGCHLD);
1297     }
1298
1299   /* Set SIGCHLD to the default action, until after execing the child,
1300      since the inferior inherits the superior's signal mask.  It will
1301      be blocked again in linux_nat_wait, which is only reached after
1302      the inferior execing.  */
1303   linux_nat_async_events (sigchld_default);
1304
1305   linux_ops->to_create_inferior (exec_file, allargs, env, from_tty);
1306
1307   if (saved_async)
1308     linux_nat_async_mask (saved_async);
1309 }
1310
1311 static void
1312 linux_nat_attach (char *args, int from_tty)
1313 {
1314   struct lwp_info *lp;
1315   int status;
1316
1317   /* FIXME: We should probably accept a list of process id's, and
1318      attach all of them.  */
1319   linux_ops->to_attach (args, from_tty);
1320
1321   if (!target_can_async_p ())
1322     {
1323       /* Restore the original signal mask.  */
1324       sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1325       /* Make sure we don't block SIGCHLD during a sigsuspend.  */
1326       suspend_mask = normal_mask;
1327       sigdelset (&suspend_mask, SIGCHLD);
1328     }
1329
1330   /* Add the initial process as the first LWP to the list.  */
1331   inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
1332   lp = add_lwp (inferior_ptid);
1333
1334   status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->cloned,
1335                                        &lp->signalled);
1336   lp->stopped = 1;
1337
1338   /* If this process is not using thread_db, then we still don't
1339      detect any other threads, but add at least this one.  */
1340   add_thread_silent (lp->ptid);
1341
1342   /* Save the wait status to report later.  */
1343   lp->resumed = 1;
1344   if (debug_linux_nat)
1345     fprintf_unfiltered (gdb_stdlog,
1346                         "LNA: waitpid %ld, saving status %s\n",
1347                         (long) GET_PID (lp->ptid), status_to_str (status));
1348
1349   if (!target_can_async_p ())
1350     lp->status = status;
1351   else
1352     {
1353       /* We already waited for this LWP, so put the wait result on the
1354          pipe.  The event loop will wake up and gets us to handling
1355          this event.  */
1356       linux_nat_event_pipe_push (GET_PID (lp->ptid), status,
1357                                  lp->cloned ? __WCLONE : 0);
1358       /* Register in the event loop.  */
1359       target_async (inferior_event_handler, 0);
1360     }
1361 }
1362
1363 /* Get pending status of LP.  */
1364 static int
1365 get_pending_status (struct lwp_info *lp, int *status)
1366 {
1367   struct target_waitstatus last;
1368   ptid_t last_ptid;
1369
1370   get_last_target_status (&last_ptid, &last);
1371
1372   /* If this lwp is the ptid that GDB is processing an event from, the
1373      signal will be in stop_signal.  Otherwise, in all-stop + sync
1374      mode, we may cache pending events in lp->status while trying to
1375      stop all threads (see stop_wait_callback).  In async mode, the
1376      events are always cached in waitpid_queue.  */
1377
1378   *status = 0;
1379   if (GET_LWP (lp->ptid) == GET_LWP (last_ptid))
1380     {
1381       if (stop_signal != TARGET_SIGNAL_0
1382           && signal_pass_state (stop_signal))
1383         *status = W_STOPCODE (target_signal_to_host (stop_signal));
1384     }
1385   else if (target_can_async_p ())
1386     queued_waitpid (GET_LWP (lp->ptid), status, __WALL);
1387   else
1388     *status = lp->status;
1389
1390   return 0;
1391 }
1392
1393 static int
1394 detach_callback (struct lwp_info *lp, void *data)
1395 {
1396   gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1397
1398   if (debug_linux_nat && lp->status)
1399     fprintf_unfiltered (gdb_stdlog, "DC:  Pending %s for %s on detach.\n",
1400                         strsignal (WSTOPSIG (lp->status)),
1401                         target_pid_to_str (lp->ptid));
1402
1403   /* If there is a pending SIGSTOP, get rid of it.  */
1404   if (lp->signalled)
1405     {
1406       if (debug_linux_nat)
1407         fprintf_unfiltered (gdb_stdlog,
1408                             "DC: Sending SIGCONT to %s\n",
1409                             target_pid_to_str (lp->ptid));
1410
1411       kill_lwp (GET_LWP (lp->ptid), SIGCONT);
1412       lp->signalled = 0;
1413     }
1414
1415   /* We don't actually detach from the LWP that has an id equal to the
1416      overall process id just yet.  */
1417   if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
1418     {
1419       int status = 0;
1420
1421       /* Pass on any pending signal for this LWP.  */
1422       get_pending_status (lp, &status);
1423
1424       errno = 0;
1425       if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
1426                   WSTOPSIG (status)) < 0)
1427         error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
1428                safe_strerror (errno));
1429
1430       if (debug_linux_nat)
1431         fprintf_unfiltered (gdb_stdlog,
1432                             "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1433                             target_pid_to_str (lp->ptid),
1434                             strsignal (WSTOPSIG (lp->status)));
1435
1436       delete_lwp (lp->ptid);
1437     }
1438
1439   return 0;
1440 }
1441
1442 static void
1443 linux_nat_detach (char *args, int from_tty)
1444 {
1445   int pid;
1446   int status;
1447   enum target_signal sig;
1448
1449   if (target_can_async_p ())
1450     linux_nat_async (NULL, 0);
1451
1452   iterate_over_lwps (detach_callback, NULL);
1453
1454   /* Only the initial process should be left right now.  */
1455   gdb_assert (num_lwps == 1);
1456
1457   /* Pass on any pending signal for the last LWP.  */
1458   if ((args == NULL || *args == '\0')
1459       && get_pending_status (lwp_list, &status) != -1
1460       && WIFSTOPPED (status))
1461     {
1462       /* Put the signal number in ARGS so that inf_ptrace_detach will
1463          pass it along with PTRACE_DETACH.  */
1464       args = alloca (8);
1465       sprintf (args, "%d", (int) WSTOPSIG (status));
1466       fprintf_unfiltered (gdb_stdlog,
1467                           "LND: Sending signal %s to %s\n",
1468                           args,
1469                           target_pid_to_str (lwp_list->ptid));
1470     }
1471
1472   /* Destroy LWP info; it's no longer valid.  */
1473   init_lwp_list ();
1474
1475   pid = GET_PID (inferior_ptid);
1476   inferior_ptid = pid_to_ptid (pid);
1477   linux_ops->to_detach (args, from_tty);
1478
1479   if (target_can_async_p ())
1480     drain_queued_events (pid);
1481 }
1482
1483 /* Resume LP.  */
1484
1485 static int
1486 resume_callback (struct lwp_info *lp, void *data)
1487 {
1488   if (lp->stopped && lp->status == 0)
1489     {
1490       linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1491                             0, TARGET_SIGNAL_0);
1492       if (debug_linux_nat)
1493         fprintf_unfiltered (gdb_stdlog,
1494                             "RC:  PTRACE_CONT %s, 0, 0 (resume sibling)\n",
1495                             target_pid_to_str (lp->ptid));
1496       lp->stopped = 0;
1497       lp->step = 0;
1498       memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1499     }
1500
1501   return 0;
1502 }
1503
1504 static int
1505 resume_clear_callback (struct lwp_info *lp, void *data)
1506 {
1507   lp->resumed = 0;
1508   return 0;
1509 }
1510
1511 static int
1512 resume_set_callback (struct lwp_info *lp, void *data)
1513 {
1514   lp->resumed = 1;
1515   return 0;
1516 }
1517
1518 static void
1519 linux_nat_resume (ptid_t ptid, int step, enum target_signal signo)
1520 {
1521   struct lwp_info *lp;
1522   int resume_all;
1523
1524   if (debug_linux_nat)
1525     fprintf_unfiltered (gdb_stdlog,
1526                         "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1527                         step ? "step" : "resume",
1528                         target_pid_to_str (ptid),
1529                         signo ? strsignal (signo) : "0",
1530                         target_pid_to_str (inferior_ptid));
1531
1532   prune_lwps ();
1533
1534   if (target_can_async_p ())
1535     /* Block events while we're here.  */
1536     linux_nat_async_events (sigchld_sync);
1537
1538   /* A specific PTID means `step only this process id'.  */
1539   resume_all = (PIDGET (ptid) == -1);
1540
1541   if (resume_all)
1542     iterate_over_lwps (resume_set_callback, NULL);
1543   else
1544     iterate_over_lwps (resume_clear_callback, NULL);
1545
1546   /* If PID is -1, it's the current inferior that should be
1547      handled specially.  */
1548   if (PIDGET (ptid) == -1)
1549     ptid = inferior_ptid;
1550
1551   lp = find_lwp_pid (ptid);
1552   gdb_assert (lp != NULL);
1553
1554   ptid = pid_to_ptid (GET_LWP (lp->ptid));
1555
1556   /* Remember if we're stepping.  */
1557   lp->step = step;
1558
1559   /* Mark this LWP as resumed.  */
1560   lp->resumed = 1;
1561
1562   /* If we have a pending wait status for this thread, there is no
1563      point in resuming the process.  But first make sure that
1564      linux_nat_wait won't preemptively handle the event - we
1565      should never take this short-circuit if we are going to
1566      leave LP running, since we have skipped resuming all the
1567      other threads.  This bit of code needs to be synchronized
1568      with linux_nat_wait.  */
1569
1570   /* In async mode, we never have pending wait status.  */
1571   if (target_can_async_p () && lp->status)
1572     internal_error (__FILE__, __LINE__, "Pending status in async mode");
1573
1574   if (lp->status && WIFSTOPPED (lp->status))
1575     {
1576       int saved_signo = target_signal_from_host (WSTOPSIG (lp->status));
1577
1578       if (signal_stop_state (saved_signo) == 0
1579           && signal_print_state (saved_signo) == 0
1580           && signal_pass_state (saved_signo) == 1)
1581         {
1582           if (debug_linux_nat)
1583             fprintf_unfiltered (gdb_stdlog,
1584                                 "LLR: Not short circuiting for ignored "
1585                                 "status 0x%x\n", lp->status);
1586
1587           /* FIXME: What should we do if we are supposed to continue
1588              this thread with a signal?  */
1589           gdb_assert (signo == TARGET_SIGNAL_0);
1590           signo = saved_signo;
1591           lp->status = 0;
1592         }
1593     }
1594
1595   if (lp->status)
1596     {
1597       /* FIXME: What should we do if we are supposed to continue
1598          this thread with a signal?  */
1599       gdb_assert (signo == TARGET_SIGNAL_0);
1600
1601       if (debug_linux_nat)
1602         fprintf_unfiltered (gdb_stdlog,
1603                             "LLR: Short circuiting for status 0x%x\n",
1604                             lp->status);
1605
1606       return;
1607     }
1608
1609   /* Mark LWP as not stopped to prevent it from being continued by
1610      resume_callback.  */
1611   lp->stopped = 0;
1612
1613   if (resume_all)
1614     iterate_over_lwps (resume_callback, NULL);
1615
1616   linux_ops->to_resume (ptid, step, signo);
1617   memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1618
1619   if (debug_linux_nat)
1620     fprintf_unfiltered (gdb_stdlog,
1621                         "LLR: %s %s, %s (resume event thread)\n",
1622                         step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1623                         target_pid_to_str (ptid),
1624                         signo ? strsignal (signo) : "0");
1625
1626   if (target_can_async_p ())
1627     target_async (inferior_event_handler, 0);
1628 }
1629
1630 /* Issue kill to specified lwp.  */
1631
1632 static int tkill_failed;
1633
1634 static int
1635 kill_lwp (int lwpid, int signo)
1636 {
1637   errno = 0;
1638
1639 /* Use tkill, if possible, in case we are using nptl threads.  If tkill
1640    fails, then we are not using nptl threads and we should be using kill.  */
1641
1642 #ifdef HAVE_TKILL_SYSCALL
1643   if (!tkill_failed)
1644     {
1645       int ret = syscall (__NR_tkill, lwpid, signo);
1646       if (errno != ENOSYS)
1647         return ret;
1648       errno = 0;
1649       tkill_failed = 1;
1650     }
1651 #endif
1652
1653   return kill (lwpid, signo);
1654 }
1655
1656 /* Handle a GNU/Linux extended wait response.  If we see a clone
1657    event, we need to add the new LWP to our list (and not report the
1658    trap to higher layers).  This function returns non-zero if the
1659    event should be ignored and we should wait again.  If STOPPING is
1660    true, the new LWP remains stopped, otherwise it is continued.  */
1661
1662 static int
1663 linux_handle_extended_wait (struct lwp_info *lp, int status,
1664                             int stopping)
1665 {
1666   int pid = GET_LWP (lp->ptid);
1667   struct target_waitstatus *ourstatus = &lp->waitstatus;
1668   struct lwp_info *new_lp = NULL;
1669   int event = status >> 16;
1670
1671   if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1672       || event == PTRACE_EVENT_CLONE)
1673     {
1674       unsigned long new_pid;
1675       int ret;
1676
1677       ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
1678
1679       /* If we haven't already seen the new PID stop, wait for it now.  */
1680       if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1681         {
1682           /* The new child has a pending SIGSTOP.  We can't affect it until it
1683              hits the SIGSTOP, but we're already attached.  */
1684           ret = my_waitpid (new_pid, &status,
1685                             (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1686           if (ret == -1)
1687             perror_with_name (_("waiting for new child"));
1688           else if (ret != new_pid)
1689             internal_error (__FILE__, __LINE__,
1690                             _("wait returned unexpected PID %d"), ret);
1691           else if (!WIFSTOPPED (status))
1692             internal_error (__FILE__, __LINE__,
1693                             _("wait returned unexpected status 0x%x"), status);
1694         }
1695
1696       ourstatus->value.related_pid = new_pid;
1697
1698       if (event == PTRACE_EVENT_FORK)
1699         ourstatus->kind = TARGET_WAITKIND_FORKED;
1700       else if (event == PTRACE_EVENT_VFORK)
1701         ourstatus->kind = TARGET_WAITKIND_VFORKED;
1702       else
1703         {
1704           ourstatus->kind = TARGET_WAITKIND_IGNORE;
1705           new_lp = add_lwp (BUILD_LWP (new_pid, GET_PID (inferior_ptid)));
1706           new_lp->cloned = 1;
1707
1708           if (WSTOPSIG (status) != SIGSTOP)
1709             {
1710               /* This can happen if someone starts sending signals to
1711                  the new thread before it gets a chance to run, which
1712                  have a lower number than SIGSTOP (e.g. SIGUSR1).
1713                  This is an unlikely case, and harder to handle for
1714                  fork / vfork than for clone, so we do not try - but
1715                  we handle it for clone events here.  We'll send
1716                  the other signal on to the thread below.  */
1717
1718               new_lp->signalled = 1;
1719             }
1720           else
1721             status = 0;
1722
1723           if (stopping)
1724             new_lp->stopped = 1;
1725           else
1726             {
1727               new_lp->resumed = 1;
1728               ptrace (PTRACE_CONT, lp->waitstatus.value.related_pid, 0,
1729                       status ? WSTOPSIG (status) : 0);
1730             }
1731
1732           if (debug_linux_nat)
1733             fprintf_unfiltered (gdb_stdlog,
1734                                 "LHEW: Got clone event from LWP %ld, resuming\n",
1735                                 GET_LWP (lp->ptid));
1736           ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1737
1738           return 1;
1739         }
1740
1741       return 0;
1742     }
1743
1744   if (event == PTRACE_EVENT_EXEC)
1745     {
1746       ourstatus->kind = TARGET_WAITKIND_EXECD;
1747       ourstatus->value.execd_pathname
1748         = xstrdup (linux_child_pid_to_exec_file (pid));
1749
1750       if (linux_parent_pid)
1751         {
1752           detach_breakpoints (linux_parent_pid);
1753           ptrace (PTRACE_DETACH, linux_parent_pid, 0, 0);
1754
1755           linux_parent_pid = 0;
1756         }
1757
1758       /* At this point, all inserted breakpoints are gone.  Doing this
1759          as soon as we detect an exec prevents the badness of deleting
1760          a breakpoint writing the current "shadow contents" to lift
1761          the bp.  That shadow is NOT valid after an exec.
1762
1763          Note that we have to do this after the detach_breakpoints
1764          call above, otherwise breakpoints wouldn't be lifted from the
1765          parent on a vfork, because detach_breakpoints would think
1766          that breakpoints are not inserted.  */
1767       mark_breakpoints_out ();
1768       return 0;
1769     }
1770
1771   internal_error (__FILE__, __LINE__,
1772                   _("unknown ptrace event %d"), event);
1773 }
1774
1775 /* Wait for LP to stop.  Returns the wait status, or 0 if the LWP has
1776    exited.  */
1777
1778 static int
1779 wait_lwp (struct lwp_info *lp)
1780 {
1781   pid_t pid;
1782   int status;
1783   int thread_dead = 0;
1784
1785   gdb_assert (!lp->stopped);
1786   gdb_assert (lp->status == 0);
1787
1788   pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
1789   if (pid == -1 && errno == ECHILD)
1790     {
1791       pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
1792       if (pid == -1 && errno == ECHILD)
1793         {
1794           /* The thread has previously exited.  We need to delete it
1795              now because, for some vendor 2.4 kernels with NPTL
1796              support backported, there won't be an exit event unless
1797              it is the main thread.  2.6 kernels will report an exit
1798              event for each thread that exits, as expected.  */
1799           thread_dead = 1;
1800           if (debug_linux_nat)
1801             fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
1802                                 target_pid_to_str (lp->ptid));
1803         }
1804     }
1805
1806   if (!thread_dead)
1807     {
1808       gdb_assert (pid == GET_LWP (lp->ptid));
1809
1810       if (debug_linux_nat)
1811         {
1812           fprintf_unfiltered (gdb_stdlog,
1813                               "WL: waitpid %s received %s\n",
1814                               target_pid_to_str (lp->ptid),
1815                               status_to_str (status));
1816         }
1817     }
1818
1819   /* Check if the thread has exited.  */
1820   if (WIFEXITED (status) || WIFSIGNALED (status))
1821     {
1822       thread_dead = 1;
1823       if (debug_linux_nat)
1824         fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
1825                             target_pid_to_str (lp->ptid));
1826     }
1827
1828   if (thread_dead)
1829     {
1830       exit_lwp (lp);
1831       return 0;
1832     }
1833
1834   gdb_assert (WIFSTOPPED (status));
1835
1836   /* Handle GNU/Linux's extended waitstatus for trace events.  */
1837   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1838     {
1839       if (debug_linux_nat)
1840         fprintf_unfiltered (gdb_stdlog,
1841                             "WL: Handling extended status 0x%06x\n",
1842                             status);
1843       if (linux_handle_extended_wait (lp, status, 1))
1844         return wait_lwp (lp);
1845     }
1846
1847   return status;
1848 }
1849
1850 /* Save the most recent siginfo for LP.  This is currently only called
1851    for SIGTRAP; some ports use the si_addr field for
1852    target_stopped_data_address.  In the future, it may also be used to
1853    restore the siginfo of requeued signals.  */
1854
1855 static void
1856 save_siginfo (struct lwp_info *lp)
1857 {
1858   errno = 0;
1859   ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid),
1860           (PTRACE_TYPE_ARG3) 0, &lp->siginfo);
1861
1862   if (errno != 0)
1863     memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1864 }
1865
1866 /* Send a SIGSTOP to LP.  */
1867
1868 static int
1869 stop_callback (struct lwp_info *lp, void *data)
1870 {
1871   if (!lp->stopped && !lp->signalled)
1872     {
1873       int ret;
1874
1875       if (debug_linux_nat)
1876         {
1877           fprintf_unfiltered (gdb_stdlog,
1878                               "SC:  kill %s **<SIGSTOP>**\n",
1879                               target_pid_to_str (lp->ptid));
1880         }
1881       errno = 0;
1882       ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
1883       if (debug_linux_nat)
1884         {
1885           fprintf_unfiltered (gdb_stdlog,
1886                               "SC:  lwp kill %d %s\n",
1887                               ret,
1888                               errno ? safe_strerror (errno) : "ERRNO-OK");
1889         }
1890
1891       lp->signalled = 1;
1892       gdb_assert (lp->status == 0);
1893     }
1894
1895   return 0;
1896 }
1897
1898 /* Wait until LP is stopped.  If DATA is non-null it is interpreted as
1899    a pointer to a set of signals to be flushed immediately.  */
1900
1901 static int
1902 stop_wait_callback (struct lwp_info *lp, void *data)
1903 {
1904   sigset_t *flush_mask = data;
1905
1906   if (!lp->stopped)
1907     {
1908       int status;
1909
1910       status = wait_lwp (lp);
1911       if (status == 0)
1912         return 0;
1913
1914       /* Ignore any signals in FLUSH_MASK.  */
1915       if (flush_mask && sigismember (flush_mask, WSTOPSIG (status)))
1916         {
1917           if (!lp->signalled)
1918             {
1919               lp->stopped = 1;
1920               return 0;
1921             }
1922
1923           errno = 0;
1924           ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1925           if (debug_linux_nat)
1926             fprintf_unfiltered (gdb_stdlog,
1927                                 "PTRACE_CONT %s, 0, 0 (%s)\n",
1928                                 target_pid_to_str (lp->ptid),
1929                                 errno ? safe_strerror (errno) : "OK");
1930
1931           return stop_wait_callback (lp, flush_mask);
1932         }
1933
1934       if (WSTOPSIG (status) != SIGSTOP)
1935         {
1936           if (WSTOPSIG (status) == SIGTRAP)
1937             {
1938               /* If a LWP other than the LWP that we're reporting an
1939                  event for has hit a GDB breakpoint (as opposed to
1940                  some random trap signal), then just arrange for it to
1941                  hit it again later.  We don't keep the SIGTRAP status
1942                  and don't forward the SIGTRAP signal to the LWP.  We
1943                  will handle the current event, eventually we will
1944                  resume all LWPs, and this one will get its breakpoint
1945                  trap again.
1946
1947                  If we do not do this, then we run the risk that the
1948                  user will delete or disable the breakpoint, but the
1949                  thread will have already tripped on it.  */
1950
1951               /* Save the trap's siginfo in case we need it later.  */
1952               save_siginfo (lp);
1953
1954               /* Now resume this LWP and get the SIGSTOP event. */
1955               errno = 0;
1956               ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1957               if (debug_linux_nat)
1958                 {
1959                   fprintf_unfiltered (gdb_stdlog,
1960                                       "PTRACE_CONT %s, 0, 0 (%s)\n",
1961                                       target_pid_to_str (lp->ptid),
1962                                       errno ? safe_strerror (errno) : "OK");
1963
1964                   fprintf_unfiltered (gdb_stdlog,
1965                                       "SWC: Candidate SIGTRAP event in %s\n",
1966                                       target_pid_to_str (lp->ptid));
1967                 }
1968               /* Hold this event/waitstatus while we check to see if
1969                  there are any more (we still want to get that SIGSTOP). */
1970               stop_wait_callback (lp, data);
1971
1972               if (target_can_async_p ())
1973                 {
1974                   /* Don't leave a pending wait status in async mode.
1975                      Retrigger the breakpoint.  */
1976                   if (!cancel_breakpoint (lp))
1977                     {
1978                       /* There was no gdb breakpoint set at pc.  Put
1979                          the event back in the queue.  */
1980                       if (debug_linux_nat)
1981                         fprintf_unfiltered (gdb_stdlog,
1982                                             "SWC: kill %s, %s\n",
1983                                             target_pid_to_str (lp->ptid),
1984                                             status_to_str ((int) status));
1985                       kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
1986                     }
1987                 }
1988               else
1989                 {
1990                   /* Hold the SIGTRAP for handling by
1991                      linux_nat_wait. */
1992                   /* If there's another event, throw it back into the
1993                      queue. */
1994                   if (lp->status)
1995                     {
1996                       if (debug_linux_nat)
1997                         fprintf_unfiltered (gdb_stdlog,
1998                                             "SWC: kill %s, %s\n",
1999                                             target_pid_to_str (lp->ptid),
2000                                             status_to_str ((int) status));
2001                       kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
2002                     }
2003                   /* Save the sigtrap event. */
2004                   lp->status = status;
2005                 }
2006               return 0;
2007             }
2008           else
2009             {
2010               /* The thread was stopped with a signal other than
2011                  SIGSTOP, and didn't accidentally trip a breakpoint. */
2012
2013               if (debug_linux_nat)
2014                 {
2015                   fprintf_unfiltered (gdb_stdlog,
2016                                       "SWC: Pending event %s in %s\n",
2017                                       status_to_str ((int) status),
2018                                       target_pid_to_str (lp->ptid));
2019                 }
2020               /* Now resume this LWP and get the SIGSTOP event. */
2021               errno = 0;
2022               ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2023               if (debug_linux_nat)
2024                 fprintf_unfiltered (gdb_stdlog,
2025                                     "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
2026                                     target_pid_to_str (lp->ptid),
2027                                     errno ? safe_strerror (errno) : "OK");
2028
2029               /* Hold this event/waitstatus while we check to see if
2030                  there are any more (we still want to get that SIGSTOP). */
2031               stop_wait_callback (lp, data);
2032
2033               /* If the lp->status field is still empty, use it to
2034                  hold this event.  If not, then this event must be
2035                  returned to the event queue of the LWP.  */
2036               if (lp->status || target_can_async_p ())
2037                 {
2038                   if (debug_linux_nat)
2039                     {
2040                       fprintf_unfiltered (gdb_stdlog,
2041                                           "SWC: kill %s, %s\n",
2042                                           target_pid_to_str (lp->ptid),
2043                                           status_to_str ((int) status));
2044                     }
2045                   kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
2046                 }
2047               else
2048                 lp->status = status;
2049               return 0;
2050             }
2051         }
2052       else
2053         {
2054           /* We caught the SIGSTOP that we intended to catch, so
2055              there's no SIGSTOP pending.  */
2056           lp->stopped = 1;
2057           lp->signalled = 0;
2058         }
2059     }
2060
2061   return 0;
2062 }
2063
2064 /* Check whether PID has any pending signals in FLUSH_MASK.  If so set
2065    the appropriate bits in PENDING, and return 1 - otherwise return 0.  */
2066
2067 static int
2068 linux_nat_has_pending (int pid, sigset_t *pending, sigset_t *flush_mask)
2069 {
2070   sigset_t blocked, ignored;
2071   int i;
2072
2073   linux_proc_pending_signals (pid, pending, &blocked, &ignored);
2074
2075   if (!flush_mask)
2076     return 0;
2077
2078   for (i = 1; i < NSIG; i++)
2079     if (sigismember (pending, i))
2080       if (!sigismember (flush_mask, i)
2081           || sigismember (&blocked, i)
2082           || sigismember (&ignored, i))
2083         sigdelset (pending, i);
2084
2085   if (sigisemptyset (pending))
2086     return 0;
2087
2088   return 1;
2089 }
2090
2091 /* DATA is interpreted as a mask of signals to flush.  If LP has
2092    signals pending, and they are all in the flush mask, then arrange
2093    to flush them.  LP should be stopped, as should all other threads
2094    it might share a signal queue with.  */
2095
2096 static int
2097 flush_callback (struct lwp_info *lp, void *data)
2098 {
2099   sigset_t *flush_mask = data;
2100   sigset_t pending, intersection, blocked, ignored;
2101   int pid, status;
2102
2103   /* Normally, when an LWP exits, it is removed from the LWP list.  The
2104      last LWP isn't removed till later, however.  So if there is only
2105      one LWP on the list, make sure it's alive.  */
2106   if (lwp_list == lp && lp->next == NULL)
2107     if (!linux_nat_thread_alive (lp->ptid))
2108       return 0;
2109
2110   /* Just because the LWP is stopped doesn't mean that new signals
2111      can't arrive from outside, so this function must be careful of
2112      race conditions.  However, because all threads are stopped, we
2113      can assume that the pending mask will not shrink unless we resume
2114      the LWP, and that it will then get another signal.  We can't
2115      control which one, however.  */
2116
2117   if (lp->status)
2118     {
2119       if (debug_linux_nat)
2120         printf_unfiltered (_("FC: LP has pending status %06x\n"), lp->status);
2121       if (WIFSTOPPED (lp->status) && sigismember (flush_mask, WSTOPSIG (lp->status)))
2122         lp->status = 0;
2123     }
2124
2125   /* While there is a pending signal we would like to flush, continue
2126      the inferior and collect another signal.  But if there's already
2127      a saved status that we don't want to flush, we can't resume the
2128      inferior - if it stopped for some other reason we wouldn't have
2129      anywhere to save the new status.  In that case, we must leave the
2130      signal unflushed (and possibly generate an extra SIGINT stop).
2131      That's much less bad than losing a signal.  */
2132   while (lp->status == 0
2133          && linux_nat_has_pending (GET_LWP (lp->ptid), &pending, flush_mask))
2134     {
2135       int ret;
2136       
2137       errno = 0;
2138       ret = ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2139       if (debug_linux_nat)
2140         fprintf_unfiltered (gdb_stderr,
2141                             "FC: Sent PTRACE_CONT, ret %d %d\n", ret, errno);
2142
2143       lp->stopped = 0;
2144       stop_wait_callback (lp, flush_mask);
2145       if (debug_linux_nat)
2146         fprintf_unfiltered (gdb_stderr,
2147                             "FC: Wait finished; saved status is %d\n",
2148                             lp->status);
2149     }
2150
2151   return 0;
2152 }
2153
2154 /* Return non-zero if LP has a wait status pending.  */
2155
2156 static int
2157 status_callback (struct lwp_info *lp, void *data)
2158 {
2159   /* Only report a pending wait status if we pretend that this has
2160      indeed been resumed.  */
2161   return (lp->status != 0 && lp->resumed);
2162 }
2163
2164 /* Return non-zero if LP isn't stopped.  */
2165
2166 static int
2167 running_callback (struct lwp_info *lp, void *data)
2168 {
2169   return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
2170 }
2171
2172 /* Count the LWP's that have had events.  */
2173
2174 static int
2175 count_events_callback (struct lwp_info *lp, void *data)
2176 {
2177   int *count = data;
2178
2179   gdb_assert (count != NULL);
2180
2181   /* Count only LWPs that have a SIGTRAP event pending.  */
2182   if (lp->status != 0
2183       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
2184     (*count)++;
2185
2186   return 0;
2187 }
2188
2189 /* Select the LWP (if any) that is currently being single-stepped.  */
2190
2191 static int
2192 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2193 {
2194   if (lp->step && lp->status != 0)
2195     return 1;
2196   else
2197     return 0;
2198 }
2199
2200 /* Select the Nth LWP that has had a SIGTRAP event.  */
2201
2202 static int
2203 select_event_lwp_callback (struct lwp_info *lp, void *data)
2204 {
2205   int *selector = data;
2206
2207   gdb_assert (selector != NULL);
2208
2209   /* Select only LWPs that have a SIGTRAP event pending. */
2210   if (lp->status != 0
2211       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
2212     if ((*selector)-- == 0)
2213       return 1;
2214
2215   return 0;
2216 }
2217
2218 static int
2219 cancel_breakpoint (struct lwp_info *lp)
2220 {
2221   /* Arrange for a breakpoint to be hit again later.  We don't keep
2222      the SIGTRAP status and don't forward the SIGTRAP signal to the
2223      LWP.  We will handle the current event, eventually we will resume
2224      this LWP, and this breakpoint will trap again.
2225
2226      If we do not do this, then we run the risk that the user will
2227      delete or disable the breakpoint, but the LWP will have already
2228      tripped on it.  */
2229
2230   struct regcache *regcache = get_thread_regcache (lp->ptid);
2231   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2232   CORE_ADDR pc;
2233
2234   pc = regcache_read_pc (regcache) - gdbarch_decr_pc_after_break (gdbarch);
2235   if (breakpoint_inserted_here_p (pc))
2236     {
2237       if (debug_linux_nat)
2238         fprintf_unfiltered (gdb_stdlog,
2239                             "CB: Push back breakpoint for %s\n",
2240                             target_pid_to_str (lp->ptid));
2241
2242       /* Back up the PC if necessary.  */
2243       if (gdbarch_decr_pc_after_break (gdbarch))
2244         regcache_write_pc (regcache, pc);
2245
2246       return 1;
2247     }
2248   return 0;
2249 }
2250
2251 static int
2252 cancel_breakpoints_callback (struct lwp_info *lp, void *data)
2253 {
2254   struct lwp_info *event_lp = data;
2255
2256   /* Leave the LWP that has been elected to receive a SIGTRAP alone.  */
2257   if (lp == event_lp)
2258     return 0;
2259
2260   /* If a LWP other than the LWP that we're reporting an event for has
2261      hit a GDB breakpoint (as opposed to some random trap signal),
2262      then just arrange for it to hit it again later.  We don't keep
2263      the SIGTRAP status and don't forward the SIGTRAP signal to the
2264      LWP.  We will handle the current event, eventually we will resume
2265      all LWPs, and this one will get its breakpoint trap again.
2266
2267      If we do not do this, then we run the risk that the user will
2268      delete or disable the breakpoint, but the LWP will have already
2269      tripped on it.  */
2270
2271   if (lp->status != 0
2272       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP
2273       && cancel_breakpoint (lp))
2274     /* Throw away the SIGTRAP.  */
2275     lp->status = 0;
2276
2277   return 0;
2278 }
2279
2280 /* Select one LWP out of those that have events pending.  */
2281
2282 static void
2283 select_event_lwp (struct lwp_info **orig_lp, int *status)
2284 {
2285   int num_events = 0;
2286   int random_selector;
2287   struct lwp_info *event_lp;
2288
2289   /* Record the wait status for the original LWP.  */
2290   (*orig_lp)->status = *status;
2291
2292   /* Give preference to any LWP that is being single-stepped.  */
2293   event_lp = iterate_over_lwps (select_singlestep_lwp_callback, NULL);
2294   if (event_lp != NULL)
2295     {
2296       if (debug_linux_nat)
2297         fprintf_unfiltered (gdb_stdlog,
2298                             "SEL: Select single-step %s\n",
2299                             target_pid_to_str (event_lp->ptid));
2300     }
2301   else
2302     {
2303       /* No single-stepping LWP.  Select one at random, out of those
2304          which have had SIGTRAP events.  */
2305
2306       /* First see how many SIGTRAP events we have.  */
2307       iterate_over_lwps (count_events_callback, &num_events);
2308
2309       /* Now randomly pick a LWP out of those that have had a SIGTRAP.  */
2310       random_selector = (int)
2311         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2312
2313       if (debug_linux_nat && num_events > 1)
2314         fprintf_unfiltered (gdb_stdlog,
2315                             "SEL: Found %d SIGTRAP events, selecting #%d\n",
2316                             num_events, random_selector);
2317
2318       event_lp = iterate_over_lwps (select_event_lwp_callback,
2319                                     &random_selector);
2320     }
2321
2322   if (event_lp != NULL)
2323     {
2324       /* Switch the event LWP.  */
2325       *orig_lp = event_lp;
2326       *status = event_lp->status;
2327     }
2328
2329   /* Flush the wait status for the event LWP.  */
2330   (*orig_lp)->status = 0;
2331 }
2332
2333 /* Return non-zero if LP has been resumed.  */
2334
2335 static int
2336 resumed_callback (struct lwp_info *lp, void *data)
2337 {
2338   return lp->resumed;
2339 }
2340
2341 /* Stop an active thread, verify it still exists, then resume it.  */
2342
2343 static int
2344 stop_and_resume_callback (struct lwp_info *lp, void *data)
2345 {
2346   struct lwp_info *ptr;
2347
2348   if (!lp->stopped && !lp->signalled)
2349     {
2350       stop_callback (lp, NULL);
2351       stop_wait_callback (lp, NULL);
2352       /* Resume if the lwp still exists.  */
2353       for (ptr = lwp_list; ptr; ptr = ptr->next)
2354         if (lp == ptr)
2355           {
2356             resume_callback (lp, NULL);
2357             resume_set_callback (lp, NULL);
2358           }
2359     }
2360   return 0;
2361 }
2362
2363 /* Check if we should go on and pass this event to common code.
2364    Return the affected lwp if we are, or NULL otherwise.  */
2365 static struct lwp_info *
2366 linux_nat_filter_event (int lwpid, int status, int options)
2367 {
2368   struct lwp_info *lp;
2369
2370   lp = find_lwp_pid (pid_to_ptid (lwpid));
2371
2372   /* Check for stop events reported by a process we didn't already
2373      know about - anything not already in our LWP list.
2374
2375      If we're expecting to receive stopped processes after
2376      fork, vfork, and clone events, then we'll just add the
2377      new one to our list and go back to waiting for the event
2378      to be reported - the stopped process might be returned
2379      from waitpid before or after the event is.  */
2380   if (WIFSTOPPED (status) && !lp)
2381     {
2382       linux_record_stopped_pid (lwpid, status);
2383       return NULL;
2384     }
2385
2386   /* Make sure we don't report an event for the exit of an LWP not in
2387      our list, i.e.  not part of the current process.  This can happen
2388      if we detach from a program we original forked and then it
2389      exits.  */
2390   if (!WIFSTOPPED (status) && !lp)
2391     return NULL;
2392
2393   /* NOTE drow/2003-06-17: This code seems to be meant for debugging
2394      CLONE_PTRACE processes which do not use the thread library -
2395      otherwise we wouldn't find the new LWP this way.  That doesn't
2396      currently work, and the following code is currently unreachable
2397      due to the two blocks above.  If it's fixed some day, this code
2398      should be broken out into a function so that we can also pick up
2399      LWPs from the new interface.  */
2400   if (!lp)
2401     {
2402       lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
2403       if (options & __WCLONE)
2404         lp->cloned = 1;
2405
2406       gdb_assert (WIFSTOPPED (status)
2407                   && WSTOPSIG (status) == SIGSTOP);
2408       lp->signalled = 1;
2409
2410       if (!in_thread_list (inferior_ptid))
2411         {
2412           inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2413                                      GET_PID (inferior_ptid));
2414           add_thread (inferior_ptid);
2415         }
2416
2417       add_thread (lp->ptid);
2418     }
2419
2420   /* Save the trap's siginfo in case we need it later.  */
2421   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2422     save_siginfo (lp);
2423
2424   /* Handle GNU/Linux's extended waitstatus for trace events.  */
2425   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
2426     {
2427       if (debug_linux_nat)
2428         fprintf_unfiltered (gdb_stdlog,
2429                             "LLW: Handling extended status 0x%06x\n",
2430                             status);
2431       if (linux_handle_extended_wait (lp, status, 0))
2432         return NULL;
2433     }
2434
2435   /* Check if the thread has exited.  */
2436   if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
2437     {
2438       /* If this is the main thread, we must stop all threads and
2439          verify if they are still alive.  This is because in the nptl
2440          thread model, there is no signal issued for exiting LWPs
2441          other than the main thread.  We only get the main thread exit
2442          signal once all child threads have already exited.  If we
2443          stop all the threads and use the stop_wait_callback to check
2444          if they have exited we can determine whether this signal
2445          should be ignored or whether it means the end of the debugged
2446          application, regardless of which threading model is being
2447          used.  */
2448       if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
2449         {
2450           lp->stopped = 1;
2451           iterate_over_lwps (stop_and_resume_callback, NULL);
2452         }
2453
2454       if (debug_linux_nat)
2455         fprintf_unfiltered (gdb_stdlog,
2456                             "LLW: %s exited.\n",
2457                             target_pid_to_str (lp->ptid));
2458
2459       exit_lwp (lp);
2460
2461       /* If there is at least one more LWP, then the exit signal was
2462          not the end of the debugged application and should be
2463          ignored.  */
2464       if (num_lwps > 0)
2465         {
2466           /* Make sure there is at least one thread running.  */
2467           gdb_assert (iterate_over_lwps (running_callback, NULL));
2468
2469           /* Discard the event.  */
2470           return NULL;
2471         }
2472     }
2473
2474   /* Check if the current LWP has previously exited.  In the nptl
2475      thread model, LWPs other than the main thread do not issue
2476      signals when they exit so we must check whenever the thread has
2477      stopped.  A similar check is made in stop_wait_callback().  */
2478   if (num_lwps > 1 && !linux_nat_thread_alive (lp->ptid))
2479     {
2480       if (debug_linux_nat)
2481         fprintf_unfiltered (gdb_stdlog,
2482                             "LLW: %s exited.\n",
2483                             target_pid_to_str (lp->ptid));
2484
2485       exit_lwp (lp);
2486
2487       /* Make sure there is at least one thread running.  */
2488       gdb_assert (iterate_over_lwps (running_callback, NULL));
2489
2490       /* Discard the event.  */
2491       return NULL;
2492     }
2493
2494   /* Make sure we don't report a SIGSTOP that we sent ourselves in
2495      an attempt to stop an LWP.  */
2496   if (lp->signalled
2497       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2498     {
2499       if (debug_linux_nat)
2500         fprintf_unfiltered (gdb_stdlog,
2501                             "LLW: Delayed SIGSTOP caught for %s.\n",
2502                             target_pid_to_str (lp->ptid));
2503
2504       /* This is a delayed SIGSTOP.  */
2505       lp->signalled = 0;
2506
2507       registers_changed ();
2508
2509       linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2510                             lp->step, TARGET_SIGNAL_0);
2511       if (debug_linux_nat)
2512         fprintf_unfiltered (gdb_stdlog,
2513                             "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
2514                             lp->step ?
2515                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2516                             target_pid_to_str (lp->ptid));
2517
2518       lp->stopped = 0;
2519       gdb_assert (lp->resumed);
2520
2521       /* Discard the event.  */
2522       return NULL;
2523     }
2524
2525   /* An interesting event.  */
2526   gdb_assert (lp);
2527   return lp;
2528 }
2529
2530 /* Get the events stored in the pipe into the local queue, so they are
2531    accessible to queued_waitpid.  We need to do this, since it is not
2532    always the case that the event at the head of the pipe is the event
2533    we want.  */
2534
2535 static void
2536 pipe_to_local_event_queue (void)
2537 {
2538   if (debug_linux_nat_async)
2539     fprintf_unfiltered (gdb_stdlog,
2540                         "PTLEQ: linux_nat_num_queued_events(%d)\n",
2541                         linux_nat_num_queued_events);
2542   while (linux_nat_num_queued_events)
2543     {
2544       int lwpid, status, options;
2545       lwpid = linux_nat_event_pipe_pop (&status, &options);
2546       gdb_assert (lwpid > 0);
2547       push_waitpid (lwpid, status, options);
2548     }
2549 }
2550
2551 /* Get the unprocessed events stored in the local queue back into the
2552    pipe, so the event loop realizes there's something else to
2553    process.  */
2554
2555 static void
2556 local_event_queue_to_pipe (void)
2557 {
2558   struct waitpid_result *w = waitpid_queue;
2559   while (w)
2560     {
2561       struct waitpid_result *next = w->next;
2562       linux_nat_event_pipe_push (w->pid,
2563                                  w->status,
2564                                  w->options);
2565       xfree (w);
2566       w = next;
2567     }
2568   waitpid_queue = NULL;
2569
2570   if (debug_linux_nat_async)
2571     fprintf_unfiltered (gdb_stdlog,
2572                         "LEQTP: linux_nat_num_queued_events(%d)\n",
2573                         linux_nat_num_queued_events);
2574 }
2575
2576 static ptid_t
2577 linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
2578 {
2579   struct lwp_info *lp = NULL;
2580   int options = 0;
2581   int status = 0;
2582   pid_t pid = PIDGET (ptid);
2583   sigset_t flush_mask;
2584
2585   if (debug_linux_nat_async)
2586     fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
2587
2588   /* The first time we get here after starting a new inferior, we may
2589      not have added it to the LWP list yet - this is the earliest
2590      moment at which we know its PID.  */
2591   if (num_lwps == 0)
2592     {
2593       gdb_assert (!is_lwp (inferior_ptid));
2594
2595       inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2596                                  GET_PID (inferior_ptid));
2597       lp = add_lwp (inferior_ptid);
2598       lp->resumed = 1;
2599       /* Add the main thread to GDB's thread list.  */
2600       add_thread_silent (lp->ptid);
2601     }
2602
2603   sigemptyset (&flush_mask);
2604
2605   /* Block events while we're here.  */
2606   linux_nat_async_events (sigchld_sync);
2607
2608 retry:
2609
2610   /* Make sure there is at least one LWP that has been resumed.  */
2611   gdb_assert (iterate_over_lwps (resumed_callback, NULL));
2612
2613   /* First check if there is a LWP with a wait status pending.  */
2614   if (pid == -1)
2615     {
2616       /* Any LWP that's been resumed will do.  */
2617       lp = iterate_over_lwps (status_callback, NULL);
2618       if (lp)
2619         {
2620           if (target_can_async_p ())
2621             internal_error (__FILE__, __LINE__,
2622                             "Found an LWP with a pending status in async mode.");
2623
2624           status = lp->status;
2625           lp->status = 0;
2626
2627           if (debug_linux_nat && status)
2628             fprintf_unfiltered (gdb_stdlog,
2629                                 "LLW: Using pending wait status %s for %s.\n",
2630                                 status_to_str (status),
2631                                 target_pid_to_str (lp->ptid));
2632         }
2633
2634       /* But if we don't find one, we'll have to wait, and check both
2635          cloned and uncloned processes.  We start with the cloned
2636          processes.  */
2637       options = __WCLONE | WNOHANG;
2638     }
2639   else if (is_lwp (ptid))
2640     {
2641       if (debug_linux_nat)
2642         fprintf_unfiltered (gdb_stdlog,
2643                             "LLW: Waiting for specific LWP %s.\n",
2644                             target_pid_to_str (ptid));
2645
2646       /* We have a specific LWP to check.  */
2647       lp = find_lwp_pid (ptid);
2648       gdb_assert (lp);
2649       status = lp->status;
2650       lp->status = 0;
2651
2652       if (debug_linux_nat && status)
2653         fprintf_unfiltered (gdb_stdlog,
2654                             "LLW: Using pending wait status %s for %s.\n",
2655                             status_to_str (status),
2656                             target_pid_to_str (lp->ptid));
2657
2658       /* If we have to wait, take into account whether PID is a cloned
2659          process or not.  And we have to convert it to something that
2660          the layer beneath us can understand.  */
2661       options = lp->cloned ? __WCLONE : 0;
2662       pid = GET_LWP (ptid);
2663     }
2664
2665   if (status && lp->signalled)
2666     {
2667       /* A pending SIGSTOP may interfere with the normal stream of
2668          events.  In a typical case where interference is a problem,
2669          we have a SIGSTOP signal pending for LWP A while
2670          single-stepping it, encounter an event in LWP B, and take the
2671          pending SIGSTOP while trying to stop LWP A.  After processing
2672          the event in LWP B, LWP A is continued, and we'll never see
2673          the SIGTRAP associated with the last time we were
2674          single-stepping LWP A.  */
2675
2676       /* Resume the thread.  It should halt immediately returning the
2677          pending SIGSTOP.  */
2678       registers_changed ();
2679       linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2680                             lp->step, TARGET_SIGNAL_0);
2681       if (debug_linux_nat)
2682         fprintf_unfiltered (gdb_stdlog,
2683                             "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
2684                             lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2685                             target_pid_to_str (lp->ptid));
2686       lp->stopped = 0;
2687       gdb_assert (lp->resumed);
2688
2689       /* This should catch the pending SIGSTOP.  */
2690       stop_wait_callback (lp, NULL);
2691     }
2692
2693   if (!target_can_async_p ())
2694     {
2695       /* Causes SIGINT to be passed on to the attached process.  */
2696       set_sigint_trap ();
2697       set_sigio_trap ();
2698     }
2699
2700   while (status == 0)
2701     {
2702       pid_t lwpid;
2703
2704       if (target_can_async_p ())
2705         /* In async mode, don't ever block.  Only look at the locally
2706            queued events.  */
2707         lwpid = queued_waitpid (pid, &status, options);
2708       else
2709         lwpid = my_waitpid (pid, &status, options);
2710
2711       if (lwpid > 0)
2712         {
2713           gdb_assert (pid == -1 || lwpid == pid);
2714
2715           if (debug_linux_nat)
2716             {
2717               fprintf_unfiltered (gdb_stdlog,
2718                                   "LLW: waitpid %ld received %s\n",
2719                                   (long) lwpid, status_to_str (status));
2720             }
2721
2722           lp = linux_nat_filter_event (lwpid, status, options);
2723           if (!lp)
2724             {
2725               /* A discarded event.  */
2726               status = 0;
2727               continue;
2728             }
2729
2730           break;
2731         }
2732
2733       if (pid == -1)
2734         {
2735           /* Alternate between checking cloned and uncloned processes.  */
2736           options ^= __WCLONE;
2737
2738           /* And every time we have checked both:
2739              In async mode, return to event loop;
2740              In sync mode, suspend waiting for a SIGCHLD signal.  */
2741           if (options & __WCLONE)
2742             {
2743               if (target_can_async_p ())
2744                 {
2745                   /* No interesting event.  */
2746                   ourstatus->kind = TARGET_WAITKIND_IGNORE;
2747
2748                   /* Get ready for the next event.  */
2749                   target_async (inferior_event_handler, 0);
2750
2751                   if (debug_linux_nat_async)
2752                     fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
2753
2754                   return minus_one_ptid;
2755                 }
2756
2757               sigsuspend (&suspend_mask);
2758             }
2759         }
2760
2761       /* We shouldn't end up here unless we want to try again.  */
2762       gdb_assert (status == 0);
2763     }
2764
2765   if (!target_can_async_p ())
2766     {
2767       clear_sigio_trap ();
2768       clear_sigint_trap ();
2769     }
2770
2771   gdb_assert (lp);
2772
2773   /* Don't report signals that GDB isn't interested in, such as
2774      signals that are neither printed nor stopped upon.  Stopping all
2775      threads can be a bit time-consuming so if we want decent
2776      performance with heavily multi-threaded programs, especially when
2777      they're using a high frequency timer, we'd better avoid it if we
2778      can.  */
2779
2780   if (WIFSTOPPED (status))
2781     {
2782       int signo = target_signal_from_host (WSTOPSIG (status));
2783
2784       /* If we get a signal while single-stepping, we may need special
2785          care, e.g. to skip the signal handler.  Defer to common code.  */
2786       if (!lp->step
2787           && signal_stop_state (signo) == 0
2788           && signal_print_state (signo) == 0
2789           && signal_pass_state (signo) == 1)
2790         {
2791           /* FIMXE: kettenis/2001-06-06: Should we resume all threads
2792              here?  It is not clear we should.  GDB may not expect
2793              other threads to run.  On the other hand, not resuming
2794              newly attached threads may cause an unwanted delay in
2795              getting them running.  */
2796           registers_changed ();
2797           linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2798                                 lp->step, signo);
2799           if (debug_linux_nat)
2800             fprintf_unfiltered (gdb_stdlog,
2801                                 "LLW: %s %s, %s (preempt 'handle')\n",
2802                                 lp->step ?
2803                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2804                                 target_pid_to_str (lp->ptid),
2805                                 signo ? strsignal (signo) : "0");
2806           lp->stopped = 0;
2807           status = 0;
2808           goto retry;
2809         }
2810
2811       if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
2812         {
2813           /* If ^C/BREAK is typed at the tty/console, SIGINT gets
2814              forwarded to the entire process group, that is, all LWP's
2815              will receive it.  Since we only want to report it once,
2816              we try to flush it from all LWPs except this one.  */
2817           sigaddset (&flush_mask, SIGINT);
2818         }
2819     }
2820
2821   /* This LWP is stopped now.  */
2822   lp->stopped = 1;
2823
2824   if (debug_linux_nat)
2825     fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
2826                         status_to_str (status), target_pid_to_str (lp->ptid));
2827
2828   /* Now stop all other LWP's ...  */
2829   iterate_over_lwps (stop_callback, NULL);
2830
2831   /* ... and wait until all of them have reported back that they're no
2832      longer running.  */
2833   iterate_over_lwps (stop_wait_callback, &flush_mask);
2834   iterate_over_lwps (flush_callback, &flush_mask);
2835
2836   /* If we're not waiting for a specific LWP, choose an event LWP from
2837      among those that have had events.  Giving equal priority to all
2838      LWPs that have had events helps prevent starvation.  */
2839   if (pid == -1)
2840     select_event_lwp (&lp, &status);
2841
2842   /* Now that we've selected our final event LWP, cancel any
2843      breakpoints in other LWPs that have hit a GDB breakpoint.  See
2844      the comment in cancel_breakpoints_callback to find out why.  */
2845   iterate_over_lwps (cancel_breakpoints_callback, lp);
2846
2847   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2848     {
2849       if (debug_linux_nat)
2850         fprintf_unfiltered (gdb_stdlog,
2851                             "LLW: trap ptid is %s.\n",
2852                             target_pid_to_str (lp->ptid));
2853     }
2854
2855   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2856     {
2857       *ourstatus = lp->waitstatus;
2858       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
2859     }
2860   else
2861     store_waitstatus (ourstatus, status);
2862
2863   /* Get ready for the next event.  */
2864   if (target_can_async_p ())
2865     target_async (inferior_event_handler, 0);
2866
2867   if (debug_linux_nat_async)
2868     fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
2869
2870   return lp->ptid;
2871 }
2872
2873 static int
2874 kill_callback (struct lwp_info *lp, void *data)
2875 {
2876   errno = 0;
2877   ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
2878   if (debug_linux_nat)
2879     fprintf_unfiltered (gdb_stdlog,
2880                         "KC:  PTRACE_KILL %s, 0, 0 (%s)\n",
2881                         target_pid_to_str (lp->ptid),
2882                         errno ? safe_strerror (errno) : "OK");
2883
2884   return 0;
2885 }
2886
2887 static int
2888 kill_wait_callback (struct lwp_info *lp, void *data)
2889 {
2890   pid_t pid;
2891
2892   /* We must make sure that there are no pending events (delayed
2893      SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
2894      program doesn't interfere with any following debugging session.  */
2895
2896   /* For cloned processes we must check both with __WCLONE and
2897      without, since the exit status of a cloned process isn't reported
2898      with __WCLONE.  */
2899   if (lp->cloned)
2900     {
2901       do
2902         {
2903           pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
2904           if (pid != (pid_t) -1)
2905             {
2906               if (debug_linux_nat)
2907                 fprintf_unfiltered (gdb_stdlog,
2908                                     "KWC: wait %s received unknown.\n",
2909                                     target_pid_to_str (lp->ptid));
2910               /* The Linux kernel sometimes fails to kill a thread
2911                  completely after PTRACE_KILL; that goes from the stop
2912                  point in do_fork out to the one in
2913                  get_signal_to_deliever and waits again.  So kill it
2914                  again.  */
2915               kill_callback (lp, NULL);
2916             }
2917         }
2918       while (pid == GET_LWP (lp->ptid));
2919
2920       gdb_assert (pid == -1 && errno == ECHILD);
2921     }
2922
2923   do
2924     {
2925       pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
2926       if (pid != (pid_t) -1)
2927         {
2928           if (debug_linux_nat)
2929             fprintf_unfiltered (gdb_stdlog,
2930                                 "KWC: wait %s received unk.\n",
2931                                 target_pid_to_str (lp->ptid));
2932           /* See the call to kill_callback above.  */
2933           kill_callback (lp, NULL);
2934         }
2935     }
2936   while (pid == GET_LWP (lp->ptid));
2937
2938   gdb_assert (pid == -1 && errno == ECHILD);
2939   return 0;
2940 }
2941
2942 static void
2943 linux_nat_kill (void)
2944 {
2945   struct target_waitstatus last;
2946   ptid_t last_ptid;
2947   int status;
2948
2949   if (target_can_async_p ())
2950     target_async (NULL, 0);
2951
2952   /* If we're stopped while forking and we haven't followed yet,
2953      kill the other task.  We need to do this first because the
2954      parent will be sleeping if this is a vfork.  */
2955
2956   get_last_target_status (&last_ptid, &last);
2957
2958   if (last.kind == TARGET_WAITKIND_FORKED
2959       || last.kind == TARGET_WAITKIND_VFORKED)
2960     {
2961       ptrace (PT_KILL, last.value.related_pid, 0, 0);
2962       wait (&status);
2963     }
2964
2965   if (forks_exist_p ())
2966     {
2967       linux_fork_killall ();
2968       drain_queued_events (-1);
2969     }
2970   else
2971     {
2972       /* Kill all LWP's ...  */
2973       iterate_over_lwps (kill_callback, NULL);
2974
2975       /* ... and wait until we've flushed all events.  */
2976       iterate_over_lwps (kill_wait_callback, NULL);
2977     }
2978
2979   target_mourn_inferior ();
2980 }
2981
2982 static void
2983 linux_nat_mourn_inferior (void)
2984 {
2985   /* Destroy LWP info; it's no longer valid.  */
2986   init_lwp_list ();
2987
2988   if (! forks_exist_p ())
2989     {
2990       /* Normal case, no other forks available.  */
2991       if (target_can_async_p ())
2992         linux_nat_async (NULL, 0);
2993       linux_ops->to_mourn_inferior ();
2994     }
2995   else
2996     /* Multi-fork case.  The current inferior_ptid has exited, but
2997        there are other viable forks to debug.  Delete the exiting
2998        one and context-switch to the first available.  */
2999     linux_fork_mourn_inferior ();
3000 }
3001
3002 static LONGEST
3003 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
3004                         const char *annex, gdb_byte *readbuf,
3005                         const gdb_byte *writebuf,
3006                         ULONGEST offset, LONGEST len)
3007 {
3008   struct cleanup *old_chain = save_inferior_ptid ();
3009   LONGEST xfer;
3010
3011   if (is_lwp (inferior_ptid))
3012     inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
3013
3014   xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
3015                                      offset, len);
3016
3017   do_cleanups (old_chain);
3018   return xfer;
3019 }
3020
3021 static int
3022 linux_nat_thread_alive (ptid_t ptid)
3023 {
3024   gdb_assert (is_lwp (ptid));
3025
3026   errno = 0;
3027   ptrace (PTRACE_PEEKUSER, GET_LWP (ptid), 0, 0);
3028   if (debug_linux_nat)
3029     fprintf_unfiltered (gdb_stdlog,
3030                         "LLTA: PTRACE_PEEKUSER %s, 0, 0 (%s)\n",
3031                         target_pid_to_str (ptid),
3032                         errno ? safe_strerror (errno) : "OK");
3033
3034   /* Not every Linux kernel implements PTRACE_PEEKUSER.  But we can
3035      handle that case gracefully since ptrace will first do a lookup
3036      for the process based upon the passed-in pid.  If that fails we
3037      will get either -ESRCH or -EPERM, otherwise the child exists and
3038      is alive.  */
3039   if (errno == ESRCH || errno == EPERM)
3040     return 0;
3041
3042   return 1;
3043 }
3044
3045 static char *
3046 linux_nat_pid_to_str (ptid_t ptid)
3047 {
3048   static char buf[64];
3049
3050   if (is_lwp (ptid)
3051       && ((lwp_list && lwp_list->next)
3052           || GET_PID (ptid) != GET_LWP (ptid)))
3053     {
3054       snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
3055       return buf;
3056     }
3057
3058   return normal_pid_to_str (ptid);
3059 }
3060
3061 static void
3062 sigchld_handler (int signo)
3063 {
3064   if (linux_nat_async_enabled
3065       && linux_nat_async_events_state != sigchld_sync
3066       && signo == SIGCHLD)
3067     /* It is *always* a bug to hit this.  */
3068     internal_error (__FILE__, __LINE__,
3069                     "sigchld_handler called when async events are enabled");
3070
3071   /* Do nothing.  The only reason for this handler is that it allows
3072      us to use sigsuspend in linux_nat_wait above to wait for the
3073      arrival of a SIGCHLD.  */
3074 }
3075
3076 /* Accepts an integer PID; Returns a string representing a file that
3077    can be opened to get the symbols for the child process.  */
3078
3079 static char *
3080 linux_child_pid_to_exec_file (int pid)
3081 {
3082   char *name1, *name2;
3083
3084   name1 = xmalloc (MAXPATHLEN);
3085   name2 = xmalloc (MAXPATHLEN);
3086   make_cleanup (xfree, name1);
3087   make_cleanup (xfree, name2);
3088   memset (name2, 0, MAXPATHLEN);
3089
3090   sprintf (name1, "/proc/%d/exe", pid);
3091   if (readlink (name1, name2, MAXPATHLEN) > 0)
3092     return name2;
3093   else
3094     return name1;
3095 }
3096
3097 /* Service function for corefiles and info proc.  */
3098
3099 static int
3100 read_mapping (FILE *mapfile,
3101               long long *addr,
3102               long long *endaddr,
3103               char *permissions,
3104               long long *offset,
3105               char *device, long long *inode, char *filename)
3106 {
3107   int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
3108                     addr, endaddr, permissions, offset, device, inode);
3109
3110   filename[0] = '\0';
3111   if (ret > 0 && ret != EOF)
3112     {
3113       /* Eat everything up to EOL for the filename.  This will prevent
3114          weird filenames (such as one with embedded whitespace) from
3115          confusing this code.  It also makes this code more robust in
3116          respect to annotations the kernel may add after the filename.
3117
3118          Note the filename is used for informational purposes
3119          only.  */
3120       ret += fscanf (mapfile, "%[^\n]\n", filename);
3121     }
3122
3123   return (ret != 0 && ret != EOF);
3124 }
3125
3126 /* Fills the "to_find_memory_regions" target vector.  Lists the memory
3127    regions in the inferior for a corefile.  */
3128
3129 static int
3130 linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
3131                                             unsigned long,
3132                                             int, int, int, void *), void *obfd)
3133 {
3134   long long pid = PIDGET (inferior_ptid);
3135   char mapsfilename[MAXPATHLEN];
3136   FILE *mapsfile;
3137   long long addr, endaddr, size, offset, inode;
3138   char permissions[8], device[8], filename[MAXPATHLEN];
3139   int read, write, exec;
3140   int ret;
3141
3142   /* Compose the filename for the /proc memory map, and open it.  */
3143   sprintf (mapsfilename, "/proc/%lld/maps", pid);
3144   if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
3145     error (_("Could not open %s."), mapsfilename);
3146
3147   if (info_verbose)
3148     fprintf_filtered (gdb_stdout,
3149                       "Reading memory regions from %s\n", mapsfilename);
3150
3151   /* Now iterate until end-of-file.  */
3152   while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
3153                        &offset, &device[0], &inode, &filename[0]))
3154     {
3155       size = endaddr - addr;
3156
3157       /* Get the segment's permissions.  */
3158       read = (strchr (permissions, 'r') != 0);
3159       write = (strchr (permissions, 'w') != 0);
3160       exec = (strchr (permissions, 'x') != 0);
3161
3162       if (info_verbose)
3163         {
3164           fprintf_filtered (gdb_stdout,
3165                             "Save segment, %lld bytes at 0x%s (%c%c%c)",
3166                             size, paddr_nz (addr),
3167                             read ? 'r' : ' ',
3168                             write ? 'w' : ' ', exec ? 'x' : ' ');
3169           if (filename[0])
3170             fprintf_filtered (gdb_stdout, " for %s", filename);
3171           fprintf_filtered (gdb_stdout, "\n");
3172         }
3173
3174       /* Invoke the callback function to create the corefile
3175          segment.  */
3176       func (addr, size, read, write, exec, obfd);
3177     }
3178   fclose (mapsfile);
3179   return 0;
3180 }
3181
3182 /* Records the thread's register state for the corefile note
3183    section.  */
3184
3185 static char *
3186 linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
3187                                char *note_data, int *note_size)
3188 {
3189   gdb_gregset_t gregs;
3190   gdb_fpregset_t fpregs;
3191   unsigned long lwp = ptid_get_lwp (ptid);
3192   struct regcache *regcache = get_thread_regcache (ptid);
3193   struct gdbarch *gdbarch = get_regcache_arch (regcache);
3194   const struct regset *regset;
3195   int core_regset_p;
3196   struct cleanup *old_chain;
3197   struct core_regset_section *sect_list;
3198   char *gdb_regset;
3199
3200   old_chain = save_inferior_ptid ();
3201   inferior_ptid = ptid;
3202   target_fetch_registers (regcache, -1);
3203   do_cleanups (old_chain);
3204
3205   core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
3206   sect_list = gdbarch_core_regset_sections (gdbarch);
3207
3208   if (core_regset_p
3209       && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
3210                                                      sizeof (gregs))) != NULL
3211       && regset->collect_regset != NULL)
3212     regset->collect_regset (regset, regcache, -1,
3213                             &gregs, sizeof (gregs));
3214   else
3215     fill_gregset (regcache, &gregs, -1);
3216
3217   note_data = (char *) elfcore_write_prstatus (obfd,
3218                                                note_data,
3219                                                note_size,
3220                                                lwp,
3221                                                stop_signal, &gregs);
3222
3223   /* The loop below uses the new struct core_regset_section, which stores
3224      the supported section names and sizes for the core file.  Note that
3225      note PRSTATUS needs to be treated specially.  But the other notes are
3226      structurally the same, so they can benefit from the new struct.  */
3227   if (core_regset_p && sect_list != NULL)
3228     while (sect_list->sect_name != NULL)
3229       {
3230         /* .reg was already handled above.  */
3231         if (strcmp (sect_list->sect_name, ".reg") == 0)
3232           {
3233             sect_list++;
3234             continue;
3235           }
3236         regset = gdbarch_regset_from_core_section (gdbarch,
3237                                                    sect_list->sect_name,
3238                                                    sect_list->size);
3239         gdb_assert (regset && regset->collect_regset);
3240         gdb_regset = xmalloc (sect_list->size);
3241         regset->collect_regset (regset, regcache, -1,
3242                                 gdb_regset, sect_list->size);
3243         note_data = (char *) elfcore_write_register_note (obfd,
3244                                                           note_data,
3245                                                           note_size,
3246                                                           sect_list->sect_name,
3247                                                           gdb_regset,
3248                                                           sect_list->size);
3249         xfree (gdb_regset);
3250         sect_list++;
3251       }
3252
3253   /* For architectures that does not have the struct core_regset_section
3254      implemented, we use the old method.  When all the architectures have
3255      the new support, the code below should be deleted.  */
3256   else
3257     {
3258       if (core_regset_p
3259           && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
3260                                                          sizeof (fpregs))) != NULL
3261           && regset->collect_regset != NULL)
3262         regset->collect_regset (regset, regcache, -1,
3263                                 &fpregs, sizeof (fpregs));
3264       else
3265         fill_fpregset (regcache, &fpregs, -1);
3266
3267       note_data = (char *) elfcore_write_prfpreg (obfd,
3268                                                   note_data,
3269                                                   note_size,
3270                                                   &fpregs, sizeof (fpregs));
3271     }
3272
3273   return note_data;
3274 }
3275
3276 struct linux_nat_corefile_thread_data
3277 {
3278   bfd *obfd;
3279   char *note_data;
3280   int *note_size;
3281   int num_notes;
3282 };
3283
3284 /* Called by gdbthread.c once per thread.  Records the thread's
3285    register state for the corefile note section.  */
3286
3287 static int
3288 linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
3289 {
3290   struct linux_nat_corefile_thread_data *args = data;
3291
3292   args->note_data = linux_nat_do_thread_registers (args->obfd,
3293                                                    ti->ptid,
3294                                                    args->note_data,
3295                                                    args->note_size);
3296   args->num_notes++;
3297
3298   return 0;
3299 }
3300
3301 /* Records the register state for the corefile note section.  */
3302
3303 static char *
3304 linux_nat_do_registers (bfd *obfd, ptid_t ptid,
3305                         char *note_data, int *note_size)
3306 {
3307   return linux_nat_do_thread_registers (obfd,
3308                                         ptid_build (ptid_get_pid (inferior_ptid),
3309                                                     ptid_get_pid (inferior_ptid),
3310                                                     0),
3311                                         note_data, note_size);
3312 }
3313
3314 /* Fills the "to_make_corefile_note" target vector.  Builds the note
3315    section for a corefile, and returns it in a malloc buffer.  */
3316
3317 static char *
3318 linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
3319 {
3320   struct linux_nat_corefile_thread_data thread_args;
3321   struct cleanup *old_chain;
3322   /* The variable size must be >= sizeof (prpsinfo_t.pr_fname).  */
3323   char fname[16] = { '\0' };
3324   /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs).  */
3325   char psargs[80] = { '\0' };
3326   char *note_data = NULL;
3327   ptid_t current_ptid = inferior_ptid;
3328   gdb_byte *auxv;
3329   int auxv_len;
3330
3331   if (get_exec_file (0))
3332     {
3333       strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
3334       strncpy (psargs, get_exec_file (0), sizeof (psargs));
3335       if (get_inferior_args ())
3336         {
3337           char *string_end;
3338           char *psargs_end = psargs + sizeof (psargs);
3339
3340           /* linux_elfcore_write_prpsinfo () handles zero unterminated
3341              strings fine.  */
3342           string_end = memchr (psargs, 0, sizeof (psargs));
3343           if (string_end != NULL)
3344             {
3345               *string_end++ = ' ';
3346               strncpy (string_end, get_inferior_args (),
3347                        psargs_end - string_end);
3348             }
3349         }
3350       note_data = (char *) elfcore_write_prpsinfo (obfd,
3351                                                    note_data,
3352                                                    note_size, fname, psargs);
3353     }
3354
3355   /* Dump information for threads.  */
3356   thread_args.obfd = obfd;
3357   thread_args.note_data = note_data;
3358   thread_args.note_size = note_size;
3359   thread_args.num_notes = 0;
3360   iterate_over_lwps (linux_nat_corefile_thread_callback, &thread_args);
3361   if (thread_args.num_notes == 0)
3362     {
3363       /* iterate_over_threads didn't come up with any threads; just
3364          use inferior_ptid.  */
3365       note_data = linux_nat_do_registers (obfd, inferior_ptid,
3366                                           note_data, note_size);
3367     }
3368   else
3369     {
3370       note_data = thread_args.note_data;
3371     }
3372
3373   auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
3374                                 NULL, &auxv);
3375   if (auxv_len > 0)
3376     {
3377       note_data = elfcore_write_note (obfd, note_data, note_size,
3378                                       "CORE", NT_AUXV, auxv, auxv_len);
3379       xfree (auxv);
3380     }
3381
3382   make_cleanup (xfree, note_data);
3383   return note_data;
3384 }
3385
3386 /* Implement the "info proc" command.  */
3387
3388 static void
3389 linux_nat_info_proc_cmd (char *args, int from_tty)
3390 {
3391   long long pid = PIDGET (inferior_ptid);
3392   FILE *procfile;
3393   char **argv = NULL;
3394   char buffer[MAXPATHLEN];
3395   char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
3396   int cmdline_f = 1;
3397   int cwd_f = 1;
3398   int exe_f = 1;
3399   int mappings_f = 0;
3400   int environ_f = 0;
3401   int status_f = 0;
3402   int stat_f = 0;
3403   int all = 0;
3404   struct stat dummy;
3405
3406   if (args)
3407     {
3408       /* Break up 'args' into an argv array.  */
3409       if ((argv = buildargv (args)) == NULL)
3410         nomem (0);
3411       else
3412         make_cleanup_freeargv (argv);
3413     }
3414   while (argv != NULL && *argv != NULL)
3415     {
3416       if (isdigit (argv[0][0]))
3417         {
3418           pid = strtoul (argv[0], NULL, 10);
3419         }
3420       else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
3421         {
3422           mappings_f = 1;
3423         }
3424       else if (strcmp (argv[0], "status") == 0)
3425         {
3426           status_f = 1;
3427         }
3428       else if (strcmp (argv[0], "stat") == 0)
3429         {
3430           stat_f = 1;
3431         }
3432       else if (strcmp (argv[0], "cmd") == 0)
3433         {
3434           cmdline_f = 1;
3435         }
3436       else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
3437         {
3438           exe_f = 1;
3439         }
3440       else if (strcmp (argv[0], "cwd") == 0)
3441         {
3442           cwd_f = 1;
3443         }
3444       else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
3445         {
3446           all = 1;
3447         }
3448       else
3449         {
3450           /* [...] (future options here) */
3451         }
3452       argv++;
3453     }
3454   if (pid == 0)
3455     error (_("No current process: you must name one."));
3456
3457   sprintf (fname1, "/proc/%lld", pid);
3458   if (stat (fname1, &dummy) != 0)
3459     error (_("No /proc directory: '%s'"), fname1);
3460
3461   printf_filtered (_("process %lld\n"), pid);
3462   if (cmdline_f || all)
3463     {
3464       sprintf (fname1, "/proc/%lld/cmdline", pid);
3465       if ((procfile = fopen (fname1, "r")) != NULL)
3466         {
3467           fgets (buffer, sizeof (buffer), procfile);
3468           printf_filtered ("cmdline = '%s'\n", buffer);
3469           fclose (procfile);
3470         }
3471       else
3472         warning (_("unable to open /proc file '%s'"), fname1);
3473     }
3474   if (cwd_f || all)
3475     {
3476       sprintf (fname1, "/proc/%lld/cwd", pid);
3477       memset (fname2, 0, sizeof (fname2));
3478       if (readlink (fname1, fname2, sizeof (fname2)) > 0)
3479         printf_filtered ("cwd = '%s'\n", fname2);
3480       else
3481         warning (_("unable to read link '%s'"), fname1);
3482     }
3483   if (exe_f || all)
3484     {
3485       sprintf (fname1, "/proc/%lld/exe", pid);
3486       memset (fname2, 0, sizeof (fname2));
3487       if (readlink (fname1, fname2, sizeof (fname2)) > 0)
3488         printf_filtered ("exe = '%s'\n", fname2);
3489       else
3490         warning (_("unable to read link '%s'"), fname1);
3491     }
3492   if (mappings_f || all)
3493     {
3494       sprintf (fname1, "/proc/%lld/maps", pid);
3495       if ((procfile = fopen (fname1, "r")) != NULL)
3496         {
3497           long long addr, endaddr, size, offset, inode;
3498           char permissions[8], device[8], filename[MAXPATHLEN];
3499
3500           printf_filtered (_("Mapped address spaces:\n\n"));
3501           if (gdbarch_addr_bit (current_gdbarch) == 32)
3502             {
3503               printf_filtered ("\t%10s %10s %10s %10s %7s\n",
3504                            "Start Addr",
3505                            "  End Addr",
3506                            "      Size", "    Offset", "objfile");
3507             }
3508           else
3509             {
3510               printf_filtered ("  %18s %18s %10s %10s %7s\n",
3511                            "Start Addr",
3512                            "  End Addr",
3513                            "      Size", "    Offset", "objfile");
3514             }
3515
3516           while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
3517                                &offset, &device[0], &inode, &filename[0]))
3518             {
3519               size = endaddr - addr;
3520
3521               /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
3522                  calls here (and possibly above) should be abstracted
3523                  out into their own functions?  Andrew suggests using
3524                  a generic local_address_string instead to print out
3525                  the addresses; that makes sense to me, too.  */
3526
3527               if (gdbarch_addr_bit (current_gdbarch) == 32)
3528                 {
3529                   printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
3530                                (unsigned long) addr,    /* FIXME: pr_addr */
3531                                (unsigned long) endaddr,
3532                                (int) size,
3533                                (unsigned int) offset,
3534                                filename[0] ? filename : "");
3535                 }
3536               else
3537                 {
3538                   printf_filtered ("  %#18lx %#18lx %#10x %#10x %7s\n",
3539                                (unsigned long) addr,    /* FIXME: pr_addr */
3540                                (unsigned long) endaddr,
3541                                (int) size,
3542                                (unsigned int) offset,
3543                                filename[0] ? filename : "");
3544                 }
3545             }
3546
3547           fclose (procfile);
3548         }
3549       else
3550         warning (_("unable to open /proc file '%s'"), fname1);
3551     }
3552   if (status_f || all)
3553     {
3554       sprintf (fname1, "/proc/%lld/status", pid);
3555       if ((procfile = fopen (fname1, "r")) != NULL)
3556         {
3557           while (fgets (buffer, sizeof (buffer), procfile) != NULL)
3558             puts_filtered (buffer);
3559           fclose (procfile);
3560         }
3561       else
3562         warning (_("unable to open /proc file '%s'"), fname1);
3563     }
3564   if (stat_f || all)
3565     {
3566       sprintf (fname1, "/proc/%lld/stat", pid);
3567       if ((procfile = fopen (fname1, "r")) != NULL)
3568         {
3569           int itmp;
3570           char ctmp;
3571           long ltmp;
3572
3573           if (fscanf (procfile, "%d ", &itmp) > 0)
3574             printf_filtered (_("Process: %d\n"), itmp);
3575           if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
3576             printf_filtered (_("Exec file: %s\n"), buffer);
3577           if (fscanf (procfile, "%c ", &ctmp) > 0)
3578             printf_filtered (_("State: %c\n"), ctmp);
3579           if (fscanf (procfile, "%d ", &itmp) > 0)
3580             printf_filtered (_("Parent process: %d\n"), itmp);
3581           if (fscanf (procfile, "%d ", &itmp) > 0)
3582             printf_filtered (_("Process group: %d\n"), itmp);
3583           if (fscanf (procfile, "%d ", &itmp) > 0)
3584             printf_filtered (_("Session id: %d\n"), itmp);
3585           if (fscanf (procfile, "%d ", &itmp) > 0)
3586             printf_filtered (_("TTY: %d\n"), itmp);
3587           if (fscanf (procfile, "%d ", &itmp) > 0)
3588             printf_filtered (_("TTY owner process group: %d\n"), itmp);
3589           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3590             printf_filtered (_("Flags: 0x%lx\n"), ltmp);
3591           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3592             printf_filtered (_("Minor faults (no memory page): %lu\n"),
3593                              (unsigned long) ltmp);
3594           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3595             printf_filtered (_("Minor faults, children: %lu\n"),
3596                              (unsigned long) ltmp);
3597           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3598             printf_filtered (_("Major faults (memory page faults): %lu\n"),
3599                              (unsigned long) ltmp);
3600           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3601             printf_filtered (_("Major faults, children: %lu\n"),
3602                              (unsigned long) ltmp);
3603           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3604             printf_filtered (_("utime: %ld\n"), ltmp);
3605           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3606             printf_filtered (_("stime: %ld\n"), ltmp);
3607           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3608             printf_filtered (_("utime, children: %ld\n"), ltmp);
3609           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3610             printf_filtered (_("stime, children: %ld\n"), ltmp);
3611           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3612             printf_filtered (_("jiffies remaining in current time slice: %ld\n"),
3613                              ltmp);
3614           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3615             printf_filtered (_("'nice' value: %ld\n"), ltmp);
3616           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3617             printf_filtered (_("jiffies until next timeout: %lu\n"),
3618                              (unsigned long) ltmp);
3619           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3620             printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
3621                              (unsigned long) ltmp);
3622           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3623             printf_filtered (_("start time (jiffies since system boot): %ld\n"),
3624                              ltmp);
3625           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3626             printf_filtered (_("Virtual memory size: %lu\n"),
3627                              (unsigned long) ltmp);
3628           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3629             printf_filtered (_("Resident set size: %lu\n"), (unsigned long) ltmp);
3630           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3631             printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
3632           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3633             printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
3634           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3635             printf_filtered (_("End of text: 0x%lx\n"), ltmp);
3636           if (fscanf (procfile, "%lu ", &ltmp) > 0)
3637             printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
3638 #if 0                           /* Don't know how architecture-dependent the rest is...
3639                                    Anyway the signal bitmap info is available from "status".  */
3640           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch? */
3641             printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
3642           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch? */
3643             printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
3644           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3645             printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
3646           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3647             printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
3648           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3649             printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
3650           if (fscanf (procfile, "%ld ", &ltmp) > 0)
3651             printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
3652           if (fscanf (procfile, "%lu ", &ltmp) > 0)     /* FIXME arch? */
3653             printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
3654 #endif
3655           fclose (procfile);
3656         }
3657       else
3658         warning (_("unable to open /proc file '%s'"), fname1);
3659     }
3660 }
3661
3662 /* Implement the to_xfer_partial interface for memory reads using the /proc
3663    filesystem.  Because we can use a single read() call for /proc, this
3664    can be much more efficient than banging away at PTRACE_PEEKTEXT,
3665    but it doesn't support writes.  */
3666
3667 static LONGEST
3668 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3669                          const char *annex, gdb_byte *readbuf,
3670                          const gdb_byte *writebuf,
3671                          ULONGEST offset, LONGEST len)
3672 {
3673   LONGEST ret;
3674   int fd;
3675   char filename[64];
3676
3677   if (object != TARGET_OBJECT_MEMORY || !readbuf)
3678     return 0;
3679
3680   /* Don't bother for one word.  */
3681   if (len < 3 * sizeof (long))
3682     return 0;
3683
3684   /* We could keep this file open and cache it - possibly one per
3685      thread.  That requires some juggling, but is even faster.  */
3686   sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
3687   fd = open (filename, O_RDONLY | O_LARGEFILE);
3688   if (fd == -1)
3689     return 0;
3690
3691   /* If pread64 is available, use it.  It's faster if the kernel
3692      supports it (only one syscall), and it's 64-bit safe even on
3693      32-bit platforms (for instance, SPARC debugging a SPARC64
3694      application).  */
3695 #ifdef HAVE_PREAD64
3696   if (pread64 (fd, readbuf, len, offset) != len)
3697 #else
3698   if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
3699 #endif
3700     ret = 0;
3701   else
3702     ret = len;
3703
3704   close (fd);
3705   return ret;
3706 }
3707
3708 /* Parse LINE as a signal set and add its set bits to SIGS.  */
3709
3710 static void
3711 add_line_to_sigset (const char *line, sigset_t *sigs)
3712 {
3713   int len = strlen (line) - 1;
3714   const char *p;
3715   int signum;
3716
3717   if (line[len] != '\n')
3718     error (_("Could not parse signal set: %s"), line);
3719
3720   p = line;
3721   signum = len * 4;
3722   while (len-- > 0)
3723     {
3724       int digit;
3725
3726       if (*p >= '0' && *p <= '9')
3727         digit = *p - '0';
3728       else if (*p >= 'a' && *p <= 'f')
3729         digit = *p - 'a' + 10;
3730       else
3731         error (_("Could not parse signal set: %s"), line);
3732
3733       signum -= 4;
3734
3735       if (digit & 1)
3736         sigaddset (sigs, signum + 1);
3737       if (digit & 2)
3738         sigaddset (sigs, signum + 2);
3739       if (digit & 4)
3740         sigaddset (sigs, signum + 3);
3741       if (digit & 8)
3742         sigaddset (sigs, signum + 4);
3743
3744       p++;
3745     }
3746 }
3747
3748 /* Find process PID's pending signals from /proc/pid/status and set
3749    SIGS to match.  */
3750
3751 void
3752 linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored)
3753 {
3754   FILE *procfile;
3755   char buffer[MAXPATHLEN], fname[MAXPATHLEN];
3756   int signum;
3757
3758   sigemptyset (pending);
3759   sigemptyset (blocked);
3760   sigemptyset (ignored);
3761   sprintf (fname, "/proc/%d/status", pid);
3762   procfile = fopen (fname, "r");
3763   if (procfile == NULL)
3764     error (_("Could not open %s"), fname);
3765
3766   while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
3767     {
3768       /* Normal queued signals are on the SigPnd line in the status
3769          file.  However, 2.6 kernels also have a "shared" pending
3770          queue for delivering signals to a thread group, so check for
3771          a ShdPnd line also.
3772
3773          Unfortunately some Red Hat kernels include the shared pending
3774          queue but not the ShdPnd status field.  */
3775
3776       if (strncmp (buffer, "SigPnd:\t", 8) == 0)
3777         add_line_to_sigset (buffer + 8, pending);
3778       else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
3779         add_line_to_sigset (buffer + 8, pending);
3780       else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
3781         add_line_to_sigset (buffer + 8, blocked);
3782       else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
3783         add_line_to_sigset (buffer + 8, ignored);
3784     }
3785
3786   fclose (procfile);
3787 }
3788
3789 static LONGEST
3790 linux_xfer_partial (struct target_ops *ops, enum target_object object,
3791                     const char *annex, gdb_byte *readbuf,
3792                     const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3793 {
3794   LONGEST xfer;
3795
3796   if (object == TARGET_OBJECT_AUXV)
3797     return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
3798                              offset, len);
3799
3800   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
3801                                   offset, len);
3802   if (xfer != 0)
3803     return xfer;
3804
3805   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
3806                              offset, len);
3807 }
3808
3809 /* Create a prototype generic GNU/Linux target.  The client can override
3810    it with local methods.  */
3811
3812 static void
3813 linux_target_install_ops (struct target_ops *t)
3814 {
3815   t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
3816   t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
3817   t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
3818   t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
3819   t->to_post_startup_inferior = linux_child_post_startup_inferior;
3820   t->to_post_attach = linux_child_post_attach;
3821   t->to_follow_fork = linux_child_follow_fork;
3822   t->to_find_memory_regions = linux_nat_find_memory_regions;
3823   t->to_make_corefile_notes = linux_nat_make_corefile_notes;
3824
3825   super_xfer_partial = t->to_xfer_partial;
3826   t->to_xfer_partial = linux_xfer_partial;
3827 }
3828
3829 struct target_ops *
3830 linux_target (void)
3831 {
3832   struct target_ops *t;
3833
3834   t = inf_ptrace_target ();
3835   linux_target_install_ops (t);
3836
3837   return t;
3838 }
3839
3840 struct target_ops *
3841 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
3842 {
3843   struct target_ops *t;
3844
3845   t = inf_ptrace_trad_target (register_u_offset);
3846   linux_target_install_ops (t);
3847
3848   return t;
3849 }
3850
3851 /* Controls if async mode is permitted.  */
3852 static int linux_async_permitted = 0;
3853
3854 /* The set command writes to this variable.  If the inferior is
3855    executing, linux_nat_async_permitted is *not* updated.  */
3856 static int linux_async_permitted_1 = 0;
3857
3858 static void
3859 set_maintenance_linux_async_permitted (char *args, int from_tty,
3860                                struct cmd_list_element *c)
3861 {
3862   if (target_has_execution)
3863     {
3864       linux_async_permitted_1 = linux_async_permitted;
3865       error (_("Cannot change this setting while the inferior is running."));
3866     }
3867
3868   linux_async_permitted = linux_async_permitted_1;
3869   linux_nat_set_async_mode (linux_async_permitted);
3870 }
3871
3872 static void
3873 show_maintenance_linux_async_permitted (struct ui_file *file, int from_tty,
3874                             struct cmd_list_element *c, const char *value)
3875 {
3876   fprintf_filtered (file, _("\
3877 Controlling the GNU/Linux inferior in asynchronous mode is %s.\n"),
3878                     value);
3879 }
3880
3881 /* target_is_async_p implementation.  */
3882
3883 static int
3884 linux_nat_is_async_p (void)
3885 {
3886   /* NOTE: palves 2008-03-21: We're only async when the user requests
3887      it explicitly with the "maintenance set linux-async" command.
3888      Someday, linux will always be async.  */
3889   if (!linux_async_permitted)
3890     return 0;
3891
3892   return 1;
3893 }
3894
3895 /* target_can_async_p implementation.  */
3896
3897 static int
3898 linux_nat_can_async_p (void)
3899 {
3900   /* NOTE: palves 2008-03-21: We're only async when the user requests
3901      it explicitly with the "maintenance set linux-async" command.
3902      Someday, linux will always be async.  */
3903   if (!linux_async_permitted)
3904     return 0;
3905
3906   /* See target.h/target_async_mask.  */
3907   return linux_nat_async_mask_value;
3908 }
3909
3910 /* target_async_mask implementation.  */
3911
3912 static int
3913 linux_nat_async_mask (int mask)
3914 {
3915   int current_state;
3916   current_state = linux_nat_async_mask_value;
3917
3918   if (current_state != mask)
3919     {
3920       if (mask == 0)
3921         {
3922           linux_nat_async (NULL, 0);
3923           linux_nat_async_mask_value = mask;
3924         }
3925       else
3926         {
3927           linux_nat_async_mask_value = mask;
3928           linux_nat_async (inferior_event_handler, 0);
3929         }
3930     }
3931
3932   return current_state;
3933 }
3934
3935 /* Pop an event from the event pipe.  */
3936
3937 static int
3938 linux_nat_event_pipe_pop (int* ptr_status, int* ptr_options)
3939 {
3940   struct waitpid_result event = {0};
3941   int ret;
3942
3943   do
3944     {
3945       ret = read (linux_nat_event_pipe[0], &event, sizeof (event));
3946     }
3947   while (ret == -1 && errno == EINTR);
3948
3949   gdb_assert (ret == sizeof (event));
3950
3951   *ptr_status = event.status;
3952   *ptr_options = event.options;
3953
3954   linux_nat_num_queued_events--;
3955
3956   return event.pid;
3957 }
3958
3959 /* Push an event into the event pipe.  */
3960
3961 static void
3962 linux_nat_event_pipe_push (int pid, int status, int options)
3963 {
3964   int ret;
3965   struct waitpid_result event = {0};
3966   event.pid = pid;
3967   event.status = status;
3968   event.options = options;
3969
3970   do
3971     {
3972       ret = write (linux_nat_event_pipe[1], &event, sizeof (event));
3973       gdb_assert ((ret == -1 && errno == EINTR) || ret == sizeof (event));
3974     } while (ret == -1 && errno == EINTR);
3975
3976   linux_nat_num_queued_events++;
3977 }
3978
3979 static void
3980 get_pending_events (void)
3981 {
3982   int status, options, pid;
3983
3984   if (!linux_nat_async_enabled
3985       || linux_nat_async_events_state != sigchld_async)
3986     internal_error (__FILE__, __LINE__,
3987                     "get_pending_events called with async masked");
3988
3989   while (1)
3990     {
3991       status = 0;
3992       options = __WCLONE | WNOHANG;
3993
3994       do
3995         {
3996           pid = waitpid (-1, &status, options);
3997         }
3998       while (pid == -1 && errno == EINTR);
3999
4000       if (pid <= 0)
4001         {
4002           options = WNOHANG;
4003           do
4004             {
4005               pid = waitpid (-1, &status, options);
4006             }
4007           while (pid == -1 && errno == EINTR);
4008         }
4009
4010       if (pid <= 0)
4011         /* No more children reporting events.  */
4012         break;
4013
4014       if (debug_linux_nat_async)
4015         fprintf_unfiltered (gdb_stdlog, "\
4016 get_pending_events: pid(%d), status(%x), options (%x)\n",
4017                             pid, status, options);
4018
4019       linux_nat_event_pipe_push (pid, status, options);
4020     }
4021
4022   if (debug_linux_nat_async)
4023     fprintf_unfiltered (gdb_stdlog, "\
4024 get_pending_events: linux_nat_num_queued_events(%d)\n",
4025                         linux_nat_num_queued_events);
4026 }
4027
4028 /* SIGCHLD handler for async mode.  */
4029
4030 static void
4031 async_sigchld_handler (int signo)
4032 {
4033   if (debug_linux_nat_async)
4034     fprintf_unfiltered (gdb_stdlog, "async_sigchld_handler\n");
4035
4036   get_pending_events ();
4037 }
4038
4039 /* Set SIGCHLD handling state to STATE.  Returns previous state.  */
4040
4041 static enum sigchld_state
4042 linux_nat_async_events (enum sigchld_state state)
4043 {
4044   enum sigchld_state current_state = linux_nat_async_events_state;
4045
4046   if (debug_linux_nat_async)
4047     fprintf_unfiltered (gdb_stdlog,
4048                         "LNAE: state(%d): linux_nat_async_events_state(%d), "
4049                         "linux_nat_num_queued_events(%d)\n",
4050                         state, linux_nat_async_events_state,
4051                         linux_nat_num_queued_events);
4052
4053   if (current_state != state)
4054     {
4055       sigset_t mask;
4056       sigemptyset (&mask);
4057       sigaddset (&mask, SIGCHLD);
4058
4059       /* Always block before changing state.  */
4060       sigprocmask (SIG_BLOCK, &mask, NULL);
4061
4062       /* Set new state.  */
4063       linux_nat_async_events_state = state;
4064
4065       switch (state)
4066         {
4067         case sigchld_sync:
4068           {
4069             /* Block target events.  */
4070             sigprocmask (SIG_BLOCK, &mask, NULL);
4071             sigaction (SIGCHLD, &sync_sigchld_action, NULL);
4072             /* Get events out of queue, and make them available to
4073                queued_waitpid / my_waitpid.  */
4074             pipe_to_local_event_queue ();
4075           }
4076           break;
4077         case sigchld_async:
4078           {
4079             /* Unblock target events for async mode.  */
4080
4081             sigprocmask (SIG_BLOCK, &mask, NULL);
4082
4083             /* Put events we already waited on, in the pipe first, so
4084                events are FIFO.  */
4085             local_event_queue_to_pipe ();
4086             /* While in masked async, we may have not collected all
4087                the pending events.  Get them out now.  */
4088             get_pending_events ();
4089
4090             /* Let'em come.   */
4091             sigaction (SIGCHLD, &async_sigchld_action, NULL);
4092             sigprocmask (SIG_UNBLOCK, &mask, NULL);
4093           }
4094           break;
4095         case sigchld_default:
4096           {
4097             /* SIGCHLD default mode.  */
4098             sigaction (SIGCHLD, &sigchld_default_action, NULL);
4099
4100             /* Get events out of queue, and make them available to
4101                queued_waitpid / my_waitpid.  */
4102             pipe_to_local_event_queue ();
4103
4104             /* Unblock SIGCHLD.  */
4105             sigprocmask (SIG_UNBLOCK, &mask, NULL);
4106           }
4107           break;
4108         }
4109     }
4110
4111   return current_state;
4112 }
4113
4114 static int async_terminal_is_ours = 1;
4115
4116 /* target_terminal_inferior implementation.  */
4117
4118 static void
4119 linux_nat_terminal_inferior (void)
4120 {
4121   if (!target_is_async_p ())
4122     {
4123       /* Async mode is disabled.  */
4124       terminal_inferior ();
4125       return;
4126     }
4127
4128   /* GDB should never give the terminal to the inferior, if the
4129      inferior is running in the background (run&, continue&, etc.).
4130      This check can be removed when the common code is fixed.  */
4131   if (!sync_execution)
4132     return;
4133
4134   terminal_inferior ();
4135
4136   if (!async_terminal_is_ours)
4137     return;
4138
4139   delete_file_handler (input_fd);
4140   async_terminal_is_ours = 0;
4141   set_sigint_trap ();
4142 }
4143
4144 /* target_terminal_ours implementation.  */
4145
4146 void
4147 linux_nat_terminal_ours (void)
4148 {
4149   if (!target_is_async_p ())
4150     {
4151       /* Async mode is disabled.  */
4152       terminal_ours ();
4153       return;
4154     }
4155
4156   /* GDB should never give the terminal to the inferior if the
4157      inferior is running in the background (run&, continue&, etc.),
4158      but claiming it sure should.  */
4159   terminal_ours ();
4160
4161   if (!sync_execution)
4162     return;
4163
4164   if (async_terminal_is_ours)
4165     return;
4166
4167   clear_sigint_trap ();
4168   add_file_handler (input_fd, stdin_event_handler, 0);
4169   async_terminal_is_ours = 1;
4170 }
4171
4172 static void (*async_client_callback) (enum inferior_event_type event_type,
4173                                       void *context);
4174 static void *async_client_context;
4175
4176 static void
4177 linux_nat_async_file_handler (int error, gdb_client_data client_data)
4178 {
4179   async_client_callback (INF_REG_EVENT, async_client_context);
4180 }
4181
4182 /* target_async implementation.  */
4183
4184 static void
4185 linux_nat_async (void (*callback) (enum inferior_event_type event_type,
4186                                    void *context), void *context)
4187 {
4188   if (linux_nat_async_mask_value == 0 || !linux_nat_async_enabled)
4189     internal_error (__FILE__, __LINE__,
4190                     "Calling target_async when async is masked");
4191
4192   if (callback != NULL)
4193     {
4194       async_client_callback = callback;
4195       async_client_context = context;
4196       add_file_handler (linux_nat_event_pipe[0],
4197                         linux_nat_async_file_handler, NULL);
4198
4199       linux_nat_async_events (sigchld_async);
4200     }
4201   else
4202     {
4203       async_client_callback = callback;
4204       async_client_context = context;
4205
4206       linux_nat_async_events (sigchld_sync);
4207       delete_file_handler (linux_nat_event_pipe[0]);
4208     }
4209   return;
4210 }
4211
4212 /* Enable/Disable async mode.  */
4213
4214 static void
4215 linux_nat_set_async_mode (int on)
4216 {
4217   if (linux_nat_async_enabled != on)
4218     {
4219       if (on)
4220         {
4221           gdb_assert (waitpid_queue == NULL);
4222           if (pipe (linux_nat_event_pipe) == -1)
4223             internal_error (__FILE__, __LINE__,
4224                             "creating event pipe failed.");
4225           fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
4226           fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
4227         }
4228       else
4229         {
4230           drain_queued_events (-1);
4231           linux_nat_num_queued_events = 0;
4232           close (linux_nat_event_pipe[0]);
4233           close (linux_nat_event_pipe[1]);
4234           linux_nat_event_pipe[0] = linux_nat_event_pipe[1] = -1;
4235
4236         }
4237     }
4238   linux_nat_async_enabled = on;
4239 }
4240
4241 void
4242 linux_nat_add_target (struct target_ops *t)
4243 {
4244   /* Save the provided single-threaded target.  We save this in a separate
4245      variable because another target we've inherited from (e.g. inf-ptrace)
4246      may have saved a pointer to T; we want to use it for the final
4247      process stratum target.  */
4248   linux_ops_saved = *t;
4249   linux_ops = &linux_ops_saved;
4250
4251   /* Override some methods for multithreading.  */
4252   t->to_create_inferior = linux_nat_create_inferior;
4253   t->to_attach = linux_nat_attach;
4254   t->to_detach = linux_nat_detach;
4255   t->to_resume = linux_nat_resume;
4256   t->to_wait = linux_nat_wait;
4257   t->to_xfer_partial = linux_nat_xfer_partial;
4258   t->to_kill = linux_nat_kill;
4259   t->to_mourn_inferior = linux_nat_mourn_inferior;
4260   t->to_thread_alive = linux_nat_thread_alive;
4261   t->to_pid_to_str = linux_nat_pid_to_str;
4262   t->to_has_thread_control = tc_schedlock;
4263
4264   t->to_can_async_p = linux_nat_can_async_p;
4265   t->to_is_async_p = linux_nat_is_async_p;
4266   t->to_async = linux_nat_async;
4267   t->to_async_mask = linux_nat_async_mask;
4268   t->to_terminal_inferior = linux_nat_terminal_inferior;
4269   t->to_terminal_ours = linux_nat_terminal_ours;
4270
4271   /* We don't change the stratum; this target will sit at
4272      process_stratum and thread_db will set at thread_stratum.  This
4273      is a little strange, since this is a multi-threaded-capable
4274      target, but we want to be on the stack below thread_db, and we
4275      also want to be used for single-threaded processes.  */
4276
4277   add_target (t);
4278
4279   /* TODO: Eliminate this and have libthread_db use
4280      find_target_beneath.  */
4281   thread_db_init (t);
4282 }
4283
4284 /* Register a method to call whenever a new thread is attached.  */
4285 void
4286 linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
4287 {
4288   /* Save the pointer.  We only support a single registered instance
4289      of the GNU/Linux native target, so we do not need to map this to
4290      T.  */
4291   linux_nat_new_thread = new_thread;
4292 }
4293
4294 /* Return the saved siginfo associated with PTID.  */
4295 struct siginfo *
4296 linux_nat_get_siginfo (ptid_t ptid)
4297 {
4298   struct lwp_info *lp = find_lwp_pid (ptid);
4299
4300   gdb_assert (lp != NULL);
4301
4302   return &lp->siginfo;
4303 }
4304
4305 void
4306 _initialize_linux_nat (void)
4307 {
4308   sigset_t mask;
4309
4310   add_info ("proc", linux_nat_info_proc_cmd, _("\
4311 Show /proc process information about any running process.\n\
4312 Specify any process id, or use the program being debugged by default.\n\
4313 Specify any of the following keywords for detailed info:\n\
4314   mappings -- list of mapped memory regions.\n\
4315   stat     -- list a bunch of random process info.\n\
4316   status   -- list a different bunch of random process info.\n\
4317   all      -- list all available /proc info."));
4318
4319   add_setshow_zinteger_cmd ("lin-lwp", class_maintenance,
4320                             &debug_linux_nat, _("\
4321 Set debugging of GNU/Linux lwp module."), _("\
4322 Show debugging of GNU/Linux lwp module."), _("\
4323 Enables printf debugging output."),
4324                             NULL,
4325                             show_debug_linux_nat,
4326                             &setdebuglist, &showdebuglist);
4327
4328   add_setshow_zinteger_cmd ("lin-lwp-async", class_maintenance,
4329                             &debug_linux_nat_async, _("\
4330 Set debugging of GNU/Linux async lwp module."), _("\
4331 Show debugging of GNU/Linux async lwp module."), _("\
4332 Enables printf debugging output."),
4333                             NULL,
4334                             show_debug_linux_nat_async,
4335                             &setdebuglist, &showdebuglist);
4336
4337   add_setshow_boolean_cmd ("linux-async", class_maintenance,
4338                            &linux_async_permitted_1, _("\
4339 Set whether gdb controls the GNU/Linux inferior in asynchronous mode."), _("\
4340 Show whether gdb controls the GNU/Linux inferior in asynchronous mode."), _("\
4341 Tells gdb whether to control the GNU/Linux inferior in asynchronous mode."),
4342                            set_maintenance_linux_async_permitted,
4343                            show_maintenance_linux_async_permitted,
4344                            &maintenance_set_cmdlist,
4345                            &maintenance_show_cmdlist);
4346
4347   /* Get the default SIGCHLD action.  Used while forking an inferior
4348      (see linux_nat_create_inferior/linux_nat_async_events).  */
4349   sigaction (SIGCHLD, NULL, &sigchld_default_action);
4350
4351   /* Block SIGCHLD by default.  Doing this early prevents it getting
4352      unblocked if an exception is thrown due to an error while the
4353      inferior is starting (sigsetjmp/siglongjmp).  */
4354   sigemptyset (&mask);
4355   sigaddset (&mask, SIGCHLD);
4356   sigprocmask (SIG_BLOCK, &mask, NULL);
4357
4358   /* Save this mask as the default.  */
4359   sigprocmask (SIG_SETMASK, NULL, &normal_mask);
4360
4361   /* The synchronous SIGCHLD handler.  */
4362   sync_sigchld_action.sa_handler = sigchld_handler;
4363   sigemptyset (&sync_sigchld_action.sa_mask);
4364   sync_sigchld_action.sa_flags = SA_RESTART;
4365
4366   /* Make it the default.  */
4367   sigaction (SIGCHLD, &sync_sigchld_action, NULL);
4368
4369   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
4370   sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
4371   sigdelset (&suspend_mask, SIGCHLD);
4372
4373   /* SIGCHLD handler for async mode.  */
4374   async_sigchld_action.sa_handler = async_sigchld_handler;
4375   sigemptyset (&async_sigchld_action.sa_mask);
4376   async_sigchld_action.sa_flags = SA_RESTART;
4377
4378   /* Install the default mode.  */
4379   linux_nat_set_async_mode (linux_async_permitted);
4380 }
4381 \f
4382
4383 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
4384    the GNU/Linux Threads library and therefore doesn't really belong
4385    here.  */
4386
4387 /* Read variable NAME in the target and return its value if found.
4388    Otherwise return zero.  It is assumed that the type of the variable
4389    is `int'.  */
4390
4391 static int
4392 get_signo (const char *name)
4393 {
4394   struct minimal_symbol *ms;
4395   int signo;
4396
4397   ms = lookup_minimal_symbol (name, NULL, NULL);
4398   if (ms == NULL)
4399     return 0;
4400
4401   if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
4402                           sizeof (signo)) != 0)
4403     return 0;
4404
4405   return signo;
4406 }
4407
4408 /* Return the set of signals used by the threads library in *SET.  */
4409
4410 void
4411 lin_thread_get_thread_signals (sigset_t *set)
4412 {
4413   struct sigaction action;
4414   int restart, cancel;
4415   sigset_t blocked_mask;
4416
4417   sigemptyset (&blocked_mask);
4418   sigemptyset (set);
4419
4420   restart = get_signo ("__pthread_sig_restart");
4421   cancel = get_signo ("__pthread_sig_cancel");
4422
4423   /* LinuxThreads normally uses the first two RT signals, but in some legacy
4424      cases may use SIGUSR1/SIGUSR2.  NPTL always uses RT signals, but does
4425      not provide any way for the debugger to query the signal numbers -
4426      fortunately they don't change!  */
4427
4428   if (restart == 0)
4429     restart = __SIGRTMIN;
4430
4431   if (cancel == 0)
4432     cancel = __SIGRTMIN + 1;
4433
4434   sigaddset (set, restart);
4435   sigaddset (set, cancel);
4436
4437   /* The GNU/Linux Threads library makes terminating threads send a
4438      special "cancel" signal instead of SIGCHLD.  Make sure we catch
4439      those (to prevent them from terminating GDB itself, which is
4440      likely to be their default action) and treat them the same way as
4441      SIGCHLD.  */
4442
4443   action.sa_handler = sigchld_handler;
4444   sigemptyset (&action.sa_mask);
4445   action.sa_flags = SA_RESTART;
4446   sigaction (cancel, &action, NULL);
4447
4448   /* We block the "cancel" signal throughout this code ...  */
4449   sigaddset (&blocked_mask, cancel);
4450   sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
4451
4452   /* ... except during a sigsuspend.  */
4453   sigdelset (&suspend_mask, cancel);
4454 }