diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 78af9f8665f..f077dc2b8df 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2002-09-13  Christopher Faylor  <cgf@redhat.com>
+
+	* win32-nat.c (child_create_inferior): Honor 'tty' command.
+
 2002-09-13  Daniel Jacobowitz  <drow@mvista.com>
 
 	* gdbtypes.c (check_stub_method): Make static.
diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c
index 781a84126cb..e2a85e138dc 100644
--- a/gdb/win32-nat.c
+++ b/gdb/win32-nat.c
@@ -1461,6 +1461,8 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
   char *toexec;
   char shell[MAX_PATH + 1]; /* Path to shell */
   const char *sh;
+  int tty;
+  int ostdin, ostdout, ostderr;
 
   if (!exec_file)
     error ("No executable specified, use `target exec'.\n");
@@ -1573,6 +1575,27 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
     *temp = 0;
   }
 
+  if (!inferior_io_terminal)
+    tty = ostdin = ostdout = ostderr = -1;
+  else
+    {
+      tty = open (inferior_io_terminal, O_RDWR | O_NOCTTY);
+      if (tty < 0)
+	{
+	  print_sys_errmsg (inferior_io_terminal, errno);
+	  ostdin = ostdout = ostderr = -1;
+	}
+      else
+	{
+	  ostdin = dup (0);
+	  ostdout = dup (1);
+	  ostderr = dup (2);
+	  dup2 (tty, 0);
+	  dup2 (tty, 1);
+	  dup2 (tty, 2);
+	}
+    }
+
   ret = CreateProcess (0,
 		       args,	/* command line */
 		       NULL,	/* Security */
@@ -1583,6 +1606,17 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
 		       NULL,	/* current directory */
 		       &si,
 		       &pi);
+  if (tty >= 0)
+    {
+      close (tty);
+      dup2 (ostdin, 0);
+      dup2 (ostdout, 1);
+      dup2 (ostderr, 2);
+      close (ostdin);
+      close (ostdout);
+      close (ostderr);
+    }
+
   if (!ret)
     error ("Error creating process %s, (error %d)\n", exec_file, GetLastError ());
 
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 781a84126cb..e2a85e138dc 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -1461,6 +1461,8 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
   char *toexec;
   char shell[MAX_PATH + 1]; /* Path to shell */
   const char *sh;
+  int tty;
+  int ostdin, ostdout, ostderr;
 
   if (!exec_file)
     error ("No executable specified, use `target exec'.\n");
@@ -1573,6 +1575,27 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
     *temp = 0;
   }
 
+  if (!inferior_io_terminal)
+    tty = ostdin = ostdout = ostderr = -1;
+  else
+    {
+      tty = open (inferior_io_terminal, O_RDWR | O_NOCTTY);
+      if (tty < 0)
+	{
+	  print_sys_errmsg (inferior_io_terminal, errno);
+	  ostdin = ostdout = ostderr = -1;
+	}
+      else
+	{
+	  ostdin = dup (0);
+	  ostdout = dup (1);
+	  ostderr = dup (2);
+	  dup2 (tty, 0);
+	  dup2 (tty, 1);
+	  dup2 (tty, 2);
+	}
+    }
+
   ret = CreateProcess (0,
 		       args,	/* command line */
 		       NULL,	/* Security */
@@ -1583,6 +1606,17 @@ child_create_inferior (char *exec_file, char *allargs, char **env)
 		       NULL,	/* current directory */
 		       &si,
 		       &pi);
+  if (tty >= 0)
+    {
+      close (tty);
+      dup2 (ostdin, 0);
+      dup2 (ostdout, 1);
+      dup2 (ostderr, 2);
+      close (ostdin);
+      close (ostdout);
+      close (ostderr);
+    }
+
   if (!ret)
     error ("Error creating process %s, (error %d)\n", exec_file, GetLastError ());