diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-09-29 15:59:36 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-09-29 15:59:36 +0000 |
commit | 49781499e5694d57553be9a552919f79f9280a8c (patch) | |
tree | a00f8de9a24622adff0ac9e666d181f2dc509085 /gdb/inflow.c | |
parent | 898140fe5a9b6f0881d88e1d6a2e8780d41b15fb (diff) | |
download | gdb-49781499e5694d57553be9a552919f79f9280a8c.zip gdb-49781499e5694d57553be9a552919f79f9280a8c.tar.gz gdb-49781499e5694d57553be9a552919f79f9280a8c.tar.bz2 |
* target.c (target_detach): Call generic_mourn_inferior.
* inflow.c (generic_mourn_inferior): Call flush_cached_frames.
Diffstat (limited to 'gdb/inflow.c')
-rw-r--r-- | gdb/inflow.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/gdb/inflow.c b/gdb/inflow.c index a591d80..fddfe84 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -78,8 +78,9 @@ static void (*sigquit_ours) (); static char *inferior_thisrun_terminal; -/* Nonzero if our terminal settings are in effect. - Zero if the inferior's settings are in effect. */ +/* Nonzero if our terminal settings are in effect. Zero if the + inferior's settings are in effect. Ignored if !gdb_has_a_terminal + (). */ static int terminal_is_ours; @@ -100,7 +101,9 @@ gdb_has_a_terminal () all!). Can't do this in _initialize_inflow because SERIAL_FDOPEN won't work until the serial_ops_list is initialized. */ +#ifdef F_GETFL tflags_ours = fcntl (0, F_GETFL, 0); +#endif gdb_has_a_terminal_flag = no; stdin_serial = SERIAL_FDOPEN (0); @@ -130,20 +133,20 @@ static void terminal_ours_1 PARAMS ((int)); void terminal_init_inferior () { - /* Make sure that our_ttystate (etc) are initialized. */ - 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 (inferior_ttystate) - free (inferior_ttystate); - inferior_ttystate = SERIAL_GET_TTY_STATE (stdin_serial); - SERIAL_SET_PROCESS_GROUP (stdin_serial, inferior_ttystate, inferior_pid); - - /* 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 - process group. */ - terminal_is_ours = 1; + 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 (inferior_ttystate) + free (inferior_ttystate); + inferior_ttystate = SERIAL_GET_TTY_STATE (stdin_serial); + SERIAL_SET_PROCESS_GROUP (stdin_serial, inferior_ttystate, inferior_pid); + + /* 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 + process group. */ + terminal_is_ours = 1; + } } /* Put the inferior's terminal settings into effect. @@ -157,12 +160,14 @@ terminal_inferior () { int result; +#ifdef F_GETFL /* Is there a reason this is being done twice? It happens both places we use F_SETFL, so I'm inclined to think perhaps there is some reason, however perverse. Perhaps not though... */ result = fcntl (0, F_SETFL, tflags_inferior); result = fcntl (0, F_SETFL, tflags_inferior); OOPSY ("fcntl F_SETFL"); +#endif /* Because we were careful to not change in or out of raw mode in terminal_ours, we will not change in our out of raw mode with @@ -274,6 +279,7 @@ terminal_ours_1 (output_only) signal (SIGQUIT, sigquit_ours); } +#ifdef F_GETFL tflags_inferior = fcntl (0, F_GETFL, 0); /* Is there a reason this is being done twice? It happens both @@ -281,6 +287,7 @@ terminal_ours_1 (output_only) is some reason, however perverse. Perhaps not though... */ result = fcntl (0, F_SETFL, tflags_ours); result = fcntl (0, F_SETFL, tflags_ours); +#endif result = result; /* lint */ } @@ -384,7 +391,6 @@ void new_tty () { register int tty; - void (*osigttou) (); if (inferior_thisrun_terminal == 0) return; @@ -396,6 +402,8 @@ new_tty () tty = open("/dev/tty", O_RDWR); if (tty > 0) { + void (*osigttou) (); + osigttou = (void (*)()) signal(SIGTTOU, SIG_IGN); ioctl(tty, TIOCNOTTY, 0); close(tty); @@ -470,6 +478,7 @@ generic_mourn_inferior () #endif reopen_exec_file (); + flush_cached_frames (); if (target_has_stack) { set_current_frame ( create_new_frame (read_register (FP_REGNUM), read_pc ())); |