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