1 /* Fork a Unix child process, and set up to debug it, for GDB.
3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
4 2001, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
6 Contributed by Cygnus Support.
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "gdb_string.h"
25 #include "frame.h" /* required by inferior.h */
29 #include "gdb_vfork.h"
32 #include "gdbthread.h"
33 #include "command.h" /* for dont_repeat () */
38 /* This just gets used as a default if we can't find SHELL. */
39 #define SHELL_FILE "/bin/sh"
41 extern char **environ
;
43 /* Break up SCRATCH into an argument vector suitable for passing to
44 execvp and store it in ARGV. E.g., on "run a b c d" this routine
45 would get as input the string "a b c d", and as output it would
46 fill in ARGV with the four arguments "a", "b", "c", "d". */
49 breakup_args (char *scratch
, char **argv
)
55 /* Scan past leading separators */
56 while (*cp
== ' ' || *cp
== '\t' || *cp
== '\n')
59 /* Break if at end of string. */
66 /* Scan for next arg separator. */
67 cp
= strchr (cp
, ' ');
69 cp
= strchr (cp
, '\t');
71 cp
= strchr (cp
, '\n');
73 /* No separators => end of string => break. */
77 /* Replace the separator with a terminator. */
81 /* Null-terminate the vector. */
85 /* When executing a command under the given shell, return non-zero if
86 the '!' character should be escaped when embedded in a quoted
87 command-line argument. */
90 escape_bang_in_quoted_argument (const char *shell_file
)
92 const int shell_file_len
= strlen (shell_file
);
94 /* Bang should be escaped only in C Shells. For now, simply check
95 that the shell name ends with 'csh', which covers at least csh
96 and tcsh. This should be good enough for now. */
98 if (shell_file_len
< 3)
101 if (shell_file
[shell_file_len
- 3] == 'c'
102 && shell_file
[shell_file_len
- 2] == 's'
103 && shell_file
[shell_file_len
- 1] == 'h')
109 /* Start an inferior Unix child process and sets inferior_ptid to its
110 pid. EXEC_FILE is the file to run. ALLARGS is a string containing
111 the arguments to the program. ENV is the environment vector to
112 pass. SHELL_FILE is the shell file, or NULL if we should pick
115 /* This function is NOT reentrant. Some of the variables have been
116 made static to ensure that they survive the vfork call. */
119 fork_inferior (char *exec_file_arg
, char *allargs
, char **env
,
120 void (*traceme_fun
) (void), void (*init_trace_fun
) (int),
121 void (*pre_trace_fun
) (void), char *shell_file_arg
)
125 static char default_shell_file
[] = SHELL_FILE
;
127 /* Set debug_fork then attach to the child while it sleeps, to debug. */
128 static int debug_fork
= 0;
129 /* This is set to the result of setpgrp, which if vforked, will be visible
130 to you in the parent process. It's only used by humans for debugging. */
131 static int debug_setpgrp
= 657473;
132 static char *shell_file
;
133 static char *exec_file
;
137 const char *inferior_io_terminal
= get_inferior_io_terminal ();
139 /* If no exec file handed to us, get it from the exec-file command
140 -- with a good, common error message if none is specified. */
141 exec_file
= exec_file_arg
;
143 exec_file
= get_exec_file (1);
145 /* STARTUP_WITH_SHELL is defined in inferior.h. If 0,e we'll just
146 do a fork/exec, no shell, so don't bother figuring out what
148 shell_file
= shell_file_arg
;
149 if (STARTUP_WITH_SHELL
)
151 /* Figure out what shell to start up the user program under. */
152 if (shell_file
== NULL
)
153 shell_file
= getenv ("SHELL");
154 if (shell_file
== NULL
)
155 shell_file
= default_shell_file
;
159 /* Multiplying the length of exec_file by 4 is to account for the
160 fact that it may expand when quoted; it is a worst-case number
161 based on every character being '. */
162 len
= 5 + 4 * strlen (exec_file
) + 1 + strlen (allargs
) + 1 + /*slop */ 12;
163 shell_command
= (char *) alloca (len
);
164 shell_command
[0] = '\0';
168 /* We're going to call execvp. Create argument vector.
169 Calculate an upper bound on the length of the vector by
170 assuming that every other character is a separate
172 int argc
= (strlen (allargs
) + 1) / 2 + 2;
173 argv
= (char **) xmalloc (argc
* sizeof (*argv
));
175 breakup_args (allargs
, &argv
[1]);
179 /* We're going to call a shell. */
181 /* Now add exec_file, quoting as necessary. */
185 const int escape_bang
= escape_bang_in_quoted_argument (shell_file
);
187 strcat (shell_command
, "exec ");
189 /* Quoting in this style is said to work with all shells. But
190 csh on IRIX 4.0.1 can't deal with it. So we only quote it if
225 strcat (shell_command
, "'");
226 for (p
= exec_file
; *p
!= '\0'; ++p
)
229 strcat (shell_command
, "'\\''");
230 else if (*p
== '!' && escape_bang
)
231 strcat (shell_command
, "\\!");
233 strncat (shell_command
, p
, 1);
235 strcat (shell_command
, "'");
238 strcat (shell_command
, exec_file
);
240 strcat (shell_command
, " ");
241 strcat (shell_command
, allargs
);
244 /* On some systems an exec will fail if the executable is open. */
247 /* Retain a copy of our environment variables, since the child will
248 replace the value of environ and if we're vforked, we have to
250 save_our_env
= environ
;
252 /* Tell the terminal handling subsystem what tty we plan to run on;
253 it will just record the information for later. */
254 new_tty_prefork (inferior_io_terminal
);
256 /* It is generally good practice to flush any possible pending stdio
257 output prior to doing a fork, to avoid the possibility of both
258 the parent and child flushing the same data after the fork. */
259 gdb_flush (gdb_stdout
);
260 gdb_flush (gdb_stderr
);
262 /* If there's any initialization of the target layers that must
263 happen to prepare to handle the child we're about fork, do it
265 if (pre_trace_fun
!= NULL
)
268 /* Create the child process. Since the child process is going to
269 exec(3) shortly afterwards, try to reduce the overhead by
270 calling vfork(2). However, if PRE_TRACE_FUN is non-null, it's
271 likely that this optimization won't work since there's too much
272 work to do between the vfork(2) and the exec(3). This is known
273 to be the case on ttrace(2)-based HP-UX, where some handshaking
274 between parent and child needs to happen between fork(2) and
275 exec(2). However, since the parent is suspended in the vforked
276 state, this doesn't work. Also note that the vfork(2) call might
277 actually be a call to fork(2) due to the fact that autoconf will
278 ``#define vfork fork'' on certain platforms. */
279 if (pre_trace_fun
|| debug_fork
)
285 perror_with_name (("vfork"));
292 /* Run inferior in a separate process group. */
293 debug_setpgrp
= gdb_setpgid ();
294 if (debug_setpgrp
== -1)
295 perror ("setpgrp failed in child");
297 /* Ask the tty subsystem to switch to the one we specified
298 earlier (or to share the current terminal, if none was
302 /* Changing the signal handlers for the inferior after
303 a vfork can also change them for the superior, so we don't mess
304 with signals here. See comments in
305 initialize_signals for how we get the right signal handlers
308 /* "Trace me, Dr. Memory!" */
311 /* The call above set this process (the "child") as debuggable
312 by the original gdb process (the "parent"). Since processes
313 (unlike people) can have only one parent, if you are debugging
314 gdb itself (and your debugger is thus _already_ the
315 controller/parent for this child), code from here on out is
316 undebuggable. Indeed, you probably got an error message
317 saying "not parent". Sorry; you'll have to use print
320 /* There is no execlpe call, so we have to set the environment
321 for our child in the global variable. If we've vforked, this
322 clobbers the parent, but environ is restored a few lines down
323 in the parent. By the way, yes we do need to look down the
324 path to find $SHELL. Rich Pixley says so, and I agree. */
327 /* If we decided above to start up with a shell, we exec the
328 shell, "-c" says to interpret the next arg as a shell command
329 to execute, and this command is "exec <target-program>
333 execlp (shell_file
, shell_file
, "-c", shell_command
, (char *) 0);
335 /* If we get here, it's an error. */
336 fprintf_unfiltered (gdb_stderr
, "Cannot exec %s: %s.\n", shell_file
,
337 safe_strerror (errno
));
338 gdb_flush (gdb_stderr
);
343 /* Otherwise, we directly exec the target program with
348 execvp (exec_file
, argv
);
350 /* If we get here, it's an error. */
351 errstring
= safe_strerror (errno
);
352 fprintf_unfiltered (gdb_stderr
, "Cannot exec %s ", exec_file
);
355 while (argv
[i
] != NULL
)
358 fprintf_unfiltered (gdb_stderr
, " ");
359 fprintf_unfiltered (gdb_stderr
, "%s", argv
[i
]);
362 fprintf_unfiltered (gdb_stderr
, ".\n");
364 /* This extra info seems to be useless. */
365 fprintf_unfiltered (gdb_stderr
, "Got error %s.\n", errstring
);
367 gdb_flush (gdb_stderr
);
372 /* Restore our environment in case a vforked child clob'd it. */
373 environ
= save_our_env
;
377 /* Needed for wait_for_inferior stuff below. */
378 inferior_ptid
= pid_to_ptid (pid
);
380 /* Now that we have a child process, make it our target, and
381 initialize anything target-vector-specific that needs
383 (*init_trace_fun
) (pid
);
385 /* We are now in the child process of interest, having exec'd the
386 correct program, and are poised at the first instruction of the
390 /* Accept NTRAPS traps from the inferior. */
393 startup_inferior (int ntraps
)
395 int pending_execs
= ntraps
;
396 int terminal_initted
= 0;
398 /* The process was started by the fork that created it, but it will
399 have stopped one instruction after execing the shell. Here we
400 must get it up to actual execution of the real program. */
402 clear_proceed_status ();
404 init_wait_for_inferior ();
406 inferior_ignoring_leading_exec_events
=
407 target_reported_exec_events_per_exec_call () - 1;
411 /* Make wait_for_inferior be quiet. */
412 stop_soon
= STOP_QUIETLY
;
413 wait_for_inferior (1);
414 if (stop_signal
!= TARGET_SIGNAL_TRAP
)
416 /* Let shell child handle its own signals in its own way.
417 FIXME: what if child has exited? Must exit loop
419 resume (0, stop_signal
);
423 /* We handle SIGTRAP, however; it means child did an exec. */
424 if (!terminal_initted
)
426 /* Now that the child has exec'd we know it has already
427 set its process group. On POSIX systems, tcsetpgrp
428 will fail with EPERM if we try it before the child's
431 /* Set up the "saved terminal modes" of the inferior
432 based on what modes we are starting it with. */
433 target_terminal_init ();
435 /* Install inferior's terminal modes. */
436 target_terminal_inferior ();
438 terminal_initted
= 1;
441 if (--pending_execs
== 0)
444 resume (0, TARGET_SIGNAL_0
); /* Just make it go on. */
447 stop_soon
= NO_STOP_QUIETLY
;