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