* win32-nat.c: Perform various gcc warning cleanups.
authorChristopher Faylor <me+cygwin@cgf.cx>
Sun, 6 Aug 2000 23:25:32 +0000 (23:25 +0000)
committerChristopher Faylor <me+cygwin@cgf.cx>
Sun, 6 Aug 2000 23:25:32 +0000 (23:25 +0000)
(safe_symbol_file_add_cleanup): Reset stdout to saved stdout, not stderr.
(dll_symbol_command): Pass OBJF_USERLOADED to safe_symbol_file_add.
(get_child_debug_event): Always reset last_sig.  Always reset inferior pid
appropriately.
(do_initial_child_stuff): New function.  Called when attaching or starting a
new inferior process.
(child_attach): Use do_initial_child_stuff.
(child_create_inferior): Ditto.
* config/i386/cygwin.mh (NAT_FILE): Set to modern location.
* config/i386/tm-cygwin.h: Define ATTACH_NO_WAIT.

gdb/ChangeLog
gdb/config/i386/cygwin.mh
gdb/config/i386/tm-cygwin.h
gdb/win32-nat.c
gdb/windows-nat.c

index 3e711dcf9f0a01086e6f99838a93cba88ee35615..29e240123bd6a340889a27349863681dee21480e 100644 (file)
@@ -1,3 +1,18 @@
+2000-08-06  Christopher Faylor  <cgf@cygnus.com>
+
+       * win32-nat.c: Perform various gcc warning cleanups.
+       (safe_symbol_file_add_cleanup): Reset stdout to saved stdout, not
+       stderr.
+       (dll_symbol_command): Pass OBJF_USERLOADED to safe_symbol_file_add.
+       (get_child_debug_event): Always reset last_sig.  Always reset inferior
+       pid appropriately.
+       (do_initial_child_stuff): New function.  Called when attaching or starting
+       a new inferior process.
+       (child_attach): Use do_initial_child_stuff.
+       (child_create_inferior): Ditto.
+       * config/i386/cygwin.mh (NAT_FILE): Set to modern location.
+       * config/i386/tm-cygwin.h: Define ATTACH_NO_WAIT.
+
 2000-08-05  Eli Zaretskii <eliz@is.elta.co.il>
 
        * go32-nat.c: (go32_wait): If child_cwd[] is empty, initialize
index 8eb0d6d2cc211ae5abdbc99471455da1c871e07a..54126f0fa76cce76a71f89d8ee6b4ec1b9eeeb7b 100644 (file)
@@ -2,5 +2,5 @@ MH_CFLAGS=
 XM_FILE=xm-cygwin.h
 XDEPFILES=
 NATDEPFILES= win32-nat.o
-NAT_FILE=../nm-empty.h
+NAT_FILE=../none/nm-none.h
 XM_CLIBS=
index 5ae97bbf8722eddd75e0080c20947dbad3fba1c3..bc3068d623555ca1fc8e4ea49988582c21561117 100644 (file)
@@ -30,6 +30,7 @@
 extern CORE_ADDR skip_trampoline_code (CORE_ADDR pc, char *name);
 #endif
 
+#define ATTACH_NO_WAIT
 #define SOLIB_ADD(filename, from_tty, targ) child_solib_add(filename, from_tty, targ)
 #define SOLIB_LOADED_LIBRARY_PATHNAME(pid) child_solib_loaded_library_pathname(pid)
 #define CLEAR_SOLIB child_clear_solib
index e7c14757097d128f75a3e8f305c3a526abb27464..88a7660cd0861ab97fd6a30b91c32889ef9f5c10 100644 (file)
@@ -54,8 +54,11 @@ extern int (*ui_loop_hook) (int signo);
    following which never should have been in the generic Win32 API
    headers in the first place since they were our own invention... */
 #ifndef _GNU_H_WINDOWS_H
