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