diff options
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/inflow.c | 13 | ||||
-rw-r--r-- | gdb/terminal.h | 2 | ||||
-rw-r--r-- | gdb/top.c | 4 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0b63d34..6477dc1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +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. diff --git a/gdb/inflow.c b/gdb/inflow.c index 8947e63..3c121a3 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -79,6 +79,10 @@ struct terminal_info 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 @@ -156,6 +160,13 @@ show_interactive_mode (struct ui_file *file, int from_tty, 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) @@ -227,7 +238,7 @@ child_terminal_init_with_pgrp (int pgrp) { 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 diff --git a/gdb/terminal.h b/gdb/terminal.h index ae25c98..17acde2 100644 --- a/gdb/terminal.h +++ b/gdb/terminal.h @@ -103,6 +103,8 @@ extern int gdb_has_a_terminal (void); 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); @@ -1890,6 +1890,10 @@ gdb_init (char *argv0) 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 |