2011-01-05 Michael Snyder <msnyder@vmware.com>
[deliverable/binutils-gdb.git] / gdb / linux-nat.c
CommitLineData
3993f6b1 1/* GNU/Linux native-dependent code common to multiple platforms.
dba24537 2
7b6bb8da
JB
3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4 2011 Free Software Foundation, Inc.
3993f6b1
DJ
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
3993f6b1
DJ
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
3993f6b1
DJ
20
21#include "defs.h"
22#include "inferior.h"
23#include "target.h"
d6b0e80f 24#include "gdb_string.h"
3993f6b1 25#include "gdb_wait.h"
d6b0e80f
AC
26#include "gdb_assert.h"
27#ifdef HAVE_TKILL_SYSCALL
28#include <unistd.h>
29#include <sys/syscall.h>
30#endif
3993f6b1 31#include <sys/ptrace.h>
0274a8ce 32#include "linux-nat.h"
ac264b3b 33#include "linux-fork.h"
d6b0e80f
AC
34#include "gdbthread.h"
35#include "gdbcmd.h"
36#include "regcache.h"
4f844a66 37#include "regset.h"
10d6c8cd
DJ
38#include "inf-ptrace.h"
39#include "auxv.h"
dba24537
AC
40#include <sys/param.h> /* for MAXPATHLEN */
41#include <sys/procfs.h> /* for elf_gregset etc. */
42#include "elf-bfd.h" /* for elfcore_write_* */
43#include "gregset.h" /* for gregset */
44#include "gdbcore.h" /* for get_exec_file */
45#include <ctype.h> /* for isdigit */
46#include "gdbthread.h" /* for struct thread_info etc. */
47#include "gdb_stat.h" /* for struct stat */
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>
54#include "gdb_dirent.h"
55#include "xml-support.h"
191c4426 56#include "terminal.h"
efcbbd14 57#include <sys/vfs.h>
6c95b8df 58#include "solib.h"
efcbbd14
UW
59
60#ifndef SPUFS_MAGIC
61#define SPUFS_MAGIC 0x23c9b64e
62#endif
dba24537 63
10568435
JK
64#ifdef HAVE_PERSONALITY
65# include <sys/personality.h>
66# if !HAVE_DECL_ADDR_NO_RANDOMIZE
67# define ADDR_NO_RANDOMIZE 0x0040000
68# endif
69#endif /* HAVE_PERSONALITY */
70
8a77dff3
VP
71/* This comment documents high-level logic of this file.
72
73Waiting for events in sync mode
74===============================
75
76When waiting for an event in a specific thread, we just use waitpid, passing
77the specific pid, and not passing WNOHANG.
78
79When waiting for an event in all threads, waitpid is not quite good. Prior to
80version 2.4, Linux can either wait for event in main thread, or in secondary
81threads. (2.4 has the __WALL flag). So, if we use blocking waitpid, we might
82miss an event. The solution is to use non-blocking waitpid, together with
83sigsuspend. First, we use non-blocking waitpid to get an event in the main
84process, if any. Second, we use non-blocking waitpid with the __WCLONED
85flag to check for events in cloned processes. If nothing is found, we use
86sigsuspend to wait for SIGCHLD. When SIGCHLD arrives, it means something
87happened to a child process -- and SIGCHLD will be delivered both for events
88in main debugged process and in cloned processes. As soon as we know there's
3e43a32a
MS
89an event, we get back to calling nonblocking waitpid with and without
90__WCLONED.
8a77dff3
VP
91
92Note that SIGCHLD should be blocked between waitpid and sigsuspend calls,
93so that we don't miss a signal. If SIGCHLD arrives in between, when it's
94blocked, the signal becomes pending and sigsuspend immediately
95notices it and returns.
96
97Waiting for events in async mode
98================================
99
7feb7d06
PA
100In async mode, GDB should always be ready to handle both user input
101and target events, so neither blocking waitpid nor sigsuspend are
102viable options. Instead, we should asynchronously notify the GDB main
103event loop whenever there's an unprocessed event from the target. We
104detect asynchronous target events by handling SIGCHLD signals. To
105notify the event loop about target events, the self-pipe trick is used
106--- a pipe is registered as waitable event source in the event loop,
107the event loop select/poll's on the read end of this pipe (as well on
108other event sources, e.g., stdin), and the SIGCHLD handler writes a
109byte to this pipe. This is more portable than relying on
110pselect/ppoll, since on kernels that lack those syscalls, libc
111emulates them with select/poll+sigprocmask, and that is racy
112(a.k.a. plain broken).
113
114Obviously, if we fail to notify the event loop if there's a target
115event, it's bad. OTOH, if we notify the event loop when there's no
116event from the target, linux_nat_wait will detect that there's no real
117event to report, and return event of type TARGET_WAITKIND_IGNORE.
118This is mostly harmless, but it will waste time and is better avoided.
119
120The main design point is that every time GDB is outside linux-nat.c,
121we have a SIGCHLD handler installed that is called when something
122happens to the target and notifies the GDB event loop. Whenever GDB
123core decides to handle the event, and calls into linux-nat.c, we
124process things as in sync mode, except that the we never block in
125sigsuspend.
126
127While processing an event, we may end up momentarily blocked in
128waitpid calls. Those waitpid calls, while blocking, are guarantied to
129return quickly. E.g., in all-stop mode, before reporting to the core
130that an LWP hit a breakpoint, all LWPs are stopped by sending them
131SIGSTOP, and synchronously waiting for the SIGSTOP to be reported.
132Note that this is different from blocking indefinitely waiting for the
133next event --- here, we're already handling an event.
8a77dff3
VP
134
135Use of signals
136==============
137
138We stop threads by sending a SIGSTOP. The use of SIGSTOP instead of another
139signal is not entirely significant; we just need for a signal to be delivered,
140so that we can intercept it. SIGSTOP's advantage is that it can not be
141blocked. A disadvantage is that it is not a real-time signal, so it can only
142be queued once; we do not keep track of other sources of SIGSTOP.
143
144Two other signals that can't be blocked are SIGCONT and SIGKILL. But we can't
145use them, because they have special behavior when the signal is generated -
146not when it is delivered. SIGCONT resumes the entire thread group and SIGKILL
147kills the entire thread group.
148
149A delivered SIGSTOP would stop the entire thread group, not just the thread we
150tkill'd. But we never let the SIGSTOP be delivered; we always intercept and
151cancel it (by PTRACE_CONT without passing SIGSTOP).
152
153We could use a real-time signal instead. This would solve those problems; we
154could use PTRACE_GETSIGINFO to locate the specific stop signals sent by GDB.
155But we would still have to have some support for SIGSTOP, since PTRACE_ATTACH
156generates it, and there are races with trying to find a signal that is not
157blocked. */
a0ef4274 158
dba24537
AC
159#ifndef O_LARGEFILE
160#define O_LARGEFILE 0
161#endif
0274a8ce 162
3993f6b1
DJ
163/* If the system headers did not provide the constants, hard-code the normal
164 values. */
165#ifndef PTRACE_EVENT_FORK
166
167#define PTRACE_SETOPTIONS 0x4200
168#define PTRACE_GETEVENTMSG 0x4201
169
170/* options set using PTRACE_SETOPTIONS */
171#define PTRACE_O_TRACESYSGOOD 0x00000001
172#define PTRACE_O_TRACEFORK 0x00000002
173#define PTRACE_O_TRACEVFORK 0x00000004
174#define PTRACE_O_TRACECLONE 0x00000008
175#define PTRACE_O_TRACEEXEC 0x00000010
9016a515
DJ
176#define PTRACE_O_TRACEVFORKDONE 0x00000020
177#define PTRACE_O_TRACEEXIT 0x00000040
3993f6b1
DJ
178
179/* Wait extended result codes for the above trace options. */
180#define PTRACE_EVENT_FORK 1
181#define PTRACE_EVENT_VFORK 2
182#define PTRACE_EVENT_CLONE 3
183#define PTRACE_EVENT_EXEC 4
c874c7fc 184#define PTRACE_EVENT_VFORK_DONE 5
9016a515 185#define PTRACE_EVENT_EXIT 6
3993f6b1
DJ
186
187#endif /* PTRACE_EVENT_FORK */
188
ca2163eb
PA
189/* Unlike other extended result codes, WSTOPSIG (status) on
190 PTRACE_O_TRACESYSGOOD syscall events doesn't return SIGTRAP, but
191 instead SIGTRAP with bit 7 set. */
192#define SYSCALL_SIGTRAP (SIGTRAP | 0x80)
193
3993f6b1
DJ
194/* We can't always assume that this flag is available, but all systems
195 with the ptrace event handlers also have __WALL, so it's safe to use
196 here. */
197#ifndef __WALL
198#define __WALL 0x40000000 /* Wait for any child. */
199#endif
200
02d3ff8c 201#ifndef PTRACE_GETSIGINFO
1ef18d08
PA
202# define PTRACE_GETSIGINFO 0x4202
203# define PTRACE_SETSIGINFO 0x4203
02d3ff8c
UW
204#endif
205
10d6c8cd
DJ
206/* The single-threaded native GNU/Linux target_ops. We save a pointer for
207 the use of the multi-threaded target. */
208static struct target_ops *linux_ops;
f973ed9c 209static struct target_ops linux_ops_saved;
10d6c8cd 210
9f0bdab8
DJ
211/* The method to call, if any, when a new thread is attached. */
212static void (*linux_nat_new_thread) (ptid_t);
213
5b009018
PA
214/* The method to call, if any, when the siginfo object needs to be
215 converted between the layout returned by ptrace, and the layout in
216 the architecture of the inferior. */
217static int (*linux_nat_siginfo_fixup) (struct siginfo *,
218 gdb_byte *,
219 int);
220
ac264b3b
MS
221/* The saved to_xfer_partial method, inherited from inf-ptrace.c.
222 Called by our to_xfer_partial. */
223static LONGEST (*super_xfer_partial) (struct target_ops *,
224 enum target_object,
225 const char *, gdb_byte *,
226 const gdb_byte *,
10d6c8cd
DJ
227 ULONGEST, LONGEST);
228
d6b0e80f 229static int debug_linux_nat;
920d2a44
AC
230static void
231show_debug_linux_nat (struct ui_file *file, int from_tty,
232 struct cmd_list_element *c, const char *value)
233{
234 fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
235 value);
236}
d6b0e80f 237
b84876c2
PA
238static int debug_linux_nat_async = 0;
239static void
240show_debug_linux_nat_async (struct ui_file *file, int from_tty,
241 struct cmd_list_element *c, const char *value)
242{
3e43a32a
MS
243 fprintf_filtered (file,
244 _("Debugging of GNU/Linux async lwp module is %s.\n"),
b84876c2
PA
245 value);
246}
247
10568435
JK
248static int disable_randomization = 1;
249
250static void
251show_disable_randomization (struct ui_file *file, int from_tty,
252 struct cmd_list_element *c, const char *value)
253{
254#ifdef HAVE_PERSONALITY
3e43a32a
MS
255 fprintf_filtered (file,
256 _("Disabling randomization of debuggee's "
257 "virtual address space is %s.\n"),
10568435
JK
258 value);
259#else /* !HAVE_PERSONALITY */
3e43a32a
MS
260 fputs_filtered (_("Disabling randomization of debuggee's "
261 "virtual address space is unsupported on\n"
262 "this platform.\n"), file);
10568435
JK
263#endif /* !HAVE_PERSONALITY */
264}
265
266static void
3e43a32a
MS
267set_disable_randomization (char *args, int from_tty,
268 struct cmd_list_element *c)
10568435
JK
269{
270#ifndef HAVE_PERSONALITY
3e43a32a
MS
271 error (_("Disabling randomization of debuggee's "
272 "virtual address space is unsupported on\n"
273 "this platform."));
10568435
JK
274#endif /* !HAVE_PERSONALITY */
275}
276
ae087d01
DJ
277struct simple_pid_list
278{
279 int pid;
3d799a95 280 int status;
ae087d01
DJ
281 struct simple_pid_list *next;
282};
283struct simple_pid_list *stopped_pids;
284
3993f6b1
DJ
285/* This variable is a tri-state flag: -1 for unknown, 0 if PTRACE_O_TRACEFORK
286 can not be used, 1 if it can. */
287
288static int linux_supports_tracefork_flag = -1;
289
3e43a32a
MS
290/* This variable is a tri-state flag: -1 for unknown, 0 if
291 PTRACE_O_TRACESYSGOOD can not be used, 1 if it can. */
a96d9b2e
SDJ
292
293static int linux_supports_tracesysgood_flag = -1;
294
9016a515
DJ
295/* If we have PTRACE_O_TRACEFORK, this flag indicates whether we also have
296 PTRACE_O_TRACEVFORKDONE. */
297
298static int linux_supports_tracevforkdone_flag = -1;
299
b84876c2
PA
300/* Async mode support */
301
b84876c2
PA
302/* Zero if the async mode, although enabled, is masked, which means
303 linux_nat_wait should behave as if async mode was off. */
304static int linux_nat_async_mask_value = 1;
305
a96d9b2e
SDJ
306/* Stores the current used ptrace() options. */
307static int current_ptrace_options = 0;
308
b84876c2
PA
309/* The read/write ends of the pipe registered as waitable file in the
310 event loop. */
311static int linux_nat_event_pipe[2] = { -1, -1 };
312
7feb7d06 313/* Flush the event pipe. */
b84876c2 314
7feb7d06
PA
315static void
316async_file_flush (void)
b84876c2 317{
7feb7d06
PA
318 int ret;
319 char buf;
b84876c2 320
7feb7d06 321 do
b84876c2 322 {
7feb7d06 323 ret = read (linux_nat_event_pipe[0], &buf, 1);
b84876c2 324 }
7feb7d06 325 while (ret >= 0 || (ret == -1 && errno == EINTR));
b84876c2
PA
326}
327
7feb7d06
PA
328/* Put something (anything, doesn't matter what, or how much) in event
329 pipe, so that the select/poll in the event-loop realizes we have
330 something to process. */
252fbfc8 331
b84876c2 332static void
7feb7d06 333async_file_mark (void)
b84876c2 334{
7feb7d06 335 int ret;
b84876c2 336
7feb7d06
PA
337 /* It doesn't really matter what the pipe contains, as long we end
338 up with something in it. Might as well flush the previous
339 left-overs. */
340 async_file_flush ();
b84876c2 341
7feb7d06 342 do
b84876c2 343 {
7feb7d06 344 ret = write (linux_nat_event_pipe[1], "+", 1);
b84876c2 345 }
7feb7d06 346 while (ret == -1 && errno == EINTR);
b84876c2 347
7feb7d06
PA
348 /* Ignore EAGAIN. If the pipe is full, the event loop will already
349 be awakened anyway. */
b84876c2
PA
350}
351
7feb7d06 352static void linux_nat_async (void (*callback)
3e43a32a
MS
353 (enum inferior_event_type event_type,
354 void *context),
7feb7d06
PA
355 void *context);
356static int linux_nat_async_mask (int mask);
357static int kill_lwp (int lwpid, int signo);
358
359static int stop_callback (struct lwp_info *lp, void *data);
360
361static void block_child_signals (sigset_t *prev_mask);
362static void restore_child_signals_mask (sigset_t *prev_mask);
2277426b
PA
363
364struct lwp_info;
365static struct lwp_info *add_lwp (ptid_t ptid);
366static void purge_lwp_list (int pid);
367static struct lwp_info *find_lwp_pid (ptid_t ptid);
368
ae087d01
DJ
369\f
370/* Trivial list manipulation functions to keep track of a list of
371 new stopped processes. */
372static void
3d799a95 373add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
ae087d01
DJ
374{
375 struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
e0881a8e 376
ae087d01 377 new_pid->pid = pid;
3d799a95 378 new_pid->status = status;
ae087d01
DJ
379 new_pid->next = *listp;
380 *listp = new_pid;
381}
382
383static int
46a96992 384pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
ae087d01
DJ
385{
386 struct simple_pid_list **p;
387
388 for (p = listp; *p != NULL; p = &(*p)->next)
389 if ((*p)->pid == pid)
390 {
391 struct simple_pid_list *next = (*p)->next;
e0881a8e 392
46a96992 393 *statusp = (*p)->status;
ae087d01
DJ
394 xfree (*p);
395 *p = next;
396 return 1;
397 }
398 return 0;
399}
400
3d799a95
DJ
401static void
402linux_record_stopped_pid (int pid, int status)
ae087d01 403{
3d799a95 404 add_to_pid_list (&stopped_pids, pid, status);
ae087d01
DJ
405}
406
3993f6b1
DJ
407\f
408/* A helper function for linux_test_for_tracefork, called after fork (). */
409
410static void
411linux_tracefork_child (void)
412{
3993f6b1
DJ
413 ptrace (PTRACE_TRACEME, 0, 0, 0);
414 kill (getpid (), SIGSTOP);
415 fork ();
48bb3cce 416 _exit (0);
3993f6b1
DJ
417}
418
7feb7d06 419/* Wrapper function for waitpid which handles EINTR. */
b957e937
DJ
420
421static int
46a96992 422my_waitpid (int pid, int *statusp, int flags)
b957e937
DJ
423{
424 int ret;
b84876c2 425
b957e937
DJ
426 do
427 {
46a96992 428 ret = waitpid (pid, statusp, flags);
b957e937
DJ
429 }
430 while (ret == -1 && errno == EINTR);
431
432 return ret;
433}
434
435/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
436
437 First, we try to enable fork tracing on ORIGINAL_PID. If this fails,
438 we know that the feature is not available. This may change the tracing
439 options for ORIGINAL_PID, but we'll be setting them shortly anyway.
440
441 However, if it succeeds, we don't know for sure that the feature is
442 available; old versions of PTRACE_SETOPTIONS ignored unknown options. We
3993f6b1 443 create a child process, attach to it, use PTRACE_SETOPTIONS to enable
b957e937
DJ
444 fork tracing, and let it fork. If the process exits, we assume that we
445 can't use TRACEFORK; if we get the fork notification, and we can extract
446 the new child's PID, then we assume that we can. */
3993f6b1
DJ
447
448static void
b957e937 449linux_test_for_tracefork (int original_pid)
3993f6b1
DJ
450{
451 int child_pid, ret, status;
452 long second_pid;
7feb7d06 453 sigset_t prev_mask;
4c28f408 454
7feb7d06
PA
455 /* We don't want those ptrace calls to be interrupted. */
456 block_child_signals (&prev_mask);
3993f6b1 457
b957e937
DJ
458 linux_supports_tracefork_flag = 0;
459 linux_supports_tracevforkdone_flag = 0;
460
461 ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
462 if (ret != 0)
7feb7d06
PA
463 {
464 restore_child_signals_mask (&prev_mask);
465 return;
466 }
b957e937 467
3993f6b1
DJ
468 child_pid = fork ();
469 if (child_pid == -1)
e2e0b3e5 470 perror_with_name (("fork"));
3993f6b1
DJ
471
472 if (child_pid == 0)
473 linux_tracefork_child ();
474
b957e937 475 ret = my_waitpid (child_pid, &status, 0);
3993f6b1 476 if (ret == -1)
e2e0b3e5 477 perror_with_name (("waitpid"));
3993f6b1 478 else if (ret != child_pid)
8a3fe4f8 479 error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret);
3993f6b1 480 if (! WIFSTOPPED (status))
3e43a32a
MS
481 error (_("linux_test_for_tracefork: waitpid: unexpected status %d."),
482 status);
3993f6b1 483
3993f6b1
DJ
484 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
485 if (ret != 0)
486 {
b957e937
DJ
487 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
488 if (ret != 0)
489 {
8a3fe4f8 490 warning (_("linux_test_for_tracefork: failed to kill child"));
7feb7d06 491 restore_child_signals_mask (&prev_mask);
b957e937
DJ
492 return;
493 }
494
495 ret = my_waitpid (child_pid, &status, 0);
496 if (ret != child_pid)
3e43a32a
MS
497 warning (_("linux_test_for_tracefork: failed "
498 "to wait for killed child"));
b957e937 499 else if (!WIFSIGNALED (status))
3e43a32a
MS
500 warning (_("linux_test_for_tracefork: unexpected "
501 "wait status 0x%x from killed child"), status);
b957e937 502
7feb7d06 503 restore_child_signals_mask (&prev_mask);
3993f6b1
DJ
504 return;
505 }
506
9016a515
DJ
507 /* Check whether PTRACE_O_TRACEVFORKDONE is available. */
508 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
509 PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
510 linux_supports_tracevforkdone_flag = (ret == 0);
511
b957e937
DJ
512 ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
513 if (ret != 0)
8a3fe4f8 514 warning (_("linux_test_for_tracefork: failed to resume child"));
b957e937
DJ
515
516 ret = my_waitpid (child_pid, &status, 0);
517
3993f6b1
DJ
518 if (ret == child_pid && WIFSTOPPED (status)
519 && status >> 16 == PTRACE_EVENT_FORK)
520 {
521 second_pid = 0;
522 ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
523 if (ret == 0 && second_pid != 0)
524 {
525 int second_status;
526
527 linux_supports_tracefork_flag = 1;
b957e937
DJ
528 my_waitpid (second_pid, &second_status, 0);
529 ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
530 if (ret != 0)
3e43a32a
MS
531 warning (_("linux_test_for_tracefork: "
532 "failed to kill second child"));
97725dc4 533 my_waitpid (second_pid, &status, 0);
3993f6b1
DJ
534 }
535 }
b957e937 536 else
8a3fe4f8
AC
537 warning (_("linux_test_for_tracefork: unexpected result from waitpid "
538 "(%d, status 0x%x)"), ret, status);
3993f6b1 539
b957e937
DJ
540 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
541 if (ret != 0)
8a3fe4f8 542 warning (_("linux_test_for_tracefork: failed to kill child"));
b957e937 543 my_waitpid (child_pid, &status, 0);
4c28f408 544
7feb7d06 545 restore_child_signals_mask (&prev_mask);
3993f6b1
DJ
546}
547
a96d9b2e
SDJ
548/* Determine if PTRACE_O_TRACESYSGOOD can be used to follow syscalls.
549
550 We try to enable syscall tracing on ORIGINAL_PID. If this fails,
551 we know that the feature is not available. This may change the tracing
552 options for ORIGINAL_PID, but we'll be setting them shortly anyway. */
553
554static void
555linux_test_for_tracesysgood (int original_pid)
556{
557 int ret;
558 sigset_t prev_mask;
559
560 /* We don't want those ptrace calls to be interrupted. */
561 block_child_signals (&prev_mask);
562
563 linux_supports_tracesysgood_flag = 0;
564
565 ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACESYSGOOD);
566 if (ret != 0)
567 goto out;
568
569 linux_supports_tracesysgood_flag = 1;
570out:
571 restore_child_signals_mask (&prev_mask);
572}
573
574/* Determine wether we support PTRACE_O_TRACESYSGOOD option available.
575 This function also sets linux_supports_tracesysgood_flag. */
576
577static int
578linux_supports_tracesysgood (int pid)
579{
580 if (linux_supports_tracesysgood_flag == -1)
581 linux_test_for_tracesysgood (pid);
582 return linux_supports_tracesysgood_flag;
583}
584
3993f6b1
DJ
585/* Return non-zero iff we have tracefork functionality available.
586 This function also sets linux_supports_tracefork_flag. */
587
588static int
b957e937 589linux_supports_tracefork (int pid)
3993f6b1
DJ
590{
591 if (linux_supports_tracefork_flag == -1)
b957e937 592 linux_test_for_tracefork (pid);
3993f6b1
DJ
593 return linux_supports_tracefork_flag;
594}
595
9016a515 596static int
b957e937 597linux_supports_tracevforkdone (int pid)
9016a515
DJ
598{
599 if (linux_supports_tracefork_flag == -1)
b957e937 600 linux_test_for_tracefork (pid);
9016a515
DJ
601 return linux_supports_tracevforkdone_flag;
602}
603
a96d9b2e
SDJ
604static void
605linux_enable_tracesysgood (ptid_t ptid)
606{
607 int pid = ptid_get_lwp (ptid);
608
609 if (pid == 0)
610 pid = ptid_get_pid (ptid);
611
612 if (linux_supports_tracesysgood (pid) == 0)
613 return;
614
615 current_ptrace_options |= PTRACE_O_TRACESYSGOOD;
616
617 ptrace (PTRACE_SETOPTIONS, pid, 0, current_ptrace_options);
618}
619
3993f6b1 620\f
4de4c07c
DJ
621void
622linux_enable_event_reporting (ptid_t ptid)
623{
d3587048 624 int pid = ptid_get_lwp (ptid);
4de4c07c 625
d3587048
DJ
626 if (pid == 0)
627 pid = ptid_get_pid (ptid);
628
b957e937 629 if (! linux_supports_tracefork (pid))
4de4c07c
DJ
630 return;
631
a96d9b2e
SDJ
632 current_ptrace_options |= PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK
633 | PTRACE_O_TRACEEXEC | PTRACE_O_TRACECLONE;
634
b957e937 635 if (linux_supports_tracevforkdone (pid))
a96d9b2e 636 current_ptrace_options |= PTRACE_O_TRACEVFORKDONE;
9016a515
DJ
637
638 /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
639 read-only process state. */
4de4c07c 640
a96d9b2e 641 ptrace (PTRACE_SETOPTIONS, pid, 0, current_ptrace_options);
4de4c07c
DJ
642}
643
6d8fd2b7
UW
644static void
645linux_child_post_attach (int pid)
4de4c07c
DJ
646{
647 linux_enable_event_reporting (pid_to_ptid (pid));
0ec9a092 648 check_for_thread_db ();
a96d9b2e 649 linux_enable_tracesysgood (pid_to_ptid (pid));
4de4c07c
DJ
650}
651
10d6c8cd 652static void
4de4c07c
DJ
653linux_child_post_startup_inferior (ptid_t ptid)
654{
655 linux_enable_event_reporting (ptid);
0ec9a092 656 check_for_thread_db ();
a96d9b2e 657 linux_enable_tracesysgood (ptid);
4de4c07c
DJ
658}
659
6d8fd2b7
UW
660static int
661linux_child_follow_fork (struct target_ops *ops, int follow_child)
3993f6b1 662{
7feb7d06 663 sigset_t prev_mask;
9016a515 664 int has_vforked;
4de4c07c
DJ
665 int parent_pid, child_pid;
666
7feb7d06 667 block_child_signals (&prev_mask);
b84876c2 668
e58b0e63
PA
669 has_vforked = (inferior_thread ()->pending_follow.kind
670 == TARGET_WAITKIND_VFORKED);
671 parent_pid = ptid_get_lwp (inferior_ptid);
d3587048 672 if (parent_pid == 0)
e58b0e63
PA
673 parent_pid = ptid_get_pid (inferior_ptid);
674 child_pid = PIDGET (inferior_thread ()->pending_follow.value.related_pid);
4de4c07c 675
2277426b
PA
676 if (!detach_fork)
677 linux_enable_event_reporting (pid_to_ptid (child_pid));
678
6c95b8df
PA
679 if (has_vforked
680 && !non_stop /* Non-stop always resumes both branches. */
681 && (!target_is_async_p () || sync_execution)
682 && !(follow_child || detach_fork || sched_multi))
683 {
684 /* The parent stays blocked inside the vfork syscall until the
685 child execs or exits. If we don't let the child run, then
686 the parent stays blocked. If we're telling the parent to run
687 in the foreground, the user will not be able to ctrl-c to get
688 back the terminal, effectively hanging the debug session. */
3e43a32a
MS
689 fprintf_filtered (gdb_stderr,
690 _("Can not resume the parent process "
691 "over vfork in the foreground while\n"
692 "holding the child stopped. "
693 "Try \"set detach-on-fork\" or "
694 "\"set schedule-multiple\".\n"));
6c95b8df
PA
695 return 1;
696 }
697
4de4c07c
DJ
698 if (! follow_child)
699 {
6c95b8df 700 struct lwp_info *child_lp = NULL;
4de4c07c 701
6c95b8df 702 /* We're already attached to the parent, by default. */
4de4c07c 703
ac264b3b
MS
704 /* Detach new forked process? */
705 if (detach_fork)
f75c00e4 706 {
6c95b8df
PA
707 /* Before detaching from the child, remove all breakpoints
708 from it. If we forked, then this has already been taken
709 care of by infrun.c. If we vforked however, any
710 breakpoint inserted in the parent is visible in the
711 child, even those added while stopped in a vfork
712 catchpoint. This will remove the breakpoints from the
713 parent also, but they'll be reinserted below. */
714 if (has_vforked)
715 {
716 /* keep breakpoints list in sync. */
717 remove_breakpoints_pid (GET_PID (inferior_ptid));
718 }
719
e85a822c 720 if (info_verbose || debug_linux_nat)
ac264b3b
MS
721 {
722 target_terminal_ours ();
723 fprintf_filtered (gdb_stdlog,
3e43a32a
MS
724 "Detaching after fork from "
725 "child process %d.\n",
ac264b3b
MS
726 child_pid);
727 }
4de4c07c 728
ac264b3b
MS
729 ptrace (PTRACE_DETACH, child_pid, 0, 0);
730 }
731 else
732 {
77435e4c 733 struct inferior *parent_inf, *child_inf;
2277426b 734 struct cleanup *old_chain;
7f9f62ba
PA
735
736 /* Add process to GDB's tables. */
77435e4c
PA
737 child_inf = add_inferior (child_pid);
738
e58b0e63 739 parent_inf = current_inferior ();
77435e4c 740 child_inf->attach_flag = parent_inf->attach_flag;
191c4426 741 copy_terminal_info (child_inf, parent_inf);
7f9f62ba 742
2277426b 743 old_chain = save_inferior_ptid ();
6c95b8df 744 save_current_program_space ();
2277426b
PA
745
746 inferior_ptid = ptid_build (child_pid, child_pid, 0);
747 add_thread (inferior_ptid);
6c95b8df
PA
748 child_lp = add_lwp (inferior_ptid);
749 child_lp->stopped = 1;
750 child_lp->resumed = 1;
2277426b 751
6c95b8df
PA
752 /* If this is a vfork child, then the address-space is
753 shared with the parent. */
754 if (has_vforked)
755 {
756 child_inf->pspace = parent_inf->pspace;
757 child_inf->aspace = parent_inf->aspace;
758
759 /* The parent will be frozen until the child is done
760 with the shared region. Keep track of the
761 parent. */
762 child_inf->vfork_parent = parent_inf;
763 child_inf->pending_detach = 0;
764 parent_inf->vfork_child = child_inf;
765 parent_inf->pending_detach = 0;
766 }
767 else
768 {
769 child_inf->aspace = new_address_space ();
770 child_inf->pspace = add_program_space (child_inf->aspace);
771 child_inf->removable = 1;
772 set_current_program_space (child_inf->pspace);
773 clone_program_space (child_inf->pspace, parent_inf->pspace);
774
775 /* Let the shared library layer (solib-svr4) learn about
776 this new process, relocate the cloned exec, pull in
777 shared libraries, and install the solib event
778 breakpoint. If a "cloned-VM" event was propagated
779 better throughout the core, this wouldn't be
780 required. */
268a4a75 781 solib_create_inferior_hook (0);
6c95b8df
PA
782 }
783
784 /* Let the thread_db layer learn about this new process. */
2277426b
PA
785 check_for_thread_db ();
786
787 do_cleanups (old_chain);
ac264b3b 788 }
9016a515
DJ
789
790 if (has_vforked)
791 {
6c95b8df
PA
792 struct lwp_info *lp;
793 struct inferior *parent_inf;
794
795 parent_inf = current_inferior ();
796
797 /* If we detached from the child, then we have to be careful
798 to not insert breakpoints in the parent until the child
799 is done with the shared memory region. However, if we're
800 staying attached to the child, then we can and should
801 insert breakpoints, so that we can debug it. A
802 subsequent child exec or exit is enough to know when does
803 the child stops using the parent's address space. */
804 parent_inf->waiting_for_vfork_done = detach_fork;
56710373 805 parent_inf->pspace->breakpoints_not_allowed = detach_fork;
6c95b8df
PA
806
807 lp = find_lwp_pid (pid_to_ptid (parent_pid));
b957e937
DJ
808 gdb_assert (linux_supports_tracefork_flag >= 0);
809 if (linux_supports_tracevforkdone (0))
9016a515 810 {
6c95b8df
PA
811 if (debug_linux_nat)
812 fprintf_unfiltered (gdb_stdlog,
813 "LCFF: waiting for VFORK_DONE on %d\n",
814 parent_pid);
815
816 lp->stopped = 1;
817 lp->resumed = 1;
9016a515 818
6c95b8df
PA
819 /* We'll handle the VFORK_DONE event like any other
820 event, in target_wait. */
9016a515
DJ
821 }
822 else
823 {
824 /* We can't insert breakpoints until the child has
825 finished with the shared memory region. We need to
826 wait until that happens. Ideal would be to just
827 call:
828 - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
829 - waitpid (parent_pid, &status, __WALL);
830 However, most architectures can't handle a syscall
831 being traced on the way out if it wasn't traced on
832 the way in.
833
834 We might also think to loop, continuing the child
835 until it exits or gets a SIGTRAP. One problem is
836 that the child might call ptrace with PTRACE_TRACEME.
837
838 There's no simple and reliable way to figure out when
839 the vforked child will be done with its copy of the
840 shared memory. We could step it out of the syscall,
841 two instructions, let it go, and then single-step the
842 parent once. When we have hardware single-step, this
843 would work; with software single-step it could still
844 be made to work but we'd have to be able to insert
845 single-step breakpoints in the child, and we'd have
846 to insert -just- the single-step breakpoint in the
847 parent. Very awkward.
848
849 In the end, the best we can do is to make sure it
850 runs for a little while. Hopefully it will be out of
851 range of any breakpoints we reinsert. Usually this
852 is only the single-step breakpoint at vfork's return
853 point. */
854
6c95b8df
PA
855 if (debug_linux_nat)
856 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
857 "LCFF: no VFORK_DONE "
858 "support, sleeping a bit\n");
6c95b8df 859
9016a515 860 usleep (10000);
9016a515 861
6c95b8df
PA
862 /* Pretend we've seen a PTRACE_EVENT_VFORK_DONE event,
863 and leave it pending. The next linux_nat_resume call
864 will notice a pending event, and bypasses actually
865 resuming the inferior. */
866 lp->status = 0;
867 lp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE;
868 lp->stopped = 0;
869 lp->resumed = 1;
870
871 /* If we're in async mode, need to tell the event loop
872 there's something here to process. */
873 if (target_can_async_p ())
874 async_file_mark ();
875 }
9016a515 876 }
4de4c07c 877 }
3993f6b1 878 else
4de4c07c 879 {
77435e4c 880 struct inferior *parent_inf, *child_inf;
2277426b 881 struct lwp_info *lp;
6c95b8df 882 struct program_space *parent_pspace;
4de4c07c 883
e85a822c 884 if (info_verbose || debug_linux_nat)
f75c00e4
DJ
885 {
886 target_terminal_ours ();
6c95b8df 887 if (has_vforked)
3e43a32a
MS
888 fprintf_filtered (gdb_stdlog,
889 _("Attaching after process %d "
890 "vfork to child process %d.\n"),
6c95b8df
PA
891 parent_pid, child_pid);
892 else
3e43a32a
MS
893 fprintf_filtered (gdb_stdlog,
894 _("Attaching after process %d "
895 "fork to child process %d.\n"),
6c95b8df 896 parent_pid, child_pid);
f75c00e4 897 }
4de4c07c 898
7a7d3353
PA
899 /* Add the new inferior first, so that the target_detach below
900 doesn't unpush the target. */
901
77435e4c
PA
902 child_inf = add_inferior (child_pid);
903
e58b0e63 904 parent_inf = current_inferior ();
77435e4c 905 child_inf->attach_flag = parent_inf->attach_flag;
191c4426 906 copy_terminal_info (child_inf, parent_inf);
7a7d3353 907
6c95b8df 908 parent_pspace = parent_inf->pspace;
9016a515 909
6c95b8df
PA
910 /* If we're vforking, we want to hold on to the parent until the
911 child exits or execs. At child exec or exit time we can
912 remove the old breakpoints from the parent and detach or
913 resume debugging it. Otherwise, detach the parent now; we'll
914 want to reuse it's program/address spaces, but we can't set
915 them to the child before removing breakpoints from the
916 parent, otherwise, the breakpoints module could decide to
917 remove breakpoints from the wrong process (since they'd be
918 assigned to the same address space). */
9016a515
DJ
919
920 if (has_vforked)
7f9f62ba 921 {
6c95b8df
PA
922 gdb_assert (child_inf->vfork_parent == NULL);
923 gdb_assert (parent_inf->vfork_child == NULL);
924 child_inf->vfork_parent = parent_inf;
925 child_inf->pending_detach = 0;
926 parent_inf->vfork_child = child_inf;
927 parent_inf->pending_detach = detach_fork;
928 parent_inf->waiting_for_vfork_done = 0;
ac264b3b 929 }
2277426b 930 else if (detach_fork)
b84876c2 931 target_detach (NULL, 0);
4de4c07c 932
6c95b8df
PA
933 /* Note that the detach above makes PARENT_INF dangling. */
934
935 /* Add the child thread to the appropriate lists, and switch to
936 this new thread, before cloning the program space, and
937 informing the solib layer about this new process. */
938
9f0bdab8 939 inferior_ptid = ptid_build (child_pid, child_pid, 0);
2277426b
PA
940 add_thread (inferior_ptid);
941 lp = add_lwp (inferior_ptid);
942 lp->stopped = 1;
6c95b8df
PA
943 lp->resumed = 1;
944
945 /* If this is a vfork child, then the address-space is shared
946 with the parent. If we detached from the parent, then we can
947 reuse the parent's program/address spaces. */
948 if (has_vforked || detach_fork)
949 {
950 child_inf->pspace = parent_pspace;
951 child_inf->aspace = child_inf->pspace->aspace;
952 }
953 else
954 {
955 child_inf->aspace = new_address_space ();
956 child_inf->pspace = add_program_space (child_inf->aspace);
957 child_inf->removable = 1;
958 set_current_program_space (child_inf->pspace);
959 clone_program_space (child_inf->pspace, parent_pspace);
960
961 /* Let the shared library layer (solib-svr4) learn about
962 this new process, relocate the cloned exec, pull in
963 shared libraries, and install the solib event breakpoint.
964 If a "cloned-VM" event was propagated better throughout
965 the core, this wouldn't be required. */
268a4a75 966 solib_create_inferior_hook (0);
6c95b8df 967 }
ac264b3b 968
6c95b8df 969 /* Let the thread_db layer learn about this new process. */
ef29ce1a 970 check_for_thread_db ();
4de4c07c
DJ
971 }
972
7feb7d06 973 restore_child_signals_mask (&prev_mask);
4de4c07c
DJ
974 return 0;
975}
976
4de4c07c 977\f
6d8fd2b7
UW
978static void
979linux_child_insert_fork_catchpoint (int pid)
4de4c07c 980{
b957e937 981 if (! linux_supports_tracefork (pid))
8a3fe4f8 982 error (_("Your system does not support fork catchpoints."));
3993f6b1
DJ
983}
984
6d8fd2b7
UW
985static void
986linux_child_insert_vfork_catchpoint (int pid)
3993f6b1 987{
b957e937 988 if (!linux_supports_tracefork (pid))
8a3fe4f8 989 error (_("Your system does not support vfork catchpoints."));
3993f6b1
DJ
990}
991
6d8fd2b7
UW
992static void
993linux_child_insert_exec_catchpoint (int pid)
3993f6b1 994{
b957e937 995 if (!linux_supports_tracefork (pid))
8a3fe4f8 996 error (_("Your system does not support exec catchpoints."));
3993f6b1
DJ
997}
998
a96d9b2e
SDJ
999static int
1000linux_child_set_syscall_catchpoint (int pid, int needed, int any_count,
1001 int table_size, int *table)
1002{
1003 if (! linux_supports_tracesysgood (pid))
1004 error (_("Your system does not support syscall catchpoints."));
1005 /* On GNU/Linux, we ignore the arguments. It means that we only
1006 enable the syscall catchpoints, but do not disable them.
1007
1008 Also, we do not use the `table' information because we do not
1009 filter system calls here. We let GDB do the logic for us. */
1010 return 0;
1011}
1012
d6b0e80f
AC
1013/* On GNU/Linux there are no real LWP's. The closest thing to LWP's
1014 are processes sharing the same VM space. A multi-threaded process
1015 is basically a group of such processes. However, such a grouping
1016 is almost entirely a user-space issue; the kernel doesn't enforce
1017 such a grouping at all (this might change in the future). In
1018 general, we'll rely on the threads library (i.e. the GNU/Linux
1019 Threads library) to provide such a grouping.
1020
1021 It is perfectly well possible to write a multi-threaded application
1022 without the assistance of a threads library, by using the clone
1023 system call directly. This module should be able to give some
1024 rudimentary support for debugging such applications if developers
1025 specify the CLONE_PTRACE flag in the clone system call, and are
1026 using the Linux kernel 2.4 or above.
1027
1028 Note that there are some peculiarities in GNU/Linux that affect
1029 this code:
1030
1031 - In general one should specify the __WCLONE flag to waitpid in
1032 order to make it report events for any of the cloned processes
1033 (and leave it out for the initial process). However, if a cloned
1034 process has exited the exit status is only reported if the
1035 __WCLONE flag is absent. Linux kernel 2.4 has a __WALL flag, but
1036 we cannot use it since GDB must work on older systems too.
1037
1038 - When a traced, cloned process exits and is waited for by the
1039 debugger, the kernel reassigns it to the original parent and
1040 keeps it around as a "zombie". Somehow, the GNU/Linux Threads
1041 library doesn't notice this, which leads to the "zombie problem":
1042 When debugged a multi-threaded process that spawns a lot of
1043 threads will run out of processes, even if the threads exit,
1044 because the "zombies" stay around. */
1045
1046/* List of known LWPs. */
9f0bdab8 1047struct lwp_info *lwp_list;
d6b0e80f
AC
1048\f
1049
d6b0e80f
AC
1050/* Original signal mask. */
1051static sigset_t normal_mask;
1052
1053/* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
1054 _initialize_linux_nat. */
1055static sigset_t suspend_mask;
1056
7feb7d06
PA
1057/* Signals to block to make that sigsuspend work. */
1058static sigset_t blocked_mask;
1059
1060/* SIGCHLD action. */
1061struct sigaction sigchld_action;
b84876c2 1062
7feb7d06
PA
1063/* Block child signals (SIGCHLD and linux threads signals), and store
1064 the previous mask in PREV_MASK. */
84e46146 1065
7feb7d06
PA
1066static void
1067block_child_signals (sigset_t *prev_mask)
1068{
1069 /* Make sure SIGCHLD is blocked. */
1070 if (!sigismember (&blocked_mask, SIGCHLD))
1071 sigaddset (&blocked_mask, SIGCHLD);
1072
1073 sigprocmask (SIG_BLOCK, &blocked_mask, prev_mask);
1074}
1075
1076/* Restore child signals mask, previously returned by
1077 block_child_signals. */
1078
1079static void
1080restore_child_signals_mask (sigset_t *prev_mask)
1081{
1082 sigprocmask (SIG_SETMASK, prev_mask, NULL);
1083}
d6b0e80f
AC
1084\f
1085
1086/* Prototypes for local functions. */
1087static int stop_wait_callback (struct lwp_info *lp, void *data);
28439f5e 1088static int linux_thread_alive (ptid_t ptid);
6d8fd2b7 1089static char *linux_child_pid_to_exec_file (int pid);
710151dd 1090
d6b0e80f
AC
1091\f
1092/* Convert wait status STATUS to a string. Used for printing debug
1093 messages only. */
1094
1095static char *
1096status_to_str (int status)
1097{
1098 static char buf[64];
1099
1100 if (WIFSTOPPED (status))
206aa767 1101 {
ca2163eb 1102 if (WSTOPSIG (status) == SYSCALL_SIGTRAP)
206aa767
DE
1103 snprintf (buf, sizeof (buf), "%s (stopped at syscall)",
1104 strsignal (SIGTRAP));
1105 else
1106 snprintf (buf, sizeof (buf), "%s (stopped)",
1107 strsignal (WSTOPSIG (status)));
1108 }
d6b0e80f
AC
1109 else if (WIFSIGNALED (status))
1110 snprintf (buf, sizeof (buf), "%s (terminated)",
ba9b2ec3 1111 strsignal (WTERMSIG (status)));
d6b0e80f
AC
1112 else
1113 snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
1114
1115 return buf;
1116}
1117
d90e17a7
PA
1118/* Remove all LWPs belong to PID from the lwp list. */
1119
1120static void
1121purge_lwp_list (int pid)
1122{
1123 struct lwp_info *lp, *lpprev, *lpnext;
1124
1125 lpprev = NULL;
1126
1127 for (lp = lwp_list; lp; lp = lpnext)
1128 {
1129 lpnext = lp->next;
1130
1131 if (ptid_get_pid (lp->ptid) == pid)
1132 {
1133 if (lp == lwp_list)
1134 lwp_list = lp->next;
1135 else
1136 lpprev->next = lp->next;
1137
1138 xfree (lp);
1139 }
1140 else
1141 lpprev = lp;
1142 }
1143}
1144
1145/* Return the number of known LWPs in the tgid given by PID. */
1146
1147static int
1148num_lwps (int pid)
1149{
1150 int count = 0;
1151 struct lwp_info *lp;
1152
1153 for (lp = lwp_list; lp; lp = lp->next)
1154 if (ptid_get_pid (lp->ptid) == pid)
1155 count++;
1156
1157 return count;
d6b0e80f
AC
1158}
1159
f973ed9c 1160/* Add the LWP specified by PID to the list. Return a pointer to the
9f0bdab8
DJ
1161 structure describing the new LWP. The LWP should already be stopped
1162 (with an exception for the very first LWP). */
d6b0e80f
AC
1163
1164static struct lwp_info *
1165add_lwp (ptid_t ptid)
1166{
1167 struct lwp_info *lp;
1168
1169 gdb_assert (is_lwp (ptid));
1170
1171 lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
1172
1173 memset (lp, 0, sizeof (struct lwp_info));
1174
1175 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
1176
1177 lp->ptid = ptid;
dc146f7c 1178 lp->core = -1;
d6b0e80f
AC
1179
1180 lp->next = lwp_list;
1181 lwp_list = lp;
d6b0e80f 1182
d90e17a7 1183 if (num_lwps (GET_PID (ptid)) > 1 && linux_nat_new_thread != NULL)
9f0bdab8
DJ
1184 linux_nat_new_thread (ptid);
1185
d6b0e80f
AC
1186 return lp;
1187}
1188
1189/* Remove the LWP specified by PID from the list. */
1190
1191static void
1192delete_lwp (ptid_t ptid)
1193{
1194 struct lwp_info *lp, *lpprev;
1195
1196 lpprev = NULL;
1197
1198 for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
1199 if (ptid_equal (lp->ptid, ptid))
1200 break;
1201
1202 if (!lp)
1203 return;
1204
d6b0e80f
AC
1205 if (lpprev)
1206 lpprev->next = lp->next;
1207 else
1208 lwp_list = lp->next;
1209
1210 xfree (lp);
1211}
1212
1213/* Return a pointer to the structure describing the LWP corresponding
1214 to PID. If no corresponding LWP could be found, return NULL. */
1215
1216static struct lwp_info *
1217find_lwp_pid (ptid_t ptid)
1218{
1219 struct lwp_info *lp;
1220 int lwp;
1221
1222 if (is_lwp (ptid))
1223 lwp = GET_LWP (ptid);
1224 else
1225 lwp = GET_PID (ptid);
1226
1227 for (lp = lwp_list; lp; lp = lp->next)
1228 if (lwp == GET_LWP (lp->ptid))
1229 return lp;
1230
1231 return NULL;
1232}
1233
1234/* Call CALLBACK with its second argument set to DATA for every LWP in
1235 the list. If CALLBACK returns 1 for a particular LWP, return a
1236 pointer to the structure describing that LWP immediately.
1237 Otherwise return NULL. */
1238
1239struct lwp_info *
d90e17a7
PA
1240iterate_over_lwps (ptid_t filter,
1241 int (*callback) (struct lwp_info *, void *),
1242 void *data)
d6b0e80f
AC
1243{
1244 struct lwp_info *lp, *lpnext;
1245
1246 for (lp = lwp_list; lp; lp = lpnext)
1247 {
1248 lpnext = lp->next;
d90e17a7
PA
1249
1250 if (ptid_match (lp->ptid, filter))
1251 {
1252 if ((*callback) (lp, data))
1253 return lp;
1254 }
d6b0e80f
AC
1255 }
1256
1257 return NULL;
1258}
1259
2277426b
PA
1260/* Update our internal state when changing from one checkpoint to
1261 another indicated by NEW_PTID. We can only switch single-threaded
1262 applications, so we only create one new LWP, and the previous list
1263 is discarded. */
f973ed9c
DJ
1264
1265void
1266linux_nat_switch_fork (ptid_t new_ptid)
1267{
1268 struct lwp_info *lp;
1269
2277426b
PA
1270 purge_lwp_list (GET_PID (inferior_ptid));
1271
f973ed9c
DJ
1272 lp = add_lwp (new_ptid);
1273 lp->stopped = 1;
e26af52f 1274
2277426b
PA
1275 /* This changes the thread's ptid while preserving the gdb thread
1276 num. Also changes the inferior pid, while preserving the
1277 inferior num. */
1278 thread_change_ptid (inferior_ptid, new_ptid);
1279
1280 /* We've just told GDB core that the thread changed target id, but,
1281 in fact, it really is a different thread, with different register
1282 contents. */
1283 registers_changed ();
e26af52f
DJ
1284}
1285
e26af52f
DJ
1286/* Handle the exit of a single thread LP. */
1287
1288static void
1289exit_lwp (struct lwp_info *lp)
1290{
e09875d4 1291 struct thread_info *th = find_thread_ptid (lp->ptid);
063bfe2e
VP
1292
1293 if (th)
e26af52f 1294 {
17faa917
DJ
1295 if (print_thread_events)
1296 printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
1297
4f8d22e3 1298 delete_thread (lp->ptid);
e26af52f
DJ
1299 }
1300
1301 delete_lwp (lp->ptid);
1302}
1303
4d062f1a
PA
1304/* Return an lwp's tgid, found in `/proc/PID/status'. */
1305
1306int
1307linux_proc_get_tgid (int lwpid)
1308{
1309 FILE *status_file;
1310 char buf[100];
1311 int tgid = -1;
1312
1313 snprintf (buf, sizeof (buf), "/proc/%d/status", (int) lwpid);
1314 status_file = fopen (buf, "r");
1315 if (status_file != NULL)
1316 {
1317 while (fgets (buf, sizeof (buf), status_file))
1318 {
1319 if (strncmp (buf, "Tgid:", 5) == 0)
1320 {
1321 tgid = strtoul (buf + strlen ("Tgid:"), NULL, 10);
1322 break;
1323 }
1324 }
1325
1326 fclose (status_file);
1327 }
1328
1329 return tgid;
1330}
1331
a0ef4274
DJ
1332/* Detect `T (stopped)' in `/proc/PID/status'.
1333 Other states including `T (tracing stop)' are reported as false. */
1334
1335static int
1336pid_is_stopped (pid_t pid)
1337{
1338 FILE *status_file;
1339 char buf[100];
1340 int retval = 0;
1341
1342 snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
1343 status_file = fopen (buf, "r");
1344 if (status_file != NULL)
1345 {
1346 int have_state = 0;
1347
1348 while (fgets (buf, sizeof (buf), status_file))
1349 {
1350 if (strncmp (buf, "State:", 6) == 0)
1351 {
1352 have_state = 1;
1353 break;
1354 }
1355 }
1356 if (have_state && strstr (buf, "T (stopped)") != NULL)
1357 retval = 1;
1358 fclose (status_file);
1359 }
1360 return retval;
1361}
1362
1363/* Wait for the LWP specified by LP, which we have just attached to.
1364 Returns a wait status for that LWP, to cache. */
1365
1366static int
1367linux_nat_post_attach_wait (ptid_t ptid, int first, int *cloned,
1368 int *signalled)
1369{
1370 pid_t new_pid, pid = GET_LWP (ptid);
1371 int status;
1372
1373 if (pid_is_stopped (pid))
1374 {
1375 if (debug_linux_nat)
1376 fprintf_unfiltered (gdb_stdlog,
1377 "LNPAW: Attaching to a stopped process\n");
1378
1379 /* The process is definitely stopped. It is in a job control
1380 stop, unless the kernel predates the TASK_STOPPED /
1381 TASK_TRACED distinction, in which case it might be in a
1382 ptrace stop. Make sure it is in a ptrace stop; from there we
1383 can kill it, signal it, et cetera.
1384
1385 First make sure there is a pending SIGSTOP. Since we are
1386 already attached, the process can not transition from stopped
1387 to running without a PTRACE_CONT; so we know this signal will
1388 go into the queue. The SIGSTOP generated by PTRACE_ATTACH is
1389 probably already in the queue (unless this kernel is old
1390 enough to use TASK_STOPPED for ptrace stops); but since SIGSTOP
1391 is not an RT signal, it can only be queued once. */
1392 kill_lwp (pid, SIGSTOP);
1393
1394 /* Finally, resume the stopped process. This will deliver the SIGSTOP
1395 (or a higher priority signal, just like normal PTRACE_ATTACH). */
1396 ptrace (PTRACE_CONT, pid, 0, 0);
1397 }
1398
1399 /* Make sure the initial process is stopped. The user-level threads
1400 layer might want to poke around in the inferior, and that won't
1401 work if things haven't stabilized yet. */
1402 new_pid = my_waitpid (pid, &status, 0);
1403 if (new_pid == -1 && errno == ECHILD)
1404 {
1405 if (first)
1406 warning (_("%s is a cloned process"), target_pid_to_str (ptid));
1407
1408 /* Try again with __WCLONE to check cloned processes. */
1409 new_pid = my_waitpid (pid, &status, __WCLONE);
1410 *cloned = 1;
1411 }
1412
dacc9cb2
PP
1413 gdb_assert (pid == new_pid);
1414
1415 if (!WIFSTOPPED (status))
1416 {
1417 /* The pid we tried to attach has apparently just exited. */
1418 if (debug_linux_nat)
1419 fprintf_unfiltered (gdb_stdlog, "LNPAW: Failed to stop %d: %s",
1420 pid, status_to_str (status));
1421 return status;
1422 }
a0ef4274
DJ
1423
1424 if (WSTOPSIG (status) != SIGSTOP)
1425 {
1426 *signalled = 1;
1427 if (debug_linux_nat)
1428 fprintf_unfiltered (gdb_stdlog,
1429 "LNPAW: Received %s after attaching\n",
1430 status_to_str (status));
1431 }
1432
1433 return status;
1434}
1435
1436/* Attach to the LWP specified by PID. Return 0 if successful or -1
1437 if the new LWP could not be attached. */
d6b0e80f 1438
9ee57c33 1439int
93815fbf 1440lin_lwp_attach_lwp (ptid_t ptid)
d6b0e80f 1441{
9ee57c33 1442 struct lwp_info *lp;
7feb7d06 1443 sigset_t prev_mask;
d6b0e80f
AC
1444
1445 gdb_assert (is_lwp (ptid));
1446
7feb7d06 1447 block_child_signals (&prev_mask);
d6b0e80f 1448
9ee57c33 1449 lp = find_lwp_pid (ptid);
d6b0e80f
AC
1450
1451 /* We assume that we're already attached to any LWP that has an id
1452 equal to the overall process id, and to any LWP that is already
1453 in our list of LWPs. If we're not seeing exit events from threads
1454 and we've had PID wraparound since we last tried to stop all threads,
1455 this assumption might be wrong; fortunately, this is very unlikely
1456 to happen. */
9ee57c33 1457 if (GET_LWP (ptid) != GET_PID (ptid) && lp == NULL)
d6b0e80f 1458 {
a0ef4274 1459 int status, cloned = 0, signalled = 0;
d6b0e80f
AC
1460
1461 if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
9ee57c33
DJ
1462 {
1463 /* If we fail to attach to the thread, issue a warning,
1464 but continue. One way this can happen is if thread
e9efe249 1465 creation is interrupted; as of Linux kernel 2.6.19, a
9ee57c33
DJ
1466 bug may place threads in the thread list and then fail
1467 to create them. */
1468 warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
1469 safe_strerror (errno));
7feb7d06 1470 restore_child_signals_mask (&prev_mask);
9ee57c33
DJ
1471 return -1;
1472 }
1473
d6b0e80f
AC
1474 if (debug_linux_nat)
1475 fprintf_unfiltered (gdb_stdlog,
1476 "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
1477 target_pid_to_str (ptid));
1478
a0ef4274 1479 status = linux_nat_post_attach_wait (ptid, 0, &cloned, &signalled);
dacc9cb2
PP
1480 if (!WIFSTOPPED (status))
1481 return -1;
1482
a0ef4274
DJ
1483 lp = add_lwp (ptid);
1484 lp->stopped = 1;
1485 lp->cloned = cloned;
1486 lp->signalled = signalled;
1487 if (WSTOPSIG (status) != SIGSTOP)
d6b0e80f 1488 {
a0ef4274
DJ
1489 lp->resumed = 1;
1490 lp->status = status;
d6b0e80f
AC
1491 }
1492
a0ef4274 1493 target_post_attach (GET_LWP (lp->ptid));
d6b0e80f
AC
1494
1495 if (debug_linux_nat)
1496 {
1497 fprintf_unfiltered (gdb_stdlog,
1498 "LLAL: waitpid %s received %s\n",
1499 target_pid_to_str (ptid),
1500 status_to_str (status));
1501 }
1502 }
1503 else
1504 {
1505 /* We assume that the LWP representing the original process is
1506 already stopped. Mark it as stopped in the data structure
155bd5d1
AC
1507 that the GNU/linux ptrace layer uses to keep track of
1508 threads. Note that this won't have already been done since
1509 the main thread will have, we assume, been stopped by an
1510 attach from a different layer. */
9ee57c33
DJ
1511 if (lp == NULL)
1512 lp = add_lwp (ptid);
d6b0e80f
AC
1513 lp->stopped = 1;
1514 }
9ee57c33 1515
7feb7d06 1516 restore_child_signals_mask (&prev_mask);
9ee57c33 1517 return 0;
d6b0e80f
AC
1518}
1519
b84876c2 1520static void
136d6dae
VP
1521linux_nat_create_inferior (struct target_ops *ops,
1522 char *exec_file, char *allargs, char **env,
b84876c2
PA
1523 int from_tty)
1524{
10568435
JK
1525#ifdef HAVE_PERSONALITY
1526 int personality_orig = 0, personality_set = 0;
1527#endif /* HAVE_PERSONALITY */
b84876c2
PA
1528
1529 /* The fork_child mechanism is synchronous and calls target_wait, so
1530 we have to mask the async mode. */
1531
10568435
JK
1532#ifdef HAVE_PERSONALITY
1533 if (disable_randomization)
1534 {
1535 errno = 0;
1536 personality_orig = personality (0xffffffff);
1537 if (errno == 0 && !(personality_orig & ADDR_NO_RANDOMIZE))
1538 {
1539 personality_set = 1;
1540 personality (personality_orig | ADDR_NO_RANDOMIZE);
1541 }
1542 if (errno != 0 || (personality_set
1543 && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
1544 warning (_("Error disabling address space randomization: %s"),
1545 safe_strerror (errno));
1546 }
1547#endif /* HAVE_PERSONALITY */
1548
136d6dae 1549 linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty);
b84876c2 1550
10568435
JK
1551#ifdef HAVE_PERSONALITY
1552 if (personality_set)
1553 {
1554 errno = 0;
1555 personality (personality_orig);
1556 if (errno != 0)
1557 warning (_("Error restoring address space randomization: %s"),
1558 safe_strerror (errno));
1559 }
1560#endif /* HAVE_PERSONALITY */
b84876c2
PA
1561}
1562
d6b0e80f 1563static void
136d6dae 1564linux_nat_attach (struct target_ops *ops, char *args, int from_tty)
d6b0e80f
AC
1565{
1566 struct lwp_info *lp;
d6b0e80f 1567 int status;
af990527 1568 ptid_t ptid;
d6b0e80f 1569
136d6dae 1570 linux_ops->to_attach (ops, args, from_tty);
d6b0e80f 1571
af990527
PA
1572 /* The ptrace base target adds the main thread with (pid,0,0)
1573 format. Decorate it with lwp info. */
1574 ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
1575 thread_change_ptid (inferior_ptid, ptid);
1576
9f0bdab8 1577 /* Add the initial process as the first LWP to the list. */
af990527 1578 lp = add_lwp (ptid);
a0ef4274
DJ
1579
1580 status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->cloned,
1581 &lp->signalled);
dacc9cb2
PP
1582 if (!WIFSTOPPED (status))
1583 {
1584 if (WIFEXITED (status))
1585 {
1586 int exit_code = WEXITSTATUS (status);
1587
1588 target_terminal_ours ();
1589 target_mourn_inferior ();
1590 if (exit_code == 0)
1591 error (_("Unable to attach: program exited normally."));
1592 else
1593 error (_("Unable to attach: program exited with code %d."),
1594 exit_code);
1595 }
1596 else if (WIFSIGNALED (status))
1597 {
1598 enum target_signal signo;
1599
1600 target_terminal_ours ();
1601 target_mourn_inferior ();
1602
1603 signo = target_signal_from_host (WTERMSIG (status));
1604 error (_("Unable to attach: program terminated with signal "
1605 "%s, %s."),
1606 target_signal_to_name (signo),
1607 target_signal_to_string (signo));
1608 }
1609
1610 internal_error (__FILE__, __LINE__,
1611 _("unexpected status %d for PID %ld"),
1612 status, (long) GET_LWP (ptid));
1613 }
1614
a0ef4274 1615 lp->stopped = 1;
9f0bdab8 1616
a0ef4274 1617 /* Save the wait status to report later. */
d6b0e80f 1618 lp->resumed = 1;
a0ef4274
DJ
1619 if (debug_linux_nat)
1620 fprintf_unfiltered (gdb_stdlog,
1621 "LNA: waitpid %ld, saving status %s\n",
1622 (long) GET_PID (lp->ptid), status_to_str (status));
710151dd 1623
7feb7d06
PA
1624 lp->status = status;
1625
1626 if (target_can_async_p ())
1627 target_async (inferior_event_handler, 0);
d6b0e80f
AC
1628}
1629
a0ef4274
DJ
1630/* Get pending status of LP. */
1631static int
1632get_pending_status (struct lwp_info *lp, int *status)
1633{
ca2163eb
PA
1634 enum target_signal signo = TARGET_SIGNAL_0;
1635
1636 /* If we paused threads momentarily, we may have stored pending
1637 events in lp->status or lp->waitstatus (see stop_wait_callback),
1638 and GDB core hasn't seen any signal for those threads.
1639 Otherwise, the last signal reported to the core is found in the
1640 thread object's stop_signal.
1641
1642 There's a corner case that isn't handled here at present. Only
1643 if the thread stopped with a TARGET_WAITKIND_STOPPED does
1644 stop_signal make sense as a real signal to pass to the inferior.
1645 Some catchpoint related events, like
1646 TARGET_WAITKIND_(V)FORK|EXEC|SYSCALL, have their stop_signal set
1647 to TARGET_SIGNAL_SIGTRAP when the catchpoint triggers. But,
1648 those traps are debug API (ptrace in our case) related and
1649 induced; the inferior wouldn't see them if it wasn't being
1650 traced. Hence, we should never pass them to the inferior, even
1651 when set to pass state. Since this corner case isn't handled by
1652 infrun.c when proceeding with a signal, for consistency, neither
1653 do we handle it here (or elsewhere in the file we check for
1654 signal pass state). Normally SIGTRAP isn't set to pass state, so
1655 this is really a corner case. */
1656
1657 if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
1658 signo = TARGET_SIGNAL_0; /* a pending ptrace event, not a real signal. */
1659 else if (lp->status)
1660 signo = target_signal_from_host (WSTOPSIG (lp->status));
1661 else if (non_stop && !is_executing (lp->ptid))
1662 {
1663 struct thread_info *tp = find_thread_ptid (lp->ptid);
e0881a8e 1664
16c381f0 1665 signo = tp->suspend.stop_signal;
ca2163eb
PA
1666 }
1667 else if (!non_stop)
a0ef4274 1668 {
ca2163eb
PA
1669 struct target_waitstatus last;
1670 ptid_t last_ptid;
4c28f408 1671
ca2163eb 1672 get_last_target_status (&last_ptid, &last);
4c28f408 1673
ca2163eb
PA
1674 if (GET_LWP (lp->ptid) == GET_LWP (last_ptid))
1675 {
e09875d4 1676 struct thread_info *tp = find_thread_ptid (lp->ptid);
e0881a8e 1677
16c381f0 1678 signo = tp->suspend.stop_signal;
4c28f408 1679 }
ca2163eb 1680 }
4c28f408 1681
ca2163eb 1682 *status = 0;
4c28f408 1683
ca2163eb
PA
1684 if (signo == TARGET_SIGNAL_0)
1685 {
1686 if (debug_linux_nat)
1687 fprintf_unfiltered (gdb_stdlog,
1688 "GPT: lwp %s has no pending signal\n",
1689 target_pid_to_str (lp->ptid));
1690 }
1691 else if (!signal_pass_state (signo))
1692 {
1693 if (debug_linux_nat)
3e43a32a
MS
1694 fprintf_unfiltered (gdb_stdlog,
1695 "GPT: lwp %s had signal %s, "
1696 "but it is in no pass state\n",
ca2163eb
PA
1697 target_pid_to_str (lp->ptid),
1698 target_signal_to_string (signo));
a0ef4274 1699 }
a0ef4274 1700 else
4c28f408 1701 {
ca2163eb
PA
1702 *status = W_STOPCODE (target_signal_to_host (signo));
1703
1704 if (debug_linux_nat)
1705 fprintf_unfiltered (gdb_stdlog,
1706 "GPT: lwp %s has pending signal %s\n",
1707 target_pid_to_str (lp->ptid),
1708 target_signal_to_string (signo));
4c28f408 1709 }
a0ef4274
DJ
1710
1711 return 0;
1712}
1713
d6b0e80f
AC
1714static int
1715detach_callback (struct lwp_info *lp, void *data)
1716{
1717 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1718
1719 if (debug_linux_nat && lp->status)
1720 fprintf_unfiltered (gdb_stdlog, "DC: Pending %s for %s on detach.\n",
1721 strsignal (WSTOPSIG (lp->status)),
1722 target_pid_to_str (lp->ptid));
1723
a0ef4274
DJ
1724 /* If there is a pending SIGSTOP, get rid of it. */
1725 if (lp->signalled)
d6b0e80f 1726 {
d6b0e80f
AC
1727 if (debug_linux_nat)
1728 fprintf_unfiltered (gdb_stdlog,
a0ef4274
DJ
1729 "DC: Sending SIGCONT to %s\n",
1730 target_pid_to_str (lp->ptid));
d6b0e80f 1731
a0ef4274 1732 kill_lwp (GET_LWP (lp->ptid), SIGCONT);
d6b0e80f 1733 lp->signalled = 0;
d6b0e80f
AC
1734 }
1735
1736 /* We don't actually detach from the LWP that has an id equal to the
1737 overall process id just yet. */
1738 if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
1739 {
a0ef4274
DJ
1740 int status = 0;
1741
1742 /* Pass on any pending signal for this LWP. */
1743 get_pending_status (lp, &status);
1744
d6b0e80f
AC
1745 errno = 0;
1746 if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
a0ef4274 1747 WSTOPSIG (status)) < 0)
8a3fe4f8 1748 error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
d6b0e80f
AC
1749 safe_strerror (errno));
1750
1751 if (debug_linux_nat)
1752 fprintf_unfiltered (gdb_stdlog,
1753 "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1754 target_pid_to_str (lp->ptid),
7feb7d06 1755 strsignal (WSTOPSIG (status)));
d6b0e80f
AC
1756
1757 delete_lwp (lp->ptid);
1758 }
1759
1760 return 0;
1761}
1762
1763static void
136d6dae 1764linux_nat_detach (struct target_ops *ops, char *args, int from_tty)
d6b0e80f 1765{
b84876c2 1766 int pid;
a0ef4274 1767 int status;
d90e17a7
PA
1768 struct lwp_info *main_lwp;
1769
1770 pid = GET_PID (inferior_ptid);
a0ef4274 1771
b84876c2
PA
1772 if (target_can_async_p ())
1773 linux_nat_async (NULL, 0);
1774
4c28f408
PA
1775 /* Stop all threads before detaching. ptrace requires that the
1776 thread is stopped to sucessfully detach. */
d90e17a7 1777 iterate_over_lwps (pid_to_ptid (pid), stop_callback, NULL);
4c28f408
PA
1778 /* ... and wait until all of them have reported back that
1779 they're no longer running. */
d90e17a7 1780 iterate_over_lwps (pid_to_ptid (pid), stop_wait_callback, NULL);
4c28f408 1781
d90e17a7 1782 iterate_over_lwps (pid_to_ptid (pid), detach_callback, NULL);
d6b0e80f
AC
1783
1784 /* Only the initial process should be left right now. */
d90e17a7
PA
1785 gdb_assert (num_lwps (GET_PID (inferior_ptid)) == 1);
1786
1787 main_lwp = find_lwp_pid (pid_to_ptid (pid));
d6b0e80f 1788
a0ef4274
DJ
1789 /* Pass on any pending signal for the last LWP. */
1790 if ((args == NULL || *args == '\0')
d90e17a7 1791 && get_pending_status (main_lwp, &status) != -1
a0ef4274
DJ
1792 && WIFSTOPPED (status))
1793 {
1794 /* Put the signal number in ARGS so that inf_ptrace_detach will
1795 pass it along with PTRACE_DETACH. */
1796 args = alloca (8);
1797 sprintf (args, "%d", (int) WSTOPSIG (status));
ddabfc73
TT
1798 if (debug_linux_nat)
1799 fprintf_unfiltered (gdb_stdlog,
1800 "LND: Sending signal %s to %s\n",
1801 args,
1802 target_pid_to_str (main_lwp->ptid));
a0ef4274
DJ
1803 }
1804
d90e17a7 1805 delete_lwp (main_lwp->ptid);
b84876c2 1806
7a7d3353
PA
1807 if (forks_exist_p ())
1808 {
1809 /* Multi-fork case. The current inferior_ptid is being detached
1810 from, but there are other viable forks to debug. Detach from
1811 the current fork, and context-switch to the first
1812 available. */
1813 linux_fork_detach (args, from_tty);
1814
1815 if (non_stop && target_can_async_p ())
1816 target_async (inferior_event_handler, 0);
1817 }
1818 else
1819 linux_ops->to_detach (ops, args, from_tty);
d6b0e80f
AC
1820}
1821
1822/* Resume LP. */
1823
1824static int
1825resume_callback (struct lwp_info *lp, void *data)
1826{
6c95b8df
PA
1827 struct inferior *inf = find_inferior_pid (GET_PID (lp->ptid));
1828
1829 if (lp->stopped && inf->vfork_child != NULL)
1830 {
1831 if (debug_linux_nat)
1832 fprintf_unfiltered (gdb_stdlog,
1833 "RC: Not resuming %s (vfork parent)\n",
1834 target_pid_to_str (lp->ptid));
1835 }
1836 else if (lp->stopped && lp->status == 0)
d6b0e80f 1837 {
d90e17a7
PA
1838 if (debug_linux_nat)
1839 fprintf_unfiltered (gdb_stdlog,
a289b8f6 1840 "RC: PTRACE_CONT %s, 0, 0 (resuming sibling)\n",
d90e17a7
PA
1841 target_pid_to_str (lp->ptid));
1842
28439f5e
PA
1843 linux_ops->to_resume (linux_ops,
1844 pid_to_ptid (GET_LWP (lp->ptid)),
a289b8f6 1845 0, TARGET_SIGNAL_0);
d6b0e80f
AC
1846 if (debug_linux_nat)
1847 fprintf_unfiltered (gdb_stdlog,
a289b8f6 1848 "RC: PTRACE_CONT %s, 0, 0 (resume sibling)\n",
d6b0e80f
AC
1849 target_pid_to_str (lp->ptid));
1850 lp->stopped = 0;
a289b8f6 1851 lp->step = 0;
9f0bdab8 1852 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
ebec9a0f 1853 lp->stopped_by_watchpoint = 0;
d6b0e80f 1854 }
57380f4e 1855 else if (lp->stopped && debug_linux_nat)
3e43a32a
MS
1856 fprintf_unfiltered (gdb_stdlog,
1857 "RC: Not resuming sibling %s (has pending)\n",
57380f4e
DJ
1858 target_pid_to_str (lp->ptid));
1859 else if (debug_linux_nat)
3e43a32a
MS
1860 fprintf_unfiltered (gdb_stdlog,
1861 "RC: Not resuming sibling %s (not stopped)\n",
57380f4e 1862 target_pid_to_str (lp->ptid));
d6b0e80f
AC
1863
1864 return 0;
1865}
1866
1867static int
1868resume_clear_callback (struct lwp_info *lp, void *data)
1869{
1870 lp->resumed = 0;
1871 return 0;
1872}
1873
1874static int
1875resume_set_callback (struct lwp_info *lp, void *data)
1876{
1877 lp->resumed = 1;
1878 return 0;
1879}
1880
1881static void
28439f5e
PA
1882linux_nat_resume (struct target_ops *ops,
1883 ptid_t ptid, int step, enum target_signal signo)
d6b0e80f 1884{
7feb7d06 1885 sigset_t prev_mask;
d6b0e80f 1886 struct lwp_info *lp;
d90e17a7 1887 int resume_many;
d6b0e80f 1888
76f50ad1
DJ
1889 if (debug_linux_nat)
1890 fprintf_unfiltered (gdb_stdlog,
1891 "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1892 step ? "step" : "resume",
1893 target_pid_to_str (ptid),
423ec54c
JK
1894 (signo != TARGET_SIGNAL_0
1895 ? strsignal (target_signal_to_host (signo)) : "0"),
76f50ad1
DJ
1896 target_pid_to_str (inferior_ptid));
1897
7feb7d06 1898 block_child_signals (&prev_mask);
b84876c2 1899
d6b0e80f 1900 /* A specific PTID means `step only this process id'. */
d90e17a7
PA
1901 resume_many = (ptid_equal (minus_one_ptid, ptid)
1902 || ptid_is_pid (ptid));
4c28f408 1903
e3e9f5a2
PA
1904 /* Mark the lwps we're resuming as resumed. */
1905 iterate_over_lwps (ptid, resume_set_callback, NULL);
d6b0e80f 1906
d90e17a7
PA
1907 /* See if it's the current inferior that should be handled
1908 specially. */
1909 if (resume_many)
1910 lp = find_lwp_pid (inferior_ptid);
1911 else
1912 lp = find_lwp_pid (ptid);
9f0bdab8 1913 gdb_assert (lp != NULL);
d6b0e80f 1914
9f0bdab8
DJ
1915 /* Remember if we're stepping. */
1916 lp->step = step;
d6b0e80f 1917
9f0bdab8
DJ
1918 /* If we have a pending wait status for this thread, there is no
1919 point in resuming the process. But first make sure that
1920 linux_nat_wait won't preemptively handle the event - we
1921 should never take this short-circuit if we are going to
1922 leave LP running, since we have skipped resuming all the
1923 other threads. This bit of code needs to be synchronized
1924 with linux_nat_wait. */
76f50ad1 1925
9f0bdab8
DJ
1926 if (lp->status && WIFSTOPPED (lp->status))
1927 {
423ec54c 1928 enum target_signal saved_signo;
d6b48e9c 1929 struct inferior *inf;
76f50ad1 1930
d90e17a7 1931 inf = find_inferior_pid (ptid_get_pid (lp->ptid));
d6b48e9c
PA
1932 gdb_assert (inf);
1933 saved_signo = target_signal_from_host (WSTOPSIG (lp->status));
1934
1935 /* Defer to common code if we're gaining control of the
1936 inferior. */
16c381f0 1937 if (inf->control.stop_soon == NO_STOP_QUIETLY
d6b48e9c 1938 && signal_stop_state (saved_signo) == 0
9f0bdab8
DJ
1939 && signal_print_state (saved_signo) == 0
1940 && signal_pass_state (saved_signo) == 1)
d6b0e80f 1941 {
9f0bdab8
DJ
1942 if (debug_linux_nat)
1943 fprintf_unfiltered (gdb_stdlog,
1944 "LLR: Not short circuiting for ignored "
1945 "status 0x%x\n", lp->status);
1946
d6b0e80f
AC
1947 /* FIXME: What should we do if we are supposed to continue
1948 this thread with a signal? */
1949 gdb_assert (signo == TARGET_SIGNAL_0);
9f0bdab8
DJ
1950 signo = saved_signo;
1951 lp->status = 0;
1952 }
1953 }
76f50ad1 1954
6c95b8df 1955 if (lp->status || lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
9f0bdab8
DJ
1956 {
1957 /* FIXME: What should we do if we are supposed to continue
1958 this thread with a signal? */
1959 gdb_assert (signo == TARGET_SIGNAL_0);
76f50ad1 1960
9f0bdab8
DJ
1961 if (debug_linux_nat)
1962 fprintf_unfiltered (gdb_stdlog,
1963 "LLR: Short circuiting for status 0x%x\n",
1964 lp->status);
d6b0e80f 1965
7feb7d06
PA
1966 restore_child_signals_mask (&prev_mask);
1967 if (target_can_async_p ())
1968 {
1969 target_async (inferior_event_handler, 0);
1970 /* Tell the event loop we have something to process. */
1971 async_file_mark ();
1972 }
9f0bdab8 1973 return;
d6b0e80f
AC
1974 }
1975
9f0bdab8
DJ
1976 /* Mark LWP as not stopped to prevent it from being continued by
1977 resume_callback. */
1978 lp->stopped = 0;
1979
d90e17a7
PA
1980 if (resume_many)
1981 iterate_over_lwps (ptid, resume_callback, NULL);
1982
1983 /* Convert to something the lower layer understands. */
1984 ptid = pid_to_ptid (GET_LWP (lp->ptid));
d6b0e80f 1985
28439f5e 1986 linux_ops->to_resume (linux_ops, ptid, step, signo);
9f0bdab8 1987 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
ebec9a0f 1988 lp->stopped_by_watchpoint = 0;
9f0bdab8 1989
d6b0e80f
AC
1990 if (debug_linux_nat)
1991 fprintf_unfiltered (gdb_stdlog,
1992 "LLR: %s %s, %s (resume event thread)\n",
1993 step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1994 target_pid_to_str (ptid),
423ec54c
JK
1995 (signo != TARGET_SIGNAL_0
1996 ? strsignal (target_signal_to_host (signo)) : "0"));
b84876c2 1997
7feb7d06 1998 restore_child_signals_mask (&prev_mask);
b84876c2 1999 if (target_can_async_p ())
8ea051c5 2000 target_async (inferior_event_handler, 0);
d6b0e80f
AC
2001}
2002
c5f62d5f 2003/* Send a signal to an LWP. */
d6b0e80f
AC
2004
2005static int
2006kill_lwp (int lwpid, int signo)
2007{
c5f62d5f
DE
2008 /* Use tkill, if possible, in case we are using nptl threads. If tkill
2009 fails, then we are not using nptl threads and we should be using kill. */
d6b0e80f
AC
2010
2011#ifdef HAVE_TKILL_SYSCALL
c5f62d5f
DE
2012 {
2013 static int tkill_failed;
2014
2015 if (!tkill_failed)
2016 {
2017 int ret;
2018
2019 errno = 0;
2020 ret = syscall (__NR_tkill, lwpid, signo);
2021 if (errno != ENOSYS)
2022 return ret;
2023 tkill_failed = 1;
2024 }
2025 }
d6b0e80f
AC
2026#endif
2027
2028 return kill (lwpid, signo);
2029}
2030
ca2163eb
PA
2031/* Handle a GNU/Linux syscall trap wait response. If we see a syscall
2032 event, check if the core is interested in it: if not, ignore the
2033 event, and keep waiting; otherwise, we need to toggle the LWP's
2034 syscall entry/exit status, since the ptrace event itself doesn't
2035 indicate it, and report the trap to higher layers. */
2036
2037static int
2038linux_handle_syscall_trap (struct lwp_info *lp, int stopping)
2039{
2040 struct target_waitstatus *ourstatus = &lp->waitstatus;
2041 struct gdbarch *gdbarch = target_thread_architecture (lp->ptid);
2042 int syscall_number = (int) gdbarch_get_syscall_number (gdbarch, lp->ptid);
2043
2044 if (stopping)
2045 {
2046 /* If we're stopping threads, there's a SIGSTOP pending, which
2047 makes it so that the LWP reports an immediate syscall return,
2048 followed by the SIGSTOP. Skip seeing that "return" using
2049 PTRACE_CONT directly, and let stop_wait_callback collect the
2050 SIGSTOP. Later when the thread is resumed, a new syscall
2051 entry event. If we didn't do this (and returned 0), we'd
2052 leave a syscall entry pending, and our caller, by using
2053 PTRACE_CONT to collect the SIGSTOP, skips the syscall return
2054 itself. Later, when the user re-resumes this LWP, we'd see
2055 another syscall entry event and we'd mistake it for a return.
2056
2057 If stop_wait_callback didn't force the SIGSTOP out of the LWP
2058 (leaving immediately with LWP->signalled set, without issuing
2059 a PTRACE_CONT), it would still be problematic to leave this
2060 syscall enter pending, as later when the thread is resumed,
2061 it would then see the same syscall exit mentioned above,
2062 followed by the delayed SIGSTOP, while the syscall didn't
2063 actually get to execute. It seems it would be even more
2064 confusing to the user. */
2065
2066 if (debug_linux_nat)
2067 fprintf_unfiltered (gdb_stdlog,
2068 "LHST: ignoring syscall %d "
2069 "for LWP %ld (stopping threads), "
2070 "resuming with PTRACE_CONT for SIGSTOP\n",
2071 syscall_number,
2072 GET_LWP (lp->ptid));
2073
2074 lp->syscall_state = TARGET_WAITKIND_IGNORE;
2075 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2076 return 1;
2077 }
2078
2079 if (catch_syscall_enabled ())
2080 {
2081 /* Always update the entry/return state, even if this particular
2082 syscall isn't interesting to the core now. In async mode,
2083 the user could install a new catchpoint for this syscall
2084 between syscall enter/return, and we'll need to know to
2085 report a syscall return if that happens. */
2086 lp->syscall_state = (lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
2087 ? TARGET_WAITKIND_SYSCALL_RETURN
2088 : TARGET_WAITKIND_SYSCALL_ENTRY);
2089
2090 if (catching_syscall_number (syscall_number))
2091 {
2092 /* Alright, an event to report. */
2093 ourstatus->kind = lp->syscall_state;
2094 ourstatus->value.syscall_number = syscall_number;
2095
2096 if (debug_linux_nat)
2097 fprintf_unfiltered (gdb_stdlog,
2098 "LHST: stopping for %s of syscall %d"
2099 " for LWP %ld\n",
3e43a32a
MS
2100 lp->syscall_state
2101 == TARGET_WAITKIND_SYSCALL_ENTRY
ca2163eb
PA
2102 ? "entry" : "return",
2103 syscall_number,
2104 GET_LWP (lp->ptid));
2105 return 0;
2106 }
2107
2108 if (debug_linux_nat)
2109 fprintf_unfiltered (gdb_stdlog,
2110 "LHST: ignoring %s of syscall %d "
2111 "for LWP %ld\n",
2112 lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
2113 ? "entry" : "return",
2114 syscall_number,
2115 GET_LWP (lp->ptid));
2116 }
2117 else
2118 {
2119 /* If we had been syscall tracing, and hence used PT_SYSCALL
2120 before on this LWP, it could happen that the user removes all
2121 syscall catchpoints before we get to process this event.
2122 There are two noteworthy issues here:
2123
2124 - When stopped at a syscall entry event, resuming with
2125 PT_STEP still resumes executing the syscall and reports a
2126 syscall return.
2127
2128 - Only PT_SYSCALL catches syscall enters. If we last
2129 single-stepped this thread, then this event can't be a
2130 syscall enter. If we last single-stepped this thread, this
2131 has to be a syscall exit.
2132
2133 The points above mean that the next resume, be it PT_STEP or
2134 PT_CONTINUE, can not trigger a syscall trace event. */
2135 if (debug_linux_nat)
2136 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
2137 "LHST: caught syscall event "
2138 "with no syscall catchpoints."
ca2163eb
PA
2139 " %d for LWP %ld, ignoring\n",
2140 syscall_number,
2141 GET_LWP (lp->ptid));
2142 lp->syscall_state = TARGET_WAITKIND_IGNORE;
2143 }
2144
2145 /* The core isn't interested in this event. For efficiency, avoid
2146 stopping all threads only to have the core resume them all again.
2147 Since we're not stopping threads, if we're still syscall tracing
2148 and not stepping, we can't use PTRACE_CONT here, as we'd miss any
2149 subsequent syscall. Simply resume using the inf-ptrace layer,
2150 which knows when to use PT_SYSCALL or PT_CONTINUE. */
2151
2152 /* Note that gdbarch_get_syscall_number may access registers, hence
2153 fill a regcache. */
2154 registers_changed ();
2155 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
2156 lp->step, TARGET_SIGNAL_0);
2157 return 1;
2158}
2159
3d799a95
DJ
2160/* Handle a GNU/Linux extended wait response. If we see a clone
2161 event, we need to add the new LWP to our list (and not report the
2162 trap to higher layers). This function returns non-zero if the
2163 event should be ignored and we should wait again. If STOPPING is
2164 true, the new LWP remains stopped, otherwise it is continued. */
d6b0e80f
AC
2165
2166static int
3d799a95
DJ
2167linux_handle_extended_wait (struct lwp_info *lp, int status,
2168 int stopping)
d6b0e80f 2169{
3d799a95
DJ
2170 int pid = GET_LWP (lp->ptid);
2171 struct target_waitstatus *ourstatus = &lp->waitstatus;
3d799a95 2172 int event = status >> 16;
d6b0e80f 2173
3d799a95
DJ
2174 if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
2175 || event == PTRACE_EVENT_CLONE)
d6b0e80f 2176 {
3d799a95
DJ
2177 unsigned long new_pid;
2178 int ret;
2179
2180 ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
6fc19103 2181
3d799a95
DJ
2182 /* If we haven't already seen the new PID stop, wait for it now. */
2183 if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
2184 {
2185 /* The new child has a pending SIGSTOP. We can't affect it until it
2186 hits the SIGSTOP, but we're already attached. */
2187 ret = my_waitpid (new_pid, &status,
2188 (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
2189 if (ret == -1)
2190 perror_with_name (_("waiting for new child"));
2191 else if (ret != new_pid)
2192 internal_error (__FILE__, __LINE__,
2193 _("wait returned unexpected PID %d"), ret);
2194 else if (!WIFSTOPPED (status))
2195 internal_error (__FILE__, __LINE__,
2196 _("wait returned unexpected status 0x%x"), status);
2197 }
2198
3a3e9ee3 2199 ourstatus->value.related_pid = ptid_build (new_pid, new_pid, 0);
3d799a95 2200
2277426b
PA
2201 if (event == PTRACE_EVENT_FORK
2202 && linux_fork_checkpointing_p (GET_PID (lp->ptid)))
2203 {
2204 struct fork_info *fp;
2205
2206 /* Handle checkpointing by linux-fork.c here as a special
2207 case. We don't want the follow-fork-mode or 'catch fork'
2208 to interfere with this. */
2209
2210 /* This won't actually modify the breakpoint list, but will
2211 physically remove the breakpoints from the child. */
2212 detach_breakpoints (new_pid);
2213
2214 /* Retain child fork in ptrace (stopped) state. */
2215 fp = find_fork_pid (new_pid);
2216 if (!fp)
2217 fp = add_fork (new_pid);
2218
2219 /* Report as spurious, so that infrun doesn't want to follow
2220 this fork. We're actually doing an infcall in
2221 linux-fork.c. */
2222 ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
2223 linux_enable_event_reporting (pid_to_ptid (new_pid));
2224
2225 /* Report the stop to the core. */
2226 return 0;
2227 }
2228
3d799a95
DJ
2229 if (event == PTRACE_EVENT_FORK)
2230 ourstatus->kind = TARGET_WAITKIND_FORKED;
2231 else if (event == PTRACE_EVENT_VFORK)
2232 ourstatus->kind = TARGET_WAITKIND_VFORKED;
6fc19103 2233 else
3d799a95 2234 {
78768c4a
JK
2235 struct lwp_info *new_lp;
2236
3d799a95 2237 ourstatus->kind = TARGET_WAITKIND_IGNORE;
78768c4a 2238
d90e17a7 2239 new_lp = add_lwp (BUILD_LWP (new_pid, GET_PID (lp->ptid)));
3d799a95 2240 new_lp->cloned = 1;
4c28f408 2241 new_lp->stopped = 1;
d6b0e80f 2242
3d799a95
DJ
2243 if (WSTOPSIG (status) != SIGSTOP)
2244 {
2245 /* This can happen if someone starts sending signals to
2246 the new thread before it gets a chance to run, which
2247 have a lower number than SIGSTOP (e.g. SIGUSR1).
2248 This is an unlikely case, and harder to handle for
2249 fork / vfork than for clone, so we do not try - but
2250 we handle it for clone events here. We'll send
2251 the other signal on to the thread below. */
2252
2253 new_lp->signalled = 1;
2254 }
2255 else
2256 status = 0;
d6b0e80f 2257
4c28f408 2258 if (non_stop)
3d799a95 2259 {
4c28f408
PA
2260 /* Add the new thread to GDB's lists as soon as possible
2261 so that:
2262
2263 1) the frontend doesn't have to wait for a stop to
2264 display them, and,
2265
2266 2) we tag it with the correct running state. */
2267
2268 /* If the thread_db layer is active, let it know about
2269 this new thread, and add it to GDB's list. */
2270 if (!thread_db_attach_lwp (new_lp->ptid))
2271 {
2272 /* We're not using thread_db. Add it to GDB's
2273 list. */
2274 target_post_attach (GET_LWP (new_lp->ptid));
2275 add_thread (new_lp->ptid);
2276 }
2277
2278 if (!stopping)
2279 {
2280 set_running (new_lp->ptid, 1);
2281 set_executing (new_lp->ptid, 1);
2282 }
2283 }
2284
ca2163eb
PA
2285 /* Note the need to use the low target ops to resume, to
2286 handle resuming with PT_SYSCALL if we have syscall
2287 catchpoints. */
4c28f408
PA
2288 if (!stopping)
2289 {
423ec54c 2290 enum target_signal signo;
ca2163eb 2291
4c28f408 2292 new_lp->stopped = 0;
3d799a95 2293 new_lp->resumed = 1;
ca2163eb
PA
2294
2295 signo = (status
2296 ? target_signal_from_host (WSTOPSIG (status))
2297 : TARGET_SIGNAL_0);
2298
2299 linux_ops->to_resume (linux_ops, pid_to_ptid (new_pid),
2300 0, signo);
3d799a95 2301 }
ad34eb2f
JK
2302 else
2303 {
2304 if (status != 0)
2305 {
2306 /* We created NEW_LP so it cannot yet contain STATUS. */
2307 gdb_assert (new_lp->status == 0);
2308
2309 /* Save the wait status to report later. */
2310 if (debug_linux_nat)
2311 fprintf_unfiltered (gdb_stdlog,
2312 "LHEW: waitpid of new LWP %ld, "
2313 "saving status %s\n",
2314 (long) GET_LWP (new_lp->ptid),
2315 status_to_str (status));
2316 new_lp->status = status;
2317 }
2318 }
d6b0e80f 2319
3d799a95
DJ
2320 if (debug_linux_nat)
2321 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
2322 "LHEW: Got clone event "
2323 "from LWP %ld, resuming\n",
3d799a95 2324 GET_LWP (lp->ptid));
ca2163eb
PA
2325 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
2326 0, TARGET_SIGNAL_0);
3d799a95
DJ
2327
2328 return 1;
2329 }
2330
2331 return 0;
d6b0e80f
AC
2332 }
2333
3d799a95
DJ
2334 if (event == PTRACE_EVENT_EXEC)
2335 {
a75724bc
PA
2336 if (debug_linux_nat)
2337 fprintf_unfiltered (gdb_stdlog,
2338 "LHEW: Got exec event from LWP %ld\n",
2339 GET_LWP (lp->ptid));
2340
3d799a95
DJ
2341 ourstatus->kind = TARGET_WAITKIND_EXECD;
2342 ourstatus->value.execd_pathname
6d8fd2b7 2343 = xstrdup (linux_child_pid_to_exec_file (pid));
3d799a95 2344
6c95b8df
PA
2345 return 0;
2346 }
2347
2348 if (event == PTRACE_EVENT_VFORK_DONE)
2349 {
2350 if (current_inferior ()->waiting_for_vfork_done)
3d799a95 2351 {
6c95b8df 2352 if (debug_linux_nat)
3e43a32a
MS
2353 fprintf_unfiltered (gdb_stdlog,
2354 "LHEW: Got expected PTRACE_EVENT_"
2355 "VFORK_DONE from LWP %ld: stopping\n",
6c95b8df 2356 GET_LWP (lp->ptid));
3d799a95 2357
6c95b8df
PA
2358 ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
2359 return 0;
3d799a95
DJ
2360 }
2361
6c95b8df 2362 if (debug_linux_nat)
3e43a32a
MS
2363 fprintf_unfiltered (gdb_stdlog,
2364 "LHEW: Got PTRACE_EVENT_VFORK_DONE "
2365 "from LWP %ld: resuming\n",
6c95b8df
PA
2366 GET_LWP (lp->ptid));
2367 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2368 return 1;
3d799a95
DJ
2369 }
2370
2371 internal_error (__FILE__, __LINE__,
2372 _("unknown ptrace event %d"), event);
d6b0e80f
AC
2373}
2374
2375/* Wait for LP to stop. Returns the wait status, or 0 if the LWP has
2376 exited. */
2377
2378static int
2379wait_lwp (struct lwp_info *lp)
2380{
2381 pid_t pid;
2382 int status;
2383 int thread_dead = 0;
2384
2385 gdb_assert (!lp->stopped);
2386 gdb_assert (lp->status == 0);
2387
58aecb61 2388 pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
d6b0e80f
AC
2389 if (pid == -1 && errno == ECHILD)
2390 {
58aecb61 2391 pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
d6b0e80f
AC
2392 if (pid == -1 && errno == ECHILD)
2393 {
2394 /* The thread has previously exited. We need to delete it
2395 now because, for some vendor 2.4 kernels with NPTL
2396 support backported, there won't be an exit event unless
2397 it is the main thread. 2.6 kernels will report an exit
2398 event for each thread that exits, as expected. */
2399 thread_dead = 1;
2400 if (debug_linux_nat)
2401 fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
2402 target_pid_to_str (lp->ptid));
2403 }
2404 }
2405
2406 if (!thread_dead)
2407 {
2408 gdb_assert (pid == GET_LWP (lp->ptid));
2409
2410 if (debug_linux_nat)
2411 {
2412 fprintf_unfiltered (gdb_stdlog,
2413 "WL: waitpid %s received %s\n",
2414 target_pid_to_str (lp->ptid),
2415 status_to_str (status));
2416 }
2417 }
2418
2419 /* Check if the thread has exited. */
2420 if (WIFEXITED (status) || WIFSIGNALED (status))
2421 {
2422 thread_dead = 1;
2423 if (debug_linux_nat)
2424 fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
2425 target_pid_to_str (lp->ptid));
2426 }
2427
2428 if (thread_dead)
2429 {
e26af52f 2430 exit_lwp (lp);
d6b0e80f
AC
2431 return 0;
2432 }
2433
2434 gdb_assert (WIFSTOPPED (status));
2435
ca2163eb
PA
2436 /* Handle GNU/Linux's syscall SIGTRAPs. */
2437 if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
2438 {
2439 /* No longer need the sysgood bit. The ptrace event ends up
2440 recorded in lp->waitstatus if we care for it. We can carry
2441 on handling the event like a regular SIGTRAP from here
2442 on. */
2443 status = W_STOPCODE (SIGTRAP);
2444 if (linux_handle_syscall_trap (lp, 1))
2445 return wait_lwp (lp);
2446 }
2447
d6b0e80f
AC
2448 /* Handle GNU/Linux's extended waitstatus for trace events. */
2449 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
2450 {
2451 if (debug_linux_nat)
2452 fprintf_unfiltered (gdb_stdlog,
2453 "WL: Handling extended status 0x%06x\n",
2454 status);
3d799a95 2455 if (linux_handle_extended_wait (lp, status, 1))
d6b0e80f
AC
2456 return wait_lwp (lp);
2457 }
2458
2459 return status;
2460}
2461
9f0bdab8
DJ
2462/* Save the most recent siginfo for LP. This is currently only called
2463 for SIGTRAP; some ports use the si_addr field for
2464 target_stopped_data_address. In the future, it may also be used to
2465 restore the siginfo of requeued signals. */
2466
2467static void
2468save_siginfo (struct lwp_info *lp)
2469{
2470 errno = 0;
2471 ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid),
2472 (PTRACE_TYPE_ARG3) 0, &lp->siginfo);
2473
2474 if (errno != 0)
2475 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
2476}
2477
d6b0e80f
AC
2478/* Send a SIGSTOP to LP. */
2479
2480static int
2481stop_callback (struct lwp_info *lp, void *data)
2482{
2483 if (!lp->stopped && !lp->signalled)
2484 {
2485 int ret;
2486
2487 if (debug_linux_nat)
2488 {
2489 fprintf_unfiltered (gdb_stdlog,
2490 "SC: kill %s **<SIGSTOP>**\n",
2491 target_pid_to_str (lp->ptid));
2492 }
2493 errno = 0;
2494 ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
2495 if (debug_linux_nat)
2496 {
2497 fprintf_unfiltered (gdb_stdlog,
2498 "SC: lwp kill %d %s\n",
2499 ret,
2500 errno ? safe_strerror (errno) : "ERRNO-OK");
2501 }
2502
2503 lp->signalled = 1;
2504 gdb_assert (lp->status == 0);
2505 }
2506
2507 return 0;
2508}
2509
57380f4e 2510/* Return non-zero if LWP PID has a pending SIGINT. */
d6b0e80f
AC
2511
2512static int
57380f4e
DJ
2513linux_nat_has_pending_sigint (int pid)
2514{
2515 sigset_t pending, blocked, ignored;
57380f4e
DJ
2516
2517 linux_proc_pending_signals (pid, &pending, &blocked, &ignored);
2518
2519 if (sigismember (&pending, SIGINT)
2520 && !sigismember (&ignored, SIGINT))
2521 return 1;
2522
2523 return 0;
2524}
2525
2526/* Set a flag in LP indicating that we should ignore its next SIGINT. */
2527
2528static int
2529set_ignore_sigint (struct lwp_info *lp, void *data)
d6b0e80f 2530{
57380f4e
DJ
2531 /* If a thread has a pending SIGINT, consume it; otherwise, set a
2532 flag to consume the next one. */
2533 if (lp->stopped && lp->status != 0 && WIFSTOPPED (lp->status)
2534 && WSTOPSIG (lp->status) == SIGINT)
2535 lp->status = 0;
2536 else
2537 lp->ignore_sigint = 1;
2538
2539 return 0;
2540}
2541
2542/* If LP does not have a SIGINT pending, then clear the ignore_sigint flag.
2543 This function is called after we know the LWP has stopped; if the LWP
2544 stopped before the expected SIGINT was delivered, then it will never have
2545 arrived. Also, if the signal was delivered to a shared queue and consumed
2546 by a different thread, it will never be delivered to this LWP. */
d6b0e80f 2547
57380f4e
DJ
2548static void
2549maybe_clear_ignore_sigint (struct lwp_info *lp)
2550{
2551 if (!lp->ignore_sigint)
2552 return;
2553
2554 if (!linux_nat_has_pending_sigint (GET_LWP (lp->ptid)))
2555 {
2556 if (debug_linux_nat)
2557 fprintf_unfiltered (gdb_stdlog,
2558 "MCIS: Clearing bogus flag for %s\n",
2559 target_pid_to_str (lp->ptid));
2560 lp->ignore_sigint = 0;
2561 }
2562}
2563
ebec9a0f
PA
2564/* Fetch the possible triggered data watchpoint info and store it in
2565 LP.
2566
2567 On some archs, like x86, that use debug registers to set
2568 watchpoints, it's possible that the way to know which watched
2569 address trapped, is to check the register that is used to select
2570 which address to watch. Problem is, between setting the watchpoint
2571 and reading back which data address trapped, the user may change
2572 the set of watchpoints, and, as a consequence, GDB changes the
2573 debug registers in the inferior. To avoid reading back a stale
2574 stopped-data-address when that happens, we cache in LP the fact
2575 that a watchpoint trapped, and the corresponding data address, as
2576 soon as we see LP stop with a SIGTRAP. If GDB changes the debug
2577 registers meanwhile, we have the cached data we can rely on. */
2578
2579static void
2580save_sigtrap (struct lwp_info *lp)
2581{
2582 struct cleanup *old_chain;
2583
2584 if (linux_ops->to_stopped_by_watchpoint == NULL)
2585 {
2586 lp->stopped_by_watchpoint = 0;
2587 return;
2588 }
2589
2590 old_chain = save_inferior_ptid ();
2591 inferior_ptid = lp->ptid;
2592
2593 lp->stopped_by_watchpoint = linux_ops->to_stopped_by_watchpoint ();
2594
2595 if (lp->stopped_by_watchpoint)
2596 {
2597 if (linux_ops->to_stopped_data_address != NULL)
2598 lp->stopped_data_address_p =
2599 linux_ops->to_stopped_data_address (&current_target,
2600 &lp->stopped_data_address);
2601 else
2602 lp->stopped_data_address_p = 0;
2603 }
2604
2605 do_cleanups (old_chain);
2606}
2607
2608/* See save_sigtrap. */
2609
2610static int
2611linux_nat_stopped_by_watchpoint (void)
2612{
2613 struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2614
2615 gdb_assert (lp != NULL);
2616
2617 return lp->stopped_by_watchpoint;
2618}
2619
2620static int
2621linux_nat_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
2622{
2623 struct lwp_info *lp = find_lwp_pid (inferior_ptid);
2624
2625 gdb_assert (lp != NULL);
2626
2627 *addr_p = lp->stopped_data_address;
2628
2629 return lp->stopped_data_address_p;
2630}
2631
26ab7092
JK
2632/* Commonly any breakpoint / watchpoint generate only SIGTRAP. */
2633
2634static int
2635sigtrap_is_event (int status)
2636{
2637 return WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP;
2638}
2639
2640/* SIGTRAP-like events recognizer. */
2641
2642static int (*linux_nat_status_is_event) (int status) = sigtrap_is_event;
2643
00390b84
JK
2644/* Check for SIGTRAP-like events in LP. */
2645
2646static int
2647linux_nat_lp_status_is_event (struct lwp_info *lp)
2648{
2649 /* We check for lp->waitstatus in addition to lp->status, because we can
2650 have pending process exits recorded in lp->status
2651 and W_EXITCODE(0,0) == 0. We should probably have an additional
2652 lp->status_p flag. */
2653
2654 return (lp->waitstatus.kind == TARGET_WAITKIND_IGNORE
2655 && linux_nat_status_is_event (lp->status));
2656}
2657
26ab7092
JK
2658/* Set alternative SIGTRAP-like events recognizer. If
2659 breakpoint_inserted_here_p there then gdbarch_decr_pc_after_break will be
2660 applied. */
2661
2662void
2663linux_nat_set_status_is_event (struct target_ops *t,
2664 int (*status_is_event) (int status))
2665{
2666 linux_nat_status_is_event = status_is_event;
2667}
2668
57380f4e
DJ
2669/* Wait until LP is stopped. */
2670
2671static int
2672stop_wait_callback (struct lwp_info *lp, void *data)
2673{
6c95b8df
PA
2674 struct inferior *inf = find_inferior_pid (GET_PID (lp->ptid));
2675
2676 /* If this is a vfork parent, bail out, it is not going to report
2677 any SIGSTOP until the vfork is done with. */
2678 if (inf->vfork_child != NULL)
2679 return 0;
2680
d6b0e80f
AC
2681 if (!lp->stopped)
2682 {
2683 int status;
2684
2685 status = wait_lwp (lp);
2686 if (status == 0)
2687 return 0;
2688
57380f4e
DJ
2689 if (lp->ignore_sigint && WIFSTOPPED (status)
2690 && WSTOPSIG (status) == SIGINT)
d6b0e80f 2691 {
57380f4e 2692 lp->ignore_sigint = 0;
d6b0e80f
AC
2693
2694 errno = 0;
2695 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2696 if (debug_linux_nat)
2697 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
2698 "PTRACE_CONT %s, 0, 0 (%s) "
2699 "(discarding SIGINT)\n",
d6b0e80f
AC
2700 target_pid_to_str (lp->ptid),
2701 errno ? safe_strerror (errno) : "OK");
2702
57380f4e 2703 return stop_wait_callback (lp, NULL);
d6b0e80f
AC
2704 }
2705
57380f4e
DJ
2706 maybe_clear_ignore_sigint (lp);
2707
d6b0e80f
AC
2708 if (WSTOPSIG (status) != SIGSTOP)
2709 {
26ab7092 2710 if (linux_nat_status_is_event (status))
d6b0e80f
AC
2711 {
2712 /* If a LWP other than the LWP that we're reporting an
2713 event for has hit a GDB breakpoint (as opposed to
2714 some random trap signal), then just arrange for it to
2715 hit it again later. We don't keep the SIGTRAP status
2716 and don't forward the SIGTRAP signal to the LWP. We
2717 will handle the current event, eventually we will
2718 resume all LWPs, and this one will get its breakpoint
2719 trap again.
2720
2721 If we do not do this, then we run the risk that the
2722 user will delete or disable the breakpoint, but the
2723 thread will have already tripped on it. */
2724
9f0bdab8
DJ
2725 /* Save the trap's siginfo in case we need it later. */
2726 save_siginfo (lp);
2727
ebec9a0f
PA
2728 save_sigtrap (lp);
2729
d6b0e80f
AC
2730 /* Now resume this LWP and get the SIGSTOP event. */
2731 errno = 0;
2732 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2733 if (debug_linux_nat)
2734 {
2735 fprintf_unfiltered (gdb_stdlog,
2736 "PTRACE_CONT %s, 0, 0 (%s)\n",
2737 target_pid_to_str (lp->ptid),
2738 errno ? safe_strerror (errno) : "OK");
2739
2740 fprintf_unfiltered (gdb_stdlog,
2741 "SWC: Candidate SIGTRAP event in %s\n",
2742 target_pid_to_str (lp->ptid));
2743 }
710151dd
PA
2744 /* Hold this event/waitstatus while we check to see if
2745 there are any more (we still want to get that SIGSTOP). */
57380f4e 2746 stop_wait_callback (lp, NULL);
710151dd 2747
7feb7d06
PA
2748 /* Hold the SIGTRAP for handling by linux_nat_wait. If
2749 there's another event, throw it back into the
2750 queue. */
2751 if (lp->status)
710151dd 2752 {
7feb7d06
PA
2753 if (debug_linux_nat)
2754 fprintf_unfiltered (gdb_stdlog,
2755 "SWC: kill %s, %s\n",
2756 target_pid_to_str (lp->ptid),
2757 status_to_str ((int) status));
2758 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
d6b0e80f 2759 }
7feb7d06
PA
2760
2761 /* Save the sigtrap event. */
2762 lp->status = status;
d6b0e80f
AC
2763 return 0;
2764 }
2765 else
2766 {
2767 /* The thread was stopped with a signal other than
2768 SIGSTOP, and didn't accidentally trip a breakpoint. */
2769
2770 if (debug_linux_nat)
2771 {
2772 fprintf_unfiltered (gdb_stdlog,
2773 "SWC: Pending event %s in %s\n",
2774 status_to_str ((int) status),
2775 target_pid_to_str (lp->ptid));
2776 }
2777 /* Now resume this LWP and get the SIGSTOP event. */
2778 errno = 0;
2779 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2780 if (debug_linux_nat)
2781 fprintf_unfiltered (gdb_stdlog,
2782 "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
2783 target_pid_to_str (lp->ptid),
2784 errno ? safe_strerror (errno) : "OK");
2785
2786 /* Hold this event/waitstatus while we check to see if
2787 there are any more (we still want to get that SIGSTOP). */
57380f4e 2788 stop_wait_callback (lp, NULL);
710151dd
PA
2789
2790 /* If the lp->status field is still empty, use it to
2791 hold this event. If not, then this event must be
2792 returned to the event queue of the LWP. */
7feb7d06 2793 if (lp->status)
d6b0e80f
AC
2794 {
2795 if (debug_linux_nat)
2796 {
2797 fprintf_unfiltered (gdb_stdlog,
2798 "SWC: kill %s, %s\n",
2799 target_pid_to_str (lp->ptid),
2800 status_to_str ((int) status));
2801 }
2802 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
2803 }
710151dd
PA
2804 else
2805 lp->status = status;
d6b0e80f
AC
2806 return 0;
2807 }
2808 }
2809 else
2810 {
2811 /* We caught the SIGSTOP that we intended to catch, so
2812 there's no SIGSTOP pending. */
2813 lp->stopped = 1;
2814 lp->signalled = 0;
2815 }
2816 }
2817
2818 return 0;
2819}
2820
d6b0e80f
AC
2821/* Return non-zero if LP has a wait status pending. */
2822
2823static int
2824status_callback (struct lwp_info *lp, void *data)
2825{
2826 /* Only report a pending wait status if we pretend that this has
2827 indeed been resumed. */
ca2163eb
PA
2828 if (!lp->resumed)
2829 return 0;
2830
2831 if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2832 {
2833 /* A ptrace event, like PTRACE_FORK|VFORK|EXEC, syscall event,
2834 or a a pending process exit. Note that `W_EXITCODE(0,0) ==
2835 0', so a clean process exit can not be stored pending in
2836 lp->status, it is indistinguishable from
2837 no-pending-status. */
2838 return 1;
2839 }
2840
2841 if (lp->status != 0)
2842 return 1;
2843
2844 return 0;
d6b0e80f
AC
2845}
2846
2847/* Return non-zero if LP isn't stopped. */
2848
2849static int
2850running_callback (struct lwp_info *lp, void *data)
2851{
2852 return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
2853}
2854
2855/* Count the LWP's that have had events. */
2856
2857static int
2858count_events_callback (struct lwp_info *lp, void *data)
2859{
2860 int *count = data;
2861
2862 gdb_assert (count != NULL);
2863
e09490f1 2864 /* Count only resumed LWPs that have a SIGTRAP event pending. */
00390b84 2865 if (lp->resumed && linux_nat_lp_status_is_event (lp))
d6b0e80f
AC
2866 (*count)++;
2867
2868 return 0;
2869}
2870
2871/* Select the LWP (if any) that is currently being single-stepped. */
2872
2873static int
2874select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2875{
2876 if (lp->step && lp->status != 0)
2877 return 1;
2878 else
2879 return 0;
2880}
2881
2882/* Select the Nth LWP that has had a SIGTRAP event. */
2883
2884static int
2885select_event_lwp_callback (struct lwp_info *lp, void *data)
2886{
2887 int *selector = data;
2888
2889 gdb_assert (selector != NULL);
2890
e09490f1 2891 /* Select only resumed LWPs that have a SIGTRAP event pending. */
00390b84 2892 if (lp->resumed && linux_nat_lp_status_is_event (lp))
d6b0e80f
AC
2893 if ((*selector)-- == 0)
2894 return 1;
2895
2896 return 0;
2897}
2898
710151dd
PA
2899static int
2900cancel_breakpoint (struct lwp_info *lp)
2901{
2902 /* Arrange for a breakpoint to be hit again later. We don't keep
2903 the SIGTRAP status and don't forward the SIGTRAP signal to the
2904 LWP. We will handle the current event, eventually we will resume
2905 this LWP, and this breakpoint will trap again.
2906
2907 If we do not do this, then we run the risk that the user will
2908 delete or disable the breakpoint, but the LWP will have already
2909 tripped on it. */
2910
515630c5
UW
2911 struct regcache *regcache = get_thread_regcache (lp->ptid);
2912 struct gdbarch *gdbarch = get_regcache_arch (regcache);
2913 CORE_ADDR pc;
2914
2915 pc = regcache_read_pc (regcache) - gdbarch_decr_pc_after_break (gdbarch);
6c95b8df 2916 if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
710151dd
PA
2917 {
2918 if (debug_linux_nat)
2919 fprintf_unfiltered (gdb_stdlog,
2920 "CB: Push back breakpoint for %s\n",
2921 target_pid_to_str (lp->ptid));
2922
2923 /* Back up the PC if necessary. */
515630c5
UW
2924 if (gdbarch_decr_pc_after_break (gdbarch))
2925 regcache_write_pc (regcache, pc);
2926
710151dd
PA
2927 return 1;
2928 }
2929 return 0;
2930}
2931
d6b0e80f
AC
2932static int
2933cancel_breakpoints_callback (struct lwp_info *lp, void *data)
2934{
2935 struct lwp_info *event_lp = data;
2936
2937 /* Leave the LWP that has been elected to receive a SIGTRAP alone. */
2938 if (lp == event_lp)
2939 return 0;
2940
2941 /* If a LWP other than the LWP that we're reporting an event for has
2942 hit a GDB breakpoint (as opposed to some random trap signal),
2943 then just arrange for it to hit it again later. We don't keep
2944 the SIGTRAP status and don't forward the SIGTRAP signal to the
2945 LWP. We will handle the current event, eventually we will resume
2946 all LWPs, and this one will get its breakpoint trap again.
2947
2948 If we do not do this, then we run the risk that the user will
2949 delete or disable the breakpoint, but the LWP will have already
2950 tripped on it. */
2951
00390b84 2952 if (linux_nat_lp_status_is_event (lp)
710151dd
PA
2953 && cancel_breakpoint (lp))
2954 /* Throw away the SIGTRAP. */
2955 lp->status = 0;
d6b0e80f
AC
2956
2957 return 0;
2958}
2959
2960/* Select one LWP out of those that have events pending. */
2961
2962static void
d90e17a7 2963select_event_lwp (ptid_t filter, struct lwp_info **orig_lp, int *status)
d6b0e80f
AC
2964{
2965 int num_events = 0;
2966 int random_selector;
2967 struct lwp_info *event_lp;
2968
ac264b3b 2969 /* Record the wait status for the original LWP. */
d6b0e80f
AC
2970 (*orig_lp)->status = *status;
2971
2972 /* Give preference to any LWP that is being single-stepped. */
d90e17a7
PA
2973 event_lp = iterate_over_lwps (filter,
2974 select_singlestep_lwp_callback, NULL);
d6b0e80f
AC
2975 if (event_lp != NULL)
2976 {
2977 if (debug_linux_nat)
2978 fprintf_unfiltered (gdb_stdlog,
2979 "SEL: Select single-step %s\n",
2980 target_pid_to_str (event_lp->ptid));
2981 }
2982 else
2983 {
2984 /* No single-stepping LWP. Select one at random, out of those
2985 which have had SIGTRAP events. */
2986
2987 /* First see how many SIGTRAP events we have. */
d90e17a7 2988 iterate_over_lwps (filter, count_events_callback, &num_events);
d6b0e80f
AC
2989
2990 /* Now randomly pick a LWP out of those that have had a SIGTRAP. */
2991 random_selector = (int)
2992 ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2993
2994 if (debug_linux_nat && num_events > 1)
2995 fprintf_unfiltered (gdb_stdlog,
2996 "SEL: Found %d SIGTRAP events, selecting #%d\n",
2997 num_events, random_selector);
2998
d90e17a7
PA
2999 event_lp = iterate_over_lwps (filter,
3000 select_event_lwp_callback,
d6b0e80f
AC
3001 &random_selector);
3002 }
3003
3004 if (event_lp != NULL)
3005 {
3006 /* Switch the event LWP. */
3007 *orig_lp = event_lp;
3008 *status = event_lp->status;
3009 }
3010
3011 /* Flush the wait status for the event LWP. */
3012 (*orig_lp)->status = 0;
3013}
3014
3015/* Return non-zero if LP has been resumed. */
3016
3017static int
3018resumed_callback (struct lwp_info *lp, void *data)
3019{
3020 return lp->resumed;
3021}
3022
d6b0e80f
AC
3023/* Stop an active thread, verify it still exists, then resume it. */
3024
3025static int
3026stop_and_resume_callback (struct lwp_info *lp, void *data)
3027{
3028 struct lwp_info *ptr;
3029
3030 if (!lp->stopped && !lp->signalled)
3031 {
3032 stop_callback (lp, NULL);
3033 stop_wait_callback (lp, NULL);
3034 /* Resume if the lwp still exists. */
3035 for (ptr = lwp_list; ptr; ptr = ptr->next)
3036 if (lp == ptr)
3037 {
3038 resume_callback (lp, NULL);
3039 resume_set_callback (lp, NULL);
3040 }
3041 }
3042 return 0;
3043}
3044
02f3fc28 3045/* Check if we should go on and pass this event to common code.
fa2c6a57 3046 Return the affected lwp if we are, or NULL otherwise. */
02f3fc28
PA
3047static struct lwp_info *
3048linux_nat_filter_event (int lwpid, int status, int options)
3049{
3050 struct lwp_info *lp;
3051
3052 lp = find_lwp_pid (pid_to_ptid (lwpid));
3053
3054 /* Check for stop events reported by a process we didn't already
3055 know about - anything not already in our LWP list.
3056
3057 If we're expecting to receive stopped processes after
3058 fork, vfork, and clone events, then we'll just add the
3059 new one to our list and go back to waiting for the event
3060 to be reported - the stopped process might be returned
3061 from waitpid before or after the event is. */
3062 if (WIFSTOPPED (status) && !lp)
3063 {
3064 linux_record_stopped_pid (lwpid, status);
3065 return NULL;
3066 }
3067
3068 /* Make sure we don't report an event for the exit of an LWP not in
3069 our list, i.e. not part of the current process. This can happen
3070 if we detach from a program we original forked and then it
3071 exits. */
3072 if (!WIFSTOPPED (status) && !lp)
3073 return NULL;
3074
3075 /* NOTE drow/2003-06-17: This code seems to be meant for debugging
3076 CLONE_PTRACE processes which do not use the thread library -
3077 otherwise we wouldn't find the new LWP this way. That doesn't
3078 currently work, and the following code is currently unreachable
3079 due to the two blocks above. If it's fixed some day, this code
3080 should be broken out into a function so that we can also pick up
3081 LWPs from the new interface. */
3082 if (!lp)
3083 {
3084 lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
3085 if (options & __WCLONE)
3086 lp->cloned = 1;
3087
3088 gdb_assert (WIFSTOPPED (status)
3089 && WSTOPSIG (status) == SIGSTOP);
3090 lp->signalled = 1;
3091
3092 if (!in_thread_list (inferior_ptid))
3093 {
3094 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
3095 GET_PID (inferior_ptid));
3096 add_thread (inferior_ptid);
3097 }
3098
3099 add_thread (lp->ptid);
3100 }
3101
ca2163eb
PA
3102 /* Handle GNU/Linux's syscall SIGTRAPs. */
3103 if (WIFSTOPPED (status) && WSTOPSIG (status) == SYSCALL_SIGTRAP)
3104 {
3105 /* No longer need the sysgood bit. The ptrace event ends up
3106 recorded in lp->waitstatus if we care for it. We can carry
3107 on handling the event like a regular SIGTRAP from here
3108 on. */
3109 status = W_STOPCODE (SIGTRAP);
3110 if (linux_handle_syscall_trap (lp, 0))
3111 return NULL;
3112 }
02f3fc28 3113
ca2163eb
PA
3114 /* Handle GNU/Linux's extended waitstatus for trace events. */
3115 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
02f3fc28
PA
3116 {
3117 if (debug_linux_nat)
3118 fprintf_unfiltered (gdb_stdlog,
3119 "LLW: Handling extended status 0x%06x\n",
3120 status);
3121 if (linux_handle_extended_wait (lp, status, 0))
3122 return NULL;
3123 }
3124
26ab7092 3125 if (linux_nat_status_is_event (status))
ebec9a0f
PA
3126 {
3127 /* Save the trap's siginfo in case we need it later. */
3128 save_siginfo (lp);
3129
3130 save_sigtrap (lp);
3131 }
ca2163eb 3132
02f3fc28 3133 /* Check if the thread has exited. */
d90e17a7
PA
3134 if ((WIFEXITED (status) || WIFSIGNALED (status))
3135 && num_lwps (GET_PID (lp->ptid)) > 1)
02f3fc28 3136 {
9db03742
JB
3137 /* If this is the main thread, we must stop all threads and verify
3138 if they are still alive. This is because in the nptl thread model
3139 on Linux 2.4, there is no signal issued for exiting LWPs
02f3fc28
PA
3140 other than the main thread. We only get the main thread exit
3141 signal once all child threads have already exited. If we
3142 stop all the threads and use the stop_wait_callback to check
3143 if they have exited we can determine whether this signal
3144 should be ignored or whether it means the end of the debugged
3145 application, regardless of which threading model is being
5d3b6af6 3146 used. */
02f3fc28
PA
3147 if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
3148 {
3149 lp->stopped = 1;
d90e17a7
PA
3150 iterate_over_lwps (pid_to_ptid (GET_PID (lp->ptid)),
3151 stop_and_resume_callback, NULL);
02f3fc28
PA
3152 }
3153
3154 if (debug_linux_nat)
3155 fprintf_unfiltered (gdb_stdlog,
3156 "LLW: %s exited.\n",
3157 target_pid_to_str (lp->ptid));
3158
d90e17a7 3159 if (num_lwps (GET_PID (lp->ptid)) > 1)
9db03742
JB
3160 {
3161 /* If there is at least one more LWP, then the exit signal
3162 was not the end of the debugged application and should be
3163 ignored. */
3164 exit_lwp (lp);
3165 return NULL;
3166 }
02f3fc28
PA
3167 }
3168
3169 /* Check if the current LWP has previously exited. In the nptl
3170 thread model, LWPs other than the main thread do not issue
3171 signals when they exit so we must check whenever the thread has
3172 stopped. A similar check is made in stop_wait_callback(). */
d90e17a7 3173 if (num_lwps (GET_PID (lp->ptid)) > 1 && !linux_thread_alive (lp->ptid))
02f3fc28 3174 {
d90e17a7
PA
3175 ptid_t ptid = pid_to_ptid (GET_PID (lp->ptid));
3176
02f3fc28
PA
3177 if (debug_linux_nat)
3178 fprintf_unfiltered (gdb_stdlog,
3179 "LLW: %s exited.\n",
3180 target_pid_to_str (lp->ptid));
3181
3182 exit_lwp (lp);
3183
3184 /* Make sure there is at least one thread running. */
d90e17a7 3185 gdb_assert (iterate_over_lwps (ptid, running_callback, NULL));
02f3fc28
PA
3186
3187 /* Discard the event. */
3188 return NULL;
3189 }
3190
3191 /* Make sure we don't report a SIGSTOP that we sent ourselves in
3192 an attempt to stop an LWP. */
3193 if (lp->signalled
3194 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
3195 {
3196 if (debug_linux_nat)
3197 fprintf_unfiltered (gdb_stdlog,
3198 "LLW: Delayed SIGSTOP caught for %s.\n",
3199 target_pid_to_str (lp->ptid));
3200
3201 /* This is a delayed SIGSTOP. */
3202 lp->signalled = 0;
3203
3204 registers_changed ();
3205
28439f5e 3206 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
02f3fc28
PA
3207 lp->step, TARGET_SIGNAL_0);
3208 if (debug_linux_nat)
3209 fprintf_unfiltered (gdb_stdlog,
3210 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
3211 lp->step ?
3212 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3213 target_pid_to_str (lp->ptid));
3214
3215 lp->stopped = 0;
3216 gdb_assert (lp->resumed);
3217
3218 /* Discard the event. */
3219 return NULL;
3220 }
3221
57380f4e
DJ
3222 /* Make sure we don't report a SIGINT that we have already displayed
3223 for another thread. */
3224 if (lp->ignore_sigint
3225 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT)
3226 {
3227 if (debug_linux_nat)
3228 fprintf_unfiltered (gdb_stdlog,
3229 "LLW: Delayed SIGINT caught for %s.\n",
3230 target_pid_to_str (lp->ptid));
3231
3232 /* This is a delayed SIGINT. */
3233 lp->ignore_sigint = 0;
3234
3235 registers_changed ();
28439f5e 3236 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
57380f4e
DJ
3237 lp->step, TARGET_SIGNAL_0);
3238 if (debug_linux_nat)
3239 fprintf_unfiltered (gdb_stdlog,
3240 "LLW: %s %s, 0, 0 (discard SIGINT)\n",
3241 lp->step ?
3242 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3243 target_pid_to_str (lp->ptid));
3244
3245 lp->stopped = 0;
3246 gdb_assert (lp->resumed);
3247
3248 /* Discard the event. */
3249 return NULL;
3250 }
3251
02f3fc28
PA
3252 /* An interesting event. */
3253 gdb_assert (lp);
ca2163eb 3254 lp->status = status;
02f3fc28
PA
3255 return lp;
3256}
3257
d6b0e80f 3258static ptid_t
7feb7d06 3259linux_nat_wait_1 (struct target_ops *ops,
47608cb1
PA
3260 ptid_t ptid, struct target_waitstatus *ourstatus,
3261 int target_options)
d6b0e80f 3262{
7feb7d06 3263 static sigset_t prev_mask;
d6b0e80f
AC
3264 struct lwp_info *lp = NULL;
3265 int options = 0;
3266 int status = 0;
d90e17a7 3267 pid_t pid;
d6b0e80f 3268
b84876c2
PA
3269 if (debug_linux_nat_async)
3270 fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
3271
f973ed9c
DJ
3272 /* The first time we get here after starting a new inferior, we may
3273 not have added it to the LWP list yet - this is the earliest
3274 moment at which we know its PID. */
d90e17a7 3275 if (ptid_is_pid (inferior_ptid))
f973ed9c 3276 {
27c9d204
PA
3277 /* Upgrade the main thread's ptid. */
3278 thread_change_ptid (inferior_ptid,
3279 BUILD_LWP (GET_PID (inferior_ptid),
3280 GET_PID (inferior_ptid)));
3281
f973ed9c
DJ
3282 lp = add_lwp (inferior_ptid);
3283 lp->resumed = 1;
3284 }
3285
7feb7d06
PA
3286 /* Make sure SIGCHLD is blocked. */
3287 block_child_signals (&prev_mask);
d6b0e80f 3288
d90e17a7
PA
3289 if (ptid_equal (ptid, minus_one_ptid))
3290 pid = -1;
3291 else if (ptid_is_pid (ptid))
3292 /* A request to wait for a specific tgid. This is not possible
3293 with waitpid, so instead, we wait for any child, and leave
3294 children we're not interested in right now with a pending
3295 status to report later. */
3296 pid = -1;
3297 else
3298 pid = GET_LWP (ptid);
3299
d6b0e80f 3300retry:
d90e17a7
PA
3301 lp = NULL;
3302 status = 0;
d6b0e80f 3303
e3e9f5a2
PA
3304 /* Make sure that of those LWPs we want to get an event from, there
3305 is at least one LWP that has been resumed. If there's none, just
3306 bail out. The core may just be flushing asynchronously all
3307 events. */
3308 if (iterate_over_lwps (ptid, resumed_callback, NULL) == NULL)
3309 {
3310 ourstatus->kind = TARGET_WAITKIND_IGNORE;
3311
3312 if (debug_linux_nat_async)
3313 fprintf_unfiltered (gdb_stdlog, "LLW: exit (no resumed LWP)\n");
3314
3315 restore_child_signals_mask (&prev_mask);
3316 return minus_one_ptid;
3317 }
d6b0e80f
AC
3318
3319 /* First check if there is a LWP with a wait status pending. */
3320 if (pid == -1)
3321 {
3322 /* Any LWP that's been resumed will do. */
d90e17a7 3323 lp = iterate_over_lwps (ptid, status_callback, NULL);
d6b0e80f
AC
3324 if (lp)
3325 {
ca2163eb 3326 if (debug_linux_nat && lp->status)
d6b0e80f
AC
3327 fprintf_unfiltered (gdb_stdlog,
3328 "LLW: Using pending wait status %s for %s.\n",
ca2163eb 3329 status_to_str (lp->status),
d6b0e80f
AC
3330 target_pid_to_str (lp->ptid));
3331 }
3332
b84876c2 3333 /* But if we don't find one, we'll have to wait, and check both
7feb7d06
PA
3334 cloned and uncloned processes. We start with the cloned
3335 processes. */
d6b0e80f
AC
3336 options = __WCLONE | WNOHANG;
3337 }
3338 else if (is_lwp (ptid))
3339 {
3340 if (debug_linux_nat)
3341 fprintf_unfiltered (gdb_stdlog,
3342 "LLW: Waiting for specific LWP %s.\n",
3343 target_pid_to_str (ptid));
3344
3345 /* We have a specific LWP to check. */
3346 lp = find_lwp_pid (ptid);
3347 gdb_assert (lp);
d6b0e80f 3348
ca2163eb 3349 if (debug_linux_nat && lp->status)
d6b0e80f
AC
3350 fprintf_unfiltered (gdb_stdlog,
3351 "LLW: Using pending wait status %s for %s.\n",
ca2163eb 3352 status_to_str (lp->status),
d6b0e80f
AC
3353 target_pid_to_str (lp->ptid));
3354
3355 /* If we have to wait, take into account whether PID is a cloned
3356 process or not. And we have to convert it to something that
3357 the layer beneath us can understand. */
3358 options = lp->cloned ? __WCLONE : 0;
3359 pid = GET_LWP (ptid);
d90e17a7
PA
3360
3361 /* We check for lp->waitstatus in addition to lp->status,
3362 because we can have pending process exits recorded in
3363 lp->status and W_EXITCODE(0,0) == 0. We should probably have
3364 an additional lp->status_p flag. */
ca2163eb 3365 if (lp->status == 0 && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
d90e17a7 3366 lp = NULL;
d6b0e80f
AC
3367 }
3368
d90e17a7 3369 if (lp && lp->signalled)
d6b0e80f
AC
3370 {
3371 /* A pending SIGSTOP may interfere with the normal stream of
3372 events. In a typical case where interference is a problem,
3373 we have a SIGSTOP signal pending for LWP A while
3374 single-stepping it, encounter an event in LWP B, and take the
3375 pending SIGSTOP while trying to stop LWP A. After processing
3376 the event in LWP B, LWP A is continued, and we'll never see
3377 the SIGTRAP associated with the last time we were
3378 single-stepping LWP A. */
3379
3380 /* Resume the thread. It should halt immediately returning the
3381 pending SIGSTOP. */
3382 registers_changed ();
28439f5e 3383 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
10d6c8cd 3384 lp->step, TARGET_SIGNAL_0);
d6b0e80f
AC
3385 if (debug_linux_nat)
3386 fprintf_unfiltered (gdb_stdlog,
3387 "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
3388 lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3389 target_pid_to_str (lp->ptid));
3390 lp->stopped = 0;
3391 gdb_assert (lp->resumed);
3392
ca2163eb
PA
3393 /* Catch the pending SIGSTOP. */
3394 status = lp->status;
3395 lp->status = 0;
3396
d6b0e80f 3397 stop_wait_callback (lp, NULL);
ca2163eb
PA
3398
3399 /* If the lp->status field isn't empty, we caught another signal
3400 while flushing the SIGSTOP. Return it back to the event
3401 queue of the LWP, as we already have an event to handle. */
3402 if (lp->status)
3403 {
3404 if (debug_linux_nat)
3405 fprintf_unfiltered (gdb_stdlog,
3406 "LLW: kill %s, %s\n",
3407 target_pid_to_str (lp->ptid),
3408 status_to_str (lp->status));
3409 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
3410 }
3411
3412 lp->status = status;
d6b0e80f
AC
3413 }
3414
b84876c2
PA
3415 if (!target_can_async_p ())
3416 {
3417 /* Causes SIGINT to be passed on to the attached process. */
3418 set_sigint_trap ();
b84876c2 3419 }
d6b0e80f 3420
47608cb1
PA
3421 /* Translate generic target_wait options into waitpid options. */
3422 if (target_options & TARGET_WNOHANG)
3423 options |= WNOHANG;
7feb7d06 3424
d90e17a7 3425 while (lp == NULL)
d6b0e80f
AC
3426 {
3427 pid_t lwpid;
3428
7feb7d06 3429 lwpid = my_waitpid (pid, &status, options);
b84876c2 3430
d6b0e80f
AC
3431 if (lwpid > 0)
3432 {
3433 gdb_assert (pid == -1 || lwpid == pid);
3434
3435 if (debug_linux_nat)
3436 {
3437 fprintf_unfiltered (gdb_stdlog,
3438 "LLW: waitpid %ld received %s\n",
3439 (long) lwpid, status_to_str (status));
3440 }
3441
02f3fc28 3442 lp = linux_nat_filter_event (lwpid, status, options);
d90e17a7 3443
33355866
JK
3444 /* STATUS is now no longer valid, use LP->STATUS instead. */
3445 status = 0;
3446
d90e17a7
PA
3447 if (lp
3448 && ptid_is_pid (ptid)
3449 && ptid_get_pid (lp->ptid) != ptid_get_pid (ptid))
d6b0e80f 3450 {
e3e9f5a2
PA
3451 gdb_assert (lp->resumed);
3452
d90e17a7 3453 if (debug_linux_nat)
3e43a32a
MS
3454 fprintf (stderr,
3455 "LWP %ld got an event %06x, leaving pending.\n",
33355866 3456 ptid_get_lwp (lp->ptid), lp->status);
d90e17a7 3457
ca2163eb 3458 if (WIFSTOPPED (lp->status))
d90e17a7 3459 {
ca2163eb 3460 if (WSTOPSIG (lp->status) != SIGSTOP)
d90e17a7 3461 {
e3e9f5a2
PA
3462 /* Cancel breakpoint hits. The breakpoint may
3463 be removed before we fetch events from this
3464 process to report to the core. It is best
3465 not to assume the moribund breakpoints
3466 heuristic always handles these cases --- it
3467 could be too many events go through to the
3468 core before this one is handled. All-stop
3469 always cancels breakpoint hits in all
3470 threads. */
3471 if (non_stop
00390b84 3472 && linux_nat_lp_status_is_event (lp)
e3e9f5a2
PA
3473 && cancel_breakpoint (lp))
3474 {
3475 /* Throw away the SIGTRAP. */
3476 lp->status = 0;
3477
3478 if (debug_linux_nat)
3479 fprintf (stderr,
3e43a32a
MS
3480 "LLW: LWP %ld hit a breakpoint while"
3481 " waiting for another process;"
3482 " cancelled it\n",
e3e9f5a2
PA
3483 ptid_get_lwp (lp->ptid));
3484 }
3485 lp->stopped = 1;
d90e17a7
PA
3486 }
3487 else
3488 {
3489 lp->stopped = 1;
3490 lp->signalled = 0;
3491 }
3492 }
33355866 3493 else if (WIFEXITED (lp->status) || WIFSIGNALED (lp->status))
d90e17a7
PA
3494 {
3495 if (debug_linux_nat)
3e43a32a
MS
3496 fprintf (stderr,
3497 "Process %ld exited while stopping LWPs\n",
d90e17a7
PA
3498 ptid_get_lwp (lp->ptid));
3499
3500 /* This was the last lwp in the process. Since
3501 events are serialized to GDB core, and we can't
3502 report this one right now, but GDB core and the
3503 other target layers will want to be notified
3504 about the exit code/signal, leave the status
3505 pending for the next time we're able to report
3506 it. */
d90e17a7
PA
3507
3508 /* Prevent trying to stop this thread again. We'll
3509 never try to resume it because it has a pending
3510 status. */
3511 lp->stopped = 1;
3512
3513 /* Dead LWP's aren't expected to reported a pending
3514 sigstop. */
3515 lp->signalled = 0;
3516
3517 /* Store the pending event in the waitstatus as
3518 well, because W_EXITCODE(0,0) == 0. */
ca2163eb 3519 store_waitstatus (&lp->waitstatus, lp->status);
d90e17a7
PA
3520 }
3521
3522 /* Keep looking. */
3523 lp = NULL;
d6b0e80f
AC
3524 continue;
3525 }
3526
d90e17a7
PA
3527 if (lp)
3528 break;
3529 else
3530 {
3531 if (pid == -1)
3532 {
3533 /* waitpid did return something. Restart over. */
3534 options |= __WCLONE;
3535 }
3536 continue;
3537 }
d6b0e80f
AC
3538 }
3539
3540 if (pid == -1)
3541 {
3542 /* Alternate between checking cloned and uncloned processes. */
3543 options ^= __WCLONE;
3544
b84876c2
PA
3545 /* And every time we have checked both:
3546 In async mode, return to event loop;
3547 In sync mode, suspend waiting for a SIGCHLD signal. */
d6b0e80f 3548 if (options & __WCLONE)
b84876c2 3549 {
47608cb1 3550 if (target_options & TARGET_WNOHANG)
b84876c2
PA
3551 {
3552 /* No interesting event. */
3553 ourstatus->kind = TARGET_WAITKIND_IGNORE;
3554
b84876c2
PA
3555 if (debug_linux_nat_async)
3556 fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3557
7feb7d06 3558 restore_child_signals_mask (&prev_mask);
b84876c2
PA
3559 return minus_one_ptid;
3560 }
3561
3562 sigsuspend (&suspend_mask);
3563 }
d6b0e80f 3564 }
28736962
PA
3565 else if (target_options & TARGET_WNOHANG)
3566 {
3567 /* No interesting event for PID yet. */
3568 ourstatus->kind = TARGET_WAITKIND_IGNORE;
3569
3570 if (debug_linux_nat_async)
3571 fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
3572
3573 restore_child_signals_mask (&prev_mask);
3574 return minus_one_ptid;
3575 }
d6b0e80f
AC
3576
3577 /* We shouldn't end up here unless we want to try again. */
d90e17a7 3578 gdb_assert (lp == NULL);
d6b0e80f
AC
3579 }
3580
b84876c2 3581 if (!target_can_async_p ())
d26b5354 3582 clear_sigint_trap ();
d6b0e80f
AC
3583
3584 gdb_assert (lp);
3585
ca2163eb
PA
3586 status = lp->status;
3587 lp->status = 0;
3588
d6b0e80f
AC
3589 /* Don't report signals that GDB isn't interested in, such as
3590 signals that are neither printed nor stopped upon. Stopping all
3591 threads can be a bit time-consuming so if we want decent
3592 performance with heavily multi-threaded programs, especially when
3593 they're using a high frequency timer, we'd better avoid it if we
3594 can. */
3595
3596 if (WIFSTOPPED (status))
3597 {
423ec54c 3598 enum target_signal signo = target_signal_from_host (WSTOPSIG (status));
d6b48e9c
PA
3599 struct inferior *inf;
3600
3601 inf = find_inferior_pid (ptid_get_pid (lp->ptid));
3602 gdb_assert (inf);
d6b0e80f 3603
d6b48e9c
PA
3604 /* Defer to common code if we get a signal while
3605 single-stepping, since that may need special care, e.g. to
3606 skip the signal handler, or, if we're gaining control of the
3607 inferior. */
d539ed7e 3608 if (!lp->step
16c381f0 3609 && inf->control.stop_soon == NO_STOP_QUIETLY
d539ed7e 3610 && signal_stop_state (signo) == 0
d6b0e80f
AC
3611 && signal_print_state (signo) == 0
3612 && signal_pass_state (signo) == 1)
3613 {
3614 /* FIMXE: kettenis/2001-06-06: Should we resume all threads
3615 here? It is not clear we should. GDB may not expect
3616 other threads to run. On the other hand, not resuming
3617 newly attached threads may cause an unwanted delay in
3618 getting them running. */
3619 registers_changed ();
28439f5e 3620 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
10d6c8cd 3621 lp->step, signo);
d6b0e80f
AC
3622 if (debug_linux_nat)
3623 fprintf_unfiltered (gdb_stdlog,
3624 "LLW: %s %s, %s (preempt 'handle')\n",
3625 lp->step ?
3626 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
3627 target_pid_to_str (lp->ptid),
423ec54c
JK
3628 (signo != TARGET_SIGNAL_0
3629 ? strsignal (target_signal_to_host (signo))
3630 : "0"));
d6b0e80f 3631 lp->stopped = 0;
d6b0e80f
AC
3632 goto retry;
3633 }
3634
1ad15515 3635 if (!non_stop)
d6b0e80f 3636 {
1ad15515
PA
3637 /* Only do the below in all-stop, as we currently use SIGINT
3638 to implement target_stop (see linux_nat_stop) in
3639 non-stop. */
3640 if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
3641 {
3642 /* If ^C/BREAK is typed at the tty/console, SIGINT gets
3643 forwarded to the entire process group, that is, all LWPs
3644 will receive it - unless they're using CLONE_THREAD to
3645 share signals. Since we only want to report it once, we
3646 mark it as ignored for all LWPs except this one. */
d90e17a7
PA
3647 iterate_over_lwps (pid_to_ptid (ptid_get_pid (ptid)),
3648 set_ignore_sigint, NULL);
1ad15515
PA
3649 lp->ignore_sigint = 0;
3650 }
3651 else
3652 maybe_clear_ignore_sigint (lp);
d6b0e80f
AC
3653 }
3654 }
3655
3656 /* This LWP is stopped now. */
3657 lp->stopped = 1;
3658
3659 if (debug_linux_nat)
3660 fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
3661 status_to_str (status), target_pid_to_str (lp->ptid));
3662
4c28f408
PA
3663 if (!non_stop)
3664 {
3665 /* Now stop all other LWP's ... */
d90e17a7 3666 iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
4c28f408
PA
3667
3668 /* ... and wait until all of them have reported back that
3669 they're no longer running. */
d90e17a7 3670 iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
4c28f408
PA
3671
3672 /* If we're not waiting for a specific LWP, choose an event LWP
3673 from among those that have had events. Giving equal priority
3674 to all LWPs that have had events helps prevent
3675 starvation. */
3676 if (pid == -1)
d90e17a7 3677 select_event_lwp (ptid, &lp, &status);
d6b0e80f 3678
e3e9f5a2
PA
3679 /* Now that we've selected our final event LWP, cancel any
3680 breakpoints in other LWPs that have hit a GDB breakpoint.
3681 See the comment in cancel_breakpoints_callback to find out
3682 why. */
3683 iterate_over_lwps (minus_one_ptid, cancel_breakpoints_callback, lp);
3684
3685 /* In all-stop, from the core's perspective, all LWPs are now
3686 stopped until a new resume action is sent over. */
3687 iterate_over_lwps (minus_one_ptid, resume_clear_callback, NULL);
3688 }
3689 else
3690 lp->resumed = 0;
d6b0e80f 3691
26ab7092 3692 if (linux_nat_status_is_event (status))
d6b0e80f 3693 {
d6b0e80f
AC
3694 if (debug_linux_nat)
3695 fprintf_unfiltered (gdb_stdlog,
4fdebdd0
PA
3696 "LLW: trap ptid is %s.\n",
3697 target_pid_to_str (lp->ptid));
d6b0e80f 3698 }
d6b0e80f
AC
3699
3700 if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
3701 {
3702 *ourstatus = lp->waitstatus;
3703 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
3704 }
3705 else
3706 store_waitstatus (ourstatus, status);
3707
b84876c2
PA
3708 if (debug_linux_nat_async)
3709 fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
3710
7feb7d06 3711 restore_child_signals_mask (&prev_mask);
1e225492
JK
3712
3713 if (ourstatus->kind == TARGET_WAITKIND_EXITED
3714 || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
3715 lp->core = -1;
3716 else
3717 lp->core = linux_nat_core_of_thread_1 (lp->ptid);
3718
f973ed9c 3719 return lp->ptid;
d6b0e80f
AC
3720}
3721
e3e9f5a2
PA
3722/* Resume LWPs that are currently stopped without any pending status
3723 to report, but are resumed from the core's perspective. */
3724
3725static int
3726resume_stopped_resumed_lwps (struct lwp_info *lp, void *data)
3727{
3728 ptid_t *wait_ptid_p = data;
3729
3730 if (lp->stopped
3731 && lp->resumed
3732 && lp->status == 0
3733 && lp->waitstatus.kind == TARGET_WAITKIND_IGNORE)
3734 {
3735 gdb_assert (is_executing (lp->ptid));
3736
3737 /* Don't bother if there's a breakpoint at PC that we'd hit
3738 immediately, and we're not waiting for this LWP. */
3739 if (!ptid_match (lp->ptid, *wait_ptid_p))
3740 {
3741 struct regcache *regcache = get_thread_regcache (lp->ptid);
3742 CORE_ADDR pc = regcache_read_pc (regcache);
3743
3744 if (breakpoint_inserted_here_p (get_regcache_aspace (regcache), pc))
3745 return 0;
3746 }
3747
3748 if (debug_linux_nat)
3749 fprintf_unfiltered (gdb_stdlog,
3750 "RSRL: resuming stopped-resumed LWP %s\n",
3751 target_pid_to_str (lp->ptid));
3752
3753 linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
3754 lp->step, TARGET_SIGNAL_0);
3755 lp->stopped = 0;
3756 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
3757 lp->stopped_by_watchpoint = 0;
3758 }
3759
3760 return 0;
3761}
3762
7feb7d06
PA
3763static ptid_t
3764linux_nat_wait (struct target_ops *ops,
47608cb1
PA
3765 ptid_t ptid, struct target_waitstatus *ourstatus,
3766 int target_options)
7feb7d06
PA
3767{
3768 ptid_t event_ptid;
3769
3770 if (debug_linux_nat)
3e43a32a
MS
3771 fprintf_unfiltered (gdb_stdlog,
3772 "linux_nat_wait: [%s]\n", target_pid_to_str (ptid));
7feb7d06
PA
3773
3774 /* Flush the async file first. */
3775 if (target_can_async_p ())
3776 async_file_flush ();
3777
e3e9f5a2
PA
3778 /* Resume LWPs that are currently stopped without any pending status
3779 to report, but are resumed from the core's perspective. LWPs get
3780 in this state if we find them stopping at a time we're not
3781 interested in reporting the event (target_wait on a
3782 specific_process, for example, see linux_nat_wait_1), and
3783 meanwhile the event became uninteresting. Don't bother resuming
3784 LWPs we're not going to wait for if they'd stop immediately. */
3785 if (non_stop)
3786 iterate_over_lwps (minus_one_ptid, resume_stopped_resumed_lwps, &ptid);
3787
47608cb1 3788 event_ptid = linux_nat_wait_1 (ops, ptid, ourstatus, target_options);
7feb7d06
PA
3789
3790 /* If we requested any event, and something came out, assume there
3791 may be more. If we requested a specific lwp or process, also
3792 assume there may be more. */
3793 if (target_can_async_p ()
3794 && (ourstatus->kind != TARGET_WAITKIND_IGNORE
3795 || !ptid_equal (ptid, minus_one_ptid)))
3796 async_file_mark ();
3797
3798 /* Get ready for the next event. */
3799 if (target_can_async_p ())
3800 target_async (inferior_event_handler, 0);
3801
3802 return event_ptid;
3803}
3804
d6b0e80f
AC
3805static int
3806kill_callback (struct lwp_info *lp, void *data)
3807{
3808 errno = 0;
3809 ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
3810 if (debug_linux_nat)
3811 fprintf_unfiltered (gdb_stdlog,
3812 "KC: PTRACE_KILL %s, 0, 0 (%s)\n",
3813 target_pid_to_str (lp->ptid),
3814 errno ? safe_strerror (errno) : "OK");
3815
3816 return 0;
3817}
3818
3819static int
3820kill_wait_callback (struct lwp_info *lp, void *data)
3821{
3822 pid_t pid;
3823
3824 /* We must make sure that there are no pending events (delayed
3825 SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
3826 program doesn't interfere with any following debugging session. */
3827
3828 /* For cloned processes we must check both with __WCLONE and
3829 without, since the exit status of a cloned process isn't reported
3830 with __WCLONE. */
3831 if (lp->cloned)
3832 {
3833 do
3834 {
58aecb61 3835 pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
e85a822c 3836 if (pid != (pid_t) -1)
d6b0e80f 3837 {
e85a822c
DJ
3838 if (debug_linux_nat)
3839 fprintf_unfiltered (gdb_stdlog,
3840 "KWC: wait %s received unknown.\n",
3841 target_pid_to_str (lp->ptid));
3842 /* The Linux kernel sometimes fails to kill a thread
3843 completely after PTRACE_KILL; that goes from the stop
3844 point in do_fork out to the one in
3845 get_signal_to_deliever and waits again. So kill it
3846 again. */
3847 kill_callback (lp, NULL);
d6b0e80f
AC
3848 }
3849 }
3850 while (pid == GET_LWP (lp->ptid));
3851
3852 gdb_assert (pid == -1 && errno == ECHILD);
3853 }
3854
3855 do
3856 {
58aecb61 3857 pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
e85a822c 3858 if (pid != (pid_t) -1)
d6b0e80f 3859 {
e85a822c
DJ
3860 if (debug_linux_nat)
3861 fprintf_unfiltered (gdb_stdlog,
3862 "KWC: wait %s received unk.\n",
3863 target_pid_to_str (lp->ptid));
3864 /* See the call to kill_callback above. */
3865 kill_callback (lp, NULL);
d6b0e80f
AC
3866 }
3867 }
3868 while (pid == GET_LWP (lp->ptid));
3869
3870 gdb_assert (pid == -1 && errno == ECHILD);
3871 return 0;
3872}
3873
3874static void
7d85a9c0 3875linux_nat_kill (struct target_ops *ops)
d6b0e80f 3876{
f973ed9c
DJ
3877 struct target_waitstatus last;
3878 ptid_t last_ptid;
3879 int status;
d6b0e80f 3880
f973ed9c
DJ
3881 /* If we're stopped while forking and we haven't followed yet,
3882 kill the other task. We need to do this first because the
3883 parent will be sleeping if this is a vfork. */
d6b0e80f 3884
f973ed9c 3885 get_last_target_status (&last_ptid, &last);
d6b0e80f 3886
f973ed9c
DJ
3887 if (last.kind == TARGET_WAITKIND_FORKED
3888 || last.kind == TARGET_WAITKIND_VFORKED)
3889 {
3a3e9ee3 3890 ptrace (PT_KILL, PIDGET (last.value.related_pid), 0, 0);
f973ed9c
DJ
3891 wait (&status);
3892 }
3893
3894 if (forks_exist_p ())
7feb7d06 3895 linux_fork_killall ();
f973ed9c
DJ
3896 else
3897 {
d90e17a7 3898 ptid_t ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
e0881a8e 3899
4c28f408
PA
3900 /* Stop all threads before killing them, since ptrace requires
3901 that the thread is stopped to sucessfully PTRACE_KILL. */
d90e17a7 3902 iterate_over_lwps (ptid, stop_callback, NULL);
4c28f408
PA
3903 /* ... and wait until all of them have reported back that
3904 they're no longer running. */
d90e17a7 3905 iterate_over_lwps (ptid, stop_wait_callback, NULL);
4c28f408 3906
f973ed9c 3907 /* Kill all LWP's ... */
d90e17a7 3908 iterate_over_lwps (ptid, kill_callback, NULL);
f973ed9c
DJ
3909
3910 /* ... and wait until we've flushed all events. */
d90e17a7 3911 iterate_over_lwps (ptid, kill_wait_callback, NULL);
f973ed9c
DJ
3912 }
3913
3914 target_mourn_inferior ();
d6b0e80f
AC
3915}
3916
3917static void
136d6dae 3918linux_nat_mourn_inferior (struct target_ops *ops)
d6b0e80f 3919{
d90e17a7 3920 purge_lwp_list (ptid_get_pid (inferior_ptid));
d6b0e80f 3921
f973ed9c 3922 if (! forks_exist_p ())
d90e17a7
PA
3923 /* Normal case, no other forks available. */
3924 linux_ops->to_mourn_inferior (ops);
f973ed9c
DJ
3925 else
3926 /* Multi-fork case. The current inferior_ptid has exited, but
3927 there are other viable forks to debug. Delete the exiting
3928 one and context-switch to the first available. */
3929 linux_fork_mourn_inferior ();
d6b0e80f
AC
3930}
3931
5b009018
PA
3932/* Convert a native/host siginfo object, into/from the siginfo in the
3933 layout of the inferiors' architecture. */
3934
3935static void
3936siginfo_fixup (struct siginfo *siginfo, gdb_byte *inf_siginfo, int direction)
3937{
3938 int done = 0;
3939
3940 if (linux_nat_siginfo_fixup != NULL)
3941 done = linux_nat_siginfo_fixup (siginfo, inf_siginfo, direction);
3942
3943 /* If there was no callback, or the callback didn't do anything,
3944 then just do a straight memcpy. */
3945 if (!done)
3946 {
3947 if (direction == 1)
3948 memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
3949 else
3950 memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
3951 }
3952}
3953
4aa995e1
PA
3954static LONGEST
3955linux_xfer_siginfo (struct target_ops *ops, enum target_object object,
3956 const char *annex, gdb_byte *readbuf,
3957 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3958{
4aa995e1
PA
3959 int pid;
3960 struct siginfo siginfo;
5b009018 3961 gdb_byte inf_siginfo[sizeof (struct siginfo)];
4aa995e1
PA
3962
3963 gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
3964 gdb_assert (readbuf || writebuf);
3965
3966 pid = GET_LWP (inferior_ptid);
3967 if (pid == 0)
3968 pid = GET_PID (inferior_ptid);
3969
3970 if (offset > sizeof (siginfo))
3971 return -1;
3972
3973 errno = 0;
3974 ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
3975 if (errno != 0)
3976 return -1;
3977
5b009018
PA
3978 /* When GDB is built as a 64-bit application, ptrace writes into
3979 SIGINFO an object with 64-bit layout. Since debugging a 32-bit
3980 inferior with a 64-bit GDB should look the same as debugging it
3981 with a 32-bit GDB, we need to convert it. GDB core always sees
3982 the converted layout, so any read/write will have to be done
3983 post-conversion. */
3984 siginfo_fixup (&siginfo, inf_siginfo, 0);
3985
4aa995e1
PA
3986 if (offset + len > sizeof (siginfo))
3987 len = sizeof (siginfo) - offset;
3988
3989 if (readbuf != NULL)
5b009018 3990 memcpy (readbuf, inf_siginfo + offset, len);
4aa995e1
PA
3991 else
3992 {
5b009018
PA
3993 memcpy (inf_siginfo + offset, writebuf, len);
3994
3995 /* Convert back to ptrace layout before flushing it out. */
3996 siginfo_fixup (&siginfo, inf_siginfo, 1);
3997
4aa995e1
PA
3998 errno = 0;
3999 ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo);
4000 if (errno != 0)
4001 return -1;
4002 }
4003
4004 return len;
4005}
4006
10d6c8cd
DJ
4007static LONGEST
4008linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
4009 const char *annex, gdb_byte *readbuf,
4010 const gdb_byte *writebuf,
4011 ULONGEST offset, LONGEST len)
d6b0e80f 4012{
4aa995e1 4013 struct cleanup *old_chain;
10d6c8cd 4014 LONGEST xfer;
d6b0e80f 4015
4aa995e1
PA
4016 if (object == TARGET_OBJECT_SIGNAL_INFO)
4017 return linux_xfer_siginfo (ops, object, annex, readbuf, writebuf,
4018 offset, len);
4019
c35b1492
PA
4020 /* The target is connected but no live inferior is selected. Pass
4021 this request down to a lower stratum (e.g., the executable
4022 file). */
4023 if (object == TARGET_OBJECT_MEMORY && ptid_equal (inferior_ptid, null_ptid))
4024 return 0;
4025
4aa995e1
PA
4026 old_chain = save_inferior_ptid ();
4027
d6b0e80f
AC
4028 if (is_lwp (inferior_ptid))
4029 inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
4030
10d6c8cd
DJ
4031 xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
4032 offset, len);
d6b0e80f
AC
4033
4034 do_cleanups (old_chain);
4035 return xfer;
4036}
4037
4038static int
28439f5e 4039linux_thread_alive (ptid_t ptid)
d6b0e80f 4040{
4c28f408
PA
4041 int err;
4042
d6b0e80f
AC
4043 gdb_assert (is_lwp (ptid));
4044
4c28f408
PA
4045 /* Send signal 0 instead of anything ptrace, because ptracing a
4046 running thread errors out claiming that the thread doesn't
4047 exist. */
4048 err = kill_lwp (GET_LWP (ptid), 0);
4049
d6b0e80f
AC
4050 if (debug_linux_nat)
4051 fprintf_unfiltered (gdb_stdlog,
4c28f408 4052 "LLTA: KILL(SIG0) %s (%s)\n",
d6b0e80f 4053 target_pid_to_str (ptid),
4c28f408 4054 err ? safe_strerror (err) : "OK");
9c0dd46b 4055
4c28f408 4056 if (err != 0)
d6b0e80f
AC
4057 return 0;
4058
4059 return 1;
4060}
4061
28439f5e
PA
4062static int
4063linux_nat_thread_alive (struct target_ops *ops, ptid_t ptid)
4064{
4065 return linux_thread_alive (ptid);
4066}
4067
d6b0e80f 4068static char *
117de6a9 4069linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
d6b0e80f
AC
4070{
4071 static char buf[64];
4072
a0ef4274 4073 if (is_lwp (ptid)
d90e17a7
PA
4074 && (GET_PID (ptid) != GET_LWP (ptid)
4075 || num_lwps (GET_PID (ptid)) > 1))
d6b0e80f
AC
4076 {
4077 snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
4078 return buf;
4079 }
4080
4081 return normal_pid_to_str (ptid);
4082}
4083
dba24537
AC
4084/* Accepts an integer PID; Returns a string representing a file that
4085 can be opened to get the symbols for the child process. */
4086
6d8fd2b7
UW
4087static char *
4088linux_child_pid_to_exec_file (int pid)
dba24537
AC
4089{
4090 char *name1, *name2;
4091
4092 name1 = xmalloc (MAXPATHLEN);
4093 name2 = xmalloc (MAXPATHLEN);
4094 make_cleanup (xfree, name1);
4095 make_cleanup (xfree, name2);
4096 memset (name2, 0, MAXPATHLEN);
4097
4098 sprintf (name1, "/proc/%d/exe", pid);
4099 if (readlink (name1, name2, MAXPATHLEN) > 0)
4100 return name2;
4101 else
4102 return name1;
4103}
4104
4105/* Service function for corefiles and info proc. */
4106
4107static int
4108read_mapping (FILE *mapfile,
4109 long long *addr,
4110 long long *endaddr,
4111 char *permissions,
4112 long long *offset,
4113 char *device, long long *inode, char *filename)
4114{
4115 int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
4116 addr, endaddr, permissions, offset, device, inode);
4117
2e14c2ea
MS
4118 filename[0] = '\0';
4119 if (ret > 0 && ret != EOF)
dba24537
AC
4120 {
4121 /* Eat everything up to EOL for the filename. This will prevent
4122 weird filenames (such as one with embedded whitespace) from
4123 confusing this code. It also makes this code more robust in
4124 respect to annotations the kernel may add after the filename.
4125
4126 Note the filename is used for informational purposes
4127 only. */
4128 ret += fscanf (mapfile, "%[^\n]\n", filename);
4129 }
2e14c2ea 4130
dba24537
AC
4131 return (ret != 0 && ret != EOF);
4132}
4133
4134/* Fills the "to_find_memory_regions" target vector. Lists the memory
4135 regions in the inferior for a corefile. */
4136
4137static int
b8edc417 4138linux_nat_find_memory_regions (find_memory_region_ftype func, void *obfd)
dba24537 4139{
89ecc4f5 4140 int pid = PIDGET (inferior_ptid);
dba24537
AC
4141 char mapsfilename[MAXPATHLEN];
4142 FILE *mapsfile;
4143 long long addr, endaddr, size, offset, inode;
4144 char permissions[8], device[8], filename[MAXPATHLEN];
4145 int read, write, exec;
7c8a8b04 4146 struct cleanup *cleanup;
dba24537
AC
4147
4148 /* Compose the filename for the /proc memory map, and open it. */
89ecc4f5 4149 sprintf (mapsfilename, "/proc/%d/maps", pid);
dba24537 4150 if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
8a3fe4f8 4151 error (_("Could not open %s."), mapsfilename);
7c8a8b04 4152 cleanup = make_cleanup_fclose (mapsfile);
dba24537
AC
4153
4154 if (info_verbose)
4155 fprintf_filtered (gdb_stdout,
4156 "Reading memory regions from %s\n", mapsfilename);
4157
4158 /* Now iterate until end-of-file. */
4159 while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
4160 &offset, &device[0], &inode, &filename[0]))
4161 {
4162 size = endaddr - addr;
4163
4164 /* Get the segment's permissions. */
4165 read = (strchr (permissions, 'r') != 0);
4166 write = (strchr (permissions, 'w') != 0);
4167 exec = (strchr (permissions, 'x') != 0);
4168
4169 if (info_verbose)
4170 {
4171 fprintf_filtered (gdb_stdout,
2244ba2e
PM
4172 "Save segment, %s bytes at %s (%c%c%c)",
4173 plongest (size), paddress (target_gdbarch, addr),
dba24537
AC
4174 read ? 'r' : ' ',
4175 write ? 'w' : ' ', exec ? 'x' : ' ');
b260b6c1 4176 if (filename[0])
dba24537
AC
4177 fprintf_filtered (gdb_stdout, " for %s", filename);
4178 fprintf_filtered (gdb_stdout, "\n");
4179 }
4180
4181 /* Invoke the callback function to create the corefile
4182 segment. */
4183 func (addr, size, read, write, exec, obfd);
4184 }
7c8a8b04 4185 do_cleanups (cleanup);
dba24537
AC
4186 return 0;
4187}
4188
2020b7ab
PA
4189static int
4190find_signalled_thread (struct thread_info *info, void *data)
4191{
16c381f0 4192 if (info->suspend.stop_signal != TARGET_SIGNAL_0
2020b7ab
PA
4193 && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
4194 return 1;
4195
4196 return 0;
4197}
4198
4199static enum target_signal
4200find_stop_signal (void)
4201{
4202 struct thread_info *info =
4203 iterate_over_threads (find_signalled_thread, NULL);
4204
4205 if (info)
16c381f0 4206 return info->suspend.stop_signal;
2020b7ab
PA
4207 else
4208 return TARGET_SIGNAL_0;
4209}
4210
dba24537
AC
4211/* Records the thread's register state for the corefile note
4212 section. */
4213
4214static char *
4215linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
2020b7ab
PA
4216 char *note_data, int *note_size,
4217 enum target_signal stop_signal)
dba24537 4218{
dba24537 4219 unsigned long lwp = ptid_get_lwp (ptid);
c2250ad1
UW
4220 struct gdbarch *gdbarch = target_gdbarch;
4221 struct regcache *regcache = get_thread_arch_regcache (ptid, gdbarch);
4f844a66 4222 const struct regset *regset;
55e969c1 4223 int core_regset_p;
594f7785 4224 struct cleanup *old_chain;
17ea7499
CES
4225 struct core_regset_section *sect_list;
4226 char *gdb_regset;
594f7785
UW
4227
4228 old_chain = save_inferior_ptid ();
4229 inferior_ptid = ptid;
4230 target_fetch_registers (regcache, -1);
4231 do_cleanups (old_chain);
4f844a66
DM
4232
4233 core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
17ea7499
CES
4234 sect_list = gdbarch_core_regset_sections (gdbarch);
4235
17ea7499
CES
4236 /* The loop below uses the new struct core_regset_section, which stores
4237 the supported section names and sizes for the core file. Note that
4238 note PRSTATUS needs to be treated specially. But the other notes are
4239 structurally the same, so they can benefit from the new struct. */
4240 if (core_regset_p && sect_list != NULL)
4241 while (sect_list->sect_name != NULL)
4242 {
17ea7499
CES
4243 regset = gdbarch_regset_from_core_section (gdbarch,
4244 sect_list->sect_name,
4245 sect_list->size);
4246 gdb_assert (regset && regset->collect_regset);
4247 gdb_regset = xmalloc (sect_list->size);
4248 regset->collect_regset (regset, regcache, -1,
4249 gdb_regset, sect_list->size);
2f2241f1
UW
4250
4251 if (strcmp (sect_list->sect_name, ".reg") == 0)
4252 note_data = (char *) elfcore_write_prstatus
4253 (obfd, note_data, note_size,
857d11d0
JK
4254 lwp, target_signal_to_host (stop_signal),
4255 gdb_regset);
2f2241f1
UW
4256 else
4257 note_data = (char *) elfcore_write_register_note
4258 (obfd, note_data, note_size,
4259 sect_list->sect_name, gdb_regset,
4260 sect_list->size);
17ea7499
CES
4261 xfree (gdb_regset);
4262 sect_list++;
4263 }
dba24537 4264
17ea7499
CES
4265 /* For architectures that does not have the struct core_regset_section
4266 implemented, we use the old method. When all the architectures have
4267 the new support, the code below should be deleted. */
4f844a66 4268 else
17ea7499 4269 {
2f2241f1
UW
4270 gdb_gregset_t gregs;
4271 gdb_fpregset_t fpregs;
4272
4273 if (core_regset_p
4274 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
3e43a32a
MS
4275 sizeof (gregs)))
4276 != NULL && regset->collect_regset != NULL)
2f2241f1
UW
4277 regset->collect_regset (regset, regcache, -1,
4278 &gregs, sizeof (gregs));
4279 else
4280 fill_gregset (regcache, &gregs, -1);
4281
857d11d0
JK
4282 note_data = (char *) elfcore_write_prstatus
4283 (obfd, note_data, note_size, lwp, target_signal_to_host (stop_signal),
4284 &gregs);
2f2241f1 4285
17ea7499
CES
4286 if (core_regset_p
4287 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
3e43a32a
MS
4288 sizeof (fpregs)))
4289 != NULL && regset->collect_regset != NULL)
17ea7499
CES
4290 regset->collect_regset (regset, regcache, -1,
4291 &fpregs, sizeof (fpregs));
4292 else
4293 fill_fpregset (regcache, &fpregs, -1);
4294
4295 note_data = (char *) elfcore_write_prfpreg (obfd,
4296 note_data,
4297 note_size,
4298 &fpregs, sizeof (fpregs));
4299 }
4f844a66 4300
dba24537
AC
4301 return note_data;
4302}
4303
4304struct linux_nat_corefile_thread_data
4305{
4306 bfd *obfd;
4307 char *note_data;
4308 int *note_size;
4309 int num_notes;
2020b7ab 4310 enum target_signal stop_signal;
dba24537
AC
4311};
4312
4313/* Called by gdbthread.c once per thread. Records the thread's
4314 register state for the corefile note section. */
4315
4316static int
4317linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
4318{
4319 struct linux_nat_corefile_thread_data *args = data;
dba24537 4320
dba24537
AC
4321 args->note_data = linux_nat_do_thread_registers (args->obfd,
4322 ti->ptid,
4323 args->note_data,
2020b7ab
PA
4324 args->note_size,
4325 args->stop_signal);
dba24537 4326 args->num_notes++;
56be3814 4327
dba24537
AC
4328 return 0;
4329}
4330
efcbbd14
UW
4331/* Enumerate spufs IDs for process PID. */
4332
4333static void
4334iterate_over_spus (int pid, void (*callback) (void *, int), void *data)
4335{
4336 char path[128];
4337 DIR *dir;
4338 struct dirent *entry;
4339
4340 xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
4341 dir = opendir (path);
4342 if (!dir)
4343 return;
4344
4345 rewinddir (dir);
4346 while ((entry = readdir (dir)) != NULL)
4347 {
4348 struct stat st;
4349 struct statfs stfs;
4350 int fd;
4351
4352 fd = atoi (entry->d_name);
4353 if (!fd)
4354 continue;
4355
4356 xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
4357 if (stat (path, &st) != 0)
4358 continue;
4359 if (!S_ISDIR (st.st_mode))
4360 continue;
4361
4362 if (statfs (path, &stfs) != 0)
4363 continue;
4364 if (stfs.f_type != SPUFS_MAGIC)
4365 continue;
4366
4367 callback (data, fd);
4368 }
4369
4370 closedir (dir);
4371}
4372
4373/* Generate corefile notes for SPU contexts. */
4374
4375struct linux_spu_corefile_data
4376{
4377 bfd *obfd;
4378 char *note_data;
4379 int *note_size;
4380};
4381
4382static void
4383linux_spu_corefile_callback (void *data, int fd)
4384{
4385 struct linux_spu_corefile_data *args = data;
4386 int i;
4387
4388 static const char *spu_files[] =
4389 {
4390 "object-id",
4391 "mem",
4392 "regs",
4393 "fpcr",
4394 "lslr",
4395 "decr",
4396 "decr_status",
4397 "signal1",
4398 "signal1_type",
4399 "signal2",
4400 "signal2_type",
4401 "event_mask",
4402 "event_status",
4403 "mbox_info",
4404 "ibox_info",
4405 "wbox_info",
4406 "dma_info",
4407 "proxydma_info",
4408 };
4409
4410 for (i = 0; i < sizeof (spu_files) / sizeof (spu_files[0]); i++)
4411 {
4412 char annex[32], note_name[32];
4413 gdb_byte *spu_data;
4414 LONGEST spu_len;
4415
4416 xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[i]);
4417 spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
4418 annex, &spu_data);
4419 if (spu_len > 0)
4420 {
4421 xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
4422 args->note_data = elfcore_write_note (args->obfd, args->note_data,
4423 args->note_size, note_name,
4424 NT_SPU, spu_data, spu_len);
4425 xfree (spu_data);
4426 }
4427 }
4428}
4429
4430static char *
4431linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
4432{
4433 struct linux_spu_corefile_data args;
e0881a8e 4434
efcbbd14
UW
4435 args.obfd = obfd;
4436 args.note_data = note_data;
4437 args.note_size = note_size;
4438
4439 iterate_over_spus (PIDGET (inferior_ptid),
4440 linux_spu_corefile_callback, &args);
4441
4442 return args.note_data;
4443}
4444
dba24537
AC
4445/* Fills the "to_make_corefile_note" target vector. Builds the note
4446 section for a corefile, and returns it in a malloc buffer. */
4447
4448static char *
4449linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
4450{
4451 struct linux_nat_corefile_thread_data thread_args;
d99148ef 4452 /* The variable size must be >= sizeof (prpsinfo_t.pr_fname). */
dba24537 4453 char fname[16] = { '\0' };
d99148ef 4454 /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs). */
dba24537
AC
4455 char psargs[80] = { '\0' };
4456 char *note_data = NULL;
d90e17a7 4457 ptid_t filter = pid_to_ptid (ptid_get_pid (inferior_ptid));
c6826062 4458 gdb_byte *auxv;
dba24537
AC
4459 int auxv_len;
4460
4461 if (get_exec_file (0))
4462 {
4463 strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
4464 strncpy (psargs, get_exec_file (0), sizeof (psargs));
4465 if (get_inferior_args ())
4466 {
d99148ef
JK
4467 char *string_end;
4468 char *psargs_end = psargs + sizeof (psargs);
4469
4470 /* linux_elfcore_write_prpsinfo () handles zero unterminated
4471 strings fine. */
4472 string_end = memchr (psargs, 0, sizeof (psargs));
4473 if (string_end != NULL)
4474 {
4475 *string_end++ = ' ';
4476 strncpy (string_end, get_inferior_args (),
4477 psargs_end - string_end);
4478 }
dba24537
AC
4479 }
4480 note_data = (char *) elfcore_write_prpsinfo (obfd,
4481 note_data,
4482 note_size, fname, psargs);
4483 }
4484
4485 /* Dump information for threads. */
4486 thread_args.obfd = obfd;
4487 thread_args.note_data = note_data;
4488 thread_args.note_size = note_size;
4489 thread_args.num_notes = 0;
2020b7ab 4490 thread_args.stop_signal = find_stop_signal ();
d90e17a7 4491 iterate_over_lwps (filter, linux_nat_corefile_thread_callback, &thread_args);
2020b7ab
PA
4492 gdb_assert (thread_args.num_notes != 0);
4493 note_data = thread_args.note_data;
dba24537 4494
13547ab6
DJ
4495 auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
4496 NULL, &auxv);
dba24537
AC
4497 if (auxv_len > 0)
4498 {
4499 note_data = elfcore_write_note (obfd, note_data, note_size,
4500 "CORE", NT_AUXV, auxv, auxv_len);
4501 xfree (auxv);
4502 }
4503
efcbbd14
UW
4504 note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
4505
dba24537
AC
4506 make_cleanup (xfree, note_data);
4507 return note_data;
4508}
4509
4510/* Implement the "info proc" command. */
4511
4512static void
4513linux_nat_info_proc_cmd (char *args, int from_tty)
4514{
89ecc4f5
DE
4515 /* A long is used for pid instead of an int to avoid a loss of precision
4516 compiler warning from the output of strtoul. */
4517 long pid = PIDGET (inferior_ptid);
dba24537
AC
4518 FILE *procfile;
4519 char **argv = NULL;
4520 char buffer[MAXPATHLEN];
4521 char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
4522 int cmdline_f = 1;
4523 int cwd_f = 1;
4524 int exe_f = 1;
4525 int mappings_f = 0;
dba24537
AC
4526 int status_f = 0;
4527 int stat_f = 0;
4528 int all = 0;
4529 struct stat dummy;
4530
4531 if (args)
4532 {
4533 /* Break up 'args' into an argv array. */
d1a41061
PP
4534 argv = gdb_buildargv (args);
4535 make_cleanup_freeargv (argv);
dba24537
AC
4536 }
4537 while (argv != NULL && *argv != NULL)
4538 {
4539 if (isdigit (argv[0][0]))
4540 {
4541 pid = strtoul (argv[0], NULL, 10);
4542 }
4543 else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
4544 {
4545 mappings_f = 1;
4546 }
4547 else if (strcmp (argv[0], "status") == 0)
4548 {
4549 status_f = 1;
4550 }
4551 else if (strcmp (argv[0], "stat") == 0)
4552 {
4553 stat_f = 1;
4554 }
4555 else if (strcmp (argv[0], "cmd") == 0)
4556 {
4557 cmdline_f = 1;
4558 }
4559 else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
4560 {
4561 exe_f = 1;
4562 }
4563 else if (strcmp (argv[0], "cwd") == 0)
4564 {
4565 cwd_f = 1;
4566 }
4567 else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
4568 {
4569 all = 1;
4570 }
4571 else
4572 {
4573 /* [...] (future options here) */
4574 }
4575 argv++;
4576 }
4577 if (pid == 0)
8a3fe4f8 4578 error (_("No current process: you must name one."));
dba24537 4579
89ecc4f5 4580 sprintf (fname1, "/proc/%ld", pid);
dba24537 4581 if (stat (fname1, &dummy) != 0)
8a3fe4f8 4582 error (_("No /proc directory: '%s'"), fname1);
dba24537 4583
89ecc4f5 4584 printf_filtered (_("process %ld\n"), pid);
dba24537
AC
4585 if (cmdline_f || all)
4586 {
89ecc4f5 4587 sprintf (fname1, "/proc/%ld/cmdline", pid);
d5d6fca5 4588 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537 4589 {
7c8a8b04 4590 struct cleanup *cleanup = make_cleanup_fclose (procfile);
e0881a8e 4591
bf1d7d9c
JB
4592 if (fgets (buffer, sizeof (buffer), procfile))
4593 printf_filtered ("cmdline = '%s'\n", buffer);
4594 else
4595 warning (_("unable to read '%s'"), fname1);
7c8a8b04 4596 do_cleanups (cleanup);
dba24537
AC
4597 }
4598 else
8a3fe4f8 4599 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
4600 }
4601 if (cwd_f || all)
4602 {
89ecc4f5 4603 sprintf (fname1, "/proc/%ld/cwd", pid);
dba24537
AC
4604 memset (fname2, 0, sizeof (fname2));
4605 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
4606 printf_filtered ("cwd = '%s'\n", fname2);
4607 else
8a3fe4f8 4608 warning (_("unable to read link '%s'"), fname1);
dba24537
AC
4609 }
4610 if (exe_f || all)
4611 {
89ecc4f5 4612 sprintf (fname1, "/proc/%ld/exe", pid);
dba24537
AC
4613 memset (fname2, 0, sizeof (fname2));
4614 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
4615 printf_filtered ("exe = '%s'\n", fname2);
4616 else
8a3fe4f8 4617 warning (_("unable to read link '%s'"), fname1);
dba24537
AC
4618 }
4619 if (mappings_f || all)
4620 {
89ecc4f5 4621 sprintf (fname1, "/proc/%ld/maps", pid);
d5d6fca5 4622 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
4623 {
4624 long long addr, endaddr, size, offset, inode;
4625 char permissions[8], device[8], filename[MAXPATHLEN];
7c8a8b04 4626 struct cleanup *cleanup;
dba24537 4627
7c8a8b04 4628 cleanup = make_cleanup_fclose (procfile);
a3f17187 4629 printf_filtered (_("Mapped address spaces:\n\n"));
a97b0ac8 4630 if (gdbarch_addr_bit (target_gdbarch) == 32)
dba24537
AC
4631 {
4632 printf_filtered ("\t%10s %10s %10s %10s %7s\n",
4633 "Start Addr",
4634 " End Addr",
4635 " Size", " Offset", "objfile");
4636 }
4637 else
4638 {
4639 printf_filtered (" %18s %18s %10s %10s %7s\n",
4640 "Start Addr",
4641 " End Addr",
4642 " Size", " Offset", "objfile");
4643 }
4644
4645 while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
4646 &offset, &device[0], &inode, &filename[0]))
4647 {
4648 size = endaddr - addr;
4649
4650 /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
4651 calls here (and possibly above) should be abstracted
4652 out into their own functions? Andrew suggests using
4653 a generic local_address_string instead to print out
4654 the addresses; that makes sense to me, too. */
4655
a97b0ac8 4656 if (gdbarch_addr_bit (target_gdbarch) == 32)
dba24537
AC
4657 {
4658 printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
4659 (unsigned long) addr, /* FIXME: pr_addr */
4660 (unsigned long) endaddr,
4661 (int) size,
4662 (unsigned int) offset,
4663 filename[0] ? filename : "");
4664 }
4665 else
4666 {
4667 printf_filtered (" %#18lx %#18lx %#10x %#10x %7s\n",
4668 (unsigned long) addr, /* FIXME: pr_addr */
4669 (unsigned long) endaddr,
4670 (int) size,
4671 (unsigned int) offset,
4672 filename[0] ? filename : "");
4673 }
4674 }
4675
7c8a8b04 4676 do_cleanups (cleanup);
dba24537
AC
4677 }
4678 else
8a3fe4f8 4679 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
4680 }
4681 if (status_f || all)
4682 {
89ecc4f5 4683 sprintf (fname1, "/proc/%ld/status", pid);
d5d6fca5 4684 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537 4685 {
7c8a8b04 4686 struct cleanup *cleanup = make_cleanup_fclose (procfile);
e0881a8e 4687
dba24537
AC
4688 while (fgets (buffer, sizeof (buffer), procfile) != NULL)
4689 puts_filtered (buffer);
7c8a8b04 4690 do_cleanups (cleanup);
dba24537
AC
4691 }
4692 else
8a3fe4f8 4693 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
4694 }
4695 if (stat_f || all)
4696 {
89ecc4f5 4697 sprintf (fname1, "/proc/%ld/stat", pid);
d5d6fca5 4698 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
4699 {
4700 int itmp;
4701 char ctmp;
a25694b4 4702 long ltmp;
7c8a8b04 4703 struct cleanup *cleanup = make_cleanup_fclose (procfile);
dba24537
AC
4704
4705 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 4706 printf_filtered (_("Process: %d\n"), itmp);
a25694b4 4707 if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
a3f17187 4708 printf_filtered (_("Exec file: %s\n"), buffer);
dba24537 4709 if (fscanf (procfile, "%c ", &ctmp) > 0)
a3f17187 4710 printf_filtered (_("State: %c\n"), ctmp);
dba24537 4711 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 4712 printf_filtered (_("Parent process: %d\n"), itmp);
dba24537 4713 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 4714 printf_filtered (_("Process group: %d\n"), itmp);
dba24537 4715 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 4716 printf_filtered (_("Session id: %d\n"), itmp);
dba24537 4717 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 4718 printf_filtered (_("TTY: %d\n"), itmp);
dba24537 4719 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 4720 printf_filtered (_("TTY owner process group: %d\n"), itmp);
a25694b4
AS
4721 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4722 printf_filtered (_("Flags: 0x%lx\n"), ltmp);
4723 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4724 printf_filtered (_("Minor faults (no memory page): %lu\n"),
4725 (unsigned long) ltmp);
4726 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4727 printf_filtered (_("Minor faults, children: %lu\n"),
4728 (unsigned long) ltmp);
4729 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4730 printf_filtered (_("Major faults (memory page faults): %lu\n"),
4731 (unsigned long) ltmp);
4732 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4733 printf_filtered (_("Major faults, children: %lu\n"),
4734 (unsigned long) ltmp);
4735 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4736 printf_filtered (_("utime: %ld\n"), ltmp);
4737 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4738 printf_filtered (_("stime: %ld\n"), ltmp);
4739 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4740 printf_filtered (_("utime, children: %ld\n"), ltmp);
4741 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4742 printf_filtered (_("stime, children: %ld\n"), ltmp);
4743 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3e43a32a
MS
4744 printf_filtered (_("jiffies remaining in current "
4745 "time slice: %ld\n"), ltmp);
a25694b4
AS
4746 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4747 printf_filtered (_("'nice' value: %ld\n"), ltmp);
4748 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4749 printf_filtered (_("jiffies until next timeout: %lu\n"),
4750 (unsigned long) ltmp);
4751 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4752 printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
4753 (unsigned long) ltmp);
4754 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3e43a32a
MS
4755 printf_filtered (_("start time (jiffies since "
4756 "system boot): %ld\n"), ltmp);
a25694b4
AS
4757 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4758 printf_filtered (_("Virtual memory size: %lu\n"),
4759 (unsigned long) ltmp);
4760 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3e43a32a
MS
4761 printf_filtered (_("Resident set size: %lu\n"),
4762 (unsigned long) ltmp);
a25694b4
AS
4763 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4764 printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
4765 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4766 printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
4767 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4768 printf_filtered (_("End of text: 0x%lx\n"), ltmp);
4769 if (fscanf (procfile, "%lu ", &ltmp) > 0)
4770 printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
3e43a32a
MS
4771#if 0 /* Don't know how architecture-dependent the rest is...
4772 Anyway the signal bitmap info is available from "status". */
a25694b4
AS
4773 if (fscanf (procfile, "%lu ", &ltmp) > 0) /* FIXME arch? */
4774 printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
4775 if (fscanf (procfile, "%lu ", &ltmp) > 0) /* FIXME arch? */
4776 printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
4777 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4778 printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
4779 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4780 printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
4781 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4782 printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
4783 if (fscanf (procfile, "%ld ", &ltmp) > 0)
4784 printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
4785 if (fscanf (procfile, "%lu ", &ltmp) > 0) /* FIXME arch? */
4786 printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
dba24537 4787#endif
7c8a8b04 4788 do_cleanups (cleanup);
dba24537
AC
4789 }
4790 else
8a3fe4f8 4791 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
4792 }
4793}
4794
10d6c8cd
DJ
4795/* Implement the to_xfer_partial interface for memory reads using the /proc
4796 filesystem. Because we can use a single read() call for /proc, this
4797 can be much more efficient than banging away at PTRACE_PEEKTEXT,
4798 but it doesn't support writes. */
4799
4800static LONGEST
4801linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
4802 const char *annex, gdb_byte *readbuf,
4803 const gdb_byte *writebuf,
4804 ULONGEST offset, LONGEST len)
dba24537 4805{
10d6c8cd
DJ
4806 LONGEST ret;
4807 int fd;
dba24537
AC
4808 char filename[64];
4809
10d6c8cd 4810 if (object != TARGET_OBJECT_MEMORY || !readbuf)
dba24537
AC
4811 return 0;
4812
4813 /* Don't bother for one word. */
4814 if (len < 3 * sizeof (long))
4815 return 0;
4816
4817 /* We could keep this file open and cache it - possibly one per
4818 thread. That requires some juggling, but is even faster. */
4819 sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
4820 fd = open (filename, O_RDONLY | O_LARGEFILE);
4821 if (fd == -1)
4822 return 0;
4823
4824 /* If pread64 is available, use it. It's faster if the kernel
4825 supports it (only one syscall), and it's 64-bit safe even on
4826 32-bit platforms (for instance, SPARC debugging a SPARC64
4827 application). */
4828#ifdef HAVE_PREAD64
10d6c8cd 4829 if (pread64 (fd, readbuf, len, offset) != len)
dba24537 4830#else
10d6c8cd 4831 if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
dba24537
AC
4832#endif
4833 ret = 0;
4834 else
4835 ret = len;
4836
4837 close (fd);
4838 return ret;
4839}
4840
efcbbd14
UW
4841
4842/* Enumerate spufs IDs for process PID. */
4843static LONGEST
4844spu_enumerate_spu_ids (int pid, gdb_byte *buf, ULONGEST offset, LONGEST len)
4845{
4846 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
4847 LONGEST pos = 0;
4848 LONGEST written = 0;
4849 char path[128];
4850 DIR *dir;
4851 struct dirent *entry;
4852
4853 xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
4854 dir = opendir (path);
4855 if (!dir)
4856 return -1;
4857
4858 rewinddir (dir);
4859 while ((entry = readdir (dir)) != NULL)
4860 {
4861 struct stat st;
4862 struct statfs stfs;
4863 int fd;
4864
4865 fd = atoi (entry->d_name);
4866 if (!fd)
4867 continue;
4868
4869 xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
4870 if (stat (path, &st) != 0)
4871 continue;
4872 if (!S_ISDIR (st.st_mode))
4873 continue;
4874
4875 if (statfs (path, &stfs) != 0)
4876 continue;
4877 if (stfs.f_type != SPUFS_MAGIC)
4878 continue;
4879
4880 if (pos >= offset && pos + 4 <= offset + len)
4881 {
4882 store_unsigned_integer (buf + pos - offset, 4, byte_order, fd);
4883 written += 4;
4884 }
4885 pos += 4;
4886 }
4887
4888 closedir (dir);
4889 return written;
4890}
4891
4892/* Implement the to_xfer_partial interface for the TARGET_OBJECT_SPU
4893 object type, using the /proc file system. */
4894static LONGEST
4895linux_proc_xfer_spu (struct target_ops *ops, enum target_object object,
4896 const char *annex, gdb_byte *readbuf,
4897 const gdb_byte *writebuf,
4898 ULONGEST offset, LONGEST len)
4899{
4900 char buf[128];
4901 int fd = 0;
4902 int ret = -1;
4903 int pid = PIDGET (inferior_ptid);
4904
4905 if (!annex)
4906 {
4907 if (!readbuf)
4908 return -1;
4909 else
4910 return spu_enumerate_spu_ids (pid, readbuf, offset, len);
4911 }
4912
4913 xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
4914 fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
4915 if (fd <= 0)
4916 return -1;
4917
4918 if (offset != 0
4919 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4920 {
4921 close (fd);
4922 return 0;
4923 }
4924
4925 if (writebuf)
4926 ret = write (fd, writebuf, (size_t) len);
4927 else if (readbuf)
4928 ret = read (fd, readbuf, (size_t) len);
4929
4930 close (fd);
4931 return ret;
4932}
4933
4934
dba24537
AC
4935/* Parse LINE as a signal set and add its set bits to SIGS. */
4936
4937static void
4938add_line_to_sigset (const char *line, sigset_t *sigs)
4939{
4940 int len = strlen (line) - 1;
4941 const char *p;
4942 int signum;
4943
4944 if (line[len] != '\n')
8a3fe4f8 4945 error (_("Could not parse signal set: %s"), line);
dba24537
AC
4946
4947 p = line;
4948 signum = len * 4;
4949 while (len-- > 0)
4950 {
4951 int digit;
4952
4953 if (*p >= '0' && *p <= '9')
4954 digit = *p - '0';
4955 else if (*p >= 'a' && *p <= 'f')
4956 digit = *p - 'a' + 10;
4957 else
8a3fe4f8 4958 error (_("Could not parse signal set: %s"), line);
dba24537
AC
4959
4960 signum -= 4;
4961
4962 if (digit & 1)
4963 sigaddset (sigs, signum + 1);
4964 if (digit & 2)
4965 sigaddset (sigs, signum + 2);
4966 if (digit & 4)
4967 sigaddset (sigs, signum + 3);
4968 if (digit & 8)
4969 sigaddset (sigs, signum + 4);
4970
4971 p++;
4972 }
4973}
4974
4975/* Find process PID's pending signals from /proc/pid/status and set
4976 SIGS to match. */
4977
4978void
3e43a32a
MS
4979linux_proc_pending_signals (int pid, sigset_t *pending,
4980 sigset_t *blocked, sigset_t *ignored)
dba24537
AC
4981{
4982 FILE *procfile;
4983 char buffer[MAXPATHLEN], fname[MAXPATHLEN];
7c8a8b04 4984 struct cleanup *cleanup;
dba24537
AC
4985
4986 sigemptyset (pending);
4987 sigemptyset (blocked);
4988 sigemptyset (ignored);
4989 sprintf (fname, "/proc/%d/status", pid);
4990 procfile = fopen (fname, "r");
4991 if (procfile == NULL)
8a3fe4f8 4992 error (_("Could not open %s"), fname);
7c8a8b04 4993 cleanup = make_cleanup_fclose (procfile);
dba24537
AC
4994
4995 while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
4996 {
4997 /* Normal queued signals are on the SigPnd line in the status
4998 file. However, 2.6 kernels also have a "shared" pending
4999 queue for delivering signals to a thread group, so check for
5000 a ShdPnd line also.
5001
5002 Unfortunately some Red Hat kernels include the shared pending
5003 queue but not the ShdPnd status field. */
5004
5005 if (strncmp (buffer, "SigPnd:\t", 8) == 0)
5006 add_line_to_sigset (buffer + 8, pending);
5007 else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
5008 add_line_to_sigset (buffer + 8, pending);
5009 else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
5010 add_line_to_sigset (buffer + 8, blocked);
5011 else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
5012 add_line_to_sigset (buffer + 8, ignored);
5013 }
5014
7c8a8b04 5015 do_cleanups (cleanup);
dba24537
AC
5016}
5017
07e059b5
VP
5018static LONGEST
5019linux_nat_xfer_osdata (struct target_ops *ops, enum target_object object,
e0881a8e
MS
5020 const char *annex, gdb_byte *readbuf,
5021 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
07e059b5
VP
5022{
5023 /* We make the process list snapshot when the object starts to be
5024 read. */
5025 static const char *buf;
5026 static LONGEST len_avail = -1;
5027 static struct obstack obstack;
5028
5029 DIR *dirp;
5030
5031 gdb_assert (object == TARGET_OBJECT_OSDATA);
5032
a61408f8
SS
5033 if (!annex)
5034 {
5035 if (offset == 0)
5036 {
5037 if (len_avail != -1 && len_avail != 0)
5038 obstack_free (&obstack, NULL);
5039 len_avail = 0;
5040 buf = NULL;
5041 obstack_init (&obstack);
5042 obstack_grow_str (&obstack, "<osdata type=\"types\">\n");
5043
3e43a32a 5044 obstack_xml_printf (&obstack,
a61408f8
SS
5045 "<item>"
5046 "<column name=\"Type\">processes</column>"
3e43a32a
MS
5047 "<column name=\"Description\">"
5048 "Listing of all processes</column>"
a61408f8
SS
5049 "</item>");
5050
5051 obstack_grow_str0 (&obstack, "</osdata>\n");
5052 buf = obstack_finish (&obstack);
5053 len_avail = strlen (buf);
5054 }
5055
5056 if (offset >= len_avail)
5057 {
5058 /* Done. Get rid of the obstack. */
5059 obstack_free (&obstack, NULL);
5060 buf = NULL;
5061 len_avail = 0;
5062 return 0;
5063 }
5064
5065 if (len > len_avail - offset)
5066 len = len_avail - offset;
5067 memcpy (readbuf, buf + offset, len);
5068
5069 return len;
5070 }
5071
07e059b5
VP
5072 if (strcmp (annex, "processes") != 0)
5073 return 0;
5074
5075 gdb_assert (readbuf && !writebuf);
5076
5077 if (offset == 0)
5078 {
5079 if (len_avail != -1 && len_avail != 0)
e0881a8e 5080 obstack_free (&obstack, NULL);
07e059b5
VP
5081 len_avail = 0;
5082 buf = NULL;
5083 obstack_init (&obstack);
5084 obstack_grow_str (&obstack, "<osdata type=\"processes\">\n");
5085
5086 dirp = opendir ("/proc");
5087 if (dirp)
e0881a8e
MS
5088 {
5089 struct dirent *dp;
5090
5091 while ((dp = readdir (dirp)) != NULL)
5092 {
5093 struct stat statbuf;
5094 char procentry[sizeof ("/proc/4294967295")];
5095
5096 if (!isdigit (dp->d_name[0])
5097 || NAMELEN (dp) > sizeof ("4294967295") - 1)
5098 continue;
5099
5100 sprintf (procentry, "/proc/%s", dp->d_name);
5101 if (stat (procentry, &statbuf) == 0
5102 && S_ISDIR (statbuf.st_mode))
5103 {
5104 char *pathname;
5105 FILE *f;
5106 char cmd[MAXPATHLEN + 1];
5107 struct passwd *entry;
5108
5109 pathname = xstrprintf ("/proc/%s/cmdline", dp->d_name);
5110 entry = getpwuid (statbuf.st_uid);
5111
5112 if ((f = fopen (pathname, "r")) != NULL)
5113 {
5114 size_t len = fread (cmd, 1, sizeof (cmd) - 1, f);
5115
5116 if (len > 0)
5117 {
5118 int i;
5119
5120 for (i = 0; i < len; i++)
5121 if (cmd[i] == '\0')
5122 cmd[i] = ' ';
5123 cmd[len] = '\0';
5124
5125 obstack_xml_printf (
5126 &obstack,
5127 "<item>"
5128 "<column name=\"pid\">%s</column>"
5129 "<column name=\"user\">%s</column>"
5130 "<column name=\"command\">%s</column>"
5131 "</item>",
5132 dp->d_name,
5133 entry ? entry->pw_name : "?",
5134 cmd);
5135 }
5136 fclose (f);
5137 }
5138
5139 xfree (pathname);
5140 }
5141 }
5142
5143 closedir (dirp);
5144 }
07e059b5
VP
5145
5146 obstack_grow_str0 (&obstack, "</osdata>\n");
5147 buf = obstack_finish (&obstack);
5148 len_avail = strlen (buf);
5149 }
5150
5151 if (offset >= len_avail)
5152 {
5153 /* Done. Get rid of the obstack. */
5154 obstack_free (&obstack, NULL);
5155 buf = NULL;
5156 len_avail = 0;
5157 return 0;
5158 }
5159
5160 if (len > len_avail - offset)
5161 len = len_avail - offset;
5162 memcpy (readbuf, buf + offset, len);
5163
5164 return len;
5165}
5166
10d6c8cd
DJ
5167static LONGEST
5168linux_xfer_partial (struct target_ops *ops, enum target_object object,
5169 const char *annex, gdb_byte *readbuf,
5170 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
5171{
5172 LONGEST xfer;
5173
5174 if (object == TARGET_OBJECT_AUXV)
9f2982ff 5175 return memory_xfer_auxv (ops, object, annex, readbuf, writebuf,
10d6c8cd
DJ
5176 offset, len);
5177
07e059b5
VP
5178 if (object == TARGET_OBJECT_OSDATA)
5179 return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
5180 offset, len);
5181
efcbbd14
UW
5182 if (object == TARGET_OBJECT_SPU)
5183 return linux_proc_xfer_spu (ops, object, annex, readbuf, writebuf,
5184 offset, len);
5185
8f313923
JK
5186 /* GDB calculates all the addresses in possibly larget width of the address.
5187 Address width needs to be masked before its final use - either by
5188 linux_proc_xfer_partial or inf_ptrace_xfer_partial.
5189
5190 Compare ADDR_BIT first to avoid a compiler warning on shift overflow. */
5191
5192 if (object == TARGET_OBJECT_MEMORY)
5193 {
5194 int addr_bit = gdbarch_addr_bit (target_gdbarch);
5195
5196 if (addr_bit < (sizeof (ULONGEST) * HOST_CHAR_BIT))
5197 offset &= ((ULONGEST) 1 << addr_bit) - 1;
5198 }
5199
10d6c8cd
DJ
5200 xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
5201 offset, len);
5202 if (xfer != 0)
5203 return xfer;
5204
5205 return super_xfer_partial (ops, object, annex, readbuf, writebuf,
5206 offset, len);
5207}
5208
e9efe249 5209/* Create a prototype generic GNU/Linux target. The client can override
10d6c8cd
DJ
5210 it with local methods. */
5211
910122bf
UW
5212static void
5213linux_target_install_ops (struct target_ops *t)
10d6c8cd 5214{
6d8fd2b7
UW
5215 t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
5216 t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
5217 t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
a96d9b2e 5218 t->to_set_syscall_catchpoint = linux_child_set_syscall_catchpoint;
6d8fd2b7 5219 t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
10d6c8cd 5220 t->to_post_startup_inferior = linux_child_post_startup_inferior;
6d8fd2b7
UW
5221 t->to_post_attach = linux_child_post_attach;
5222 t->to_follow_fork = linux_child_follow_fork;
10d6c8cd
DJ
5223 t->to_find_memory_regions = linux_nat_find_memory_regions;
5224 t->to_make_corefile_notes = linux_nat_make_corefile_notes;
5225
5226 super_xfer_partial = t->to_xfer_partial;
5227 t->to_xfer_partial = linux_xfer_partial;
910122bf
UW
5228}
5229
5230struct target_ops *
5231linux_target (void)
5232{
5233 struct target_ops *t;
5234
5235 t = inf_ptrace_target ();
5236 linux_target_install_ops (t);
5237
5238 return t;
5239}
5240
5241struct target_ops *
7714d83a 5242linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
910122bf
UW
5243{
5244 struct target_ops *t;
5245
5246 t = inf_ptrace_trad_target (register_u_offset);
5247 linux_target_install_ops (t);
10d6c8cd 5248
10d6c8cd
DJ
5249 return t;
5250}
5251
b84876c2
PA
5252/* target_is_async_p implementation. */
5253
5254static int
5255linux_nat_is_async_p (void)
5256{
5257 /* NOTE: palves 2008-03-21: We're only async when the user requests
7feb7d06 5258 it explicitly with the "set target-async" command.
b84876c2 5259 Someday, linux will always be async. */
c6ebd6cf 5260 if (!target_async_permitted)
b84876c2
PA
5261 return 0;
5262
d90e17a7
PA
5263 /* See target.h/target_async_mask. */
5264 return linux_nat_async_mask_value;
b84876c2
PA
5265}
5266
5267/* target_can_async_p implementation. */
5268
5269static int
5270linux_nat_can_async_p (void)
5271{
5272 /* NOTE: palves 2008-03-21: We're only async when the user requests
7feb7d06 5273 it explicitly with the "set target-async" command.
b84876c2 5274 Someday, linux will always be async. */
c6ebd6cf 5275 if (!target_async_permitted)
b84876c2
PA
5276 return 0;
5277
5278 /* See target.h/target_async_mask. */
5279 return linux_nat_async_mask_value;
5280}
5281
9908b566
VP
5282static int
5283linux_nat_supports_non_stop (void)
5284{
5285 return 1;
5286}
5287
d90e17a7
PA
5288/* True if we want to support multi-process. To be removed when GDB
5289 supports multi-exec. */
5290
2277426b 5291int linux_multi_process = 1;
d90e17a7
PA
5292
5293static int
5294linux_nat_supports_multi_process (void)
5295{
5296 return linux_multi_process;
5297}
5298
b84876c2
PA
5299/* target_async_mask implementation. */
5300
5301static int
7feb7d06 5302linux_nat_async_mask (int new_mask)
b84876c2 5303{
7feb7d06 5304 int curr_mask = linux_nat_async_mask_value;
b84876c2 5305
7feb7d06 5306 if (curr_mask != new_mask)
b84876c2 5307 {
7feb7d06 5308 if (new_mask == 0)
b84876c2
PA
5309 {
5310 linux_nat_async (NULL, 0);
7feb7d06 5311 linux_nat_async_mask_value = new_mask;
b84876c2
PA
5312 }
5313 else
5314 {
7feb7d06 5315 linux_nat_async_mask_value = new_mask;
84e46146 5316
7feb7d06
PA
5317 /* If we're going out of async-mask in all-stop, then the
5318 inferior is stopped. The next resume will call
5319 target_async. In non-stop, the target event source
5320 should be always registered in the event loop. Do so
5321 now. */
5322 if (non_stop)
5323 linux_nat_async (inferior_event_handler, 0);
b84876c2
PA
5324 }
5325 }
5326
7feb7d06 5327 return curr_mask;
b84876c2
PA
5328}
5329
5330static int async_terminal_is_ours = 1;
5331
5332/* target_terminal_inferior implementation. */
5333
5334static void
5335linux_nat_terminal_inferior (void)
5336{
5337 if (!target_is_async_p ())
5338 {
5339 /* Async mode is disabled. */
5340 terminal_inferior ();
5341 return;
5342 }
5343
b84876c2
PA
5344 terminal_inferior ();
5345
d9d2d8b6 5346 /* Calls to target_terminal_*() are meant to be idempotent. */
b84876c2
PA
5347 if (!async_terminal_is_ours)
5348 return;
5349
5350 delete_file_handler (input_fd);
5351 async_terminal_is_ours = 0;
5352 set_sigint_trap ();
5353}
5354
5355/* target_terminal_ours implementation. */
5356
2c0b251b 5357static void
b84876c2
PA
5358linux_nat_terminal_ours (void)
5359{
5360 if (!target_is_async_p ())
5361 {
5362 /* Async mode is disabled. */
5363 terminal_ours ();
5364 return;
5365 }
5366
5367 /* GDB should never give the terminal to the inferior if the
5368 inferior is running in the background (run&, continue&, etc.),
5369 but claiming it sure should. */
5370 terminal_ours ();
5371
b84876c2
PA
5372 if (async_terminal_is_ours)
5373 return;
5374
5375 clear_sigint_trap ();
5376 add_file_handler (input_fd, stdin_event_handler, 0);
5377 async_terminal_is_ours = 1;
5378}
5379
5380static void (*async_client_callback) (enum inferior_event_type event_type,
5381 void *context);
5382static void *async_client_context;
5383
7feb7d06
PA
5384/* SIGCHLD handler that serves two purposes: In non-stop/async mode,
5385 so we notice when any child changes state, and notify the
5386 event-loop; it allows us to use sigsuspend in linux_nat_wait_1
5387 above to wait for the arrival of a SIGCHLD. */
5388
b84876c2 5389static void
7feb7d06 5390sigchld_handler (int signo)
b84876c2 5391{
7feb7d06
PA
5392 int old_errno = errno;
5393
5394 if (debug_linux_nat_async)
5395 fprintf_unfiltered (gdb_stdlog, "sigchld\n");
5396
5397 if (signo == SIGCHLD
5398 && linux_nat_event_pipe[0] != -1)
5399 async_file_mark (); /* Let the event loop know that there are
5400 events to handle. */
5401
5402 errno = old_errno;
5403}
5404
5405/* Callback registered with the target events file descriptor. */
5406
5407static void
5408handle_target_event (int error, gdb_client_data client_data)
5409{
5410 (*async_client_callback) (INF_REG_EVENT, async_client_context);
5411}
5412
5413/* Create/destroy the target events pipe. Returns previous state. */
5414
5415static int
5416linux_async_pipe (int enable)
5417{
5418 int previous = (linux_nat_event_pipe[0] != -1);
5419
5420 if (previous != enable)
5421 {
5422 sigset_t prev_mask;
5423
5424 block_child_signals (&prev_mask);
5425
5426 if (enable)
5427 {
5428 if (pipe (linux_nat_event_pipe) == -1)
5429 internal_error (__FILE__, __LINE__,
5430 "creating event pipe failed.");
5431
5432 fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
5433 fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
5434 }
5435 else
5436 {
5437 close (linux_nat_event_pipe[0]);
5438 close (linux_nat_event_pipe[1]);
5439 linux_nat_event_pipe[0] = -1;
5440 linux_nat_event_pipe[1] = -1;
5441 }
5442
5443 restore_child_signals_mask (&prev_mask);
5444 }
5445
5446 return previous;
b84876c2
PA
5447}
5448
5449/* target_async implementation. */
5450
5451static void
5452linux_nat_async (void (*callback) (enum inferior_event_type event_type,
5453 void *context), void *context)
5454{
c6ebd6cf 5455 if (linux_nat_async_mask_value == 0 || !target_async_permitted)
b84876c2
PA
5456 internal_error (__FILE__, __LINE__,
5457 "Calling target_async when async is masked");
5458
5459 if (callback != NULL)
5460 {
5461 async_client_callback = callback;
5462 async_client_context = context;
7feb7d06
PA
5463 if (!linux_async_pipe (1))
5464 {
5465 add_file_handler (linux_nat_event_pipe[0],
5466 handle_target_event, NULL);
5467 /* There may be pending events to handle. Tell the event loop
5468 to poll them. */
5469 async_file_mark ();
5470 }
b84876c2
PA
5471 }
5472 else
5473 {
5474 async_client_callback = callback;
5475 async_client_context = context;
b84876c2 5476 delete_file_handler (linux_nat_event_pipe[0]);
7feb7d06 5477 linux_async_pipe (0);
b84876c2
PA
5478 }
5479 return;
5480}
5481
252fbfc8
PA
5482/* Stop an LWP, and push a TARGET_SIGNAL_0 stop status if no other
5483 event came out. */
5484
4c28f408 5485static int
252fbfc8 5486linux_nat_stop_lwp (struct lwp_info *lwp, void *data)
4c28f408 5487{
d90e17a7 5488 if (!lwp->stopped)
252fbfc8 5489 {
d90e17a7 5490 ptid_t ptid = lwp->ptid;
252fbfc8 5491
d90e17a7
PA
5492 if (debug_linux_nat)
5493 fprintf_unfiltered (gdb_stdlog,
5494 "LNSL: running -> suspending %s\n",
5495 target_pid_to_str (lwp->ptid));
252fbfc8 5496
252fbfc8 5497
d90e17a7
PA
5498 stop_callback (lwp, NULL);
5499 stop_wait_callback (lwp, NULL);
252fbfc8 5500
d90e17a7
PA
5501 /* If the lwp exits while we try to stop it, there's nothing
5502 else to do. */
5503 lwp = find_lwp_pid (ptid);
5504 if (lwp == NULL)
5505 return 0;
252fbfc8 5506
d90e17a7
PA
5507 /* If we didn't collect any signal other than SIGSTOP while
5508 stopping the LWP, push a SIGNAL_0 event. In either case, the
5509 event-loop will end up calling target_wait which will collect
5510 these. */
5511 if (lwp->status == 0)
5512 lwp->status = W_STOPCODE (0);
5513 async_file_mark ();
5514 }
5515 else
5516 {
5517 /* Already known to be stopped; do nothing. */
252fbfc8 5518
d90e17a7
PA
5519 if (debug_linux_nat)
5520 {
e09875d4 5521 if (find_thread_ptid (lwp->ptid)->stop_requested)
3e43a32a
MS
5522 fprintf_unfiltered (gdb_stdlog,
5523 "LNSL: already stopped/stop_requested %s\n",
d90e17a7
PA
5524 target_pid_to_str (lwp->ptid));
5525 else
3e43a32a
MS
5526 fprintf_unfiltered (gdb_stdlog,
5527 "LNSL: already stopped/no "
5528 "stop_requested yet %s\n",
d90e17a7 5529 target_pid_to_str (lwp->ptid));
252fbfc8
PA
5530 }
5531 }
4c28f408
PA
5532 return 0;
5533}
5534
5535static void
5536linux_nat_stop (ptid_t ptid)
5537{
5538 if (non_stop)
d90e17a7 5539 iterate_over_lwps (ptid, linux_nat_stop_lwp, NULL);
4c28f408
PA
5540 else
5541 linux_ops->to_stop (ptid);
5542}
5543
d90e17a7
PA
5544static void
5545linux_nat_close (int quitting)
5546{
5547 /* Unregister from the event loop. */
5548 if (target_is_async_p ())
5549 target_async (NULL, 0);
5550
5551 /* Reset the async_masking. */
5552 linux_nat_async_mask_value = 1;
5553
5554 if (linux_ops->to_close)
5555 linux_ops->to_close (quitting);
5556}
5557
c0694254
PA
5558/* When requests are passed down from the linux-nat layer to the
5559 single threaded inf-ptrace layer, ptids of (lwpid,0,0) form are
5560 used. The address space pointer is stored in the inferior object,
5561 but the common code that is passed such ptid can't tell whether
5562 lwpid is a "main" process id or not (it assumes so). We reverse
5563 look up the "main" process id from the lwp here. */
5564
5565struct address_space *
5566linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
5567{
5568 struct lwp_info *lwp;
5569 struct inferior *inf;
5570 int pid;
5571
5572 pid = GET_LWP (ptid);
5573 if (GET_LWP (ptid) == 0)
5574 {
5575 /* An (lwpid,0,0) ptid. Look up the lwp object to get at the
5576 tgid. */
5577 lwp = find_lwp_pid (ptid);
5578 pid = GET_PID (lwp->ptid);
5579 }
5580 else
5581 {
5582 /* A (pid,lwpid,0) ptid. */
5583 pid = GET_PID (ptid);
5584 }
5585
5586 inf = find_inferior_pid (pid);
5587 gdb_assert (inf != NULL);
5588 return inf->aspace;
5589}
5590
dc146f7c
VP
5591int
5592linux_nat_core_of_thread_1 (ptid_t ptid)
5593{
5594 struct cleanup *back_to;
5595 char *filename;
5596 FILE *f;
5597 char *content = NULL;
5598 char *p;
5599 char *ts = 0;
5600 int content_read = 0;
5601 int i;
5602 int core;
5603
5604 filename = xstrprintf ("/proc/%d/task/%ld/stat",
5605 GET_PID (ptid), GET_LWP (ptid));
5606 back_to = make_cleanup (xfree, filename);
5607
5608 f = fopen (filename, "r");
5609 if (!f)
5610 {
5611 do_cleanups (back_to);
5612 return -1;
5613 }
5614
5615 make_cleanup_fclose (f);
5616
5617 for (;;)
5618 {
5619 int n;
e0881a8e 5620
dc146f7c
VP
5621 content = xrealloc (content, content_read + 1024);
5622 n = fread (content + content_read, 1, 1024, f);
5623 content_read += n;
5624 if (n < 1024)
5625 {
5626 content[content_read] = '\0';
5627 break;
5628 }
5629 }
5630
5631 make_cleanup (xfree, content);
5632
5633 p = strchr (content, '(');
ca2a87a0
JK
5634
5635 /* Skip ")". */
5636 if (p != NULL)
5637 p = strchr (p, ')');
5638 if (p != NULL)
5639 p++;
dc146f7c
VP
5640
5641 /* If the first field after program name has index 0, then core number is
5642 the field with index 36. There's no constant for that anywhere. */
ca2a87a0
JK
5643 if (p != NULL)
5644 p = strtok_r (p, " ", &ts);
5645 for (i = 0; p != NULL && i != 36; ++i)
dc146f7c
VP
5646 p = strtok_r (NULL, " ", &ts);
5647
ca2a87a0 5648 if (p == NULL || sscanf (p, "%d", &core) == 0)
dc146f7c
VP
5649 core = -1;
5650
5651 do_cleanups (back_to);
5652
5653 return core;
5654}
5655
5656/* Return the cached value of the processor core for thread PTID. */
5657
5658int
5659linux_nat_core_of_thread (struct target_ops *ops, ptid_t ptid)
5660{
5661 struct lwp_info *info = find_lwp_pid (ptid);
e0881a8e 5662
dc146f7c
VP
5663 if (info)
5664 return info->core;
5665 return -1;
5666}
5667
f973ed9c
DJ
5668void
5669linux_nat_add_target (struct target_ops *t)
5670{
f973ed9c
DJ
5671 /* Save the provided single-threaded target. We save this in a separate
5672 variable because another target we've inherited from (e.g. inf-ptrace)
5673 may have saved a pointer to T; we want to use it for the final
5674 process stratum target. */
5675 linux_ops_saved = *t;
5676 linux_ops = &linux_ops_saved;
5677
5678 /* Override some methods for multithreading. */
b84876c2 5679 t->to_create_inferior = linux_nat_create_inferior;
f973ed9c
DJ
5680 t->to_attach = linux_nat_attach;
5681 t->to_detach = linux_nat_detach;
5682 t->to_resume = linux_nat_resume;
5683 t->to_wait = linux_nat_wait;
5684 t->to_xfer_partial = linux_nat_xfer_partial;
5685 t->to_kill = linux_nat_kill;
5686 t->to_mourn_inferior = linux_nat_mourn_inferior;
5687 t->to_thread_alive = linux_nat_thread_alive;
5688 t->to_pid_to_str = linux_nat_pid_to_str;
5689 t->to_has_thread_control = tc_schedlock;
c0694254 5690 t->to_thread_address_space = linux_nat_thread_address_space;
ebec9a0f
PA
5691 t->to_stopped_by_watchpoint = linux_nat_stopped_by_watchpoint;
5692 t->to_stopped_data_address = linux_nat_stopped_data_address;
f973ed9c 5693
b84876c2
PA
5694 t->to_can_async_p = linux_nat_can_async_p;
5695 t->to_is_async_p = linux_nat_is_async_p;
9908b566 5696 t->to_supports_non_stop = linux_nat_supports_non_stop;
b84876c2
PA
5697 t->to_async = linux_nat_async;
5698 t->to_async_mask = linux_nat_async_mask;
5699 t->to_terminal_inferior = linux_nat_terminal_inferior;
5700 t->to_terminal_ours = linux_nat_terminal_ours;
d90e17a7 5701 t->to_close = linux_nat_close;
b84876c2 5702
4c28f408
PA
5703 /* Methods for non-stop support. */
5704 t->to_stop = linux_nat_stop;
5705
d90e17a7
PA
5706 t->to_supports_multi_process = linux_nat_supports_multi_process;
5707
dc146f7c
VP
5708 t->to_core_of_thread = linux_nat_core_of_thread;
5709
f973ed9c
DJ
5710 /* We don't change the stratum; this target will sit at
5711 process_stratum and thread_db will set at thread_stratum. This
5712 is a little strange, since this is a multi-threaded-capable
5713 target, but we want to be on the stack below thread_db, and we
5714 also want to be used for single-threaded processes. */
5715
5716 add_target (t);
f973ed9c
DJ
5717}
5718
9f0bdab8
DJ
5719/* Register a method to call whenever a new thread is attached. */
5720void
5721linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
5722{
5723 /* Save the pointer. We only support a single registered instance
5724 of the GNU/Linux native target, so we do not need to map this to
5725 T. */
5726 linux_nat_new_thread = new_thread;
5727}
5728
5b009018
PA
5729/* Register a method that converts a siginfo object between the layout
5730 that ptrace returns, and the layout in the architecture of the
5731 inferior. */
5732void
5733linux_nat_set_siginfo_fixup (struct target_ops *t,
5734 int (*siginfo_fixup) (struct siginfo *,
5735 gdb_byte *,
5736 int))
5737{
5738 /* Save the pointer. */
5739 linux_nat_siginfo_fixup = siginfo_fixup;
5740}
5741
9f0bdab8
DJ
5742/* Return the saved siginfo associated with PTID. */
5743struct siginfo *
5744linux_nat_get_siginfo (ptid_t ptid)
5745{
5746 struct lwp_info *lp = find_lwp_pid (ptid);
5747
5748 gdb_assert (lp != NULL);
5749
5750 return &lp->siginfo;
5751}
5752
2c0b251b
PA
5753/* Provide a prototype to silence -Wmissing-prototypes. */
5754extern initialize_file_ftype _initialize_linux_nat;
5755
d6b0e80f
AC
5756void
5757_initialize_linux_nat (void)
5758{
1bedd215
AC
5759 add_info ("proc", linux_nat_info_proc_cmd, _("\
5760Show /proc process information about any running process.\n\
dba24537
AC
5761Specify any process id, or use the program being debugged by default.\n\
5762Specify any of the following keywords for detailed info:\n\
5763 mappings -- list of mapped memory regions.\n\
5764 stat -- list a bunch of random process info.\n\
5765 status -- list a different bunch of random process info.\n\
1bedd215 5766 all -- list all available /proc info."));
d6b0e80f 5767
b84876c2
PA
5768 add_setshow_zinteger_cmd ("lin-lwp", class_maintenance,
5769 &debug_linux_nat, _("\
5770Set debugging of GNU/Linux lwp module."), _("\
5771Show debugging of GNU/Linux lwp module."), _("\
5772Enables printf debugging output."),
5773 NULL,
5774 show_debug_linux_nat,
5775 &setdebuglist, &showdebuglist);
5776
5777 add_setshow_zinteger_cmd ("lin-lwp-async", class_maintenance,
5778 &debug_linux_nat_async, _("\
5779Set debugging of GNU/Linux async lwp module."), _("\
5780Show debugging of GNU/Linux async lwp module."), _("\
5781Enables printf debugging output."),
5782 NULL,
5783 show_debug_linux_nat_async,
5784 &setdebuglist, &showdebuglist);
5785
b84876c2 5786 /* Save this mask as the default. */
d6b0e80f
AC
5787 sigprocmask (SIG_SETMASK, NULL, &normal_mask);
5788
7feb7d06
PA
5789 /* Install a SIGCHLD handler. */
5790 sigchld_action.sa_handler = sigchld_handler;
5791 sigemptyset (&sigchld_action.sa_mask);
5792 sigchld_action.sa_flags = SA_RESTART;
b84876c2
PA
5793
5794 /* Make it the default. */
7feb7d06 5795 sigaction (SIGCHLD, &sigchld_action, NULL);
d6b0e80f
AC
5796
5797 /* Make sure we don't block SIGCHLD during a sigsuspend. */
5798 sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
5799 sigdelset (&suspend_mask, SIGCHLD);
5800
7feb7d06 5801 sigemptyset (&blocked_mask);
10568435
JK
5802
5803 add_setshow_boolean_cmd ("disable-randomization", class_support,
5804 &disable_randomization, _("\
5805Set disabling of debuggee's virtual address space randomization."), _("\
5806Show disabling of debuggee's virtual address space randomization."), _("\
5807When this mode is on (which is the default), randomization of the virtual\n\
5808address space is disabled. Standalone programs run with the randomization\n\
5809enabled by default on some platforms."),
5810 &set_disable_randomization,
5811 &show_disable_randomization,
5812 &setlist, &showlist);
d6b0e80f
AC
5813}
5814\f
5815
5816/* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
5817 the GNU/Linux Threads library and therefore doesn't really belong
5818 here. */
5819
5820/* Read variable NAME in the target and return its value if found.
5821 Otherwise return zero. It is assumed that the type of the variable
5822 is `int'. */
5823
5824static int
5825get_signo (const char *name)
5826{
5827 struct minimal_symbol *ms;
5828 int signo;
5829
5830 ms = lookup_minimal_symbol (name, NULL, NULL);
5831 if (ms == NULL)
5832 return 0;
5833
8e70166d 5834 if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
d6b0e80f
AC
5835 sizeof (signo)) != 0)
5836 return 0;
5837
5838 return signo;
5839}
5840
5841/* Return the set of signals used by the threads library in *SET. */
5842
5843void
5844lin_thread_get_thread_signals (sigset_t *set)
5845{
5846 struct sigaction action;
5847 int restart, cancel;
5848
b84876c2 5849 sigemptyset (&blocked_mask);
d6b0e80f
AC
5850 sigemptyset (set);
5851
5852 restart = get_signo ("__pthread_sig_restart");
17fbb0bd
DJ
5853 cancel = get_signo ("__pthread_sig_cancel");
5854
5855 /* LinuxThreads normally uses the first two RT signals, but in some legacy
5856 cases may use SIGUSR1/SIGUSR2. NPTL always uses RT signals, but does
5857 not provide any way for the debugger to query the signal numbers -
5858 fortunately they don't change! */
5859
d6b0e80f 5860 if (restart == 0)
17fbb0bd 5861 restart = __SIGRTMIN;
d6b0e80f 5862
d6b0e80f 5863 if (cancel == 0)
17fbb0bd 5864 cancel = __SIGRTMIN + 1;
d6b0e80f
AC
5865
5866 sigaddset (set, restart);
5867 sigaddset (set, cancel);
5868
5869 /* The GNU/Linux Threads library makes terminating threads send a
5870 special "cancel" signal instead of SIGCHLD. Make sure we catch
5871 those (to prevent them from terminating GDB itself, which is
5872 likely to be their default action) and treat them the same way as
5873 SIGCHLD. */
5874
5875 action.sa_handler = sigchld_handler;
5876 sigemptyset (&action.sa_mask);
58aecb61 5877 action.sa_flags = SA_RESTART;
d6b0e80f
AC
5878 sigaction (cancel, &action, NULL);
5879
5880 /* We block the "cancel" signal throughout this code ... */
5881 sigaddset (&blocked_mask, cancel);
5882 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
5883
5884 /* ... except during a sigsuspend. */
5885 sigdelset (&suspend_mask, cancel);
5886}
This page took 0.996282 seconds and 4 git commands to generate.