-#define FLAG_TRACE_BIT 0x100
-#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+enum
+{
+  FLAG_TRACE_BIT = 0x100,
+  CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+};
 #endif
 
 /* The string sent by cygwin when it processes a signal.
@@ -441,13 +444,14 @@ safe_symbol_file_add_stub (void *argv)
 static void
 safe_symbol_file_add_cleanup (void *p)
 {
-#define sp ((struct safe_symbol_file_add_args *)p)
+# define sp ((struct safe_symbol_file_add_args *)p)
   gdb_flush (gdb_stderr);
   gdb_flush (gdb_stdout);
   ui_file_delete (gdb_stderr);
   ui_file_delete (gdb_stdout);
   gdb_stderr = sp->err;
-  gdb_stdout = sp->err;
+  gdb_stdout = sp->out;
+# undef sp
 }
 
 /* symbol_file_add wrapper that prevents errors from being displayed. */
@@ -499,9 +503,8 @@ handle_load_dll (PTR dummy ATTRIBUTE_UNUSED)
   DWORD dll_name_ptr;
   DWORD done;
   char dll_buf[MAX_PATH + 1];
-  struct so_stuff *so, *solast;
+  struct so_stuff *so;
   char *dll_name = NULL;
-  DWORD dll_base = 0;
   int len;
   char *p;
 
@@ -593,7 +596,7 @@ handle_load_dll (PTR dummy ATTRIBUTE_UNUSED)
 
 /* Return name of last loaded DLL. */
 char *
-child_solib_loaded_library_pathname (int pid)
+child_solib_loaded_library_pathname (int pid ATTRIBUTE_UNUSED)
 {
   return !solib_end || !solib_end->name[0]? NULL : solib_end->name;
 }
@@ -617,7 +620,7 @@ child_clear_solibs (void)
 
 /* Add DLL symbol information. */
 void
-child_solib_add (char *filename, int from_tty, struct target_ops *t)
+child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED, struct target_ops *t ATTRIBUTE_UNUSED)
 {
   struct section_addr_info section_addrs;
 
@@ -638,21 +641,19 @@ child_solib_add (char *filename, int from_tty, struct target_ops *t)
 
 /* Load DLL symbol info. */
 void
-dll_symbol_command (char *args, int from_tty)
+dll_symbol_command (char *args, int from_tty ATTRIBUTE_UNUSED)
 {
-  struct section_addr_info section_addrs;
-
   dont_repeat ();
   
   if (args == NULL)
     error ("dll-symbols requires a file name");
 
-  safe_symbol_file_add (args, 0, NULL, 0, OBJF_SHARED);
+  safe_symbol_file_add (args, 0, NULL, 0, OBJF_SHARED | OBJF_USERLOADED);
 } 
 
 /* List currently loaded DLLs. */
 void
-info_dll_command (char *ignore, int from_tty)
+info_dll_command (char *ignore ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED)
 {
   struct so_stuff *so = &solib_start;
 
@@ -710,8 +711,6 @@ handle_exception (struct target_waitstatus *ourstatus)
   /* Record the context of the current thread */
   th = thread_rec (current_event.dwThreadId, -1);
 
-  last_sig = 0;
-
   switch (code)
     {
     case EXCEPTION_ACCESS_VIOLATION:
@@ -800,13 +799,14 @@ child_continue (DWORD continue_status, int id)
 static int
 get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourstatus)
 {
-  int breakout = 0;
   BOOL debug_event;
   DWORD continue_status, event_code;
   thread_info *th = NULL;
   static thread_info dummy_thread_info;
   int retval = 0;
 
+  last_sig = 0;
+
   if (!(debug_event = WaitForDebugEvent (&current_event, 1000)))
     goto out;
 
@@ -848,13 +848,15 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
                     "CREATE_PROCESS_DEBUG_EVENT"));
       current_process_handle = current_event.u.CreateProcessInfo.hProcess;
 
-      main_thread_id = inferior_pid = current_event.dwThreadId;
+      main_thread_id = current_event.dwThreadId;
       /* Add the main thread */
+#if 0
       th = child_add_thread (current_event.dwProcessId,
                             current_event.u.CreateProcessInfo.hProcess);
-      th = child_add_thread (inferior_pid,
+#endif
+      th = child_add_thread (main_thread_id,
                             current_event.u.CreateProcessInfo.hThread);
-      retval = ourstatus->value.related_pid = current_event.dwProcessId;
+      retval = ourstatus->value.related_pid = current_event.dwThreadId;
       break;
 
     case EXIT_PROCESS_DEBUG_EVENT:
@@ -865,7 +867,7 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
       ourstatus->kind = TARGET_WAITKIND_EXITED;
       ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode;
       CloseHandle (current_process_handle);
-      retval = current_event.dwProcessId;
+      retval = main_thread_id;
       break;
 
     case LOAD_DLL_DEBUG_EVENT:
@@ -877,7 +879,7 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
       registers_changed ();    /* mark all regs invalid */
       ourstatus->kind = TARGET_WAITKIND_LOADED;
       ourstatus->value.integer = 0;
-      retval = current_event.dwProcessId;
+      retval = main_thread_id;
       break;
 
     case UNLOAD_DLL_DEBUG_EVENT:
@@ -902,8 +904,9 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
                     (unsigned) current_event.dwThreadId,
                     "OUTPUT_DEBUG_STRING_EVENT"));
       if (handle_output_debug_string ( ourstatus))
