[Linux] Avoid refetching core-of-thread if thread hasn't run
[external/binutils.git] / gdb / linux-nat.c
1 /* GNU/Linux native-dependent code common to multiple platforms.
2
3    Copyright (C) 2001-2016 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "inferior.h"
22 #include "infrun.h"
23 #include "target.h"
24 #include "nat/linux-nat.h"
25 #include "nat/linux-waitpid.h"
26 #include "gdb_wait.h"
27 #include <unistd.h>
28 #include <sys/syscall.h>
29 #include "nat/gdb_ptrace.h"
30 #include "linux-nat.h"
31 #include "nat/linux-ptrace.h"
32 #include "nat/linux-procfs.h"
33 #include "nat/linux-personality.h"
34 #include "linux-fork.h"
35 #include "gdbthread.h"
36 #include "gdbcmd.h"
37 #include "regcache.h"
38 #include "regset.h"
39 #include "inf-child.h"
40 #include "inf-ptrace.h"
41 #include "auxv.h"
42 #include <sys/procfs.h>         /* for elf_gregset etc.  */
43 #include "elf-bfd.h"            /* for elfcore_write_* */
44 #include "gregset.h"            /* for gregset */
45 #include "gdbcore.h"            /* for get_exec_file */
46 #include <ctype.h>              /* for isdigit */
47 #include <sys/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 <dirent.h>
55 #include "xml-support.h"
56 #include <sys/vfs.h>
57 #include "solib.h"
58 #include "nat/linux-osdata.h"
59 #include "linux-tdep.h"
60 #include "symfile.h"
61 #include "agent.h"
62 #include "tracepoint.h"
63 #include "buffer.h"
64 #include "target-descriptions.h"
65 #include "filestuff.h"
66 #include "objfiles.h"
67 #include "nat/linux-namespaces.h"
68 #include "fileio.h"
69
70 #ifndef SPUFS_MAGIC
71 #define SPUFS_MAGIC 0x23c9b64e
72 #endif
73
74 /* This comment documents high-level logic of this file.
75
76 Waiting for events in sync mode
77 ===============================
78
79 When waiting for an event in a specific thread, we just use waitpid,
80 passing the specific pid, and not passing WNOHANG.
81
82 When waiting for an event in all threads, waitpid is not quite good:
83
84 - If the thread group leader exits while other threads in the thread
85   group still exist, waitpid(TGID, ...) hangs.  That waitpid won't
86   return an exit status until the other threads in the group are
87   reaped.
88
89 - When a non-leader thread execs, that thread just vanishes without
90   reporting an exit (so we'd hang if we waited for it explicitly in
91   that case).  The exec event is instead reported to the TGID pid.
92
93 The solution is to always use -1 and WNOHANG, together with
94 sigsuspend.
95
96 First, we use non-blocking waitpid to check for events.  If nothing is
97 found, we use sigsuspend to wait for SIGCHLD.  When SIGCHLD arrives,
98 it means something happened to a child process.  As soon as we know
99 there's an event, we get back to calling nonblocking waitpid.
100
101 Note that SIGCHLD should be blocked between waitpid and sigsuspend
102 calls, so that we don't miss a signal.  If SIGCHLD arrives in between,
103 when it's blocked, the signal becomes pending and sigsuspend
104 immediately notices it and returns.
105
106 Waiting for events in async mode (TARGET_WNOHANG)
107 =================================================
108
109 In async mode, GDB should always be ready to handle both user input
110 and target events, so neither blocking waitpid nor sigsuspend are
111 viable options.  Instead, we should asynchronously notify the GDB main
112 event loop whenever there's an unprocessed event from the target.  We
113 detect asynchronous target events by handling SIGCHLD signals.  To
114 notify the event loop about target events, the self-pipe trick is used
115 --- a pipe is registered as waitable event source in the event loop,
116 the event loop select/poll's on the read end of this pipe (as well on
117 other event sources, e.g., stdin), and the SIGCHLD handler writes a
118 byte to this pipe.  This is more portable than relying on
119 pselect/ppoll, since on kernels that lack those syscalls, libc
120 emulates them with select/poll+sigprocmask, and that is racy
121 (a.k.a. plain broken).
122
123 Obviously, if we fail to notify the event loop if there's a target
124 event, it's bad.  OTOH, if we notify the event loop when there's no
125 event from the target, linux_nat_wait will detect that there's no real
126 event to report, and return event of type TARGET_WAITKIND_IGNORE.
127 This is mostly harmless, but it will waste time and is better avoided.
128
129 The main design point is that every time GDB is outside linux-nat.c,
130 we have a SIGCHLD handler installed that is called when something
131 happens to the target and notifies the GDB event loop.  Whenever GDB
132 core decides to handle the event, and calls into linux-nat.c, we
133 process things as in sync mode, except that the we never block in
134 sigsuspend.
135
136 While processing an event, we may end up momentarily blocked in
137 waitpid calls.  Those waitpid calls, while blocking, are guarantied to
138 return quickly.  E.g., in all-stop mode, before reporting to the core
139 that an LWP hit a breakpoint, all LWPs are stopped by sending them
140 SIGSTOP, and synchronously waiting for the SIGSTOP to be reported.
141 Note that this is different from blocking indefinitely waiting for the
142 next event --- here, we're already handling an event.
143
144 Use of signals
145 ==============
146
147 We stop threads by sending a SIGSTOP.  The use of SIGSTOP instead of another
148 signal is not entirely significant; we just need for a signal to be delivered,
149 so that we can intercept it.  SIGSTOP's advantage is that it can not be
150 blocked.  A disadvantage is that it is not a real-time signal, so it can only
151 be queued once; we do not keep track of other sources of SIGSTOP.
152
153 Two other signals that can't be blocked are SIGCONT and SIGKILL.  But we can't
154 use them, because they have special behavior when the signal is generated -
155 not when it is delivered.  SIGCONT resumes the entire thread group and SIGKILL
156 kills the entire thread group.
157
158 A delivered SIGSTOP would stop the entire thread group, not just the thread we
159 tkill'd.  But we never let the SIGSTOP be delivered; we always intercept and 
160 cancel it (by PTRACE_CONT without passing SIGSTOP).
161
162 We could use a real-time signal instead.  This would solve those problems; we
163 could use PTRACE_GETSIGINFO to locate the specific stop signals sent by GDB.
164 But we would still have to have some support for SIGSTOP, since PTRACE_ATTACH
165 generates it, and there are races with trying to find a signal that is not
166 blocked.
167
168 Exec events
169 ===========
170
171 The case of a thread group (process) with 3 or more threads, and a
172 thread other than the leader execs is worth detailing:
173
174 On an exec, the Linux kernel destroys all threads except the execing
175 one in the thread group, and resets the execing thread's tid to the
176 tgid.  No exit notification is sent for the execing thread -- from the
177 ptracer's perspective, it appears as though the execing thread just
178 vanishes.  Until we reap all other threads except the leader and the
179 execing thread, the leader will be zombie, and the execing thread will
180 be in `D (disc sleep)' state.  As soon as all other threads are
181 reaped, the execing thread changes its tid to the tgid, and the
182 previous (zombie) leader vanishes, giving place to the "new"
183 leader.  */
184
185 #ifndef O_LARGEFILE
186 #define O_LARGEFILE 0
187 #endif
188
189 /* Does the current host support PTRACE_GETREGSET?  */
190 enum tribool have_ptrace_getregset = TRIBOOL_UNKNOWN;
191
192 /* The single-threaded native GNU/Linux target_ops.  We save a pointer for
193    the use of the multi-threaded target.  */
194 static struct target_ops *linux_ops;
195 static struct target_ops linux_ops_saved;
196
197 /* The method to call, if any, when a new thread is attached.  */
198 static void (*linux_nat_new_thread) (struct lwp_info *);
199
200 /* The method to call, if any, when a new fork is attached.  */
201 static linux_nat_new_fork_ftype *linux_nat_new_fork;
202
203 /* The method to call, if any, when a process is no longer
204    attached.  */
205 static linux_nat_forget_process_ftype *linux_nat_forget_process_hook;
206
207 /* Hook to call prior to resuming a thread.  */
208 static void (*linux_nat_prepare_to_resume) (struct lwp_info *);
209
210 /* The method to call, if any, when the siginfo object needs to be
211    converted between the layout returned by ptrace, and the layout in
212    the architecture of the inferior.  */
213 static int (*linux_nat_siginfo_fixup) (siginfo_t *,
214                                        gdb_byte *,
215                                        int);
216
217 /* The saved to_xfer_partial method, inherited from inf-ptrace.c.
218    Called by our to_xfer_partial.  */
219 static target_xfer_partial_ftype *super_xfer_partial;
220
221 /* The saved to_close method, inherited from inf-ptrace.c.
222    Called by our to_close.  */
223 static void (*super_close) (struct target_ops *);
224
225 static unsigned int debug_linux_nat;
226 static void
227 show_debug_linux_nat (struct ui_file *file, int from_tty,
228                       struct cmd_list_element *c, const char *value)
229 {
230   fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
231                     value);
232 }
233
234 struct simple_pid_list
235 {
236   int pid;
237   int status;
238   struct simple_pid_list *next;
239 };
240 struct simple_pid_list *stopped_pids;
241
242 /* Whether target_thread_events is in effect.  */
243 static int report_thread_events;
244
245 /* Async mode support.  */
246
247 /* The read/write ends of the pipe registered as waitable file in the
248    event loop.  */
249 static int linux_nat_event_pipe[2] = { -1, -1 };
250
251 /* True if we're currently in async mode.  */
252 #define linux_is_async_p() (linux_nat_event_pipe[0] != -1)
253
254 /* Flush the event pipe.  */
255
256 static void
257 async_file_flush (void)
258 {
259   int ret;
260   char buf;
261
262   do
263     {
264       ret = read (linux_nat_event_pipe[0], &buf, 1);
265     }
266   while (ret >= 0 || (ret == -1 && errno == EINTR));
267 }
268
269 /* Put something (anything, doesn't matter what, or how much) in event
270    pipe, so that the select/poll in the event-loop realizes we have
271    something to process.  */
272
273 static void
274 async_file_mark (void)
275 {
276   int ret;
277
278   /* It doesn't really matter what the pipe contains, as long we end
279      up with something in it.  Might as well flush the previous
280      left-overs.  */
281   async_file_flush ();
282
283   do
284     {
285       ret = write (linux_nat_event_pipe[1], "+", 1);
286     }
287   while (ret == -1 && errno == EINTR);
288
289   /* Ignore EAGAIN.  If the pipe is full, the event loop will already
290      be awakened anyway.  */
291 }
292
293 static int kill_lwp (int lwpid, int signo);
294
295 static int stop_callback (struct lwp_info *lp, void *data);
296 static int resume_stopped_resumed_lwps (struct lwp_info *lp, void *data);
297
298 static void block_child_signals (sigset_t *prev_mask);
299 static void restore_child_signals_mask (sigset_t *prev_mask);
300
301 struct lwp_info;
302 static struct lwp_info *add_lwp (ptid_t ptid);
303 static void purge_lwp_list (int pid);
304 static void delete_lwp (ptid_t ptid);
305 static struct lwp_info *find_lwp_pid (ptid_t ptid);
306
307 static int lwp_status_pending_p (struct lwp_info *lp);
308
309 static int sigtrap_is_event (int status);
310 static int (*linux_nat_status_is_event) (int status) = sigtrap_is_event;
311
312 static void save_stop_reason (struct lwp_info *lp);
313
314 \f
315 /* LWP accessors.  */
316
317 /* See nat/linux-nat.h.  */
318
319 ptid_t
320 ptid_of_lwp (struct lwp_info *lwp)
321 {
322   return lwp->ptid;
323 }
324
325 /* See nat/linux-nat.h.  */
326
327 void
328 lwp_set_arch_private_info (struct lwp_info *lwp,
329                            struct arch_lwp_info *info)
330 {
331   lwp->arch_private = info;
332 }
333
334 /* See nat/linux-nat.h.  */
335
336 struct arch_lwp_info *
337 lwp_arch_private_info (struct lwp_info *lwp)
338 {
339   return lwp->arch_private;
340 }
341
342 /* See nat/linux-nat.h.  */
343
344 int
345 lwp_is_stopped (struct lwp_info *lwp)
346 {
347   return lwp->stopped;
348 }
349
350 /* See nat/linux-nat.h.  */
351
352 enum target_stop_reason
353 lwp_stop_reason (struct lwp_info *lwp)
354 {
355   return lwp->stop_reason;
356 }
357
358 \f
359 /* Trivial list manipulation functions to keep track of a list of
360    new stopped processes.  */
361 static void
362 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
363 {
364   struct simple_pid_list *new_pid = XNEW (struct simple_pid_list);
365
366   new_pid->pid = pid;
367   new_pid->status = status;
368   new_pid->next = *listp;
369   *listp = new_pid;
370 }
371
372 static int
373 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
374 {
375   struct simple_pid_list **p;
376
377   for (p = listp; *p != NULL; p = &(*p)->next)
378     if ((*p)->pid == pid)
379       {
380         struct simple_pid_list *next = (*p)->next;
381
382         *statusp = (*p)->status;
383         xfree (*p);
384         *p = next;
385         return 1;
386       }
387   return 0;
388 }
389
390 /* Return the ptrace options that we want to try to enable.  */
391
392 static int
393 linux_nat_ptrace_options (int attached)
394 {
395   int options = 0;
396
397   if (!attached)
398     options |= PTRACE_O_EXITKILL;
399
400   options |= (PTRACE_O_TRACESYSGOOD
401               | PTRACE_O_TRACEVFORKDONE
402               | PTRACE_O_TRACEVFORK
403               | PTRACE_O_TRACEFORK
404               | PTRACE_O_TRACEEXEC);
405
406   return options;
407 }
408
409 /* Initialize ptrace warnings and check for supported ptrace
410    features given PID.
411
412    ATTACHED should be nonzero iff we attached to the inferior.  */
413
414 static void
415 linux_init_ptrace (pid_t pid, int attached)
416 {
417   int options = linux_nat_ptrace_options (attached);
418
419   linux_enable_event_reporting (pid, options);
420   linux_ptrace_init_warnings ();
421 }
422
423 static void
424 linux_child_post_attach (struct target_ops *self, int pid)
425 {
426   linux_init_ptrace (pid, 1);
427 }
428
429 static void
430 linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid)
431 {
432   linux_init_ptrace (ptid_get_pid (ptid), 0);
433 }
434
435 /* Return the number of known LWPs in the tgid given by PID.  */
436
437 static int
438 num_lwps (int pid)
439 {
440   int count = 0;
441   struct lwp_info *lp;
442
443   for (lp = lwp_list; lp; lp = lp->next)
444     if (ptid_get_pid (lp->ptid) == pid)
445       count++;
446
447   return count;
448 }
449
450 /* Call delete_lwp with prototype compatible for make_cleanup.  */
451
452 static void
453 delete_lwp_cleanup (void *lp_voidp)
454 {
455   struct lwp_info *lp = (struct lwp_info *) lp_voidp;
456
457   delete_lwp (lp->ptid);
458 }
459
460 /* Target hook for follow_fork.  On entry inferior_ptid must be the
461    ptid of the followed inferior.  At return, inferior_ptid will be
462    unchanged.  */
463
464 static int
465 linux_child_follow_fork (struct target_ops *ops, int follow_child,
466                          int detach_fork)
467 {
468   if (!follow_child)
469     {
470       struct lwp_info *child_lp = NULL;
471       int status = W_STOPCODE (0);
472       struct cleanup *old_chain;
473       int has_vforked;
474       ptid_t parent_ptid, child_ptid;
475       int parent_pid, child_pid;
476
477       has_vforked = (inferior_thread ()->pending_follow.kind
478                      == TARGET_WAITKIND_VFORKED);
479       parent_ptid = inferior_ptid;
480       child_ptid = inferior_thread ()->pending_follow.value.related_pid;
481       parent_pid = ptid_get_lwp (parent_ptid);
482       child_pid = ptid_get_lwp (child_ptid);
483
484       /* We're already attached to the parent, by default.  */
485       old_chain = save_inferior_ptid ();
486       inferior_ptid = child_ptid;
487       child_lp = add_lwp (inferior_ptid);
488       child_lp->stopped = 1;
489       child_lp->last_resume_kind = resume_stop;
490
491       /* Detach new forked process?  */
492       if (detach_fork)
493         {
494           make_cleanup (delete_lwp_cleanup, child_lp);
495
496           if (linux_nat_prepare_to_resume != NULL)
497             linux_nat_prepare_to_resume (child_lp);
498
499           /* When debugging an inferior in an architecture that supports
500              hardware single stepping on a kernel without commit
501              6580807da14c423f0d0a708108e6df6ebc8bc83d, the vfork child
502              process starts with the TIF_SINGLESTEP/X86_EFLAGS_TF bits
503              set if the parent process had them set.
504              To work around this, single step the child process
505              once before detaching to clear the flags.  */
506
507           if (!gdbarch_software_single_step_p (target_thread_architecture
508                                                    (child_lp->ptid)))
509             {
510               linux_disable_event_reporting (child_pid);
511               if (ptrace (PTRACE_SINGLESTEP, child_pid, 0, 0) < 0)
512                 perror_with_name (_("Couldn't do single step"));
513               if (my_waitpid (child_pid, &status, 0) < 0)
514                 perror_with_name (_("Couldn't wait vfork process"));
515             }
516
517           if (WIFSTOPPED (status))
518             {
519               int signo;
520
521               signo = WSTOPSIG (status);
522               if (signo != 0
523                   && !signal_pass_state (gdb_signal_from_host (signo)))
524                 signo = 0;
525               ptrace (PTRACE_DETACH, child_pid, 0, signo);
526             }
527
528           /* Resets value of inferior_ptid to parent ptid.  */
529           do_cleanups (old_chain);
530         }
531       else
532         {
533           /* Let the thread_db layer learn about this new process.  */
534           check_for_thread_db ();
535         }
536
537       do_cleanups (old_chain);
538
539       if (has_vforked)
540         {
541           struct lwp_info *parent_lp;
542
543           parent_lp = find_lwp_pid (parent_ptid);
544           gdb_assert (linux_supports_tracefork () >= 0);
545
546           if (linux_supports_tracevforkdone ())
547             {
548               if (debug_linux_nat)
549                 fprintf_unfiltered (gdb_stdlog,
550                                     "LCFF: waiting for VFORK_DONE on %d\n",
551                                     parent_pid);
552               parent_lp->stopped = 1;
553
554               /* We'll handle the VFORK_DONE event like any other
555                  event, in target_wait.  */
556             }
557           else
558             {
559               /* We can't insert breakpoints until the child has
560                  finished with the shared memory region.  We need to
561                  wait until that happens.  Ideal would be to just
562                  call:
563                  - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
564                  - waitpid (parent_pid, &status, __WALL);
565                  However, most architectures can't handle a syscall
566                  being traced on the way out if it wasn't traced on
567                  the way in.
568
569                  We might also think to loop, continuing the child
570                  until it exits or gets a SIGTRAP.  One problem is
571                  that the child might call ptrace with PTRACE_TRACEME.
572
573                  There's no simple and reliable way to figure out when
574                  the vforked child will be done with its copy of the
575                  shared memory.  We could step it out of the syscall,
576                  two instructions, let it go, and then single-step the
577                  parent once.  When we have hardware single-step, this
578                  would work; with software single-step it could still
579                  be made to work but we'd have to be able to insert
580                  single-step breakpoints in the child, and we'd have
581                  to insert -just- the single-step breakpoint in the
582                  parent.  Very awkward.
583
584                  In the end, the best we can do is to make sure it
585                  runs for a little while.  Hopefully it will be out of
586                  range of any breakpoints we reinsert.  Usually this
587                  is only the single-step breakpoint at vfork's return
588                  point.  */
589
590               if (debug_linux_nat)
591                 fprintf_unfiltered (gdb_stdlog,
592                                     "LCFF: no VFORK_DONE "
593                                     "support, sleeping a bit\n");
594
595               usleep (10000);
596
597               /* Pretend we've seen a PTRACE_EVENT_VFORK_DONE event,
598                  and leave it pending.  The next linux_nat_resume call
599                  will notice a pending event, and bypasses actually
600                  resuming the inferior.  */
601               parent_lp->status = 0;
602               parent_lp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE;
603               parent_lp->stopped = 1;
604
605               /* If we're in async mode, need to tell the event loop
606                  there's something here to process.  */
607               if (target_is_async_p ())
608                 async_file_mark ();
609             }
610         }
611     }
612   else
613     {
614       struct lwp_info *child_lp;
615
616       child_lp = add_lwp (inferior_ptid);
617       child_lp->stopped = 1;
618       child_lp->last_resume_kind = resume_stop;
619
620       /* Let the thread_db layer learn about this new process.  */
621       check_for_thread_db ();
622     }
623
624   return 0;
625 }
626
627 \f
628 static int
629 linux_child_insert_fork_catchpoint (struct target_ops *self, int pid)
630 {
631   return !linux_supports_tracefork ();
632 }
633
634 static int
635 linux_child_remove_fork_catchpoint (struct target_ops *self, int pid)
636 {
637   return 0;
638 }
639
640 static int
641 linux_child_insert_vfork_catchpoint (struct target_ops *self, int pid)
642 {
643   return !linux_supports_tracefork ();
644 }
645
646 static int
647 linux_child_remove_vfork_catchpoint (struct target_ops *self, int pid)
648 {
649   return 0;
650 }
651
652 static int
653 linux_child_insert_exec_catchpoint (struct target_ops *self, int pid)
654 {
655   return !linux_supports_tracefork ();
656 }
657
658 static int
659 linux_child_remove_exec_catchpoint (struct target_ops *self, int pid)
660 {
661   return 0;
662 }
663
664 static int
665 linux_child_set_syscall_catchpoint (struct target_ops *self,
666                                     int pid, int needed, int any_count,
667                                     int table_size, int *table)
668 {
669   if (!linux_supports_tracesysgood ())
670     return 1;
671
672   /* On GNU/Linux, we ignore the arguments.  It means that we only
673      enable the syscall catchpoints, but do not disable them.
674
675      Also, we do not use the `table' information because we do not
676      filter system calls here.  We let GDB do the logic for us.  */
677   return 0;
678 }
679
680 /* List of known LWPs.  */
681 struct lwp_info *lwp_list;
682 \f
683
684 /* Original signal mask.  */
685 static sigset_t normal_mask;
686
687 /* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
688    _initialize_linux_nat.  */
689 static sigset_t suspend_mask;
690
691 /* Signals to block to make that sigsuspend work.  */
692 static sigset_t blocked_mask;
693
694 /* SIGCHLD action.  */
695 struct sigaction sigchld_action;
696
697 /* Block child signals (SIGCHLD and linux threads signals), and store
698    the previous mask in PREV_MASK.  */
699
700 static void
701 block_child_signals (sigset_t *prev_mask)
702 {
703   /* Make sure SIGCHLD is blocked.  */
704   if (!sigismember (&blocked_mask, SIGCHLD))
705     sigaddset (&blocked_mask, SIGCHLD);
706
707   sigprocmask (SIG_BLOCK, &blocked_mask, prev_mask);
708 }
709
710 /* Restore child signals mask, previously returned by
711    block_child_signals.  */
712
713 static void
714 restore_child_signals_mask (sigset_t *prev_mask)
715 {
716   sigprocmask (SIG_SETMASK, prev_mask, NULL);
717 }
718
719 /* Mask of signals to pass directly to the inferior.  */
720 static sigset_t pass_mask;
721
722 /* Update signals to pass to the inferior.  */
723 static void
724 linux_nat_pass_signals (struct target_ops *self,
725                         int numsigs, unsigned char *pass_signals)
726 {
727   int signo;
728
729   sigemptyset (&pass_mask);
730
731   for (signo = 1; signo < NSIG; signo++)
732     {
733       int target_signo = gdb_signal_from_host (signo);
734       if (target_signo < numsigs && pass_signals[target_signo])
735         sigaddset (&pass_mask, signo);
736     }
737 }
738
739 \f
740
741 /* Prototypes for local functions.  */
742 static int stop_wait_callback (struct lwp_info *lp, void *data);
743 static char *linux_child_pid_to_exec_file (struct target_ops *self, int pid);
744 static int resume_stopped_resumed_lwps (struct lwp_info *lp, void *data);
745
746 \f
747
748 /* Destroy and free LP.  */
749
750 static void
751 lwp_free (struct lwp_info *lp)
752 {
753   xfree (lp->arch_private);
754   xfree (lp);
755 }
756
757 /* Remove all LWPs belong to PID from the lwp list.  */
758
759 static void
760 purge_lwp_list (int pid)
761 {
762   struct lwp_info *lp, *lpprev, *lpnext;
763
764   lpprev = NULL;
765
766   for (lp = lwp_list; lp; lp = lpnext)
767     {
768       lpnext = lp->next;
769
770       if (ptid_get_pid (lp->ptid) == pid)
771         {
772           if (lp == lwp_list)
773             lwp_list = lp->next;
774           else
775             lpprev->next = lp->next;
776
777           lwp_free (lp);
778         }
779       else
780         lpprev = lp;
781     }
782 }
783
784 /* Add the LWP specified by PTID to the list.  PTID is the first LWP
785    in the process.  Return a pointer to the structure describing the
786    new LWP.
787
788    This differs from add_lwp in that we don't let the arch specific
789    bits know about this new thread.  Current clients of this callback
790    take the opportunity to install watchpoints in the new thread, and
791    we shouldn't do that for the first thread.  If we're spawning a
792    child ("run"), the thread executes the shell wrapper first, and we
793    shouldn't touch it until it execs the program we want to debug.
794    For "attach", it'd be okay to call the callback, but it's not
795    necessary, because watchpoints can't yet have been inserted into
796    the inferior.  */
797
798 static struct lwp_info *
799 add_initial_lwp (ptid_t ptid)
800 {
801   struct lwp_info *lp;
802
803   gdb_assert (ptid_lwp_p (ptid));
804
805   lp = XNEW (struct lwp_info);
806
807   memset (lp, 0, sizeof (struct lwp_info));
808
809   lp->last_resume_kind = resume_continue;
810   lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
811
812   lp->ptid = ptid;
813   lp->core = -1;
814
815   lp->next = lwp_list;
816   lwp_list = lp;
817
818   return lp;
819 }
820
821 /* Add the LWP specified by PID to the list.  Return a pointer to the
822    structure describing the new LWP.  The LWP should already be
823    stopped.  */
824
825 static struct lwp_info *
826 add_lwp (ptid_t ptid)
827 {
828   struct lwp_info *lp;
829
830   lp = add_initial_lwp (ptid);
831
832   /* Let the arch specific bits know about this new thread.  Current
833      clients of this callback take the opportunity to install
834      watchpoints in the new thread.  We don't do this for the first
835      thread though.  See add_initial_lwp.  */
836   if (linux_nat_new_thread != NULL)
837     linux_nat_new_thread (lp);
838
839   return lp;
840 }
841
842 /* Remove the LWP specified by PID from the list.  */
843
844 static void
845 delete_lwp (ptid_t ptid)
846 {
847   struct lwp_info *lp, *lpprev;
848
849   lpprev = NULL;
850
851   for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
852     if (ptid_equal (lp->ptid, ptid))
853       break;
854
855   if (!lp)
856     return;
857
858   if (lpprev)
859     lpprev->next = lp->next;
860   else
861     lwp_list = lp->next;
862
863   lwp_free (lp);
864 }
865
866 /* Return a pointer to the structure describing the LWP corresponding
867    to PID.  If no corresponding LWP could be found, return NULL.  */
868
869 static struct lwp_info *
870 find_lwp_pid (ptid_t ptid)
871 {
872   struct lwp_info *lp;
873   int lwp;
874
875   if (ptid_lwp_p (ptid))
876     lwp = ptid_get_lwp (ptid);
877   else
878     lwp = ptid_get_pid (ptid);
879
880   for (lp = lwp_list; lp; lp = lp->next)
881     if (lwp == ptid_get_lwp (lp->ptid))
882       return lp;
883
884   return NULL;
885 }
886
887 /* See nat/linux-nat.h.  */
888
889 struct lwp_info *
890 iterate_over_lwps (ptid_t filter,
891                    iterate_over_lwps_ftype callback,
892                    void *data)
893 {
894   struct lwp_info *lp, *lpnext;
895
896   for (lp = lwp_list; lp; lp = lpnext)
897     {
898       lpnext = lp->next;
899
900       if (ptid_match (lp->ptid, filter))
901         {
902           if ((*callback) (lp, data) != 0)
903             return lp;
904         }
905     }
906
907   return NULL;
908 }
909
910 /* Update our internal state when changing from one checkpoint to
911    another indicated by NEW_PTID.  We can only switch single-threaded
912    applications, so we only create one new LWP, and the previous list
913    is discarded.  */
914
915 void
916 linux_nat_switch_fork (ptid_t new_ptid)
917 {
918   struct lwp_info *lp;
919
920   purge_lwp_list (ptid_get_pid (inferior_ptid));
921
922   lp = add_lwp (new_ptid);
923   lp->stopped = 1;
924
925   /* This changes the thread's ptid while preserving the gdb thread
926      num.  Also changes the inferior pid, while preserving the
927      inferior num.  */
928   thread_change_ptid (inferior_ptid, new_ptid);
929
930   /* We've just told GDB core that the thread changed target id, but,
931      in fact, it really is a different thread, with different register
932      contents.  */
933   registers_changed ();
934 }
935
936 /* Handle the exit of a single thread LP.  */
937
938 static void
939 exit_lwp (struct lwp_info *lp)
940 {
941   struct thread_info *th = find_thread_ptid (lp->ptid);
942
943   if (th)
944     {
945       if (print_thread_events)
946         printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
947
948       delete_thread (lp->ptid);
949     }
950
951   delete_lwp (lp->ptid);
952 }
953
954 /* Wait for the LWP specified by LP, which we have just attached to.
955    Returns a wait status for that LWP, to cache.  */
956
957 static int
958 linux_nat_post_attach_wait (ptid_t ptid, int first, int *signalled)
959 {
960   pid_t new_pid, pid = ptid_get_lwp (ptid);
961   int status;
962
963   if (linux_proc_pid_is_stopped (pid))
964     {
965       if (debug_linux_nat)
966         fprintf_unfiltered (gdb_stdlog,
967                             "LNPAW: Attaching to a stopped process\n");
968
969       /* The process is definitely stopped.  It is in a job control
970          stop, unless the kernel predates the TASK_STOPPED /
971          TASK_TRACED distinction, in which case it might be in a
972          ptrace stop.  Make sure it is in a ptrace stop; from there we
973          can kill it, signal it, et cetera.
974
975          First make sure there is a pending SIGSTOP.  Since we are
976          already attached, the process can not transition from stopped
977          to running without a PTRACE_CONT; so we know this signal will
978          go into the queue.  The SIGSTOP generated by PTRACE_ATTACH is
979          probably already in the queue (unless this kernel is old
980          enough to use TASK_STOPPED for ptrace stops); but since SIGSTOP
981          is not an RT signal, it can only be queued once.  */
982       kill_lwp (pid, SIGSTOP);
983
984       /* Finally, resume the stopped process.  This will deliver the SIGSTOP
985          (or a higher priority signal, just like normal PTRACE_ATTACH).  */
986       ptrace (PTRACE_CONT, pid, 0, 0);
987     }
988
989   /* Make sure the initial process is stopped.  The user-level threads
990      layer might want to poke around in the inferior, and that won't
991      work if things haven't stabilized yet.  */
992   new_pid = my_waitpid (pid, &status, __WALL);
993   gdb_assert (pid == new_pid);
994
995   if (!WIFSTOPPED (status))
996     {
997       /* The pid we tried to attach has apparently just exited.  */
998       if (debug_linux_nat)
999         fprintf_unfiltered (gdb_stdlog, "LNPAW: Failed to stop %d: %s",
1000                             pid, status_to_str (status));
1001       return status;
1002     }
1003
1004   if (WSTOPSIG (status) != SIGSTOP)
1005     {
1006       *signalled = 1;
1007       if (debug_linux_nat)
1008         fprintf_unfiltered (gdb_stdlog,
1009                             "LNPAW: Received %s after attaching\n",
1010                             status_to_str (status));
1011     }
1012
1013   return status;
1014 }
1015
1016 static void
1017 linux_nat_create_inferior (struct target_ops *ops, 
1018                            char *exec_file, char *allargs, char **env,
1019                            int from_tty)
1020 {
1021   struct cleanup *restore_personality
1022     = maybe_disable_address_space_randomization (disable_randomization);
1023
1024   /* The fork_child mechanism is synchronous and calls target_wait, so
1025      we have to mask the async mode.  */
1026
1027   /* Make sure we report all signals during startup.  */
1028   linux_nat_pass_signals (ops, 0, NULL);
1029
1030   linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty);
1031
1032   do_cleanups (restore_personality);
1033 }
1034
1035 /* Callback for linux_proc_attach_tgid_threads.  Attach to PTID if not
1036    already attached.  Returns true if a new LWP is found, false
1037    otherwise.  */
1038
1039 static int
1040 attach_proc_task_lwp_callback (ptid_t ptid)
1041 {
1042   struct lwp_info *lp;
1043
1044   /* Ignore LWPs we're already attached to.  */
1045   lp = find_lwp_pid (ptid);
1046   if (lp == NULL)
1047     {
1048       int lwpid = ptid_get_lwp (ptid);
1049
1050       if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) < 0)
1051         {
1052           int err = errno;
1053
1054           /* Be quiet if we simply raced with the thread exiting.
1055              EPERM is returned if the thread's task still exists, and
1056              is marked as exited or zombie, as well as other
1057              conditions, so in that case, confirm the status in
1058              /proc/PID/status.  */
1059           if (err == ESRCH
1060               || (err == EPERM && linux_proc_pid_is_gone (lwpid)))
1061             {
1062               if (debug_linux_nat)
1063                 {
1064                   fprintf_unfiltered (gdb_stdlog,
1065                                       "Cannot attach to lwp %d: "
1066                                       "thread is gone (%d: %s)\n",
1067                                       lwpid, err, safe_strerror (err));
1068                 }
1069             }
1070           else
1071             {
1072               warning (_("Cannot attach to lwp %d: %s"),
1073                        lwpid,
1074                        linux_ptrace_attach_fail_reason_string (ptid,
1075                                                                err));
1076             }
1077         }
1078       else
1079         {
1080           if (debug_linux_nat)
1081             fprintf_unfiltered (gdb_stdlog,
1082                                 "PTRACE_ATTACH %s, 0, 0 (OK)\n",
1083                                 target_pid_to_str (ptid));
1084
1085           lp = add_lwp (ptid);
1086
1087           /* The next time we wait for this LWP we'll see a SIGSTOP as
1088              PTRACE_ATTACH brings it to a halt.  */
1089           lp->signalled = 1;
1090
1091           /* We need to wait for a stop before being able to make the
1092              next ptrace call on this LWP.  */
1093           lp->must_set_ptrace_flags = 1;
1094         }
1095
1096       return 1;
1097     }
1098   return 0;
1099 }
1100
1101 static void
1102 linux_nat_attach (struct target_ops *ops, const char *args, int from_tty)
1103 {
1104   struct lwp_info *lp;
1105   int status;
1106   ptid_t ptid;
1107
1108   /* Make sure we report all signals during attach.  */
1109   linux_nat_pass_signals (ops, 0, NULL);
1110
1111   TRY
1112     {
1113       linux_ops->to_attach (ops, args, from_tty);
1114     }
1115   CATCH (ex, RETURN_MASK_ERROR)
1116     {
1117       pid_t pid = parse_pid_to_attach (args);
1118       struct buffer buffer;
1119       char *message, *buffer_s;
1120
1121       message = xstrdup (ex.message);
1122       make_cleanup (xfree, message);
1123
1124       buffer_init (&buffer);
1125       linux_ptrace_attach_fail_reason (pid, &buffer);
1126
1127       buffer_grow_str0 (&buffer, "");
1128       buffer_s = buffer_finish (&buffer);
1129       make_cleanup (xfree, buffer_s);
1130
1131       if (*buffer_s != '\0')
1132         throw_error (ex.error, "warning: %s\n%s", buffer_s, message);
1133       else
1134         throw_error (ex.error, "%s", message);
1135     }
1136   END_CATCH
1137
1138   /* The ptrace base target adds the main thread with (pid,0,0)
1139      format.  Decorate it with lwp info.  */
1140   ptid = ptid_build (ptid_get_pid (inferior_ptid),
1141                      ptid_get_pid (inferior_ptid),
1142                      0);
1143   thread_change_ptid (inferior_ptid, ptid);
1144
1145   /* Add the initial process as the first LWP to the list.  */
1146   lp = add_initial_lwp (ptid);
1147
1148   status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->signalled);
1149   if (!WIFSTOPPED (status))
1150     {
1151       if (WIFEXITED (status))
1152         {
1153           int exit_code = WEXITSTATUS (status);
1154
1155           target_terminal_ours ();
1156           target_mourn_inferior ();
1157           if (exit_code == 0)
1158             error (_("Unable to attach: program exited normally."));
1159           else
1160             error (_("Unable to attach: program exited with code %d."),
1161                    exit_code);
1162         }
1163       else if (WIFSIGNALED (status))
1164         {
1165           enum gdb_signal signo;
1166
1167           target_terminal_ours ();
1168           target_mourn_inferior ();
1169
1170           signo = gdb_signal_from_host (WTERMSIG (status));
1171           error (_("Unable to attach: program terminated with signal "
1172                    "%s, %s."),
1173                  gdb_signal_to_name (signo),
1174                  gdb_signal_to_string (signo));
1175         }
1176
1177       internal_error (__FILE__, __LINE__,
1178                       _("unexpected status %d for PID %ld"),
1179                       status, (long) ptid_get_lwp (ptid));
1180     }
1181
1182   lp->stopped = 1;
1183
1184   /* Save the wait status to report later.  */
1185   lp->resumed = 1;
1186   if (debug_linux_nat)
1187     fprintf_unfiltered (gdb_stdlog,
1188                         "LNA: waitpid %ld, saving status %s\n",
1189                         (long) ptid_get_pid (lp->ptid), status_to_str (status));
1190
1191   lp->status = status;
1192
1193   /* We must attach to every LWP.  If /proc is mounted, use that to
1194      find them now.  The inferior may be using raw clone instead of
1195      using pthreads.  But even if it is using pthreads, thread_db
1196      walks structures in the inferior's address space to find the list
1197      of threads/LWPs, and those structures may well be corrupted.
1198      Note that once thread_db is loaded, we'll still use it to list
1199      threads and associate pthread info with each LWP.  */
1200   linux_proc_attach_tgid_threads (ptid_get_pid (lp->ptid),
1201                                   attach_proc_task_lwp_callback);
1202
1203   if (target_can_async_p ())
1204     target_async (1);
1205 }
1206
1207 /* Get pending status of LP.  */
1208 static int
1209 get_pending_status (struct lwp_info *lp, int *status)
1210 {
1211   enum gdb_signal signo = GDB_SIGNAL_0;
1212
1213   /* If we paused threads momentarily, we may have stored pending
1214      events in lp->status or lp->waitstatus (see stop_wait_callback),
1215      and GDB core hasn't seen any signal for those threads.
1216      Otherwise, the last signal reported to the core is found in the
1217      thread object's stop_signal.
1218
1219      There's a corner case that isn't handled here at present.  Only
1220      if the thread stopped with a TARGET_WAITKIND_STOPPED does
1221      stop_signal make sense as a real signal to pass to the inferior.
1222      Some catchpoint related events, like
1223      TARGET_WAITKIND_(V)FORK|EXEC|SYSCALL, have their stop_signal set
1224      to GDB_SIGNAL_SIGTRAP when the catchpoint triggers.  But,
1225      those traps are debug API (ptrace in our case) related and
1226      induced; the inferior wouldn't see them if it wasn't being
1227      traced.  Hence, we should never pass them to the inferior, even
1228      when set to pass state.  Since this corner case isn't handled by
1229      infrun.c when proceeding with a signal, for consistency, neither
1230      do we handle it here (or elsewhere in the file we check for
1231      signal pass state).  Normally SIGTRAP isn't set to pass state, so
1232      this is really a corner case.  */
1233
1234   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
1235     signo = GDB_SIGNAL_0; /* a pending ptrace event, not a real signal.  */
1236   else if (lp->status)
1237     signo = gdb_signal_from_host (WSTOPSIG (lp->status));
1238   else if (target_is_non_stop_p () && !is_executing (lp->ptid))
1239     {
1240       struct thread_info *tp = find_thread_ptid (lp->ptid);
1241
1242       signo = tp->suspend.stop_signal;
1243     }
1244   else if (!target_is_non_stop_p ())
1245     {
1246       struct target_waitstatus last;
1247       ptid_t last_ptid;
1248
1249       get_last_target_status (&last_ptid, &last);
1250
1251       if (ptid_get_lwp (lp->ptid) == ptid_get_lwp (last_ptid))
1252         {
1253           struct thread_info *tp = find_thread_ptid (lp->ptid);
1254
1255           signo = tp->suspend.stop_signal;
1256         }
1257     }
1258
1259   *status = 0;
1260
1261   if (signo == GDB_SIGNAL_0)
1262     {
1263       if (debug_linux_nat)
1264         fprintf_unfiltered (gdb_stdlog,
1265                             "GPT: lwp %s has no pending signal\n",
1266                             target_pid_to_str (lp->ptid));
1267     }
1268   else if (!signal_pass_state (signo))
1269     {
1270       if (debug_linux_nat)
1271         fprintf_unfiltered (gdb_stdlog,
1272                             "GPT: lwp %s had signal %s, "
1273                             "but it is in no pass state\n",
1274                             target_pid_to_str (lp->ptid),
1275                             gdb_signal_to_string (signo));
1276     }
1277   else
1278     {
1279       *status = W_STOPCODE (gdb_signal_to_host (signo));
1280
1281       if (debug_linux_nat)
1282         fprintf_unfiltered (gdb_stdlog,
1283                             "GPT: lwp %s has pending signal %s\n",
1284                             target_pid_to_str (lp->ptid),
1285                             gdb_signal_to_string (signo));
1286     }
1287
1288   return 0;
1289 }
1290
1291 static int
1292 detach_callback (struct lwp_info *lp, void *data)
1293 {
1294   gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1295
1296   if (debug_linux_nat && lp->status)
1297     fprintf_unfiltered (gdb_stdlog, "DC:  Pending %s for %s on detach.\n",
1298                         strsignal (WSTOPSIG (lp->status)),
1299                         target_pid_to_str (lp->ptid));
1300
1301   /* If there is a pending SIGSTOP, get rid of it.  */
1302   if (lp->signalled)
1303     {
1304       if (debug_linux_nat)
1305         fprintf_unfiltered (gdb_stdlog,
1306                             "DC: Sending SIGCONT to %s\n",
1307                             target_pid_to_str (lp->ptid));
1308
1309       kill_lwp (ptid_get_lwp (lp->ptid), SIGCONT);
1310       lp->signalled = 0;
1311     }
1312
1313   /* We don't actually detach from the LWP that has an id equal to the
1314      overall process id just yet.  */
1315   if (ptid_get_lwp (lp->ptid) != ptid_get_pid (lp->ptid))
1316     {
1317       int status = 0;
1318
1319       /* Pass on any pending signal for this LWP.  */
1320       get_pending_status (lp, &status);
1321
1322       if (linux_nat_prepare_to_resume != NULL)
1323         linux_nat_prepare_to_resume (lp);
1324       errno = 0;
1325       if (ptrace (PTRACE_DETACH, ptid_get_lwp (lp->ptid), 0,
1326                   WSTOPSIG (status)) < 0)
1327         error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
1328                safe_strerror (errno));
1329
1330       if (debug_linux_nat)
1331         fprintf_unfiltered (gdb_stdlog,
1332                             "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1333                             target_pid_to_str (lp->ptid),
1334                             strsignal (WSTOPSIG (status)));
1335
1336       delete_lwp (lp->ptid);
1337     }
1338
1339   return 0;
1340 }
1341
1342 static void
1343 linux_nat_detach (struct target_ops *ops, const char *args, int from_tty)
1344 {
1345   int pid;
1346   int status;
1347   struct lwp_info *main_lwp;
1348
1349   pid = ptid_get_pid (inferior_ptid);
1350
1351   /* Don't unregister from the event loop, as there may be other
1352      inferiors running. */
1353
1354   /* Stop all threads before detaching.  ptrace requires that the
1355      thread is stopped to sucessfully detach.  */
1356   iterate_over_lwps (pid_to_ptid (pid), stop_callback, NULL);
1357   /* ... and wait until all of them have reported back that
1358      they're no longer running.  */
1359   iterate_over_lwps (pid_to_ptid (pid), stop_wait_callback, NULL);
1360
1361   iterate_over_lwps (pid_to_ptid (pid), detach_callback, NULL);
1362
1363   /* Only the initial process should be left right now.  */
1364   gdb_assert (num_lwps (ptid_get_pid (inferior_ptid)) == 1);
1365
1366   main_lwp = find_lwp_pid (pid_to_ptid (pid));
1367
1368   /* Pass on any pending signal for the last LWP.  */
1369   if ((args == NULL || *args == '\0')
1370       && get_pending_status (main_lwp, &status) != -1
1371       && WIFSTOPPED (status))
1372     {
1373       char *tem;
1374
1375       /* Put the signal number in ARGS so that inf_ptrace_detach will
1376          pass it along with PTRACE_DETACH.  */
1377       tem = (char *) alloca (8);
1378       xsnprintf (tem, 8, "%d", (int) WSTOPSIG (status));
1379       args = tem;
1380       if (debug_linux_nat)
1381         fprintf_unfiltered (gdb_stdlog,
1382                             "LND: Sending signal %s to %s\n",
1383                             args,
1384                             target_pid_to_str (main_lwp->ptid));
1385     }
1386
1387   if (linux_nat_prepare_to_resume != NULL)
1388     linux_nat_prepare_to_resume (main_lwp);
1389   delete_lwp (main_lwp->ptid);
1390
1391   if (forks_exist_p ())
1392     {
1393       /* Multi-fork case.  The current inferior_ptid is being detached
1394          from, but there are other viable forks to debug.  Detach from
1395          the current fork, and context-switch to the first
1396          available.  */
1397       linux_fork_detach (args, from_tty);
1398     }
1399   else
1400     linux_ops->to_detach (ops, args, from_tty);
1401 }
1402
1403 /* Resume execution of the inferior process.  If STEP is nonzero,
1404    single-step it.  If SIGNAL is nonzero, give it that signal.  */
1405
1406 static void
1407 linux_resume_one_lwp_throw (struct lwp_info *lp, int step,
1408                             enum gdb_signal signo)
1409 {
1410   lp->step = step;
1411
1412   /* stop_pc doubles as the PC the LWP had when it was last resumed.
1413      We only presently need that if the LWP is stepped though (to
1414      handle the case of stepping a breakpoint instruction).  */
1415   if (step)
1416     {
1417       struct regcache *regcache = get_thread_regcache (lp->ptid);
1418
1419       lp->stop_pc = regcache_read_pc (regcache);
1420     }
1421   else
1422     lp->stop_pc = 0;
1423
1424   if (linux_nat_prepare_to_resume != NULL)
1425     linux_nat_prepare_to_resume (lp);
1426   linux_ops->to_resume (linux_ops, lp->ptid, step, signo);
1427
1428   /* Successfully resumed.  Clear state that no longer makes sense,
1429      and mark the LWP as running.  Must not do this before resuming
1430      otherwise if that fails other code will be confused.  E.g., we'd
1431      later try to stop the LWP and hang forever waiting for a stop
1432      status.  Note that we must not throw after this is cleared,
1433      otherwise handle_zombie_lwp_error would get confused.  */
1434   lp->stopped = 0;
1435   lp->core = -1;
1436   lp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
1437   registers_changed_ptid (lp->ptid);
1438 }
1439
1440 /* Called when we try to resume a stopped LWP and that errors out.  If
1441    the LWP is no longer in ptrace-stopped state (meaning it's zombie,
1442    or about to become), discard the error, clear any pending status
1443    the LWP may have, and return true (we'll collect the exit status
1444    soon enough).  Otherwise, return false.  */
1445
1446 static int
1447 check_ptrace_stopped_lwp_gone (struct lwp_info *lp)
1448 {
1449   /* If we get an error after resuming the LWP successfully, we'd
1450      confuse !T state for the LWP being gone.  */
1451   gdb_assert (lp->stopped);
1452
1453   /* We can't just check whether the LWP is in 'Z (Zombie)' state,
1454      because even if ptrace failed with ESRCH, the tracee may be "not
1455      yet fully dead", but already refusing ptrace requests.  In that
1456      case the tracee has 'R (Running)' state for a little bit
1457      (observed in Linux 3.18).  See also the note on ESRCH in the
1458      ptrace(2) man page.  Instead, check whether the LWP has any state
1459      other than ptrace-stopped.  */
1460
1461   /* Don't assume anything if /proc/PID/status can't be read.  */
1462   if (linux_proc_pid_is_trace_stopped_nowarn (ptid_get_lwp (lp->ptid)) == 0)
1463     {
1464       lp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
1465       lp->status = 0;
1466       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
1467       return 1;
1468     }
1469   return 0;
1470 }
1471
1472 /* Like linux_resume_one_lwp_throw, but no error is thrown if the LWP
1473    disappears while we try to resume it.  */
1474
1475 static void
1476 linux_resume_one_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
1477 {
1478   TRY
1479     {
1480       linux_resume_one_lwp_throw (lp, step, signo);
1481     }
1482   CATCH (ex, RETURN_MASK_ERROR)
1483     {
1484       if (!check_ptrace_stopped_lwp_gone (lp))
1485         throw_exception (ex);
1486     }
1487   END_CATCH
1488 }
1489
1490 /* Resume LP.  */
1491
1492 static void
1493 resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
1494 {
1495   if (lp->stopped)
1496     {
1497       struct inferior *inf = find_inferior_ptid (lp->ptid);
1498
1499       if (inf->vfork_child != NULL)
1500         {
1501           if (debug_linux_nat)
1502             fprintf_unfiltered (gdb_stdlog,
1503                                 "RC: Not resuming %s (vfork parent)\n",
1504                                 target_pid_to_str (lp->ptid));
1505         }
1506       else if (!lwp_status_pending_p (lp))
1507         {
1508           if (debug_linux_nat)
1509             fprintf_unfiltered (gdb_stdlog,
1510                                 "RC: Resuming sibling %s, %s, %s\n",
1511                                 target_pid_to_str (lp->ptid),
1512                                 (signo != GDB_SIGNAL_0
1513                                  ? strsignal (gdb_signal_to_host (signo))
1514                                  : "0"),
1515                                 step ? "step" : "resume");
1516
1517           linux_resume_one_lwp (lp, step, signo);
1518         }
1519       else
1520         {
1521           if (debug_linux_nat)
1522             fprintf_unfiltered (gdb_stdlog,
1523                                 "RC: Not resuming sibling %s (has pending)\n",
1524                                 target_pid_to_str (lp->ptid));
1525         }
1526     }
1527   else
1528     {
1529       if (debug_linux_nat)
1530         fprintf_unfiltered (gdb_stdlog,
1531                             "RC: Not resuming sibling %s (not stopped)\n",
1532                             target_pid_to_str (lp->ptid));
1533     }
1534 }
1535
1536 /* Callback for iterate_over_lwps.  If LWP is EXCEPT, do nothing.
1537    Resume LWP with the last stop signal, if it is in pass state.  */
1538
1539 static int
1540 linux_nat_resume_callback (struct lwp_info *lp, void *except)
1541 {
1542   enum gdb_signal signo = GDB_SIGNAL_0;
1543
1544   if (lp == except)
1545     return 0;
1546
1547   if (lp->stopped)
1548     {
1549       struct thread_info *thread;
1550
1551       thread = find_thread_ptid (lp->ptid);
1552       if (thread != NULL)
1553         {
1554           signo = thread->suspend.stop_signal;
1555           thread->suspend.stop_signal = GDB_SIGNAL_0;
1556         }
1557     }
1558
1559   resume_lwp (lp, 0, signo);
1560   return 0;
1561 }
1562
1563 static int
1564 resume_clear_callback (struct lwp_info *lp, void *data)
1565 {
1566   lp->resumed = 0;
1567   lp->last_resume_kind = resume_stop;
1568   return 0;
1569 }
1570
1571 static int
1572 resume_set_callback (struct lwp_info *lp, void *data)
1573 {
1574   lp->resumed = 1;
1575   lp->last_resume_kind = resume_continue;
1576   return 0;
1577 }
1578
1579 static void
1580 linux_nat_resume (struct target_ops *ops,
1581                   ptid_t ptid, int step, enum gdb_signal signo)
1582 {
1583   struct lwp_info *lp;
1584   int resume_many;
1585
1586   if (debug_linux_nat)
1587     fprintf_unfiltered (gdb_stdlog,
1588                         "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1589                         step ? "step" : "resume",
1590                         target_pid_to_str (ptid),
1591                         (signo != GDB_SIGNAL_0
1592                          ? strsignal (gdb_signal_to_host (signo)) : "0"),
1593                         target_pid_to_str (inferior_ptid));
1594
1595   /* A specific PTID means `step only this process id'.  */
1596   resume_many = (ptid_equal (minus_one_ptid, ptid)
1597                  || ptid_is_pid (ptid));
1598
1599   /* Mark the lwps we're resuming as resumed.  */
1600   iterate_over_lwps (ptid, resume_set_callback, NULL);
1601
1602   /* See if it's the current inferior that should be handled
1603      specially.  */
1604   if (resume_many)
1605     lp = find_lwp_pid (inferior_ptid);
1606   else
1607     lp = find_lwp_pid (ptid);
1608   gdb_assert (lp != NULL);
1609
1610   /* Remember if we're stepping.  */
1611   lp->last_resume_kind = step ? resume_step : resume_continue;
1612
1613   /* If we have a pending wait status for this thread, there is no
1614      point in resuming the process.  But first make sure that
1615      linux_nat_wait won't preemptively handle the event - we
1616      should never take this short-circuit if we are going to
1617      leave LP running, since we have skipped resuming all the
1618      other threads.  This bit of code needs to be synchronized
1619      with linux_nat_wait.  */
1620
1621   if (lp->status && WIFSTOPPED (lp->status))
1622     {
1623       if (!lp->step
1624           && WSTOPSIG (lp->status)
1625           && sigismember (&pass_mask, WSTOPSIG (lp->status)))
1626         {
1627           if (debug_linux_nat)
1628             fprintf_unfiltered (gdb_stdlog,
1629                                 "LLR: Not short circuiting for ignored "
1630                                 "status 0x%x\n", lp->status);
1631
1632           /* FIXME: What should we do if we are supposed to continue
1633              this thread with a signal?  */
1634           gdb_assert (signo == GDB_SIGNAL_0);
1635           signo = gdb_signal_from_host (WSTOPSIG (lp->status));
1636           lp->status = 0;
1637         }
1638     }
1639
1640   if (lwp_status_pending_p (lp))
1641     {
1642       /* FIXME: What should we do if we are supposed to continue
1643          this thread with a signal?  */
1644       gdb_assert (signo == GDB_SIGNAL_0);
1645
1646       if (debug_linux_nat)
1647         fprintf_unfiltered (gdb_stdlog,
1648                             "LLR: Short circuiting for status 0x%x\n",
1649                             lp->status);
1650
1651       if (target_can_async_p ())
1652         {
1653           target_async (1);
1654           /* Tell the event loop we have something to process.  */
1655           async_file_mark ();
1656         }
1657       return;
1658     }
1659
1660   if (resume_many)
1661     iterate_over_lwps (ptid, linux_nat_resume_callback, lp);
1662
1663   if (debug_linux_nat)
1664     fprintf_unfiltered (gdb_stdlog,
1665                         "LLR: %s %s, %s (resume event thread)\n",
1666                         step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1667                         target_pid_to_str (lp->ptid),
1668                         (signo != GDB_SIGNAL_0
1669                          ? strsignal (gdb_signal_to_host (signo)) : "0"));
1670
1671   linux_resume_one_lwp (lp, step, signo);
1672
1673   if (target_can_async_p ())
1674     target_async (1);
1675 }
1676
1677 /* Send a signal to an LWP.  */
1678
1679 static int
1680 kill_lwp (int lwpid, int signo)
1681 {
1682   int ret;
1683
1684   errno = 0;
1685   ret = syscall (__NR_tkill, lwpid, signo);
1686   if (errno == ENOSYS)
1687     {
1688       /* If tkill fails, then we are not using nptl threads, a
1689          configuration we no longer support.  */
1690       perror_with_name (("tkill"));
1691     }
1692   return ret;
1693 }
1694
1695 /* Handle a GNU/Linux syscall trap wait response.  If we see a syscall
1696    event, check if the core is interested in it: if not, ignore the
1697    event, and keep waiting; otherwise, we need to toggle the LWP's
1698    syscall entry/exit status, since the ptrace event itself doesn't
1699    indicate it, and report the trap to higher layers.  */
1700
1701 static int
1702 linux_handle_syscall_trap (struct lwp_info *lp, int stopping)
1703 {
1704   struct target_waitstatus *ourstatus = &lp->waitstatus;
1705   struct gdbarch *gdbarch = target_thread_architecture (lp->ptid);
1706   int syscall_number = (int) gdbarch_get_syscall_number (gdbarch, lp->ptid);
1707
1708   if (stopping)
1709     {
1710       /* If we're stopping threads, there's a SIGSTOP pending, which
1711          makes it so that the LWP reports an immediate syscall return,
1712          followed by the SIGSTOP.  Skip seeing that "return" using
1713          PTRACE_CONT directly, and let stop_wait_callback collect the
1714          SIGSTOP.  Later when the thread is resumed, a new syscall
1715          entry event.  If we didn't do this (and returned 0), we'd
1716          leave a syscall entry pending, and our caller, by using
1717          PTRACE_CONT to collect the SIGSTOP, skips the syscall return
1718          itself.  Later, when the user re-resumes this LWP, we'd see
1719          another syscall entry event and we'd mistake it for a return.
1720
1721          If stop_wait_callback didn't force the SIGSTOP out of the LWP
1722          (leaving immediately with LWP->signalled set, without issuing
1723          a PTRACE_CONT), it would still be problematic to leave this
1724          syscall enter pending, as later when the thread is resumed,
1725          it would then see the same syscall exit mentioned above,
1726          followed by the delayed SIGSTOP, while the syscall didn't
1727          actually get to execute.  It seems it would be even more
1728          confusing to the user.  */
1729
1730       if (debug_linux_nat)
1731         fprintf_unfiltered (gdb_stdlog,
1732                             "LHST: ignoring syscall %d "
1733                             "for LWP %ld (stopping threads), "
1734                             "resuming with PTRACE_CONT for SIGSTOP\n",
1735                             syscall_number,
1736                             ptid_get_lwp (lp->ptid));
1737
1738       lp->syscall_state = TARGET_WAITKIND_IGNORE;
1739       ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
1740       lp->stopped = 0;
1741       return 1;
1742     }
1743
1744   /* Always update the entry/return state, even if this particular
1745      syscall isn't interesting to the core now.  In async mode,
1746      the user could install a new catchpoint for this syscall
1747      between syscall enter/return, and we'll need to know to
1748      report a syscall return if that happens.  */
1749   lp->syscall_state = (lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
1750                        ? TARGET_WAITKIND_SYSCALL_RETURN
1751                        : TARGET_WAITKIND_SYSCALL_ENTRY);
1752
1753   if (catch_syscall_enabled ())
1754     {
1755       if (catching_syscall_number (syscall_number))
1756         {
1757           /* Alright, an event to report.  */
1758           ourstatus->kind = lp->syscall_state;
1759           ourstatus->value.syscall_number = syscall_number;
1760
1761           if (debug_linux_nat)
1762             fprintf_unfiltered (gdb_stdlog,
1763                                 "LHST: stopping for %s of syscall %d"
1764                                 " for LWP %ld\n",
1765                                 lp->syscall_state
1766                                 == TARGET_WAITKIND_SYSCALL_ENTRY
1767                                 ? "entry" : "return",
1768                                 syscall_number,
1769                                 ptid_get_lwp (lp->ptid));
1770           return 0;
1771         }
1772
1773       if (debug_linux_nat)
1774         fprintf_unfiltered (gdb_stdlog,
1775                             "LHST: ignoring %s of syscall %d "
1776                             "for LWP %ld\n",
1777                             lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
1778                             ? "entry" : "return",
1779                             syscall_number,
1780                             ptid_get_lwp (lp->ptid));
1781     }
1782   else
1783     {
1784       /* If we had been syscall tracing, and hence used PT_SYSCALL
1785          before on this LWP, it could happen that the user removes all
1786          syscall catchpoints before we get to process this event.
1787          There are two noteworthy issues here:
1788
1789          - When stopped at a syscall entry event, resuming with
1790            PT_STEP still resumes executing the syscall and reports a
1791            syscall return.
1792
1793          - Only PT_SYSCALL catches syscall enters.  If we last
1794            single-stepped this thread, then this event can't be a
1795            syscall enter.  If we last single-stepped this thread, this
1796            has to be a syscall exit.
1797
1798          The points above mean that the next resume, be it PT_STEP or
1799          PT_CONTINUE, can not trigger a syscall trace event.  */
1800       if (debug_linux_nat)
1801         fprintf_unfiltered (gdb_stdlog,
1802                             "LHST: caught syscall event "
1803                             "with no syscall catchpoints."
1804                             " %d for LWP %ld, ignoring\n",
1805                             syscall_number,
1806                             ptid_get_lwp (lp->ptid));
1807       lp->syscall_state = TARGET_WAITKIND_IGNORE;
1808     }
1809
1810   /* The core isn't interested in this event.  For efficiency, avoid
1811      stopping all threads only to have the core resume them all again.
1812      Since we're not stopping threads, if we're still syscall tracing
1813      and not stepping, we can't use PTRACE_CONT here, as we'd miss any
1814      subsequent syscall.  Simply resume using the inf-ptrace layer,
1815      which knows when to use PT_SYSCALL or PT_CONTINUE.  */
1816
1817   linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
1818   return 1;
1819 }
1820
1821 /* Handle a GNU/Linux extended wait response.  If we see a clone
1822    event, we need to add the new LWP to our list (and not report the
1823    trap to higher layers).  This function returns non-zero if the
1824    event should be ignored and we should wait again.  If STOPPING is
1825    true, the new LWP remains stopped, otherwise it is continued.  */
1826
1827 static int
1828 linux_handle_extended_wait (struct lwp_info *lp, int status)
1829 {
1830   int pid = ptid_get_lwp (lp->ptid);
1831   struct target_waitstatus *ourstatus = &lp->waitstatus;
1832   int event = linux_ptrace_get_extended_event (status);
1833
1834   /* All extended events we currently use are mid-syscall.  Only
1835      PTRACE_EVENT_STOP is delivered more like a signal-stop, but
1836      you have to be using PTRACE_SEIZE to get that.  */
1837   lp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY;
1838
1839   if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1840       || event == PTRACE_EVENT_CLONE)
1841     {
1842       unsigned long new_pid;
1843       int ret;
1844
1845       ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
1846
1847       /* If we haven't already seen the new PID stop, wait for it now.  */
1848       if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1849         {
1850           /* The new child has a pending SIGSTOP.  We can't affect it until it
1851              hits the SIGSTOP, but we're already attached.  */
1852           ret = my_waitpid (new_pid, &status, __WALL);
1853           if (ret == -1)
1854             perror_with_name (_("waiting for new child"));
1855           else if (ret != new_pid)
1856             internal_error (__FILE__, __LINE__,
1857                             _("wait returned unexpected PID %d"), ret);
1858           else if (!WIFSTOPPED (status))
1859             internal_error (__FILE__, __LINE__,
1860                             _("wait returned unexpected status 0x%x"), status);
1861         }
1862
1863       ourstatus->value.related_pid = ptid_build (new_pid, new_pid, 0);
1864
1865       if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK)
1866         {
1867           /* The arch-specific native code may need to know about new
1868              forks even if those end up never mapped to an
1869              inferior.  */
1870           if (linux_nat_new_fork != NULL)
1871             linux_nat_new_fork (lp, new_pid);
1872         }
1873
1874       if (event == PTRACE_EVENT_FORK
1875           && linux_fork_checkpointing_p (ptid_get_pid (lp->ptid)))
1876         {
1877           /* Handle checkpointing by linux-fork.c here as a special
1878              case.  We don't want the follow-fork-mode or 'catch fork'
1879              to interfere with this.  */
1880
1881           /* This won't actually modify the breakpoint list, but will
1882              physically remove the breakpoints from the child.  */
1883           detach_breakpoints (ptid_build (new_pid, new_pid, 0));
1884
1885           /* Retain child fork in ptrace (stopped) state.  */
1886           if (!find_fork_pid (new_pid))
1887             add_fork (new_pid);
1888
1889           /* Report as spurious, so that infrun doesn't want to follow
1890              this fork.  We're actually doing an infcall in
1891              linux-fork.c.  */
1892           ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
1893
1894           /* Report the stop to the core.  */
1895           return 0;
1896         }
1897
1898       if (event == PTRACE_EVENT_FORK)
1899         ourstatus->kind = TARGET_WAITKIND_FORKED;
1900       else if (event == PTRACE_EVENT_VFORK)
1901         ourstatus->kind = TARGET_WAITKIND_VFORKED;
1902       else if (event == PTRACE_EVENT_CLONE)
1903         {
1904           struct lwp_info *new_lp;
1905
1906           ourstatus->kind = TARGET_WAITKIND_IGNORE;
1907
1908           if (debug_linux_nat)
1909             fprintf_unfiltered (gdb_stdlog,
1910                                 "LHEW: Got clone event "
1911                                 "from LWP %d, new child is LWP %ld\n",
1912                                 pid, new_pid);
1913
1914           new_lp = add_lwp (ptid_build (ptid_get_pid (lp->ptid), new_pid, 0));
1915           new_lp->stopped = 1;
1916           new_lp->resumed = 1;
1917
1918           /* If the thread_db layer is active, let it record the user
1919              level thread id and status, and add the thread to GDB's
1920              list.  */
1921           if (!thread_db_notice_clone (lp->ptid, new_lp->ptid))
1922             {
1923               /* The process is not using thread_db.  Add the LWP to
1924                  GDB's list.  */
1925               target_post_attach (ptid_get_lwp (new_lp->ptid));
1926               add_thread (new_lp->ptid);
1927             }
1928
1929           /* Even if we're stopping the thread for some reason
1930              internal to this module, from the perspective of infrun
1931              and the user/frontend, this new thread is running until
1932              it next reports a stop.  */
1933           set_running (new_lp->ptid, 1);
1934           set_executing (new_lp->ptid, 1);
1935
1936           if (WSTOPSIG (status) != SIGSTOP)
1937             {
1938               /* This can happen if someone starts sending signals to
1939                  the new thread before it gets a chance to run, which
1940                  have a lower number than SIGSTOP (e.g. SIGUSR1).
1941                  This is an unlikely case, and harder to handle for
1942                  fork / vfork than for clone, so we do not try - but
1943                  we handle it for clone events here.  */
1944
1945               new_lp->signalled = 1;
1946
1947               /* We created NEW_LP so it cannot yet contain STATUS.  */
1948               gdb_assert (new_lp->status == 0);
1949
1950               /* Save the wait status to report later.  */
1951               if (debug_linux_nat)
1952                 fprintf_unfiltered (gdb_stdlog,
1953                                     "LHEW: waitpid of new LWP %ld, "
1954                                     "saving status %s\n",
1955                                     (long) ptid_get_lwp (new_lp->ptid),
1956                                     status_to_str (status));
1957               new_lp->status = status;
1958             }
1959           else if (report_thread_events)
1960             {
1961               new_lp->waitstatus.kind = TARGET_WAITKIND_THREAD_CREATED;
1962               new_lp->status = status;
1963             }
1964
1965           return 1;
1966         }
1967
1968       return 0;
1969     }
1970
1971   if (event == PTRACE_EVENT_EXEC)
1972     {
1973       if (debug_linux_nat)
1974         fprintf_unfiltered (gdb_stdlog,
1975                             "LHEW: Got exec event from LWP %ld\n",
1976                             ptid_get_lwp (lp->ptid));
1977
1978       ourstatus->kind = TARGET_WAITKIND_EXECD;
1979       ourstatus->value.execd_pathname
1980         = xstrdup (linux_child_pid_to_exec_file (NULL, pid));
1981
1982       /* The thread that execed must have been resumed, but, when a
1983          thread execs, it changes its tid to the tgid, and the old
1984          tgid thread might have not been resumed.  */
1985       lp->resumed = 1;
1986       return 0;
1987     }
1988
1989   if (event == PTRACE_EVENT_VFORK_DONE)
1990     {
1991       if (current_inferior ()->waiting_for_vfork_done)
1992         {
1993           if (debug_linux_nat)
1994             fprintf_unfiltered (gdb_stdlog,
1995                                 "LHEW: Got expected PTRACE_EVENT_"
1996                                 "VFORK_DONE from LWP %ld: stopping\n",
1997                                 ptid_get_lwp (lp->ptid));
1998
1999           ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
2000           return 0;
2001         }
2002
2003       if (debug_linux_nat)
2004         fprintf_unfiltered (gdb_stdlog,
2005                             "LHEW: Got PTRACE_EVENT_VFORK_DONE "
2006                             "from LWP %ld: ignoring\n",
2007                             ptid_get_lwp (lp->ptid));
2008       return 1;
2009     }
2010
2011   internal_error (__FILE__, __LINE__,
2012                   _("unknown ptrace event %d"), event);
2013 }
2014
2015 /* Wait for LP to stop.  Returns the wait status, or 0 if the LWP has
2016    exited.  */
2017
2018 static int
2019 wait_lwp (struct lwp_info *lp)
2020 {
2021   pid_t pid;
2022   int status = 0;
2023   int thread_dead = 0;
2024   sigset_t prev_mask;
2025
2026   gdb_assert (!lp->stopped);
2027   gdb_assert (lp->status == 0);
2028
2029   /* Make sure SIGCHLD is blocked for sigsuspend avoiding a race below.  */
2030   block_child_signals (&prev_mask);
2031
2032   for (;;)
2033     {
2034       pid = my_waitpid (ptid_get_lwp (lp->ptid), &status, __WALL | WNOHANG);
2035       if (pid == -1 && errno == ECHILD)
2036         {
2037           /* The thread has previously exited.  We need to delete it
2038              now because if this was a non-leader thread execing, we
2039              won't get an exit event.  See comments on exec events at
2040              the top of the file.  */
2041           thread_dead = 1;
2042           if (debug_linux_nat)
2043             fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
2044                                 target_pid_to_str (lp->ptid));
2045         }
2046       if (pid != 0)
2047         break;
2048
2049       /* Bugs 10970, 12702.
2050          Thread group leader may have exited in which case we'll lock up in
2051          waitpid if there are other threads, even if they are all zombies too.
2052          Basically, we're not supposed to use waitpid this way.
2053           tkill(pid,0) cannot be used here as it gets ESRCH for both
2054          for zombie and running processes.
2055
2056          As a workaround, check if we're waiting for the thread group leader and
2057          if it's a zombie, and avoid calling waitpid if it is.
2058
2059          This is racy, what if the tgl becomes a zombie right after we check?
2060          Therefore always use WNOHANG with sigsuspend - it is equivalent to
2061          waiting waitpid but linux_proc_pid_is_zombie is safe this way.  */
2062
2063       if (ptid_get_pid (lp->ptid) == ptid_get_lwp (lp->ptid)
2064           && linux_proc_pid_is_zombie (ptid_get_lwp (lp->ptid)))
2065         {
2066           thread_dead = 1;
2067           if (debug_linux_nat)
2068             fprintf_unfiltered (gdb_stdlog,
2069                                 "WL: Thread group leader %s vanished.\n",
2070                                 target_pid_to_str (lp->ptid));
2071           break;
2072         }
2073
2074       /* Wait for next SIGCHLD and try again.  This may let SIGCHLD handlers
2075          get invoked despite our caller had them intentionally blocked by
2076          block_child_signals.  This is sensitive only to the loop of
2077          linux_nat_wait_1 and there if we get called my_waitpid gets called
2078          again before it gets to sigsuspend so we can safely let the handlers
2079          get executed here.  */
2080
2081       if (debug_linux_nat)
2082         fprintf_unfiltered (gdb_stdlog, "WL: about to sigsuspend\n");
2083       sigsuspend (&suspend_mask);
2084     }
2085
2086   restore_child_signals_mask (&prev_mask);
2087
2088   if (!thread_dead)
2089     {
2090       gdb_assert (pid == ptid_get_lwp (lp->ptid));
2091
2092       if (debug_linux_nat)
2093         {
2094           fprintf_unfiltered (gdb_stdlog,
2095                               "WL: waitpid %s received %s\n",
2096                               target_pid_to_str (lp->ptid),
2097                               status_to_str (status));
2098         }
2099
2100       /* Check if the thread has exited.  */
2101       if (WIFEXITED (status) || WIFSIGNALED (status))
2102         {
2103           if (report_thread_events
2104               || ptid_get_pid (lp->ptid) == ptid_get_lwp (lp->ptid))
2105             {
2106               if (debug_linux_nat)
2107                 fprintf_unfiltered (gdb_stdlog, "WL: LWP %d exited.\n",
2108                                     ptid_get_pid (lp->ptid));
2109
2110               /* If this is the leader exiting, it means the whole
2111                  process is gone.  Store the status to report to the
2112                  core.  Store it in lp->waitstatus, because lp->status
2113                  would be ambiguous (W_EXITCODE(0,0) == 0).  */
2114               store_waitstatus (&lp->waitstatus, status);
2115               return 0;
2116             }
2117
2118           thread_dead = 1;
2119           if (debug_linux_nat)
2120             fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
2121                                 target_pid_to_str (lp->ptid));
2122         }
2123     }
2124
2125   if (thread_dead)
2126     {
2127       exit_lwp (lp);
2128       return 0;
2129     }
2130
2131   gdb_assert (WIFSTOPPED (status));
2132   lp->stopped = 1;
2133
2134   if (lp->must_set_ptrace_flags)
2135     {
2136       struct inferior *inf = find_inferior_pid (ptid_get_pid (lp->ptid));
2137       int options = linux_nat_ptrace_options (inf->attach_flag);
2138
2139       linux_enable_event_reporting (ptid_get_lwp (lp->ptid), options);
2140       lp->must_set_ptrace_flags = 0;
2141     }
2142
2143   /* Handle GNU/Linux's syscall SIGTRAPs.  */
2144   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
2145     {
2146       /* No longer need the sysgood bit.  The ptrace event ends up
2147          recorded in lp->waitstatus if we care for it.  We can carry
2148          on handling the event like a regular SIGTRAP from here
2149          on.  */
2150       status = W_STOPCODE (SIGTRAP);
2151       if (linux_handle_syscall_trap (lp, 1))
2152         return wait_lwp (lp);
2153     }
2154   else
2155     {
2156       /* Almost all other ptrace-stops are known to be outside of system
2157          calls, with further exceptions in linux_handle_extended_wait.  */
2158       lp->syscall_state = TARGET_WAITKIND_IGNORE;
2159     }
2160
2161   /* Handle GNU/Linux's extended waitstatus for trace events.  */
2162   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP
2163       && linux_is_extended_waitstatus (status))
2164     {
2165       if (debug_linux_nat)
2166         fprintf_unfiltered (gdb_stdlog,
2167                             "WL: Handling extended status 0x%06x\n",
2168                             status);
2169       linux_handle_extended_wait (lp, status);
2170       return 0;
2171     }
2172
2173   return status;
2174 }
2175
2176 /* Send a SIGSTOP to LP.  */
2177
2178 static int
2179 stop_callback (struct lwp_info *lp, void *data)
2180 {
2181   if (!lp->stopped && !lp->signalled)
2182     {
2183       int ret;
2184
2185       if (debug_linux_nat)
2186         {
2187           fprintf_unfiltered (gdb_stdlog,
2188                               "SC:  kill %s **<SIGSTOP>**\n",
2189                               target_pid_to_str (lp->ptid));
2190         }
2191       errno = 0;
2192       ret = kill_lwp (ptid_get_lwp (lp->ptid), SIGSTOP);
2193       if (debug_linux_nat)
2194         {
2195           fprintf_unfiltered (gdb_stdlog,
2196                               "SC:  lwp kill %d %s\n",
2197                               ret,
2198                               errno ? safe_strerror (errno) : "ERRNO-OK");
2199         }
2200
2201       lp->signalled = 1;
2202       gdb_assert (lp->status == 0);
2203     }
2204
2205   return 0;
2206 }
2207
2208 /* Request a stop on LWP.  */
2209
2210 void
2211 linux_stop_lwp (struct lwp_info *lwp)
2212 {
2213   stop_callback (lwp, NULL);
2214 }
2215
2216 /* See linux-nat.h  */
2217
2218 void
2219 linux_stop_and_wait_all_lwps (void)
2220 {
2221   /* Stop all LWP's ...  */
2222   iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
2223
2224   /* ... and wait until all of them have reported back that
2225      they're no longer running.  */
2226   iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
2227 }
2228
2229 /* See linux-nat.h  */
2230
2231 void
2232 linux_unstop_all_lwps (void)
2233 {
2234   iterate_over_lwps (minus_one_ptid,
2235                      resume_stopped_resumed_lwps, &minus_one_ptid);
2236 }
2237
2238 /* Return non-zero if LWP PID has a pending SIGINT.  */
2239
2240 static int
2241 linux_nat_has_pending_sigint (int pid)
2242 {
2243   sigset_t pending, blocked, ignored;
2244
2245   linux_proc_pending_signals (pid, &pending, &blocked, &ignored);
2246
2247   if (sigismember (&pending, SIGINT)
2248       && !sigismember (&ignored, SIGINT))
2249     return 1;
2250
2251   return 0;
2252 }
2253
2254 /* Set a flag in LP indicating that we should ignore its next SIGINT.  */
2255
2256 static int
2257 set_ignore_sigint (struct lwp_info *lp, void *data)
2258 {
2259   /* If a thread has a pending SIGINT, consume it; otherwise, set a
2260      flag to consume the next one.  */
2261   if (lp->stopped && lp->status != 0 && WIFSTOPPED (lp->status)
2262       && WSTOPSIG (lp->status) == SIGINT)
2263     lp->status = 0;
2264   else
2265     lp->ignore_sigint = 1;
2266
2267   return 0;
2268 }
2269
2270 /* If LP does not have a SIGINT pending, then clear the ignore_sigint flag.
2271    This function is called after we know the LWP has stopped; if the LWP
2272    stopped before the expected SIGINT was delivered, then it will never have
2273    arrived.  Also, if the signal was delivered to a shared queue and consumed
2274    by a different thread, it will never be delivered to this LWP.  */
2275
2276 static void
2277 maybe_clear_ignore_sigint (struct lwp_info *lp)
2278 {
2279   if (!lp->ignore_sigint)
2280     return;
2281
2282   if (!linux_nat_has_pending_sigint (ptid_get_lwp (lp->ptid)))
2283     {
2284       if (debug_linux_nat)
2285         fprintf_unfiltered (gdb_stdlog,
2286                             "MCIS: Clearing bogus flag for %s\n",
2287                             target_pid_to_str (lp->ptid));
2288       lp->ignore_sigint = 0;
2289     }
2290 }
2291
2292 /* Fetch the possible triggered data watchpoint info and store it in
2293    LP.
2294
2295    On some archs, like x86, that use debug registers to set
2296    watchpoints, it's possible that the way to know which watched
2297    address trapped, is to check the register that is used to select
2298    which address to watch.  Problem is, between setting the watchpoint
2299    and reading back which data address trapped, the user may change
2300    the set of watchpoints, and, as a consequence, GDB changes the
2301    debug registers in the inferior.  To avoid reading back a stale
2302    stopped-data-address when that happens, we cache in LP the fact
2303    that a watchpoint trapped, and the corresponding data address, as
2304    soon as we see LP stop with a SIGTRAP.  If GDB changes the debug
2305    registers meanwhile, we have the cached data we can rely on.  */
2306
2307 static int
2308 check_stopped_by_watchpoint (struct lwp_info *lp)
2309 {
2310   struct cleanup *old_chain;
2311
2312   if (linux_ops->to_stopped_by_watchpoint == NULL)
2313     return 0;
2314
2315   old_chain = save_inferior_ptid ();
2316   inferior_ptid = lp->ptid;
2317
2318   if (linux_ops->to_stopped_by_watchpoint (linux_ops))
2319     {
2320       lp->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
2321
2322       if (linux_ops->to_stopped_data_address != NULL)
2323         lp->stopped_data_address_p =
2324           linux_ops->to_stopped_data_address (&current_target,
2325                                               &lp->stopped_data_address);
2326       else
2327         lp->stopped_data_address_p = 0;
2328     }
2329
2330   do_cleanups (old_chain);
2331
2332   return lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
2333 }
2334
2335 /* Returns true if the LWP had stopped for a watchpoint.  */
2336
2337 static int
2338 linux_nat_stopped_by_watchpoint (struct target_ops *ops)
2339 {
2340   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2341
2342   gdb_assert (lp != NULL);
2343
2344   return lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
2345 }
2346
2347 static int
2348 linux_nat_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
2349 {
2350   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2351
2352   gdb_assert (lp != NULL);
2353
2354   *addr_p = lp->stopped_data_address;
2355
2356   return lp->stopped_data_address_p;
2357 }
2358
2359 /* Commonly any breakpoint / watchpoint generate only SIGTRAP.  */
2360
2361 static int
2362 sigtrap_is_event (int status)
2363 {
2364   return WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP;
2365 }
2366
2367 /* Set alternative SIGTRAP-like events recognizer.  If
2368    breakpoint_inserted_here_p there then gdbarch_decr_pc_after_break will be
2369    applied.  */
2370
2371 void
2372 linux_nat_set_status_is_event (struct target_ops *t,
2373                                int (*status_is_event) (int status))
2374 {
2375   linux_nat_status_is_event = status_is_event;
2376 }
2377
2378 /* Wait until LP is stopped.  */
2379
2380 static int
2381 stop_wait_callback (struct lwp_info *lp, void *data)
2382 {
2383   struct inferior *inf = find_inferior_ptid (lp->ptid);
2384
2385   /* If this is a vfork parent, bail out, it is not going to report
2386      any SIGSTOP until the vfork is done with.  */
2387   if (inf->vfork_child != NULL)
2388     return 0;
2389
2390   if (!lp->stopped)
2391     {
2392       int status;
2393
2394       status = wait_lwp (lp);
2395       if (status == 0)
2396         return 0;
2397
2398       if (lp->ignore_sigint && WIFSTOPPED (status)
2399           && WSTOPSIG (status) == SIGINT)
2400         {
2401           lp->ignore_sigint = 0;
2402
2403           errno = 0;
2404           ptrace (PTRACE_CONT, ptid_get_lwp (lp->ptid), 0, 0);
2405           lp->stopped = 0;
2406           if (debug_linux_nat)
2407             fprintf_unfiltered (gdb_stdlog,
2408                                 "PTRACE_CONT %s, 0, 0 (%s) "
2409                                 "(discarding SIGINT)\n",
2410                                 target_pid_to_str (lp->ptid),
2411                                 errno ? safe_strerror (errno) : "OK");
2412
2413           return stop_wait_callback (lp, NULL);
2414         }
2415
2416       maybe_clear_ignore_sigint (lp);
2417
2418       if (WSTOPSIG (status) != SIGSTOP)
2419         {
2420           /* The thread was stopped with a signal other than SIGSTOP.  */
2421
2422           if (debug_linux_nat)
2423             fprintf_unfiltered (gdb_stdlog,
2424                                 "SWC: Pending event %s in %s\n",
2425                                 status_to_str ((int) status),
2426                                 target_pid_to_str (lp->ptid));
2427
2428           /* Save the sigtrap event.  */
2429           lp->status = status;
2430           gdb_assert (lp->signalled);
2431           save_stop_reason (lp);
2432         }
2433       else
2434         {
2435           /* We caught the SIGSTOP that we intended to catch, so
2436              there's no SIGSTOP pending.  */
2437
2438           if (debug_linux_nat)
2439             fprintf_unfiltered (gdb_stdlog,
2440                                 "SWC: Expected SIGSTOP caught for %s.\n",
2441                                 target_pid_to_str (lp->ptid));
2442
2443           /* Reset SIGNALLED only after the stop_wait_callback call
2444              above as it does gdb_assert on SIGNALLED.  */
2445           lp->signalled = 0;
2446         }
2447     }
2448
2449   return 0;
2450 }
2451
2452 /* Return non-zero if LP has a wait status pending.  Discard the
2453    pending event and resume the LWP if the event that originally
2454    caused the stop became uninteresting.  */
2455
2456 static int
2457 status_callback (struct lwp_info *lp, void *data)
2458 {
2459   /* Only report a pending wait status if we pretend that this has
2460      indeed been resumed.  */
2461   if (!lp->resumed)
2462     return 0;
2463
2464   if (!lwp_status_pending_p (lp))
2465     return 0;
2466
2467   if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
2468       || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
2469     {
2470       struct regcache *regcache = get_thread_regcache (lp->ptid);
2471       CORE_ADDR pc;
2472       int discard = 0;
2473
2474       pc = regcache_read_pc (regcache);
2475
2476       if (pc != lp->stop_pc)
2477         {
2478           if (debug_linux_nat)
2479             fprintf_unfiltered (gdb_stdlog,
2480                                 "SC: PC of %s changed.  was=%s, now=%s\n",
2481                                 target_pid_to_str (lp->ptid),
2482                                 paddress (target_gdbarch (), lp->stop_pc),
2483                                 paddress (target_gdbarch (), pc));
2484           discard = 1;
2485         }
2486
2487 #if !USE_SIGTRAP_SIGINFO
2488       else if (!breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
2489         {
2490           if (debug_linux_nat)
2491             fprintf_unfiltered (gdb_stdlog,
2492                                 "SC: previous breakpoint of %s, at %s gone\n",
2493                                 target_pid_to_str (lp->ptid),
2494                                 paddress (target_gdbarch (), lp->stop_pc));
2495
2496           discard = 1;
2497         }
2498 #endif
2499
2500       if (discard)
2501         {
2502           if (debug_linux_nat)
2503             fprintf_unfiltered (gdb_stdlog,
2504                                 "SC: pending event of %s cancelled.\n",
2505                                 target_pid_to_str (lp->ptid));
2506
2507           lp->status = 0;
2508           linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
2509           return 0;
2510         }
2511     }
2512
2513   return 1;
2514 }
2515
2516 /* Count the LWP's that have had events.  */
2517
2518 static int
2519 count_events_callback (struct lwp_info *lp, void *data)
2520 {
2521   int *count = (int *) data;
2522
2523   gdb_assert (count != NULL);
2524
2525   /* Select only resumed LWPs that have an event pending.  */
2526   if (lp->resumed && lwp_status_pending_p (lp))
2527     (*count)++;
2528
2529   return 0;
2530 }
2531
2532 /* Select the LWP (if any) that is currently being single-stepped.  */
2533
2534 static int
2535 select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2536 {
2537   if (lp->last_resume_kind == resume_step
2538       && lp->status != 0)
2539     return 1;
2540   else
2541     return 0;
2542 }
2543
2544 /* Returns true if LP has a status pending.  */
2545
2546 static int
2547 lwp_status_pending_p (struct lwp_info *lp)
2548 {
2549   /* We check for lp->waitstatus in addition to lp->status, because we
2550      can have pending process exits recorded in lp->status and
2551      W_EXITCODE(0,0) happens to be 0.  */
2552   return lp->status != 0 || lp->waitstatus.kind != TARGET_WAITKIND_IGNORE;
2553 }
2554
2555 /* Select the Nth LWP that has had an event.  */
2556
2557 static int
2558 select_event_lwp_callback (struct lwp_info *lp, void *data)
2559 {
2560   int *selector = (int *) data;
2561
2562   gdb_assert (selector != NULL);
2563
2564   /* Select only resumed LWPs that have an event pending.  */
2565   if (lp->resumed && lwp_status_pending_p (lp))
2566     if ((*selector)-- == 0)
2567       return 1;
2568
2569   return 0;
2570 }
2571
2572 /* Called when the LWP stopped for a signal/trap.  If it stopped for a
2573    trap check what caused it (breakpoint, watchpoint, trace, etc.),
2574    and save the result in the LWP's stop_reason field.  If it stopped
2575    for a breakpoint, decrement the PC if necessary on the lwp's
2576    architecture.  */
2577
2578 static void
2579 save_stop_reason (struct lwp_info *lp)
2580 {
2581   struct regcache *regcache;
2582   struct gdbarch *gdbarch;
2583   CORE_ADDR pc;
2584   CORE_ADDR sw_bp_pc;
2585 #if USE_SIGTRAP_SIGINFO
2586   siginfo_t siginfo;
2587 #endif
2588
2589   gdb_assert (lp->stop_reason == TARGET_STOPPED_BY_NO_REASON);
2590   gdb_assert (lp->status != 0);
2591
2592   if (!linux_nat_status_is_event (lp->status))
2593     return;
2594
2595   regcache = get_thread_regcache (lp->ptid);
2596   gdbarch = get_regcache_arch (regcache);
2597
2598   pc = regcache_read_pc (regcache);
2599   sw_bp_pc = pc - gdbarch_decr_pc_after_break (gdbarch);
2600
2601 #if USE_SIGTRAP_SIGINFO
2602   if (linux_nat_get_siginfo (lp->ptid, &siginfo))
2603     {
2604       if (siginfo.si_signo == SIGTRAP)
2605         {
2606           if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)
2607               && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))
2608             {
2609               /* The si_code is ambiguous on this arch -- check debug
2610                  registers.  */
2611               if (!check_stopped_by_watchpoint (lp))
2612                 lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
2613             }
2614           else if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code))
2615             {
2616               /* If we determine the LWP stopped for a SW breakpoint,
2617                  trust it.  Particularly don't check watchpoint
2618                  registers, because at least on s390, we'd find
2619                  stopped-by-watchpoint as long as there's a watchpoint
2620                  set.  */
2621               lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
2622             }
2623           else if (GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))
2624             {
2625               /* This can indicate either a hardware breakpoint or
2626                  hardware watchpoint.  Check debug registers.  */
2627               if (!check_stopped_by_watchpoint (lp))
2628                 lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
2629             }
2630           else if (siginfo.si_code == TRAP_TRACE)
2631             {
2632               if (debug_linux_nat)
2633                 fprintf_unfiltered (gdb_stdlog,
2634                                     "CSBB: %s stopped by trace\n",
2635                                     target_pid_to_str (lp->ptid));
2636
2637               /* We may have single stepped an instruction that
2638                  triggered a watchpoint.  In that case, on some
2639                  architectures (such as x86), instead of TRAP_HWBKPT,
2640                  si_code indicates TRAP_TRACE, and we need to check
2641                  the debug registers separately.  */
2642               check_stopped_by_watchpoint (lp);
2643             }
2644         }
2645     }
2646 #else
2647   if ((!lp->step || lp->stop_pc == sw_bp_pc)
2648       && software_breakpoint_inserted_here_p (get_regcache_aspace (regcache),
2649                                               sw_bp_pc))
2650     {
2651       /* The LWP was either continued, or stepped a software
2652          breakpoint instruction.  */
2653       lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
2654     }
2655
2656   if (hardware_breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
2657     lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
2658
2659   if (lp->stop_reason == TARGET_STOPPED_BY_NO_REASON)
2660     check_stopped_by_watchpoint (lp);
2661 #endif
2662
2663   if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
2664     {
2665       if (debug_linux_nat)
2666         fprintf_unfiltered (gdb_stdlog,
2667                             "CSBB: %s stopped by software breakpoint\n",
2668                             target_pid_to_str (lp->ptid));
2669
2670       /* Back up the PC if necessary.  */
2671       if (pc != sw_bp_pc)
2672         regcache_write_pc (regcache, sw_bp_pc);
2673
2674       /* Update this so we record the correct stop PC below.  */
2675       pc = sw_bp_pc;
2676     }
2677   else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
2678     {
2679       if (debug_linux_nat)
2680         fprintf_unfiltered (gdb_stdlog,
2681                             "CSBB: %s stopped by hardware breakpoint\n",
2682                             target_pid_to_str (lp->ptid));
2683     }
2684   else if (lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
2685     {
2686       if (debug_linux_nat)
2687         fprintf_unfiltered (gdb_stdlog,
2688                             "CSBB: %s stopped by hardware watchpoint\n",
2689                             target_pid_to_str (lp->ptid));
2690     }
2691
2692   lp->stop_pc = pc;
2693 }
2694
2695
2696 /* Returns true if the LWP had stopped for a software breakpoint.  */
2697
2698 static int
2699 linux_nat_stopped_by_sw_breakpoint (struct target_ops *ops)
2700 {
2701   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2702
2703   gdb_assert (lp != NULL);
2704
2705   return lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT;
2706 }
2707
2708 /* Implement the supports_stopped_by_sw_breakpoint method.  */
2709
2710 static int
2711 linux_nat_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
2712 {
2713   return USE_SIGTRAP_SIGINFO;
2714 }
2715
2716 /* Returns true if the LWP had stopped for a hardware
2717    breakpoint/watchpoint.  */
2718
2719 static int
2720 linux_nat_stopped_by_hw_breakpoint (struct target_ops *ops)
2721 {
2722   struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2723
2724   gdb_assert (lp != NULL);
2725
2726   return lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT;
2727 }
2728
2729 /* Implement the supports_stopped_by_hw_breakpoint method.  */
2730
2731 static int
2732 linux_nat_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
2733 {
2734   return USE_SIGTRAP_SIGINFO;
2735 }
2736
2737 /* Select one LWP out of those that have events pending.  */
2738
2739 static void
2740 select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
2741 {
2742   int num_events = 0;
2743   int random_selector;
2744   struct lwp_info *event_lp = NULL;
2745
2746   /* Record the wait status for the original LWP.  */
2747   (*orig_lp)->status = *status;
2748
2749   /* In all-stop, give preference to the LWP that is being
2750      single-stepped.  There will be at most one, and it will be the
2751      LWP that the core is most interested in.  If we didn't do this,
2752      then we'd have to handle pending step SIGTRAPs somehow in case
2753      the core later continues the previously-stepped thread, as
2754      otherwise we'd report the pending SIGTRAP then, and the core, not
2755      having stepped the thread, wouldn't understand what the trap was
2756      for, and therefore would report it to the user as a random
2757      signal.  */
2758   if (!target_is_non_stop_p ())
2759     {
2760       event_lp = iterate_over_lwps (filter,
2761                                     select_singlestep_lwp_callback, NULL);
2762       if (event_lp != NULL)
2763         {
2764           if (debug_linux_nat)
2765             fprintf_unfiltered (gdb_stdlog,
2766                                 "SEL: Select single-step %s\n",
2767                                 target_pid_to_str (event_lp->ptid));
2768         }
2769     }
2770
2771   if (event_lp == NULL)
2772     {
2773       /* Pick one at random, out of those which have had events.  */
2774
2775       /* First see how many events we have.  */
2776       iterate_over_lwps (filter, count_events_callback, &num_events);
2777       gdb_assert (num_events > 0);
2778
2779       /* Now randomly pick a LWP out of those that have had
2780          events.  */
2781       random_selector = (int)
2782         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2783
2784       if (debug_linux_nat && num_events > 1)
2785         fprintf_unfiltered (gdb_stdlog,
2786                             "SEL: Found %d events, selecting #%d\n",
2787                             num_events, random_selector);
2788
2789       event_lp = iterate_over_lwps (filter,
2790                                     select_event_lwp_callback,
2791                                     &random_selector);
2792     }
2793
2794   if (event_lp != NULL)
2795     {
2796       /* Switch the event LWP.  */
2797       *orig_lp = event_lp;
2798       *status = event_lp->status;
2799     }
2800
2801   /* Flush the wait status for the event LWP.  */
2802   (*orig_lp)->status = 0;
2803 }
2804
2805 /* Return non-zero if LP has been resumed.  */
2806
2807 static int
2808 resumed_callback (struct lwp_info *lp, void *data)
2809 {
2810   return lp->resumed;
2811 }
2812
2813 /* Check if we should go on and pass this event to common code.
2814    Return the affected lwp if we are, or NULL otherwise.  */
2815
2816 static struct lwp_info *
2817 linux_nat_filter_event (int lwpid, int status)
2818 {
2819   struct lwp_info *lp;
2820   int event = linux_ptrace_get_extended_event (status);
2821
2822   lp = find_lwp_pid (pid_to_ptid (lwpid));
2823
2824   /* Check for stop events reported by a process we didn't already
2825      know about - anything not already in our LWP list.
2826
2827      If we're expecting to receive stopped processes after
2828      fork, vfork, and clone events, then we'll just add the
2829      new one to our list and go back to waiting for the event
2830      to be reported - the stopped process might be returned
2831      from waitpid before or after the event is.
2832
2833      But note the case of a non-leader thread exec'ing after the
2834      leader having exited, and gone from our lists.  The non-leader
2835      thread changes its tid to the tgid.  */
2836
2837   if (WIFSTOPPED (status) && lp == NULL
2838       && (WSTOPSIG (status) == SIGTRAP && event == PTRACE_EVENT_EXEC))
2839     {
2840       /* A multi-thread exec after we had seen the leader exiting.  */
2841       if (debug_linux_nat)
2842         fprintf_unfiltered (gdb_stdlog,
2843                             "LLW: Re-adding thread group leader LWP %d.\n",
2844                             lwpid);
2845
2846       lp = add_lwp (ptid_build (lwpid, lwpid, 0));
2847       lp->stopped = 1;
2848       lp->resumed = 1;
2849       add_thread (lp->ptid);
2850     }
2851
2852   if (WIFSTOPPED (status) && !lp)
2853     {
2854       if (debug_linux_nat)
2855         fprintf_unfiltered (gdb_stdlog,
2856                             "LHEW: saving LWP %ld status %s in stopped_pids list\n",
2857                             (long) lwpid, status_to_str (status));
2858       add_to_pid_list (&stopped_pids, lwpid, status);
2859       return NULL;
2860     }
2861
2862   /* Make sure we don't report an event for the exit of an LWP not in
2863      our list, i.e. not part of the current process.  This can happen
2864      if we detach from a program we originally forked and then it
2865      exits.  */
2866   if (!WIFSTOPPED (status) && !lp)
2867     return NULL;
2868
2869   /* This LWP is stopped now.  (And if dead, this prevents it from
2870      ever being continued.)  */
2871   lp->stopped = 1;
2872
2873   if (WIFSTOPPED (status) && lp->must_set_ptrace_flags)
2874     {
2875       struct inferior *inf = find_inferior_pid (ptid_get_pid (lp->ptid));
2876       int options = linux_nat_ptrace_options (inf->attach_flag);
2877
2878       linux_enable_event_reporting (ptid_get_lwp (lp->ptid), options);
2879       lp->must_set_ptrace_flags = 0;
2880     }
2881
2882   /* Handle GNU/Linux's syscall SIGTRAPs.  */
2883   if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
2884     {
2885       /* No longer need the sysgood bit.  The ptrace event ends up
2886          recorded in lp->waitstatus if we care for it.  We can carry
2887          on handling the event like a regular SIGTRAP from here
2888          on.  */
2889       status = W_STOPCODE (SIGTRAP);
2890       if (linux_handle_syscall_trap (lp, 0))
2891         return NULL;
2892     }
2893   else
2894     {
2895       /* Almost all other ptrace-stops are known to be outside of system
2896          calls, with further exceptions in linux_handle_extended_wait.  */
2897       lp->syscall_state = TARGET_WAITKIND_IGNORE;
2898     }
2899
2900   /* Handle GNU/Linux's extended waitstatus for trace events.  */
2901   if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP
2902       && linux_is_extended_waitstatus (status))
2903     {
2904       if (debug_linux_nat)
2905         fprintf_unfiltered (gdb_stdlog,
2906                             "LLW: Handling extended status 0x%06x\n",
2907                             status);
2908       if (linux_handle_extended_wait (lp, status))
2909         return NULL;
2910     }
2911
2912   /* Check if the thread has exited.  */
2913   if (WIFEXITED (status) || WIFSIGNALED (status))
2914     {
2915       if (!report_thread_events
2916           && num_lwps (ptid_get_pid (lp->ptid)) > 1)
2917         {
2918           if (debug_linux_nat)
2919             fprintf_unfiltered (gdb_stdlog,
2920                                 "LLW: %s exited.\n",
2921                                 target_pid_to_str (lp->ptid));
2922
2923           /* If there is at least one more LWP, then the exit signal
2924              was not the end of the debugged application and should be
2925              ignored.  */
2926           exit_lwp (lp);
2927           return NULL;
2928         }
2929
2930       /* Note that even if the leader was ptrace-stopped, it can still
2931          exit, if e.g., some other thread brings down the whole
2932          process (calls `exit').  So don't assert that the lwp is
2933          resumed.  */
2934       if (debug_linux_nat)
2935         fprintf_unfiltered (gdb_stdlog,
2936                             "LWP %ld exited (resumed=%d)\n",
2937                             ptid_get_lwp (lp->ptid), lp->resumed);
2938
2939       /* Dead LWP's aren't expected to reported a pending sigstop.  */
2940       lp->signalled = 0;
2941
2942       /* Store the pending event in the waitstatus, because
2943          W_EXITCODE(0,0) == 0.  */
2944       store_waitstatus (&lp->waitstatus, status);
2945       return lp;
2946     }
2947
2948   /* Make sure we don't report a SIGSTOP that we sent ourselves in
2949      an attempt to stop an LWP.  */
2950   if (lp->signalled
2951       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2952     {
2953       lp->signalled = 0;
2954
2955       if (lp->last_resume_kind == resume_stop)
2956         {
2957           if (debug_linux_nat)
2958             fprintf_unfiltered (gdb_stdlog,
2959                                 "LLW: resume_stop SIGSTOP caught for %s.\n",
2960                                 target_pid_to_str (lp->ptid));
2961         }
2962       else
2963         {
2964           /* This is a delayed SIGSTOP.  Filter out the event.  */
2965
2966           if (debug_linux_nat)
2967             fprintf_unfiltered (gdb_stdlog,
2968                                 "LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n",
2969                                 lp->step ?
2970                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2971                                 target_pid_to_str (lp->ptid));
2972
2973           linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
2974           gdb_assert (lp->resumed);
2975           return NULL;
2976         }
2977     }
2978
2979   /* Make sure we don't report a SIGINT that we have already displayed
2980      for another thread.  */
2981   if (lp->ignore_sigint
2982       && WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT)
2983     {
2984       if (debug_linux_nat)
2985         fprintf_unfiltered (gdb_stdlog,
2986                             "LLW: Delayed SIGINT caught for %s.\n",
2987                             target_pid_to_str (lp->ptid));
2988
2989       /* This is a delayed SIGINT.  */
2990       lp->ignore_sigint = 0;
2991
2992       linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
2993       if (debug_linux_nat)
2994         fprintf_unfiltered (gdb_stdlog,
2995                             "LLW: %s %s, 0, 0 (discard SIGINT)\n",
2996                             lp->step ?
2997                             "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2998                             target_pid_to_str (lp->ptid));
2999       gdb_assert (lp->resumed);
3000
3001       /* Discard the event.  */
3002       return NULL;
3003     }
3004
3005   /* Don't report signals that GDB isn't interested in, such as
3006      signals that are neither printed nor stopped upon.  Stopping all
3007      threads can be a bit time-consuming so if we want decent
3008      performance with heavily multi-threaded programs, especially when
3009      they're using a high frequency timer, we'd better avoid it if we
3010      can.  */
3011   if (WIFSTOPPED (status))
3012     {
3013       enum gdb_signal signo = gdb_signal_from_host (WSTOPSIG (status));
3014
3015       if (!target_is_non_stop_p ())
3016         {
3017           /* Only do the below in all-stop, as we currently use SIGSTOP
3018              to implement target_stop (see linux_nat_stop) in
3019              non-stop.  */
3020           if (signo == GDB_SIGNAL_INT && signal_pass_state (signo) == 0)
3021             {
3022               /* If ^C/BREAK is typed at the tty/console, SIGINT gets
3023                  forwarded to the entire process group, that is, all LWPs
3024                  will receive it - unless they're using CLONE_THREAD to
3025                  share signals.  Since we only want to report it once, we
3026                  mark it as ignored for all LWPs except this one.  */
3027               iterate_over_lwps (pid_to_ptid (ptid_get_pid (lp->ptid)),
3028                                               set_ignore_sigint, NULL);
3029               lp->ignore_sigint = 0;
3030             }
3031           else
3032             maybe_clear_ignore_sigint (lp);
3033         }
3034
3035       /* When using hardware single-step, we need to report every signal.
3036          Otherwise, signals in pass_mask may be short-circuited
3037          except signals that might be caused by a breakpoint.  */
3038       if (!lp->step
3039           && WSTOPSIG (status) && sigismember (&pass_mask, WSTOPSIG (status))
3040           && !linux_wstatus_maybe_breakpoint (status))
3041         {
3042           linux_resume_one_lwp (lp, lp->step, signo);
3043           if (debug_linux_nat)
3044             fprintf_unfiltered (gdb_stdlog,
3045                                 "LLW: %s %s, %s (preempt 'handle')\n",
3046                                 lp->step ?
3047                                 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3048                                 target_pid_to_str (lp->ptid),
3049                                 (signo != GDB_SIGNAL_0
3050                                  ? strsignal (gdb_signal_to_host (signo))
3051                                  : "0"));
3052           return NULL;
3053         }
3054     }
3055
3056   /* An interesting event.  */
3057   gdb_assert (lp);
3058   lp->status = status;
3059   save_stop_reason (lp);
3060   return lp;
3061 }
3062
3063 /* Detect zombie thread group leaders, and "exit" them.  We can't reap
3064    their exits until all other threads in the group have exited.  */
3065
3066 static void
3067 check_zombie_leaders (void)
3068 {
3069   struct inferior *inf;
3070
3071   ALL_INFERIORS (inf)
3072     {
3073       struct lwp_info *leader_lp;
3074
3075       if (inf->pid == 0)
3076         continue;
3077
3078       leader_lp = find_lwp_pid (pid_to_ptid (inf->pid));
3079       if (leader_lp != NULL
3080           /* Check if there are other threads in the group, as we may
3081              have raced with the inferior simply exiting.  */
3082           && num_lwps (inf->pid) > 1
3083           && linux_proc_pid_is_zombie (inf->pid))
3084         {
3085           if (debug_linux_nat)
3086             fprintf_unfiltered (gdb_stdlog,
3087                                 "CZL: Thread group leader %d zombie "
3088                                 "(it exited, or another thread execd).\n",
3089                                 inf->pid);
3090
3091           /* A leader zombie can mean one of two things:
3092
3093              - It exited, and there's an exit status pending
3094              available, or only the leader exited (not the whole
3095              program).  In the latter case, we can't waitpid the
3096              leader's exit status until all other threads are gone.
3097
3098              - There are 3 or more threads in the group, and a thread
3099              other than the leader exec'd.  See comments on exec
3100              events at the top of the file.  We could try
3101              distinguishing the exit and exec cases, by waiting once
3102              more, and seeing if something comes out, but it doesn't
3103              sound useful.  The previous leader _does_ go away, and
3104              we'll re-add the new one once we see the exec event
3105              (which is just the same as what would happen if the
3106              previous leader did exit voluntarily before some other
3107              thread execs).  */
3108
3109           if (debug_linux_nat)
3110             fprintf_unfiltered (gdb_stdlog,
3111                                 "CZL: Thread group leader %d vanished.\n",
3112                                 inf->pid);
3113           exit_lwp (leader_lp);
3114         }
3115     }
3116 }
3117
3118 /* Convenience function that is called when the kernel reports an exit
3119    event.  This decides whether to report the event to GDB as a
3120    process exit event, a thread exit event, or to suppress the
3121    event.  */
3122
3123 static ptid_t
3124 filter_exit_event (struct lwp_info *event_child,
3125                    struct target_waitstatus *ourstatus)
3126 {
3127   ptid_t ptid = event_child->ptid;
3128
3129   if (num_lwps (ptid_get_pid (ptid)) > 1)
3130     {
3131       if (report_thread_events)
3132         ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED;
3133       else
3134         ourstatus->kind = TARGET_WAITKIND_IGNORE;
3135
3136       exit_lwp (event_child);
3137     }
3138
3139   return ptid;
3140 }
3141
3142 static ptid_t
3143 linux_nat_wait_1 (struct target_ops *ops,
3144                   ptid_t ptid, struct target_waitstatus *ourstatus,
3145                   int target_options)
3146 {
3147   sigset_t prev_mask;
3148   enum resume_kind last_resume_kind;
3149   struct lwp_info *lp;
3150   int status;
3151
3152   if (debug_linux_nat)
3153     fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
3154
3155   /* The first time we get here after starting a new inferior, we may
3156      not have added it to the LWP list yet - this is the earliest
3157      moment at which we know its PID.  */
3158   if (ptid_is_pid (inferior_ptid))
3159     {
3160       /* Upgrade the main thread's ptid.  */
3161       thread_change_ptid (inferior_ptid,
3162                           ptid_build (ptid_get_pid (inferior_ptid),
3163                                       ptid_get_pid (inferior_ptid), 0));
3164
3165       lp = add_initial_lwp (inferior_ptid);
3166       lp->resumed = 1;
3167     }
3168
3169   /* Make sure SIGCHLD is blocked until the sigsuspend below.  */
3170   block_child_signals (&prev_mask);
3171
3172   /* First check if there is a LWP with a wait status pending.  */
3173   lp = iterate_over_lwps (ptid, status_callback, NULL);
3174   if (lp != NULL)
3175     {
3176       if (debug_linux_nat)
3177         fprintf_unfiltered (gdb_stdlog,
3178                             "LLW: Using pending wait status %s for %s.\n",
3179                             status_to_str (lp->status),
3180                             target_pid_to_str (lp->ptid));
3181     }
3182
3183   /* But if we don't find a pending event, we'll have to wait.  Always
3184      pull all events out of the kernel.  We'll randomly select an
3185      event LWP out of all that have events, to prevent starvation.  */
3186
3187   while (lp == NULL)
3188     {
3189       pid_t lwpid;
3190
3191       /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace
3192          quirks:
3193
3194          - If the thread group leader exits while other threads in the
3195            thread group still exist, waitpid(TGID, ...) hangs.  That
3196            waitpid won't return an exit status until the other threads
3197            in the group are reapped.
3198
3199          - When a non-leader thread execs, that thread just vanishes
3200            without reporting an exit (so we'd hang if we waited for it
3201            explicitly in that case).  The exec event is reported to
3202            the TGID pid.  */
3203
3204       errno = 0;
3205       lwpid = my_waitpid (-1, &status,  __WALL | WNOHANG);
3206
3207       if (debug_linux_nat)
3208         fprintf_unfiltered (gdb_stdlog,
3209                             "LNW: waitpid(-1, ...) returned %d, %s\n",
3210                             lwpid, errno ? safe_strerror (errno) : "ERRNO-OK");
3211
3212       if (lwpid > 0)
3213         {
3214           if (debug_linux_nat)
3215             {
3216               fprintf_unfiltered (gdb_stdlog,
3217                                   "LLW: waitpid %ld received %s\n",
3218                                   (long) lwpid, status_to_str (status));
3219             }
3220
3221           linux_nat_filter_event (lwpid, status);
3222           /* Retry until nothing comes out of waitpid.  A single
3223              SIGCHLD can indicate more than one child stopped.  */
3224           continue;
3225         }
3226
3227       /* Now that we've pulled all events out of the kernel, resume
3228          LWPs that don't have an interesting event to report.  */
3229       iterate_over_lwps (minus_one_ptid,
3230                          resume_stopped_resumed_lwps, &minus_one_ptid);
3231
3232       /* ... and find an LWP with a status to report to the core, if
3233          any.  */
3234       lp = iterate_over_lwps (ptid, status_callback, NULL);
3235       if (lp != NULL)
3236         break;
3237
3238       /* Check for zombie thread group leaders.  Those can't be reaped
3239          until all other threads in the thread group are.  */
3240       check_zombie_leaders ();
3241
3242       /* If there are no resumed children left, bail.  We'd be stuck
3243          forever in the sigsuspend call below otherwise.  */
3244       if (iterate_over_lwps (ptid, resumed_callback, NULL) == NULL)
3245         {
3246           if (debug_linux_nat)
3247             fprintf_unfiltered (gdb_stdlog, "LLW: exit (no resumed LWP)\n");
3248
3249           ourstatus->kind = TARGET_WAITKIND_NO_RESUMED;
3250
3251           restore_child_signals_mask (&prev_mask);
3252           return minus_one_ptid;
3253         }
3254
3255       /* No interesting event to report to the core.  */
3256
3257       if (target_options & TARGET_WNOHANG)
3258         {
3259           if (debug_linux_nat)
3260             fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3261
3262           ourstatus->kind = TARGET_WAITKIND_IGNORE;
3263           restore_child_signals_mask (&prev_mask);
3264           return minus_one_ptid;
3265         }
3266
3267       /* We shouldn't end up here unless we want to try again.  */
3268       gdb_assert (lp == NULL);
3269
3270       /* Block until we get an event reported with SIGCHLD.  */
3271       if (debug_linux_nat)
3272         fprintf_unfiltered (gdb_stdlog, "LNW: about to sigsuspend\n");
3273       sigsuspend (&suspend_mask);
3274     }
3275
3276   gdb_assert (lp);
3277
3278   status = lp->status;
3279   lp->status = 0;
3280
3281   if (!target_is_non_stop_p ())
3282     {
3283       /* Now stop all other LWP's ...  */
3284       iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
3285
3286       /* ... and wait until all of them have reported back that
3287          they're no longer running.  */
3288       iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
3289     }
3290
3291   /* If we're not waiting for a specific LWP, choose an event LWP from
3292      among those that have had events.  Giving equal priority to all
3293      LWPs that have had events helps prevent starvation.  */
3294   if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
3295     select_event_lwp (ptid, &lp, &status);
3296
3297   gdb_assert (lp != NULL);
3298
3299   /* Now that we've selected our final event LWP, un-adjust its PC if
3300      it was a software breakpoint, and we can't reliably support the
3301      "stopped by software breakpoint" stop reason.  */
3302   if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
3303       && !USE_SIGTRAP_SIGINFO)
3304     {
3305       struct regcache *regcache = get_thread_regcache (lp->ptid);
3306       struct gdbarch *gdbarch = get_regcache_arch (regcache);
3307       int decr_pc = gdbarch_decr_pc_after_break (gdbarch);
3308
3309       if (decr_pc != 0)
3310         {
3311           CORE_ADDR pc;
3312
3313           pc = regcache_read_pc (regcache);
3314           regcache_write_pc (regcache, pc + decr_pc);
3315         }
3316     }
3317
3318   /* We'll need this to determine whether to report a SIGSTOP as
3319      GDB_SIGNAL_0.  Need to take a copy because resume_clear_callback
3320      clears it.  */
3321   last_resume_kind = lp->last_resume_kind;
3322
3323   if (!target_is_non_stop_p ())
3324     {
3325       /* In all-stop, from the core's perspective, all LWPs are now
3326          stopped until a new resume action is sent over.  */
3327       iterate_over_lwps (minus_one_ptid, resume_clear_callback, NULL);
3328     }
3329   else
3330     {
3331       resume_clear_callback (lp, NULL);
3332     }
3333
3334   if (linux_nat_status_is_event (status))
3335     {
3336       if (debug_linux_nat)
3337         fprintf_unfiltered (gdb_stdlog,
3338                             "LLW: trap ptid is %s.\n",
3339                             target_pid_to_str (lp->ptid));
3340     }
3341
3342   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
3343     {
3344       *ourstatus = lp->waitstatus;
3345       lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
3346     }
3347   else
3348     store_waitstatus (ourstatus, status);
3349
3350   if (debug_linux_nat)
3351     fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
3352
3353   restore_child_signals_mask (&prev_mask);
3354
3355   if (last_resume_kind == resume_stop
3356       && ourstatus->kind == TARGET_WAITKIND_STOPPED
3357       && WSTOPSIG (status) == SIGSTOP)
3358     {
3359       /* A thread that has been requested to stop by GDB with
3360          target_stop, and it stopped cleanly, so report as SIG0.  The
3361          use of SIGSTOP is an implementation detail.  */
3362       ourstatus->value.sig = GDB_SIGNAL_0;
3363     }
3364
3365   if (ourstatus->kind == TARGET_WAITKIND_EXITED
3366       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
3367     lp->core = -1;
3368   else
3369     lp->core = linux_common_core_of_thread (lp->ptid);
3370
3371   if (ourstatus->kind == TARGET_WAITKIND_EXITED)
3372     return filter_exit_event (lp, ourstatus);
3373
3374   return lp->ptid;
3375 }
3376
3377 /* Resume LWPs that are currently stopped without any pending status
3378    to report, but are resumed from the core's perspective.  */
3379
3380 static int
3381 resume_stopped_resumed_lwps (struct lwp_info *lp, void *data)
3382 {
3383   ptid_t *wait_ptid_p = (ptid_t *) data;
3384
3385   if (!lp->stopped)
3386     {
3387       if (debug_linux_nat)
3388         fprintf_unfiltered (gdb_stdlog,
3389                             "RSRL: NOT resuming LWP %s, not stopped\n",
3390                             target_pid_to_str (lp->ptid));
3391     }
3392   else if (!lp->resumed)
3393     {
3394       if (debug_linux_nat)
3395         fprintf_unfiltered (gdb_stdlog,
3396                             "RSRL: NOT resuming LWP %s, not resumed\n",
3397                             target_pid_to_str (lp->ptid));
3398     }
3399   else if (lwp_status_pending_p (lp))
3400     {
3401       if (debug_linux_nat)
3402         fprintf_unfiltered (gdb_stdlog,
3403                             "RSRL: NOT resuming LWP %s, has pending status\n",
3404                             target_pid_to_str (lp->ptid));
3405     }
3406   else
3407     {
3408       struct regcache *regcache = get_thread_regcache (lp->ptid);
3409       struct gdbarch *gdbarch = get_regcache_arch (regcache);
3410
3411       TRY
3412         {
3413           CORE_ADDR pc = regcache_read_pc (regcache);
3414           int leave_stopped = 0;
3415
3416           /* Don't bother if there's a breakpoint at PC that we'd hit
3417              immediately, and we're not waiting for this LWP.  */
3418           if (!ptid_match (lp->ptid, *wait_ptid_p))
3419             {
3420               if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
3421                 leave_stopped = 1;
3422             }
3423
3424           if (!leave_stopped)
3425             {
3426               if (debug_linux_nat)
3427                 fprintf_unfiltered (gdb_stdlog,
3428                                     "RSRL: resuming stopped-resumed LWP %s at "
3429                                     "%s: step=%d\n",
3430                                     target_pid_to_str (lp->ptid),
3431                                     paddress (gdbarch, pc),
3432                                     lp->step);
3433
3434               linux_resume_one_lwp_throw (lp, lp->step, GDB_SIGNAL_0);
3435             }
3436         }
3437       CATCH (ex, RETURN_MASK_ERROR)
3438         {
3439           if (!check_ptrace_stopped_lwp_gone (lp))
3440             throw_exception (ex);
3441         }
3442       END_CATCH
3443     }
3444
3445   return 0;
3446 }
3447
3448 static ptid_t
3449 linux_nat_wait (struct target_ops *ops,
3450                 ptid_t ptid, struct target_waitstatus *ourstatus,
3451                 int target_options)
3452 {
3453   ptid_t event_ptid;
3454
3455   if (debug_linux_nat)
3456     {
3457       char *options_string;
3458
3459       options_string = target_options_to_string (target_options);
3460       fprintf_unfiltered (gdb_stdlog,
3461                           "linux_nat_wait: [%s], [%s]\n",
3462                           target_pid_to_str (ptid),
3463                           options_string);
3464       xfree (options_string);
3465     }
3466
3467   /* Flush the async file first.  */
3468   if (target_is_async_p ())
3469     async_file_flush ();
3470
3471   /* Resume LWPs that are currently stopped without any pending status
3472      to report, but are resumed from the core's perspective.  LWPs get
3473      in this state if we find them stopping at a time we're not
3474      interested in reporting the event (target_wait on a
3475      specific_process, for example, see linux_nat_wait_1), and
3476      meanwhile the event became uninteresting.  Don't bother resuming
3477      LWPs we're not going to wait for if they'd stop immediately.  */
3478   if (target_is_non_stop_p ())
3479     iterate_over_lwps (minus_one_ptid, resume_stopped_resumed_lwps, &ptid);
3480
3481   event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus, target_options);
3482
3483   /* If we requested any event, and something came out, assume there
3484      may be more.  If we requested a specific lwp or process, also
3485      assume there may be more.  */
3486   if (target_is_async_p ()
3487       && ((ourstatus->kind != TARGET_WAITKIND_IGNORE
3488            && ourstatus->kind != TARGET_WAITKIND_NO_RESUMED)
3489           || !ptid_equal (ptid, minus_one_ptid)))
3490     async_file_mark ();
3491
3492   return event_ptid;
3493 }
3494
3495 /* Kill one LWP.  */
3496
3497 static void
3498 kill_one_lwp (pid_t pid)
3499 {
3500   /* PTRACE_KILL may resume the inferior.  Send SIGKILL first.  */
3501
3502   errno = 0;
3503   kill_lwp (pid, SIGKILL);
3504   if (debug_linux_nat)
3505     {
3506       int save_errno = errno;
3507
3508       fprintf_unfiltered (gdb_stdlog,
3509                           "KC:  kill (SIGKILL) %ld, 0, 0 (%s)\n", (long) pid,
3510                           save_errno ? safe_strerror (save_errno) : "OK");
3511     }
3512
3513   /* Some kernels ignore even SIGKILL for processes under ptrace.  */
3514
3515   errno = 0;
3516   ptrace (PTRACE_KILL, pid, 0, 0);
3517   if (debug_linux_nat)
3518     {
3519       int save_errno = errno;
3520
3521       fprintf_unfiltered (gdb_stdlog,
3522                           "KC:  PTRACE_KILL %ld, 0, 0 (%s)\n", (long) pid,
3523                           save_errno ? safe_strerror (save_errno) : "OK");
3524     }
3525 }
3526
3527 /* Wait for an LWP to die.  */
3528
3529 static void
3530 kill_wait_one_lwp (pid_t pid)
3531 {
3532   pid_t res;
3533
3534   /* We must make sure that there are no pending events (delayed
3535      SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
3536      program doesn't interfere with any following debugging session.  */
3537
3538   do
3539     {
3540       res = my_waitpid (pid, NULL, __WALL);
3541       if (res != (pid_t) -1)
3542         {
3543           if (debug_linux_nat)
3544             fprintf_unfiltered (gdb_stdlog,
3545                                 "KWC: wait %ld received unknown.\n",
3546                                 (long) pid);
3547           /* The Linux kernel sometimes fails to kill a thread
3548              completely after PTRACE_KILL; that goes from the stop
3549              point in do_fork out to the one in get_signal_to_deliver
3550              and waits again.  So kill it again.  */
3551           kill_one_lwp (pid);
3552         }
3553     }
3554   while (res == pid);
3555
3556   gdb_assert (res == -1 && errno == ECHILD);
3557 }
3558
3559 /* Callback for iterate_over_lwps.  */
3560
3561 static int
3562 kill_callback (struct lwp_info *lp, void *data)
3563 {
3564   kill_one_lwp (ptid_get_lwp (lp->ptid));
3565   return 0;
3566 }
3567
3568 /* Callback for iterate_over_lwps.  */
3569
3570 static int
3571 kill_wait_callback (struct lwp_info *lp, void *data)
3572 {
3573   kill_wait_one_lwp (ptid_get_lwp (lp->ptid));
3574   return 0;
3575 }
3576
3577 /* Kill the fork children of any threads of inferior INF that are
3578    stopped at a fork event.  */
3579
3580 static void
3581 kill_unfollowed_fork_children (struct inferior *inf)
3582 {
3583   struct thread_info *thread;
3584
3585   ALL_NON_EXITED_THREADS (thread)
3586     if (thread->inf == inf)
3587       {
3588         struct target_waitstatus *ws = &thread->pending_follow;
3589
3590         if (ws->kind == TARGET_WAITKIND_FORKED
3591             || ws->kind == TARGET_WAITKIND_VFORKED)
3592           {
3593             ptid_t child_ptid = ws->value.related_pid;
3594             int child_pid = ptid_get_pid (child_ptid);
3595             int child_lwp = ptid_get_lwp (child_ptid);
3596
3597             kill_one_lwp (child_lwp);
3598             kill_wait_one_lwp (child_lwp);
3599
3600             /* Let the arch-specific native code know this process is
3601                gone.  */
3602             linux_nat_forget_process (child_pid);
3603           }
3604       }
3605 }
3606
3607 static void
3608 linux_nat_kill (struct target_ops *ops)
3609 {
3610   /* If we're stopped while forking and we haven't followed yet,
3611      kill the other task.  We need to do this first because the
3612      parent will be sleeping if this is a vfork.  */
3613   kill_unfollowed_fork_children (current_inferior ());
3614
3615   if (forks_exist_p ())
3616     linux_fork_killall ();
3617   else
3618     {
3619       ptid_t ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
3620
3621       /* Stop all threads before killing them, since ptrace requires
3622          that the thread is stopped to sucessfully PTRACE_KILL.  */
3623       iterate_over_lwps (ptid, stop_callback, NULL);
3624       /* ... and wait until all of them have reported back that
3625          they're no longer running.  */
3626       iterate_over_lwps (ptid, stop_wait_callback, NULL);
3627
3628       /* Kill all LWP's ...  */
3629       iterate_over_lwps (ptid, kill_callback, NULL);
3630
3631       /* ... and wait until we've flushed all events.  */
3632       iterate_over_lwps (ptid, kill_wait_callback, NULL);
3633     }
3634
3635   target_mourn_inferior ();
3636 }
3637
3638 static void
3639 linux_nat_mourn_inferior (struct target_ops *ops)
3640 {
3641   int pid = ptid_get_pid (inferior_ptid);
3642
3643   purge_lwp_list (pid);
3644
3645   if (! forks_exist_p ())
3646     /* Normal case, no other forks available.  */
3647     linux_ops->to_mourn_inferior (ops);
3648   else
3649     /* Multi-fork case.  The current inferior_ptid has exited, but
3650        there are other viable forks to debug.  Delete the exiting
3651        one and context-switch to the first available.  */
3652     linux_fork_mourn_inferior ();
3653
3654   /* Let the arch-specific native code know this process is gone.  */
3655   linux_nat_forget_process (pid);
3656 }
3657
3658 /* Convert a native/host siginfo object, into/from the siginfo in the
3659    layout of the inferiors' architecture.  */
3660
3661 static void
3662 siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
3663 {
3664   int done = 0;
3665
3666   if (linux_nat_siginfo_fixup != NULL)
3667     done = linux_nat_siginfo_fixup (siginfo, inf_siginfo, direction);
3668
3669   /* If there was no callback, or the callback didn't do anything,
3670      then just do a straight memcpy.  */
3671   if (!done)
3672     {
3673       if (direction == 1)
3674         memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
3675       else
3676         memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
3677     }
3678 }
3679
3680 static enum target_xfer_status
3681 linux_xfer_siginfo (struct target_ops *ops, enum target_object object,
3682                     const char *annex, gdb_byte *readbuf,
3683                     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
3684                     ULONGEST *xfered_len)
3685 {
3686   int pid;
3687   siginfo_t siginfo;
3688   gdb_byte inf_siginfo[sizeof (siginfo_t)];
3689
3690   gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
3691   gdb_assert (readbuf || writebuf);
3692
3693   pid = ptid_get_lwp (inferior_ptid);
3694   if (pid == 0)
3695     pid = ptid_get_pid (inferior_ptid);
3696
3697   if (offset > sizeof (siginfo))
3698     return TARGET_XFER_E_IO;
3699
3700   errno = 0;
3701   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3702   if (errno != 0)
3703     return TARGET_XFER_E_IO;
3704
3705   /* When GDB is built as a 64-bit application, ptrace writes into
3706      SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
3707      inferior with a 64-bit GDB should look the same as debugging it
3708      with a 32-bit GDB, we need to convert it.  GDB core always sees
3709      the converted layout, so any read/write will have to be done
3710      post-conversion.  */
3711   siginfo_fixup (&siginfo, inf_siginfo, 0);
3712
3713   if (offset + len > sizeof (siginfo))
3714     len = sizeof (siginfo) - offset;
3715
3716   if (readbuf != NULL)
3717     memcpy (readbuf, inf_siginfo + offset, len);
3718   else
3719     {
3720       memcpy (inf_siginfo + offset, writebuf, len);
3721
3722       /* Convert back to ptrace layout before flushing it out.  */
3723       siginfo_fixup (&siginfo, inf_siginfo, 1);
3724
3725       errno = 0;
3726       ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3727       if (errno != 0)
3728         return TARGET_XFER_E_IO;
3729     }
3730
3731   *xfered_len = len;
3732   return TARGET_XFER_OK;
3733 }
3734
3735 static enum target_xfer_status
3736 linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
3737                         const char *annex, gdb_byte *readbuf,
3738                         const gdb_byte *writebuf,
3739                         ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
3740 {
3741   struct cleanup *old_chain;
3742   enum target_xfer_status xfer;
3743
3744   if (object == TARGET_OBJECT_SIGNAL_INFO)
3745     return linux_xfer_siginfo (ops, object, annex, readbuf, writebuf,
3746                                offset, len, xfered_len);
3747
3748   /* The target is connected but no live inferior is selected.  Pass
3749      this request down to a lower stratum (e.g., the executable
3750      file).  */
3751   if (object == TARGET_OBJECT_MEMORY && ptid_equal (inferior_ptid, null_ptid))
3752     return TARGET_XFER_EOF;
3753
3754   old_chain = save_inferior_ptid ();
3755
3756   if (ptid_lwp_p (inferior_ptid))
3757     inferior_ptid = pid_to_ptid (ptid_get_lwp (inferior_ptid));
3758
3759   xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
3760                                      offset, len, xfered_len);
3761
3762   do_cleanups (old_chain);
3763   return xfer;
3764 }
3765
3766 static int
3767 linux_nat_thread_alive (struct target_ops *ops, ptid_t ptid)
3768 {
3769   /* As long as a PTID is in lwp list, consider it alive.  */
3770   return find_lwp_pid (ptid) != NULL;
3771 }
3772
3773 /* Implement the to_update_thread_list target method for this
3774    target.  */
3775
3776 static void
3777 linux_nat_update_thread_list (struct target_ops *ops)
3778 {
3779   struct lwp_info *lwp;
3780
3781   /* We add/delete threads from the list as clone/exit events are
3782      processed, so just try deleting exited threads still in the
3783      thread list.  */
3784   delete_exited_threads ();
3785
3786   /* Update the processor core that each lwp/thread was last seen
3787      running on.  */
3788   ALL_LWPS (lwp)
3789     {
3790       /* Avoid accessing /proc if the thread hasn't run since we last
3791          time we fetched the thread's core.  Accessing /proc becomes
3792          noticeably expensive when we have thousands of LWPs.  */
3793       if (lwp->core == -1)
3794         lwp->core = linux_common_core_of_thread (lwp->ptid);
3795     }
3796 }
3797
3798 static char *
3799 linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
3800 {
3801   static char buf[64];
3802
3803   if (ptid_lwp_p (ptid)
3804       && (ptid_get_pid (ptid) != ptid_get_lwp (ptid)
3805           || num_lwps (ptid_get_pid (ptid)) > 1))
3806     {
3807       snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
3808       return buf;
3809     }
3810
3811   return normal_pid_to_str (ptid);
3812 }
3813
3814 static const char *
3815 linux_nat_thread_name (struct target_ops *self, struct thread_info *thr)
3816 {
3817   return linux_proc_tid_get_name (thr->ptid);
3818 }
3819
3820 /* Accepts an integer PID; Returns a string representing a file that
3821    can be opened to get the symbols for the child process.  */
3822
3823 static char *
3824 linux_child_pid_to_exec_file (struct target_ops *self, int pid)
3825 {
3826   return linux_proc_pid_to_exec_file (pid);
3827 }
3828
3829 /* Implement the to_xfer_partial interface for memory reads using the /proc
3830    filesystem.  Because we can use a single read() call for /proc, this
3831    can be much more efficient than banging away at PTRACE_PEEKTEXT,
3832    but it doesn't support writes.  */
3833
3834 static enum target_xfer_status
3835 linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3836                          const char *annex, gdb_byte *readbuf,
3837                          const gdb_byte *writebuf,
3838                          ULONGEST offset, LONGEST len, ULONGEST *xfered_len)
3839 {
3840   LONGEST ret;
3841   int fd;
3842   char filename[64];
3843
3844   if (object != TARGET_OBJECT_MEMORY || !readbuf)
3845     return TARGET_XFER_EOF;
3846
3847   /* Don't bother for one word.  */
3848   if (len < 3 * sizeof (long))
3849     return TARGET_XFER_EOF;
3850
3851   /* We could keep this file open and cache it - possibly one per
3852      thread.  That requires some juggling, but is even faster.  */
3853   xsnprintf (filename, sizeof filename, "/proc/%d/mem",
3854              ptid_get_pid (inferior_ptid));
3855   fd = gdb_open_cloexec (filename, O_RDONLY | O_LARGEFILE, 0);
3856   if (fd == -1)
3857     return TARGET_XFER_EOF;
3858
3859   /* If pread64 is available, use it.  It's faster if the kernel
3860      supports it (only one syscall), and it's 64-bit safe even on
3861      32-bit platforms (for instance, SPARC debugging a SPARC64
3862      application).  */
3863 #ifdef HAVE_PREAD64
3864   if (pread64 (fd, readbuf, len, offset) != len)
3865 #else
3866   if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
3867 #endif
3868     ret = 0;
3869   else
3870     ret = len;
3871
3872   close (fd);
3873
3874   if (ret == 0)
3875     return TARGET_XFER_EOF;
3876   else
3877     {
3878       *xfered_len = ret;
3879       return TARGET_XFER_OK;
3880     }
3881 }
3882
3883
3884 /* Enumerate spufs IDs for process PID.  */
3885 static LONGEST
3886 spu_enumerate_spu_ids (int pid, gdb_byte *buf, ULONGEST offset, ULONGEST len)
3887 {
3888   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
3889   LONGEST pos = 0;
3890   LONGEST written = 0;
3891   char path[128];
3892   DIR *dir;
3893   struct dirent *entry;
3894
3895   xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
3896   dir = opendir (path);
3897   if (!dir)
3898     return -1;
3899
3900   rewinddir (dir);
3901   while ((entry = readdir (dir)) != NULL)
3902     {
3903       struct stat st;
3904       struct statfs stfs;
3905       int fd;
3906
3907       fd = atoi (entry->d_name);
3908       if (!fd)
3909         continue;
3910
3911       xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
3912       if (stat (path, &st) != 0)
3913         continue;
3914       if (!S_ISDIR (st.st_mode))
3915         continue;
3916
3917       if (statfs (path, &stfs) != 0)
3918         continue;
3919       if (stfs.f_type != SPUFS_MAGIC)
3920         continue;
3921
3922       if (pos >= offset && pos + 4 <= offset + len)
3923         {
3924           store_unsigned_integer (buf + pos - offset, 4, byte_order, fd);
3925           written += 4;
3926         }
3927       pos += 4;
3928     }
3929
3930   closedir (dir);
3931   return written;
3932 }
3933
3934 /* Implement the to_xfer_partial interface for the TARGET_OBJECT_SPU
3935    object type, using the /proc file system.  */
3936
3937 static enum target_xfer_status
3938 linux_proc_xfer_spu (struct target_ops *ops, enum target_object object,
3939                      const char *annex, gdb_byte *readbuf,
3940                      const gdb_byte *writebuf,
3941                      ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
3942 {
3943   char buf[128];
3944   int fd = 0;
3945   int ret = -1;
3946   int pid = ptid_get_pid (inferior_ptid);
3947
3948   if (!annex)
3949     {
3950       if (!readbuf)
3951         return TARGET_XFER_E_IO;
3952       else
3953         {
3954           LONGEST l = spu_enumerate_spu_ids (pid, readbuf, offset, len);
3955
3956           if (l < 0)
3957             return TARGET_XFER_E_IO;
3958           else if (l == 0)
3959             return TARGET_XFER_EOF;
3960           else
3961             {
3962               *xfered_len = (ULONGEST) l;
3963               return TARGET_XFER_OK;
3964             }
3965         }
3966     }
3967
3968   xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
3969   fd = gdb_open_cloexec (buf, writebuf? O_WRONLY : O_RDONLY, 0);
3970   if (fd <= 0)
3971     return TARGET_XFER_E_IO;
3972
3973   if (offset != 0
3974       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
3975     {
3976       close (fd);
3977       return TARGET_XFER_EOF;
3978     }
3979
3980   if (writebuf)
3981     ret = write (fd, writebuf, (size_t) len);
3982   else if (readbuf)
3983     ret = read (fd, readbuf, (size_t) len);
3984
3985   close (fd);
3986
3987   if (ret < 0)
3988     return TARGET_XFER_E_IO;
3989   else if (ret == 0)
3990     return TARGET_XFER_EOF;
3991   else
3992     {
3993       *xfered_len = (ULONGEST) ret;
3994       return TARGET_XFER_OK;
3995     }
3996 }
3997
3998
3999 /* Parse LINE as a signal set and add its set bits to SIGS.  */
4000
4001 static void
4002 add_line_to_sigset (const char *line, sigset_t *sigs)
4003 {
4004   int len = strlen (line) - 1;
4005   const char *p;
4006   int signum;
4007
4008   if (line[len] != '\n')
4009     error (_("Could not parse signal set: %s"), line);
4010
4011   p = line;
4012   signum = len * 4;
4013   while (len-- > 0)
4014     {
4015       int digit;
4016
4017       if (*p >= '0' && *p <= '9')
4018         digit = *p - '0';
4019       else if (*p >= 'a' && *p <= 'f')
4020         digit = *p - 'a' + 10;
4021       else
4022         error (_("Could not parse signal set: %s"), line);
4023
4024       signum -= 4;
4025
4026       if (digit & 1)
4027         sigaddset (sigs, signum + 1);
4028       if (digit & 2)
4029         sigaddset (sigs, signum + 2);
4030       if (digit & 4)
4031         sigaddset (sigs, signum + 3);
4032       if (digit & 8)
4033         sigaddset (sigs, signum + 4);
4034
4035       p++;
4036     }
4037 }
4038
4039 /* Find process PID's pending signals from /proc/pid/status and set
4040    SIGS to match.  */
4041
4042 void
4043 linux_proc_pending_signals (int pid, sigset_t *pending,
4044                             sigset_t *blocked, sigset_t *ignored)
4045 {
4046   FILE *procfile;
4047   char buffer[PATH_MAX], fname[PATH_MAX];
4048   struct cleanup *cleanup;
4049
4050   sigemptyset (pending);
4051   sigemptyset (blocked);
4052   sigemptyset (ignored);
4053   xsnprintf (fname, sizeof fname, "/proc/%d/status", pid);
4054   procfile = gdb_fopen_cloexec (fname, "r");
4055   if (procfile == NULL)
4056     error (_("Could not open %s"), fname);
4057   cleanup = make_cleanup_fclose (procfile);
4058
4059   while (fgets (buffer, PATH_MAX, procfile) != NULL)
4060     {
4061       /* Normal queued signals are on the SigPnd line in the status
4062          file.  However, 2.6 kernels also have a "shared" pending
4063          queue for delivering signals to a thread group, so check for
4064          a ShdPnd line also.
4065
4066          Unfortunately some Red Hat kernels include the shared pending
4067          queue but not the ShdPnd status field.  */
4068
4069       if (startswith (buffer, "SigPnd:\t"))
4070         add_line_to_sigset (buffer + 8, pending);
4071       else if (startswith (buffer, "ShdPnd:\t"))
4072         add_line_to_sigset (buffer + 8, pending);
4073       else if (startswith (buffer, "SigBlk:\t"))
4074         add_line_to_sigset (buffer + 8, blocked);
4075       else if (startswith (buffer, "SigIgn:\t"))
4076         add_line_to_sigset (buffer + 8, ignored);
4077     }
4078
4079   do_cleanups (cleanup);
4080 }
4081
4082 static enum target_xfer_status
4083 linux_nat_xfer_osdata (struct target_ops *ops, enum target_object object,
4084                        const char *annex, gdb_byte *readbuf,
4085                        const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
4086                        ULONGEST *xfered_len)
4087 {
4088   gdb_assert (object == TARGET_OBJECT_OSDATA);
4089
4090   *xfered_len = linux_common_xfer_osdata (annex, readbuf, offset, len);
4091   if (*xfered_len == 0)
4092     return TARGET_XFER_EOF;
4093   else
4094     return TARGET_XFER_OK;
4095 }
4096
4097 static enum target_xfer_status
4098 linux_xfer_partial (struct target_ops *ops, enum target_object object,
4099                     const char *annex, gdb_byte *readbuf,
4100                     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
4101                     ULONGEST *xfered_len)
4102 {
4103   enum target_xfer_status xfer;
4104
4105   if (object == TARGET_OBJECT_AUXV)
4106     return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
4107                              offset, len, xfered_len);
4108
4109   if (object == TARGET_OBJECT_OSDATA)
4110     return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
4111                                   offset, len, xfered_len);
4112
4113   if (object == TARGET_OBJECT_SPU)
4114     return linux_proc_xfer_spu (ops, object, annex, readbuf, writebuf,
4115                                 offset, len, xfered_len);
4116
4117   /* GDB calculates all the addresses in possibly larget width of the address.
4118      Address width needs to be masked before its final use - either by
4119      linux_proc_xfer_partial or inf_ptrace_xfer_partial.
4120
4121      Compare ADDR_BIT first to avoid a compiler warning on shift overflow.  */
4122
4123   if (object == TARGET_OBJECT_MEMORY)
4124     {
4125       int addr_bit = gdbarch_addr_bit (target_gdbarch ());
4126
4127       if (addr_bit < (sizeof (ULONGEST) * HOST_CHAR_BIT))
4128         offset &= ((ULONGEST) 1 << addr_bit) - 1;
4129     }
4130
4131   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
4132                                   offset, len, xfered_len);
4133   if (xfer != TARGET_XFER_EOF)
4134     return xfer;
4135
4136   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
4137                              offset, len, xfered_len);
4138 }
4139
4140 static void
4141 cleanup_target_stop (void *arg)
4142 {
4143   ptid_t *ptid = (ptid_t *) arg;
4144
4145   gdb_assert (arg != NULL);
4146
4147   /* Unpause all */
4148   target_resume (*ptid, 0, GDB_SIGNAL_0);
4149 }
4150
4151 static VEC(static_tracepoint_marker_p) *
4152 linux_child_static_tracepoint_markers_by_strid (struct target_ops *self,
4153                                                 const char *strid)
4154 {
4155   char s[IPA_CMD_BUF_SIZE];
4156   struct cleanup *old_chain;
4157   int pid = ptid_get_pid (inferior_ptid);
4158   VEC(static_tracepoint_marker_p) *markers = NULL;
4159   struct static_tracepoint_marker *marker = NULL;
4160   char *p = s;
4161   ptid_t ptid = ptid_build (pid, 0, 0);
4162
4163   /* Pause all */
4164   target_stop (ptid);
4165
4166   memcpy (s, "qTfSTM", sizeof ("qTfSTM"));
4167   s[sizeof ("qTfSTM")] = 0;
4168
4169   agent_run_command (pid, s, strlen (s) + 1);
4170
4171   old_chain = make_cleanup (free_current_marker, &marker);
4172   make_cleanup (cleanup_target_stop, &ptid);
4173
4174   while (*p++ == 'm')
4175     {
4176       if (marker == NULL)
4177         marker = XCNEW (struct static_tracepoint_marker);
4178
4179       do
4180         {
4181           parse_static_tracepoint_marker_definition (p, &p, marker);
4182
4183           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
4184             {
4185               VEC_safe_push (static_tracepoint_marker_p,
4186                              markers, marker);
4187               marker = NULL;
4188             }
4189           else
4190             {
4191               release_static_tracepoint_marker (marker);
4192               memset (marker, 0, sizeof (*marker));
4193             }
4194         }
4195       while (*p++ == ',');      /* comma-separated list */
4196
4197       memcpy (s, "qTsSTM", sizeof ("qTsSTM"));
4198       s[sizeof ("qTsSTM")] = 0;
4199       agent_run_command (pid, s, strlen (s) + 1);
4200       p = s;
4201     }
4202
4203   do_cleanups (old_chain);
4204
4205   return markers;
4206 }
4207
4208 /* Create a prototype generic GNU/Linux target.  The client can override
4209    it with local methods.  */
4210
4211 static void
4212 linux_target_install_ops (struct target_ops *t)
4213 {
4214   t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
4215   t->to_remove_fork_catchpoint = linux_child_remove_fork_catchpoint;
4216   t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
4217   t->to_remove_vfork_catchpoint = linux_child_remove_vfork_catchpoint;
4218   t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
4219   t->to_remove_exec_catchpoint = linux_child_remove_exec_catchpoint;
4220   t->to_set_syscall_catchpoint = linux_child_set_syscall_catchpoint;
4221   t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
4222   t->to_post_startup_inferior = linux_child_post_startup_inferior;
4223   t->to_post_attach = linux_child_post_attach;
4224   t->to_follow_fork = linux_child_follow_fork;
4225
4226   super_xfer_partial = t->to_xfer_partial;
4227   t->to_xfer_partial = linux_xfer_partial;
4228
4229   t->to_static_tracepoint_markers_by_strid
4230     = linux_child_static_tracepoint_markers_by_strid;
4231 }
4232
4233 struct target_ops *
4234 linux_target (void)
4235 {
4236   struct target_ops *t;
4237
4238   t = inf_ptrace_target ();
4239   linux_target_install_ops (t);
4240
4241   return t;
4242 }
4243
4244 struct target_ops *
4245 linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
4246 {
4247   struct target_ops *t;
4248
4249   t = inf_ptrace_trad_target (register_u_offset);
4250   linux_target_install_ops (t);
4251
4252   return t;
4253 }
4254
4255 /* target_is_async_p implementation.  */
4256
4257 static int
4258 linux_nat_is_async_p (struct target_ops *ops)
4259 {
4260   return linux_is_async_p ();
4261 }
4262
4263 /* target_can_async_p implementation.  */
4264
4265 static int
4266 linux_nat_can_async_p (struct target_ops *ops)
4267 {
4268   /* NOTE: palves 2008-03-21: We're only async when the user requests
4269      it explicitly with the "set target-async" command.
4270      Someday, linux will always be async.  */
4271   return target_async_permitted;
4272 }
4273
4274 static int
4275 linux_nat_supports_non_stop (struct target_ops *self)
4276 {
4277   return 1;
4278 }
4279
4280 /* to_always_non_stop_p implementation.  */
4281
4282 static int
4283 linux_nat_always_non_stop_p (struct target_ops *self)
4284 {
4285   return 1;
4286 }
4287
4288 /* True if we want to support multi-process.  To be removed when GDB
4289    supports multi-exec.  */
4290
4291 int linux_multi_process = 1;
4292
4293 static int
4294 linux_nat_supports_multi_process (struct target_ops *self)
4295 {
4296   return linux_multi_process;
4297 }
4298
4299 static int
4300 linux_nat_supports_disable_randomization (struct target_ops *self)
4301 {
4302 #ifdef HAVE_PERSONALITY
4303   return 1;
4304 #else
4305   return 0;
4306 #endif
4307 }
4308
4309 static int async_terminal_is_ours = 1;
4310
4311 /* target_terminal_inferior implementation.
4312
4313    This is a wrapper around child_terminal_inferior to add async support.  */
4314
4315 static void
4316 linux_nat_terminal_inferior (struct target_ops *self)
4317 {
4318   child_terminal_inferior (self);
4319
4320   /* Calls to target_terminal_*() are meant to be idempotent.  */
4321   if (!async_terminal_is_ours)
4322     return;
4323
4324   delete_file_handler (input_fd);
4325   async_terminal_is_ours = 0;
4326   set_sigint_trap ();
4327 }
4328
4329 /* target_terminal_ours implementation.
4330
4331    This is a wrapper around child_terminal_ours to add async support (and
4332    implement the target_terminal_ours vs target_terminal_ours_for_output
4333    distinction).  child_terminal_ours is currently no different than
4334    child_terminal_ours_for_output.
4335    We leave target_terminal_ours_for_output alone, leaving it to
4336    child_terminal_ours_for_output.  */
4337
4338 static void
4339 linux_nat_terminal_ours (struct target_ops *self)
4340 {
4341   /* GDB should never give the terminal to the inferior if the
4342      inferior is running in the background (run&, continue&, etc.),
4343      but claiming it sure should.  */
4344   child_terminal_ours (self);
4345
4346   if (async_terminal_is_ours)
4347     return;
4348
4349   clear_sigint_trap ();
4350   add_file_handler (input_fd, stdin_event_handler, 0);
4351   async_terminal_is_ours = 1;
4352 }
4353
4354 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
4355    so we notice when any child changes state, and notify the
4356    event-loop; it allows us to use sigsuspend in linux_nat_wait_1
4357    above to wait for the arrival of a SIGCHLD.  */
4358
4359 static void
4360 sigchld_handler (int signo)
4361 {
4362   int old_errno = errno;
4363
4364   if (debug_linux_nat)
4365     ui_file_write_async_safe (gdb_stdlog,
4366                               "sigchld\n", sizeof ("sigchld\n") - 1);
4367
4368   if (signo == SIGCHLD
4369       && linux_nat_event_pipe[0] != -1)
4370     async_file_mark (); /* Let the event loop know that there are
4371                            events to handle.  */
4372
4373   errno = old_errno;
4374 }
4375
4376 /* Callback registered with the target events file descriptor.  */
4377
4378 static void
4379 handle_target_event (int error, gdb_client_data client_data)
4380 {
4381   inferior_event_handler (INF_REG_EVENT, NULL);
4382 }
4383
4384 /* Create/destroy the target events pipe.  Returns previous state.  */
4385
4386 static int
4387 linux_async_pipe (int enable)
4388 {
4389   int previous = linux_is_async_p ();
4390
4391   if (previous != enable)
4392     {
4393       sigset_t prev_mask;
4394
4395       /* Block child signals while we create/destroy the pipe, as
4396          their handler writes to it.  */
4397       block_child_signals (&prev_mask);
4398
4399       if (enable)
4400         {
4401           if (gdb_pipe_cloexec (linux_nat_event_pipe) == -1)
4402             internal_error (__FILE__, __LINE__,
4403                             "creating event pipe failed.");
4404
4405           fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
4406           fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
4407         }
4408       else
4409         {
4410           close (linux_nat_event_pipe[0]);
4411           close (linux_nat_event_pipe[1]);
4412           linux_nat_event_pipe[0] = -1;
4413           linux_nat_event_pipe[1] = -1;
4414         }
4415
4416       restore_child_signals_mask (&prev_mask);
4417     }
4418
4419   return previous;
4420 }
4421
4422 /* target_async implementation.  */
4423
4424 static void
4425 linux_nat_async (struct target_ops *ops, int enable)
4426 {
4427   if (enable)
4428     {
4429       if (!linux_async_pipe (1))
4430         {
4431           add_file_handler (linux_nat_event_pipe[0],
4432                             handle_target_event, NULL);
4433           /* There may be pending events to handle.  Tell the event loop
4434              to poll them.  */
4435           async_file_mark ();
4436         }
4437     }
4438   else
4439     {
4440       delete_file_handler (linux_nat_event_pipe[0]);
4441       linux_async_pipe (0);
4442     }
4443   return;
4444 }
4445
4446 /* Stop an LWP, and push a GDB_SIGNAL_0 stop status if no other
4447    event came out.  */
4448
4449 static int
4450 linux_nat_stop_lwp (struct lwp_info *lwp, void *data)
4451 {
4452   if (!lwp->stopped)
4453     {
4454       if (debug_linux_nat)
4455         fprintf_unfiltered (gdb_stdlog,
4456                             "LNSL: running -> suspending %s\n",
4457                             target_pid_to_str (lwp->ptid));
4458
4459
4460       if (lwp->last_resume_kind == resume_stop)
4461         {
4462           if (debug_linux_nat)
4463             fprintf_unfiltered (gdb_stdlog,
4464                                 "linux-nat: already stopping LWP %ld at "
4465                                 "GDB's request\n",
4466                                 ptid_get_lwp (lwp->ptid));
4467           return 0;
4468         }
4469
4470       stop_callback (lwp, NULL);
4471       lwp->last_resume_kind = resume_stop;
4472     }
4473   else
4474     {
4475       /* Already known to be stopped; do nothing.  */
4476
4477       if (debug_linux_nat)
4478         {
4479           if (find_thread_ptid (lwp->ptid)->stop_requested)
4480             fprintf_unfiltered (gdb_stdlog,
4481                                 "LNSL: already stopped/stop_requested %s\n",
4482                                 target_pid_to_str (lwp->ptid));
4483           else
4484             fprintf_unfiltered (gdb_stdlog,
4485                                 "LNSL: already stopped/no "
4486                                 "stop_requested yet %s\n",
4487                                 target_pid_to_str (lwp->ptid));
4488         }
4489     }
4490   return 0;
4491 }
4492
4493 static void
4494 linux_nat_stop (struct target_ops *self, ptid_t ptid)
4495 {
4496   iterate_over_lwps (ptid, linux_nat_stop_lwp, NULL);
4497 }
4498
4499 static void
4500 linux_nat_close (struct target_ops *self)
4501 {
4502   /* Unregister from the event loop.  */
4503   if (linux_nat_is_async_p (self))
4504     linux_nat_async (self, 0);
4505
4506   if (linux_ops->to_close)
4507     linux_ops->to_close (linux_ops);
4508
4509   super_close (self);
4510 }
4511
4512 /* When requests are passed down from the linux-nat layer to the
4513    single threaded inf-ptrace layer, ptids of (lwpid,0,0) form are
4514    used.  The address space pointer is stored in the inferior object,
4515    but the common code that is passed such ptid can't tell whether
4516    lwpid is a "main" process id or not (it assumes so).  We reverse
4517    look up the "main" process id from the lwp here.  */
4518
4519 static struct address_space *
4520 linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
4521 {
4522   struct lwp_info *lwp;
4523   struct inferior *inf;
4524   int pid;
4525
4526   if (ptid_get_lwp (ptid) == 0)
4527     {
4528       /* An (lwpid,0,0) ptid.  Look up the lwp object to get at the
4529          tgid.  */
4530       lwp = find_lwp_pid (ptid);
4531       pid = ptid_get_pid (lwp->ptid);
4532     }
4533   else
4534     {
4535       /* A (pid,lwpid,0) ptid.  */
4536       pid = ptid_get_pid (ptid);
4537     }
4538
4539   inf = find_inferior_pid (pid);
4540   gdb_assert (inf != NULL);
4541   return inf->aspace;
4542 }
4543
4544 /* Return the cached value of the processor core for thread PTID.  */
4545
4546 static int
4547 linux_nat_core_of_thread (struct target_ops *ops, ptid_t ptid)
4548 {
4549   struct lwp_info *info = find_lwp_pid (ptid);
4550
4551   if (info)
4552     return info->core;
4553   return -1;
4554 }
4555
4556 /* Implementation of to_filesystem_is_local.  */
4557
4558 static int
4559 linux_nat_filesystem_is_local (struct target_ops *ops)
4560 {
4561   struct inferior *inf = current_inferior ();
4562
4563   if (inf->fake_pid_p || inf->pid == 0)
4564     return 1;
4565
4566   return linux_ns_same (inf->pid, LINUX_NS_MNT);
4567 }
4568
4569 /* Convert the INF argument passed to a to_fileio_* method
4570    to a process ID suitable for passing to its corresponding
4571    linux_mntns_* function.  If INF is non-NULL then the
4572    caller is requesting the filesystem seen by INF.  If INF
4573    is NULL then the caller is requesting the filesystem seen
4574    by the GDB.  We fall back to GDB's filesystem in the case
4575    that INF is non-NULL but its PID is unknown.  */
4576
4577 static pid_t
4578 linux_nat_fileio_pid_of (struct inferior *inf)
4579 {
4580   if (inf == NULL || inf->fake_pid_p || inf->pid == 0)
4581     return getpid ();
4582   else
4583     return inf->pid;
4584 }
4585
4586 /* Implementation of to_fileio_open.  */
4587
4588 static int
4589 linux_nat_fileio_open (struct target_ops *self,
4590                        struct inferior *inf, const char *filename,
4591                        int flags, int mode, int warn_if_slow,
4592                        int *target_errno)
4593 {
4594   int nat_flags;
4595   mode_t nat_mode;
4596   int fd;
4597
4598   if (fileio_to_host_openflags (flags, &nat_flags) == -1
4599       || fileio_to_host_mode (mode, &nat_mode) == -1)
4600     {
4601       *target_errno = FILEIO_EINVAL;
4602       return -1;
4603     }
4604
4605   fd = linux_mntns_open_cloexec (linux_nat_fileio_pid_of (inf),
4606                                  filename, nat_flags, nat_mode);
4607   if (fd == -1)
4608     *target_errno = host_to_fileio_error (errno);
4609
4610   return fd;
4611 }
4612
4613 /* Implementation of to_fileio_readlink.  */
4614
4615 static char *
4616 linux_nat_fileio_readlink (struct target_ops *self,
4617                            struct inferior *inf, const char *filename,
4618                            int *target_errno)
4619 {
4620   char buf[PATH_MAX];
4621   int len;
4622   char *ret;
4623
4624   len = linux_mntns_readlink (linux_nat_fileio_pid_of (inf),
4625                               filename, buf, sizeof (buf));
4626   if (len < 0)
4627     {
4628       *target_errno = host_to_fileio_error (errno);
4629       return NULL;
4630     }
4631
4632   ret = (char *) xmalloc (len + 1);
4633   memcpy (ret, buf, len);
4634   ret[len] = '\0';
4635   return ret;
4636 }
4637
4638 /* Implementation of to_fileio_unlink.  */
4639
4640 static int
4641 linux_nat_fileio_unlink (struct target_ops *self,
4642                          struct inferior *inf, const char *filename,
4643                          int *target_errno)
4644 {
4645   int ret;
4646
4647   ret = linux_mntns_unlink (linux_nat_fileio_pid_of (inf),
4648                             filename);
4649   if (ret == -1)
4650     *target_errno = host_to_fileio_error (errno);
4651
4652   return ret;
4653 }
4654
4655 /* Implementation of the to_thread_events method.  */
4656
4657 static void
4658 linux_nat_thread_events (struct target_ops *ops, int enable)
4659 {
4660   report_thread_events = enable;
4661 }
4662
4663 void
4664 linux_nat_add_target (struct target_ops *t)
4665 {
4666   /* Save the provided single-threaded target.  We save this in a separate
4667      variable because another target we've inherited from (e.g. inf-ptrace)
4668      may have saved a pointer to T; we want to use it for the final
4669      process stratum target.  */
4670   linux_ops_saved = *t;
4671   linux_ops = &linux_ops_saved;
4672
4673   /* Override some methods for multithreading.  */
4674   t->to_create_inferior = linux_nat_create_inferior;
4675   t->to_attach = linux_nat_attach;
4676   t->to_detach = linux_nat_detach;
4677   t->to_resume = linux_nat_resume;
4678   t->to_wait = linux_nat_wait;
4679   t->to_pass_signals = linux_nat_pass_signals;
4680   t->to_xfer_partial = linux_nat_xfer_partial;
4681   t->to_kill = linux_nat_kill;
4682   t->to_mourn_inferior = linux_nat_mourn_inferior;
4683   t->to_thread_alive = linux_nat_thread_alive;
4684   t->to_update_thread_list = linux_nat_update_thread_list;
4685   t->to_pid_to_str = linux_nat_pid_to_str;
4686   t->to_thread_name = linux_nat_thread_name;
4687   t->to_has_thread_control = tc_schedlock;
4688   t->to_thread_address_space = linux_nat_thread_address_space;
4689   t->to_stopped_by_watchpoint = linux_nat_stopped_by_watchpoint;
4690   t->to_stopped_data_address = linux_nat_stopped_data_address;
4691   t->to_stopped_by_sw_breakpoint = linux_nat_stopped_by_sw_breakpoint;
4692   t->to_supports_stopped_by_sw_breakpoint = linux_nat_supports_stopped_by_sw_breakpoint;
4693   t->to_stopped_by_hw_breakpoint = linux_nat_stopped_by_hw_breakpoint;
4694   t->to_supports_stopped_by_hw_breakpoint = linux_nat_supports_stopped_by_hw_breakpoint;
4695   t->to_thread_events = linux_nat_thread_events;
4696
4697   t->to_can_async_p = linux_nat_can_async_p;
4698   t->to_is_async_p = linux_nat_is_async_p;
4699   t->to_supports_non_stop = linux_nat_supports_non_stop;
4700   t->to_always_non_stop_p = linux_nat_always_non_stop_p;
4701   t->to_async = linux_nat_async;
4702   t->to_terminal_inferior = linux_nat_terminal_inferior;
4703   t->to_terminal_ours = linux_nat_terminal_ours;
4704
4705   super_close = t->to_close;
4706   t->to_close = linux_nat_close;
4707
4708   t->to_stop = linux_nat_stop;
4709
4710   t->to_supports_multi_process = linux_nat_supports_multi_process;
4711
4712   t->to_supports_disable_randomization
4713     = linux_nat_supports_disable_randomization;
4714
4715   t->to_core_of_thread = linux_nat_core_of_thread;
4716
4717   t->to_filesystem_is_local = linux_nat_filesystem_is_local;
4718   t->to_fileio_open = linux_nat_fileio_open;
4719   t->to_fileio_readlink = linux_nat_fileio_readlink;
4720   t->to_fileio_unlink = linux_nat_fileio_unlink;
4721
4722   /* We don't change the stratum; this target will sit at
4723      process_stratum and thread_db will set at thread_stratum.  This
4724      is a little strange, since this is a multi-threaded-capable
4725      target, but we want to be on the stack below thread_db, and we
4726      also want to be used for single-threaded processes.  */
4727
4728   add_target (t);
4729 }
4730
4731 /* Register a method to call whenever a new thread is attached.  */
4732 void
4733 linux_nat_set_new_thread (struct target_ops *t,
4734                           void (*new_thread) (struct lwp_info *))
4735 {
4736   /* Save the pointer.  We only support a single registered instance
4737      of the GNU/Linux native target, so we do not need to map this to
4738      T.  */
4739   linux_nat_new_thread = new_thread;
4740 }
4741
4742 /* See declaration in linux-nat.h.  */
4743
4744 void
4745 linux_nat_set_new_fork (struct target_ops *t,
4746                         linux_nat_new_fork_ftype *new_fork)
4747 {
4748   /* Save the pointer.  */
4749   linux_nat_new_fork = new_fork;
4750 }
4751
4752 /* See declaration in linux-nat.h.  */
4753
4754 void
4755 linux_nat_set_forget_process (struct target_ops *t,
4756                               linux_nat_forget_process_ftype *fn)
4757 {
4758   /* Save the pointer.  */
4759   linux_nat_forget_process_hook = fn;
4760 }
4761
4762 /* See declaration in linux-nat.h.  */
4763
4764 void
4765 linux_nat_forget_process (pid_t pid)
4766 {
4767   if (linux_nat_forget_process_hook != NULL)
4768     linux_nat_forget_process_hook (pid);
4769 }
4770
4771 /* Register a method that converts a siginfo object between the layout
4772    that ptrace returns, and the layout in the architecture of the
4773    inferior.  */
4774 void
4775 linux_nat_set_siginfo_fixup (struct target_ops *t,
4776                              int (*siginfo_fixup) (siginfo_t *,
4777                                                    gdb_byte *,
4778                                                    int))
4779 {
4780   /* Save the pointer.  */
4781   linux_nat_siginfo_fixup = siginfo_fixup;
4782 }
4783
4784 /* Register a method to call prior to resuming a thread.  */
4785
4786 void
4787 linux_nat_set_prepare_to_resume (struct target_ops *t,
4788                                  void (*prepare_to_resume) (struct lwp_info *))
4789 {
4790   /* Save the pointer.  */
4791   linux_nat_prepare_to_resume = prepare_to_resume;
4792 }
4793
4794 /* See linux-nat.h.  */
4795
4796 int
4797 linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo)
4798 {
4799   int pid;
4800
4801   pid = ptid_get_lwp (ptid);
4802   if (pid == 0)
4803     pid = ptid_get_pid (ptid);
4804
4805   errno = 0;
4806   ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, siginfo);
4807   if (errno != 0)
4808     {
4809       memset (siginfo, 0, sizeof (*siginfo));
4810       return 0;
4811     }
4812   return 1;
4813 }
4814
4815 /* See nat/linux-nat.h.  */
4816
4817 ptid_t
4818 current_lwp_ptid (void)
4819 {
4820   gdb_assert (ptid_lwp_p (inferior_ptid));
4821   return inferior_ptid;
4822 }
4823
4824 /* Provide a prototype to silence -Wmissing-prototypes.  */
4825 extern initialize_file_ftype _initialize_linux_nat;
4826
4827 void
4828 _initialize_linux_nat (void)
4829 {
4830   add_setshow_zuinteger_cmd ("lin-lwp", class_maintenance,
4831                              &debug_linux_nat, _("\
4832 Set debugging of GNU/Linux lwp module."), _("\
4833 Show debugging of GNU/Linux lwp module."), _("\
4834 Enables printf debugging output."),
4835                              NULL,
4836                              show_debug_linux_nat,
4837                              &setdebuglist, &showdebuglist);
4838
4839   add_setshow_boolean_cmd ("linux-namespaces", class_maintenance,
4840                            &debug_linux_namespaces, _("\
4841 Set debugging of GNU/Linux namespaces module."), _("\
4842 Show debugging of GNU/Linux namespaces module."), _("\
4843 Enables printf debugging output."),
4844                            NULL,
4845                            NULL,
4846                            &setdebuglist, &showdebuglist);
4847
4848   /* Save this mask as the default.  */
4849   sigprocmask (SIG_SETMASK, NULL, &normal_mask);
4850
4851   /* Install a SIGCHLD handler.  */
4852   sigchld_action.sa_handler = sigchld_handler;
4853   sigemptyset (&sigchld_action.sa_mask);
4854   sigchld_action.sa_flags = SA_RESTART;
4855
4856   /* Make it the default.  */
4857   sigaction (SIGCHLD, &sigchld_action, NULL);
4858
4859   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
4860   sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
4861   sigdelset (&suspend_mask, SIGCHLD);
4862
4863   sigemptyset (&blocked_mask);
4864 }
4865 \f
4866
4867 /* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
4868    the GNU/Linux Threads library and therefore doesn't really belong
4869    here.  */
4870
4871 /* Return the set of signals used by the threads library in *SET.  */
4872
4873 void
4874 lin_thread_get_thread_signals (sigset_t *set)
4875 {
4876   sigemptyset (set);
4877
4878   /* NPTL reserves the first two RT signals, but does not provide any
4879      way for the debugger to query the signal numbers - fortunately
4880      they don't change.  */
4881   sigaddset (set, __SIGRTMIN);
4882   sigaddset (set, __SIGRTMIN + 1);
4883 }