2008-03-04 Paul Brook <paul@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / fork-child.c
CommitLineData
c906108c 1/* Fork a Unix child process, and set up to debug it, for GDB.
74a4fe32 2
6aba47ca 3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
9b254dd1 4 2001, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
74a4fe32 5
c906108c
SS
6 Contributed by Cygnus Support.
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
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
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
c5aa993b 13 (at your option) any later version.
c906108c 14
c5aa993b
JM
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.
c906108c 19
c5aa993b 20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
22
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"
03f2053f 28#include "gdb_wait.h"
74c1b268 29#include "gdb_vfork.h"
c906108c
SS
30#include "gdbcore.h"
31#include "terminal.h"
32#include "gdbthread.h"
c2d11a7d 33#include "command.h" /* for dont_repeat () */
a77053c2 34#include "solib.h"
c906108c
SS
35
36#include <signal.h>
c906108c 37
74a4fe32 38/* This just gets used as a default if we can't find SHELL. */
c906108c 39#define SHELL_FILE "/bin/sh"
c906108c
SS
40
41extern char **environ;
42
74a4fe32
MK
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". */
47
c906108c 48static void
fba45db2 49breakup_args (char *scratch, char **argv)
c906108c
SS
50{
51 char *cp = scratch;
52
c906108c
SS
53 for (;;)
54 {
c906108c
SS
55 /* Scan past leading separators */
56 while (*cp == ' ' || *cp == '\t' || *cp == '\n')
74a4fe32 57 cp++;
c906108c 58
74a4fe32 59 /* Break if at end of string. */
c906108c
SS
60 if (*cp == '\0')
61 break;
62
74a4fe32 63 /* Take an arg. */
c906108c
SS
64 *argv++ = cp;
65
74a4fe32 66 /* Scan for next arg separator. */
c906108c
SS
67 cp = strchr (cp, ' ');
68 if (cp == NULL)
69 cp = strchr (cp, '\t');
70 if (cp == NULL)
71 cp = strchr (cp, '\n');
72
74a4fe32 73 /* No separators => end of string => break. */
c906108c
SS
74 if (cp == NULL)
75 break;
76
74a4fe32 77 /* Replace the separator with a terminator. */
c906108c
SS
78 *cp++ = '\0';
79 }
80
74a4fe32 81 /* Null-terminate the vector. */
c906108c 82 *argv = NULL;
c906108c
SS
83}
84
74a4fe32
MK
85/* When executing a command under the given shell, return non-zero if
86 the '!' character should be escaped when embedded in a quoted
6037b830
JB
87 command-line argument. */
88
89static int
90escape_bang_in_quoted_argument (const char *shell_file)
91{
92 const int shell_file_len = strlen (shell_file);
74a4fe32 93
6037b830
JB
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. */
97
98 if (shell_file_len < 3)
99 return 0;
100
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;
105
106 return 0;
107}
c906108c 108
74a4fe32
MK
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. */
c906108c 114
74a4fe32
MK
115/* This function is NOT reentrant. Some of the variables have been
116 made static to ensure that they survive the vfork call. */
c65ecaf3 117
c906108c 118void
c65ecaf3 119fork_inferior (char *exec_file_arg, char *allargs, char **env,
073063d7 120 void (*traceme_fun) (void), void (*init_trace_fun) (int),
c65ecaf3 121 void (*pre_trace_fun) (void), char *shell_file_arg)
c906108c
SS
122{
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;
c65ecaf3
AC
132 static char *shell_file;
133 static char *exec_file;
c906108c
SS
134 char **save_our_env;
135 int shell = 0;
c65ecaf3 136 static char **argv;
3cb3b8df 137 const char *inferior_io_terminal = get_inferior_io_terminal ();
c906108c 138
74a4fe32
MK
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. */
c65ecaf3 141 exec_file = exec_file_arg;
c906108c
SS
142 if (exec_file == 0)
143 exec_file = get_exec_file (1);
144
74a4fe32
MK
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. */
c65ecaf3 148 shell_file = shell_file_arg;
c906108c
SS
149 if (STARTUP_WITH_SHELL)
150 {
74a4fe32 151 /* Figure out what shell to start up the user program under. */
c906108c
SS
152 if (shell_file == NULL)
153 shell_file = getenv ("SHELL");
154 if (shell_file == NULL)
155 shell_file = default_shell_file;
156 shell = 1;
157 }
158
74a4fe32
MK
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 '. */
c5aa993b 162 len = 5 + 4 * strlen (exec_file) + 1 + strlen (allargs) + 1 + /*slop */ 12;
c906108c
SS
163 shell_command = (char *) alloca (len);
164 shell_command[0] = '\0';
c906108c
SS
165
166 if (!shell)
167 {
74a4fe32
MK
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));
c906108c
SS
174 argv[0] = exec_file;
175 breakup_args (allargs, &argv[1]);
c906108c
SS
176 }
177 else
178 {
74a4fe32 179 /* We're going to call a shell. */
c906108c
SS
180
181 /* Now add exec_file, quoting as necessary. */
182
183 char *p;
184 int need_to_quote;
6037b830 185 const int escape_bang = escape_bang_in_quoted_argument (shell_file);
c906108c
SS
186
187 strcat (shell_command, "exec ");
188
74a4fe32
MK
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. */
c906108c
SS
192 p = exec_file;
193 while (1)
194 {
195 switch (*p)
196 {
197 case '\'':
d8849953 198 case '!':
c906108c
SS
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;
212
213 case '\0':
214 need_to_quote = 0;
215 goto end_scan;
216
217 default:
218 break;
219 }
220 ++p;
221 }
222 end_scan:
223 if (need_to_quote)
224 {
225 strcat (shell_command, "'");
226 for (p = exec_file; *p != '\0'; ++p)
227 {
228 if (*p == '\'')
229 strcat (shell_command, "'\\''");
6037b830 230 else if (*p == '!' && escape_bang)
d8849953 231 strcat (shell_command, "\\!");
c906108c
SS
232 else
233 strncat (shell_command, p, 1);
234 }
235 strcat (shell_command, "'");
236 }
237 else
238 strcat (shell_command, exec_file);
239
240 strcat (shell_command, " ");
241 strcat (shell_command, allargs);
c906108c
SS
242 }
243
74a4fe32 244 /* On some systems an exec will fail if the executable is open. */
c906108c
SS
245 close_exec_file ();
246
247 /* Retain a copy of our environment variables, since the child will
74a4fe32 248 replace the value of environ and if we're vforked, we have to
c906108c
SS
249 restore it. */
250 save_our_env = environ;
251
252 /* Tell the terminal handling subsystem what tty we plan to run on;
253 it will just record the information for later. */
c906108c
SS
254 new_tty_prefork (inferior_io_terminal);
255
256 /* It is generally good practice to flush any possible pending stdio
74a4fe32
MK
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. */
c906108c
SS
259 gdb_flush (gdb_stdout);
260 gdb_flush (gdb_stderr);
261
74a4fe32
MK
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... */
c906108c
SS
265 if (pre_trace_fun != NULL)
266 (*pre_trace_fun) ();
267
3919e12c 268 /* Create the child process. Since the child process is going to
7a0b0196 269 exec(3) shortly afterwards, try to reduce the overhead by
3919e12c
MK
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)
c906108c
SS
280 pid = fork ();
281 else
282 pid = vfork ();
c906108c
SS
283
284 if (pid < 0)
e2e0b3e5 285 perror_with_name (("vfork"));
c906108c
SS
286
287 if (pid == 0)
288 {
289 if (debug_fork)
290 sleep (debug_fork);
291
292 /* Run inferior in a separate process group. */
293 debug_setpgrp = gdb_setpgid ();
294 if (debug_setpgrp == -1)
295 perror ("setpgrp failed in child");
296
74a4fe32
MK
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). */
c906108c
SS
300 new_tty ();
301
302 /* Changing the signal handlers for the inferior after
c5aa993b
JM
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. */
c906108c
SS
307
308 /* "Trace me, Dr. Memory!" */
309 (*traceme_fun) ();
74a4fe32 310
c906108c 311 /* The call above set this process (the "child") as debuggable
74a4fe32
MK
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! */
c906108c
SS
319
320 /* There is no execlpe call, so we have to set the environment
c5aa993b
JM
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. */
c906108c
SS
325 environ = env;
326
74a4fe32 327 /* If we decided above to start up with a shell, we exec the
9dcbb931
DJ
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>". */
c906108c
SS
331 if (shell)
332 {
c906108c 333 execlp (shell_file, shell_file, "-c", shell_command, (char *) 0);
c906108c 334
74a4fe32 335 /* If we get here, it's an error. */
c906108c
SS
336 fprintf_unfiltered (gdb_stderr, "Cannot exec %s: %s.\n", shell_file,
337 safe_strerror (errno));
338 gdb_flush (gdb_stderr);
339 _exit (0177);
340 }
341 else
342 {
74a4fe32
MK
343 /* Otherwise, we directly exec the target program with
344 execvp. */
c906108c
SS
345 int i;
346 char *errstring;
cce74817 347
c906108c
SS
348 execvp (exec_file, argv);
349
74a4fe32 350 /* If we get here, it's an error. */
c906108c
SS
351 errstring = safe_strerror (errno);
352 fprintf_unfiltered (gdb_stderr, "Cannot exec %s ", exec_file);
353
354 i = 1;
355 while (argv[i] != NULL)
356 {
357 if (i != 1)
358 fprintf_unfiltered (gdb_stderr, " ");
359 fprintf_unfiltered (gdb_stderr, "%s", argv[i]);
360 i++;
361 }
362 fprintf_unfiltered (gdb_stderr, ".\n");
74a4fe32
MK
363#if 0
364 /* This extra info seems to be useless. */
365 fprintf_unfiltered (gdb_stderr, "Got error %s.\n", errstring);
366#endif
c906108c
SS
367 gdb_flush (gdb_stderr);
368 _exit (0177);
369 }
370 }
371
372 /* Restore our environment in case a vforked child clob'd it. */
373 environ = save_our_env;
374
375 init_thread_list ();
376
74a4fe32
MK
377 /* Needed for wait_for_inferior stuff below. */
378 inferior_ptid = pid_to_ptid (pid);
c906108c
SS
379
380 /* Now that we have a child process, make it our target, and
74a4fe32
MK
381 initialize anything target-vector-specific that needs
382 initializing. */
c906108c
SS
383 (*init_trace_fun) (pid);
384
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. */
c906108c
SS
388}
389
c906108c
SS
390/* Accept NTRAPS traps from the inferior. */
391
392void
fba45db2 393startup_inferior (int ntraps)
c906108c
SS
394{
395 int pending_execs = ntraps;
74a4fe32 396 int terminal_initted = 0;
c906108c 397
74a4fe32
MK
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. */
c906108c
SS
401
402 clear_proceed_status ();
403
404 init_wait_for_inferior ();
405
c906108c
SS
406 inferior_ignoring_leading_exec_events =
407 target_reported_exec_events_per_exec_call () - 1;
408
c906108c
SS
409 while (1)
410 {
74a4fe32 411 /* Make wait_for_inferior be quiet. */
c0236d92 412 stop_soon = STOP_QUIETLY;
ae123ec6 413 wait_for_inferior (1);
c906108c
SS
414 if (stop_signal != TARGET_SIGNAL_TRAP)
415 {
74a4fe32
MK
416 /* Let shell child handle its own signals in its own way.
417 FIXME: what if child has exited? Must exit loop
418 somehow. */
c906108c
SS
419 resume (0, stop_signal);
420 }
421 else
422 {
423 /* We handle SIGTRAP, however; it means child did an exec. */
424 if (!terminal_initted)
425 {
74a4fe32
MK
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. */
c906108c
SS
430
431 /* Set up the "saved terminal modes" of the inferior
c5aa993b 432 based on what modes we are starting it with. */
c906108c
SS
433 target_terminal_init ();
434
435 /* Install inferior's terminal modes. */
436 target_terminal_inferior ();
437
438 terminal_initted = 1;
439 }
440
74a4fe32 441 if (--pending_execs == 0)
c906108c
SS
442 break;
443
74a4fe32 444 resume (0, TARGET_SIGNAL_0); /* Just make it go on. */
c906108c
SS
445 }
446 }
c0236d92 447 stop_soon = NO_STOP_QUIETLY;
c906108c 448}
This page took 0.568813 seconds and 4 git commands to generate.