]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/linux-nat.c
2007-07-03 Paul Gilliam <pgilliam@us.ibm.com>
[thirdparty/binutils-gdb.git] / gdb / linux-nat.c
CommitLineData
3993f6b1 1/* GNU/Linux native-dependent code common to multiple platforms.
dba24537 2
6aba47ca 3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
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
10 the Free Software Foundation; either version 2 of the License, or
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
19 along with this program; if not, write to the Free Software
197e01b6
EZ
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
3993f6b1
DJ
22
23#include "defs.h"
24#include "inferior.h"
25#include "target.h"
d6b0e80f 26#include "gdb_string.h"
3993f6b1 27#include "gdb_wait.h"
d6b0e80f
AC
28#include "gdb_assert.h"
29#ifdef HAVE_TKILL_SYSCALL
30#include <unistd.h>
31#include <sys/syscall.h>
32#endif
3993f6b1 33#include <sys/ptrace.h>
0274a8ce 34#include "linux-nat.h"
ac264b3b 35#include "linux-fork.h"
d6b0e80f
AC
36#include "gdbthread.h"
37#include "gdbcmd.h"
38#include "regcache.h"
4f844a66 39#include "regset.h"
10d6c8cd
DJ
40#include "inf-ptrace.h"
41#include "auxv.h"
dba24537
AC
42#include <sys/param.h> /* for MAXPATHLEN */
43#include <sys/procfs.h> /* for elf_gregset etc. */
44#include "elf-bfd.h" /* for elfcore_write_* */
45#include "gregset.h" /* for gregset */
46#include "gdbcore.h" /* for get_exec_file */
47#include <ctype.h> /* for isdigit */
48#include "gdbthread.h" /* for struct thread_info etc. */
49#include "gdb_stat.h" /* for struct stat */
50#include <fcntl.h> /* for O_RDONLY */
51
52#ifndef O_LARGEFILE
53#define O_LARGEFILE 0
54#endif
0274a8ce 55
3993f6b1
DJ
56/* If the system headers did not provide the constants, hard-code the normal
57 values. */
58#ifndef PTRACE_EVENT_FORK
59
60#define PTRACE_SETOPTIONS 0x4200
61#define PTRACE_GETEVENTMSG 0x4201
62
63/* options set using PTRACE_SETOPTIONS */
64#define PTRACE_O_TRACESYSGOOD 0x00000001
65#define PTRACE_O_TRACEFORK 0x00000002
66#define PTRACE_O_TRACEVFORK 0x00000004
67#define PTRACE_O_TRACECLONE 0x00000008
68#define PTRACE_O_TRACEEXEC 0x00000010
9016a515
DJ
69#define PTRACE_O_TRACEVFORKDONE 0x00000020
70#define PTRACE_O_TRACEEXIT 0x00000040
3993f6b1
DJ
71
72/* Wait extended result codes for the above trace options. */
73#define PTRACE_EVENT_FORK 1
74#define PTRACE_EVENT_VFORK 2
75#define PTRACE_EVENT_CLONE 3
76#define PTRACE_EVENT_EXEC 4
c874c7fc 77#define PTRACE_EVENT_VFORK_DONE 5
9016a515 78#define PTRACE_EVENT_EXIT 6
3993f6b1
DJ
79
80#endif /* PTRACE_EVENT_FORK */
81
82/* We can't always assume that this flag is available, but all systems
83 with the ptrace event handlers also have __WALL, so it's safe to use
84 here. */
85#ifndef __WALL
86#define __WALL 0x40000000 /* Wait for any child. */
87#endif
88
10d6c8cd
DJ
89/* The single-threaded native GNU/Linux target_ops. We save a pointer for
90 the use of the multi-threaded target. */
91static struct target_ops *linux_ops;
f973ed9c 92static struct target_ops linux_ops_saved;
10d6c8cd 93
ac264b3b
MS
94/* The saved to_xfer_partial method, inherited from inf-ptrace.c.
95 Called by our to_xfer_partial. */
96static LONGEST (*super_xfer_partial) (struct target_ops *,
97 enum target_object,
98 const char *, gdb_byte *,
99 const gdb_byte *,
10d6c8cd
DJ
100 ULONGEST, LONGEST);
101
d6b0e80f 102static int debug_linux_nat;
920d2a44
AC
103static void
104show_debug_linux_nat (struct ui_file *file, int from_tty,
105 struct cmd_list_element *c, const char *value)
106{
107 fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"),
108 value);
109}
d6b0e80f 110
9016a515
DJ
111static int linux_parent_pid;
112
ae087d01
DJ
113struct simple_pid_list
114{
115 int pid;
3d799a95 116 int status;
ae087d01
DJ
117 struct simple_pid_list *next;
118};
119struct simple_pid_list *stopped_pids;
120
3993f6b1
DJ
121/* This variable is a tri-state flag: -1 for unknown, 0 if PTRACE_O_TRACEFORK
122 can not be used, 1 if it can. */
123
124static int linux_supports_tracefork_flag = -1;
125
9016a515
DJ
126/* If we have PTRACE_O_TRACEFORK, this flag indicates whether we also have
127 PTRACE_O_TRACEVFORKDONE. */
128
129static int linux_supports_tracevforkdone_flag = -1;
130
ae087d01
DJ
131\f
132/* Trivial list manipulation functions to keep track of a list of
133 new stopped processes. */
134static void
3d799a95 135add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
ae087d01
DJ
136{
137 struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
138 new_pid->pid = pid;
3d799a95 139 new_pid->status = status;
ae087d01
DJ
140 new_pid->next = *listp;
141 *listp = new_pid;
142}
143
144static int
3d799a95 145pull_pid_from_list (struct simple_pid_list **listp, int pid, int *status)
ae087d01
DJ
146{
147 struct simple_pid_list **p;
148
149 for (p = listp; *p != NULL; p = &(*p)->next)
150 if ((*p)->pid == pid)
151 {
152 struct simple_pid_list *next = (*p)->next;
3d799a95 153 *status = (*p)->status;
ae087d01
DJ
154 xfree (*p);
155 *p = next;
156 return 1;
157 }
158 return 0;
159}
160
3d799a95
DJ
161static void
162linux_record_stopped_pid (int pid, int status)
ae087d01 163{
3d799a95 164 add_to_pid_list (&stopped_pids, pid, status);
ae087d01
DJ
165}
166
3993f6b1
DJ
167\f
168/* A helper function for linux_test_for_tracefork, called after fork (). */
169
170static void
171linux_tracefork_child (void)
172{
173 int ret;
174
175 ptrace (PTRACE_TRACEME, 0, 0, 0);
176 kill (getpid (), SIGSTOP);
177 fork ();
48bb3cce 178 _exit (0);
3993f6b1
DJ
179}
180
b957e937
DJ
181/* Wrapper function for waitpid which handles EINTR. */
182
183static int
184my_waitpid (int pid, int *status, int flags)
185{
186 int ret;
187 do
188 {
189 ret = waitpid (pid, status, flags);
190 }
191 while (ret == -1 && errno == EINTR);
192
193 return ret;
194}
195
196/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.
197
198 First, we try to enable fork tracing on ORIGINAL_PID. If this fails,
199 we know that the feature is not available. This may change the tracing
200 options for ORIGINAL_PID, but we'll be setting them shortly anyway.
201
202 However, if it succeeds, we don't know for sure that the feature is
203 available; old versions of PTRACE_SETOPTIONS ignored unknown options. We
3993f6b1 204 create a child process, attach to it, use PTRACE_SETOPTIONS to enable
b957e937
DJ
205 fork tracing, and let it fork. If the process exits, we assume that we
206 can't use TRACEFORK; if we get the fork notification, and we can extract
207 the new child's PID, then we assume that we can. */
3993f6b1
DJ
208
209static void
b957e937 210linux_test_for_tracefork (int original_pid)
3993f6b1
DJ
211{
212 int child_pid, ret, status;
213 long second_pid;
214
b957e937
DJ
215 linux_supports_tracefork_flag = 0;
216 linux_supports_tracevforkdone_flag = 0;
217
218 ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK);
219 if (ret != 0)
220 return;
221
3993f6b1
DJ
222 child_pid = fork ();
223 if (child_pid == -1)
e2e0b3e5 224 perror_with_name (("fork"));
3993f6b1
DJ
225
226 if (child_pid == 0)
227 linux_tracefork_child ();
228
b957e937 229 ret = my_waitpid (child_pid, &status, 0);
3993f6b1 230 if (ret == -1)
e2e0b3e5 231 perror_with_name (("waitpid"));
3993f6b1 232 else if (ret != child_pid)
8a3fe4f8 233 error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret);
3993f6b1 234 if (! WIFSTOPPED (status))
8a3fe4f8 235 error (_("linux_test_for_tracefork: waitpid: unexpected status %d."), status);
3993f6b1 236
3993f6b1
DJ
237 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
238 if (ret != 0)
239 {
b957e937
DJ
240 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
241 if (ret != 0)
242 {
8a3fe4f8 243 warning (_("linux_test_for_tracefork: failed to kill child"));
b957e937
DJ
244 return;
245 }
246
247 ret = my_waitpid (child_pid, &status, 0);
248 if (ret != child_pid)
8a3fe4f8 249 warning (_("linux_test_for_tracefork: failed to wait for killed child"));
b957e937 250 else if (!WIFSIGNALED (status))
8a3fe4f8
AC
251 warning (_("linux_test_for_tracefork: unexpected wait status 0x%x from "
252 "killed child"), status);
b957e937 253
3993f6b1
DJ
254 return;
255 }
256
9016a515
DJ
257 /* Check whether PTRACE_O_TRACEVFORKDONE is available. */
258 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
259 PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE);
260 linux_supports_tracevforkdone_flag = (ret == 0);
261
b957e937
DJ
262 ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
263 if (ret != 0)
8a3fe4f8 264 warning (_("linux_test_for_tracefork: failed to resume child"));
b957e937
DJ
265
266 ret = my_waitpid (child_pid, &status, 0);
267
3993f6b1
DJ
268 if (ret == child_pid && WIFSTOPPED (status)
269 && status >> 16 == PTRACE_EVENT_FORK)
270 {
271 second_pid = 0;
272 ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
273 if (ret == 0 && second_pid != 0)
274 {
275 int second_status;
276
277 linux_supports_tracefork_flag = 1;
b957e937
DJ
278 my_waitpid (second_pid, &second_status, 0);
279 ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
280 if (ret != 0)
8a3fe4f8 281 warning (_("linux_test_for_tracefork: failed to kill second child"));
97725dc4 282 my_waitpid (second_pid, &status, 0);
3993f6b1
DJ
283 }
284 }
b957e937 285 else
8a3fe4f8
AC
286 warning (_("linux_test_for_tracefork: unexpected result from waitpid "
287 "(%d, status 0x%x)"), ret, status);
3993f6b1 288
b957e937
DJ
289 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
290 if (ret != 0)
8a3fe4f8 291 warning (_("linux_test_for_tracefork: failed to kill child"));
b957e937 292 my_waitpid (child_pid, &status, 0);
3993f6b1
DJ
293}
294
295/* Return non-zero iff we have tracefork functionality available.
296 This function also sets linux_supports_tracefork_flag. */
297
298static int
b957e937 299linux_supports_tracefork (int pid)
3993f6b1
DJ
300{
301 if (linux_supports_tracefork_flag == -1)
b957e937 302 linux_test_for_tracefork (pid);
3993f6b1
DJ
303 return linux_supports_tracefork_flag;
304}
305
9016a515 306static int
b957e937 307linux_supports_tracevforkdone (int pid)
9016a515
DJ
308{
309 if (linux_supports_tracefork_flag == -1)
b957e937 310 linux_test_for_tracefork (pid);
9016a515
DJ
311 return linux_supports_tracevforkdone_flag;
312}
313
3993f6b1 314\f
4de4c07c
DJ
315void
316linux_enable_event_reporting (ptid_t ptid)
317{
d3587048 318 int pid = ptid_get_lwp (ptid);
4de4c07c
DJ
319 int options;
320
d3587048
DJ
321 if (pid == 0)
322 pid = ptid_get_pid (ptid);
323
b957e937 324 if (! linux_supports_tracefork (pid))
4de4c07c
DJ
325 return;
326
a2f23071
DJ
327 options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC
328 | PTRACE_O_TRACECLONE;
b957e937 329 if (linux_supports_tracevforkdone (pid))
9016a515
DJ
330 options |= PTRACE_O_TRACEVFORKDONE;
331
332 /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support
333 read-only process state. */
4de4c07c
DJ
334
335 ptrace (PTRACE_SETOPTIONS, pid, 0, options);
336}
337
6d8fd2b7
UW
338static void
339linux_child_post_attach (int pid)
4de4c07c
DJ
340{
341 linux_enable_event_reporting (pid_to_ptid (pid));
0ec9a092 342 check_for_thread_db ();
4de4c07c
DJ
343}
344
10d6c8cd 345static void
4de4c07c
DJ
346linux_child_post_startup_inferior (ptid_t ptid)
347{
348 linux_enable_event_reporting (ptid);
0ec9a092 349 check_for_thread_db ();
4de4c07c
DJ
350}
351
6d8fd2b7
UW
352static int
353linux_child_follow_fork (struct target_ops *ops, int follow_child)
3993f6b1 354{
4de4c07c
DJ
355 ptid_t last_ptid;
356 struct target_waitstatus last_status;
9016a515 357 int has_vforked;
4de4c07c
DJ
358 int parent_pid, child_pid;
359
360 get_last_target_status (&last_ptid, &last_status);
9016a515 361 has_vforked = (last_status.kind == TARGET_WAITKIND_VFORKED);
d3587048
DJ
362 parent_pid = ptid_get_lwp (last_ptid);
363 if (parent_pid == 0)
364 parent_pid = ptid_get_pid (last_ptid);
4de4c07c
DJ
365 child_pid = last_status.value.related_pid;
366
367 if (! follow_child)
368 {
369 /* We're already attached to the parent, by default. */
370
371 /* Before detaching from the child, remove all breakpoints from
372 it. (This won't actually modify the breakpoint list, but will
373 physically remove the breakpoints from the child.) */
9016a515
DJ
374 /* If we vforked this will remove the breakpoints from the parent
375 also, but they'll be reinserted below. */
4de4c07c
DJ
376 detach_breakpoints (child_pid);
377
ac264b3b
MS
378 /* Detach new forked process? */
379 if (detach_fork)
f75c00e4 380 {
ac264b3b
MS
381 if (debug_linux_nat)
382 {
383 target_terminal_ours ();
384 fprintf_filtered (gdb_stdlog,
385 "Detaching after fork from child process %d.\n",
386 child_pid);
387 }
4de4c07c 388
ac264b3b
MS
389 ptrace (PTRACE_DETACH, child_pid, 0, 0);
390 }
391 else
392 {
393 struct fork_info *fp;
394 /* Retain child fork in ptrace (stopped) state. */
395 fp = find_fork_pid (child_pid);
396 if (!fp)
397 fp = add_fork (child_pid);
398 fork_save_infrun_state (fp, 0);
399 }
9016a515
DJ
400
401 if (has_vforked)
402 {
b957e937
DJ
403 gdb_assert (linux_supports_tracefork_flag >= 0);
404 if (linux_supports_tracevforkdone (0))
9016a515
DJ
405 {
406 int status;
407
408 ptrace (PTRACE_CONT, parent_pid, 0, 0);
58aecb61 409 my_waitpid (parent_pid, &status, __WALL);
c874c7fc 410 if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
8a3fe4f8
AC
411 warning (_("Unexpected waitpid result %06x when waiting for "
412 "vfork-done"), status);
9016a515
DJ
413 }
414 else
415 {
416 /* We can't insert breakpoints until the child has
417 finished with the shared memory region. We need to
418 wait until that happens. Ideal would be to just
419 call:
420 - ptrace (PTRACE_SYSCALL, parent_pid, 0, 0);
421 - waitpid (parent_pid, &status, __WALL);
422 However, most architectures can't handle a syscall
423 being traced on the way out if it wasn't traced on
424 the way in.
425
426 We might also think to loop, continuing the child
427 until it exits or gets a SIGTRAP. One problem is
428 that the child might call ptrace with PTRACE_TRACEME.
429
430 There's no simple and reliable way to figure out when
431 the vforked child will be done with its copy of the
432 shared memory. We could step it out of the syscall,
433 two instructions, let it go, and then single-step the
434 parent once. When we have hardware single-step, this
435 would work; with software single-step it could still
436 be made to work but we'd have to be able to insert
437 single-step breakpoints in the child, and we'd have
438 to insert -just- the single-step breakpoint in the
439 parent. Very awkward.
440
441 In the end, the best we can do is to make sure it
442 runs for a little while. Hopefully it will be out of
443 range of any breakpoints we reinsert. Usually this
444 is only the single-step breakpoint at vfork's return
445 point. */
446
447 usleep (10000);
448 }
449
450 /* Since we vforked, breakpoints were removed in the parent
451 too. Put them back. */
452 reattach_breakpoints (parent_pid);
453 }
4de4c07c 454 }
3993f6b1 455 else
4de4c07c
DJ
456 {
457 char child_pid_spelling[40];
458
459 /* Needed to keep the breakpoint lists in sync. */
9016a515
DJ
460 if (! has_vforked)
461 detach_breakpoints (child_pid);
4de4c07c
DJ
462
463 /* Before detaching from the parent, remove all breakpoints from it. */
464 remove_breakpoints ();
465
f75c00e4
DJ
466 if (debug_linux_nat)
467 {
468 target_terminal_ours ();
ac264b3b
MS
469 fprintf_filtered (gdb_stdlog,
470 "Attaching after fork to child process %d.\n",
471 child_pid);
f75c00e4 472 }
4de4c07c 473
9016a515
DJ
474 /* If we're vforking, we may want to hold on to the parent until
475 the child exits or execs. At exec time we can remove the old
476 breakpoints from the parent and detach it; at exit time we
477 could do the same (or even, sneakily, resume debugging it - the
478 child's exec has failed, or something similar).
479
480 This doesn't clean up "properly", because we can't call
481 target_detach, but that's OK; if the current target is "child",
482 then it doesn't need any further cleanups, and lin_lwp will
483 generally not encounter vfork (vfork is defined to fork
484 in libpthread.so).
485
486 The holding part is very easy if we have VFORKDONE events;
487 but keeping track of both processes is beyond GDB at the
488 moment. So we don't expose the parent to the rest of GDB.
489 Instead we quietly hold onto it until such time as we can
490 safely resume it. */
491
492 if (has_vforked)
493 linux_parent_pid = parent_pid;
ac264b3b
MS
494 else if (!detach_fork)
495 {
496 struct fork_info *fp;
497 /* Retain parent fork in ptrace (stopped) state. */
498 fp = find_fork_pid (parent_pid);
499 if (!fp)
500 fp = add_fork (parent_pid);
501 fork_save_infrun_state (fp, 0);
502 }
9016a515 503 else
ac264b3b
MS
504 {
505 target_detach (NULL, 0);
506 }
4de4c07c
DJ
507
508 inferior_ptid = pid_to_ptid (child_pid);
ee057212
DJ
509
510 /* Reinstall ourselves, since we might have been removed in
511 target_detach (which does other necessary cleanup). */
ac264b3b 512
ee057212 513 push_target (ops);
4de4c07c
DJ
514
515 /* Reset breakpoints in the child as appropriate. */
516 follow_inferior_reset_breakpoints ();
517 }
518
519 return 0;
520}
521
4de4c07c 522\f
6d8fd2b7
UW
523static void
524linux_child_insert_fork_catchpoint (int pid)
4de4c07c 525{
b957e937 526 if (! linux_supports_tracefork (pid))
8a3fe4f8 527 error (_("Your system does not support fork catchpoints."));
3993f6b1
DJ
528}
529
6d8fd2b7
UW
530static void
531linux_child_insert_vfork_catchpoint (int pid)
3993f6b1 532{
b957e937 533 if (!linux_supports_tracefork (pid))
8a3fe4f8 534 error (_("Your system does not support vfork catchpoints."));
3993f6b1
DJ
535}
536
6d8fd2b7
UW
537static void
538linux_child_insert_exec_catchpoint (int pid)
3993f6b1 539{
b957e937 540 if (!linux_supports_tracefork (pid))
8a3fe4f8 541 error (_("Your system does not support exec catchpoints."));
3993f6b1
DJ
542}
543
d6b0e80f
AC
544/* On GNU/Linux there are no real LWP's. The closest thing to LWP's
545 are processes sharing the same VM space. A multi-threaded process
546 is basically a group of such processes. However, such a grouping
547 is almost entirely a user-space issue; the kernel doesn't enforce
548 such a grouping at all (this might change in the future). In
549 general, we'll rely on the threads library (i.e. the GNU/Linux
550 Threads library) to provide such a grouping.
551
552 It is perfectly well possible to write a multi-threaded application
553 without the assistance of a threads library, by using the clone
554 system call directly. This module should be able to give some
555 rudimentary support for debugging such applications if developers
556 specify the CLONE_PTRACE flag in the clone system call, and are
557 using the Linux kernel 2.4 or above.
558
559 Note that there are some peculiarities in GNU/Linux that affect
560 this code:
561
562 - In general one should specify the __WCLONE flag to waitpid in
563 order to make it report events for any of the cloned processes
564 (and leave it out for the initial process). However, if a cloned
565 process has exited the exit status is only reported if the
566 __WCLONE flag is absent. Linux kernel 2.4 has a __WALL flag, but
567 we cannot use it since GDB must work on older systems too.
568
569 - When a traced, cloned process exits and is waited for by the
570 debugger, the kernel reassigns it to the original parent and
571 keeps it around as a "zombie". Somehow, the GNU/Linux Threads
572 library doesn't notice this, which leads to the "zombie problem":
573 When debugged a multi-threaded process that spawns a lot of
574 threads will run out of processes, even if the threads exit,
575 because the "zombies" stay around. */
576
577/* List of known LWPs. */
578static struct lwp_info *lwp_list;
579
580/* Number of LWPs in the list. */
581static int num_lwps;
d6b0e80f
AC
582\f
583
584#define GET_LWP(ptid) ptid_get_lwp (ptid)
585#define GET_PID(ptid) ptid_get_pid (ptid)
586#define is_lwp(ptid) (GET_LWP (ptid) != 0)
587#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
588
589/* If the last reported event was a SIGTRAP, this variable is set to
590 the process id of the LWP/thread that got it. */
591ptid_t trap_ptid;
592\f
593
d6b0e80f
AC
594/* Since we cannot wait (in linux_nat_wait) for the initial process and
595 any cloned processes with a single call to waitpid, we have to use
596 the WNOHANG flag and call waitpid in a loop. To optimize
597 things a bit we use `sigsuspend' to wake us up when a process has
598 something to report (it will send us a SIGCHLD if it has). To make
599 this work we have to juggle with the signal mask. We save the
600 original signal mask such that we can restore it before creating a
601 new process in order to avoid blocking certain signals in the
602 inferior. We then block SIGCHLD during the waitpid/sigsuspend
603 loop. */
604
605/* Original signal mask. */
606static sigset_t normal_mask;
607
608/* Signal mask for use with sigsuspend in linux_nat_wait, initialized in
609 _initialize_linux_nat. */
610static sigset_t suspend_mask;
611
612/* Signals to block to make that sigsuspend work. */
613static sigset_t blocked_mask;
614\f
615
616/* Prototypes for local functions. */
617static int stop_wait_callback (struct lwp_info *lp, void *data);
618static int linux_nat_thread_alive (ptid_t ptid);
6d8fd2b7 619static char *linux_child_pid_to_exec_file (int pid);
d6b0e80f
AC
620\f
621/* Convert wait status STATUS to a string. Used for printing debug
622 messages only. */
623
624static char *
625status_to_str (int status)
626{
627 static char buf[64];
628
629 if (WIFSTOPPED (status))
630 snprintf (buf, sizeof (buf), "%s (stopped)",
631 strsignal (WSTOPSIG (status)));
632 else if (WIFSIGNALED (status))
633 snprintf (buf, sizeof (buf), "%s (terminated)",
634 strsignal (WSTOPSIG (status)));
635 else
636 snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
637
638 return buf;
639}
640
641/* Initialize the list of LWPs. Note that this module, contrary to
642 what GDB's generic threads layer does for its thread list,
643 re-initializes the LWP lists whenever we mourn or detach (which
644 doesn't involve mourning) the inferior. */
645
646static void
647init_lwp_list (void)
648{
649 struct lwp_info *lp, *lpnext;
650
651 for (lp = lwp_list; lp; lp = lpnext)
652 {
653 lpnext = lp->next;
654 xfree (lp);
655 }
656
657 lwp_list = NULL;
658 num_lwps = 0;
d6b0e80f
AC
659}
660
f973ed9c
DJ
661/* Add the LWP specified by PID to the list. Return a pointer to the
662 structure describing the new LWP. */
d6b0e80f
AC
663
664static struct lwp_info *
665add_lwp (ptid_t ptid)
666{
667 struct lwp_info *lp;
668
669 gdb_assert (is_lwp (ptid));
670
671 lp = (struct lwp_info *) xmalloc (sizeof (struct lwp_info));
672
673 memset (lp, 0, sizeof (struct lwp_info));
674
675 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
676
677 lp->ptid = ptid;
678
679 lp->next = lwp_list;
680 lwp_list = lp;
f973ed9c 681 ++num_lwps;
d6b0e80f
AC
682
683 return lp;
684}
685
686/* Remove the LWP specified by PID from the list. */
687
688static void
689delete_lwp (ptid_t ptid)
690{
691 struct lwp_info *lp, *lpprev;
692
693 lpprev = NULL;
694
695 for (lp = lwp_list; lp; lpprev = lp, lp = lp->next)
696 if (ptid_equal (lp->ptid, ptid))
697 break;
698
699 if (!lp)
700 return;
701
d6b0e80f
AC
702 num_lwps--;
703
704 if (lpprev)
705 lpprev->next = lp->next;
706 else
707 lwp_list = lp->next;
708
709 xfree (lp);
710}
711
712/* Return a pointer to the structure describing the LWP corresponding
713 to PID. If no corresponding LWP could be found, return NULL. */
714
715static struct lwp_info *
716find_lwp_pid (ptid_t ptid)
717{
718 struct lwp_info *lp;
719 int lwp;
720
721 if (is_lwp (ptid))
722 lwp = GET_LWP (ptid);
723 else
724 lwp = GET_PID (ptid);
725
726 for (lp = lwp_list; lp; lp = lp->next)
727 if (lwp == GET_LWP (lp->ptid))
728 return lp;
729
730 return NULL;
731}
732
733/* Call CALLBACK with its second argument set to DATA for every LWP in
734 the list. If CALLBACK returns 1 for a particular LWP, return a
735 pointer to the structure describing that LWP immediately.
736 Otherwise return NULL. */
737
738struct lwp_info *
739iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data)
740{
741 struct lwp_info *lp, *lpnext;
742
743 for (lp = lwp_list; lp; lp = lpnext)
744 {
745 lpnext = lp->next;
746 if ((*callback) (lp, data))
747 return lp;
748 }
749
750 return NULL;
751}
752
f973ed9c
DJ
753/* Update our internal state when changing from one fork (checkpoint,
754 et cetera) to another indicated by NEW_PTID. We can only switch
755 single-threaded applications, so we only create one new LWP, and
756 the previous list is discarded. */
757
758void
759linux_nat_switch_fork (ptid_t new_ptid)
760{
761 struct lwp_info *lp;
762
763 init_lwp_list ();
764 lp = add_lwp (new_ptid);
765 lp->stopped = 1;
766}
767
e26af52f
DJ
768/* Record a PTID for later deletion. */
769
770struct saved_ptids
771{
772 ptid_t ptid;
773 struct saved_ptids *next;
774};
775static struct saved_ptids *threads_to_delete;
776
777static void
778record_dead_thread (ptid_t ptid)
779{
780 struct saved_ptids *p = xmalloc (sizeof (struct saved_ptids));
781 p->ptid = ptid;
782 p->next = threads_to_delete;
783 threads_to_delete = p;
784}
785
786/* Delete any dead threads which are not the current thread. */
787
788static void
789prune_lwps (void)
790{
791 struct saved_ptids **p = &threads_to_delete;
792
793 while (*p)
794 if (! ptid_equal ((*p)->ptid, inferior_ptid))
795 {
796 struct saved_ptids *tmp = *p;
797 delete_thread (tmp->ptid);
798 *p = tmp->next;
799 xfree (tmp);
800 }
801 else
802 p = &(*p)->next;
803}
804
805/* Callback for iterate_over_threads that finds a thread corresponding
806 to the given LWP. */
807
808static int
809find_thread_from_lwp (struct thread_info *thr, void *dummy)
810{
811 ptid_t *ptid_p = dummy;
812
813 if (GET_LWP (thr->ptid) && GET_LWP (thr->ptid) == GET_LWP (*ptid_p))
814 return 1;
815 else
816 return 0;
817}
818
819/* Handle the exit of a single thread LP. */
820
821static void
822exit_lwp (struct lwp_info *lp)
823{
824 if (in_thread_list (lp->ptid))
825 {
826 /* Core GDB cannot deal with us deleting the current thread. */
827 if (!ptid_equal (lp->ptid, inferior_ptid))
828 delete_thread (lp->ptid);
829 else
830 record_dead_thread (lp->ptid);
831 printf_unfiltered (_("[%s exited]\n"),
832 target_pid_to_str (lp->ptid));
833 }
834 else
835 {
836 /* Even if LP->PTID is not in the global GDB thread list, the
837 LWP may be - with an additional thread ID. We don't need
838 to print anything in this case; thread_db is in use and
839 already took care of that. But it didn't delete the thread
840 in order to handle zombies correctly. */
841
842 struct thread_info *thr;
843
844 thr = iterate_over_threads (find_thread_from_lwp, &lp->ptid);
6fc19103
UW
845 if (thr)
846 {
847 if (!ptid_equal (thr->ptid, inferior_ptid))
848 delete_thread (thr->ptid);
849 else
850 record_dead_thread (thr->ptid);
851 }
e26af52f
DJ
852 }
853
854 delete_lwp (lp->ptid);
855}
856
d6b0e80f
AC
857/* Attach to the LWP specified by PID. If VERBOSE is non-zero, print
858 a message telling the user that a new LWP has been added to the
9ee57c33
DJ
859 process. Return 0 if successful or -1 if the new LWP could not
860 be attached. */
d6b0e80f 861
9ee57c33 862int
d6b0e80f
AC
863lin_lwp_attach_lwp (ptid_t ptid, int verbose)
864{
9ee57c33 865 struct lwp_info *lp;
d6b0e80f
AC
866
867 gdb_assert (is_lwp (ptid));
868
869 /* Make sure SIGCHLD is blocked. We don't want SIGCHLD events
870 to interrupt either the ptrace() or waitpid() calls below. */
871 if (!sigismember (&blocked_mask, SIGCHLD))
872 {
873 sigaddset (&blocked_mask, SIGCHLD);
874 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
875 }
876
9ee57c33 877 lp = find_lwp_pid (ptid);
d6b0e80f
AC
878
879 /* We assume that we're already attached to any LWP that has an id
880 equal to the overall process id, and to any LWP that is already
881 in our list of LWPs. If we're not seeing exit events from threads
882 and we've had PID wraparound since we last tried to stop all threads,
883 this assumption might be wrong; fortunately, this is very unlikely
884 to happen. */
9ee57c33 885 if (GET_LWP (ptid) != GET_PID (ptid) && lp == NULL)
d6b0e80f
AC
886 {
887 pid_t pid;
888 int status;
889
890 if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0)
9ee57c33
DJ
891 {
892 /* If we fail to attach to the thread, issue a warning,
893 but continue. One way this can happen is if thread
894 creation is interrupted; as of Linux 2.6.19, a kernel
895 bug may place threads in the thread list and then fail
896 to create them. */
897 warning (_("Can't attach %s: %s"), target_pid_to_str (ptid),
898 safe_strerror (errno));
899 return -1;
900 }
901
902 if (lp == NULL)
903 lp = add_lwp (ptid);
d6b0e80f
AC
904
905 if (debug_linux_nat)
906 fprintf_unfiltered (gdb_stdlog,
907 "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
908 target_pid_to_str (ptid));
909
58aecb61 910 pid = my_waitpid (GET_LWP (ptid), &status, 0);
d6b0e80f
AC
911 if (pid == -1 && errno == ECHILD)
912 {
913 /* Try again with __WCLONE to check cloned processes. */
58aecb61 914 pid = my_waitpid (GET_LWP (ptid), &status, __WCLONE);
d6b0e80f
AC
915 lp->cloned = 1;
916 }
917
918 gdb_assert (pid == GET_LWP (ptid)
919 && WIFSTOPPED (status) && WSTOPSIG (status));
920
0ec9a092 921 target_post_attach (pid);
d6b0e80f
AC
922
923 lp->stopped = 1;
924
925 if (debug_linux_nat)
926 {
927 fprintf_unfiltered (gdb_stdlog,
928 "LLAL: waitpid %s received %s\n",
929 target_pid_to_str (ptid),
930 status_to_str (status));
931 }
932 }
933 else
934 {
935 /* We assume that the LWP representing the original process is
936 already stopped. Mark it as stopped in the data structure
155bd5d1
AC
937 that the GNU/linux ptrace layer uses to keep track of
938 threads. Note that this won't have already been done since
939 the main thread will have, we assume, been stopped by an
940 attach from a different layer. */
9ee57c33
DJ
941 if (lp == NULL)
942 lp = add_lwp (ptid);
d6b0e80f
AC
943 lp->stopped = 1;
944 }
9ee57c33
DJ
945
946 if (verbose)
947 printf_filtered (_("[New %s]\n"), target_pid_to_str (ptid));
948
949 return 0;
d6b0e80f
AC
950}
951
952static void
953linux_nat_attach (char *args, int from_tty)
954{
955 struct lwp_info *lp;
956 pid_t pid;
957 int status;
958
959 /* FIXME: We should probably accept a list of process id's, and
960 attach all of them. */
10d6c8cd 961 linux_ops->to_attach (args, from_tty);
d6b0e80f
AC
962
963 /* Add the initial process as the first LWP to the list. */
f973ed9c
DJ
964 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
965 lp = add_lwp (inferior_ptid);
d6b0e80f
AC
966
967 /* Make sure the initial process is stopped. The user-level threads
968 layer might want to poke around in the inferior, and that won't
969 work if things haven't stabilized yet. */
58aecb61 970 pid = my_waitpid (GET_PID (inferior_ptid), &status, 0);
d6b0e80f
AC
971 if (pid == -1 && errno == ECHILD)
972 {
8a3fe4f8 973 warning (_("%s is a cloned process"), target_pid_to_str (inferior_ptid));
d6b0e80f
AC
974
975 /* Try again with __WCLONE to check cloned processes. */
58aecb61 976 pid = my_waitpid (GET_PID (inferior_ptid), &status, __WCLONE);
d6b0e80f
AC
977 lp->cloned = 1;
978 }
979
980 gdb_assert (pid == GET_PID (inferior_ptid)
981 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP);
982
983 lp->stopped = 1;
984
985 /* Fake the SIGSTOP that core GDB expects. */
986 lp->status = W_STOPCODE (SIGSTOP);
987 lp->resumed = 1;
988 if (debug_linux_nat)
989 {
990 fprintf_unfiltered (gdb_stdlog,
991 "LLA: waitpid %ld, faking SIGSTOP\n", (long) pid);
992 }
993}
994
995static int
996detach_callback (struct lwp_info *lp, void *data)
997{
998 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
999
1000 if (debug_linux_nat && lp->status)
1001 fprintf_unfiltered (gdb_stdlog, "DC: Pending %s for %s on detach.\n",
1002 strsignal (WSTOPSIG (lp->status)),
1003 target_pid_to_str (lp->ptid));
1004
1005 while (lp->signalled && lp->stopped)
1006 {
1007 errno = 0;
1008 if (ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
1009 WSTOPSIG (lp->status)) < 0)
8a3fe4f8 1010 error (_("Can't continue %s: %s"), target_pid_to_str (lp->ptid),
d6b0e80f
AC
1011 safe_strerror (errno));
1012
1013 if (debug_linux_nat)
1014 fprintf_unfiltered (gdb_stdlog,
1015 "DC: PTRACE_CONTINUE (%s, 0, %s) (OK)\n",
1016 target_pid_to_str (lp->ptid),
1017 status_to_str (lp->status));
1018
1019 lp->stopped = 0;
1020 lp->signalled = 0;
1021 lp->status = 0;
1022 /* FIXME drow/2003-08-26: There was a call to stop_wait_callback
1023 here. But since lp->signalled was cleared above,
1024 stop_wait_callback didn't do anything; the process was left
1025 running. Shouldn't we be waiting for it to stop?
1026 I've removed the call, since stop_wait_callback now does do
1027 something when called with lp->signalled == 0. */
1028
1029 gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status));
1030 }
1031
1032 /* We don't actually detach from the LWP that has an id equal to the
1033 overall process id just yet. */
1034 if (GET_LWP (lp->ptid) != GET_PID (lp->ptid))
1035 {
1036 errno = 0;
1037 if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
1038 WSTOPSIG (lp->status)) < 0)
8a3fe4f8 1039 error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid),
d6b0e80f
AC
1040 safe_strerror (errno));
1041
1042 if (debug_linux_nat)
1043 fprintf_unfiltered (gdb_stdlog,
1044 "PTRACE_DETACH (%s, %s, 0) (OK)\n",
1045 target_pid_to_str (lp->ptid),
1046 strsignal (WSTOPSIG (lp->status)));
1047
1048 delete_lwp (lp->ptid);
1049 }
1050
1051 return 0;
1052}
1053
1054static void
1055linux_nat_detach (char *args, int from_tty)
1056{
1057 iterate_over_lwps (detach_callback, NULL);
1058
1059 /* Only the initial process should be left right now. */
1060 gdb_assert (num_lwps == 1);
1061
1062 trap_ptid = null_ptid;
1063
1064 /* Destroy LWP info; it's no longer valid. */
1065 init_lwp_list ();
1066
1067 /* Restore the original signal mask. */
1068 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
1069 sigemptyset (&blocked_mask);
1070
1071 inferior_ptid = pid_to_ptid (GET_PID (inferior_ptid));
10d6c8cd 1072 linux_ops->to_detach (args, from_tty);
d6b0e80f
AC
1073}
1074
1075/* Resume LP. */
1076
1077static int
1078resume_callback (struct lwp_info *lp, void *data)
1079{
1080 if (lp->stopped && lp->status == 0)
1081 {
1082 struct thread_info *tp;
1083
10d6c8cd
DJ
1084 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1085 0, TARGET_SIGNAL_0);
d6b0e80f
AC
1086 if (debug_linux_nat)
1087 fprintf_unfiltered (gdb_stdlog,
1088 "RC: PTRACE_CONT %s, 0, 0 (resume sibling)\n",
1089 target_pid_to_str (lp->ptid));
1090 lp->stopped = 0;
1091 lp->step = 0;
1092 }
1093
1094 return 0;
1095}
1096
1097static int
1098resume_clear_callback (struct lwp_info *lp, void *data)
1099{
1100 lp->resumed = 0;
1101 return 0;
1102}
1103
1104static int
1105resume_set_callback (struct lwp_info *lp, void *data)
1106{
1107 lp->resumed = 1;
1108 return 0;
1109}
1110
1111static void
1112linux_nat_resume (ptid_t ptid, int step, enum target_signal signo)
1113{
1114 struct lwp_info *lp;
1115 int resume_all;
1116
76f50ad1
DJ
1117 if (debug_linux_nat)
1118 fprintf_unfiltered (gdb_stdlog,
1119 "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
1120 step ? "step" : "resume",
1121 target_pid_to_str (ptid),
1122 signo ? strsignal (signo) : "0",
1123 target_pid_to_str (inferior_ptid));
1124
e26af52f
DJ
1125 prune_lwps ();
1126
d6b0e80f
AC
1127 /* A specific PTID means `step only this process id'. */
1128 resume_all = (PIDGET (ptid) == -1);
1129
1130 if (resume_all)
1131 iterate_over_lwps (resume_set_callback, NULL);
1132 else
1133 iterate_over_lwps (resume_clear_callback, NULL);
1134
1135 /* If PID is -1, it's the current inferior that should be
1136 handled specially. */
1137 if (PIDGET (ptid) == -1)
1138 ptid = inferior_ptid;
1139
1140 lp = find_lwp_pid (ptid);
1141 if (lp)
1142 {
1143 ptid = pid_to_ptid (GET_LWP (lp->ptid));
1144
1145 /* Remember if we're stepping. */
1146 lp->step = step;
1147
1148 /* Mark this LWP as resumed. */
1149 lp->resumed = 1;
1150
1151 /* If we have a pending wait status for this thread, there is no
76f50ad1
DJ
1152 point in resuming the process. But first make sure that
1153 linux_nat_wait won't preemptively handle the event - we
1154 should never take this short-circuit if we are going to
1155 leave LP running, since we have skipped resuming all the
1156 other threads. This bit of code needs to be synchronized
1157 with linux_nat_wait. */
1158
1159 if (lp->status && WIFSTOPPED (lp->status))
1160 {
1161 int saved_signo = target_signal_from_host (WSTOPSIG (lp->status));
1162
1163 if (signal_stop_state (saved_signo) == 0
1164 && signal_print_state (saved_signo) == 0
1165 && signal_pass_state (saved_signo) == 1)
1166 {
1167 if (debug_linux_nat)
1168 fprintf_unfiltered (gdb_stdlog,
1169 "LLR: Not short circuiting for ignored "
1170 "status 0x%x\n", lp->status);
1171
1172 /* FIXME: What should we do if we are supposed to continue
1173 this thread with a signal? */
1174 gdb_assert (signo == TARGET_SIGNAL_0);
1175 signo = saved_signo;
1176 lp->status = 0;
1177 }
1178 }
1179
d6b0e80f
AC
1180 if (lp->status)
1181 {
1182 /* FIXME: What should we do if we are supposed to continue
1183 this thread with a signal? */
1184 gdb_assert (signo == TARGET_SIGNAL_0);
76f50ad1
DJ
1185
1186 if (debug_linux_nat)
1187 fprintf_unfiltered (gdb_stdlog,
1188 "LLR: Short circuiting for status 0x%x\n",
1189 lp->status);
1190
d6b0e80f
AC
1191 return;
1192 }
1193
1194 /* Mark LWP as not stopped to prevent it from being continued by
1195 resume_callback. */
1196 lp->stopped = 0;
1197 }
1198
1199 if (resume_all)
1200 iterate_over_lwps (resume_callback, NULL);
1201
10d6c8cd 1202 linux_ops->to_resume (ptid, step, signo);
d6b0e80f
AC
1203 if (debug_linux_nat)
1204 fprintf_unfiltered (gdb_stdlog,
1205 "LLR: %s %s, %s (resume event thread)\n",
1206 step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1207 target_pid_to_str (ptid),
1208 signo ? strsignal (signo) : "0");
1209}
1210
1211/* Issue kill to specified lwp. */
1212
1213static int tkill_failed;
1214
1215static int
1216kill_lwp (int lwpid, int signo)
1217{
1218 errno = 0;
1219
1220/* Use tkill, if possible, in case we are using nptl threads. If tkill
1221 fails, then we are not using nptl threads and we should be using kill. */
1222
1223#ifdef HAVE_TKILL_SYSCALL
1224 if (!tkill_failed)
1225 {
1226 int ret = syscall (__NR_tkill, lwpid, signo);
1227 if (errno != ENOSYS)
1228 return ret;
1229 errno = 0;
1230 tkill_failed = 1;
1231 }
1232#endif
1233
1234 return kill (lwpid, signo);
1235}
1236
3d799a95
DJ
1237/* Handle a GNU/Linux extended wait response. If we see a clone
1238 event, we need to add the new LWP to our list (and not report the
1239 trap to higher layers). This function returns non-zero if the
1240 event should be ignored and we should wait again. If STOPPING is
1241 true, the new LWP remains stopped, otherwise it is continued. */
d6b0e80f
AC
1242
1243static int
3d799a95
DJ
1244linux_handle_extended_wait (struct lwp_info *lp, int status,
1245 int stopping)
d6b0e80f 1246{
3d799a95
DJ
1247 int pid = GET_LWP (lp->ptid);
1248 struct target_waitstatus *ourstatus = &lp->waitstatus;
1249 struct lwp_info *new_lp = NULL;
1250 int event = status >> 16;
d6b0e80f 1251
3d799a95
DJ
1252 if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK
1253 || event == PTRACE_EVENT_CLONE)
d6b0e80f 1254 {
3d799a95
DJ
1255 unsigned long new_pid;
1256 int ret;
1257
1258 ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid);
6fc19103 1259
3d799a95
DJ
1260 /* If we haven't already seen the new PID stop, wait for it now. */
1261 if (! pull_pid_from_list (&stopped_pids, new_pid, &status))
1262 {
1263 /* The new child has a pending SIGSTOP. We can't affect it until it
1264 hits the SIGSTOP, but we're already attached. */
1265 ret = my_waitpid (new_pid, &status,
1266 (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
1267 if (ret == -1)
1268 perror_with_name (_("waiting for new child"));
1269 else if (ret != new_pid)
1270 internal_error (__FILE__, __LINE__,
1271 _("wait returned unexpected PID %d"), ret);
1272 else if (!WIFSTOPPED (status))
1273 internal_error (__FILE__, __LINE__,
1274 _("wait returned unexpected status 0x%x"), status);
1275 }
1276
1277 ourstatus->value.related_pid = new_pid;
1278
1279 if (event == PTRACE_EVENT_FORK)
1280 ourstatus->kind = TARGET_WAITKIND_FORKED;
1281 else if (event == PTRACE_EVENT_VFORK)
1282 ourstatus->kind = TARGET_WAITKIND_VFORKED;
6fc19103 1283 else
3d799a95
DJ
1284 {
1285 ourstatus->kind = TARGET_WAITKIND_IGNORE;
1286 new_lp = add_lwp (BUILD_LWP (new_pid, GET_PID (inferior_ptid)));
1287 new_lp->cloned = 1;
d6b0e80f 1288
3d799a95
DJ
1289 if (WSTOPSIG (status) != SIGSTOP)
1290 {
1291 /* This can happen if someone starts sending signals to
1292 the new thread before it gets a chance to run, which
1293 have a lower number than SIGSTOP (e.g. SIGUSR1).
1294 This is an unlikely case, and harder to handle for
1295 fork / vfork than for clone, so we do not try - but
1296 we handle it for clone events here. We'll send
1297 the other signal on to the thread below. */
1298
1299 new_lp->signalled = 1;
1300 }
1301 else
1302 status = 0;
d6b0e80f 1303
3d799a95
DJ
1304 if (stopping)
1305 new_lp->stopped = 1;
1306 else
1307 {
1308 new_lp->resumed = 1;
1309 ptrace (PTRACE_CONT, lp->waitstatus.value.related_pid, 0,
1310 status ? WSTOPSIG (status) : 0);
1311 }
d6b0e80f 1312
3d799a95
DJ
1313 if (debug_linux_nat)
1314 fprintf_unfiltered (gdb_stdlog,
1315 "LHEW: Got clone event from LWP %ld, resuming\n",
1316 GET_LWP (lp->ptid));
1317 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1318
1319 return 1;
1320 }
1321
1322 return 0;
d6b0e80f
AC
1323 }
1324
3d799a95
DJ
1325 if (event == PTRACE_EVENT_EXEC)
1326 {
1327 ourstatus->kind = TARGET_WAITKIND_EXECD;
1328 ourstatus->value.execd_pathname
6d8fd2b7 1329 = xstrdup (linux_child_pid_to_exec_file (pid));
3d799a95
DJ
1330
1331 if (linux_parent_pid)
1332 {
1333 detach_breakpoints (linux_parent_pid);
1334 ptrace (PTRACE_DETACH, linux_parent_pid, 0, 0);
1335
1336 linux_parent_pid = 0;
1337 }
1338
1339 return 0;
1340 }
1341
1342 internal_error (__FILE__, __LINE__,
1343 _("unknown ptrace event %d"), event);
d6b0e80f
AC
1344}
1345
1346/* Wait for LP to stop. Returns the wait status, or 0 if the LWP has
1347 exited. */
1348
1349static int
1350wait_lwp (struct lwp_info *lp)
1351{
1352 pid_t pid;
1353 int status;
1354 int thread_dead = 0;
1355
1356 gdb_assert (!lp->stopped);
1357 gdb_assert (lp->status == 0);
1358
58aecb61 1359 pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
d6b0e80f
AC
1360 if (pid == -1 && errno == ECHILD)
1361 {
58aecb61 1362 pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
d6b0e80f
AC
1363 if (pid == -1 && errno == ECHILD)
1364 {
1365 /* The thread has previously exited. We need to delete it
1366 now because, for some vendor 2.4 kernels with NPTL
1367 support backported, there won't be an exit event unless
1368 it is the main thread. 2.6 kernels will report an exit
1369 event for each thread that exits, as expected. */
1370 thread_dead = 1;
1371 if (debug_linux_nat)
1372 fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n",
1373 target_pid_to_str (lp->ptid));
1374 }
1375 }
1376
1377 if (!thread_dead)
1378 {
1379 gdb_assert (pid == GET_LWP (lp->ptid));
1380
1381 if (debug_linux_nat)
1382 {
1383 fprintf_unfiltered (gdb_stdlog,
1384 "WL: waitpid %s received %s\n",
1385 target_pid_to_str (lp->ptid),
1386 status_to_str (status));
1387 }
1388 }
1389
1390 /* Check if the thread has exited. */
1391 if (WIFEXITED (status) || WIFSIGNALED (status))
1392 {
1393 thread_dead = 1;
1394 if (debug_linux_nat)
1395 fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n",
1396 target_pid_to_str (lp->ptid));
1397 }
1398
1399 if (thread_dead)
1400 {
e26af52f 1401 exit_lwp (lp);
d6b0e80f
AC
1402 return 0;
1403 }
1404
1405 gdb_assert (WIFSTOPPED (status));
1406
1407 /* Handle GNU/Linux's extended waitstatus for trace events. */
1408 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1409 {
1410 if (debug_linux_nat)
1411 fprintf_unfiltered (gdb_stdlog,
1412 "WL: Handling extended status 0x%06x\n",
1413 status);
3d799a95 1414 if (linux_handle_extended_wait (lp, status, 1))
d6b0e80f
AC
1415 return wait_lwp (lp);
1416 }
1417
1418 return status;
1419}
1420
1421/* Send a SIGSTOP to LP. */
1422
1423static int
1424stop_callback (struct lwp_info *lp, void *data)
1425{
1426 if (!lp->stopped && !lp->signalled)
1427 {
1428 int ret;
1429
1430 if (debug_linux_nat)
1431 {
1432 fprintf_unfiltered (gdb_stdlog,
1433 "SC: kill %s **<SIGSTOP>**\n",
1434 target_pid_to_str (lp->ptid));
1435 }
1436 errno = 0;
1437 ret = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
1438 if (debug_linux_nat)
1439 {
1440 fprintf_unfiltered (gdb_stdlog,
1441 "SC: lwp kill %d %s\n",
1442 ret,
1443 errno ? safe_strerror (errno) : "ERRNO-OK");
1444 }
1445
1446 lp->signalled = 1;
1447 gdb_assert (lp->status == 0);
1448 }
1449
1450 return 0;
1451}
1452
1453/* Wait until LP is stopped. If DATA is non-null it is interpreted as
1454 a pointer to a set of signals to be flushed immediately. */
1455
1456static int
1457stop_wait_callback (struct lwp_info *lp, void *data)
1458{
1459 sigset_t *flush_mask = data;
1460
1461 if (!lp->stopped)
1462 {
1463 int status;
1464
1465 status = wait_lwp (lp);
1466 if (status == 0)
1467 return 0;
1468
1469 /* Ignore any signals in FLUSH_MASK. */
1470 if (flush_mask && sigismember (flush_mask, WSTOPSIG (status)))
1471 {
1472 if (!lp->signalled)
1473 {
1474 lp->stopped = 1;
1475 return 0;
1476 }
1477
1478 errno = 0;
1479 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1480 if (debug_linux_nat)
1481 fprintf_unfiltered (gdb_stdlog,
1482 "PTRACE_CONT %s, 0, 0 (%s)\n",
1483 target_pid_to_str (lp->ptid),
1484 errno ? safe_strerror (errno) : "OK");
1485
1486 return stop_wait_callback (lp, flush_mask);
1487 }
1488
1489 if (WSTOPSIG (status) != SIGSTOP)
1490 {
1491 if (WSTOPSIG (status) == SIGTRAP)
1492 {
1493 /* If a LWP other than the LWP that we're reporting an
1494 event for has hit a GDB breakpoint (as opposed to
1495 some random trap signal), then just arrange for it to
1496 hit it again later. We don't keep the SIGTRAP status
1497 and don't forward the SIGTRAP signal to the LWP. We
1498 will handle the current event, eventually we will
1499 resume all LWPs, and this one will get its breakpoint
1500 trap again.
1501
1502 If we do not do this, then we run the risk that the
1503 user will delete or disable the breakpoint, but the
1504 thread will have already tripped on it. */
1505
1506 /* Now resume this LWP and get the SIGSTOP event. */
1507 errno = 0;
1508 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1509 if (debug_linux_nat)
1510 {
1511 fprintf_unfiltered (gdb_stdlog,
1512 "PTRACE_CONT %s, 0, 0 (%s)\n",
1513 target_pid_to_str (lp->ptid),
1514 errno ? safe_strerror (errno) : "OK");
1515
1516 fprintf_unfiltered (gdb_stdlog,
1517 "SWC: Candidate SIGTRAP event in %s\n",
1518 target_pid_to_str (lp->ptid));
1519 }
1520 /* Hold the SIGTRAP for handling by linux_nat_wait. */
1521 stop_wait_callback (lp, data);
1522 /* If there's another event, throw it back into the queue. */
1523 if (lp->status)
1524 {
1525 if (debug_linux_nat)
1526 {
1527 fprintf_unfiltered (gdb_stdlog,
1528 "SWC: kill %s, %s\n",
1529 target_pid_to_str (lp->ptid),
1530 status_to_str ((int) status));
1531 }
1532 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
1533 }
1534 /* Save the sigtrap event. */
1535 lp->status = status;
1536 return 0;
1537 }
1538 else
1539 {
1540 /* The thread was stopped with a signal other than
1541 SIGSTOP, and didn't accidentally trip a breakpoint. */
1542
1543 if (debug_linux_nat)
1544 {
1545 fprintf_unfiltered (gdb_stdlog,
1546 "SWC: Pending event %s in %s\n",
1547 status_to_str ((int) status),
1548 target_pid_to_str (lp->ptid));
1549 }
1550 /* Now resume this LWP and get the SIGSTOP event. */
1551 errno = 0;
1552 ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1553 if (debug_linux_nat)
1554 fprintf_unfiltered (gdb_stdlog,
1555 "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
1556 target_pid_to_str (lp->ptid),
1557 errno ? safe_strerror (errno) : "OK");
1558
1559 /* Hold this event/waitstatus while we check to see if
1560 there are any more (we still want to get that SIGSTOP). */
1561 stop_wait_callback (lp, data);
1562 /* If the lp->status field is still empty, use it to hold
1563 this event. If not, then this event must be returned
1564 to the event queue of the LWP. */
1565 if (lp->status == 0)
1566 lp->status = status;
1567 else
1568 {
1569 if (debug_linux_nat)
1570 {
1571 fprintf_unfiltered (gdb_stdlog,
1572 "SWC: kill %s, %s\n",
1573 target_pid_to_str (lp->ptid),
1574 status_to_str ((int) status));
1575 }
1576 kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
1577 }
1578 return 0;
1579 }
1580 }
1581 else
1582 {
1583 /* We caught the SIGSTOP that we intended to catch, so
1584 there's no SIGSTOP pending. */
1585 lp->stopped = 1;
1586 lp->signalled = 0;
1587 }
1588 }
1589
1590 return 0;
1591}
1592
1593/* Check whether PID has any pending signals in FLUSH_MASK. If so set
1594 the appropriate bits in PENDING, and return 1 - otherwise return 0. */
1595
1596static int
1597linux_nat_has_pending (int pid, sigset_t *pending, sigset_t *flush_mask)
1598{
1599 sigset_t blocked, ignored;
1600 int i;
1601
1602 linux_proc_pending_signals (pid, pending, &blocked, &ignored);
1603
1604 if (!flush_mask)
1605 return 0;
1606
1607 for (i = 1; i < NSIG; i++)
1608 if (sigismember (pending, i))
1609 if (!sigismember (flush_mask, i)
1610 || sigismember (&blocked, i)
1611 || sigismember (&ignored, i))
1612 sigdelset (pending, i);
1613
1614 if (sigisemptyset (pending))
1615 return 0;
1616
1617 return 1;
1618}
1619
1620/* DATA is interpreted as a mask of signals to flush. If LP has
1621 signals pending, and they are all in the flush mask, then arrange
1622 to flush them. LP should be stopped, as should all other threads
1623 it might share a signal queue with. */
1624
1625static int
1626flush_callback (struct lwp_info *lp, void *data)
1627{
1628 sigset_t *flush_mask = data;
1629 sigset_t pending, intersection, blocked, ignored;
1630 int pid, status;
1631
1632 /* Normally, when an LWP exits, it is removed from the LWP list. The
1633 last LWP isn't removed till later, however. So if there is only
1634 one LWP on the list, make sure it's alive. */
1635 if (lwp_list == lp && lp->next == NULL)
1636 if (!linux_nat_thread_alive (lp->ptid))
1637 return 0;
1638
1639 /* Just because the LWP is stopped doesn't mean that new signals
1640 can't arrive from outside, so this function must be careful of
1641 race conditions. However, because all threads are stopped, we
1642 can assume that the pending mask will not shrink unless we resume
1643 the LWP, and that it will then get another signal. We can't
1644 control which one, however. */
1645
1646 if (lp->status)
1647 {
1648 if (debug_linux_nat)
a3f17187 1649 printf_unfiltered (_("FC: LP has pending status %06x\n"), lp->status);
d6b0e80f
AC
1650 if (WIFSTOPPED (lp->status) && sigismember (flush_mask, WSTOPSIG (lp->status)))
1651 lp->status = 0;
1652 }
1653
3d799a95
DJ
1654 /* While there is a pending signal we would like to flush, continue
1655 the inferior and collect another signal. But if there's already
1656 a saved status that we don't want to flush, we can't resume the
1657 inferior - if it stopped for some other reason we wouldn't have
1658 anywhere to save the new status. In that case, we must leave the
1659 signal unflushed (and possibly generate an extra SIGINT stop).
1660 That's much less bad than losing a signal. */
1661 while (lp->status == 0
1662 && linux_nat_has_pending (GET_LWP (lp->ptid), &pending, flush_mask))
d6b0e80f
AC
1663 {
1664 int ret;
1665
1666 errno = 0;
1667 ret = ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
1668 if (debug_linux_nat)
1669 fprintf_unfiltered (gdb_stderr,
1670 "FC: Sent PTRACE_CONT, ret %d %d\n", ret, errno);
1671
1672 lp->stopped = 0;
1673 stop_wait_callback (lp, flush_mask);
1674 if (debug_linux_nat)
1675 fprintf_unfiltered (gdb_stderr,
1676 "FC: Wait finished; saved status is %d\n",
1677 lp->status);
1678 }
1679
1680 return 0;
1681}
1682
1683/* Return non-zero if LP has a wait status pending. */
1684
1685static int
1686status_callback (struct lwp_info *lp, void *data)
1687{
1688 /* Only report a pending wait status if we pretend that this has
1689 indeed been resumed. */
1690 return (lp->status != 0 && lp->resumed);
1691}
1692
1693/* Return non-zero if LP isn't stopped. */
1694
1695static int
1696running_callback (struct lwp_info *lp, void *data)
1697{
1698 return (lp->stopped == 0 || (lp->status != 0 && lp->resumed));
1699}
1700
1701/* Count the LWP's that have had events. */
1702
1703static int
1704count_events_callback (struct lwp_info *lp, void *data)
1705{
1706 int *count = data;
1707
1708 gdb_assert (count != NULL);
1709
1710 /* Count only LWPs that have a SIGTRAP event pending. */
1711 if (lp->status != 0
1712 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
1713 (*count)++;
1714
1715 return 0;
1716}
1717
1718/* Select the LWP (if any) that is currently being single-stepped. */
1719
1720static int
1721select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
1722{
1723 if (lp->step && lp->status != 0)
1724 return 1;
1725 else
1726 return 0;
1727}
1728
1729/* Select the Nth LWP that has had a SIGTRAP event. */
1730
1731static int
1732select_event_lwp_callback (struct lwp_info *lp, void *data)
1733{
1734 int *selector = data;
1735
1736 gdb_assert (selector != NULL);
1737
1738 /* Select only LWPs that have a SIGTRAP event pending. */
1739 if (lp->status != 0
1740 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
1741 if ((*selector)-- == 0)
1742 return 1;
1743
1744 return 0;
1745}
1746
1747static int
1748cancel_breakpoints_callback (struct lwp_info *lp, void *data)
1749{
1750 struct lwp_info *event_lp = data;
1751
1752 /* Leave the LWP that has been elected to receive a SIGTRAP alone. */
1753 if (lp == event_lp)
1754 return 0;
1755
1756 /* If a LWP other than the LWP that we're reporting an event for has
1757 hit a GDB breakpoint (as opposed to some random trap signal),
1758 then just arrange for it to hit it again later. We don't keep
1759 the SIGTRAP status and don't forward the SIGTRAP signal to the
1760 LWP. We will handle the current event, eventually we will resume
1761 all LWPs, and this one will get its breakpoint trap again.
1762
1763 If we do not do this, then we run the risk that the user will
1764 delete or disable the breakpoint, but the LWP will have already
1765 tripped on it. */
1766
1767 if (lp->status != 0
1768 && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP
1769 && breakpoint_inserted_here_p (read_pc_pid (lp->ptid) -
b798847d
UW
1770 gdbarch_decr_pc_after_break
1771 (current_gdbarch)))
d6b0e80f
AC
1772 {
1773 if (debug_linux_nat)
1774 fprintf_unfiltered (gdb_stdlog,
1775 "CBC: Push back breakpoint for %s\n",
1776 target_pid_to_str (lp->ptid));
1777
1778 /* Back up the PC if necessary. */
b798847d
UW
1779 if (gdbarch_decr_pc_after_break (current_gdbarch))
1780 write_pc_pid (read_pc_pid (lp->ptid) - gdbarch_decr_pc_after_break
1781 (current_gdbarch),
1782 lp->ptid);
d6b0e80f
AC
1783
1784 /* Throw away the SIGTRAP. */
1785 lp->status = 0;
1786 }
1787
1788 return 0;
1789}
1790
1791/* Select one LWP out of those that have events pending. */
1792
1793static void
1794select_event_lwp (struct lwp_info **orig_lp, int *status)
1795{
1796 int num_events = 0;
1797 int random_selector;
1798 struct lwp_info *event_lp;
1799
ac264b3b 1800 /* Record the wait status for the original LWP. */
d6b0e80f
AC
1801 (*orig_lp)->status = *status;
1802
1803 /* Give preference to any LWP that is being single-stepped. */
1804 event_lp = iterate_over_lwps (select_singlestep_lwp_callback, NULL);
1805 if (event_lp != NULL)
1806 {
1807 if (debug_linux_nat)
1808 fprintf_unfiltered (gdb_stdlog,
1809 "SEL: Select single-step %s\n",
1810 target_pid_to_str (event_lp->ptid));
1811 }
1812 else
1813 {
1814 /* No single-stepping LWP. Select one at random, out of those
1815 which have had SIGTRAP events. */
1816
1817 /* First see how many SIGTRAP events we have. */
1818 iterate_over_lwps (count_events_callback, &num_events);
1819
1820 /* Now randomly pick a LWP out of those that have had a SIGTRAP. */
1821 random_selector = (int)
1822 ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
1823
1824 if (debug_linux_nat && num_events > 1)
1825 fprintf_unfiltered (gdb_stdlog,
1826 "SEL: Found %d SIGTRAP events, selecting #%d\n",
1827 num_events, random_selector);
1828
1829 event_lp = iterate_over_lwps (select_event_lwp_callback,
1830 &random_selector);
1831 }
1832
1833 if (event_lp != NULL)
1834 {
1835 /* Switch the event LWP. */
1836 *orig_lp = event_lp;
1837 *status = event_lp->status;
1838 }
1839
1840 /* Flush the wait status for the event LWP. */
1841 (*orig_lp)->status = 0;
1842}
1843
1844/* Return non-zero if LP has been resumed. */
1845
1846static int
1847resumed_callback (struct lwp_info *lp, void *data)
1848{
1849 return lp->resumed;
1850}
1851
d6b0e80f
AC
1852/* Stop an active thread, verify it still exists, then resume it. */
1853
1854static int
1855stop_and_resume_callback (struct lwp_info *lp, void *data)
1856{
1857 struct lwp_info *ptr;
1858
1859 if (!lp->stopped && !lp->signalled)
1860 {
1861 stop_callback (lp, NULL);
1862 stop_wait_callback (lp, NULL);
1863 /* Resume if the lwp still exists. */
1864 for (ptr = lwp_list; ptr; ptr = ptr->next)
1865 if (lp == ptr)
1866 {
1867 resume_callback (lp, NULL);
1868 resume_set_callback (lp, NULL);
1869 }
1870 }
1871 return 0;
1872}
1873
1874static ptid_t
1875linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
1876{
1877 struct lwp_info *lp = NULL;
1878 int options = 0;
1879 int status = 0;
1880 pid_t pid = PIDGET (ptid);
1881 sigset_t flush_mask;
1882
f973ed9c
DJ
1883 /* The first time we get here after starting a new inferior, we may
1884 not have added it to the LWP list yet - this is the earliest
1885 moment at which we know its PID. */
1886 if (num_lwps == 0)
1887 {
1888 gdb_assert (!is_lwp (inferior_ptid));
1889
1890 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
1891 GET_PID (inferior_ptid));
1892 lp = add_lwp (inferior_ptid);
1893 lp->resumed = 1;
1894 }
1895
d6b0e80f
AC
1896 sigemptyset (&flush_mask);
1897
1898 /* Make sure SIGCHLD is blocked. */
1899 if (!sigismember (&blocked_mask, SIGCHLD))
1900 {
1901 sigaddset (&blocked_mask, SIGCHLD);
1902 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
1903 }
1904
1905retry:
1906
f973ed9c
DJ
1907 /* Make sure there is at least one LWP that has been resumed. */
1908 gdb_assert (iterate_over_lwps (resumed_callback, NULL));
d6b0e80f
AC
1909
1910 /* First check if there is a LWP with a wait status pending. */
1911 if (pid == -1)
1912 {
1913 /* Any LWP that's been resumed will do. */
1914 lp = iterate_over_lwps (status_callback, NULL);
1915 if (lp)
1916 {
1917 status = lp->status;
1918 lp->status = 0;
1919
1920 if (debug_linux_nat && status)
1921 fprintf_unfiltered (gdb_stdlog,
1922 "LLW: Using pending wait status %s for %s.\n",
1923 status_to_str (status),
1924 target_pid_to_str (lp->ptid));
1925 }
1926
1927 /* But if we don't fine one, we'll have to wait, and check both
1928 cloned and uncloned processes. We start with the cloned
1929 processes. */
1930 options = __WCLONE | WNOHANG;
1931 }
1932 else if (is_lwp (ptid))
1933 {
1934 if (debug_linux_nat)
1935 fprintf_unfiltered (gdb_stdlog,
1936 "LLW: Waiting for specific LWP %s.\n",
1937 target_pid_to_str (ptid));
1938
1939 /* We have a specific LWP to check. */
1940 lp = find_lwp_pid (ptid);
1941 gdb_assert (lp);
1942 status = lp->status;
1943 lp->status = 0;
1944
1945 if (debug_linux_nat && status)
1946 fprintf_unfiltered (gdb_stdlog,
1947 "LLW: Using pending wait status %s for %s.\n",
1948 status_to_str (status),
1949 target_pid_to_str (lp->ptid));
1950
1951 /* If we have to wait, take into account whether PID is a cloned
1952 process or not. And we have to convert it to something that
1953 the layer beneath us can understand. */
1954 options = lp->cloned ? __WCLONE : 0;
1955 pid = GET_LWP (ptid);
1956 }
1957
1958 if (status && lp->signalled)
1959 {
1960 /* A pending SIGSTOP may interfere with the normal stream of
1961 events. In a typical case where interference is a problem,
1962 we have a SIGSTOP signal pending for LWP A while
1963 single-stepping it, encounter an event in LWP B, and take the
1964 pending SIGSTOP while trying to stop LWP A. After processing
1965 the event in LWP B, LWP A is continued, and we'll never see
1966 the SIGTRAP associated with the last time we were
1967 single-stepping LWP A. */
1968
1969 /* Resume the thread. It should halt immediately returning the
1970 pending SIGSTOP. */
1971 registers_changed ();
10d6c8cd
DJ
1972 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
1973 lp->step, TARGET_SIGNAL_0);
d6b0e80f
AC
1974 if (debug_linux_nat)
1975 fprintf_unfiltered (gdb_stdlog,
1976 "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
1977 lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
1978 target_pid_to_str (lp->ptid));
1979 lp->stopped = 0;
1980 gdb_assert (lp->resumed);
1981
1982 /* This should catch the pending SIGSTOP. */
1983 stop_wait_callback (lp, NULL);
1984 }
1985
1986 set_sigint_trap (); /* Causes SIGINT to be passed on to the
1987 attached process. */
1988 set_sigio_trap ();
1989
1990 while (status == 0)
1991 {
1992 pid_t lwpid;
1993
58aecb61 1994 lwpid = my_waitpid (pid, &status, options);
d6b0e80f
AC
1995 if (lwpid > 0)
1996 {
1997 gdb_assert (pid == -1 || lwpid == pid);
1998
1999 if (debug_linux_nat)
2000 {
2001 fprintf_unfiltered (gdb_stdlog,
2002 "LLW: waitpid %ld received %s\n",
2003 (long) lwpid, status_to_str (status));
2004 }
2005
2006 lp = find_lwp_pid (pid_to_ptid (lwpid));
2007
2008 /* Check for stop events reported by a process we didn't
2009 already know about - anything not already in our LWP
2010 list.
2011
2012 If we're expecting to receive stopped processes after
2013 fork, vfork, and clone events, then we'll just add the
2014 new one to our list and go back to waiting for the event
2015 to be reported - the stopped process might be returned
2016 from waitpid before or after the event is. */
2017 if (WIFSTOPPED (status) && !lp)
2018 {
3d799a95 2019 linux_record_stopped_pid (lwpid, status);
d6b0e80f
AC
2020 status = 0;
2021 continue;
2022 }
2023
2024 /* Make sure we don't report an event for the exit of an LWP not in
2025 our list, i.e. not part of the current process. This can happen
2026 if we detach from a program we original forked and then it
2027 exits. */
2028 if (!WIFSTOPPED (status) && !lp)
2029 {
2030 status = 0;
2031 continue;
2032 }
2033
2034 /* NOTE drow/2003-06-17: This code seems to be meant for debugging
2035 CLONE_PTRACE processes which do not use the thread library -
2036 otherwise we wouldn't find the new LWP this way. That doesn't
2037 currently work, and the following code is currently unreachable
2038 due to the two blocks above. If it's fixed some day, this code
2039 should be broken out into a function so that we can also pick up
2040 LWPs from the new interface. */
2041 if (!lp)
2042 {
2043 lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));
2044 if (options & __WCLONE)
2045 lp->cloned = 1;
2046
f973ed9c
DJ
2047 gdb_assert (WIFSTOPPED (status)
2048 && WSTOPSIG (status) == SIGSTOP);
2049 lp->signalled = 1;
d6b0e80f 2050
f973ed9c
DJ
2051 if (!in_thread_list (inferior_ptid))
2052 {
2053 inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid),
2054 GET_PID (inferior_ptid));
2055 add_thread (inferior_ptid);
d6b0e80f 2056 }
f973ed9c
DJ
2057
2058 add_thread (lp->ptid);
2059 printf_unfiltered (_("[New %s]\n"),
2060 target_pid_to_str (lp->ptid));
d6b0e80f
AC
2061 }
2062
2063 /* Handle GNU/Linux's extended waitstatus for trace events. */
2064 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
2065 {
2066 if (debug_linux_nat)
2067 fprintf_unfiltered (gdb_stdlog,
2068 "LLW: Handling extended status 0x%06x\n",
2069 status);
3d799a95 2070 if (linux_handle_extended_wait (lp, status, 0))
d6b0e80f
AC
2071 {
2072 status = 0;
2073 continue;
2074 }
2075 }
2076
2077 /* Check if the thread has exited. */
2078 if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
2079 {
d6b0e80f
AC
2080 /* If this is the main thread, we must stop all threads and
2081 verify if they are still alive. This is because in the nptl
2082 thread model, there is no signal issued for exiting LWPs
2083 other than the main thread. We only get the main thread
2084 exit signal once all child threads have already exited.
2085 If we stop all the threads and use the stop_wait_callback
2086 to check if they have exited we can determine whether this
2087 signal should be ignored or whether it means the end of the
2088 debugged application, regardless of which threading model
2089 is being used. */
2090 if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
2091 {
2092 lp->stopped = 1;
2093 iterate_over_lwps (stop_and_resume_callback, NULL);
2094 }
2095
2096 if (debug_linux_nat)
2097 fprintf_unfiltered (gdb_stdlog,
2098 "LLW: %s exited.\n",
2099 target_pid_to_str (lp->ptid));
2100
e26af52f 2101 exit_lwp (lp);
d6b0e80f
AC
2102
2103 /* If there is at least one more LWP, then the exit signal
2104 was not the end of the debugged application and should be
2105 ignored. */
2106 if (num_lwps > 0)
2107 {
2108 /* Make sure there is at least one thread running. */
2109 gdb_assert (iterate_over_lwps (running_callback, NULL));
2110
2111 /* Discard the event. */
2112 status = 0;
2113 continue;
2114 }
2115 }
2116
2117 /* Check if the current LWP has previously exited. In the nptl
2118 thread model, LWPs other than the main thread do not issue
2119 signals when they exit so we must check whenever the thread
2120 has stopped. A similar check is made in stop_wait_callback(). */
2121 if (num_lwps > 1 && !linux_nat_thread_alive (lp->ptid))
2122 {
d6b0e80f
AC
2123 if (debug_linux_nat)
2124 fprintf_unfiltered (gdb_stdlog,
2125 "LLW: %s exited.\n",
2126 target_pid_to_str (lp->ptid));
2127
e26af52f 2128 exit_lwp (lp);
d6b0e80f
AC
2129
2130 /* Make sure there is at least one thread running. */
2131 gdb_assert (iterate_over_lwps (running_callback, NULL));
2132
2133 /* Discard the event. */
2134 status = 0;
2135 continue;
2136 }
2137
2138 /* Make sure we don't report a SIGSTOP that we sent
2139 ourselves in an attempt to stop an LWP. */
2140 if (lp->signalled
2141 && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
2142 {
2143 if (debug_linux_nat)
2144 fprintf_unfiltered (gdb_stdlog,
2145 "LLW: Delayed SIGSTOP caught for %s.\n",
2146 target_pid_to_str (lp->ptid));
2147
2148 /* This is a delayed SIGSTOP. */
2149 lp->signalled = 0;
2150
2151 registers_changed ();
10d6c8cd
DJ
2152 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2153 lp->step, TARGET_SIGNAL_0);
d6b0e80f
AC
2154 if (debug_linux_nat)
2155 fprintf_unfiltered (gdb_stdlog,
2156 "LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
2157 lp->step ?
2158 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2159 target_pid_to_str (lp->ptid));
2160
2161 lp->stopped = 0;
2162 gdb_assert (lp->resumed);
2163
2164 /* Discard the event. */
2165 status = 0;
2166 continue;
2167 }
2168
2169 break;
2170 }
2171
2172 if (pid == -1)
2173 {
2174 /* Alternate between checking cloned and uncloned processes. */
2175 options ^= __WCLONE;
2176
2177 /* And suspend every time we have checked both. */
2178 if (options & __WCLONE)
2179 sigsuspend (&suspend_mask);
2180 }
2181
2182 /* We shouldn't end up here unless we want to try again. */
2183 gdb_assert (status == 0);
2184 }
2185
2186 clear_sigio_trap ();
2187 clear_sigint_trap ();
2188
2189 gdb_assert (lp);
2190
2191 /* Don't report signals that GDB isn't interested in, such as
2192 signals that are neither printed nor stopped upon. Stopping all
2193 threads can be a bit time-consuming so if we want decent
2194 performance with heavily multi-threaded programs, especially when
2195 they're using a high frequency timer, we'd better avoid it if we
2196 can. */
2197
2198 if (WIFSTOPPED (status))
2199 {
2200 int signo = target_signal_from_host (WSTOPSIG (status));
2201
d539ed7e
UW
2202 /* If we get a signal while single-stepping, we may need special
2203 care, e.g. to skip the signal handler. Defer to common code. */
2204 if (!lp->step
2205 && signal_stop_state (signo) == 0
d6b0e80f
AC
2206 && signal_print_state (signo) == 0
2207 && signal_pass_state (signo) == 1)
2208 {
2209 /* FIMXE: kettenis/2001-06-06: Should we resume all threads
2210 here? It is not clear we should. GDB may not expect
2211 other threads to run. On the other hand, not resuming
2212 newly attached threads may cause an unwanted delay in
2213 getting them running. */
2214 registers_changed ();
10d6c8cd
DJ
2215 linux_ops->to_resume (pid_to_ptid (GET_LWP (lp->ptid)),
2216 lp->step, signo);
d6b0e80f
AC
2217 if (debug_linux_nat)
2218 fprintf_unfiltered (gdb_stdlog,
2219 "LLW: %s %s, %s (preempt 'handle')\n",
2220 lp->step ?
2221 "PTRACE_SINGLESTEP" : "PTRACE_CONT",
2222 target_pid_to_str (lp->ptid),
2223 signo ? strsignal (signo) : "0");
2224 lp->stopped = 0;
2225 status = 0;
2226 goto retry;
2227 }
2228
2229 if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
2230 {
2231 /* If ^C/BREAK is typed at the tty/console, SIGINT gets
2232 forwarded to the entire process group, that is, all LWP's
2233 will receive it. Since we only want to report it once,
2234 we try to flush it from all LWPs except this one. */
2235 sigaddset (&flush_mask, SIGINT);
2236 }
2237 }
2238
2239 /* This LWP is stopped now. */
2240 lp->stopped = 1;
2241
2242 if (debug_linux_nat)
2243 fprintf_unfiltered (gdb_stdlog, "LLW: Candidate event %s in %s.\n",
2244 status_to_str (status), target_pid_to_str (lp->ptid));
2245
2246 /* Now stop all other LWP's ... */
2247 iterate_over_lwps (stop_callback, NULL);
2248
2249 /* ... and wait until all of them have reported back that they're no
2250 longer running. */
2251 iterate_over_lwps (stop_wait_callback, &flush_mask);
2252 iterate_over_lwps (flush_callback, &flush_mask);
2253
2254 /* If we're not waiting for a specific LWP, choose an event LWP from
2255 among those that have had events. Giving equal priority to all
2256 LWPs that have had events helps prevent starvation. */
2257 if (pid == -1)
2258 select_event_lwp (&lp, &status);
2259
2260 /* Now that we've selected our final event LWP, cancel any
2261 breakpoints in other LWPs that have hit a GDB breakpoint. See
2262 the comment in cancel_breakpoints_callback to find out why. */
2263 iterate_over_lwps (cancel_breakpoints_callback, lp);
2264
d6b0e80f
AC
2265 if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
2266 {
f973ed9c 2267 trap_ptid = lp->ptid;
d6b0e80f
AC
2268 if (debug_linux_nat)
2269 fprintf_unfiltered (gdb_stdlog,
2270 "LLW: trap_ptid is %s.\n",
2271 target_pid_to_str (trap_ptid));
2272 }
2273 else
2274 trap_ptid = null_ptid;
2275
2276 if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
2277 {
2278 *ourstatus = lp->waitstatus;
2279 lp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
2280 }
2281 else
2282 store_waitstatus (ourstatus, status);
2283
f973ed9c 2284 return lp->ptid;
d6b0e80f
AC
2285}
2286
2287static int
2288kill_callback (struct lwp_info *lp, void *data)
2289{
2290 errno = 0;
2291 ptrace (PTRACE_KILL, GET_LWP (lp->ptid), 0, 0);
2292 if (debug_linux_nat)
2293 fprintf_unfiltered (gdb_stdlog,
2294 "KC: PTRACE_KILL %s, 0, 0 (%s)\n",
2295 target_pid_to_str (lp->ptid),
2296 errno ? safe_strerror (errno) : "OK");
2297
2298 return 0;
2299}
2300
2301static int
2302kill_wait_callback (struct lwp_info *lp, void *data)
2303{
2304 pid_t pid;
2305
2306 /* We must make sure that there are no pending events (delayed
2307 SIGSTOPs, pending SIGTRAPs, etc.) to make sure the current
2308 program doesn't interfere with any following debugging session. */
2309
2310 /* For cloned processes we must check both with __WCLONE and
2311 without, since the exit status of a cloned process isn't reported
2312 with __WCLONE. */
2313 if (lp->cloned)
2314 {
2315 do
2316 {
58aecb61 2317 pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
d6b0e80f
AC
2318 if (pid != (pid_t) -1 && debug_linux_nat)
2319 {
2320 fprintf_unfiltered (gdb_stdlog,
2321 "KWC: wait %s received unknown.\n",
2322 target_pid_to_str (lp->ptid));
2323 }
2324 }
2325 while (pid == GET_LWP (lp->ptid));
2326
2327 gdb_assert (pid == -1 && errno == ECHILD);
2328 }
2329
2330 do
2331 {
58aecb61 2332 pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
d6b0e80f
AC
2333 if (pid != (pid_t) -1 && debug_linux_nat)
2334 {
2335 fprintf_unfiltered (gdb_stdlog,
2336 "KWC: wait %s received unk.\n",
2337 target_pid_to_str (lp->ptid));
2338 }
2339 }
2340 while (pid == GET_LWP (lp->ptid));
2341
2342 gdb_assert (pid == -1 && errno == ECHILD);
2343 return 0;
2344}
2345
2346static void
2347linux_nat_kill (void)
2348{
f973ed9c
DJ
2349 struct target_waitstatus last;
2350 ptid_t last_ptid;
2351 int status;
d6b0e80f 2352
f973ed9c
DJ
2353 /* If we're stopped while forking and we haven't followed yet,
2354 kill the other task. We need to do this first because the
2355 parent will be sleeping if this is a vfork. */
d6b0e80f 2356
f973ed9c 2357 get_last_target_status (&last_ptid, &last);
d6b0e80f 2358
f973ed9c
DJ
2359 if (last.kind == TARGET_WAITKIND_FORKED
2360 || last.kind == TARGET_WAITKIND_VFORKED)
2361 {
2362 ptrace (PT_KILL, last.value.related_pid, 0, 0);
2363 wait (&status);
2364 }
2365
2366 if (forks_exist_p ())
2367 linux_fork_killall ();
2368 else
2369 {
2370 /* Kill all LWP's ... */
2371 iterate_over_lwps (kill_callback, NULL);
2372
2373 /* ... and wait until we've flushed all events. */
2374 iterate_over_lwps (kill_wait_callback, NULL);
2375 }
2376
2377 target_mourn_inferior ();
d6b0e80f
AC
2378}
2379
2380static void
2381linux_nat_mourn_inferior (void)
2382{
2383 trap_ptid = null_ptid;
2384
2385 /* Destroy LWP info; it's no longer valid. */
2386 init_lwp_list ();
2387
2388 /* Restore the original signal mask. */
2389 sigprocmask (SIG_SETMASK, &normal_mask, NULL);
2390 sigemptyset (&blocked_mask);
2391
f973ed9c
DJ
2392 if (! forks_exist_p ())
2393 /* Normal case, no other forks available. */
2394 linux_ops->to_mourn_inferior ();
2395 else
2396 /* Multi-fork case. The current inferior_ptid has exited, but
2397 there are other viable forks to debug. Delete the exiting
2398 one and context-switch to the first available. */
2399 linux_fork_mourn_inferior ();
d6b0e80f
AC
2400}
2401
10d6c8cd
DJ
2402static LONGEST
2403linux_nat_xfer_partial (struct target_ops *ops, enum target_object object,
2404 const char *annex, gdb_byte *readbuf,
2405 const gdb_byte *writebuf,
2406 ULONGEST offset, LONGEST len)
d6b0e80f
AC
2407{
2408 struct cleanup *old_chain = save_inferior_ptid ();
10d6c8cd 2409 LONGEST xfer;
d6b0e80f
AC
2410
2411 if (is_lwp (inferior_ptid))
2412 inferior_ptid = pid_to_ptid (GET_LWP (inferior_ptid));
2413
10d6c8cd
DJ
2414 xfer = linux_ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
2415 offset, len);
d6b0e80f
AC
2416
2417 do_cleanups (old_chain);
2418 return xfer;
2419}
2420
2421static int
2422linux_nat_thread_alive (ptid_t ptid)
2423{
2424 gdb_assert (is_lwp (ptid));
2425
2426 errno = 0;
2427 ptrace (PTRACE_PEEKUSER, GET_LWP (ptid), 0, 0);
2428 if (debug_linux_nat)
2429 fprintf_unfiltered (gdb_stdlog,
2430 "LLTA: PTRACE_PEEKUSER %s, 0, 0 (%s)\n",
2431 target_pid_to_str (ptid),
2432 errno ? safe_strerror (errno) : "OK");
9c0dd46b 2433
155bd5d1
AC
2434 /* Not every Linux kernel implements PTRACE_PEEKUSER. But we can
2435 handle that case gracefully since ptrace will first do a lookup
2436 for the process based upon the passed-in pid. If that fails we
2437 will get either -ESRCH or -EPERM, otherwise the child exists and
2438 is alive. */
a529be7c 2439 if (errno == ESRCH || errno == EPERM)
d6b0e80f
AC
2440 return 0;
2441
2442 return 1;
2443}
2444
2445static char *
2446linux_nat_pid_to_str (ptid_t ptid)
2447{
2448 static char buf[64];
2449
f973ed9c 2450 if (lwp_list && lwp_list->next && is_lwp (ptid))
d6b0e80f
AC
2451 {
2452 snprintf (buf, sizeof (buf), "LWP %ld", GET_LWP (ptid));
2453 return buf;
2454 }
2455
2456 return normal_pid_to_str (ptid);
2457}
2458
d6b0e80f
AC
2459static void
2460sigchld_handler (int signo)
2461{
2462 /* Do nothing. The only reason for this handler is that it allows
2463 us to use sigsuspend in linux_nat_wait above to wait for the
2464 arrival of a SIGCHLD. */
2465}
2466
dba24537
AC
2467/* Accepts an integer PID; Returns a string representing a file that
2468 can be opened to get the symbols for the child process. */
2469
6d8fd2b7
UW
2470static char *
2471linux_child_pid_to_exec_file (int pid)
dba24537
AC
2472{
2473 char *name1, *name2;
2474
2475 name1 = xmalloc (MAXPATHLEN);
2476 name2 = xmalloc (MAXPATHLEN);
2477 make_cleanup (xfree, name1);
2478 make_cleanup (xfree, name2);
2479 memset (name2, 0, MAXPATHLEN);
2480
2481 sprintf (name1, "/proc/%d/exe", pid);
2482 if (readlink (name1, name2, MAXPATHLEN) > 0)
2483 return name2;
2484 else
2485 return name1;
2486}
2487
2488/* Service function for corefiles and info proc. */
2489
2490static int
2491read_mapping (FILE *mapfile,
2492 long long *addr,
2493 long long *endaddr,
2494 char *permissions,
2495 long long *offset,
2496 char *device, long long *inode, char *filename)
2497{
2498 int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
2499 addr, endaddr, permissions, offset, device, inode);
2500
2e14c2ea
MS
2501 filename[0] = '\0';
2502 if (ret > 0 && ret != EOF)
dba24537
AC
2503 {
2504 /* Eat everything up to EOL for the filename. This will prevent
2505 weird filenames (such as one with embedded whitespace) from
2506 confusing this code. It also makes this code more robust in
2507 respect to annotations the kernel may add after the filename.
2508
2509 Note the filename is used for informational purposes
2510 only. */
2511 ret += fscanf (mapfile, "%[^\n]\n", filename);
2512 }
2e14c2ea 2513
dba24537
AC
2514 return (ret != 0 && ret != EOF);
2515}
2516
2517/* Fills the "to_find_memory_regions" target vector. Lists the memory
2518 regions in the inferior for a corefile. */
2519
2520static int
2521linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
2522 unsigned long,
2523 int, int, int, void *), void *obfd)
2524{
2525 long long pid = PIDGET (inferior_ptid);
2526 char mapsfilename[MAXPATHLEN];
2527 FILE *mapsfile;
2528 long long addr, endaddr, size, offset, inode;
2529 char permissions[8], device[8], filename[MAXPATHLEN];
2530 int read, write, exec;
2531 int ret;
2532
2533 /* Compose the filename for the /proc memory map, and open it. */
2534 sprintf (mapsfilename, "/proc/%lld/maps", pid);
2535 if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
8a3fe4f8 2536 error (_("Could not open %s."), mapsfilename);
dba24537
AC
2537
2538 if (info_verbose)
2539 fprintf_filtered (gdb_stdout,
2540 "Reading memory regions from %s\n", mapsfilename);
2541
2542 /* Now iterate until end-of-file. */
2543 while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
2544 &offset, &device[0], &inode, &filename[0]))
2545 {
2546 size = endaddr - addr;
2547
2548 /* Get the segment's permissions. */
2549 read = (strchr (permissions, 'r') != 0);
2550 write = (strchr (permissions, 'w') != 0);
2551 exec = (strchr (permissions, 'x') != 0);
2552
2553 if (info_verbose)
2554 {
2555 fprintf_filtered (gdb_stdout,
2556 "Save segment, %lld bytes at 0x%s (%c%c%c)",
2557 size, paddr_nz (addr),
2558 read ? 'r' : ' ',
2559 write ? 'w' : ' ', exec ? 'x' : ' ');
b260b6c1 2560 if (filename[0])
dba24537
AC
2561 fprintf_filtered (gdb_stdout, " for %s", filename);
2562 fprintf_filtered (gdb_stdout, "\n");
2563 }
2564
2565 /* Invoke the callback function to create the corefile
2566 segment. */
2567 func (addr, size, read, write, exec, obfd);
2568 }
2569 fclose (mapsfile);
2570 return 0;
2571}
2572
2573/* Records the thread's register state for the corefile note
2574 section. */
2575
2576static char *
2577linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
2578 char *note_data, int *note_size)
2579{
2580 gdb_gregset_t gregs;
2581 gdb_fpregset_t fpregs;
2582#ifdef FILL_FPXREGSET
2583 gdb_fpxregset_t fpxregs;
2584#endif
2585 unsigned long lwp = ptid_get_lwp (ptid);
594f7785
UW
2586 struct regcache *regcache = get_thread_regcache (ptid);
2587 struct gdbarch *gdbarch = get_regcache_arch (regcache);
4f844a66 2588 const struct regset *regset;
55e969c1 2589 int core_regset_p;
594f7785
UW
2590 struct cleanup *old_chain;
2591
2592 old_chain = save_inferior_ptid ();
2593 inferior_ptid = ptid;
2594 target_fetch_registers (regcache, -1);
2595 do_cleanups (old_chain);
4f844a66
DM
2596
2597 core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
55e969c1
DM
2598 if (core_regset_p
2599 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
2600 sizeof (gregs))) != NULL
2601 && regset->collect_regset != NULL)
594f7785 2602 regset->collect_regset (regset, regcache, -1,
55e969c1 2603 &gregs, sizeof (gregs));
4f844a66 2604 else
594f7785 2605 fill_gregset (regcache, &gregs, -1);
4f844a66 2606
55e969c1
DM
2607 note_data = (char *) elfcore_write_prstatus (obfd,
2608 note_data,
2609 note_size,
2610 lwp,
2611 stop_signal, &gregs);
2612
2613 if (core_regset_p
2614 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
2615 sizeof (fpregs))) != NULL
2616 && regset->collect_regset != NULL)
594f7785 2617 regset->collect_regset (regset, regcache, -1,
55e969c1 2618 &fpregs, sizeof (fpregs));
4f844a66 2619 else
594f7785 2620 fill_fpregset (regcache, &fpregs, -1);
4f844a66 2621
55e969c1
DM
2622 note_data = (char *) elfcore_write_prfpreg (obfd,
2623 note_data,
2624 note_size,
2625 &fpregs, sizeof (fpregs));
dba24537 2626
dba24537 2627#ifdef FILL_FPXREGSET
55e969c1
DM
2628 if (core_regset_p
2629 && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg-xfp",
2630 sizeof (fpxregs))) != NULL
2631 && regset->collect_regset != NULL)
594f7785 2632 regset->collect_regset (regset, regcache, -1,
55e969c1 2633 &fpxregs, sizeof (fpxregs));
4f844a66 2634 else
594f7785 2635 fill_fpxregset (regcache, &fpxregs, -1);
4f844a66 2636
55e969c1
DM
2637 note_data = (char *) elfcore_write_prxfpreg (obfd,
2638 note_data,
2639 note_size,
2640 &fpxregs, sizeof (fpxregs));
dba24537
AC
2641#endif
2642 return note_data;
2643}
2644
2645struct linux_nat_corefile_thread_data
2646{
2647 bfd *obfd;
2648 char *note_data;
2649 int *note_size;
2650 int num_notes;
2651};
2652
2653/* Called by gdbthread.c once per thread. Records the thread's
2654 register state for the corefile note section. */
2655
2656static int
2657linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
2658{
2659 struct linux_nat_corefile_thread_data *args = data;
dba24537 2660
dba24537
AC
2661 args->note_data = linux_nat_do_thread_registers (args->obfd,
2662 ti->ptid,
2663 args->note_data,
2664 args->note_size);
2665 args->num_notes++;
56be3814 2666
dba24537
AC
2667 return 0;
2668}
2669
2670/* Records the register state for the corefile note section. */
2671
2672static char *
2673linux_nat_do_registers (bfd *obfd, ptid_t ptid,
2674 char *note_data, int *note_size)
2675{
dba24537
AC
2676 return linux_nat_do_thread_registers (obfd,
2677 ptid_build (ptid_get_pid (inferior_ptid),
2678 ptid_get_pid (inferior_ptid),
2679 0),
2680 note_data, note_size);
dba24537
AC
2681}
2682
2683/* Fills the "to_make_corefile_note" target vector. Builds the note
2684 section for a corefile, and returns it in a malloc buffer. */
2685
2686static char *
2687linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
2688{
2689 struct linux_nat_corefile_thread_data thread_args;
2690 struct cleanup *old_chain;
2691 char fname[16] = { '\0' };
2692 char psargs[80] = { '\0' };
2693 char *note_data = NULL;
2694 ptid_t current_ptid = inferior_ptid;
c6826062 2695 gdb_byte *auxv;
dba24537
AC
2696 int auxv_len;
2697
2698 if (get_exec_file (0))
2699 {
2700 strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
2701 strncpy (psargs, get_exec_file (0), sizeof (psargs));
2702 if (get_inferior_args ())
2703 {
2704 strncat (psargs, " ", sizeof (psargs) - strlen (psargs));
2705 strncat (psargs, get_inferior_args (),
2706 sizeof (psargs) - strlen (psargs));
2707 }
2708 note_data = (char *) elfcore_write_prpsinfo (obfd,
2709 note_data,
2710 note_size, fname, psargs);
2711 }
2712
2713 /* Dump information for threads. */
2714 thread_args.obfd = obfd;
2715 thread_args.note_data = note_data;
2716 thread_args.note_size = note_size;
2717 thread_args.num_notes = 0;
2718 iterate_over_lwps (linux_nat_corefile_thread_callback, &thread_args);
2719 if (thread_args.num_notes == 0)
2720 {
2721 /* iterate_over_threads didn't come up with any threads; just
2722 use inferior_ptid. */
2723 note_data = linux_nat_do_registers (obfd, inferior_ptid,
2724 note_data, note_size);
2725 }
2726 else
2727 {
2728 note_data = thread_args.note_data;
2729 }
2730
13547ab6
DJ
2731 auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
2732 NULL, &auxv);
dba24537
AC
2733 if (auxv_len > 0)
2734 {
2735 note_data = elfcore_write_note (obfd, note_data, note_size,
2736 "CORE", NT_AUXV, auxv, auxv_len);
2737 xfree (auxv);
2738 }
2739
2740 make_cleanup (xfree, note_data);
2741 return note_data;
2742}
2743
2744/* Implement the "info proc" command. */
2745
2746static void
2747linux_nat_info_proc_cmd (char *args, int from_tty)
2748{
2749 long long pid = PIDGET (inferior_ptid);
2750 FILE *procfile;
2751 char **argv = NULL;
2752 char buffer[MAXPATHLEN];
2753 char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
2754 int cmdline_f = 1;
2755 int cwd_f = 1;
2756 int exe_f = 1;
2757 int mappings_f = 0;
2758 int environ_f = 0;
2759 int status_f = 0;
2760 int stat_f = 0;
2761 int all = 0;
2762 struct stat dummy;
2763
2764 if (args)
2765 {
2766 /* Break up 'args' into an argv array. */
2767 if ((argv = buildargv (args)) == NULL)
2768 nomem (0);
2769 else
2770 make_cleanup_freeargv (argv);
2771 }
2772 while (argv != NULL && *argv != NULL)
2773 {
2774 if (isdigit (argv[0][0]))
2775 {
2776 pid = strtoul (argv[0], NULL, 10);
2777 }
2778 else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
2779 {
2780 mappings_f = 1;
2781 }
2782 else if (strcmp (argv[0], "status") == 0)
2783 {
2784 status_f = 1;
2785 }
2786 else if (strcmp (argv[0], "stat") == 0)
2787 {
2788 stat_f = 1;
2789 }
2790 else if (strcmp (argv[0], "cmd") == 0)
2791 {
2792 cmdline_f = 1;
2793 }
2794 else if (strncmp (argv[0], "exe", strlen (argv[0])) == 0)
2795 {
2796 exe_f = 1;
2797 }
2798 else if (strcmp (argv[0], "cwd") == 0)
2799 {
2800 cwd_f = 1;
2801 }
2802 else if (strncmp (argv[0], "all", strlen (argv[0])) == 0)
2803 {
2804 all = 1;
2805 }
2806 else
2807 {
2808 /* [...] (future options here) */
2809 }
2810 argv++;
2811 }
2812 if (pid == 0)
8a3fe4f8 2813 error (_("No current process: you must name one."));
dba24537
AC
2814
2815 sprintf (fname1, "/proc/%lld", pid);
2816 if (stat (fname1, &dummy) != 0)
8a3fe4f8 2817 error (_("No /proc directory: '%s'"), fname1);
dba24537 2818
a3f17187 2819 printf_filtered (_("process %lld\n"), pid);
dba24537
AC
2820 if (cmdline_f || all)
2821 {
2822 sprintf (fname1, "/proc/%lld/cmdline", pid);
d5d6fca5 2823 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
2824 {
2825 fgets (buffer, sizeof (buffer), procfile);
2826 printf_filtered ("cmdline = '%s'\n", buffer);
2827 fclose (procfile);
2828 }
2829 else
8a3fe4f8 2830 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
2831 }
2832 if (cwd_f || all)
2833 {
2834 sprintf (fname1, "/proc/%lld/cwd", pid);
2835 memset (fname2, 0, sizeof (fname2));
2836 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
2837 printf_filtered ("cwd = '%s'\n", fname2);
2838 else
8a3fe4f8 2839 warning (_("unable to read link '%s'"), fname1);
dba24537
AC
2840 }
2841 if (exe_f || all)
2842 {
2843 sprintf (fname1, "/proc/%lld/exe", pid);
2844 memset (fname2, 0, sizeof (fname2));
2845 if (readlink (fname1, fname2, sizeof (fname2)) > 0)
2846 printf_filtered ("exe = '%s'\n", fname2);
2847 else
8a3fe4f8 2848 warning (_("unable to read link '%s'"), fname1);
dba24537
AC
2849 }
2850 if (mappings_f || all)
2851 {
2852 sprintf (fname1, "/proc/%lld/maps", pid);
d5d6fca5 2853 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
2854 {
2855 long long addr, endaddr, size, offset, inode;
2856 char permissions[8], device[8], filename[MAXPATHLEN];
2857
a3f17187 2858 printf_filtered (_("Mapped address spaces:\n\n"));
17a912b6 2859 if (gdbarch_addr_bit (current_gdbarch) == 32)
dba24537
AC
2860 {
2861 printf_filtered ("\t%10s %10s %10s %10s %7s\n",
2862 "Start Addr",
2863 " End Addr",
2864 " Size", " Offset", "objfile");
2865 }
2866 else
2867 {
2868 printf_filtered (" %18s %18s %10s %10s %7s\n",
2869 "Start Addr",
2870 " End Addr",
2871 " Size", " Offset", "objfile");
2872 }
2873
2874 while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
2875 &offset, &device[0], &inode, &filename[0]))
2876 {
2877 size = endaddr - addr;
2878
2879 /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
2880 calls here (and possibly above) should be abstracted
2881 out into their own functions? Andrew suggests using
2882 a generic local_address_string instead to print out
2883 the addresses; that makes sense to me, too. */
2884
17a912b6 2885 if (gdbarch_addr_bit (current_gdbarch) == 32)
dba24537
AC
2886 {
2887 printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
2888 (unsigned long) addr, /* FIXME: pr_addr */
2889 (unsigned long) endaddr,
2890 (int) size,
2891 (unsigned int) offset,
2892 filename[0] ? filename : "");
2893 }
2894 else
2895 {
2896 printf_filtered (" %#18lx %#18lx %#10x %#10x %7s\n",
2897 (unsigned long) addr, /* FIXME: pr_addr */
2898 (unsigned long) endaddr,
2899 (int) size,
2900 (unsigned int) offset,
2901 filename[0] ? filename : "");
2902 }
2903 }
2904
2905 fclose (procfile);
2906 }
2907 else
8a3fe4f8 2908 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
2909 }
2910 if (status_f || all)
2911 {
2912 sprintf (fname1, "/proc/%lld/status", pid);
d5d6fca5 2913 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
2914 {
2915 while (fgets (buffer, sizeof (buffer), procfile) != NULL)
2916 puts_filtered (buffer);
2917 fclose (procfile);
2918 }
2919 else
8a3fe4f8 2920 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
2921 }
2922 if (stat_f || all)
2923 {
2924 sprintf (fname1, "/proc/%lld/stat", pid);
d5d6fca5 2925 if ((procfile = fopen (fname1, "r")) != NULL)
dba24537
AC
2926 {
2927 int itmp;
2928 char ctmp;
2929
2930 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2931 printf_filtered (_("Process: %d\n"), itmp);
dba24537 2932 if (fscanf (procfile, "%s ", &buffer[0]) > 0)
a3f17187 2933 printf_filtered (_("Exec file: %s\n"), buffer);
dba24537 2934 if (fscanf (procfile, "%c ", &ctmp) > 0)
a3f17187 2935 printf_filtered (_("State: %c\n"), ctmp);
dba24537 2936 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2937 printf_filtered (_("Parent process: %d\n"), itmp);
dba24537 2938 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2939 printf_filtered (_("Process group: %d\n"), itmp);
dba24537 2940 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2941 printf_filtered (_("Session id: %d\n"), itmp);
dba24537 2942 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2943 printf_filtered (_("TTY: %d\n"), itmp);
dba24537 2944 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2945 printf_filtered (_("TTY owner process group: %d\n"), itmp);
dba24537 2946 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2947 printf_filtered (_("Flags: 0x%x\n"), itmp);
dba24537 2948 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2949 printf_filtered (_("Minor faults (no memory page): %u\n"),
dba24537
AC
2950 (unsigned int) itmp);
2951 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2952 printf_filtered (_("Minor faults, children: %u\n"),
dba24537
AC
2953 (unsigned int) itmp);
2954 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2955 printf_filtered (_("Major faults (memory page faults): %u\n"),
dba24537
AC
2956 (unsigned int) itmp);
2957 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2958 printf_filtered (_("Major faults, children: %u\n"),
dba24537
AC
2959 (unsigned int) itmp);
2960 if (fscanf (procfile, "%d ", &itmp) > 0)
2961 printf_filtered ("utime: %d\n", itmp);
2962 if (fscanf (procfile, "%d ", &itmp) > 0)
2963 printf_filtered ("stime: %d\n", itmp);
2964 if (fscanf (procfile, "%d ", &itmp) > 0)
2965 printf_filtered ("utime, children: %d\n", itmp);
2966 if (fscanf (procfile, "%d ", &itmp) > 0)
2967 printf_filtered ("stime, children: %d\n", itmp);
2968 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2969 printf_filtered (_("jiffies remaining in current time slice: %d\n"),
dba24537
AC
2970 itmp);
2971 if (fscanf (procfile, "%d ", &itmp) > 0)
2972 printf_filtered ("'nice' value: %d\n", itmp);
2973 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2974 printf_filtered (_("jiffies until next timeout: %u\n"),
dba24537
AC
2975 (unsigned int) itmp);
2976 if (fscanf (procfile, "%u ", &itmp) > 0)
2977 printf_filtered ("jiffies until next SIGALRM: %u\n",
2978 (unsigned int) itmp);
2979 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 2980 printf_filtered (_("start time (jiffies since system boot): %d\n"),
dba24537
AC
2981 itmp);
2982 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2983 printf_filtered (_("Virtual memory size: %u\n"),
dba24537
AC
2984 (unsigned int) itmp);
2985 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2986 printf_filtered (_("Resident set size: %u\n"), (unsigned int) itmp);
dba24537
AC
2987 if (fscanf (procfile, "%u ", &itmp) > 0)
2988 printf_filtered ("rlim: %u\n", (unsigned int) itmp);
2989 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2990 printf_filtered (_("Start of text: 0x%x\n"), itmp);
dba24537 2991 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2992 printf_filtered (_("End of text: 0x%x\n"), itmp);
dba24537 2993 if (fscanf (procfile, "%u ", &itmp) > 0)
a3f17187 2994 printf_filtered (_("Start of stack: 0x%x\n"), itmp);
dba24537
AC
2995#if 0 /* Don't know how architecture-dependent the rest is...
2996 Anyway the signal bitmap info is available from "status". */
2997 if (fscanf (procfile, "%u ", &itmp) > 0) /* FIXME arch? */
a3f17187 2998 printf_filtered (_("Kernel stack pointer: 0x%x\n"), itmp);
dba24537 2999 if (fscanf (procfile, "%u ", &itmp) > 0) /* FIXME arch? */
a3f17187 3000 printf_filtered (_("Kernel instr pointer: 0x%x\n"), itmp);
dba24537 3001 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3002 printf_filtered (_("Pending signals bitmap: 0x%x\n"), itmp);
dba24537 3003 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3004 printf_filtered (_("Blocked signals bitmap: 0x%x\n"), itmp);
dba24537 3005 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3006 printf_filtered (_("Ignored signals bitmap: 0x%x\n"), itmp);
dba24537 3007 if (fscanf (procfile, "%d ", &itmp) > 0)
a3f17187 3008 printf_filtered (_("Catched signals bitmap: 0x%x\n"), itmp);
dba24537 3009 if (fscanf (procfile, "%u ", &itmp) > 0) /* FIXME arch? */
a3f17187 3010 printf_filtered (_("wchan (system call): 0x%x\n"), itmp);
dba24537
AC
3011#endif
3012 fclose (procfile);
3013 }
3014 else
8a3fe4f8 3015 warning (_("unable to open /proc file '%s'"), fname1);
dba24537
AC
3016 }
3017}
3018
10d6c8cd
DJ
3019/* Implement the to_xfer_partial interface for memory reads using the /proc
3020 filesystem. Because we can use a single read() call for /proc, this
3021 can be much more efficient than banging away at PTRACE_PEEKTEXT,
3022 but it doesn't support writes. */
3023
3024static LONGEST
3025linux_proc_xfer_partial (struct target_ops *ops, enum target_object object,
3026 const char *annex, gdb_byte *readbuf,
3027 const gdb_byte *writebuf,
3028 ULONGEST offset, LONGEST len)
dba24537 3029{
10d6c8cd
DJ
3030 LONGEST ret;
3031 int fd;
dba24537
AC
3032 char filename[64];
3033
10d6c8cd 3034 if (object != TARGET_OBJECT_MEMORY || !readbuf)
dba24537
AC
3035 return 0;
3036
3037 /* Don't bother for one word. */
3038 if (len < 3 * sizeof (long))
3039 return 0;
3040
3041 /* We could keep this file open and cache it - possibly one per
3042 thread. That requires some juggling, but is even faster. */
3043 sprintf (filename, "/proc/%d/mem", PIDGET (inferior_ptid));
3044 fd = open (filename, O_RDONLY | O_LARGEFILE);
3045 if (fd == -1)
3046 return 0;
3047
3048 /* If pread64 is available, use it. It's faster if the kernel
3049 supports it (only one syscall), and it's 64-bit safe even on
3050 32-bit platforms (for instance, SPARC debugging a SPARC64
3051 application). */
3052#ifdef HAVE_PREAD64
10d6c8cd 3053 if (pread64 (fd, readbuf, len, offset) != len)
dba24537 3054#else
10d6c8cd 3055 if (lseek (fd, offset, SEEK_SET) == -1 || read (fd, readbuf, len) != len)
dba24537
AC
3056#endif
3057 ret = 0;
3058 else
3059 ret = len;
3060
3061 close (fd);
3062 return ret;
3063}
3064
3065/* Parse LINE as a signal set and add its set bits to SIGS. */
3066
3067static void
3068add_line_to_sigset (const char *line, sigset_t *sigs)
3069{
3070 int len = strlen (line) - 1;
3071 const char *p;
3072 int signum;
3073
3074 if (line[len] != '\n')
8a3fe4f8 3075 error (_("Could not parse signal set: %s"), line);
dba24537
AC
3076
3077 p = line;
3078 signum = len * 4;
3079 while (len-- > 0)
3080 {
3081 int digit;
3082
3083 if (*p >= '0' && *p <= '9')
3084 digit = *p - '0';
3085 else if (*p >= 'a' && *p <= 'f')
3086 digit = *p - 'a' + 10;
3087 else
8a3fe4f8 3088 error (_("Could not parse signal set: %s"), line);
dba24537
AC
3089
3090 signum -= 4;
3091
3092 if (digit & 1)
3093 sigaddset (sigs, signum + 1);
3094 if (digit & 2)
3095 sigaddset (sigs, signum + 2);
3096 if (digit & 4)
3097 sigaddset (sigs, signum + 3);
3098 if (digit & 8)
3099 sigaddset (sigs, signum + 4);
3100
3101 p++;
3102 }
3103}
3104
3105/* Find process PID's pending signals from /proc/pid/status and set
3106 SIGS to match. */
3107
3108void
3109linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored)
3110{
3111 FILE *procfile;
3112 char buffer[MAXPATHLEN], fname[MAXPATHLEN];
3113 int signum;
3114
3115 sigemptyset (pending);
3116 sigemptyset (blocked);
3117 sigemptyset (ignored);
3118 sprintf (fname, "/proc/%d/status", pid);
3119 procfile = fopen (fname, "r");
3120 if (procfile == NULL)
8a3fe4f8 3121 error (_("Could not open %s"), fname);
dba24537
AC
3122
3123 while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
3124 {
3125 /* Normal queued signals are on the SigPnd line in the status
3126 file. However, 2.6 kernels also have a "shared" pending
3127 queue for delivering signals to a thread group, so check for
3128 a ShdPnd line also.
3129
3130 Unfortunately some Red Hat kernels include the shared pending
3131 queue but not the ShdPnd status field. */
3132
3133 if (strncmp (buffer, "SigPnd:\t", 8) == 0)
3134 add_line_to_sigset (buffer + 8, pending);
3135 else if (strncmp (buffer, "ShdPnd:\t", 8) == 0)
3136 add_line_to_sigset (buffer + 8, pending);
3137 else if (strncmp (buffer, "SigBlk:\t", 8) == 0)
3138 add_line_to_sigset (buffer + 8, blocked);
3139 else if (strncmp (buffer, "SigIgn:\t", 8) == 0)
3140 add_line_to_sigset (buffer + 8, ignored);
3141 }
3142
3143 fclose (procfile);
3144}
3145
10d6c8cd
DJ
3146static LONGEST
3147linux_xfer_partial (struct target_ops *ops, enum target_object object,
3148 const char *annex, gdb_byte *readbuf,
3149 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
3150{
3151 LONGEST xfer;
3152
3153 if (object == TARGET_OBJECT_AUXV)
3154 return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
3155 offset, len);
3156
3157 xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
3158 offset, len);
3159 if (xfer != 0)
3160 return xfer;
3161
3162 return super_xfer_partial (ops, object, annex, readbuf, writebuf,
3163 offset, len);
3164}
3165
10d6c8cd
DJ
3166/* Create a prototype generic Linux target. The client can override
3167 it with local methods. */
3168
910122bf
UW
3169static void
3170linux_target_install_ops (struct target_ops *t)
10d6c8cd 3171{
6d8fd2b7
UW
3172 t->to_insert_fork_catchpoint = linux_child_insert_fork_catchpoint;
3173 t->to_insert_vfork_catchpoint = linux_child_insert_vfork_catchpoint;
3174 t->to_insert_exec_catchpoint = linux_child_insert_exec_catchpoint;
3175 t->to_pid_to_exec_file = linux_child_pid_to_exec_file;
10d6c8cd 3176 t->to_post_startup_inferior = linux_child_post_startup_inferior;
6d8fd2b7
UW
3177 t->to_post_attach = linux_child_post_attach;
3178 t->to_follow_fork = linux_child_follow_fork;
10d6c8cd
DJ
3179 t->to_find_memory_regions = linux_nat_find_memory_regions;
3180 t->to_make_corefile_notes = linux_nat_make_corefile_notes;
3181
3182 super_xfer_partial = t->to_xfer_partial;
3183 t->to_xfer_partial = linux_xfer_partial;
910122bf
UW
3184}
3185
3186struct target_ops *
3187linux_target (void)
3188{
3189 struct target_ops *t;
3190
3191 t = inf_ptrace_target ();
3192 linux_target_install_ops (t);
3193
3194 return t;
3195}
3196
3197struct target_ops *
7714d83a 3198linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int))
910122bf
UW
3199{
3200 struct target_ops *t;
3201
3202 t = inf_ptrace_trad_target (register_u_offset);
3203 linux_target_install_ops (t);
10d6c8cd 3204
10d6c8cd
DJ
3205 return t;
3206}
3207
f973ed9c
DJ
3208void
3209linux_nat_add_target (struct target_ops *t)
3210{
f973ed9c
DJ
3211 /* Save the provided single-threaded target. We save this in a separate
3212 variable because another target we've inherited from (e.g. inf-ptrace)
3213 may have saved a pointer to T; we want to use it for the final
3214 process stratum target. */
3215 linux_ops_saved = *t;
3216 linux_ops = &linux_ops_saved;
3217
3218 /* Override some methods for multithreading. */
3219 t->to_attach = linux_nat_attach;
3220 t->to_detach = linux_nat_detach;
3221 t->to_resume = linux_nat_resume;
3222 t->to_wait = linux_nat_wait;
3223 t->to_xfer_partial = linux_nat_xfer_partial;
3224 t->to_kill = linux_nat_kill;
3225 t->to_mourn_inferior = linux_nat_mourn_inferior;
3226 t->to_thread_alive = linux_nat_thread_alive;
3227 t->to_pid_to_str = linux_nat_pid_to_str;
3228 t->to_has_thread_control = tc_schedlock;
3229
3230 /* We don't change the stratum; this target will sit at
3231 process_stratum and thread_db will set at thread_stratum. This
3232 is a little strange, since this is a multi-threaded-capable
3233 target, but we want to be on the stack below thread_db, and we
3234 also want to be used for single-threaded processes. */
3235
3236 add_target (t);
3237
3238 /* TODO: Eliminate this and have libthread_db use
3239 find_target_beneath. */
3240 thread_db_init (t);
3241}
3242
d6b0e80f
AC
3243void
3244_initialize_linux_nat (void)
3245{
3246 struct sigaction action;
dba24537 3247
1bedd215
AC
3248 add_info ("proc", linux_nat_info_proc_cmd, _("\
3249Show /proc process information about any running process.\n\
dba24537
AC
3250Specify any process id, or use the program being debugged by default.\n\
3251Specify any of the following keywords for detailed info:\n\
3252 mappings -- list of mapped memory regions.\n\
3253 stat -- list a bunch of random process info.\n\
3254 status -- list a different bunch of random process info.\n\
1bedd215 3255 all -- list all available /proc info."));
d6b0e80f 3256
d6b0e80f
AC
3257 /* Save the original signal mask. */
3258 sigprocmask (SIG_SETMASK, NULL, &normal_mask);
3259
3260 action.sa_handler = sigchld_handler;
3261 sigemptyset (&action.sa_mask);
58aecb61 3262 action.sa_flags = SA_RESTART;
d6b0e80f
AC
3263 sigaction (SIGCHLD, &action, NULL);
3264
3265 /* Make sure we don't block SIGCHLD during a sigsuspend. */
3266 sigprocmask (SIG_SETMASK, NULL, &suspend_mask);
3267 sigdelset (&suspend_mask, SIGCHLD);
3268
3269 sigemptyset (&blocked_mask);
3270
85c07804
AC
3271 add_setshow_zinteger_cmd ("lin-lwp", no_class, &debug_linux_nat, _("\
3272Set debugging of GNU/Linux lwp module."), _("\
3273Show debugging of GNU/Linux lwp module."), _("\
3274Enables printf debugging output."),
3275 NULL,
920d2a44 3276 show_debug_linux_nat,
85c07804 3277 &setdebuglist, &showdebuglist);
d6b0e80f
AC
3278}
3279\f
3280
3281/* FIXME: kettenis/2000-08-26: The stuff on this page is specific to
3282 the GNU/Linux Threads library and therefore doesn't really belong
3283 here. */
3284
3285/* Read variable NAME in the target and return its value if found.
3286 Otherwise return zero. It is assumed that the type of the variable
3287 is `int'. */
3288
3289static int
3290get_signo (const char *name)
3291{
3292 struct minimal_symbol *ms;
3293 int signo;
3294
3295 ms = lookup_minimal_symbol (name, NULL, NULL);
3296 if (ms == NULL)
3297 return 0;
3298
8e70166d 3299 if (target_read_memory (SYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
d6b0e80f
AC
3300 sizeof (signo)) != 0)
3301 return 0;
3302
3303 return signo;
3304}
3305
3306/* Return the set of signals used by the threads library in *SET. */
3307
3308void
3309lin_thread_get_thread_signals (sigset_t *set)
3310{
3311 struct sigaction action;
3312 int restart, cancel;
3313
3314 sigemptyset (set);
3315
3316 restart = get_signo ("__pthread_sig_restart");
17fbb0bd
DJ
3317 cancel = get_signo ("__pthread_sig_cancel");
3318
3319 /* LinuxThreads normally uses the first two RT signals, but in some legacy
3320 cases may use SIGUSR1/SIGUSR2. NPTL always uses RT signals, but does
3321 not provide any way for the debugger to query the signal numbers -
3322 fortunately they don't change! */
3323
d6b0e80f 3324 if (restart == 0)
17fbb0bd 3325 restart = __SIGRTMIN;
d6b0e80f 3326
d6b0e80f 3327 if (cancel == 0)
17fbb0bd 3328 cancel = __SIGRTMIN + 1;
d6b0e80f
AC
3329
3330 sigaddset (set, restart);
3331 sigaddset (set, cancel);
3332
3333 /* The GNU/Linux Threads library makes terminating threads send a
3334 special "cancel" signal instead of SIGCHLD. Make sure we catch
3335 those (to prevent them from terminating GDB itself, which is
3336 likely to be their default action) and treat them the same way as
3337 SIGCHLD. */
3338
3339 action.sa_handler = sigchld_handler;
3340 sigemptyset (&action.sa_mask);
58aecb61 3341 action.sa_flags = SA_RESTART;
d6b0e80f
AC
3342 sigaction (cancel, &action, NULL);
3343
3344 /* We block the "cancel" signal throughout this code ... */
3345 sigaddset (&blocked_mask, cancel);
3346 sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
3347
3348 /* ... except during a sigsuspend. */
3349 sigdelset (&suspend_mask, cancel);
3350}
ac264b3b 3351