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