Fix PR gdb/393:

* inflow.c (terminal_save_ours): New function to save terminal
	settings.
	* inferior.h (terminal_save_ours): Declare.
	* target.c (debug_to_terminal_save_ours): New function.
	(cleanup_target): Defaults to_terminal_save_ours.
	(update_current_target): Inherit to_terminal_save_ours.
	(setup_target_debug): Set to_terminal_save_ours.
	* target.h (target_terminal_save_ours): New to save terminal settings.
	(target_ops): New member to_terminal_save_ours.
	* gnu-nat.c (init_gnu_ops): Set to_terminal_save_ours.
	* hpux-thread.c (init_hpux_thread_ops): Likewise.
	* inftarg.c (init_child_ops): Likewise.
	* m3-nat.c (init_m3_ops): Likewise.
	* procfs.c (init_procfs_ops): Likewise.
	* wince.c (init_child_ops): Likewise.
	* win32-nat.c (init_child_ops): Likewise.
	* sol-thread.c (init_sol_thread_ops): Likewise.
This commit is contained in:
Stephane Carrez 2002-08-26 19:18:33 +00:00
parent 3d7f4f4914
commit a790ad353e
14 changed files with 73 additions and 0 deletions

View File

@ -1,3 +1,24 @@
2002-08-26 Stephane Carrez <stcarrez@nerim.fr>
Fix PR gdb/393:
* inflow.c (terminal_save_ours): New function to save terminal
settings.
* inferior.h (terminal_save_ours): Declare.
* target.c (debug_to_terminal_save_ours): New function.
(cleanup_target): Defaults to_terminal_save_ours.
(update_current_target): Inherit to_terminal_save_ours.
(setup_target_debug): Set to_terminal_save_ours.
* target.h (target_terminal_save_ours): New to save terminal settings.
(target_ops): New member to_terminal_save_ours.
* gnu-nat.c (init_gnu_ops): Set to_terminal_save_ours.
* hpux-thread.c (init_hpux_thread_ops): Likewise.
* inftarg.c (init_child_ops): Likewise.
* m3-nat.c (init_m3_ops): Likewise.
* procfs.c (init_procfs_ops): Likewise.
* wince.c (init_child_ops): Likewise.
* win32-nat.c (init_child_ops): Likewise.
* sol-thread.c (init_sol_thread_ops): Likewise.
2002-08-26 Mark Kettenis <kettenis@gnu.org>
* i386-tdep.c (i386_store_return_value): Undeprecate. Convert to

View File

@ -2612,6 +2612,7 @@ init_gnu_ops (void)
gnu_ops.to_terminal_init = gnu_terminal_init_inferior;
gnu_ops.to_terminal_inferior = terminal_inferior;
gnu_ops.to_terminal_ours_for_output = terminal_ours_for_output;
gnu_ops.to_terminal_save_ours = terminal_save_ours;
gnu_ops.to_terminal_ours = terminal_ours;
gnu_ops.to_terminal_info = child_terminal_info;
gnu_ops.to_kill = gnu_kill_inferior; /* to_kill */

View File

@ -554,6 +554,7 @@ init_hpux_thread_ops (void)
hpux_thread_ops.to_terminal_init = terminal_init_inferior;
hpux_thread_ops.to_terminal_inferior = terminal_inferior;
hpux_thread_ops.to_terminal_ours_for_output = terminal_ours_for_output;
hpux_thread_ops.to_terminal_save_ours = terminal_save_ours;
hpux_thread_ops.to_terminal_ours = terminal_ours;
hpux_thread_ops.to_terminal_info = child_terminal_info;
hpux_thread_ops.to_kill = hpux_thread_kill_inferior;

View File

@ -152,6 +152,8 @@ extern void kill_inferior (void);
extern void generic_mourn_inferior (void);
extern void terminal_save_ours (void);
extern void terminal_ours (void);
extern int run_stack_dummy (CORE_ADDR , struct regcache *);

View File

