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