Update
[gdb.git] / gdb / fork-child.c
blob15b8245feed89b32a6b97e47a5ef33fe942e3484
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/>. */
23 #include "defs.h"
24 #include "gdb_string.h"
25 #include "frame.h" /* required by inferior.h */
26 #include "inferior.h"
27 #include "target.h"
28 #include "gdb_wait.h"
29 #include "gdb_vfork.h"
30 #include "gdbcore.h"
31 #include "terminal.h"
32 #include "gdbthread.h"
33 #include "command.h" /* for dont_repeat () */
34 #include "solib.h"
36 #include <signal.h>
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". */
48 static void
49 breakup_args (char *scratch, char **argv)
51 char *cp = scratch;
53 for (;;)
55 /* Scan past leading separators */
56 while (*cp == ' ' || *cp == '\t' || *cp == '\n')
57 cp++;
59 /* Break if at end of string. */
60 if (*cp == '\0')
61 break;
63 /* Take an arg. */
64 *argv++ = cp;
66 /* Scan for next arg separator. */
67 cp = strchr (cp, ' ');
68 if (cp == NULL)
69 cp = strchr (cp, '\t');
70 if (cp == NULL)
71 cp = strchr (cp, '\n');
73 /* No separators => end of string => break. */
74 if (cp == NULL)
75 break;
77 /* Replace the separator with a terminator. */
78 *cp++ = '\0';
81 /* Null-terminate the vector. */
82 *argv = NULL;
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. */
89 static int
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)
99 return 0;
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')
104 return 1;
106 return 0;
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
113 one. */
115 /* This function is NOT reentrant. Some of the variables have been
116 made static to ensure that they survive the vfork call. */
118 void
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)
123 int pid;
124 char *shell_command;
125 static char default_shell_file[] = SHELL_FILE;
126 int len;
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;
134 char **save_our_env;
135 int shell = 0;
136 static char **argv;
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;
142 if (exec_file == 0)
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
147 shell. */
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;
156 shell = 1;
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';
166 if (!shell)
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
171 argument. */
172 int argc = (strlen (allargs) + 1) / 2 + 2;
173 argv = (char **) xmalloc (argc * sizeof (*argv));
174 argv[0] = exec_file;
175 breakup_args (allargs, &argv[1]);
177 else
179 /* We're going to call a shell. */
181 /* Now add exec_file, quoting as necessary. */
183 char *p;
184 int need_to_quote;
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
191 we need to. */
192 p = exec_file;
193 while (1)
195 switch (*p)
197 case '\'':
198 case '!':
199 case '"':
200 case '(':
201 case ')':
202 case '$':
203 case '&':
204 case ';':
205 case '<':
206 case '>':
207 case ' ':
208 case '\n':
209 case '\t':
210 need_to_quote = 1;
211 goto end_scan;
213 case '\0':
214 need_to_quote = 0;
215 goto end_scan;
217 default:
218 break;
220 ++p;
222 end_scan:
223 if (need_to_quote)
225 strcat (shell_command, "'");
226 for (p = exec_file; *p != '\0'; ++p)
228 if (*p == '\'')
229 strcat (shell_command, "'\\''");
230 else if (*p == '!' && escape_bang)
231 strcat (shell_command, "\\!");
232 else
233 strncat (shell_command, p, 1);
235 strcat (shell_command, "'");
237 else
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. */
245 close_exec_file ();
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
249 restore it. */
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
264 now... */
265 if (pre_trace_fun != NULL)
266 (*pre_trace_fun) ();
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)
280 pid = fork ();
281 else
282 pid = vfork ();
284 if (pid < 0)
285 perror_with_name (("vfork"));
287 if (pid == 0)
289 if (debug_fork)
290 sleep (debug_fork);
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
299 specified). */
300 new_tty ();
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
306 for the inferior. */
308 /* "Trace me, Dr. Memory!" */
309 (*traceme_fun) ();
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
318 statements! */
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. */
325 environ = env;
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>
330 <args>". */
331 if (shell)
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);
339 _exit (0177);
341 else
343 /* Otherwise, we directly exec the target program with
344 execvp. */
345 int i;
346 char *errstring;
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);
354 i = 1;
355 while (argv[i] != NULL)
357 if (i != 1)
358 fprintf_unfiltered (gdb_stderr, " ");
359 fprintf_unfiltered (gdb_stderr, "%s", argv[i]);
360 i++;
362 fprintf_unfiltered (gdb_stderr, ".\n");
363 #if 0
364 /* This extra info seems to be useless. */
365 fprintf_unfiltered (gdb_stderr, "Got error %s.\n", errstring);
366 #endif
367 gdb_flush (gdb_stderr);
368 _exit (0177);
372 /* Restore our environment in case a vforked child clob'd it. */
373 environ = save_our_env;
375 init_thread_list ();
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
382 initializing. */
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
387 new program. */
390 /* Accept NTRAPS traps from the inferior. */
392 void
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;
409 while (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
418 somehow. */
419 resume (0, stop_signal);
421 else
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
429 setpgid. */
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)
442 break;
444 resume (0, TARGET_SIGNAL_0); /* Just make it go on. */
447 stop_soon = NO_STOP_QUIETLY;