* linux-nat.c (linux_nat_switch_fork): Reinit GDB's thread list
[deliverable/binutils-gdb.git] / gdb / linux-nat.c
CommitLineData
3993f6b1 1/* GNU/Linux native-dependent code common to multiple platforms.
dba24537 2
9b254dd1 3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
e26af52f 4 Free Software Foundation, Inc.
3993f6b1
DJ
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
3993f6b1
DJ
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
3993f6b1
DJ
20
21#include "defs.h"
22#include "inferior.h"
23#include "target.h"
d6b0e80f 24#include "gdb_string.h"
3993f6b1 25#include "gdb_wait.h"
d6b0e80f
AC
26#include "gdb_assert.h"
27#ifdef HAVE_TKILL_SYSCALL
28#include <unistd.h>
29#include <sys/syscall.h>
30#endif
3993f6b1 31#include <sys/ptrace.h>
0274a8ce 32#include "linux-nat.h"
ac264b3b 33#include "linux-fork.h"
d6b0e80f
AC
34#include "gdbthread.h"
35#include "gdbcmd.h"
36#include "regcache.h"
4f844a66 37#include "regset.h"
10d6c8cd
DJ
38#include "inf-ptrace.h"
39#include "auxv.h"
dba24537
AC
40#include <sys/param.h> /* for MAXPATHLEN */
41#include <sys/procfs.h> /* for elf_gregset etc. */
42#include "elf-bfd.h" /* for elfcore_write_* */
43#include "gregset.h" /* for gregset */
44#include "gdbcore.h" /* for get_exec_file */
45#include <ctype.h> /* for isdigit */
46#include "gdbthread.h" /* for struct thread_info etc. */
47#include "gdb_stat.h" /* for struct stat */
48#include <fcntl.h> /* for O_RDONLY */
b84876c2
PA
49#include "inf-loop.h"
50#include "event-loop.h"
51#include "event-top.h"
dba24537 52
a0ef4274
DJ
53/* Note on this file's use of signals:
54
55 We stop threads by sending a SIGSTOP. The use of SIGSTOP instead
56 of another signal is not entirely significant; we just need for a
57 signal to be delivered, so that we can intercept it. SIGSTOP's
58 advantage is that it can not be blocked. A disadvantage is that it
59 is not a real-time signal, so it can only be queued once; we do not
60 keep track of other sources of SIGSTOP.
61
62 Two other signals that can't be blocked are SIGCONT and SIGKILL.
63 But we can't use them, because they have special behavior when the
64 signal is generated - not when it is delivered. SIGCONT resumes
65 the entire thread group and SIGKILL kills the entire thread group.
66
67 A delivered SIGSTOP would stop the entire thread group, not just the
68 thread we tkill'd. But we never let the SIGSTOP deliver; we always
69 intercept and cancel it (by PTRACE_CONT without passing SIGSTOP).
70
71 We could use a real-time signal instead. This would solve those
72 problems; we could use PTRACE_GETSIGINFO to locate the specific
73 stop signals sent by GDB. But we would still have to have some
74 support for SIGSTOP, since PTRACE_ATTACH generates it, and there
75 are races with trying to find a signal that is not blocked. */
76
dba24537
AC
77#ifndef O_LARGEFILE
78#define O_LARGEFILE 0
79#endif
0274a8ce 80
3993f6b1
DJ
81/* If the system headers did not provide the constants, hard-code the normal
82 values. */
83#ifndef PTRACE_EVENT_FORK
84
85#define PTRACE_SETOPTIONS 0x4200
86#define PTRACE_GETEVENTMSG 0x4201
87
88/* options set using PTRACE_SETOPTIONS */
89#define PTRACE_O_TRACESYSGOOD 0x00000001
90#define PTRACE_O_TRACEFORK 0x00000002
91#define PTRACE_O_TRACEVFORK 0x00000004
92#define PTRACE_O_TRACECLONE 0x00000008
93#define PTRACE_O_TRACEEXEC 0x00000010
9016a515
DJ
94#define PTRACE_O_TRACEVFORKDONE 0x00000020
95#define PTRACE_O_TRACEEXIT 0x00000040
3993f6b1
DJ
96
97/* Wait extended result codes for the above trace options. */
98#define PTRACE_EVENT_FORK 1
99#define PTRACE_EVENT_VFORK 2
100#define PTRACE_EVENT_CLONE 3
101#define PTRACE_EVENT_EXEC 4
c874c7fc 102#define PTRACE_EVENT_VFORK_DONE 5
9016a515 103#define PTRACE_EVENT_EXIT 6
3993f6b1
DJ
104
105#endif /* PTRACE_EVENT_FORK */
106
107/* We can't always assume that this flag is available, but all systems
108 with the ptrace event handlers also have __WALL, so it's safe to use
109 here. */
110#ifndef __WALL
111#define __WALL 0x40000000 /* Wait for any child. */
112#endif
113
02d3ff8c
UW
114#ifndef PTRACE_GETSIGINFO
115#define PTRACE_GETSIGINFO 0x4202
116#endif
117
10d6c8cd
DJ
118/* The single-threaded native GNU/Linux target_ops. We save a pointer for
119 the use of the multi-threaded target. */
120static struct target_ops *linux_ops;
f973ed9c 121static struct target_ops linux_ops_saved;
10d6c8cd 122
9f0bdab8
DJ
123/* The method to call, if any, when a new thread is attached. */
124static void (*linux_nat_new_thread) (ptid_t);
125
ac264b3b
MS
126/* The saved to_xfer_partial method, inherited from inf-ptrace.c.
127 Called by our to_xfer_partial. */
128static LONGEST (*super_xfer_partial) (struct target_ops *,
129 enum target_object,
130 const char *, gdb_byte *,
131 const gdb_byte *,
10d6c8cd
DJ
132 ULONGEST, LONGEST);
133
d6b0e80f 134static int debug_linux_nat;
920d2a44
AC
135static void
136show_debug_linux_nat (struct ui_file *file, int from_tty,
137 struct cmd_list_element *c, const char *value)
138{
139 fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
140 value);
141}
d6b0e80f 142
b84876c2
PA
143static int debug_linux_nat_async = 0;
144static void
145show_debug_linux_nat_async (struct ui_file *file, int from_tty,
146 struct cmd_list_element *c, const char *value)
147{
148 fprintf_filtered (file, _("Debugging of GNU/Linux async lwp module is %s.\n"),
149 value);
150}
151
9016a515
DJ
152static int linux_parent_pid;
153
ae087d01
DJ
154struct simple_pid_list
155{
156 int pid;
3d799a95 157 int status;
ae087d01
DJ
158 struct simple_pid_list *next;
159};
160struct simple_pid_list *stopped_pids;
161
3993f6b1
DJ
162/* This variable is a tri-state flag: -1 for unknown, 0 if PTRACE_O_TRACEFORK
163 can not be used, 1 if it can. */
164
165static int linux_supports_tracefork_flag = -1;
166
9016a515
DJ
167/* If we have PTRACE_O_TRACEFORK, this flag indicates whether we also have
168 PTRACE_O_TRACEVFORKDONE. */
169
170static int linux_supports_tracevforkdone_flag = -1;
171
b84876c2
PA
172/* Async mode support */
173
174/* To listen to target events asynchronously, we install a SIGCHLD
175 handler whose duty is to call waitpid (-1, ..., WNOHANG) to get all
176 the pending events into a pipe. Whenever we're ready to handle
177 events asynchronously, this pipe is registered as the waitable file
178 handle in the event loop. When we get to entry target points
179 coming out of the common code (target_wait, target_resume, ...),
180 that are going to call waitpid, we block SIGCHLD signals, and
181 remove all the events placed in the pipe into a local queue. All
182 the subsequent calls to my_waitpid (a waitpid wrapper) check this
183 local queue first. */
184
185/* True if async mode is currently on. */
186static int linux_nat_async_enabled;
187
188/* Zero if the async mode, although enabled, is masked, which means
189 linux_nat_wait should behave as if async mode was off. */
190static int linux_nat_async_mask_value = 1;
191
192/* The read/write ends of the pipe registered as waitable file in the
193 event loop. */
194static int linux_nat_event_pipe[2] = { -1, -1 };
195
196/* Number of queued events in the pipe. */
197static volatile int linux_nat_num_queued_events;
198
199/* If async mode is on, true if we're listening for events; false if
200 target events are blocked. */
201static int linux_nat_async_events_enabled;
202
203static int linux_nat_async_events (int enable);
204static void pipe_to_local_event_queue (void);
205static void local_event_queue_to_pipe (void);
206static void linux_nat_event_pipe_push (int pid, int status, int options);
207static int linux_nat_event_pipe_pop (int* ptr_status, int* ptr_options);
208static void linux_nat_set_async_mode (int on);
209static void linux_nat_async (void (*callback)
210 (enum inferior_event_type event_type, void *context),
211 void *context);
212static int linux_nat_async_mask (int mask);
a0ef4274 213static int kill_lwp (int lwpid, int signo);
b84876c2
PA
214
215/* Captures the result of a successful waitpid call, along with the
216 options used in that call. */
217struct waitpid_result
218{
219 int pid;
220 int status;
221 int options;
222 struct waitpid_result *next;
223};
224
225/* A singly-linked list of the results of the waitpid calls performed
226 in the async SIGCHLD handler. */
227static struct waitpid_result *waitpid_queue = NULL;
228
229static int
230queued_waitpid (int pid, int *status, int flags)
231{
232 struct waitpid_result *msg = waitpid_queue, *prev = NULL;
233
234 if (debug_linux_nat_async)
235 fprintf_unfiltered (gdb_stdlog,
236 "\
237QWPID: linux_nat_async_events_enabled(%d), linux_nat_num_queued_events(%d)\n",
238 linux_nat_async_events_enabled,
239 linux_nat_num_queued_events);
240
241 if (flags & __WALL)
242 {
243 for (; msg; prev = msg, msg = msg->next)
244 if (pid == -1 || pid == msg->pid)
245 break;
246 }
247 else if (flags & __WCLONE)
248 {
249 for (; msg; prev = msg, msg = msg->next)
250 if (msg->options & __WCLONE
251 && (pid == -1 || pid == msg->pid))
252 break;
253 }
254 else
255 {
256 for (; msg; prev = msg, msg = msg->next)
257 if ((msg->options & __WCLONE) == 0
258 && (pid == -1 || pid == msg->pid))
259 break;
260 }
261
262 if (msg)
263 {
264 int pid;
265
266 if (prev)
267 prev->next = msg->next;
268 else
269 waitpid_queue = msg->next;
270
271 msg->next = NULL;
272 if (status)
273 *status = msg->status;
274 pid = msg->pid;
275
276 if (debug_linux_nat_async)
277 fprintf_unfiltered (gdb_stdlog, "QWPID: pid(%d), status(%x)\n",
278 pid, msg->status);
279 xfree (msg);
280
281 return pid;
282 }
283
284 if (debug_linux_nat_async)
285 fprintf_unfiltered (gdb_stdlog, "QWPID: miss\n");
286
287 if (status)
288 *status = 0;
289 return -1;
290}
291
292static void
293push_waitpid (int pid, int status, int options)
294{
295 struct waitpid_result *event, *new_event;
296
297 new_event = xmalloc (sizeof (*new_event));
298 new_event->pid = pid;
299 new_event->status = status;
300 new_event->options = options;
301 new_event->next = NULL;
302
303 if (waitpid_queue)
304 {
305 for (event = waitpid_queue;
306 event && event->next;
307 event = event->next)
308 ;
309
310 event->next = new_event;
311 }
312 else
313 waitpid_queue = new_event;
314}
315
710151dd 316/* Drain all queued events of PID. If PID is -1, the effect is of
b84876c2
PA
317 draining all events. */
318static void
319drain_queued_events (int pid)
320{
321 while (queued_waitpid (pid, NULL, __WALL) != -1)
322 ;
323}
324
ae087d01
DJ
325\f
326/* Trivial list manipulation functions to keep track of a list of
327 new stopped processes. */
328static void
3d799a95 329add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
ae087d01
DJ
330{
331 struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
332 new_pid->pid = pid;
3d799a95 333 new_pid->status = status;
ae087d01
DJ
334 new_pid->next = *listp;
335 *listp = new_pid;
336}
337
338static int
3d799a95 339pull_pid_from_list (struct simple_pid_list **listp, int pid, int *status)
ae087d01
DJ
340{
341 struct simple_pid_list **p;
342
343 for (p = listp; *p != NULL; p = &(*p)->next)
344 if ((*p)->pid == pid)
345 {
346 struct simple_pid_list *next = (*p)->next;
3d799a95 347 *status = (*p)->status;
ae087d01
DJ
348 xfree (*p);
349 *p = next;
350 return 1;
351 }
352 return 0;
353}
354
3d799a95
DJ
355static void
356linux_record_stopped_pid (int pid, int status)
ae087d01 357{
3d799a95 358 add_to_pid_list (&stopped_pids, pid, status);
ae087d01
DJ
359}
360
3993f6b1
DJ
361\f
362/* A helper function for linux_test_for_tracefork, called after fork (). */
363
364static void
365linux_tracefork_child (void)
366{
367 int ret;
368
369 ptrace (PTRACE_TRACEME, 0, 0, 0);
370 kill (getpid (), SIGSTOP);
371 fork ();
48bb3cce 372 _exit (0);
3993f6b1
DJ
373}
374
b84876c2
PA
375/* Wrapper function for waitpid which handles EINTR, and checks for
376 locally queued events. */
b957e937
DJ
377
378static int
379my_waitpid (int pid, int *status, int flags)
380{
381 int ret;
b84876c2
PA
382
383 /* There should be no concurrent calls to waitpid. */
384 gdb_assert (!linux_nat_async_events_enabled);
385
386 ret = queued_waitpid (pid, status, flags);
387 if (ret != -1)
388 return ret;
389
b957e937
DJ
390 do
391 {
392 ret = waitpid (pid, status, flags);
393 }
394 while (ret == -1 && errno == EINTR);
395
396 return ret;
397}
398
399/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
400
401 First, we try to enable fork tracing on ORIGINAL_PID. If this fails,
402 we know that the feature is not available. This may change the tracing
403 options for ORIGINAL_PID, but we'll be setting them shortly anyway.
404
405 However, if it succeeds, we don't know for sure that the feature is
406 available; old versions of PTRACE_SETOPTIONS ignored unknown options. We
3993f6b1 407 create a child process, attach to it, use PTRACE_SETOPTIONS to enable
b957e937
DJ
408 fork tracing, and let it fork. If the process exits, we assume that we
409 can't use TRACEFORK; if we get the fork notification, and we can extract
410 the new child's PID, then we assume that we can. */
3993f6b1
DJ
411
412static void
b957e937 413linux_test_for_tracefork (int original_pid)
3993f6b1
DJ
414{
415 int child_pid, ret, status;
416 long second_pid;
417
b957e937
DJ
418 linux_supports_tracefork_flag = 0;
419 linux_supports_tracevforkdone_flag = 0;
420
421 ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
422 if (ret != 0)
423 return;
424
3993f6b1
DJ
425 child_pid = fork ();
426 if (child_pid == -1)
e2e0b3e5 427 perror_with_name (("fork"));
3993f6b1
DJ
428
429 if (child_pid == 0)
430 linux_tracefork_child ();
431
b957e937 432 ret = my_waitpid (child_pid, &status, 0);
3993f6b1 433 if (ret == -1)
e2e0b3e5 434 perror_with_name (("waitpid"));
3993f6b1 435 else if (ret != child_pid)
8a3fe4f8 436 error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret);
3993f6b1 437 if (! WIFSTOPPED (status))
8a3fe4f8 438 error (_("linux_test_for_tracefork: waitpid: unexpected status %d."), status);
3993f6b1 439
3993f6b1
DJ
440 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
441 if (ret != 0)
442 {
b957e937
DJ
443 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
444 if (ret != 0)
445 {
8a3fe4f8 446 warning (_("linux_test_for_tracefork: failed to kill child"));
b957e937
DJ
447 return;
448 }
449
450 ret = my_waitpid (child_pid, &status, 0);
451 if (ret != child_pid)
8a3fe4f8 452 warning (_("linux_test_for_tracefork: failed to wait for killed child"));
b957e937 453 else if (!WIFSIGNALED (status))
8a3fe4f8
AC
454 warning (_("linux_test_for_tracefork: unexpected wait status 0x%x from "
455 "killed child"), status);
b957e937 456
3993f6b1
DJ
457 return;
458 }
459
9016a515
DJ
460 /* Check whether PTRACE_O_TRACEVFORKDONE is available. */
461 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
462 PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
463 linux_supports_tracevforkdone_flag = (ret == 0);
464
b957e937
DJ
465 ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
466 if (ret != 0)
8a3fe4f8 467 warning (_("linux_test_for_tracefork: failed to resume child"));
b957e937
DJ
468
469 ret = my_waitpid (child_pid, &status, 0);
470
3993f6b1
DJ
471 if (ret == child_pid && WIFSTOPPED (status)
472 && status >> 16 == PTRACE_EVENT_FORK)
473 {
474 second_pid = 0;
475 ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
476 if (ret == 0 && second_pid != 0)
477 {
478 int second_status;
479
480 linux_supports_tracefork_flag = 1;
b957e937
DJ
481 my_waitpid (second_pid, &second_status, 0);
482 ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
483 if (ret != 0)
8a3fe4f8 484 warning (_("linux_test_for_tracefork: failed to kill second child"));
97725dc4 485 my_waitpid (second_pid, &status, 0);
3993f6b1
DJ
486 }
487 }
b957e937 488 else
8a3fe4f8
AC
489 warning (_("linux_test_for_tracefork: unexpected result from waitpid "
490 "(%d, status 0x%x)"), ret, status);
3993f6b1 491
b957e937
DJ
492 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
493 if (ret != 0)
8a3fe4f8 494 warning (_("linux_test_for_tracefork: failed to kill child"));
b957e937 495 my_waitpid (child_pid, &status, 0);
3993f6b1
DJ
496}
497
498/* Return non-zero iff we have tracefork functionality available.
499 This function also sets linux_supports_tracefork_flag. */
500
501static int
b957e937 502linux_supports_tracefork (int pid)
3993f6b1
DJ
503{
504 if (linux_supports_tracefork_flag == -1)
b957e937 505 linux_test_for_tracefork (pid);
3993f6b1
DJ
506 return linux_supports_tracefork_flag;
507}
508
9016a515 509static int
b957e937 510linux_supports_tracevforkdone (int pid)
9016a515
DJ
511{
512 if (linux_supports_tracefork_flag == -1)
b957e937 513 linux_test_for_tracefork (pid);
9016a515
DJ
514 return linux_supports_tracevforkdone_flag;
515}
516
3993f6b1 517\f
4de4c07c
DJ
518void
519linux_enable_event_reporting (ptid_t ptid)
520{
d3587048 521 int pid = ptid_get_lwp (ptid);
4de4c07c
DJ
522 int options;
523
d3587048
DJ
524 if (pid == 0)
525 pid = ptid_get_pid (ptid);
526
b957e937 527 if (! linux_supports_tracefork (pid))
4de4c07c
DJ
528 return;
529
a2f23071
DJ
530 options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC
531 | PTRACE_O_TRACECLONE;
b957e937 532 if (linux_supports_tracevforkdone (pid))
9016a515
DJ
533 options |= PTRACE_O_TRACEVFORKDONE;
534
535 /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
536 read-only process state. */
4de4c07c
DJ
537
538 ptrace (PTRACE_SETOPTIONS, pid, 0, options);
539}
540
6d8fd2b7
UW
541static void
542linux_child_post_attach (int pid)
4de4c07c
DJ
543{
544 linux_enable_event_reporting (pid_to_ptid (pid));
0ec9a092 545 check_for_thread_db ();
4de4c07c
DJ
546}
547
10d6c8cd 548static void
4de4c07c
DJ
549linux_child_post_startup_inferior (ptid_t ptid)
550{
551 linux_enable_event_reporting (ptid);
0ec9a092 552 check_for_thread_db ();
4de4c07c
DJ
553}
554
6d8fd2b7
UW
555static int
556linux_child_follow_fork (struct target_ops *ops, int follow_child)
3993f6b1 557{
4de4c07c
DJ
558 ptid_t last_ptid;
559 struct target_waitstatus last_status;
9016a515 560 int has_vforked;
4de4c07c
DJ
561 int parent_pid, child_pid;
562
b84876c2
PA
563 if (target_can_async_p ())
564 target_async (NULL, 0);
565
4de4c07c 566 get_last_target_status (&last_ptid, &last_status);
9016a515 567 has_vforked = (last_status.kind == TARGET_WAITKIND_VFORKED);
d3587048
DJ
568 parent_pid = ptid_get_lwp (last_ptid);
569 if (parent_pid == 0)
570 parent_pid = ptid_get_pid (last_ptid);
4de4c07c
DJ
571 child_pid = last_status.value.related_pid;
572
573 if (! follow_child)
574 {
575 /* We're already attached to the parent, by default. */
576
577 /* Before detaching from the child, remove all breakpoints from
578 it. (This won't actually modify the breakpoint list, but will
579 physically remove the breakpoints from the child.) */
9016a515
DJ
580 /* If we vforked this will remove the breakpoints from the parent
581 also, but they'll be reinserted below. */
4de4c07c
DJ
582 detach_breakpoints (child_pid);
583
ac264b3b
MS
584 /* Detach new forked process? */
585 if (detach_fork)
f75c00e4 586 {
e85a822c 587 if (info_verbose || debug_linux_nat)
ac264b3b
MS
588 {
589 target_terminal_ours ();
590 fprintf_filtered (gdb_stdlog,
591 "Detaching after fork from child process %d.\n",
592 child_pid);
593 }
4de4c07c 594
ac264b3b
MS
595 ptrace (PTRACE_DETACH, child_pid, 0, 0);
596 }
597 else
598 {
599 struct fork_info *fp;
600 /* Retain child fork in ptrace (stopped) state. */
601 fp = find_fork_pid (child_pid);
602 if (!fp)
603 fp = add_fork (child_pid);
604 fork_save_infrun_state (fp, 0);
605 }
9016a515
DJ
606
607 if (has_vforked)
608 {
b957e937
DJ
609 gdb_assert (linux_supports_tracefork_flag >= 0);
610 if (linux_supports_tracevforkdone (0))
9016a515
DJ
611 {
612 int status;
613
614 ptrace (PTRACE_CONT, parent_pid, 0, 0);
58aecb61 615 my_waitpid (parent_pid, &status, __WALL);
c874c7fc 616 if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
8a3fe4f8
AC
617 warning (_("Unexpected waitpid result %06x when waiting for "
618 "vfork-done"), status);
9016a515
DJ
619 }
620 else
621 {
622 /* We can't insert breakpoints until the child has
623 finished with the shared memory region. We need to
624 wait until that happens. Ideal would be to just
625 call:
626 - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
627 - waitpid (parent_pid, &status, __WALL);
628 However, most architectures can't handle a syscall
629 being traced on the way out if it wasn't traced on
630 the way in.
631
632 We might also think to loop, continuing the child
633 until it exits or gets a SIGTRAP. One problem is
634 that the child might call ptrace with PTRACE_TRACEME.
635
636 There's no simple and reliable way to figure out when
637 the vforked child will be done with its copy of the
638 shared memory. We could step it out of the syscall,
639 two instructions, let it go, and then single-step the
640 parent once. When we have hardware single-step, this
641 would work; with software single-step it could still
642 be made to work but we'd have to be able to insert
643 single-step breakpoints in the child, and we'd have
644 to insert -just- the single-step breakpoint in the
645 parent. Very awkward.
646
647 In the end, the best we can do is to make sure it
648 runs for a little while. Hopefully it will be out of
649 range of any breakpoints we reinsert. Usually this
650 is only the single-step breakpoint at vfork's return
651 point. */
652
653 usleep (10000);
654 }
655
656 /* Since we vforked, breakpoints were removed in the parent
657 too. Put them back. */
658 reattach_breakpoints (parent_pid);
659 }
4de4c07c 660 }
3993f6b1 661 else
4de4c07c
DJ
662 {
663 char child_pid_spelling[40];
664
665 /* Needed to keep the breakpoint lists in sync. */
9016a515
DJ
666 if (! has_vforked)
667 detach_breakpoints (child_pid);
4de4c07c
DJ
668
669 /* Before detaching from the parent, remove all breakpoints from it. */
670 remove_breakpoints ();
671
e85a822c 672 if (info_verbose || debug_linux_nat)
f75c00e4
DJ
673 {
674 target_terminal_ours ();
ac264b3b
MS
675 fprintf_filtered (gdb_stdlog,
676 "Attaching after fork to child process %d.\n",
677 child_pid);
f75c00e4 678 }
4de4c07c 679
9016a515
DJ
680 /* If we're vforking, we may want to hold on to the parent until
681 the child exits or execs. At exec time we can remove the old
682 breakpoints from the parent and detach it; at exit time we
683 could do the same (or even, sneakily, resume debugging it - the
684 child's exec has failed, or something similar).
685
686 This doesn't clean up "properly", because we can't call
687 target_detach, but that's OK; if the current target is "child",
688 then it doesn't need any further cleanups, and lin_lwp will
689 generally not encounter vfork (vfork is defined to fork
690 in libpthread.so).
691
692 The holding part is very easy if we have VFORKDONE events;
693 but keeping track of both processes is beyond GDB at the
694 moment. So we don't expose the parent to the rest of GDB.
695 Instead we quietly hold onto it until such time as we can
696 safely resume it. */
697
698 if (has_vforked)
699 linux_parent_pid = parent_pid;
ac264b3b
MS
700 else if (!detach_fork)
701 {
702 struct fork_info *fp;
703 /* Retain parent fork in ptrace (stopped) state. */
704 fp = find_fork_pid (parent_pid);
705 if (!fp)
706 fp = add_fork (parent_pid);
707 fork_save_infrun_state (fp, 0);
708 }
9016a515 709 else
b84876c2 710 target_detach (NULL, 0);
4de4c07c 711
9f0bdab8 712 inferior_ptid = ptid_build (child_pid, child_pid, 0);
ee057212
DJ
713
714 /* Reinstall ourselves, since we might have been removed in
715 target_detach (which does other necessary cleanup). */
ac264b3b 716
ee057212 717 push_target (ops);
9f0bdab8 718 linux_nat_switch_fork (inferior_ptid);
ef29ce1a 719 check_for_thread_db ();
4de4c07c
DJ
720
721 /* Reset breakpoints in the child as appropriate. */
722 follow_inferior_reset_breakpoints ();
723 }
724
b84876c2
PA
725 if (target_can_async_p ())
726 target_async (inferior_event_handler, 0);
727
4de4c07c
DJ
728 return 0;
729}
730
4de4c07c 731\f
6d8fd2b7
UW
732static void
733linux_child_insert_fork_catchpoint (int pid)
4de4c07c 734{
b957e937 735 if (! linux_supports_tracefork (pid))
8a3fe4f8 736 error (_("Your system does not support fork catchpoints."));
3993f6b1
DJ
737}
738
6d8fd2b7
UW
739static void
740linux_child_insert_vfork_catchpoint (int pid)
3993f6b1 741{
b957e937 742 if (!linux_supports_tracefork (pid))
8a3fe4f8 743 error (_("Your system does not support vfork catchpoints."));
3993f6b1
DJ
744}
745
6d8fd2b7
UW
746static void
747linux_child_insert_exec_catchpoint (int pid)
3993f6b1 748{
b957e937 749 if (!linux_supports_tracefork (pid))
8a3fe4f8 750 error (_("Your system does not support exec catchpoints."));
3993f6b1
DJ
751}
752
d6b0e80f
AC
753/* On GNU/Linux there are no real LWP's. The closest thing to LWP's
754 are processes sharing the same VM space. A multi-threaded process
755 is basically a group of such processes. However, such a grouping
756 is almost entirely a user-space issue; the kernel doesn't enforce
757 such a grouping at all (this might change in the future). In
758 general, we'll rely on the threads library (i.e. the GNU/Linux
759 Threads library) to provide such a grouping.
760
761 It is perfectly well possible to write a multi-threaded application
762 without the assistance of a threads library, by using the clone
763 system call directly. This module should be able to give some
764 rudimentary support for debugging such applications if developers
765 specify the CLONE_PTRACE flag in the clone system call, and are
766 using the Linux kernel 2.4 or above.
767
768 Note that there are some peculiarities in GNU/Linux that affect
769 this code:
770
771 - In general one should specify the __WCLONE flag to waitpid in
772 order to make it report events for any of the cloned processes
773 (and leave it out for the initial process). However, if a cloned
774 process has exited the exit status is only reported if the
775 __WCLONE flag is absent. Linux kernel 2.4 has a __WALL flag, but
776 we cannot use it since GDB must work on older systems too.
777
778 - When a traced, cloned process exits and is waited for by the
779 debugger, the kernel reassigns it to the original parent and
780 keeps it around as a "zombie". Somehow, the GNU/Linux Threads
781 library doesn't notice this, which leads to the "zombie problem":
782 When debugged a multi-threaded process that spawns a lot of
783 threads will run out of processes, even if the threads exit,
784 because the "zombies" stay around. */
785
786/* List of known LWPs. */
9f0bdab8 787struct lwp_info *lwp_list;
d6b0e80f
AC
788
789/* Number of LWPs in the list. */
790static int num_lwps;
d6b0e80f
AC
791\f
792
d6b0e80f
AC
793/* If the last reported event was a SIGTRAP, this variable is set to
794 the process id of the LWP/thread that got it. */
795ptid_t trap_ptid;
796\f
797
d6b0e80f
AC
798/* Since we cannot wait (in linux_nat_wait) for the initial process and
799 any cloned processes with a single call to waitpid, we have to use
800 the WNOHANG flag and call waitpid in a loop. To optimize
801 things a bit we use `sigsuspend' to wake us up when a process has
802 something to report (it will send us a SIGCHLD if it has). To make
803 this work we have to juggle with the signal mask. We save the
804 original signal mask such that we can restore it before creating a
805 new process in order to avoid blocking certain signals in the
806 inferior. We then block SIGCHLD during the waitpid/sigsuspend
807 loop. */
808
809/* Original signal mask. */
810static sigset_t normal_mask;
811
812/* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
813 _initialize_linux_nat. */
814static sigset_t suspend_mask;
815
b84876c2
PA
816/* SIGCHLD action for synchronous mode. */
817struct sigaction sync_sigchld_action;
818
819/* SIGCHLD action for asynchronous mode. */
820static struct sigaction async_sigchld_action;
d6b0e80f
AC
821\f
822
823/* Prototypes for local functions. */
824static int stop_wait_callback (struct lwp_info *lp, void *data);
825static int linux_nat_thread_alive (ptid_t ptid);
6d8fd2b7 826static char *linux_child_pid_to_exec_file (int pid);
710151dd
PA
827static int cancel_breakpoint (struct lwp_info *lp);
828
d6b0e80f
AC
829\f
830/* Convert wait status STATUS to a string. Used for printing debug
831 messages only. */
832
833static char *
834status_to_str (int status)
835{
836 static char buf[64];
837
838 if (WIFSTOPPED (status))
839 snprintf (buf, sizeof (buf), "%s (stopped)",
840 strsignal (WSTOPSIG (status)));
841 else if (WIFSIGNALED (status))
842 snprintf (buf, sizeof (buf), "%s (terminated)",
843 strsignal (WSTOPSIG (status)));
844 else
845 snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
846
847 return buf;
848}
849
850/* Initialize the list of LWPs. Note that this module, contrary to
851 what GDB's generic threads layer does for its thread list,
852 re-initializes the LWP lists whenever we mourn or detach (which
853 doesn't involve mourning) the inferior. */
854
855static void
856init_lwp_list (void)
857{
858 struct lwp_info *lp, *lpnext;
859
860 for (lp = lwp_list; lp; lp = lpnext)
861 {
862 lpnext = lp->next;
863 xfree (lp);
864 }
865
866 lwp_list = NULL;
867 num_lwps = 0;
d6b0e80f
AC
868}
869
f973ed9c 870/* Add the LWP specified by PID to the list. Return a pointer to the
9f0bdab8
DJ
871 structure describing the new LWP. The LWP should already be stopped
872 (with an exception for the very first LWP). */
d6b0e80f
AC
873
874static struct lwp_info *
875add_lwp (ptid_t ptid)
876{
877 struct lwp_info *lp;
878
879 gdb_assert (is_lwp (ptid));
880
881 lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
882
883 memset (lp, 0, sizeof (struct lwp_info));
884
885 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
886
887 lp->ptid = ptid;
888
889 lp->next = lwp_list;
890 lwp_list = lp;
f973ed9c 891 ++num_lwps;
d6b0e80f 892
9f0bdab8
DJ
893 if (num_lwps > 1 && linux_nat_new_thread != NULL)
894 linux_nat_new_thread (ptid);
895
d6b0e80f
AC
896 return lp;
897}
898
899/* Remove the LWP specified by PID from the list. */
900
901static void
902delete_lwp (ptid_t ptid)
903{
904 struct lwp_info *lp, *lpprev;
905
906 lpprev = NULL;
907
908 for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
909 if (ptid_equal (lp->ptid, ptid))
910 break;
911
912 if (!lp)
913 return;
914
d6b0e80f
AC
915 num_lwps--;
916
917 if (lpprev)
918 lpprev->next = lp->next;
919 else
920 lwp_list = lp->next;
921
922 xfree (lp);
923}
924
925/* Return a pointer to the structure describing the LWP corresponding
926 to PID. If no corresponding LWP could be found, return NULL. */
927
928static struct lwp_info *
929find_lwp_pid (ptid_t ptid)
930{
931 struct lwp_info *lp;
932 int lwp;
933
934 if (is_lwp (ptid))
935 lwp = GET_LWP (ptid);
936 else
937 lwp = GET_PID (ptid);
938
939 for (lp = lwp_list; lp; lp = lp->next)
940 if (lwp == GET_LWP (lp->ptid))
941 return lp;
942
943 return NULL;
944}
945
946/* Call CALLBACK with its second argument set to DATA for every LWP in
947 the list. If CALLBACK returns 1 for a particular LWP, return a
948 pointer to the structure describing that LWP immediately.
949 Otherwise return NULL. */
950
951struct lwp_info *
952iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
953{
954 struct lwp_info *lp, *lpnext;
955
956 for (lp = lwp_list; lp; lp = lpnext)
957 {
958 lpnext = lp->next;
959 if ((*callback) (lp, data))
960 return lp;
961 }
962
963 return NULL;
964}
965
f973ed9c
DJ
966/* Update our internal state when changing from one fork (checkpoint,
967 et cetera) to another indicated by NEW_PTID. We can only switch
968 single-threaded applications, so we only create one new LWP, and
969 the previous list is discarded. */
970
971void
972linux_nat_switch_fork (ptid_t new_ptid)
973{
974 struct lwp_info *lp;
975
728c8f58 976 init_thread_list ();
f973ed9c
DJ
977 init_lwp_list ();
978 lp = add_lwp (new_ptid);
728c8f58 979 add_thread_silent (new_ptid);
f973ed9c
DJ
980 lp->stopped = 1;
981}
982
e26af52f
DJ
983/* Record a PTID for later deletion. */
984
985struct saved_ptids
986{
987 ptid_t ptid;
988 struct saved_ptids *next;
989};
990static struct saved_ptids *threads_to_delete;
991
992static void
993record_dead_thread (ptid_t ptid)
994{
995 struct saved_ptids *p = xmalloc (sizeof (struct saved_ptids));
996 p->ptid = ptid;
997 p->next = threads_to_delete;
998 threads_to_delete = p;
999}
1000
1001/* Delete any dead threads which are not the current thread. */
1002
1003static void
1004prune_lwps (void)
1005{
1006 struct saved_ptids **p = &threads_to_delete;
1007
1008 while (*p)
1009 if (! ptid_equal ((*p)->ptid, inferior_ptid))
1010 {
1011 struct saved_ptids *tmp = *p;
1012 delete_thread (tmp->ptid);
1013 *p = tmp->next;
1014 xfree (tmp);
1015 }
1016 else
1017 p = &(*p)->next;
1018}
1019
e26af52f
DJ
1020/* Handle the exit of a single thread LP. */
1021
1022static void
1023exit_lwp (struct lwp_info *lp)
1024{
1025 if (in_thread_list (lp->ptid))
1026 {
17faa917
DJ
1027 if (print_thread_events)
1028 printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid));
1029
e26af52f
DJ
1030 /* Core GDB cannot deal with us deleting the current thread. */
1031 if (!ptid_equal (lp->ptid, inferior_ptid))
1032 delete_thread (lp->ptid);
1033 else
1034 record_dead_thread (lp->ptid);
e26af52f
DJ
1035 }
1036
1037 delete_lwp (lp->ptid);
1038}
1039
a0ef4274
DJ
1040/* Detect `T (stopped)' in `/proc/PID/status'.
1041 Other states including `T (tracing stop)' are reported as false. */
1042
1043static int
1044pid_is_stopped (pid_t pid)
1045{
1046 FILE *status_file;
1047 char buf[100];
1048 int retval = 0;
1049
1050 snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
1051 status_file = fopen (buf, "r");
1052 if (status_file != NULL)
1053 {
1054 int have_state = 0;
1055
1056 while (fgets (buf, sizeof (buf), status_file))
1057 {
1058 if (strncmp (buf, "State:", 6) == 0)
1059 {
1060 have_state = 1;
1061 break;
1062 }
1063 }
1064 if (have_state && strstr (buf, "T (stopped)") != NULL)
1065 retval = 1;
1066 fclose (status_file);
1067 }
1068 return retval;
1069}
1070
1071/* Wait for the LWP specified by LP, which we have just attached to.
1072 Returns a wait status for that LWP, to cache. */
1073
1074static int
1075linux_nat_post_attach_wait (ptid_t ptid, int first, int *cloned,
1076 int *signalled)
1077{
1078 pid_t new_pid, pid = GET_LWP (ptid);
1079 int status;
1080
1081 if (pid_is_stopped (pid))
1082 {
1083 if (debug_linux_nat)
1084 fprintf_unfiltered (gdb_stdlog,
1085 "LNPAW: Attaching to a stopped process\n");
1086
1087 /* The process is definitely stopped. It is in a job control
1088 stop, unless the kernel predates the TASK_STOPPED /
1089 TASK_TRACED distinction, in which case it might be in a
1090 ptrace stop. Make sure it is in a ptrace stop; from there we
1091 can kill it, signal it, et cetera.
1092
1093 First make sure there is a pending SIGSTOP. Since we are
1094 already attached, the process can not transition from stopped
1095 to running without a PTRACE_CONT; so we know this signal will
1096 go into the queue. The SIGSTOP generated by PTRACE_ATTACH is
1097 probably already in the queue (unless this kernel is old
1098 enough to use TASK_STOPPED for ptrace stops); but since SIGSTOP
1099 is not an RT signal, it can only be queued once. */
1100 kill_lwp (pid, SIGSTOP);
1101
1102 /* Finally, resume the stopped process. This will deliver the SIGSTOP
1103 (or a higher priority signal, just like normal PTRACE_ATTACH). */
1104 ptrace (PTRACE_CONT, pid, 0, 0);
1105 }
1106
1107 /* Make sure the initial process is stopped. The user-level threads
1108 layer might want to poke around in the inferior, and that won't
1109 work if things haven't stabilized yet. */
1110 new_pid = my_waitpid (pid, &status, 0);
1111 if (new_pid == -1 && errno == ECHILD)
1112 {
1113 if (first)
1114 warning (_("%s is a cloned process"), target_pid_to_str (ptid));
1115
1116 /* Try again with __WCLONE to check cloned processes. */
1117 new_pid = my_waitpid (pid, &status, __WCLONE);
1118 *cloned = 1;
1119 }
1120
1121 gdb_assert (pid == new_pid && WIFSTOPPED (status));
1122
1123 if (WSTOPSIG (status) != SIGSTOP)
1124 {
1125 *signalled = 1;
1126 if (debug_linux_nat)
1127 fprintf_unfiltered (gdb_stdlog,
1128 "LNPAW: Received %s after attaching\n",
1129 status_to_str (status));
1130 }
1131
1132 return status;
1133}
1134
1135/* Attach to the LWP specified by PID. Return 0 if successful or -1
1136 if the new LWP could not be attached. */
d6b0e80f 1137
9ee57c33 1138int
93815fbf 1139lin_lwp_attach_lwp (ptid_t ptid)
d6b0e80f 1140{
9ee57c33 1141 struct lwp_info *lp;
b84876c2 1142 int async_events_were_enabled = 0;
d6b0e80f
AC
1143
1144 gdb_assert (is_lwp (ptid));
1145
b84876c2
PA
1146 if (target_can_async_p ())
1147 async_events_were_enabled = linux_nat_async_events (0);
d6b0e80f 1148
9ee57c33 1149 lp = find_lwp_pid (ptid);
d6b0e80f
AC
1150
1151 /* We assume that we're already attached to any LWP that has an id
1152 equal to the overall process id, and to any LWP that is already
1153 in our list of LWPs. If we're not seeing exit events from threads
1154 and we've had PID wraparound since we last tried to stop all threads,
1155 this assumption might be wrong; fortunately, this is very unlikely
1156 to happen. */
9ee57c33 1157 if (GET_LWP (ptid) != GET_PID (ptid) && lp == NULL)
d6b0e80f 1158 {
a0ef4274 1159 int status, cloned = 0, signalled = 0;
d6b0e80f
AC
1160
1161 if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
9ee57c33
DJ
1162 {
1163 /* If we fail to attach to the thread, issue a warning,
1164 but continue. One way this can happen is if thread
e9efe249 1165 creation is interrupted; as of Linux kernel 2.6.19, a
9ee57c33
DJ
1166 bug may place threads in the thread list and then fail
1167 to create them. */
1168 warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
1169 safe_strerror (errno));
1170 return -1;
1171 }
1172
d6b0e80f
AC
1173 if (debug_linux_nat)
1174 fprintf_unfiltered (gdb_stdlog,
1175 "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
1176 target_pid_to_str (ptid));
1177
a0ef4274
DJ
1178 status = linux_nat_post_attach_wait (ptid, 0, &cloned, &signalled);
1179 lp = add_lwp (ptid);
1180 lp->stopped = 1;
1181 lp->cloned = cloned;
1182 lp->signalled = signalled;
1183 if (WSTOPSIG (status) != SIGSTOP)
d6b0e80f 1184 {
a0ef4274
DJ
1185 lp->resumed = 1;
1186 lp->status = status;
d6b0e80f
AC
1187 }
1188
a0ef4274 1189 target_post_attach (GET_LWP (lp->ptid));
d6b0e80f
AC
1190
1191 if (debug_linux_nat)
1192 {
1193 fprintf_unfiltered (gdb_stdlog,
1194 "LLAL: waitpid %s received %s\n",
1195 target_pid_to_str (ptid),
1196 status_to_str (status));
1197 }
1198 }
1199 else
1200 {
1201 /* We assume that the LWP representing the original process is
1202 already stopped. Mark it as stopped in the data structure
155bd5d1
AC
1203 that the GNU/linux ptrace layer uses to keep track of
1204 threads. Note that this won't have already been done since
1205 the main thread will have, we assume, been stopped by an
1206 attach from a different layer. */
9ee57c33
DJ
1207 if (lp == NULL)
1208 lp = add_lwp (ptid);
d6b0e80f
AC
1209 lp->stopped = 1;
1210 }
9ee57c33 1211
b84876c2
PA
1212 if (async_events_were_enabled)
1213 linux_nat_async_events (1);
1214
9ee57c33 1215 return 0;
d6b0e80f
AC
1216}
1217
b84876c2
PA
1218static void
1219linux_nat_create_inferior (char *exec_file, char *allargs, char **env,
1220 int from_tty)
1221{
1222 int saved_async = 0;
1223
1224 /* The fork_child mechanism is synchronous and calls target_wait, so
1225 we have to mask the async mode. */
1226
1227 if (target_can_async_p ())
1228 saved_async = linux_nat_async_mask (0);
1229 else
1230 {
1231 /* Restore the original signal mask. */
1232 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1233 /* Make sure we don't block SIGCHLD during a sigsuspend. */
1234 suspend_mask = normal_mask;
1235 sigdelset (&suspend_mask, SIGCHLD);
1236 }
1237
1238 linux_ops->to_create_inferior (exec_file, allargs, env, from_tty);
1239
1240 if (saved_async)
1241 linux_nat_async_mask (saved_async);
1242}
1243
d6b0e80f
AC
1244static void
1245linux_nat_attach (char *args, int from_tty)
1246{
1247 struct lwp_info *lp;
d6b0e80f
AC
1248 int status;
1249
1250 /* FIXME: We should probably accept a list of process id's, and
1251 attach all of them. */
10d6c8cd 1252 linux_ops->to_attach (args, from_tty);
d6b0e80f 1253
b84876c2
PA
1254 if (!target_can_async_p ())
1255 {
1256 /* Restore the original signal mask. */
1257 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1258 /* Make sure we don't block SIGCHLD during a sigsuspend. */
1259 suspend_mask = normal_mask;
1260 sigdelset (&suspend_mask, SIGCHLD);
1261 }
1262
9f0bdab8
DJ
1263 /* Add the initial process as the first LWP to the list. */
1264 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
1265 lp = add_lwp (inferior_ptid);
a0ef4274
DJ
1266
1267 status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->cloned,
1268 &lp->signalled);
1269 lp->stopped = 1;
9f0bdab8 1270
403fe197
PA
1271 /* If this process is not using thread_db, then we still don't
1272 detect any other threads, but add at least this one. */
1273 add_thread_silent (lp->ptid);
1274
a0ef4274 1275 /* Save the wait status to report later. */
d6b0e80f 1276 lp->resumed = 1;
a0ef4274
DJ
1277 if (debug_linux_nat)
1278 fprintf_unfiltered (gdb_stdlog,
1279 "LNA: waitpid %ld, saving status %s\n",
1280 (long) GET_PID (lp->ptid), status_to_str (status));
710151dd
PA
1281
1282 if (!target_can_async_p ())
a0ef4274 1283 lp->status = status;
710151dd
PA
1284 else
1285 {
1286 /* We already waited for this LWP, so put the wait result on the
1287 pipe. The event loop will wake up and gets us to handling
1288 this event. */
a0ef4274
DJ
1289 linux_nat_event_pipe_push (GET_PID (lp->ptid), status,
1290 lp->cloned ? __WCLONE : 0);
b84876c2
PA
1291 /* Register in the event loop. */
1292 target_async (inferior_event_handler, 0);
d6b0e80f
AC
1293 }
1294}
1295
a0ef4274
DJ
1296/* Get pending status of LP. */
1297static int
1298get_pending_status (struct lwp_info *lp, int *status)
1299{
1300 struct target_waitstatus last;
1301 ptid_t last_ptid;
1302
1303 get_last_target_status (&last_ptid, &last);
1304
1305 /* If this lwp is the ptid that GDB is processing an event from, the
1306 signal will be in stop_signal. Otherwise, in all-stop + sync
1307 mode, we may cache pending events in lp->status while trying to
1308 stop all threads (see stop_wait_callback). In async mode, the
1309 events are always cached in waitpid_queue. */
1310
1311 *status = 0;
1312 if (GET_LWP (lp->ptid) == GET_LWP (last_ptid))
1313 {
1314 if (stop_signal != TARGET_SIGNAL_0
1315 && signal_pass_state (stop_signal))
1316 *status = W_STOPCODE (target_signal_to_host (stop_signal));
1317 }
1318 else if (target_can_async_p ())
1319 queued_waitpid (GET_LWP (lp->ptid), status, __WALL);
1320 else
1321 *status = lp->status;
1322
1323 return 0;
1324}
1325
d6b0e80f
AC
1326static int
1327detach_callback (struct lwp_info *lp, void *data)
1328{
1329 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1330
1331 if (debug_linux_nat && lp->status)
1332 fprintf_unfiltered (gdb_stdlog, "DC: Pending %s for %s on detach.\n",
1333 strsignal (WSTOPSIG (lp->status)),
1334 target_pid_to_str (lp->ptid));
1335
a0ef4274
DJ
1336 /* If there is a pending SIGSTOP, get rid of it. */
1337 if (lp->signalled)
d6b0e80f 1338 {
d6b0e80f
AC
1339 if (debug_linux_nat)
1340 fprintf_unfiltered (gdb_stdlog,
a0ef4274
DJ
1341 "DC: Sending SIGCONT to %s\n",
1342 target_pid_to_str (lp->ptid));
d6b0e80f 1343
a0ef4274 1344 kill_lwp (GET_LWP (lp->ptid), SIGCONT);
d6b0e80f 1345 lp->signalled = 0;
d6b0e80f
AC
1346 }
1347
1348 /* We don't actually detach from the LWP that has an id equal to the
1349 overall process id just yet. */
1350 if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
1351 {
a0ef4274
DJ
1352 int status = 0;
1353
1354 /* Pass on any pending signal for this LWP. */
1355 get_pending_status (lp, &status);
1356
d6b0e80f
AC
1357 errno = 0;
1358 if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
a0ef4274 1359 WSTOPSIG (status)) < 0)
8a3fe4f8 1360 error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
d6b0e80f
AC
1361 safe_strerror (errno));
1362
1363 if (debug_linux_nat)
1364 fprintf_unfiltered (gdb_stdlog,
1365 "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1366 target_pid_to_str (lp->ptid),
1367 strsignal (WSTOPSIG (lp->status)));
1368
1369 delete_lwp (lp->ptid);
1370 }
1371
1372 return 0;
1373}
1374
1375static void
1376linux_nat_detach (char *args, int from_tty)
1377{
b84876c2 1378 int pid;
a0ef4274
DJ
1379 int status;
1380 enum target_signal sig;
1381
b84876c2
PA
1382 if (target_can_async_p ())
1383 linux_nat_async (NULL, 0);
1384
d6b0e80f
AC
1385 iterate_over_lwps (detach_callback, NULL);
1386
1387 /* Only the initial process should be left right now. */
1388 gdb_assert (num_lwps == 1);
1389
a0ef4274
DJ
1390 /* Pass on any pending signal for the last LWP. */
1391 if ((args == NULL || *args == '\0')
1392 && get_pending_status (lwp_list, &status) != -1
1393 && WIFSTOPPED (status))
1394 {
1395 /* Put the signal number in ARGS so that inf_ptrace_detach will
1396 pass it along with PTRACE_DETACH. */
1397 args = alloca (8);
1398 sprintf (args, "%d", (int) WSTOPSIG (status));
1399 fprintf_unfiltered (gdb_stdlog,
1400 "LND: Sending signal %s to %s\n",
1401 args,
1402 target_pid_to_str (lwp_list->ptid));
1403 }
1404
d6b0e80f
AC
1405 trap_ptid = null_ptid;
1406
1407 /* Destroy LWP info; it's no longer valid. */
1408 init_lwp_list ();
1409
b84876c2
PA
1410 pid = GET_PID (inferior_ptid);
1411 inferior_ptid = pid_to_ptid (pid);
10d6c8cd 1412 linux_ops->to_detach (args, from_tty);
b84876c2
PA
1413
1414 if (target_can_async_p ())
1415 drain_queued_events (pid);
d6b0e80f
AC
1416}
1417
1418/* Resume LP. */
1419
1420static int
1421resume_callback (struct lwp_info *lp, void *data)
1422{
1423 if (lp->stopped && lp->status == 0)
1424 {
10d6c8cd
DJ
1425 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1426 0, TARGET_SIGNAL_0);
d6b0e80f
AC
1427 if (debug_linux_nat)
1428 fprintf_unfiltered (gdb_stdlog,
1429 "RC: PTRACE_CONT %s, 0, 0 (resume sibling)\n",
1430 target_pid_to_str (lp->ptid));
1431 lp->stopped = 0;
1432 lp->step = 0;
9f0bdab8 1433 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
d6b0e80f
AC
1434 }
1435
1436 return 0;
1437}
1438
1439static int
1440resume_clear_callback (struct lwp_info *lp, void *data)
1441{
1442 lp->resumed = 0;
1443 return 0;
1444}
1445
1446static int
1447resume_set_callback (struct lwp_info *lp, void *data)
1448{
1449 lp->resumed = 1;
1450 return 0;
1451}
1452
1453static void
1454linux_nat_resume (ptid_t ptid, int step, enum target_signal signo)
1455{
1456 struct lwp_info *lp;
1457 int resume_all;
1458
76f50ad1
DJ
1459 if (debug_linux_nat)
1460 fprintf_unfiltered (gdb_stdlog,
1461 "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1462 step ? "step" : "resume",
1463 target_pid_to_str (ptid),
1464 signo ? strsignal (signo) : "0",
1465 target_pid_to_str (inferior_ptid));
1466
e26af52f
DJ
1467 prune_lwps ();
1468
b84876c2
PA
1469 if (target_can_async_p ())
1470 /* Block events while we're here. */
1471 linux_nat_async_events (0);
1472
d6b0e80f
AC
1473 /* A specific PTID means `step only this process id'. */
1474 resume_all = (PIDGET (ptid) == -1);
1475
1476 if (resume_all)
1477 iterate_over_lwps (resume_set_callback, NULL);
1478 else
1479 iterate_over_lwps (resume_clear_callback, NULL);
1480
1481 /* If PID is -1, it's the current inferior that should be
1482 handled specially. */
1483 if (PIDGET (ptid) == -1)
1484 ptid = inferior_ptid;
1485
1486 lp = find_lwp_pid (ptid);
9f0bdab8 1487 gdb_assert (lp != NULL);
d6b0e80f 1488
9f0bdab8 1489 ptid = pid_to_ptid (GET_LWP (lp->ptid));
d6b0e80f 1490
9f0bdab8
DJ
1491 /* Remember if we're stepping. */
1492 lp->step = step;
d6b0e80f 1493
9f0bdab8
DJ
1494 /* Mark this LWP as resumed. */
1495 lp->resumed = 1;
76f50ad1 1496
9f0bdab8
DJ
1497 /* If we have a pending wait status for this thread, there is no
1498 point in resuming the process. But first make sure that
1499 linux_nat_wait won't preemptively handle the event - we
1500 should never take this short-circuit if we are going to
1501 leave LP running, since we have skipped resuming all the
1502 other threads. This bit of code needs to be synchronized
1503 with linux_nat_wait. */
76f50ad1 1504
710151dd
PA
1505 /* In async mode, we never have pending wait status. */
1506 if (target_can_async_p () && lp->status)
1507 internal_error (__FILE__, __LINE__, "Pending status in async mode");
1508
9f0bdab8
DJ
1509 if (lp->status && WIFSTOPPED (lp->status))
1510 {
1511 int saved_signo = target_signal_from_host (WSTOPSIG (lp->status));
76f50ad1 1512
9f0bdab8
DJ
1513 if (signal_stop_state (saved_signo) == 0
1514 && signal_print_state (saved_signo) == 0
1515 && signal_pass_state (saved_signo) == 1)
d6b0e80f 1516 {
9f0bdab8
DJ
1517 if (debug_linux_nat)
1518 fprintf_unfiltered (gdb_stdlog,
1519 "LLR: Not short circuiting for ignored "
1520 "status 0x%x\n", lp->status);
1521
d6b0e80f
AC
1522 /* FIXME: What should we do if we are supposed to continue
1523 this thread with a signal? */
1524 gdb_assert (signo == TARGET_SIGNAL_0);
9f0bdab8
DJ
1525 signo = saved_signo;
1526 lp->status = 0;
1527 }
1528 }
76f50ad1 1529
9f0bdab8
DJ
1530 if (lp->status)
1531 {
1532 /* FIXME: What should we do if we are supposed to continue
1533 this thread with a signal? */
1534 gdb_assert (signo == TARGET_SIGNAL_0);
76f50ad1 1535
9f0bdab8
DJ
1536 if (debug_linux_nat)
1537 fprintf_unfiltered (gdb_stdlog,
1538 "LLR: Short circuiting for status 0x%x\n",
1539 lp->status);
d6b0e80f 1540
9f0bdab8 1541 return;
d6b0e80f
AC
1542 }
1543
9f0bdab8
DJ
1544 /* Mark LWP as not stopped to prevent it from being continued by
1545 resume_callback. */
1546 lp->stopped = 0;
1547
d6b0e80f
AC
1548 if (resume_all)
1549 iterate_over_lwps (resume_callback, NULL);
1550
10d6c8cd 1551 linux_ops->to_resume (ptid, step, signo);
9f0bdab8
DJ
1552 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1553
d6b0e80f
AC
1554 if (debug_linux_nat)
1555 fprintf_unfiltered (gdb_stdlog,
1556 "LLR: %s %s, %s (resume event thread)\n",
1557 step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1558 target_pid_to_str (ptid),
1559 signo ? strsignal (signo) : "0");
b84876c2
PA
1560
1561 if (target_can_async_p ())
1562 {
1563 target_executing = 1;
1564 target_async (inferior_event_handler, 0);
1565 }
d6b0e80f
AC
1566}
1567
1568/* Issue kill to specified lwp. */
1569
1570static int tkill_failed;
1571
1572static int
1573kill_lwp (int lwpid, int signo)
1574{
1575 errno = 0;
1576
1577/* Use tkill, if possible, in case we are using nptl threads. If tkill
1578 fails, then we are not using nptl threads and we should be using kill. */
1579
1580#ifdef HAVE_TKILL_SYSCALL
1581 if (!tkill_failed)
1582 {
1583 int ret = syscall (__NR_tkill, lwpid, signo);
1584 if (errno != ENOSYS)
1585 return ret;
1586 errno = 0;
1587 tkill_failed = 1;
1588 }
1589#endif
1590
1591 return kill (lwpid, signo);
1592}
1593
3d799a95
DJ
1594/* Handle a GNU/Linux extended wait response. If we see a clone
1595 event, we need to add the new LWP to our list (and not report the
1596 trap to higher layers). This function returns non-zero if the
1597 event should be ignored and we should wait again. If STOPPING is
1598 true, the new LWP remains stopped, otherwise it is continued. */
d6b0e80f
AC
1599
1600static int
3d799a95
DJ
1601linux_handle_extended_wait (struct lwp_info *lp, int status,
1602 int stopping)
d6b0e80f 1603{
3d799a95
DJ
1604 int pid = GET_LWP (lp->ptid);
1605 struct target_waitstatus *ourstatus = &lp->waitstatus;
1606 struct lwp_info *new_lp = NULL;
1607 int event = status >> 16;
d6b0e80f 1608
3d799a95
DJ
1609 if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1610 || event == PTRACE_EVENT_CLONE)
d6b0e80f 1611 {
3d799a95
DJ
1612 unsigned long new_pid;
1613 int ret;
1614
1615 ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
6fc19103 1616
3d799a95
DJ
1617 /* If we haven't already seen the new PID stop, wait for it now. */
1618 if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1619 {
1620 /* The new child has a pending SIGSTOP. We can't affect it until it
1621 hits the SIGSTOP, but we're already attached. */
1622 ret = my_waitpid (new_pid, &status,
1623 (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1624 if (ret == -1)
1625 perror_with_name (_("waiting for new child"));
1626 else if (ret != new_pid)
1627 internal_error (__FILE__, __LINE__,
1628 _("wait returned unexpected PID %d"), ret);
1629 else if (!WIFSTOPPED (status))
1630 internal_error (__FILE__, __LINE__,
1631 _("wait returned unexpected status 0x%x"), status);
1632 }
1633
1634 ourstatus->value.related_pid = new_pid;
1635
1636 if (event == PTRACE_EVENT_FORK)
1637 ourstatus->kind = TARGET_WAITKIND_FORKED;
1638 else if (event == PTRACE_EVENT_VFORK)
1639 ourstatus->kind = TARGET_WAITKIND_VFORKED;
6fc19103 1640 else
3d799a95
DJ
1641 {
1642 ourstatus->kind = TARGET_WAITKIND_IGNORE;
1643 new_lp = add_lwp (BUILD_LWP (new_pid, GET_PID (inferior_ptid)));
1644 new_lp->cloned = 1;
d6b0e80f 1645
3d799a95
DJ
1646 if (WSTOPSIG (status) != SIGSTOP)
1647 {
1648 /* This can happen if someone starts sending signals to
1649 the new thread before it gets a chance to run, which
1650 have a lower number than SIGSTOP (e.g. SIGUSR1).
1651 This is an unlikely case, and harder to handle for
1652 fork / vfork than for clone, so we do not try - but
1653 we handle it for clone events here. We'll send
1654 the other signal on to the thread below. */
1655
1656 new_lp->signalled = 1;
1657 }
1658 else
1659 status = 0;
d6b0e80f 1660
3d799a95
DJ
1661 if (stopping)
1662 new_lp->stopped = 1;
1663 else
1664 {
1665 new_lp->resumed = 1;
1666 ptrace (PTRACE_CONT, lp->waitstatus.value.related_pid, 0,
1667 status ? WSTOPSIG (status) : 0);
1668 }
d6b0e80f 1669
3d799a95
DJ
1670 if (debug_linux_nat)
1671 fprintf_unfiltered (gdb_stdlog,
1672 "LHEW: Got clone event from LWP %ld, resuming\n",
1673 GET_LWP (lp->ptid));
1674 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1675
1676 return 1;
1677 }
1678
1679 return 0;
d6b0e80f
AC
1680 }
1681
3d799a95
DJ
1682 if (event == PTRACE_EVENT_EXEC)
1683 {
1684 ourstatus->kind = TARGET_WAITKIND_EXECD;
1685 ourstatus->value.execd_pathname
6d8fd2b7 1686 = xstrdup (linux_child_pid_to_exec_file (pid));
3d799a95
DJ
1687
1688 if (linux_parent_pid)
1689 {
1690 detach_breakpoints (linux_parent_pid);
1691 ptrace (PTRACE_DETACH, linux_parent_pid, 0, 0);
1692
1693 linux_parent_pid = 0;
1694 }
1695
1696 return 0;
1697 }
1698
1699 internal_error (__FILE__, __LINE__,
1700 _("unknown ptrace event %d"), event);
d6b0e80f
AC
1701}
1702
1703/* Wait for LP to stop. Returns the wait status, or 0 if the LWP has
1704 exited. */
1705
1706static int
1707wait_lwp (struct lwp_info *lp)
1708{
1709 pid_t pid;
1710 int status;
1711 int thread_dead = 0;
1712
1713 gdb_assert (!lp->stopped);
1714 gdb_assert (lp->status == 0);
1715
58aecb61 1716 pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
d6b0e80f
AC
1717 if (pid == -1 && errno == ECHILD)
1718 {
58aecb61 1719 pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
d6b0e80f
AC
1720 if (pid == -1 && errno == ECHILD)
1721 {
1722 /* The thread has previously exited. We need to delete it
1723 now because, for some vendor 2.4 kernels with NPTL
1724 support backported, there won't be an exit event unless
1725 it is the main thread. 2.6 kernels will report an exit
1726 event for each thread that exits, as expected. */
1727 thread_dead = 1;
1728 if (debug_linux_nat)
1729 fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
1730 target_pid_to_str (lp->ptid));
1731 }
1732 }
1733
1734 if (!thread_dead)
1735 {
1736 gdb_assert (pid == GET_LWP (lp->ptid));
1737
1738 if (debug_linux_nat)
1739 {
1740 fprintf_unfiltered (gdb_stdlog,
1741 "WL: waitpid %s received %s\n",
1742 target_pid_to_str (lp->ptid),
1743 status_to_str (status));
1744 }
1745 }
1746
1747 /* Check if the thread has exited. */
1748 if (WIFEXITED (status) || WIFSIGNALED (status))
1749 {
1750 thread_dead = 1;
1751 if (debug_linux_nat)
1752 fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
1753 target_pid_to_str (lp->ptid));
1754 }
1755
1756 if (thread_dead)
1757 {
e26af52f 1758 exit_lwp (lp);
d6b0e80f
AC
1759 return 0;
1760 }
1761
1762 gdb_assert (WIFSTOPPED (status));
1763
1764 /* Handle GNU/Linux's extended waitstatus for trace events. */
1765 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1766 {
1767 if (debug_linux_nat)
1768 fprintf_unfiltered (gdb_stdlog,
1769 "WL: Handling extended status 0x%06x\n",
1770 status);
3d799a95 1771 if (linux_handle_extended_wait (lp, status, 1))
d6b0e80f
AC
1772 return wait_lwp (lp);
1773 }
1774
1775 return status;
1776}
1777
9f0bdab8
DJ
1778/* Save the most recent siginfo for LP. This is currently only called
1779 for SIGTRAP; some ports use the si_addr field for
1780 target_stopped_data_address. In the future, it may also be used to
1781 restore the siginfo of requeued signals. */
1782
1783static void
1784save_siginfo (struct lwp_info *lp)
1785{
1786 errno = 0;
1787 ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid),
1788 (PTRACE_TYPE_ARG3) 0, &lp->siginfo);
1789
1790 if (errno != 0)
1791 memset (&lp->siginfo, 0, sizeof (lp->siginfo));
1792}
1793
d6b0e80f
AC
1794/* Send a SIGSTOP to LP. */
1795
1796static int
1797stop_callback (struct lwp_info *lp, void *data)
1798{
1799 if (!lp->stopped && !lp->signalled)
1800 {
1801 int ret;
1802
1803 if (debug_linux_nat)
1804 {
1805 fprintf_unfiltered (gdb_stdlog,
1806 "SC: kill %s **<SIGSTOP>**\n",
1807 target_pid_to_str (lp->ptid));
1808 }
1809 errno = 0;
1810 ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
1811 if (debug_linux_nat)
1812 {
1813 fprintf_unfiltered (gdb_stdlog,
1814 "SC: lwp kill %d %s\n",
1815 ret,
1816 errno ? safe_strerror (errno) : "ERRNO-OK");
1817 }
1818
1819 lp->signalled = 1;
1820 gdb_assert (lp->status == 0);
1821 }
1822
1823 return 0;
1824}
1825
1826/* Wait until LP is stopped. If DATA is non-null it is interpreted as
1827 a pointer to a set of signals to be flushed immediately. */
1828
1829static int
1830stop_wait_callback (struct lwp_info *lp, void *data)
1831{
1832 sigset_t *flush_mask = data;
1833
1834 if (!lp->stopped)
1835 {
1836 int status;
1837
1838 status = wait_lwp (lp);
1839 if (status == 0)
1840 return 0;
1841
1842 /* Ignore any signals in FLUSH_MASK. */
1843 if (flush_mask && sigismember (flush_mask, WSTOPSIG (status)))
1844 {
1845 if (!lp->signalled)
1846 {
1847 lp->stopped = 1;
1848 return 0;
1849 }
1850
1851 errno = 0;
1852 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1853 if (debug_linux_nat)
1854 fprintf_unfiltered (gdb_stdlog,
1855 "PTRACE_CONT %s, 0, 0 (%s)\n",
1856 target_pid_to_str (lp->ptid),
1857 errno ? safe_strerror (errno) : "OK");
1858
1859 return stop_wait_callback (lp, flush_mask);
1860 }
1861
1862 if (WSTOPSIG (status) != SIGSTOP)
1863 {
1864 if (WSTOPSIG (status) == SIGTRAP)
1865 {
1866 /* If a LWP other than the LWP that we're reporting an
1867 event for has hit a GDB breakpoint (as opposed to
1868 some random trap signal), then just arrange for it to
1869 hit it again later. We don't keep the SIGTRAP status
1870 and don't forward the SIGTRAP signal to the LWP. We
1871 will handle the current event, eventually we will
1872 resume all LWPs, and this one will get its breakpoint
1873 trap again.
1874
1875 If we do not do this, then we run the risk that the
1876 user will delete or disable the breakpoint, but the
1877 thread will have already tripped on it. */
1878
9f0bdab8
DJ
1879 /* Save the trap's siginfo in case we need it later. */
1880 save_siginfo (lp);
1881
d6b0e80f
AC
1882 /* Now resume this LWP and get the SIGSTOP event. */
1883 errno = 0;
1884 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1885 if (debug_linux_nat)
1886 {
1887 fprintf_unfiltered (gdb_stdlog,
1888 "PTRACE_CONT %s, 0, 0 (%s)\n",
1889 target_pid_to_str (lp->ptid),
1890 errno ? safe_strerror (errno) : "OK");
1891
1892 fprintf_unfiltered (gdb_stdlog,
1893 "SWC: Candidate SIGTRAP event in %s\n",
1894 target_pid_to_str (lp->ptid));
1895 }
710151dd
PA
1896 /* Hold this event/waitstatus while we check to see if
1897 there are any more (we still want to get that SIGSTOP). */
d6b0e80f 1898 stop_wait_callback (lp, data);
710151dd
PA
1899
1900 if (target_can_async_p ())
d6b0e80f 1901 {
710151dd
PA
1902 /* Don't leave a pending wait status in async mode.
1903 Retrigger the breakpoint. */
1904 if (!cancel_breakpoint (lp))
d6b0e80f 1905 {
710151dd
PA
1906 /* There was no gdb breakpoint set at pc. Put
1907 the event back in the queue. */
1908 if (debug_linux_nat)
1909 fprintf_unfiltered (gdb_stdlog,
1910 "SWC: kill %s, %s\n",
1911 target_pid_to_str (lp->ptid),
1912 status_to_str ((int) status));
1913 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
1914 }
1915 }
1916 else
1917 {
1918 /* Hold the SIGTRAP for handling by
1919 linux_nat_wait. */
1920 /* If there's another event, throw it back into the
1921 queue. */
1922 if (lp->status)
1923 {
1924 if (debug_linux_nat)
1925 fprintf_unfiltered (gdb_stdlog,
1926 "SWC: kill %s, %s\n",
1927 target_pid_to_str (lp->ptid),
1928 status_to_str ((int) status));
1929 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
d6b0e80f 1930 }
710151dd
PA
1931 /* Save the sigtrap event. */
1932 lp->status = status;
d6b0e80f 1933 }
d6b0e80f
AC
1934 return 0;
1935 }
1936 else
1937 {
1938 /* The thread was stopped with a signal other than
1939 SIGSTOP, and didn't accidentally trip a breakpoint. */
1940
1941 if (debug_linux_nat)
1942 {
1943 fprintf_unfiltered (gdb_stdlog,
1944 "SWC: Pending event %s in %s\n",
1945 status_to_str ((int) status),
1946 target_pid_to_str (lp->ptid));
1947 }
1948 /* Now resume this LWP and get the SIGSTOP event. */
1949 errno = 0;
1950 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1951 if (debug_linux_nat)
1952 fprintf_unfiltered (gdb_stdlog,
1953 "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
1954 target_pid_to_str (lp->ptid),
1955 errno ? safe_strerror (errno) : "OK");
1956
1957 /* Hold this event/waitstatus while we check to see if
1958 there are any more (we still want to get that SIGSTOP). */
1959 stop_wait_callback (lp, data);
710151dd
PA
1960
1961 /* If the lp->status field is still empty, use it to
1962 hold this event. If not, then this event must be
1963 returned to the event queue of the LWP. */
1964 if (lp->status || target_can_async_p ())
d6b0e80f
AC
1965 {
1966 if (debug_linux_nat)
1967 {
1968 fprintf_unfiltered (gdb_stdlog,
1969 "SWC: kill %s, %s\n",
1970 target_pid_to_str (lp->ptid),
1971 status_to_str ((int) status));
1972 }
1973 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
1974 }
710151dd
PA
1975 else
1976 lp->status = status;
d6b0e80f
AC
1977 return 0;
1978 }
1979 }
1980 else
1981 {
1982 /* We caught the SIGSTOP that we intended to catch, so
1983 there's no SIGSTOP pending. */
1984 lp->stopped = 1;
1985 lp->signalled = 0;
1986 }
1987 }
1988
1989 return 0;
1990}
1991
1992/* Check whether PID has any pending signals in FLUSH_MASK. If so set
1993 the appropriate bits in PENDING, and return 1 - otherwise return 0. */
1994
1995static int
1996linux_nat_has_pending (int pid, sigset_t *pending, sigset_t *flush_mask)
1997{
1998 sigset_t blocked, ignored;
1999 int i;
2000
2001 linux_proc_pending_signals (pid, pending, &blocked, &ignored);
2002
2003 if (!flush_mask)
2004 return 0;
2005
2006 for (i = 1; i < NSIG; i++)
2007 if (sigismember (pending, i))
2008 if (!sigismember (flush_mask, i)
2009 || sigismember (&blocked, i)
2010 || sigismember (&ignored, i))
2011 sigdelset (pending, i);
2012
2013 if (sigisemptyset (pending))
2014 return 0;
2015
2016 return 1;
2017}
2018
2019/* DATA is interpreted as a mask of signals to flush. If LP has
2020 signals pending, and they are all in the flush mask, then arrange
2021 to flush them. LP should be stopped, as should all other threads
2022 it might share a signal queue with. */
2023
2024static int
2025flush_callback (struct lwp_info *lp, void *data)
2026{
2027 sigset_t *flush_mask = data;
2028 sigset_t pending, intersection, blocked, ignored;
2029 int pid, status;
2030
2031 /* Normally, when an LWP exits, it is removed from the LWP list. The
2032 last LWP isn't removed till later, however. So if there is only
2033 one LWP on the list, make sure it's alive. */
2034 if (lwp_list == lp && lp->next == NULL)
2035 if (!linux_nat_thread_alive (lp->ptid))
2036 return 0;
2037
2038 /* Just because the LWP is stopped doesn't mean that new signals
2039 can't arrive from outside, so this function must be careful of
2040 race conditions. However, because all threads are stopped, we
2041 can assume that the pending mask will not shrink unless we resume
2042 the LWP, and that it will then get another signal. We can't
2043 control which one, however. */
2044
2045 if (lp->status)
2046 {
2047 if (debug_linux_nat)
a3f17187 2048 printf_unfiltered (_("FC: LP has pending status %06x\n"), lp->status);
d6b0e80f
AC
2049 if (WIFSTOPPED (lp->status) && sigismember (flush_mask, WSTOPSIG (lp->status)))
2050 lp->status = 0;
2051 }
2052
3d799a95
DJ
2053 /* While there is a pending signal we would like to flush, continue
2054 the inferior and collect another signal. But if there's already
2055 a saved status that we don't want to flush, we can't resume the
2056 inferior - if it stopped for some other reason we wouldn't have
2057 anywhere to save the new status. In that case, we must leave the
2058 signal unflushed (and possibly generate an extra SIGINT stop).
2059 That's much less bad than losing a signal. */
2060 while (lp->status == 0
2061 && linux_nat_has_pending (GET_LWP (lp->ptid), &pending, flush_mask))
d6b0e80f
AC
2062 {
2063 int ret;
2064
2065 errno = 0;
2066 ret = ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
2067 if (debug_linux_nat)
2068 fprintf_unfiltered (gdb_stderr,
2069 "FC: Sent PTRACE_CONT, ret %d %d\n", ret, errno);
2070
2071 lp->stopped = 0;
2072 stop_wait_callback (lp, flush_mask);
2073 if (debug_linux_nat)
2074 fprintf_unfiltered (gdb_stderr,
2075 "FC: Wait finished; saved status is %d\n",
2076 lp->status);
2077 }
2078
2079 return 0;
2080}
2081
2082/* Return non-zero if LP has a wait status pending. */
2083
2084static int
2085status_callback (struct lwp_info *lp, void *data)
2086{
2087 /* Only report a pending wait status if we pretend that this has
2088 indeed been resumed. */
2089 return (lp->status != 0 && lp->resumed);
2090}
2091
2092/* Return non-zero if LP isn't stopped. */
2093
2094static int
2095running_callback (struct lwp_info *lp, void *data)
2096{
2097 return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
2098}
2099
2100/* Count the LWP's that have had events. */
2101
2102static int
2103count_events_callback (struct lwp_info *lp, void *data)
2104{
2105 int *count = data;
2106
2107 gdb_assert (count != NULL);
2108
2109 /* Count only LWPs that have a SIGTRAP event pending. */
2110 if (lp->status != 0
2111 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
2112 (*count)++;
2113
2114 return 0;
2115}
2116
2117/* Select the LWP (if any) that is currently being single-stepped. */
2118
2119static int
2120select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
2121{
2122 if (lp->step && lp->status != 0)
2123 return 1;
2124 else
2125 return 0;
2126}
2127
2128/* Select the Nth LWP that has had a SIGTRAP event. */
2129
2130static int
2131select_event_lwp_callback (struct lwp_info *lp, void *data)
2132{
2133 int *selector = data;
2134
2135 gdb_assert (selector != NULL);
2136
2137 /* Select only LWPs that have a SIGTRAP event pending. */
2138 if (lp->status != 0
2139 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
2140 if ((*selector)-- == 0)
2141 return 1;
2142
2143 return 0;
2144}
2145
710151dd
PA
2146static int
2147cancel_breakpoint (struct lwp_info *lp)
2148{
2149 /* Arrange for a breakpoint to be hit again later. We don't keep
2150 the SIGTRAP status and don't forward the SIGTRAP signal to the
2151 LWP. We will handle the current event, eventually we will resume
2152 this LWP, and this breakpoint will trap again.
2153
2154 If we do not do this, then we run the risk that the user will
2155 delete or disable the breakpoint, but the LWP will have already
2156 tripped on it. */
2157
2158 if (breakpoint_inserted_here_p (read_pc_pid (lp->ptid) -
2159 gdbarch_decr_pc_after_break
2160 (current_gdbarch)))
2161 {
2162 if (debug_linux_nat)
2163 fprintf_unfiltered (gdb_stdlog,
2164 "CB: Push back breakpoint for %s\n",
2165 target_pid_to_str (lp->ptid));
2166
2167 /* Back up the PC if necessary. */
2168 if (gdbarch_decr_pc_after_break (current_gdbarch))
2169 write_pc_pid (read_pc_pid (lp->ptid) - gdbarch_decr_pc_after_break
2170 (current_gdbarch),
2171 lp->ptid);
2172 return 1;
2173 }
2174 return 0;
2175}
2176
d6b0e80f
AC
2177static int
2178cancel_breakpoints_callback (struct lwp_info *lp, void *data)
2179{
2180 struct lwp_info *event_lp = data;
2181
2182 /* Leave the LWP that has been elected to receive a SIGTRAP alone. */
2183 if (lp == event_lp)
2184 return 0;
2185
2186 /* If a LWP other than the LWP that we're reporting an event for has
2187 hit a GDB breakpoint (as opposed to some random trap signal),
2188 then just arrange for it to hit it again later. We don't keep
2189 the SIGTRAP status and don't forward the SIGTRAP signal to the
2190 LWP. We will handle the current event, eventually we will resume
2191 all LWPs, and this one will get its breakpoint trap again.
2192
2193 If we do not do this, then we run the risk that the user will
2194 delete or disable the breakpoint, but the LWP will have already
2195 tripped on it. */
2196
2197 if (lp->status != 0
2198 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP
710151dd
PA
2199 && cancel_breakpoint (lp))
2200 /* Throw away the SIGTRAP. */
2201 lp->status = 0;
d6b0e80f
AC
2202
2203 return 0;
2204}
2205
2206/* Select one LWP out of those that have events pending. */
2207
2208static void
2209select_event_lwp (struct lwp_info **orig_lp, int *status)
2210{
2211 int num_events = 0;
2212 int random_selector;
2213 struct lwp_info *event_lp;
2214
ac264b3b 2215 /* Record the wait status for the original LWP. */
d6b0e80f
AC
2216 (*orig_lp)->status = *status;
2217
2218 /* Give preference to any LWP that is being single-stepped. */
2219 event_lp = iterate_over_lwps (select_singlestep_lwp_callback, NULL);
2220 if (event_lp != NULL)
2221 {
2222 if (debug_linux_nat)
2223 fprintf_unfiltered (gdb_stdlog,
2224 "SEL: Select single-step %s\n",
2225 target_pid_to_str (event_lp->ptid));
2226 }
2227 else
2228 {
2229 /* No single-stepping LWP. Select one at random, out of those
2230 which have had SIGTRAP events. */
2231
2232 /* First see how many SIGTRAP events we have. */
2233 iterate_over_lwps (count_events_callback, &num_events);
2234
2235 /* Now randomly pick a LWP out of those that have had a SIGTRAP. */
2236 random_selector = (int)
2237 ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2238
2239 if (debug_linux_nat && num_events > 1)
2240 fprintf_unfiltered (gdb_stdlog,
2241 "SEL: Found %d SIGTRAP events, selecting #%d\n",
2242 num_events, random_selector);
2243
2244 event_lp = iterate_over_lwps (select_event_lwp_callback,
2245 &random_selector);
2246 }
2247
2248 if (event_lp != NULL)
2249 {
2250 /* Switch the event LWP. */
2251 *orig_lp = event_lp;
2252 *status = event_lp->status;
2253 }
2254
2255 /* Flush the wait status for the event LWP. */
2256 (*orig_lp)->status = 0;
2257}
2258
2259/* Return non-zero if LP has been resumed. */
2260
2261static int
2262resumed_callback (struct lwp_info *lp, void *data)
2263{
2264 return lp->resumed;
2265}
2266
d6b0e80f
AC
2267/* Stop an active thread, verify it still exists, then resume it. */
2268
2269static int
2270stop_and_resume_callback (struct lwp_info *lp, void *data)
2271{
2272 struct lwp_info *ptr;
2273
2274 if (!lp->stopped && !lp->signalled)
2275 {
2276 stop_callback (lp, NULL);
2277 stop_wait_callback (lp, NULL);
2278 /* Resume if the lwp still exists. */
2279 for (ptr = lwp_list; ptr; ptr = ptr->next)
2280 if (lp == ptr)
2281 {
2282 resume_callback (lp, NULL);
2283 resume_set_callback (lp, NULL);
2284 }
2285 }
2286 return 0;
2287}
2288
02f3fc28 2289/* Check if we should go on and pass this event to common code.
fa2c6a57 2290 Return the affected lwp if we are, or NULL otherwise. */
02f3fc28
PA
2291static struct lwp_info *
2292linux_nat_filter_event (int lwpid, int status, int options)
2293{
2294 struct lwp_info *lp;
2295
2296 lp = find_lwp_pid (pid_to_ptid (lwpid));
2297
2298 /* Check for stop events reported by a process we didn't already
2299 know about - anything not already in our LWP list.
2300
2301 If we're expecting to receive stopped processes after
2302 fork, vfork, and clone events, then we'll just add the
2303 new one to our list and go back to waiting for the event
2304 to be reported - the stopped process might be returned
2305 from waitpid before or after the event is. */
2306 if (WIFSTOPPED (status) && !lp)
2307 {
2308 linux_record_stopped_pid (lwpid, status);
2309 return NULL;
2310 }
2311
2312 /* Make sure we don't report an event for the exit of an LWP not in
2313 our list, i.e. not part of the current process. This can happen
2314 if we detach from a program we original forked and then it
2315 exits. */
2316 if (!WIFSTOPPED (status) && !lp)
2317 return NULL;
2318
2319 /* NOTE drow/2003-06-17: This code seems to be meant for debugging
2320 CLONE_PTRACE processes which do not use the thread library -
2321 otherwise we wouldn't find the new LWP this way. That doesn't
2322 currently work, and the following code is currently unreachable
2323 due to the two blocks above. If it's fixed some day, this code
2324 should be broken out into a function so that we can also pick up
2325 LWPs from the new interface. */
2326 if (!lp)
2327 {
2328 lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
2329 if (options & __WCLONE)
2330 lp->cloned = 1;
2331
2332 gdb_assert (WIFSTOPPED (status)
2333 && WSTOPSIG (status) == SIGSTOP);
2334 lp->signalled = 1;
2335
2336 if (!in_thread_list (inferior_ptid))
2337 {
2338 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2339 GET_PID (inferior_ptid));
2340 add_thread (inferior_ptid);
2341 }
2342
2343 add_thread (lp->ptid);
2344 }
2345
2346 /* Save the trap's siginfo in case we need it later. */
2347 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2348 save_siginfo (lp);
2349
2350 /* Handle GNU/Linux's extended waitstatus for trace events. */
2351 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
2352 {
2353 if (debug_linux_nat)
2354 fprintf_unfiltered (gdb_stdlog,
2355 "LLW: Handling extended status 0x%06x\n",
2356 status);
2357 if (linux_handle_extended_wait (lp, status, 0))
2358 return NULL;
2359 }
2360
2361 /* Check if the thread has exited. */
2362 if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
2363 {
2364 /* If this is the main thread, we must stop all threads and
2365 verify if they are still alive. This is because in the nptl
2366 thread model, there is no signal issued for exiting LWPs
2367 other than the main thread. We only get the main thread exit
2368 signal once all child threads have already exited. If we
2369 stop all the threads and use the stop_wait_callback to check
2370 if they have exited we can determine whether this signal
2371 should be ignored or whether it means the end of the debugged
2372 application, regardless of which threading model is being
2373 used. */
2374 if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
2375 {
2376 lp->stopped = 1;
2377 iterate_over_lwps (stop_and_resume_callback, NULL);
2378 }
2379
2380 if (debug_linux_nat)
2381 fprintf_unfiltered (gdb_stdlog,
2382 "LLW: %s exited.\n",
2383 target_pid_to_str (lp->ptid));
2384
2385 exit_lwp (lp);
2386
2387 /* If there is at least one more LWP, then the exit signal was
2388 not the end of the debugged application and should be
2389 ignored. */
2390 if (num_lwps > 0)
2391 {
2392 /* Make sure there is at least one thread running. */
2393 gdb_assert (iterate_over_lwps (running_callback, NULL));
2394
2395 /* Discard the event. */
2396 return NULL;
2397 }
2398 }
2399
2400 /* Check if the current LWP has previously exited. In the nptl
2401 thread model, LWPs other than the main thread do not issue
2402 signals when they exit so we must check whenever the thread has
2403 stopped. A similar check is made in stop_wait_callback(). */
2404 if (num_lwps > 1 && !linux_nat_thread_alive (lp->ptid))
2405 {
2406 if (debug_linux_nat)
2407 fprintf_unfiltered (gdb_stdlog,
2408 "LLW: %s exited.\n",
2409 target_pid_to_str (lp->ptid));
2410
2411 exit_lwp (lp);
2412
2413 /* Make sure there is at least one thread running. */
2414 gdb_assert (iterate_over_lwps (running_callback, NULL));
2415
2416 /* Discard the event. */
2417 return NULL;
2418 }
2419
2420 /* Make sure we don't report a SIGSTOP that we sent ourselves in
2421 an attempt to stop an LWP. */
2422 if (lp->signalled
2423 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2424 {
2425 if (debug_linux_nat)
2426 fprintf_unfiltered (gdb_stdlog,
2427 "LLW: Delayed SIGSTOP caught for %s.\n",
2428 target_pid_to_str (lp->ptid));
2429
2430 /* This is a delayed SIGSTOP. */
2431 lp->signalled = 0;
2432
2433 registers_changed ();
2434
2435 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2436 lp->step, TARGET_SIGNAL_0);
2437 if (debug_linux_nat)
2438 fprintf_unfiltered (gdb_stdlog,
2439 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
2440 lp->step ?
2441 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2442 target_pid_to_str (lp->ptid));
2443
2444 lp->stopped = 0;
2445 gdb_assert (lp->resumed);
2446
2447 /* Discard the event. */
2448 return NULL;
2449 }
2450
2451 /* An interesting event. */
2452 gdb_assert (lp);
2453 return lp;
2454}
2455
b84876c2
PA
2456/* Get the events stored in the pipe into the local queue, so they are
2457 accessible to queued_waitpid. We need to do this, since it is not
2458 always the case that the event at the head of the pipe is the event
2459 we want. */
2460
2461static void
2462pipe_to_local_event_queue (void)
2463{
2464 if (debug_linux_nat_async)
2465 fprintf_unfiltered (gdb_stdlog,
2466 "PTLEQ: linux_nat_num_queued_events(%d)\n",
2467 linux_nat_num_queued_events);
2468 while (linux_nat_num_queued_events)
2469 {
2470 int lwpid, status, options;
b84876c2 2471 lwpid = linux_nat_event_pipe_pop (&status, &options);
b84876c2
PA
2472 gdb_assert (lwpid > 0);
2473 push_waitpid (lwpid, status, options);
2474 }
2475}
2476
2477/* Get the unprocessed events stored in the local queue back into the
2478 pipe, so the event loop realizes there's something else to
2479 process. */
2480
2481static void
2482local_event_queue_to_pipe (void)
2483{
2484 struct waitpid_result *w = waitpid_queue;
2485 while (w)
2486 {
2487 struct waitpid_result *next = w->next;
2488 linux_nat_event_pipe_push (w->pid,
2489 w->status,
2490 w->options);
2491 xfree (w);
2492 w = next;
2493 }
2494 waitpid_queue = NULL;
2495
2496 if (debug_linux_nat_async)
2497 fprintf_unfiltered (gdb_stdlog,
2498 "LEQTP: linux_nat_num_queued_events(%d)\n",
2499 linux_nat_num_queued_events);
2500}
2501
d6b0e80f
AC
2502static ptid_t
2503linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
2504{
2505 struct lwp_info *lp = NULL;
2506 int options = 0;
2507 int status = 0;
2508 pid_t pid = PIDGET (ptid);
2509 sigset_t flush_mask;
2510
b84876c2
PA
2511 if (debug_linux_nat_async)
2512 fprintf_unfiltered (gdb_stdlog, "LLW: enter\n");
2513
f973ed9c
DJ
2514 /* The first time we get here after starting a new inferior, we may
2515 not have added it to the LWP list yet - this is the earliest
2516 moment at which we know its PID. */
2517 if (num_lwps == 0)
2518 {
2519 gdb_assert (!is_lwp (inferior_ptid));
2520
2521 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2522 GET_PID (inferior_ptid));
2523 lp = add_lwp (inferior_ptid);
2524 lp->resumed = 1;
403fe197
PA
2525 /* Add the main thread to GDB's thread list. */
2526 add_thread_silent (lp->ptid);
f973ed9c
DJ
2527 }
2528
d6b0e80f
AC
2529 sigemptyset (&flush_mask);
2530
b84876c2
PA
2531 if (target_can_async_p ())
2532 /* Block events while we're here. */
2533 target_async (NULL, 0);
d6b0e80f
AC
2534
2535retry:
2536
f973ed9c
DJ
2537 /* Make sure there is at least one LWP that has been resumed. */
2538 gdb_assert (iterate_over_lwps (resumed_callback, NULL));
d6b0e80f
AC
2539
2540 /* First check if there is a LWP with a wait status pending. */
2541 if (pid == -1)
2542 {
2543 /* Any LWP that's been resumed will do. */
2544 lp = iterate_over_lwps (status_callback, NULL);
2545 if (lp)
2546 {
710151dd
PA
2547 if (target_can_async_p ())
2548 internal_error (__FILE__, __LINE__,
2549 "Found an LWP with a pending status in async mode.");
2550
d6b0e80f
AC
2551 status = lp->status;
2552 lp->status = 0;
2553
2554 if (debug_linux_nat && status)
2555 fprintf_unfiltered (gdb_stdlog,
2556 "LLW: Using pending wait status %s for %s.\n",
2557 status_to_str (status),
2558 target_pid_to_str (lp->ptid));
2559 }
2560
b84876c2 2561 /* But if we don't find one, we'll have to wait, and check both
d6b0e80f
AC
2562 cloned and uncloned processes. We start with the cloned
2563 processes. */
2564 options = __WCLONE | WNOHANG;
2565 }
2566 else if (is_lwp (ptid))
2567 {
2568 if (debug_linux_nat)
2569 fprintf_unfiltered (gdb_stdlog,
2570 "LLW: Waiting for specific LWP %s.\n",
2571 target_pid_to_str (ptid));
2572
2573 /* We have a specific LWP to check. */
2574 lp = find_lwp_pid (ptid);
2575 gdb_assert (lp);
2576 status = lp->status;
2577 lp->status = 0;
2578
2579 if (debug_linux_nat && status)
2580 fprintf_unfiltered (gdb_stdlog,
2581 "LLW: Using pending wait status %s for %s.\n",
2582 status_to_str (status),
2583 target_pid_to_str (lp->ptid));
2584
2585 /* If we have to wait, take into account whether PID is a cloned
2586 process or not. And we have to convert it to something that
2587 the layer beneath us can understand. */
2588 options = lp->cloned ? __WCLONE : 0;
2589 pid = GET_LWP (ptid);
2590 }
2591
2592 if (status && lp->signalled)
2593 {
2594 /* A pending SIGSTOP may interfere with the normal stream of
2595 events. In a typical case where interference is a problem,
2596 we have a SIGSTOP signal pending for LWP A while
2597 single-stepping it, encounter an event in LWP B, and take the
2598 pending SIGSTOP while trying to stop LWP A. After processing
2599 the event in LWP B, LWP A is continued, and we'll never see
2600 the SIGTRAP associated with the last time we were
2601 single-stepping LWP A. */
2602
2603 /* Resume the thread. It should halt immediately returning the
2604 pending SIGSTOP. */
2605 registers_changed ();
10d6c8cd
DJ
2606 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2607 lp->step, TARGET_SIGNAL_0);
d6b0e80f
AC
2608 if (debug_linux_nat)
2609 fprintf_unfiltered (gdb_stdlog,
2610 "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
2611 lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2612 target_pid_to_str (lp->ptid));
2613 lp->stopped = 0;
2614 gdb_assert (lp->resumed);
2615
2616 /* This should catch the pending SIGSTOP. */
2617 stop_wait_callback (lp, NULL);
2618 }
2619
b84876c2
PA
2620 if (!target_can_async_p ())
2621 {
2622 /* Causes SIGINT to be passed on to the attached process. */
2623 set_sigint_trap ();
2624 set_sigio_trap ();
2625 }
d6b0e80f
AC
2626
2627 while (status == 0)
2628 {
2629 pid_t lwpid;
2630
b84876c2
PA
2631 if (target_can_async_p ())
2632 /* In async mode, don't ever block. Only look at the locally
2633 queued events. */
2634 lwpid = queued_waitpid (pid, &status, options);
2635 else
2636 lwpid = my_waitpid (pid, &status, options);
2637
d6b0e80f
AC
2638 if (lwpid > 0)
2639 {
2640 gdb_assert (pid == -1 || lwpid == pid);
2641
2642 if (debug_linux_nat)
2643 {
2644 fprintf_unfiltered (gdb_stdlog,
2645 "LLW: waitpid %ld received %s\n",
2646 (long) lwpid, status_to_str (status));
2647 }
2648
02f3fc28 2649 lp = linux_nat_filter_event (lwpid, status, options);
d6b0e80f
AC
2650 if (!lp)
2651 {
02f3fc28 2652 /* A discarded event. */
d6b0e80f
AC
2653 status = 0;
2654 continue;
2655 }
2656
2657 break;
2658 }
2659
2660 if (pid == -1)
2661 {
2662 /* Alternate between checking cloned and uncloned processes. */
2663 options ^= __WCLONE;
2664
b84876c2
PA
2665 /* And every time we have checked both:
2666 In async mode, return to event loop;
2667 In sync mode, suspend waiting for a SIGCHLD signal. */
d6b0e80f 2668 if (options & __WCLONE)
b84876c2
PA
2669 {
2670 if (target_can_async_p ())
2671 {
2672 /* No interesting event. */
2673 ourstatus->kind = TARGET_WAITKIND_IGNORE;
2674
2675 /* Get ready for the next event. */
2676 target_async (inferior_event_handler, 0);
2677
2678 if (debug_linux_nat_async)
2679 fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n");
2680
2681 return minus_one_ptid;
2682 }
2683
2684 sigsuspend (&suspend_mask);
2685 }
d6b0e80f
AC
2686 }
2687
2688 /* We shouldn't end up here unless we want to try again. */
2689 gdb_assert (status == 0);
2690 }
2691
b84876c2
PA
2692 if (!target_can_async_p ())
2693 {
2694 clear_sigio_trap ();
2695 clear_sigint_trap ();
2696 }
d6b0e80f
AC
2697
2698 gdb_assert (lp);
2699
2700 /* Don't report signals that GDB isn't interested in, such as
2701 signals that are neither printed nor stopped upon. Stopping all
2702 threads can be a bit time-consuming so if we want decent
2703 performance with heavily multi-threaded programs, especially when
2704 they're using a high frequency timer, we'd better avoid it if we
2705 can. */
2706
2707 if (WIFSTOPPED (status))
2708 {
2709 int signo = target_signal_from_host (WSTOPSIG (status));
2710
d539ed7e
UW
2711 /* If we get a signal while single-stepping, we may need special
2712 care, e.g. to skip the signal handler. Defer to common code. */
2713 if (!lp->step
2714 && signal_stop_state (signo) == 0
d6b0e80f
AC
2715 && signal_print_state (signo) == 0
2716 && signal_pass_state (signo) == 1)
2717 {
2718 /* FIMXE: kettenis/2001-06-06: Should we resume all threads
2719 here? It is not clear we should. GDB may not expect
2720 other threads to run. On the other hand, not resuming
2721 newly attached threads may cause an unwanted delay in
2722 getting them running. */
2723 registers_changed ();
10d6c8cd
DJ
2724 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2725 lp->step, signo);
d6b0e80f
AC
2726 if (debug_linux_nat)
2727 fprintf_unfiltered (gdb_stdlog,
2728 "LLW: %s %s, %s (preempt 'handle')\n",
2729 lp->step ?
2730 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2731 target_pid_to_str (lp->ptid),
2732 signo ? strsignal (signo) : "0");
2733 lp->stopped = 0;
2734 status = 0;
2735 goto retry;
2736 }
2737
2738 if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
2739 {
2740 /* If ^C/BREAK is typed at the tty/console, SIGINT gets
2741 forwarded to the entire process group, that is, all LWP's
2742 will receive it. Since we only want to report it once,
2743 we try to flush it from all LWPs except this one. */
2744 sigaddset (&flush_mask, SIGINT);
2745 }
2746 }
2747
2748 /* This LWP is stopped now. */
2749 lp->stopped = 1;
2750
2751 if (debug_linux_nat)
2752 fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
2753 status_to_str (status), target_pid_to_str (lp->ptid));
2754
2755 /* Now stop all other LWP's ... */
2756 iterate_over_lwps (stop_callback, NULL);
2757
2758 /* ... and wait until all of them have reported back that they're no
2759 longer running. */
2760 iterate_over_lwps (stop_wait_callback, &flush_mask);
2761 iterate_over_lwps (flush_callback, &flush_mask);
2762
2763 /* If we're not waiting for a specific LWP, choose an event LWP from
2764 among those that have had events. Giving equal priority to all
2765 LWPs that have had events helps prevent starvation. */
2766 if (pid == -1)
2767 select_event_lwp (&lp, &status);
2768
2769 /* Now that we've selected our final event LWP, cancel any
2770 breakpoints in other LWPs that have hit a GDB breakpoint. See
2771 the comment in cancel_breakpoints_callback to find out why. */
2772 iterate_over_lwps (cancel_breakpoints_callback, lp);
2773
d6b0e80f
AC
2774 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2775 {
f973ed9c 2776 trap_ptid = lp->ptid;
d6b0e80f
AC
2777 if (debug_linux_nat)
2778 fprintf_unfiltered (gdb_stdlog,
2779 "LLW: trap_ptid is %s.\n",
2780 target_pid_to_str (trap_ptid));
2781 }
2782 else
2783 trap_ptid = null_ptid;
2784
2785 if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2786 {
2787 *ourstatus = lp->waitstatus;
2788 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
2789 }
2790 else
2791 store_waitstatus (ourstatus, status);
2792
b84876c2
PA
2793 /* Get ready for the next event. */
2794 if (target_can_async_p ())
2795 target_async (inferior_event_handler, 0);
2796
2797 if (debug_linux_nat_async)
2798 fprintf_unfiltered (gdb_stdlog, "LLW: exit\n");
2799
f973ed9c 2800 return lp->ptid;
d6b0e80f
AC
2801}
2802
2803static int
2804kill_callback (struct lwp_info *lp, void *data)
2805{
2806 errno = 0;
2807 ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
2808 if (debug_linux_nat)
2809 fprintf_unfiltered (gdb_stdlog,
2810 "KC: PTRACE_KILL %s, 0, 0 (%s)\n",
2811 target_pid_to_str (lp->ptid),
2812 errno ? safe_strerror (errno) : "OK");
2813
2814 return 0;
2815}
2816
2817static int
2818kill_wait_callback (struct lwp_info *lp, void *data)
2819{
2820 pid_t pid;
2821
2822 /* We must make sure that there are no pending events (delayed
2823 SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
2824 program doesn't interfere with any following debugging session. */
2825
2826 /* For cloned processes we must check both with __WCLONE and
2827 without, since the exit status of a cloned process isn't reported
2828 with __WCLONE. */
2829 if (lp->cloned)
2830 {
2831 do
2832 {
58aecb61 2833 pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
e85a822c 2834 if (pid != (pid_t) -1)
d6b0e80f 2835 {
e85a822c
DJ
2836 if (debug_linux_nat)
2837 fprintf_unfiltered (gdb_stdlog,
2838 "KWC: wait %s received unknown.\n",
2839 target_pid_to_str (lp->ptid));
2840 /* The Linux kernel sometimes fails to kill a thread
2841 completely after PTRACE_KILL; that goes from the stop
2842 point in do_fork out to the one in
2843 get_signal_to_deliever and waits again. So kill it
2844 again. */
2845 kill_callback (lp, NULL);
d6b0e80f
AC
2846 }
2847 }
2848 while (pid == GET_LWP (lp->ptid));
2849
2850 gdb_assert (pid == -1 && errno == ECHILD);
2851 }
2852
2853 do
2854 {
58aecb61 2855 pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
e85a822c 2856 if (pid != (pid_t) -1)
d6b0e80f 2857 {
e85a822c
DJ
2858 if (debug_linux_nat)
2859 fprintf_unfiltered (gdb_stdlog,
2860 "KWC: wait %s received unk.\n",
2861 target_pid_to_str (lp->ptid));
2862 /* See the call to kill_callback above. */
2863 kill_callback (lp, NULL);
d6b0e80f
AC
2864 }
2865 }
2866 while (pid == GET_LWP (lp->ptid));
2867
2868 gdb_assert (pid == -1 && errno == ECHILD);
2869 return 0;
2870}
2871
2872static void
2873linux_nat_kill (void)
2874{
f973ed9c
DJ
2875 struct target_waitstatus last;
2876 ptid_t last_ptid;
2877 int status;
d6b0e80f 2878
b84876c2
PA
2879 if (target_can_async_p ())
2880 target_async (NULL, 0);
2881
f973ed9c
DJ
2882 /* If we're stopped while forking and we haven't followed yet,
2883 kill the other task. We need to do this first because the
2884 parent will be sleeping if this is a vfork. */
d6b0e80f 2885
f973ed9c 2886 get_last_target_status (&last_ptid, &last);
d6b0e80f 2887
f973ed9c
DJ
2888 if (last.kind == TARGET_WAITKIND_FORKED
2889 || last.kind == TARGET_WAITKIND_VFORKED)
2890 {
2891 ptrace (PT_KILL, last.value.related_pid, 0, 0);
2892 wait (&status);
2893 }
2894
2895 if (forks_exist_p ())
b84876c2
PA
2896 {
2897 linux_fork_killall ();
2898 drain_queued_events (-1);
2899 }
f973ed9c
DJ
2900 else
2901 {
2902 /* Kill all LWP's ... */
2903 iterate_over_lwps (kill_callback, NULL);
2904
2905 /* ... and wait until we've flushed all events. */
2906 iterate_over_lwps (kill_wait_callback, NULL);
2907 }
2908
2909 target_mourn_inferior ();
d6b0e80f
AC
2910}
2911
2912static void
2913linux_nat_mourn_inferior (void)
2914{
2915 trap_ptid = null_ptid;
2916
2917 /* Destroy LWP info; it's no longer valid. */
2918 init_lwp_list ();
2919
f973ed9c 2920 if (! forks_exist_p ())
b84876c2
PA
2921 {
2922 /* Normal case, no other forks available. */
2923 if (target_can_async_p ())
2924 linux_nat_async (NULL, 0);
2925 linux_ops->to_mourn_inferior ();
2926 }
f973ed9c
DJ
2927 else
2928 /* Multi-fork case. The current inferior_ptid has exited, but
2929 there are other viable forks to debug. Delete the exiting
2930 one and context-switch to the first available. */
2931 linux_fork_mourn_inferior ();
d6b0e80f
AC
2932}
2933
10d6c8cd
DJ
2934static LONGEST
2935linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
2936 const char *annex, gdb_byte *readbuf,
2937 const gdb_byte *writebuf,
2938 ULONGEST offset, LONGEST len)
d6b0e80f
AC
2939{
2940 struct cleanup *old_chain = save_inferior_ptid ();
10d6c8cd 2941 LONGEST xfer;
d6b0e80f
AC
2942
2943 if (is_lwp (inferior_ptid))
2944 inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
2945
10d6c8cd
DJ
2946 xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
2947 offset, len);
d6b0e80f
AC
2948
2949 do_cleanups (old_chain);
2950 return xfer;
2951}
2952
2953static int
2954linux_nat_thread_alive (ptid_t ptid)
2955{
2956 gdb_assert (is_lwp (ptid));
2957
2958 errno = 0;
2959 ptrace (PTRACE_PEEKUSER, GET_LWP (ptid), 0, 0);
2960 if (debug_linux_nat)
2961 fprintf_unfiltered (gdb_stdlog,
2962 "LLTA: PTRACE_PEEKUSER %s, 0, 0 (%s)\n",
2963 target_pid_to_str (ptid),
2964 errno ? safe_strerror (errno) : "OK");
9c0dd46b 2965
155bd5d1
AC
2966 /* Not every Linux kernel implements PTRACE_PEEKUSER. But we can
2967 handle that case gracefully since ptrace will first do a lookup
2968 for the process based upon the passed-in pid. If that fails we
2969 will get either -ESRCH or -EPERM, otherwise the child exists and
2970 is alive. */
a529be7c 2971 if (errno == ESRCH || errno == EPERM)
d6b0e80f
AC
2972 return 0;
2973
2974 return 1;
2975}
2976
2977static char *
2978linux_nat_pid_to_str (ptid_t ptid)
2979{
2980 static char buf[64];
2981
a0ef4274
DJ
2982 if (is_lwp (ptid)
2983 && ((lwp_list && lwp_list->next)
2984 || GET_PID (ptid) != GET_LWP (ptid)))
d6b0e80f
AC
2985 {
2986 snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
2987 return buf;
2988 }
2989
2990 return normal_pid_to_str (ptid);
2991}
2992
d6b0e80f
AC
2993static void
2994sigchld_handler (int signo)
2995{
b84876c2
PA
2996 if (linux_nat_async_enabled
2997 && linux_nat_async_events_enabled
2998 && signo == SIGCHLD)
2999 /* It is *always* a bug to hit this. */
3000 internal_error (__FILE__, __LINE__,
3001 "sigchld_handler called when async events are enabled");
3002
d6b0e80f
AC
3003 /* Do nothing. The only reason for this handler is that it allows
3004 us to use sigsuspend in linux_nat_wait above to wait for the
3005 arrival of a SIGCHLD. */
3006}
3007
dba24537
AC
3008/* Accepts an integer PID; Returns a string representing a file that
3009 can be opened to get the symbols for the child process. */
3010
6d8fd2b7
UW
3011static char *
3012linux_child_pid_to_exec_file (int pid)
dba24537
AC
3013{
3014 char *name1, *name2;
3015
3016 name1 = xmalloc (MAXPATHLEN);
3017 name2 = xmalloc (MAXPATHLEN);
3018 make_cleanup (xfree, name1);
3019 make_cleanup (xfree, name2);
3020 memset (name2, 0, MAXPATHLEN);
3021
3022 sprintf (name1, "/proc/%d/exe", pid);
3023 if (readlink (name1, name2, MAXPATHLEN) > 0)
3024 return name2;
3025 else
3026 return name1;
3027}
3028
3029/* Service function for corefiles and info proc. */
3030
3031static int
3032read_mapping (FILE *mapfile,
3033 long long *addr,
3034 long long *endaddr,
3035 char *permissions,
3036 long long *offset,
3037 char *device, long long *inode, char *filename)
3038{
3039 int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
3040 addr, endaddr, permissions, offset, device, inode);
3041
2e14c2ea
MS
3042 filename[0] = '\0';
3043 if (ret > 0 && ret != EOF)
dba24537
AC
3044 {
3045 /* Eat everything up to EOL for the filename. This will prevent
3046 weird filenames (such as one with embedded whitespace) from
3047 confusing this code. It also makes this code more robust in
3048 respect to annotations the kernel may add after the filename.
3049
3050 Note the filename is used for informational purposes
3051 only. */
3052 ret += fscanf (mapfile, "%[^\n]\n", filename);
3053 }
2e14c2ea 3054
dba24537
AC
3055 return (ret != 0 && ret != EOF);
3056}
3057
3058/* Fills the "to_find_memory_regions" target vector. Lists the memory
3059 regions in the inferior for a corefile. */
3060
3061static int
3062linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
3063 unsigned long,
3064 int, int, int, void *), void *obfd)
3065{
3066 long long pid = PIDGET (inferior_ptid);
3067 char mapsfilename[MAXPATHLEN];
3068 FILE *mapsfile;
3069 long long addr, endaddr, size, offset, inode;
3070 char permissions[8], device[8], filename[MAXPATHLEN];
3071 int read, write, exec;
3072 int ret;
3073
3074 /* Compose the filename for the /proc memory map, and open it. */
3075 sprintf (mapsfilename, "/proc/%lld/maps", pid);
3076 if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
8a3fe4f8 3077 error (_("Could not open %s."), mapsfilename);
dba24537
AC
3078
3079 if (info_verbose)
3080 fprintf_filtered (gdb_stdout,
3081 "Reading memory regions from %s\n", mapsfilename);
3082
3083 /* Now iterate until end-of-file. */
3084 while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
3085 &offset, &device[0], &inode, &filename[0]))
3086 {
3087 size = endaddr - addr;
3088
3089 /* Get the segment's permissions. */
3090 read = (strchr (permissions, 'r') != 0);
3091 write = (strchr (permissions, 'w') != 0);
3092 exec = (strchr (permissions, 'x') != 0);
3093
3094 if (info_verbose)
3095 {
3096 fprintf_filtered (gdb_stdout,
3097 "Save segment, %lld bytes at 0x%s (%c%c%c)",
3098 size, paddr_nz (addr),
3099 read ? 'r' : ' ',
3100 write ? 'w' : ' ', exec ? 'x' : ' ');
b260b6c1 3101 if (filename[0])
dba24537
AC
3102 fprintf_filtered (gdb_stdout, " for %s", filename);
3103 fprintf_filtered (gdb_stdout, "\n");
3104 }
3105
3106 /* Invoke the callback function to create the corefile
3107 segment. */
3108 func (addr, size, read, write, exec, obfd);
3109 }
3110 fclose (mapsfile);
3111 return 0;
3112}
3113
3114/* Records the thread's register state for the corefile note
3115 section. */
3116
3117static char *
3118linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
3119 char *note_data, int *note_size)
3120{
3121 gdb_gregset_t gregs;
3122 gdb_fpregset_t fpregs;
3123#ifdef FILL_FPXREGSET
3124 gdb_fpxregset_t fpxregs;
3125#endif
3126 unsigned long lwp = ptid_get_lwp (ptid);
594f7785
UW
3127 struct regcache *regcache = get_thread_regcache (ptid);
3128 struct gdbarch *gdbarch = get_regcache_arch (regcache);
4f844a66 3129 const struct regset *regset;
55e969c1 3130 int core_regset_p;
594f7785
UW
3131 struct cleanup *old_chain;
3132
3133 old_chain = save_inferior_ptid ();
3134 inferior_ptid = ptid;
3135 target_fetch_registers (regcache, -1);
3136 do_cleanups (old_chain);
4f844a66
DM
3137
3138 core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
55e969c1
DM
3139 if (core_regset_p
3140 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
3141 sizeof (gregs))) != NULL
3142 && regset->collect_regset != NULL)
594f7785 3143 regset->collect_regset (regset, regcache, -1,
55e969c1 3144 &gregs, sizeof (gregs));
4f844a66 3145 else
594f7785 3146 fill_gregset (regcache, &gregs, -1);
4f844a66 3147
55e969c1
DM
3148 note_data = (char *) elfcore_write_prstatus (obfd,
3149 note_data,
3150 note_size,
3151 lwp,
3152 stop_signal, &gregs);
3153
3154 if (core_regset_p
3155 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
3156 sizeof (fpregs))) != NULL
3157 && regset->collect_regset != NULL)
594f7785 3158 regset->collect_regset (regset, regcache, -1,
55e969c1 3159 &fpregs, sizeof (fpregs));
4f844a66 3160 else
594f7785 3161 fill_fpregset (regcache, &fpregs, -1);
4f844a66 3162
55e969c1
DM
3163 note_data = (char *) elfcore_write_prfpreg (obfd,
3164 note_data,
3165 note_size,
3166 &fpregs, sizeof (fpregs));
dba24537 3167
dba24537 3168#ifdef FILL_FPXREGSET
55e969c1
DM
3169 if (core_regset_p
3170 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg-xfp",
3171 sizeof (fpxregs))) != NULL
3172 && regset->collect_regset != NULL)
594f7785 3173 regset->collect_regset (regset, regcache, -1,
55e969c1 3174 &fpxregs, sizeof (fpxregs));
4f844a66 3175 else
594f7785 3176 fill_fpxregset (regcache, &fpxregs, -1);
4f844a66 3177
55e969c1
DM
3178 note_data = (char *) elfcore_write_prxfpreg (obfd,
3179 note_data,
3180 note_size,
3181 &fpxregs, sizeof (fpxregs));
dba24537
AC
3182#endif
3183 return note_data;
3184}
3185
3186struct linux_nat_corefile_thread_data
3187{
3188 bfd *obfd;
3189 char *note_data;
3190 int *note_size;
3191 int num_notes;
3192};
3193
3194/* Called by gdbthread.c once per thread. Records the thread's
3195 register state for the corefile note section. */
3196
3197static int
3198linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
3199{
3200 struct linux_nat_corefile_thread_data *args = data;
dba24537 3201
dba24537
AC
3202 args->note_data = linux_nat_do_thread_registers (args->obfd,
3203 ti->ptid,
3204 args->note_data,
3205 args->note_size);
3206 args->num_notes++;
56be3814 3207
dba24537
AC
3208 return 0;
3209}
3210
3211/* Records the register state for the corefile note section. */
3212
3213static char *
3214linux_nat_do_registers (bfd *obfd, ptid_t ptid,
3215 char *note_data, int *note_size)
3216{
dba24537
AC
3217 return linux_nat_do_thread_registers (obfd,
3218 ptid_build (ptid_get_pid (inferior_ptid),
3219 ptid_get_pid (inferior_ptid),
3220 0),
3221 note_data, note_size);
dba24537
AC
3222}
3223
3224/* Fills the "to_make_corefile_note" target vector. Builds the note
3225 section for a corefile, and returns it in a malloc buffer. */
3226
3227static char *
3228linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
3229{
3230 struct linux_nat_corefile_thread_data thread_args;
3231 struct cleanup *old_chain;
d99148ef 3232 /* The variable size must be >= sizeof (prpsinfo_t.pr_fname). */
dba24537 3233 char fname[16] = { '\0' };
d99148ef 3234 /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs). */
dba24537
AC
3235 char psargs[80] = { '\0' };
3236 char *note_data = NULL;
3237 ptid_t current_ptid = inferior_ptid;
c6826062 3238 gdb_byte *auxv;
dba24537
AC
3239 int auxv_len;
3240
3241 if (get_exec_file (0))
3242 {
3243 strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
3244 strncpy (psargs, get_exec_file (0), sizeof (psargs));
3245 if (get_inferior_args ())
3246 {
d99148ef
JK
3247 char *string_end;
3248 char *psargs_end = psargs + sizeof (psargs);
3249
3250 /* linux_elfcore_write_prpsinfo () handles zero unterminated
3251 strings fine. */
3252 string_end = memchr (psargs, 0, sizeof (psargs));
3253 if (string_end != NULL)
3254 {
3255 *string_end++ = ' ';
3256 strncpy (string_end, get_inferior_args (),
3257 psargs_end - string_end);
3258 }
dba24537
AC
3259 }
3260 note_data = (char *) elfcore_write_prpsinfo (obfd,
3261 note_data,
3262 note_size, fname, psargs);
3263 }
3264
3265 /* Dump information for threads. */
3266 thread_args.obfd = obfd;
3267 thread_args.note_data = note_data;
3268 thread_args.note_size = note_size;
3269 thread_args.num_notes = 0;
3270 iterate_over_lwps (linux_nat_corefile_thread_callback, &thread_args);
3271 if (thread_args.num_notes == 0)
3272 {
3273 /* iterate_over_threads didn't come up with any threads; just
3274 use inferior_ptid. */
3275 note_data = linux_nat_do_registers (obfd, inferior_ptid,
3276 note_data, note_size);
3277 }
3278 else
3279 {
3280 note_data = thread_args.note_data;
3281 }
3282
13547ab6
DJ
3283 auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
3284 NULL, &auxv);
dba24537
AC
3285 if (auxv_len > 0)
3286 {
3287 note_data = elfcore_write_note (obfd, note_data, note_size,
3288 "CORE", NT_AUXV, auxv, auxv_len);
3289 xfree (auxv);
3290 }
3291
3292 make_cleanup (xfree, note_data);
3293 return note_data;
3294}
3295
3296/* Implement the "info proc" command. */
3297
3298static void
3299linux_nat_info_proc_cmd (char *args, int from_tty)
3300{
3301 long long pid = PIDGET (inferior_ptid);
3302 FILE *procfile;
3303 char **argv = NULL;
3304 char buffer[MAXPATHLEN];
3305 char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
3306 int cmdline_f = 1;
3307 int cwd_f = 1;
3308 int exe_f = 1;
3309 int mappings_f = 0;
3310 int environ_f = 0;
3311 int status_f = 0;
3312 int stat_f = 0;
3313 int all = 0;
3314 struct stat dummy;
3315
3316 if (args)
3317 {
3318 /* Break up 'args' into an argv array. */
3319 if ((argv = buildargv (args)) == NULL)
3320 nomem (0);
3321 else
3322 make_cleanup_freeargv (argv);
3323 }
3324 while (argv != NULL && *argv != NULL)
3325 {
3326 if (isdigit (argv[0][0]))
3327 {
3328 pid = strtoul (argv[0], NULL, 10);
3329 }
3330 else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
3331 {
3332 mappings_f = 1;
3333 }
3334 else if (strcmp (argv[0], "status") == 0)
3335 {
3336 status_f = 1;
3337 }
3338 else if (strcmp (argv[0], "stat") == 0)
3339 {
3340 stat_f = 1;
3341 }
3342 else if (strcmp (argv[0], "cmd") == 0)
3343 {
3344 cmdline_f = 1;
3345 }
3346 else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
3347 {
3348 exe_f = 1;
3349 }
3350 else if (strcmp (argv[0], "cwd") == 0)
3351 {
3352 cwd_f = 1;
3353 }
3354 else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
3355 {
3356 all = 1;
3357 }
3358 else
3359 {
3360 /* [...] (future options here) */
3361 }
3362 argv++;
3363 }
3364 if (pid == 0)
8a3fe4f8 3365 error (_("No current process: you must name one."));
dba24537
AC
3366
3367 sprintf (fname1, "/proc/%lld", pid);
3368 if (stat (fname1, &dummy) != 0)
8a3fe4f8 3369 error (_("No /proc directory: '%s'"), fname1);
dba24537 3370
a3f17187 3371 printf_filtered (_("process %lld\n"), pid);
dba24537
AC
3372 if (cmdline_f || all)
3373 {
3374 sprintf (fname1, "/proc/%lld/cmdline", pid);
d5d6fca5 3375 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
3376 {
3377 fgets (buffer, sizeof (buffer), procfile);
3378 printf_filtered ("cmdline = '%s'\n", buffer);
3379 fclose (procfile);
3380 }
3381 else
8a3fe4f8 3382 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
3383 }
3384 if (cwd_f || all)
3385 {
3386 sprintf (fname1, "/proc/%lld/cwd", pid);
3387 memset (fname2, 0, sizeof (fname2));
3388 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
3389 printf_filtered ("cwd = '%s'\n", fname2);
3390 else
8a3fe4f8 3391 warning (_("unable to read link '%s'"), fname1);
dba24537
AC
3392 }
3393 if (exe_f || all)
3394 {
3395 sprintf (fname1, "/proc/%lld/exe", pid);
3396 memset (fname2, 0, sizeof (fname2));
3397 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
3398 printf_filtered ("exe = '%s'\n", fname2);
3399 else
8a3fe4f8 3400 warning (_("unable to read link '%s'"), fname1);
dba24537
AC
3401 }
3402 if (mappings_f || all)
3403 {
3404 sprintf (fname1, "/proc/%lld/maps", pid);
d5d6fca5 3405 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
3406 {
3407 long long addr, endaddr, size, offset, inode;
3408 char permissions[8], device[8], filename[MAXPATHLEN];
3409
a3f17187 3410 printf_filtered (_("Mapped address spaces:\n\n"));
17a912b6 3411 if (gdbarch_addr_bit (current_gdbarch) == 32)
dba24537
AC
3412 {
3413 printf_filtered ("\t%10s %10s %10s %10s %7s\n",
3414 "Start Addr",
3415 " End Addr",
3416 " Size", " Offset", "objfile");
3417 }
3418 else
3419 {
3420 printf_filtered (" %18s %18s %10s %10s %7s\n",
3421 "Start Addr",
3422 " End Addr",
3423 " Size", " Offset", "objfile");
3424 }
3425
3426 while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
3427 &offset, &device[0], &inode, &filename[0]))
3428 {
3429 size = endaddr - addr;
3430
3431 /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
3432 calls here (and possibly above) should be abstracted
3433 out into their own functions? Andrew suggests using
3434 a generic local_address_string instead to print out
3435 the addresses; that makes sense to me, too. */
3436
17a912b6 3437 if (gdbarch_addr_bit (current_gdbarch) == 32)
dba24537
AC
3438 {
3439 printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
3440 (unsigned long) addr, /* FIXME: pr_addr */
3441 (unsigned long) endaddr,
3442 (int) size,
3443 (unsigned int) offset,
3444 filename[0] ? filename : "");
3445 }
3446 else
3447 {
3448 printf_filtered (" %#18lx %#18lx %#10x %#10x %7s\n",
3449 (unsigned long) addr, /* FIXME: pr_addr */
3450 (unsigned long) endaddr,
3451 (int) size,
3452 (unsigned int) offset,
3453 filename[0] ? filename : "");
3454 }
3455 }
3456
3457 fclose (procfile);
3458 }
3459 else
8a3fe4f8 3460 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
3461 }
3462 if (status_f || all)
3463 {
3464 sprintf (fname1, "/proc/%lld/status", pid);
d5d6fca5 3465 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
3466 {
3467 while (fgets (buffer, sizeof (buffer), procfile) != NULL)
3468 puts_filtered (buffer);
3469 fclose (procfile);
3470 }
3471 else
8a3fe4f8 3472 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
3473 }
3474 if (stat_f || all)
3475 {
3476 sprintf (fname1, "/proc/%lld/stat", pid);
d5d6fca5 3477 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
3478 {
3479 int itmp;
3480 char ctmp;
a25694b4 3481 long ltmp;
dba24537
AC
3482
3483 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3484 printf_filtered (_("Process: %d\n"), itmp);
a25694b4 3485 if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
a3f17187 3486 printf_filtered (_("Exec file: %s\n"), buffer);
dba24537 3487 if (fscanf (procfile, "%c ", &ctmp) > 0)
a3f17187 3488 printf_filtered (_("State: %c\n"), ctmp);
dba24537 3489 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3490 printf_filtered (_("Parent process: %d\n"), itmp);
dba24537 3491 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3492 printf_filtered (_("Process group: %d\n"), itmp);
dba24537 3493 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3494 printf_filtered (_("Session id: %d\n"), itmp);
dba24537 3495 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3496 printf_filtered (_("TTY: %d\n"), itmp);
dba24537 3497 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3498 printf_filtered (_("TTY owner process group: %d\n"), itmp);
a25694b4
AS
3499 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3500 printf_filtered (_("Flags: 0x%lx\n"), ltmp);
3501 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3502 printf_filtered (_("Minor faults (no memory page): %lu\n"),
3503 (unsigned long) ltmp);
3504 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3505 printf_filtered (_("Minor faults, children: %lu\n"),
3506 (unsigned long) ltmp);
3507 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3508 printf_filtered (_("Major faults (memory page faults): %lu\n"),
3509 (unsigned long) ltmp);
3510 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3511 printf_filtered (_("Major faults, children: %lu\n"),
3512 (unsigned long) ltmp);
3513 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3514 printf_filtered (_("utime: %ld\n"), ltmp);
3515 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3516 printf_filtered (_("stime: %ld\n"), ltmp);
3517 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3518 printf_filtered (_("utime, children: %ld\n"), ltmp);
3519 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3520 printf_filtered (_("stime, children: %ld\n"), ltmp);
3521 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3522 printf_filtered (_("jiffies remaining in current time slice: %ld\n"),
3523 ltmp);
3524 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3525 printf_filtered (_("'nice' value: %ld\n"), ltmp);
3526 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3527 printf_filtered (_("jiffies until next timeout: %lu\n"),
3528 (unsigned long) ltmp);
3529 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3530 printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
3531 (unsigned long) ltmp);
3532 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3533 printf_filtered (_("start time (jiffies since system boot): %ld\n"),
3534 ltmp);
3535 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3536 printf_filtered (_("Virtual memory size: %lu\n"),
3537 (unsigned long) ltmp);
3538 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3539 printf_filtered (_("Resident set size: %lu\n"), (unsigned long) ltmp);
3540 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3541 printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
3542 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3543 printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
3544 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3545 printf_filtered (_("End of text: 0x%lx\n"), ltmp);
3546 if (fscanf (procfile, "%lu ", &ltmp) > 0)
3547 printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
dba24537
AC
3548#if 0 /* Don't know how architecture-dependent the rest is...
3549 Anyway the signal bitmap info is available from "status". */
a25694b4
AS
3550 if (fscanf (procfile, "%lu ", &ltmp) > 0) /* FIXME arch? */
3551 printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
3552 if (fscanf (procfile, "%lu ", &ltmp) > 0) /* FIXME arch? */
3553 printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
3554 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3555 printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
3556 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3557 printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
3558 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3559 printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
3560 if (fscanf (procfile, "%ld ", &ltmp) > 0)
3561 printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
3562 if (fscanf (procfile, "%lu ", &ltmp) > 0) /* FIXME arch? */
3563 printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
dba24537
AC
3564#endif
3565 fclose (procfile);
3566 }
3567 else
8a3fe4f8 3568 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
3569 }
3570}
3571
10d6c8cd
DJ
3572/* Implement the to_xfer_partial interface for memory reads using the /proc
3573 filesystem. Because we can use a single read() call for /proc, this
3574 can be much more efficient than banging away at PTRACE_PEEKTEXT,
3575 but it doesn't support writes. */
3576
3577static LONGEST
3578linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3579 const char *annex, gdb_byte *readbuf,
3580 const gdb_byte *writebuf,
3581 ULONGEST offset, LONGEST len)
dba24537 3582{
10d6c8cd
DJ
3583 LONGEST ret;
3584 int fd;
dba24537
AC
3585 char filename[64];
3586
10d6c8cd 3587 if (object != TARGET_OBJECT_MEMORY || !readbuf)
dba24537
AC
3588 return 0;
3589
3590 /* Don't bother for one word. */
3591 if (len < 3 * sizeof (long))
3592 return 0;
3593
3594 /* We could keep this file open and cache it - possibly one per
3595 thread. That requires some juggling, but is even faster. */
3596 sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
3597 fd = open (filename, O_RDONLY | O_LARGEFILE);
3598 if (fd == -1)
3599 return 0;
3600
3601 /* If pread64 is available, use it. It's faster if the kernel
3602 supports it (only one syscall), and it's 64-bit safe even on
3603 32-bit platforms (for instance, SPARC debugging a SPARC64
3604 application). */
3605#ifdef HAVE_PREAD64
10d6c8cd 3606 if (pread64 (fd, readbuf, len, offset) != len)
dba24537 3607#else
10d6c8cd 3608 if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
dba24537
AC
3609#endif
3610 ret = 0;
3611 else
3612 ret = len;
3613
3614 close (fd);
3615 return ret;
3616}
3617
3618/* Parse LINE as a signal set and add its set bits to SIGS. */
3619
3620static void
3621add_line_to_sigset (const char *line, sigset_t *sigs)
3622{
3623 int len = strlen (line) - 1;
3624 const char *p;
3625 int signum;
3626
3627 if (line[len] != '\n')
8a3fe4f8 3628 error (_("Could not parse signal set: %s"), line);
dba24537
AC
3629
3630 p = line;
3631 signum = len * 4;
3632 while (len-- > 0)
3633 {
3634 int digit;
3635
3636 if (*p >= '0' && *p <= '9')
3637 digit = *p - '0';
3638 else if (*p >= 'a' && *p <= 'f')
3639 digit = *p - 'a' + 10;
3640 else
8a3fe4f8 3641 error (_("Could not parse signal set: %s"), line);
dba24537
AC
3642
3643 signum -= 4;
3644
3645 if (digit & 1)
3646 sigaddset (sigs, signum + 1);
3647 if (digit & 2)
3648 sigaddset (sigs, signum + 2);
3649 if (digit & 4)
3650 sigaddset (sigs, signum + 3);
3651 if (digit & 8)
3652 sigaddset (sigs, signum + 4);
3653
3654 p++;
3655 }
3656}
3657
3658/* Find process PID's pending signals from /proc/pid/status and set
3659 SIGS to match. */
3660
3661void
3662linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored)
3663{
3664 FILE *procfile;
3665 char buffer[MAXPATHLEN], fname[MAXPATHLEN];
3666 int signum;
3667
3668 sigemptyset (pending);
3669 sigemptyset (blocked);
3670 sigemptyset (ignored);
3671 sprintf (fname, "/proc/%d/status", pid);
3672 procfile = fopen (fname, "r");
3673 if (procfile == NULL)
8a3fe4f8 3674 error (_("Could not open %s"), fname);
dba24537
AC
3675
3676 while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
3677 {
3678 /* Normal queued signals are on the SigPnd line in the status
3679 file. However, 2.6 kernels also have a "shared" pending
3680 queue for delivering signals to a thread group, so check for
3681 a ShdPnd line also.
3682
3683 Unfortunately some Red Hat kernels include the shared pending
3684 queue but not the ShdPnd status field. */
3685
3686 if (strncmp (buffer, "SigPnd:\t", 8) == 0)
3687 add_line_to_sigset (buffer + 8, pending);
3688 else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
3689 add_line_to_sigset (buffer + 8, pending);
3690 else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
3691 add_line_to_sigset (buffer + 8, blocked);
3692 else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
3693 add_line_to_sigset (buffer + 8, ignored);
3694 }
3695
3696 fclose (procfile);
3697}
3698
10d6c8cd
DJ
3699static LONGEST
3700linux_xfer_partial (struct target_ops *ops, enum target_object object,
3701 const char *annex, gdb_byte *readbuf,
3702 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3703{
3704 LONGEST xfer;
3705
3706 if (object == TARGET_OBJECT_AUXV)
3707 return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
3708 offset, len);
3709
3710 xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
3711 offset, len);
3712 if (xfer != 0)
3713 return xfer;
3714
3715 return super_xfer_partial (ops, object, annex, readbuf, writebuf,
3716 offset, len);
3717}
3718
e9efe249 3719/* Create a prototype generic GNU/Linux target. The client can override
10d6c8cd
DJ
3720 it with local methods. */
3721
910122bf
UW
3722static void
3723linux_target_install_ops (struct target_ops *t)
10d6c8cd 3724{
6d8fd2b7
UW
3725 t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
3726 t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
3727 t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
3728 t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
10d6c8cd 3729 t->to_post_startup_inferior = linux_child_post_startup_inferior;
6d8fd2b7
UW
3730 t->to_post_attach = linux_child_post_attach;
3731 t->to_follow_fork = linux_child_follow_fork;
10d6c8cd
DJ
3732 t->to_find_memory_regions = linux_nat_find_memory_regions;
3733 t->to_make_corefile_notes = linux_nat_make_corefile_notes;
3734
3735 super_xfer_partial = t->to_xfer_partial;
3736 t->to_xfer_partial = linux_xfer_partial;
910122bf
UW
3737}
3738
3739struct target_ops *
3740linux_target (void)
3741{
3742 struct target_ops *t;
3743
3744 t = inf_ptrace_target ();
3745 linux_target_install_ops (t);
3746
3747 return t;
3748}
3749
3750struct target_ops *
7714d83a 3751linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
910122bf
UW
3752{
3753 struct target_ops *t;
3754
3755 t = inf_ptrace_trad_target (register_u_offset);
3756 linux_target_install_ops (t);
10d6c8cd 3757
10d6c8cd
DJ
3758 return t;
3759}
3760
b84876c2
PA
3761/* Controls if async mode is permitted. */
3762static int linux_async_permitted = 0;
3763
3764/* The set command writes to this variable. If the inferior is
3765 executing, linux_nat_async_permitted is *not* updated. */
3766static int linux_async_permitted_1 = 0;
3767
3768static void
3769set_maintenance_linux_async_permitted (char *args, int from_tty,
3770 struct cmd_list_element *c)
3771{
3772 if (target_has_execution)
3773 {
3774 linux_async_permitted_1 = linux_async_permitted;
3775 error (_("Cannot change this setting while the inferior is running."));
3776 }
3777
3778 linux_async_permitted = linux_async_permitted_1;
3779 linux_nat_set_async_mode (linux_async_permitted);
3780}
3781
3782static void
3783show_maintenance_linux_async_permitted (struct ui_file *file, int from_tty,
3784 struct cmd_list_element *c, const char *value)
3785{
3786 fprintf_filtered (file, _("\
3787Controlling the GNU/Linux inferior in asynchronous mode is %s.\n"),
3788 value);
3789}
3790
3791/* target_is_async_p implementation. */
3792
3793static int
3794linux_nat_is_async_p (void)
3795{
3796 /* NOTE: palves 2008-03-21: We're only async when the user requests
3797 it explicitly with the "maintenance set linux-async" command.
3798 Someday, linux will always be async. */
3799 if (!linux_async_permitted)
3800 return 0;
3801
3802 return 1;
3803}
3804
3805/* target_can_async_p implementation. */
3806
3807static int
3808linux_nat_can_async_p (void)
3809{
3810 /* NOTE: palves 2008-03-21: We're only async when the user requests
3811 it explicitly with the "maintenance set linux-async" command.
3812 Someday, linux will always be async. */
3813 if (!linux_async_permitted)
3814 return 0;
3815
3816 /* See target.h/target_async_mask. */
3817 return linux_nat_async_mask_value;
3818}
3819
3820/* target_async_mask implementation. */
3821
3822static int
3823linux_nat_async_mask (int mask)
3824{
3825 int current_state;
3826 current_state = linux_nat_async_mask_value;
3827
3828 if (current_state != mask)
3829 {
3830 if (mask == 0)
3831 {
3832 linux_nat_async (NULL, 0);
3833 linux_nat_async_mask_value = mask;
3834 /* We're in sync mode. Make sure SIGCHLD isn't handled by
3835 async_sigchld_handler when we come out of sigsuspend in
3836 linux_nat_wait. */
3837 sigaction (SIGCHLD, &sync_sigchld_action, NULL);
3838 }
3839 else
3840 {
3841 /* Restore the async handler. */
3842 sigaction (SIGCHLD, &async_sigchld_action, NULL);
3843 linux_nat_async_mask_value = mask;
3844 linux_nat_async (inferior_event_handler, 0);
3845 }
3846 }
3847
3848 return current_state;
3849}
3850
3851/* Pop an event from the event pipe. */
3852
3853static int
3854linux_nat_event_pipe_pop (int* ptr_status, int* ptr_options)
3855{
3856 struct waitpid_result event = {0};
3857 int ret;
3858
3859 do
3860 {
3861 ret = read (linux_nat_event_pipe[0], &event, sizeof (event));
3862 }
3863 while (ret == -1 && errno == EINTR);
3864
3865 gdb_assert (ret == sizeof (event));
3866
3867 *ptr_status = event.status;
3868 *ptr_options = event.options;
3869
3870 linux_nat_num_queued_events--;
3871
3872 return event.pid;
3873}
3874
3875/* Push an event into the event pipe. */
3876
3877static void
3878linux_nat_event_pipe_push (int pid, int status, int options)
3879{
3880 int ret;
3881 struct waitpid_result event = {0};
3882 event.pid = pid;
3883 event.status = status;
3884 event.options = options;
3885
3886 do
3887 {
3888 ret = write (linux_nat_event_pipe[1], &event, sizeof (event));
3889 gdb_assert ((ret == -1 && errno == EINTR) || ret == sizeof (event));
3890 } while (ret == -1 && errno == EINTR);
3891
3892 linux_nat_num_queued_events++;
3893}
3894
3895static void
3896get_pending_events (void)
3897{
3898 int status, options, pid;
3899
3900 if (!linux_nat_async_enabled || !linux_nat_async_events_enabled)
3901 internal_error (__FILE__, __LINE__,
3902 "get_pending_events called with async masked");
3903
3904 while (1)
3905 {
3906 status = 0;
3907 options = __WCLONE | WNOHANG;
3908
3909 do
3910 {
3911 pid = waitpid (-1, &status, options);
3912 }
3913 while (pid == -1 && errno == EINTR);
3914
3915 if (pid <= 0)
3916 {
3917 options = WNOHANG;
3918 do
3919 {
3920 pid = waitpid (-1, &status, options);
3921 }
3922 while (pid == -1 && errno == EINTR);
3923 }
3924
3925 if (pid <= 0)
3926 /* No more children reporting events. */
3927 break;
3928
3929 if (debug_linux_nat_async)
3930 fprintf_unfiltered (gdb_stdlog, "\
3931get_pending_events: pid(%d), status(%x), options (%x)\n",
3932 pid, status, options);
3933
3934 linux_nat_event_pipe_push (pid, status, options);
3935 }
3936
3937 if (debug_linux_nat_async)
3938 fprintf_unfiltered (gdb_stdlog, "\
3939get_pending_events: linux_nat_num_queued_events(%d)\n",
3940 linux_nat_num_queued_events);
3941}
3942
3943/* SIGCHLD handler for async mode. */
3944
3945static void
3946async_sigchld_handler (int signo)
3947{
3948 if (debug_linux_nat_async)
3949 fprintf_unfiltered (gdb_stdlog, "async_sigchld_handler\n");
3950
3951 get_pending_events ();
3952}
3953
3954/* Enable or disable async SIGCHLD handling. */
3955
3956static int
3957linux_nat_async_events (int enable)
3958{
3959 int current_state = linux_nat_async_events_enabled;
3960
3961 if (debug_linux_nat_async)
3962 fprintf_unfiltered (gdb_stdlog,
3963 "LNAE: enable(%d): linux_nat_async_events_enabled(%d), "
3964 "linux_nat_num_queued_events(%d)\n",
3965 enable, linux_nat_async_events_enabled,
3966 linux_nat_num_queued_events);
3967
3968 if (current_state != enable)
3969 {
3970 sigset_t mask;
3971 sigemptyset (&mask);
3972 sigaddset (&mask, SIGCHLD);
3973 if (enable)
3974 {
3975 /* Unblock target events. */
3976 linux_nat_async_events_enabled = 1;
3977
3978 local_event_queue_to_pipe ();
3979 /* While in masked async, we may have not collected all the
3980 pending events. Get them out now. */
3981 get_pending_events ();
3982 sigprocmask (SIG_UNBLOCK, &mask, NULL);
3983 }
3984 else
3985 {
3986 /* Block target events. */
3987 sigprocmask (SIG_BLOCK, &mask, NULL);
3988 linux_nat_async_events_enabled = 0;
3989 /* Get events out of queue, and make them available to
3990 queued_waitpid / my_waitpid. */
3991 pipe_to_local_event_queue ();
3992 }
3993 }
3994
3995 return current_state;
3996}
3997
3998static int async_terminal_is_ours = 1;
3999
4000/* target_terminal_inferior implementation. */
4001
4002static void
4003linux_nat_terminal_inferior (void)
4004{
4005 if (!target_is_async_p ())
4006 {
4007 /* Async mode is disabled. */
4008 terminal_inferior ();
4009 return;
4010 }
4011
4012 /* GDB should never give the terminal to the inferior, if the
4013 inferior is running in the background (run&, continue&, etc.).
4014 This check can be removed when the common code is fixed. */
4015 if (!sync_execution)
4016 return;
4017
4018 terminal_inferior ();
4019
4020 if (!async_terminal_is_ours)
4021 return;
4022
4023 delete_file_handler (input_fd);
4024 async_terminal_is_ours = 0;
4025 set_sigint_trap ();
4026}
4027
4028/* target_terminal_ours implementation. */
4029
4030void
4031linux_nat_terminal_ours (void)
4032{
4033 if (!target_is_async_p ())
4034 {
4035 /* Async mode is disabled. */
4036 terminal_ours ();
4037 return;
4038 }
4039
4040 /* GDB should never give the terminal to the inferior if the
4041 inferior is running in the background (run&, continue&, etc.),
4042 but claiming it sure should. */
4043 terminal_ours ();
4044
4045 if (!sync_execution)
4046 return;
4047
4048 if (async_terminal_is_ours)
4049 return;
4050
4051 clear_sigint_trap ();
4052 add_file_handler (input_fd, stdin_event_handler, 0);
4053 async_terminal_is_ours = 1;
4054}
4055
4056static void (*async_client_callback) (enum inferior_event_type event_type,
4057 void *context);
4058static void *async_client_context;
4059
4060static void
4061linux_nat_async_file_handler (int error, gdb_client_data client_data)
4062{
4063 async_client_callback (INF_REG_EVENT, async_client_context);
4064}
4065
4066/* target_async implementation. */
4067
4068static void
4069linux_nat_async (void (*callback) (enum inferior_event_type event_type,
4070 void *context), void *context)
4071{
4072 if (linux_nat_async_mask_value == 0 || !linux_nat_async_enabled)
4073 internal_error (__FILE__, __LINE__,
4074 "Calling target_async when async is masked");
4075
4076 if (callback != NULL)
4077 {
4078 async_client_callback = callback;
4079 async_client_context = context;
4080 add_file_handler (linux_nat_event_pipe[0],
4081 linux_nat_async_file_handler, NULL);
4082
4083 linux_nat_async_events (1);
4084 }
4085 else
4086 {
4087 async_client_callback = callback;
4088 async_client_context = context;
4089
4090 linux_nat_async_events (0);
4091 delete_file_handler (linux_nat_event_pipe[0]);
4092 }
4093 return;
4094}
4095
4096/* Enable/Disable async mode. */
4097
4098static void
4099linux_nat_set_async_mode (int on)
4100{
4101 if (linux_nat_async_enabled != on)
4102 {
4103 if (on)
4104 {
4105 gdb_assert (waitpid_queue == NULL);
4106 sigaction (SIGCHLD, &async_sigchld_action, NULL);
4107
4108 if (pipe (linux_nat_event_pipe) == -1)
4109 internal_error (__FILE__, __LINE__,
4110 "creating event pipe failed.");
4111
4112 fcntl (linux_nat_event_pipe[0], F_SETFL, O_NONBLOCK);
4113 fcntl (linux_nat_event_pipe[1], F_SETFL, O_NONBLOCK);
4114 }
4115 else
4116 {
4117 sigaction (SIGCHLD, &sync_sigchld_action, NULL);
4118
4119 drain_queued_events (-1);
4120
4121 linux_nat_num_queued_events = 0;
4122 close (linux_nat_event_pipe[0]);
4123 close (linux_nat_event_pipe[1]);
4124 linux_nat_event_pipe[0] = linux_nat_event_pipe[1] = -1;
4125
4126 }
4127 }
4128 linux_nat_async_enabled = on;
4129}
4130
f973ed9c
DJ
4131void
4132linux_nat_add_target (struct target_ops *t)
4133{
f973ed9c
DJ
4134 /* Save the provided single-threaded target. We save this in a separate
4135 variable because another target we've inherited from (e.g. inf-ptrace)
4136 may have saved a pointer to T; we want to use it for the final
4137 process stratum target. */
4138 linux_ops_saved = *t;
4139 linux_ops = &linux_ops_saved;
4140
4141 /* Override some methods for multithreading. */
b84876c2 4142 t->to_create_inferior = linux_nat_create_inferior;
f973ed9c
DJ
4143 t->to_attach = linux_nat_attach;
4144 t->to_detach = linux_nat_detach;
4145 t->to_resume = linux_nat_resume;
4146 t->to_wait = linux_nat_wait;
4147 t->to_xfer_partial = linux_nat_xfer_partial;
4148 t->to_kill = linux_nat_kill;
4149 t->to_mourn_inferior = linux_nat_mourn_inferior;
4150 t->to_thread_alive = linux_nat_thread_alive;
4151 t->to_pid_to_str = linux_nat_pid_to_str;
4152 t->to_has_thread_control = tc_schedlock;
4153
b84876c2
PA
4154 t->to_can_async_p = linux_nat_can_async_p;
4155 t->to_is_async_p = linux_nat_is_async_p;
4156 t->to_async = linux_nat_async;
4157 t->to_async_mask = linux_nat_async_mask;
4158 t->to_terminal_inferior = linux_nat_terminal_inferior;
4159 t->to_terminal_ours = linux_nat_terminal_ours;
4160
f973ed9c
DJ
4161 /* We don't change the stratum; this target will sit at
4162 process_stratum and thread_db will set at thread_stratum. This
4163 is a little strange, since this is a multi-threaded-capable
4164 target, but we want to be on the stack below thread_db, and we
4165 also want to be used for single-threaded processes. */
4166
4167 add_target (t);
4168
4169 /* TODO: Eliminate this and have libthread_db use
4170 find_target_beneath. */
4171 thread_db_init (t);
4172}
4173
9f0bdab8
DJ
4174/* Register a method to call whenever a new thread is attached. */
4175void
4176linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
4177{
4178 /* Save the pointer. We only support a single registered instance
4179 of the GNU/Linux native target, so we do not need to map this to
4180 T. */
4181 linux_nat_new_thread = new_thread;
4182}
4183
4184/* Return the saved siginfo associated with PTID. */
4185struct siginfo *
4186linux_nat_get_siginfo (ptid_t ptid)
4187{
4188 struct lwp_info *lp = find_lwp_pid (ptid);
4189
4190 gdb_assert (lp != NULL);
4191
4192 return &lp->siginfo;
4193}
4194
d6b0e80f
AC
4195void
4196_initialize_linux_nat (void)
4197{
b84876c2 4198 sigset_t mask;
dba24537 4199
1bedd215
AC
4200 add_info ("proc", linux_nat_info_proc_cmd, _("\
4201Show /proc process information about any running process.\n\
dba24537
AC
4202Specify any process id, or use the program being debugged by default.\n\
4203Specify any of the following keywords for detailed info:\n\
4204 mappings -- list of mapped memory regions.\n\
4205 stat -- list a bunch of random process info.\n\
4206 status -- list a different bunch of random process info.\n\
1bedd215 4207 all -- list all available /proc info."));
d6b0e80f 4208
b84876c2
PA
4209 add_setshow_zinteger_cmd ("lin-lwp", class_maintenance,
4210 &debug_linux_nat, _("\
4211Set debugging of GNU/Linux lwp module."), _("\
4212Show debugging of GNU/Linux lwp module."), _("\
4213Enables printf debugging output."),
4214 NULL,
4215 show_debug_linux_nat,
4216 &setdebuglist, &showdebuglist);
4217
4218 add_setshow_zinteger_cmd ("lin-lwp-async", class_maintenance,
4219 &debug_linux_nat_async, _("\
4220Set debugging of GNU/Linux async lwp module."), _("\
4221Show debugging of GNU/Linux async lwp module."), _("\
4222Enables printf debugging output."),
4223 NULL,
4224 show_debug_linux_nat_async,
4225 &setdebuglist, &showdebuglist);
4226
4227 add_setshow_boolean_cmd ("linux-async", class_maintenance,
4228 &linux_async_permitted_1, _("\
4229Set whether gdb controls the GNU/Linux inferior in asynchronous mode."), _("\
4230Show whether gdb controls the GNU/Linux inferior in asynchronous mode."), _("\
4231Tells gdb whether to control the GNU/Linux inferior in asynchronous mode."),
4232 set_maintenance_linux_async_permitted,
4233 show_maintenance_linux_async_permitted,
4234 &maintenance_set_cmdlist,
4235 &maintenance_show_cmdlist);
4236
4237 /* Block SIGCHLD by default. Doing this early prevents it getting
4238 unblocked if an exception is thrown due to an error while the
4239 inferior is starting (sigsetjmp/siglongjmp). */
4240 sigemptyset (&mask);
4241 sigaddset (&mask, SIGCHLD);
4242 sigprocmask (SIG_BLOCK, &mask, NULL);
4243
4244 /* Save this mask as the default. */
d6b0e80f
AC
4245 sigprocmask (SIG_SETMASK, NULL, &normal_mask);
4246
b84876c2
PA
4247 /* The synchronous SIGCHLD handler. */
4248 sync_sigchld_action.sa_handler = sigchld_handler;
4249 sigemptyset (&sync_sigchld_action.sa_mask);
4250 sync_sigchld_action.sa_flags = SA_RESTART;
4251
4252 /* Make it the default. */
4253 sigaction (SIGCHLD, &sync_sigchld_action, NULL);
d6b0e80f
AC
4254
4255 /* Make sure we don't block SIGCHLD during a sigsuspend. */
4256 sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
4257 sigdelset (&suspend_mask, SIGCHLD);
4258
b84876c2
PA
4259 /* SIGCHLD handler for async mode. */
4260 async_sigchld_action.sa_handler = async_sigchld_handler;
4261 sigemptyset (&async_sigchld_action.sa_mask);
4262 async_sigchld_action.sa_flags = SA_RESTART;
d6b0e80f 4263
b84876c2
PA
4264 /* Install the default mode. */
4265 linux_nat_set_async_mode (linux_async_permitted);
d6b0e80f
AC
4266}
4267\f
4268
4269/* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
4270 the GNU/Linux Threads library and therefore doesn't really belong
4271 here. */
4272
4273/* Read variable NAME in the target and return its value if found.
4274 Otherwise return zero. It is assumed that the type of the variable
4275 is `int'. */
4276
4277static int
4278get_signo (const char *name)
4279{
4280 struct minimal_symbol *ms;
4281 int signo;
4282
4283 ms = lookup_minimal_symbol (name, NULL, NULL);
4284 if (ms == NULL)
4285 return 0;
4286
8e70166d 4287 if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
d6b0e80f
AC
4288 sizeof (signo)) != 0)
4289 return 0;
4290
4291 return signo;
4292}
4293
4294/* Return the set of signals used by the threads library in *SET. */
4295
4296void
4297lin_thread_get_thread_signals (sigset_t *set)
4298{
4299 struct sigaction action;
4300 int restart, cancel;
b84876c2 4301 sigset_t blocked_mask;
d6b0e80f 4302
b84876c2 4303 sigemptyset (&blocked_mask);
d6b0e80f
AC
4304 sigemptyset (set);
4305
4306 restart = get_signo ("__pthread_sig_restart");
17fbb0bd
DJ
4307 cancel = get_signo ("__pthread_sig_cancel");
4308
4309 /* LinuxThreads normally uses the first two RT signals, but in some legacy
4310 cases may use SIGUSR1/SIGUSR2. NPTL always uses RT signals, but does
4311 not provide any way for the debugger to query the signal numbers -
4312 fortunately they don't change! */
4313
d6b0e80f 4314 if (restart == 0)
17fbb0bd 4315 restart = __SIGRTMIN;
d6b0e80f 4316
d6b0e80f 4317 if (cancel == 0)
17fbb0bd 4318 cancel = __SIGRTMIN + 1;
d6b0e80f
AC
4319
4320 sigaddset (set, restart);
4321 sigaddset (set, cancel);
4322
4323 /* The GNU/Linux Threads library makes terminating threads send a
4324 special "cancel" signal instead of SIGCHLD. Make sure we catch
4325 those (to prevent them from terminating GDB itself, which is
4326 likely to be their default action) and treat them the same way as
4327 SIGCHLD. */
4328
4329 action.sa_handler = sigchld_handler;
4330 sigemptyset (&action.sa_mask);
58aecb61 4331 action.sa_flags = SA_RESTART;
d6b0e80f
AC
4332 sigaction (cancel, &action, NULL);
4333
4334 /* We block the "cancel" signal throughout this code ... */
4335 sigaddset (&blocked_mask, cancel);
4336 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
4337
4338 /* ... except during a sigsuspend. */
4339 sigdelset (&suspend_mask, cancel);
4340}
This page took 0.646558 seconds and 4 git commands to generate.