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