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