Non-stop linux native.
[deliverable/binutils-gdb.git] / gdb / linux-fork.c
1 /* GNU/Linux native-dependent code for debugging multiple forks.
2
3 Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "inferior.h"
22 #include "regcache.h"
23 #include "gdbcmd.h"
24 #include "infcall.h"
25 #include "gdb_assert.h"
26 #include "gdb_string.h"
27 #include "linux-fork.h"
28 #include "linux-nat.h"
29
30 #include <sys/ptrace.h>
31 #include "gdb_wait.h"
32 #include <sys/param.h>
33 #include "gdb_dirent.h"
34 #include <ctype.h>
35
36 struct fork_info *fork_list;
37 static int highest_fork_num;
38
39 /* Prevent warning from -Wmissing-prototypes. */
40 extern void _initialize_linux_fork (void);
41
42 int detach_fork = 1; /* Default behavior is to detach
43 newly forked processes (legacy). */
44
45 /* Fork list data structure: */
46 struct fork_info
47 {
48 struct fork_info *next;
49 ptid_t ptid;
50 int num; /* Convenient handle (GDB fork id) */
51 struct regcache *savedregs; /* Convenient for info fork, saves
52 having to actually switch contexts. */
53 int clobber_regs; /* True if we should restore saved regs. */
54 ULONGEST pc; /* PC for info fork. */
55 off_t *filepos; /* Set of open file descriptors' offsets. */
56 int maxfd;
57 };
58
59 /* Fork list methods: */
60
61 extern int
62 forks_exist_p (void)
63 {
64 return (fork_list != NULL);
65 }
66
67 /* Add a fork to internal fork list.
68 Called from linux child_follow_fork. */
69
70 extern struct fork_info *
71 add_fork (pid_t pid)
72 {
73 struct fork_info *fp;
74
75 if (fork_list == NULL && pid != PIDGET (inferior_ptid))
76 {
77 /* Special case -- if this is the first fork in the list
78 (the list is hitherto empty), and if this new fork is
79 NOT the current inferior_ptid, then add inferior_ptid
80 first, as a special zeroeth fork id. */
81 highest_fork_num = -1;
82 add_fork (PIDGET (inferior_ptid)); /* safe recursion */
83 }
84
85 fp = XZALLOC (struct fork_info);
86 fp->ptid = ptid_build (pid, pid, 0);
87 fp->num = ++highest_fork_num;
88 fp->next = fork_list;
89 fork_list = fp;
90 return fp;
91 }
92
93 static void
94 free_fork (struct fork_info *fp)
95 {
96 /* Notes on step-resume breakpoints: since this is a concern for
97 threads, let's convince ourselves that it's not a concern for
98 forks. There are two ways for a fork_info to be created. First,
99 by the checkpoint command, in which case we're at a gdb prompt
100 and there can't be any step-resume breakpoint. Second, by a fork
101 in the user program, in which case we *may* have stepped into the
102 fork call, but regardless of whether we follow the parent or the
103 child, we will return to the same place and the step-resume
104 breakpoint, if any, will take care of itself as usual. And
105 unlike threads, we do not save a private copy of the step-resume
106 breakpoint -- so we're OK. */
107
108 if (fp)
109 {
110 if (fp->savedregs)
111 regcache_xfree (fp->savedregs);
112 if (fp->filepos)
113 xfree (fp->filepos);
114 xfree (fp);
115 }
116 }
117
118 static void
119 delete_fork (ptid_t ptid)
120 {
121 struct fork_info *fp, *fpprev;
122
123 fpprev = NULL;
124
125 for (fp = fork_list; fp; fpprev = fp, fp = fp->next)
126 if (ptid_equal (fp->ptid, ptid))
127 break;
128
129 if (!fp)
130 return;
131
132 if (fpprev)
133 fpprev->next = fp->next;
134 else
135 fork_list = fp->next;
136
137 free_fork (fp);
138
139 /* Special case: if there is now only one process in the list,
140 and if it is (hopefully!) the current inferior_ptid, then
141 remove it, leaving the list empty -- we're now down to the
142 default case of debugging a single process. */
143 if (fork_list != NULL && fork_list->next == NULL &&
144 ptid_equal (fork_list->ptid, inferior_ptid))
145 {
146 /* Last fork -- delete from list and handle as solo process
147 (should be a safe recursion). */
148 delete_fork (inferior_ptid);
149 }
150 }
151
152 /* Find a fork_info by matching PTID. */
153 static struct fork_info *
154 find_fork_ptid (ptid_t ptid)
155 {
156 struct fork_info *fp;
157
158 for (fp = fork_list; fp; fp = fp->next)
159 if (ptid_equal (fp->ptid, ptid))
160 return fp;
161
162 return NULL;
163 }
164
165 /* Find a fork_info by matching ID. */
166 static struct fork_info *
167 find_fork_id (int num)
168 {
169 struct fork_info *fp;
170
171 for (fp = fork_list; fp; fp = fp->next)
172 if (fp->num == num)
173 return fp;
174
175 return NULL;
176 }
177
178 /* Find a fork_info by matching pid. */
179 extern struct fork_info *
180 find_fork_pid (pid_t pid)
181 {
182 struct fork_info *fp;
183
184 for (fp = fork_list; fp; fp = fp->next)
185 if (pid == ptid_get_pid (fp->ptid))
186 return fp;
187
188 return NULL;
189 }
190
191 static ptid_t
192 fork_id_to_ptid (int num)
193 {
194 struct fork_info *fork = find_fork_id (num);
195 if (fork)
196 return fork->ptid;
197 else
198 return pid_to_ptid (-1);
199 }
200
201 static void
202 init_fork_list (void)
203 {
204 struct fork_info *fp, *fpnext;
205
206 if (!fork_list)
207 return;
208
209 for (fp = fork_list; fp; fp = fpnext)
210 {
211 fpnext = fp->next;
212 free_fork (fp);
213 }
214
215 fork_list = NULL;
216 }
217
218 /* Fork list <-> gdb interface. */
219
220 /* Utility function for fork_load/fork_save.
221 Calls lseek in the (current) inferior process. */
222
223 static off_t
224 call_lseek (int fd, off_t offset, int whence)
225 {
226 char exp[80];
227
228 snprintf (&exp[0], sizeof (exp), "lseek (%d, %ld, %d)",
229 fd, (long) offset, whence);
230 return (off_t) parse_and_eval_long (&exp[0]);
231 }
232
233 /* Load infrun state for the fork PTID. */
234
235 static void
236 fork_load_infrun_state (struct fork_info *fp)
237 {
238 extern void nullify_last_target_wait_ptid ();
239 int i;
240
241 inferior_ptid = fp->ptid;
242
243 linux_nat_switch_fork (inferior_ptid);
244
245 if (fp->savedregs && fp->clobber_regs)
246 regcache_cpy (get_current_regcache (), fp->savedregs);
247
248 registers_changed ();
249 reinit_frame_cache ();
250
251 stop_pc = read_pc ();
252 nullify_last_target_wait_ptid ();
253
254 /* Now restore the file positions of open file descriptors. */
255 if (fp->filepos)
256 {
257 for (i = 0; i <= fp->maxfd; i++)
258 if (fp->filepos[i] != (off_t) -1)
259 call_lseek (i, fp->filepos[i], SEEK_SET);
260 /* NOTE: I can get away with using SEEK_SET and SEEK_CUR because
261 this is native-only. If it ever has to be cross, we'll have
262 to rethink this. */
263 }
264 }
265
266 /* Save infrun state for the fork PTID.
267 Exported for use by linux child_follow_fork. */
268
269 extern void
270 fork_save_infrun_state (struct fork_info *fp, int clobber_regs)
271 {
272 char path[MAXPATHLEN];
273 struct dirent *de;
274 DIR *d;
275
276 if (fp->savedregs)
277 regcache_xfree (fp->savedregs);
278
279 fp->savedregs = regcache_dup (get_current_regcache ());
280 fp->clobber_regs = clobber_regs;
281 fp->pc = read_pc ();
282
283 if (clobber_regs)
284 {
285 /* Now save the 'state' (file position) of all open file descriptors.
286 Unfortunately fork does not take care of that for us... */
287 snprintf (path, MAXPATHLEN, "/proc/%ld/fd", (long) PIDGET (fp->ptid));
288 if ((d = opendir (path)) != NULL)
289 {
290 long tmp;
291
292 fp->maxfd = 0;
293 while ((de = readdir (d)) != NULL)
294 {
295 /* Count open file descriptors (actually find highest
296 numbered). */
297 tmp = strtol (&de->d_name[0], NULL, 10);
298 if (fp->maxfd < tmp)
299 fp->maxfd = tmp;
300 }
301 /* Allocate array of file positions. */
302 fp->filepos = xrealloc (fp->filepos,
303 (fp->maxfd + 1) * sizeof (*fp->filepos));
304
305 /* Initialize to -1 (invalid). */
306 for (tmp = 0; tmp <= fp->maxfd; tmp++)
307 fp->filepos[tmp] = -1;
308
309 /* Now find actual file positions. */
310 rewinddir (d);
311 while ((de = readdir (d)) != NULL)
312 if (isdigit (de->d_name[0]))
313 {
314 tmp = strtol (&de->d_name[0], NULL, 10);
315 fp->filepos[tmp] = call_lseek (tmp, 0, SEEK_CUR);
316 }
317 closedir (d);
318 }
319 }
320 }
321
322 /* Kill 'em all, let God sort 'em out... */
323
324 extern void
325 linux_fork_killall (void)
326 {
327 /* Walk list and kill every pid. No need to treat the
328 current inferior_ptid as special (we do not return a
329 status for it) -- however any process may be a child
330 or a parent, so may get a SIGCHLD from a previously
331 killed child. Wait them all out. */
332 struct fork_info *fp;
333 pid_t pid, ret;
334 int status;
335
336 for (fp = fork_list; fp; fp = fp->next)
337 {
338 pid = PIDGET (fp->ptid);
339 do {
340 /* Use SIGKILL instead of PTRACE_KILL because the former works even
341 if the thread is running, while the later doesn't. */
342 kill (pid, SIGKILL);
343 ret = waitpid (pid, &status, 0);
344 /* We might get a SIGCHLD instead of an exit status. This is
345 aggravated by the first kill above - a child has just
346 died. MVS comment cut-and-pasted from linux-nat. */
347 } while (ret == pid && WIFSTOPPED (status));
348 }
349 init_fork_list (); /* Clear list, prepare to start fresh. */
350 }
351
352 /* The current inferior_ptid has exited, but there are other viable
353 forks to debug. Delete the exiting one and context-switch to the
354 first available. */
355
356 extern void
357 linux_fork_mourn_inferior (void)
358 {
359 /* Wait just one more time to collect the inferior's exit status.
360 Do not check whether this succeeds though, since we may be
361 dealing with a process that we attached to. Such a process will
362 only report its exit status to its original parent. */
363 int status;
364
365 waitpid (ptid_get_pid (inferior_ptid), &status, 0);
366
367 /* OK, presumably inferior_ptid is the one who has exited.
368 We need to delete that one from the fork_list, and switch
369 to the next available fork. */
370 delete_fork (inferior_ptid);
371
372 /* There should still be a fork - if there's only one left,
373 delete_fork won't remove it, because we haven't updated
374 inferior_ptid yet. */
375 gdb_assert (fork_list);
376
377 fork_load_infrun_state (fork_list);
378 printf_filtered (_("[Switching to %s]\n"),
379 target_pid_to_str (inferior_ptid));
380
381 /* If there's only one fork, switch back to non-fork mode. */
382 if (fork_list->next == NULL)
383 delete_fork (inferior_ptid);
384 }
385
386 /* Fork list <-> user interface. */
387
388 static void
389 delete_fork_command (char *args, int from_tty)
390 {
391 ptid_t ptid;
392
393 if (!args || !*args)
394 error (_("Requires argument (fork/checkpoint id to delete)"));
395
396 ptid = fork_id_to_ptid (parse_and_eval_long (args));
397 if (ptid_equal (ptid, minus_one_ptid))
398 error (_("No such fork/checkpoint id, %s"), args);
399
400 if (ptid_equal (ptid, inferior_ptid))
401 error (_("Please switch to another fork/checkpoint before deleting the current one"));
402
403 if (ptrace (PTRACE_KILL, PIDGET (ptid), 0, 0))
404 error (_("Unable to kill pid %s"), target_tid_to_str (ptid));
405
406 if (from_tty)
407 printf_filtered (_("Killed %s\n"), target_pid_to_str (ptid));
408
409 delete_fork (ptid);
410 }
411
412 static void
413 detach_fork_command (char *args, int from_tty)
414 {
415 ptid_t ptid;
416
417 if (!args || !*args)
418 error (_("Requires argument (fork id to detach)"));
419
420 ptid = fork_id_to_ptid (parse_and_eval_long (args));
421 if (ptid_equal (ptid, minus_one_ptid))
422 error (_("No such fork id, %s"), args);
423
424 if (ptid_equal (ptid, inferior_ptid))
425 error (_("Please switch to another fork before detaching the current one"));
426
427 if (ptrace (PTRACE_DETACH, PIDGET (ptid), 0, 0))
428 error (_("Unable to detach %s"), target_pid_to_str (ptid));
429
430 if (from_tty)
431 printf_filtered (_("Detached %s\n"), target_pid_to_str (ptid));
432
433 delete_fork (ptid);
434 }
435
436 /* Print information about currently known forks. */
437
438 static void
439 info_forks_command (char *arg, int from_tty)
440 {
441 struct frame_info *cur_frame;
442 struct symtab_and_line sal;
443 struct symtab *cur_symtab;
444 struct fork_info *fp;
445 int cur_line;
446 ULONGEST pc;
447 int requested = -1;
448 struct fork_info *printed = NULL;
449
450 if (arg && *arg)
451 requested = (int) parse_and_eval_long (arg);
452
453 for (fp = fork_list; fp; fp = fp->next)
454 {
455 if (requested > 0 && fp->num != requested)
456 continue;
457
458 printed = fp;
459 if (ptid_equal (fp->ptid, inferior_ptid))
460 {
461 printf_filtered ("* ");
462 pc = read_pc ();
463 }
464 else
465 {
466 printf_filtered (" ");
467 pc = fp->pc;
468 }
469 printf_filtered ("%d %s", fp->num, target_pid_to_str (fp->ptid));
470 if (fp->num == 0)
471 printf_filtered (_(" (main process)"));
472 printf_filtered (_(" at "));
473 fputs_filtered (paddress (pc), gdb_stdout);
474
475 sal = find_pc_line (pc, 0);
476 if (sal.symtab)
477 {
478 char *tmp = strrchr (sal.symtab->filename, '/');
479
480 if (tmp)
481 printf_filtered (_(", file %s"), tmp + 1);
482 else
483 printf_filtered (_(", file %s"), sal.symtab->filename);
484 }
485 if (sal.line)
486 printf_filtered (_(", line %d"), sal.line);
487 if (!sal.symtab && !sal.line)
488 {
489 struct minimal_symbol *msym;
490
491 msym = lookup_minimal_symbol_by_pc (pc);
492 if (msym)
493 printf_filtered (", <%s>", SYMBOL_LINKAGE_NAME (msym));
494 }
495
496 putchar_filtered ('\n');
497 }
498 if (printed == NULL)
499 {
500 if (requested > 0)
501 printf_filtered (_("No fork number %d.\n"), requested);
502 else
503 printf_filtered (_("No forks.\n"));
504 }
505 }
506
507 /* Save/restore mode variable 'detach_fork':
508 We need to temporarily take over this mode variable, while
509 preserving the user-specified state, and make sure that it
510 gets restored in case of error.
511
512 The int pointer that we use comes from the caller, so we can
513 be called more than once (even though currently we don't need to). */
514
515 static void
516 restore_detach_fork (void *arg)
517 {
518 detach_fork = *(int *) arg;
519 }
520
521 static struct cleanup *
522 save_detach_fork (int *saved_val)
523 {
524 *saved_val = detach_fork;
525 return make_cleanup (restore_detach_fork, (void *) saved_val);
526 }
527
528 static void
529 checkpoint_command (char *args, int from_tty)
530 {
531 struct target_waitstatus last_target_waitstatus;
532 ptid_t last_target_ptid;
533 struct value *fork_fn = NULL, *ret;
534 struct fork_info *fp;
535 pid_t retpid;
536 struct cleanup *old_chain;
537 long i;
538 /* Make this temp var static, 'cause it's used in the error context. */
539 static int temp_detach_fork;
540
541 /* Remove breakpoints, so that they are not inserted
542 in the forked process. */
543 remove_breakpoints ();
544
545 /* Make the inferior fork, record its (and gdb's) state. */
546
547 if (lookup_minimal_symbol ("fork", NULL, NULL) != NULL)
548 fork_fn = find_function_in_inferior ("fork");
549 if (!fork_fn)
550 if (lookup_minimal_symbol ("_fork", NULL, NULL) != NULL)
551 fork_fn = find_function_in_inferior ("fork");
552 if (!fork_fn)
553 error (_("checkpoint: can't find fork function in inferior."));
554
555 ret = value_from_longest (builtin_type_int, 0);
556 old_chain = save_detach_fork (&temp_detach_fork);
557 detach_fork = 0;
558 ret = call_function_by_hand (fork_fn, 0, &ret);
559 do_cleanups (old_chain);
560 if (!ret) /* Probably can't happen. */
561 error (_("checkpoint: call_function_by_hand returned null."));
562
563 retpid = value_as_long (ret);
564 get_last_target_status (&last_target_ptid, &last_target_waitstatus);
565 if (from_tty)
566 {
567 int parent_pid;
568
569 printf_filtered (_("checkpoint: fork returned pid %ld.\n"),
570 (long) retpid);
571 if (info_verbose)
572 {
573 parent_pid = ptid_get_lwp (last_target_ptid);
574 if (parent_pid == 0)
575 parent_pid = ptid_get_pid (last_target_ptid);
576 printf_filtered (_(" gdb says parent = %ld.\n"),
577 (long) parent_pid);
578 }
579 }
580
581 fp = find_fork_pid (retpid);
582 if (!fp)
583 error (_("Failed to find new fork"));
584 fork_save_infrun_state (fp, 1);
585 insert_breakpoints ();
586 }
587
588 static void
589 linux_fork_context (struct fork_info *newfp, int from_tty)
590 {
591 /* Now we attempt to switch processes. */
592 struct fork_info *oldfp = find_fork_ptid (inferior_ptid);
593 ptid_t ptid;
594 int id, i;
595
596 if (!newfp)
597 error (_("No such fork/process"));
598
599 if (!oldfp)
600 oldfp = add_fork (ptid_get_pid (inferior_ptid));
601
602 fork_save_infrun_state (oldfp, 1);
603 remove_breakpoints ();
604 fork_load_infrun_state (newfp);
605 insert_breakpoints ();
606
607 printf_filtered (_("Switching to %s\n"),
608 target_pid_to_str (inferior_ptid));
609
610 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
611 }
612
613 /* Switch inferior process (fork) context, by process id. */
614 static void
615 process_command (char *args, int from_tty)
616 {
617 struct fork_info *fp;
618
619 if (!args || !*args)
620 error (_("Requires argument (process id to switch to)"));
621
622 if ((fp = find_fork_pid (parse_and_eval_long (args))) == NULL)
623 error (_("Not found: process id %s"), args);
624
625 linux_fork_context (fp, from_tty);
626 }
627
628 /* Switch inferior process (fork) context, by fork id. */
629 static void
630 fork_command (char *args, int from_tty)
631 {
632 struct fork_info *fp;
633
634 if (!args || !*args)
635 error (_("Requires argument (fork id to switch to)"));
636
637 if ((fp = find_fork_id (parse_and_eval_long (args))) == NULL)
638 error (_("Not found: fork id %s"), args);
639
640 linux_fork_context (fp, from_tty);
641 }
642
643 /* Switch inferior process (fork) context, by checkpoint id. */
644 static void
645 restart_command (char *args, int from_tty)
646 {
647 struct fork_info *fp;
648
649 if (!args || !*args)
650 error (_("Requires argument (checkpoint id to restart)"));
651
652 if ((fp = find_fork_id (parse_and_eval_long (args))) == NULL)
653 error (_("Not found: checkpoint id %s"), args);
654
655 linux_fork_context (fp, from_tty);
656 }
657
658 void
659 _initialize_linux_fork (void)
660 {
661 init_fork_list ();
662
663 /* Set/show detach-on-fork: user-settable mode. */
664
665 add_setshow_boolean_cmd ("detach-on-fork", class_obscure, &detach_fork, _("\
666 Set whether gdb will detach the child of a fork."), _("\
667 Show whether gdb will detach the child of a fork."), _("\
668 Tells gdb whether to detach the child of a fork."),
669 NULL, NULL, &setlist, &showlist);
670
671 /* Set/show restart-auto-finish: user-settable count. Causes the
672 first "restart" of a fork to do some number of "finish" commands
673 before returning to user.
674
675 Useful because otherwise the virgin fork process will be stopped
676 somewhere in the un-interesting fork system call. */
677
678 /* Checkpoint command: create a fork of the inferior process
679 and set it aside for later debugging. */
680
681 add_com ("checkpoint", class_obscure, checkpoint_command, _("\
682 Fork a duplicate process (experimental)."));
683
684 /* Restart command: restore the context of a specified fork
685 process. May be used for "program forks" as well as for
686 "debugger forks" (checkpoints). */
687
688 add_com ("restart", class_obscure, restart_command, _("\
689 restart <n>: restore program context from a checkpoint.\n\
690 Argument 'n' is checkpoint ID, as displayed by 'info checkpoints'."));
691
692 /* Delete checkpoint command: kill the process and remove it from
693 fork list. */
694
695 add_cmd ("checkpoint", class_obscure, delete_fork_command, _("\
696 Delete a fork/checkpoint (experimental)."),
697 &deletelist);
698
699 /* Detach checkpoint command: release the process to run independently,
700 and remove it from the fork list. */
701
702 add_cmd ("checkpoint", class_obscure, detach_fork_command, _("\
703 Detach from a fork/checkpoint (experimental)."),
704 &detachlist);
705
706 /* Info checkpoints command: list all forks/checkpoints
707 currently under gdb's control. */
708
709 add_info ("checkpoints", info_forks_command,
710 _("IDs of currently known forks/checkpoints."));
711
712 /* Command aliases (let "fork" and "checkpoint" be used
713 interchangeably). */
714
715 add_alias_cmd ("fork", "checkpoint", class_obscure, 1, &deletelist);
716 add_alias_cmd ("fork", "checkpoint", class_obscure, 1, &detachlist);
717 add_info_alias ("forks", "checkpoints", 0);
718
719 /* "fork <n>" (by analogy to "thread <n>"). */
720 add_com ("fork", class_obscure, fork_command, _("\
721 fork <n>: Switch between forked processes.\n\
722 Argument 'n' is fork ID, as displayed by 'info forks'."));
723
724 /* "process <proc id>" as opposed to "fork <fork id>". */
725 add_com ("process", class_obscure, process_command, _("\
726 process <pid>: Switch between forked processes.\n\
727 Argument 'pid' is process ID, as displayed by 'info forks' or 'shell ps'."));
728 }
This page took 0.055261 seconds and 5 git commands to generate.