summaryrefslogtreecommitdiff
path: root/gdb/fork-child.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2011-09-22 10:22:26 +0000
committerTristan Gingold <gingold@adacore.com>2011-09-22 10:22:26 +0000
commit04b16148d032c27c7c01ba41ee21a125b008e806 (patch)
tree3dffda0bed77e42ed7fdc959efd3db62bbffb87d /gdb/fork-child.c
parent60d38c725cfd9c9bc8a557d8a1aa7bf4afabcab0 (diff)
downloadgdb-04b16148d032c27c7c01ba41ee21a125b008e806.tar.gz
2011-09-22 Tristan Gingold <gingold@adacore.com>
* fork-child.c (fork_inferior): Add exec_fun parameter. Call exec_fun or execvp. * inferior.h: Adjust prototype. * gnu-nat.c (gnu_create_inferior): Adjust fork_inferior call. * inf-ttrace.c (inf_ttrace_create_inferior): Ditto. * inf-ptrace.c (inf_ptrace_create_inferior): Ditto. * procfs.c (procfs_create_inferior): Ditto. * darwin-nat.c (darwin_execvp): New function. (darwin_create_inferior): Use it.
Diffstat (limited to 'gdb/fork-child.c')
-rw-r--r--gdb/fork-child.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gdb/fork-child.c b/gdb/fork-child.c
index 5dbf1f750fb..e6408f49558 100644
--- a/gdb/fork-child.c
+++ b/gdb/fork-child.c
@@ -115,6 +115,7 @@ escape_bang_in_quoted_argument (const char *shell_file)
pid. EXEC_FILE is the file to run. ALLARGS is a string containing
the arguments to the program. ENV is the environment vector to
pass. SHELL_FILE is the shell file, or NULL if we should pick
+ one. EXEC_FUN is the exec(2) function to use, or NULL for the default
one. */
/* This function is NOT reentrant. Some of the variables have been
@@ -123,7 +124,9 @@ escape_bang_in_quoted_argument (const char *shell_file)
int
fork_inferior (char *exec_file_arg, char *allargs, char **env,
void (*traceme_fun) (void), void (*init_trace_fun) (int),
- void (*pre_trace_fun) (void), char *shell_file_arg)
+ void (*pre_trace_fun) (void), char *shell_file_arg,
+ void (*exec_fun)(const char *file, char * const *argv,
+ char * const *env))
{
int pid;
static char default_shell_file[] = SHELL_FILE;
@@ -359,7 +362,10 @@ fork_inferior (char *exec_file_arg, char *allargs, char **env,
path to find $SHELL. Rich Pixley says so, and I agree. */
environ = env;
- execvp (argv[0], argv);
+ if (exec_fun != NULL)
+ (*exec_fun) (argv[0], argv, env);
+ else
+ execvp (argv[0], argv);
/* If we get here, it's an error. */
save_errno = errno;