gnu_create_inferior (char *exec_file, char *allargs, char **env)
gnu_create_inferior (char *exec_file, char *allargs, char **env, int from_tty)
gnu_create_inferior (char *exec_file, char *allargs, char **env){  struct inf *inf = cur_inf ();  void trace_me ()  {    /* We're in the child; make this process stop as soon as it execs.  */    inf_debug (inf, "tracing self");    if (ptrace (PTRACE_TRACEME) != 0)      error ("ptrace (PTRACE_TRACEME) failed!");  }  void attach_to_child (int pid)  {    /* Attach to the now stopped child, which is actually a shell...  */    inf_debug (inf, "attaching to child: %d", pid);    inf_attach (inf, pid);    attach_flag = 0;    push_target (&gnu_ops);    inf->pending_execs = 2;    inf->nomsg = 1;    inf->traced = 1;    /* Now let the child run again, knowing that it will stop immediately       because of the ptrace. */    inf_resume (inf);    inferior_ptid = pid_to_ptid (inf_pick_first_thread ());    startup_inferior (inf->pending_execs);  }  inf_debug (inf, "creating inferior");  fork_inferior (exec_file, allargs, env, trace_me, attach_to_child,		 NULL, NULL);  inf_validate_procinfo (inf);  inf_update_signal_thread (inf);  inf_set_traced (inf, inf->want_signals);  /* Execing the process will have trashed our exception ports; steal them     back (or make sure they're restored if the user wants that).  */  if (inf->want_exceptions)    inf_steal_exc_ports (inf);  else    inf_restore_exc_ports (inf);  /* Here we go!  */  proceed ((CORE_ADDR) -1, 0, 0);}