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