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