Wed Oct 27 13:43:07 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
+ * fork-child.c (fork_inferior): Set inferior_pid before calling
+ init_trace_fun. Move the code which gets us through the shell
+ to new function startup_inferior.
+ * inferior.h: Declare startup_inferior.
+ * procfs.c (procfs_init_inferior), inftarg.c (ptrace_him):
+ Call startup_inferior.
+ * m3-nat.c (m3_trace_him): Call intercept_exec_calls.
+ * config/nm-m3.h: Don't define STARTUP_INFERIOR.
+ * config/i386/tm-i386m3.h, config/ns32k/tm-ns32k.h,
+ config/mips/tm-mipsm3.h: Don't define START_INFERIOR_TRAPS_EXPECTED.
+
* m68k-stub.c: Change vector 13 from SIGFPE to SIGBUS.
Tue Oct 26 22:05:03 1993 Jim Kingdon (kingdon@deneb.cygnus.com)
/* we can do it */
#define ATTACH_DETACH 1
-/* number of traps that happen between exec'ing the shell
- * to run an inferior, and when we finally get to
- * the inferior code. This is 2 on most implementations.
- *
- * On Mach 3.0 it is the number of exec() system calls before
- * the task contains the debugged program. It is always 2 when
- * using the shell to start up the program.
- */
-#undef START_INFERIOR_TRAPS_EXPECTED
-#define START_INFERIOR_TRAPS_EXPECTED 2
-
/* Define this if the C compiler puts an underscore at the front
of external names before giving them to the linker. */
#include "mips/tm-mips.h"
-/*
- * On Mach 3.0 this is the number of exec() system calls before
- * the task contains the debugged program. It is always 2 when
- * using the shell to start up the program.
- */
-#undef START_INFERIOR_TRAPS_EXPECTED
-#define START_INFERIOR_TRAPS_EXPECTED 2
-
/* Address of end of user stack space.
* for MACH, see <machine/vmparam.h>
*/
*/
extern int must_suspend_thread;
-/* Startup the inferior task and suspend it after the correct code is loaded */
-
-#define STARTUP_INFERIOR(x) intercept_exec_calls(x)
-
#define PREPARE_TO_PROCEED(select_it) mach3_prepare_to_proceed(select_it)
/* Try to get the privileged host port for authentication to machid
/* we can do it */
#define ATTACH_DETACH 1
-/* number of traps that happen between exec'ing the shell
- * to run an inferior, and when we finally get to
- * the inferior code. This is 2 on most implementations.
- *
- * On Mach 3.0 it is the number of exec() system calls before
- * the task contains the debugged program. It is always 2 when
- * using the shell to start up the program.
- */
-#undef START_INFERIOR_TRAPS_EXPECTED
-#define START_INFERIOR_TRAPS_EXPECTED 2
-
#define INVALID_FLOAT(p, s) isa_NAN(p, s)
/* Address of end of stack space.
char *shell_file;
static char default_shell_file[] = SHELL_FILE;
int len;
- int pending_execs;
- int terminal_initted;
/* Set debug_fork then attach to the child while it sleeps, to debug. */
static int debug_fork = 0;
/* This is set to the result of setpgrp, which if vforked, will be visible
init_thread_list();
+ inferior_pid = pid; /* Needed for wait_for_inferior stuff below */
+
/* Now that we have a child process, make it our target, and
initialize anything target-vector-specific that needs initializing. */
(*init_trace_fun)(pid);
+ /* We are now in the child process of interest, having exec'd the
+ correct program, and are poised at the first instruction of the
+ new program. */
+#ifdef SOLIB_CREATE_INFERIOR_HOOK
+ SOLIB_CREATE_INFERIOR_HOOK (pid);
+#endif
+}
+
+/* Accept NTRAPS traps from the inferior. */
+
+void
+startup_inferior (ntraps)
+ int ntraps;
+{
+ int pending_execs = ntraps;
+ int terminal_initted;
+
/* The process was started by the fork that created it,
but it will have stopped one instruction after execing the shell.
Here we must get it up to actual execution of the real program. */
- inferior_pid = pid; /* Needed for wait_for_inferior stuff below */
-
clear_proceed_status ();
- /* We will get a trace trap after one instruction.
- Continue it automatically. Eventually (after shell does an exec)
- it will get another trace trap. Then insert breakpoints and continue. */
-
-#ifdef START_INFERIOR_TRAPS_EXPECTED
- pending_execs = START_INFERIOR_TRAPS_EXPECTED;
-#else
- pending_execs = 2;
-#endif
-
init_wait_for_inferior ();
terminal_initted = 0;
}
}
stop_soon_quietly = 0;
-
- /* We are now in the child process of interest, having exec'd the
- correct program, and are poised at the first instruction of the
- new program. */
-#ifdef SOLIB_CREATE_INFERIOR_HOOK
- SOLIB_CREATE_INFERIOR_HOOK (pid);
-#endif
}
setup_exception_port ();
xx_debug ("Now the debugged task is created\n");
+
+ /* One trap to exec the shell, one to exec the program being debugged. */
+ intercept_exec_calls (2);
}
setup_exception_port ()
create_procinfo (pid);
add_thread (pid); /* Setup initial thread */
+
+ /* One trap to exec the shell, one to exec the program being debugged. */
+ startup_inferior (2);
}
/*