@ -200,6 +200,23 @@ terminal_init_inferior_with_pgrp (int pgrp)
}
}
/* Save the terminal settings again. This is necessary for the TUI
when it switches to TUI or non-TUI mode; curses changes the terminal
and gdb must be able to restore it correctly. */
void
terminal_save_ours ()
{
if (gdb_has_a_terminal ())
{
/* We could just as well copy our_ttystate (if we felt like adding
a new function serial_copy_tty_state). */
if (our_ttystate)
xfree (our_ttystate);
our_ttystate = serial_get_tty_state (stdin_serial);
}
}
void
terminal_init_inferior (void)
{

View File

@ -774,6 +774,7 @@ init_child_ops (void)
child_ops.to_terminal_init = terminal_init_inferior;
child_ops.to_terminal_inferior = terminal_inferior;
child_ops.to_terminal_ours_for_output = terminal_ours_for_output;
child_ops.to_terminal_save_ours = terminal_save_ours;
child_ops.to_terminal_ours = terminal_ours;
child_ops.to_terminal_info = child_terminal_info;
child_ops.to_kill = kill_inferior;

View File

@ -4474,6 +4474,7 @@ init_m3_ops (void)
m3_ops.to_terminal_init = terminal_init_inferior;
m3_ops.to_terminal_inferior = terminal_inferior;
m3_ops.to_terminal_ours_for_output = terminal_ours_for_output;
m3_ops.to_terminal_save_ours = terminal_save_ours;
m3_ops.to_terminal_ours = terminal_ours;
m3_ops.to_terminal_info = child_terminal_info;
m3_ops.to_kill = m3_kill_inferior;

View File

@ -170,6 +170,7 @@ init_procfs_ops (void)
procfs_ops.to_terminal_inferior = terminal_inferior;
procfs_ops.to_terminal_ours_for_output = terminal_ours_for_output;
procfs_ops.to_terminal_ours = terminal_ours;
procfs_ops.to_terminal_save_ours = terminal_save_ours;
procfs_ops.to_terminal_info = child_terminal_info;
procfs_ops.to_find_new_threads = procfs_find_new_threads;

View File

@ -1556,6 +1556,7 @@ init_sol_thread_ops (void)
sol_thread_ops.to_terminal_inferior = terminal_inferior;
sol_thread_ops.to_terminal_ours_for_output = terminal_ours_for_output;
sol_thread_ops.to_terminal_ours = terminal_ours;
sol_thread_ops.to_terminal_save_ours = terminal_save_ours;
sol_thread_ops.to_terminal_info = child_terminal_info;
sol_thread_ops.to_kill = sol_thread_kill_inferior;
sol_thread_ops.to_load = 0;

View File

@ -138,6 +138,8 @@ static void debug_to_terminal_inferior (void);
static void debug_to_terminal_ours_for_output (void);
static void debug_to_terminal_save_ours (void);
static void debug_to_terminal_ours (void);
static void debug_to_terminal_info (char *, int);
@ -445,6 +447,9 @@ cleanup_target (struct target_ops *t)
de_fault (to_terminal_ours,
(void (*) (void))
target_ignore);
de_fault (to_terminal_save_ours,
(void (*) (void))
target_ignore);
de_fault (to_terminal_info,
default_terminal_info);
de_fault (to_kill,
@ -608,6 +613,7 @@ update_current_target (void)
INHERIT (to_terminal_inferior, t);
INHERIT (to_terminal_ours_for_output, t);
INHERIT (to_terminal_ours, t);
INHERIT (to_terminal_save_ours, t);
INHERIT (to_terminal_info, t);
INHERIT (to_kill, t);
INHERIT (to_load, t);
@ -1979,6 +1985,14 @@ debug_to_terminal_ours (void)
fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
}
static void
debug_to_terminal_save_ours (void)
{
debug_target.to_terminal_save_ours ();
fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
}
static void
debug_to_terminal_info (char *arg, int from_tty)
{
@ -2405,6 +2419,7 @@ setup_target_debug (void)
current_target.to_terminal_inferior = debug_to_terminal_inferior;
current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
current_target.to_terminal_ours = debug_to_terminal_ours;
current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
current_target.to_terminal_info = debug_to_terminal_info;
current_target.to_kill = debug_to_kill;
current_target.to_load = debug_to_load;

View File

@ -264,6 +264,7 @@ struct target_ops
void (*to_terminal_inferior) (void);
void (*to_terminal_ours_for_output) (void);
void (*to_terminal_ours) (void);
void (*to_terminal_save_ours) (void);
void (*to_terminal_info) (char *, int);
void (*to_kill) (void);
void (*to_load) (char *, int);
@ -626,6 +627,14 @@ extern void print_section_info (struct target_ops *, bfd *);
#define target_terminal_ours() \
(*current_target.to_terminal_ours) ()
/* Save our terminal settings.
This is called from TUI after entering or leaving the curses
mode. Since curses modifies our terminal this call is here
to take this change into account. */
#define target_terminal_save_ours() \
(*current_target.to_terminal_save_ours) ()
/* Print useful information about our terminal status, if such a thing
exists. */

View File

@ -1791,6 +1791,7 @@ init_child_ops (void)
child_ops.to_terminal_inferior = terminal_inferior;
child_ops.to_terminal_ours_for_output = terminal_ours_for_output;
child_ops.to_terminal_ours = terminal_ours;
child_ops.to_terminal_save_ours = terminal_save_ours;
child_ops.to_terminal_info = child_terminal_info;
child_ops.to_kill = child_kill_inferior;
child_ops.to_load = 0;

View File

@ -1910,6 +1910,7 @@ init_child_ops (void)
child_ops.to_terminal_inferior = terminal_inferior;
child_ops.to_terminal_ours_for_output = terminal_ours_for_output;
child_ops.to_terminal_ours = terminal_ours;
child_ops.to_terminal_save_ours = terminal_save_ours;
child_ops.to_terminal_info = child_terminal_info;
child_ops.to_kill = child_kill_inferior;
child_ops.to_load = child_load;

View File

@ -1791,6 +1791,7 @@ init_child_ops (void)
child_ops.to_terminal_inferior = terminal_inferior;
child_ops.to_terminal_ours_for_output = terminal_ours_for_output;
child_ops.to_terminal_ours = terminal_ours;
child_ops.to_terminal_save_ours = terminal_save_ours;
child_ops.to_terminal_info = child_terminal_info;
child_ops.to_kill = child_kill_inferior;
child_ops.to_load = 0;