+2015-01-07  Patrick Palka  <patrick@parcs.ath.cx>
+
+       * terminal.h (set_initial_gdb_ttystate): Declare.
+       * inflow.c (initial_gdb_ttystate): New static variable.
+       (set_initial_gdb_ttystate): New setter.
+       (child_terminal_init_with_pgrp): Copy initial_gdb_ttystate
+       instead of our current terminal state.
+       * top.c (gdb_init): Call set_initial_gdb_ttystate.
+
 2015-01-07  Joel Brobecker  <brobecker@adacore.com>
 
        * guile/scm-type.c (tyscm_array_1): Add comment.
 
    unimportant.  */
 static struct terminal_info our_terminal_info;
 
+/* The initial tty state given to each new inferior.  It is a snapshot of our
+   own tty state taken during initialization of GDB.  */
+static serial_ttystate initial_gdb_ttystate;
+
 static struct terminal_info *get_inflow_inferior_data (struct inferior *);
 
 #ifdef PROCESS_GROUP_TYPE
     fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value);
 }
 
+/* Set the initial tty state that is to be inherited by new inferiors.  */
+void
+set_initial_gdb_ttystate (void)
+{
+  initial_gdb_ttystate = serial_get_tty_state (stdin_serial);
+}
+
 /* Does GDB have a terminal (on stdin)?  */
 int
 gdb_has_a_terminal (void)
     {
       xfree (tinfo->ttystate);
       tinfo->ttystate = serial_copy_tty_state (stdin_serial,
-                                              our_terminal_info.ttystate);
+                                              initial_gdb_ttystate);
 
       /* Make sure that next time we call terminal_inferior (which will be
          before the program runs, as it needs to be), we install the new
 
 
 extern void gdb_save_tty_state (void);
 
+extern void set_initial_gdb_ttystate (void);
+
 /* Set the process group of the caller to its own pid, or do nothing
    if we lack job control.  */
 extern int gdb_setpgid (void);
 
 
   initialize_stdin_serial ();
 
+  /* Take a snapshot of our tty state before readline/ncurses have had a chance
+     to alter it.  */
+  set_initial_gdb_ttystate ();
+
   async_init_signals ();
 
   /* We need a default language for parsing expressions, so simple