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