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