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