-       retval = current_event.dwProcessId;
+       retval = main_thread_id;
       break;
+
     default:
       printf_unfiltered ("gdb: kernel event for pid=%ld tid=%ld\n",
                         (DWORD) current_event.dwProcessId,
@@ -916,7 +919,10 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
   if (!retval)
     CHECK (child_continue (continue_status, -1));
   else
-    current_thread = th ?: thread_rec (current_event.dwThreadId, TRUE);
+    {
+      current_thread = th ?: thread_rec (current_event.dwThreadId, TRUE);
+      inferior_pid = retval;
+    }
 
 out:
   return retval;
@@ -950,44 +956,70 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
     }
 }
 
+static void
+do_initial_child_stuff (DWORD pid)
+{
+  extern int stop_after_trap;
+
+  last_sig = 0;
+  event_count = 0;
+  exception_count = 0;
+  current_event.dwProcessId = pid;
+  memset (&current_event, 0, sizeof (current_event));
+  push_target (&child_ops);
+  child_init_thread_list ();
+  child_clear_solibs ();
+  clear_proceed_status ();
+  init_wait_for_inferior ();
+
+  target_terminal_init ();
+  target_terminal_inferior ();
+
+  while (1)
+    {
+      stop_after_trap = 1;
+      wait_for_inferior ();
+      if (stop_signal != TARGET_SIGNAL_TRAP)
+       resume (0, stop_signal);
+      else
+       break;
+    }
+  stop_after_trap = 0;
+  return;
+}
+
 /* Attach to process PID, then initialize for debugging it.  */
 
 static void
 child_attach (char *args, int from_tty)
 {
   BOOL ok;
+  DWORD pid = strtoul (args, 0, 0);
 
   if (!args)
     error_no_arg ("process-id to attach");
 
-  current_event.dwProcessId = strtoul (args, 0, 0);
-
-  ok = DebugActiveProcess (current_event.dwProcessId);
+  ok = DebugActiveProcess (pid);
 
   if (!ok)
     error ("Can't attach to process.");
 
-  exception_count = 0;
-  event_count = 0;
-
-  child_init_thread_list ();
-  child_clear_solibs ();
-
   if (from_tty)
     {
       char *exec_file = (char *) get_exec_file (0);
 
       if (exec_file)
        printf_unfiltered ("Attaching to program `%s', %s\n", exec_file,
-                          target_pid_to_str (current_event.dwProcessId));
+                          target_pid_to_str (pid));
       else
        printf_unfiltered ("Attaching to %s\n",
-                          target_pid_to_str (current_event.dwProcessId));
+                          target_pid_to_str (pid));
 
       gdb_flush (gdb_stdout);
     }
 
-  push_target (&child_ops);
+  do_initial_child_stuff (pid);
+  target_terminal_ours ();
 }
 
 static void
@@ -1037,11 +1069,9 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
   int i;
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
-  struct target_waitstatus dummy;
   BOOL ret;
   DWORD flags;
   char *args;
