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