* infrun.c (wait_for_inferior): Add treat_exec_as_sigtrap parameter
[platform/upstream/binutils.git] / gdb / fork-child.c
1 /* Fork a Unix child process, and set up to debug it, for GDB.
2
3    Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
4    2001, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
5
6    Contributed by Cygnus Support.
7
8    This file is part of GDB.
9
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.
14
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.
19
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/>.  */
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"
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"
35
36 #include <signal.h>
37
38 /* This just gets used as a default if we can't find SHELL.  */
39 #define SHELL_FILE "/bin/sh"
40
41 extern char **environ;
42
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
48 static void
49 breakup_args (char *scratch, char **argv)
50 {
51   char *cp = scratch;
52
53   for (;;)
54     {
55       /* Scan past leading separators */
56       while (*cp == ' ' || *cp == '\t' || *cp == '\n')
57         cp++;
58
59       /* Break if at end of string.  */
60       if (*cp == '\0')
61         break;
62
63       /* Take an arg.  */
64       *argv++ = cp;
65
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');
72
73       /* No separators => end of string => break.  */
74       if (cp == NULL)
75         break;
76
77       /* Replace the separator with a terminator.  */
78       *cp++ = '\0';
79     }
80
81   /* Null-terminate the vector.  */
82   *argv = NULL;
83 }
84
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.  */
88
89 static int
90 escape_bang_in_quoted_argument (const char *shell_file)
91 {
92   const int shell_file_len = strlen (shell_file);
93
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 }
108
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.  */
114
115 /* This function is NOT reentrant.  Some of the variables have been
116    made static to ensure that they survive the vfork call.  */
117
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)
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;
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 ();
138
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);
144
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)
150     {
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;
157     }
158
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';
165
166   if (!shell)
167     {
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]);
176     }
177   else
178     {
179       /* We're going to call a shell.  */
180
181       /* Now add exec_file, quoting as necessary.  */
182
183       char *p;
184       int need_to_quote;
185       const int escape_bang = escape_bang_in_quoted_argument (shell_file);
186
187       strcat (shell_command, "exec ");
188
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)
194         {
195           switch (*p)
196             {
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;
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, "'\\''");
230               else if (*p == '!' && escape_bang)
231                 strcat (shell_command, "\\!");
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);
242     }
243
244   /* On some systems an exec will fail if the executable is open.  */
245   close_exec_file ();
246
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;
251
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);
255
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);
261
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) ();
267
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 ();
283
284   if (pid < 0)
285     perror_with_name (("vfork"));
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
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 ();
301
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.  */
307
308       /* "Trace me, Dr. Memory!" */
309       (*traceme_fun) ();
310
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!  */
319
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;
326
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)
332         {
333           execlp (shell_file, shell_file, "-c", shell_command, (char *) 0);
334
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);
340         }
341       else
342         {
343           /* Otherwise, we directly exec the target program with
344              execvp.  */
345           int i;
346           char *errstring;
347
348           execvp (exec_file, argv);
349
350           /* If we get here, it's an error.  */
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");
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);
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
377   /* Needed for wait_for_inferior stuff below.  */
378   inferior_ptid = pid_to_ptid (pid);
379
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);
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.  */
388 }
389
390 /* Accept NTRAPS traps from the inferior.  */
391
392 void
393 startup_inferior (int ntraps)
394 {
395   int pending_execs = ntraps;
396   int terminal_initted = 0;
397
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.  */
401
402   clear_proceed_status ();
403
404   init_wait_for_inferior ();
405
406   inferior_ignoring_leading_exec_events =
407     target_reported_exec_events_per_exec_call () - 1;
408
409   while (1)
410     {
411       /* Make wait_for_inferior be quiet. */
412       stop_soon = STOP_QUIETLY;
413       wait_for_inferior (1);
414       if (stop_signal != TARGET_SIGNAL_TRAP)
415         {
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);
420         }
421       else
422         {
423           /* We handle SIGTRAP, however; it means child did an exec.  */
424           if (!terminal_initted)
425             {
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.  */
430
431               /* Set up the "saved terminal modes" of the inferior
432                  based on what modes we are starting it with.  */
433               target_terminal_init ();
434
435               /* Install inferior's terminal modes.  */
436               target_terminal_inferior ();
437
438               terminal_initted = 1;
439             }
440
441           if (--pending_execs == 0)
442             break;
443
444           resume (0, TARGET_SIGNAL_0);  /* Just make it go on.  */
445         }
446     }
447   stop_soon = NO_STOP_QUIETLY;
448 }