-  extern int stop_after_trap;
 
   if (!exec_file)
     error ("No executable specified, use `target exec'.\n");
@@ -1152,32 +1182,7 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
   if (!ret)
     error ("Error creating process %s, (error %d)\n", exec_file, GetLastError ());
 
-  exception_count = 0;
-  event_count = 0;
-
-  current_process_handle = pi.hProcess;
-  current_event.dwProcessId = pi.dwProcessId;
-  memset (&current_event, 0, sizeof (current_event));
-  inferior_pid = current_event.dwThreadId = pi.dwThreadId;
-  push_target (&child_ops);
-  child_init_thread_list ();
-  child_clear_solibs ();
-  clear_proceed_status ();
-  init_wait_for_inferior ();
-  target_terminal_init ();
-  target_terminal_inferior ();
-  last_sig = 0;
-
-  while (1)
-    {
-      stop_after_trap = 1;
-      wait_for_inferior ();
-      if (stop_signal != TARGET_SIGNAL_TRAP)
-       resume (0, stop_signal);
-      else
-       break;
-    }
-  stop_after_trap = 0;
+  do_initial_child_stuff (pi.dwProcessId);
 
   /* child_continue (DBG_CONTINUE, -1);*/
   proceed ((CORE_ADDR) - 1, TARGET_SIGNAL_0, 0);
@@ -1296,7 +1301,7 @@ child_can_run (void)
 }
 
 static void
-child_close (void)
+child_close (int x ATTRIBUTE_UNUSED)
 {
   DEBUG_EVENTS (("gdb: child_close, inferior_pid=%d\n", inferior_pid));
 }
index e7c14757097d128f75a3e8f305c3a526abb27464..88a7660cd0861ab97fd6a30b91c32889ef9f5c10 100644 (file)
@@ -54,8 +54,11 @@ extern int (*ui_loop_hook) (int signo);
    following which never should have been in the generic Win32 API
    headers in the first place since they were our own invention... */
 #ifndef _GNU_H_WINDOWS_H
-#define FLAG_TRACE_BIT 0x100
-#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+enum
+{
+  FLAG_TRACE_BIT = 0x100,
+  CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+};
 #endif
 
 /* The string sent by cygwin when it processes a signal.
@@ -441,13 +444,14 @@ safe_symbol_file_add_stub (void *argv)
 static void
 safe_symbol_file_add_cleanup (void *p)
 {
-#define sp ((struct safe_symbol_file_add_args *)p)
+# define sp ((struct safe_symbol_file_add_args *)p)
   gdb_flush (gdb_stderr);
   gdb_flush (gdb_stdout);
   ui_file_delete (gdb_stderr);
   ui_file_delete (gdb_stdout);
   gdb_stderr = sp->err;
-  gdb_stdout = sp->err;
+  gdb_stdout = sp->out;
+# undef sp
 }
 
 /* symbol_file_add wrapper that prevents errors from being displayed. */
@@ -499,9 +503,8 @@ handle_load_dll (PTR dummy ATTRIBUTE_UNUSED)
   DWORD dll_name_ptr;
   DWORD done;
   char dll_buf[MAX_PATH + 1];
-  struct so_stuff *so, *solast;
+  struct so_stuff *so;
   char *dll_name = NULL;
-  DWORD dll_base = 0;
   int len;
   char *p;
 
@@ -593,7 +596,7 @@ handle_load_dll (PTR dummy ATTRIBUTE_UNUSED)
 
 /* Return name of last loaded DLL. */
 char *
-child_solib_loaded_library_pathname (int pid)
+child_solib_loaded_library_pathname (int pid ATTRIBUTE_UNUSED)
 {
   return !solib_end || !solib_end->name[0]? NULL : solib_end->name;
 }
@@ -617,7 +620,7 @@ child_clear_solibs (void)
 
 /* Add DLL symbol information. */
 void
