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