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