-child_solib_add (char *filename, int from_tty, struct target_ops *t)
+child_solib_add (char *filename ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED, struct target_ops *t ATTRIBUTE_UNUSED)
 {
   struct section_addr_info section_addrs;
 
@@ -638,21 +641,19 @@ child_solib_add (char *filename, int from_tty, struct target_ops *t)
 
 /* Load DLL symbol info. */
 void
-dll_symbol_command (char *args, int from_tty)
+dll_symbol_command (char *args, int from_tty ATTRIBUTE_UNUSED)
 {
-  struct section_addr_info section_addrs;
-
   dont_repeat ();
   
   if (args == NULL)
     error ("dll-symbols requires a file name");
 
-  safe_symbol_file_add (args, 0, NULL, 0, OBJF_SHARED);
+  safe_symbol_file_add (args, 0, NULL, 0, OBJF_SHARED | OBJF_USERLOADED);
 } 
 
 /* List currently loaded DLLs. */
 void
-info_dll_command (char *ignore, int from_tty)
+info_dll_command (char *ignore ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED)
 {
   struct so_stuff *so = &solib_start;
 
@@ -710,8 +711,6 @@ handle_exception (struct target_waitstatus *ourstatus)
   /* Record the context of the current thread */
   th = thread_rec (current_event.dwThreadId, -1);
 
-  last_sig = 0;
-
   switch (code)
     {
     case EXCEPTION_ACCESS_VIOLATION:
@@ -800,13 +799,14 @@ child_continue (DWORD continue_status, int id)
 static int
 get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourstatus)
 {
-  int breakout = 0;
   BOOL debug_event;
   DWORD continue_status, event_code;
   thread_info *th = NULL;
   static thread_info dummy_thread_info;
   int retval = 0;
 
+  last_sig = 0;
+
   if (!(debug_event = WaitForDebugEvent (&current_event, 1000)))
     goto out;
 
@@ -848,13 +848,15 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
                     "CREATE_PROCESS_DEBUG_EVENT"));
       current_process_handle = current_event.u.CreateProcessInfo.hProcess;
 
-      main_thread_id = inferior_pid = current_event.dwThreadId;
+      main_thread_id = current_event.dwThreadId;
       /* Add the main thread */
+#if 0
       th = child_add_thread (current_event.dwProcessId,
                             current_event.u.CreateProcessInfo.hProcess);
-      th = child_add_thread (inferior_pid,
+#endif
+      th = child_add_thread (main_thread_id,
                             current_event.u.CreateProcessInfo.hThread);
-      retval = ourstatus->value.related_pid = current_event.dwProcessId;
+      retval = ourstatus->value.related_pid = current_event.dwThreadId;
       break;
 
     case EXIT_PROCESS_DEBUG_EVENT:
@@ -865,7 +867,7 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
       ourstatus->kind = TARGET_WAITKIND_EXITED;
       ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode;
       CloseHandle (current_process_handle);
-      retval = current_event.dwProcessId;
+      retval = main_thread_id;
       break;
 
     case LOAD_DLL_DEBUG_EVENT:
@@ -877,7 +879,7 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
       registers_changed ();    /* mark all regs invalid */
       ourstatus->kind = TARGET_WAITKIND_LOADED;
       ourstatus->value.integer = 0;
-      retval = current_event.dwProcessId;
+      retval = main_thread_id;
       break;
 
     case UNLOAD_DLL_DEBUG_EVENT:
@@ -902,8 +904,9 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
                     (unsigned) current_event.dwThreadId,
                     "OUTPUT_DEBUG_STRING_EVENT"));
       if (handle_output_debug_string ( ourstatus))
-       retval = current_event.dwProcessId;
+       retval = main_thread_id;
       break;
+
     default:
       printf_unfiltered ("gdb: kernel event for pid=%ld tid=%ld\n",
                         (DWORD) current_event.dwProcessId,
@@ -916,7 +919,10 @@ get_child_debug_event (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *ourst
   if (!retval)
     CHECK (child_continue (continue_status, -1));
   else
-    current_thread = th ?: thread_rec (current_event.dwThreadId, TRUE);
+    {
+      current_thread = th ?: thread_rec (current_event.dwThreadId, TRUE);
+      inferior_pid = retval;
+    }
 
 out:
   return retval;
@@ -950,44 +956,70 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
     }
 }
 
+static void
+do_initial_child_stuff (DWORD pid)
+{
+  extern int stop_after_trap;
+
+  last_sig = 0;
+  event_count = 0;
+  exception_count = 0;
+  current_event.dwProcessId = pid;
+  memset (&current_event, 0, sizeof (current_event));
+  push_target (&child_ops);
+  child_init_thread_list ();
+  child_clear_solibs ();
+  clear_proceed_status ();
+  init_wait_for_inferior ();
+
+  target_terminal_init ();
+  target_terminal_inferior ();
+
+  while (1)
+    {
+      stop_after_trap = 1;
+      wait_for_inferior ();
+      if (stop_signal != TARGET_SIGNAL_TRAP)
+       resume (0, stop_signal);
+      else
+       break;
+    }
+  stop_after_trap = 0;
+  return;
+}
+
 /* Attach to process PID, then initialize for debugging it.  */
 
 static void
 child_attach (char *args, int from_tty)
 {
   BOOL ok;
+  DWORD pid = strtoul (args, 0, 0);
 
   if (!args)
     error_no_arg ("process-id to attach");
 
-  current_event.dwProcessId = strtoul (args, 0, 0);
-
-  ok = DebugActiveProcess (current_event.dwProcessId);
+  ok = DebugActiveProcess (pid);
 
   if (!ok)
     error ("Can't attach to process.");
 
-  exception_count = 0;
-  event_count = 0;
-
-  child_init_thread_list ();
-  child_clear_solibs ();
-
   if (from_tty)
     {
       char *exec_file = (char *) get_exec_file (0);
 
       if (exec_file)
        printf_unfiltered ("Attaching to program `%s', %s\n", exec_file,
-                          target_pid_to_str (current_event.dwProcessId));
+                          target_pid_to_str (pid));
       else
        printf_unfiltered ("Attaching to %s\n",
-                          target_pid_to_str (current_event.dwProcessId));
+                          target_pid_to_str (pid));
 
       gdb_flush (gdb_stdout);
     }
 
-  push_target (&child_ops);
+  do_initial_child_stuff (pid);
+  target_terminal_ours ();
 }
 
 static void
@@ -1037,11 +1069,9 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
   int i;
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
-  struct target_waitstatus dummy;
   BOOL ret;
   DWORD flags;
   char *args;
-  extern int stop_after_trap;
 
   if (!exec_file)
     error ("No executable specified, use `target exec'.\n");
@@ -1152,32 +1182,7 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
   if (!ret)
     error ("Error creating process %s, (error %d)\n", exec_file, GetLastError ());
 
-  exception_count = 0;
-  event_count = 0;
-
-  current_process_handle = pi.hProcess;
-  current_event.dwProcessId = pi.dwProcessId;
-  memset (&current_event, 0, sizeof (current_event));
-  inferior_pid = current_event.dwThreadId = pi.dwThreadId;
-  push_target (&child_ops);
-  child_init_thread_list ();
-  child_clear_solibs ();
-  clear_proceed_status ();
-  init_wait_for_inferior ();
-  target_terminal_init ();
-  target_terminal_inferior ();
-  last_sig = 0;
-
-  while (1)
-    {
-      stop_after_trap = 1;
-      wait_for_inferior ();
-      if (stop_signal != TARGET_SIGNAL_TRAP)
-       resume (0, stop_signal);
-      else
-       break;
-    }
-  stop_after_trap = 0;
+  do_initial_child_stuff (pi.dwProcessId);
 
   /* child_continue (DBG_CONTINUE, -1);*/
   proceed ((CORE_ADDR) - 1, TARGET_SIGNAL_0, 0);
@@ -1296,7 +1301,7 @@ child_can_run (void)
 }
 
 static void
-child_close (void)
+child_close (int x ATTRIBUTE_UNUSED)
 {
   DEBUG_EVENTS (("gdb: child_close, inferior_pid=%d\n", inferior_pid));
 }