From c5917d9a38ce0e4ad0a8f888f759de382dbe8f2d Mon Sep 17 00:00:00 2001 From: Jim Ingham Date: Fri, 30 Nov 2012 20:23:19 +0000 Subject: Save and restore terminal state when lldb is suspended with SIGTSTP and resumed with SIGCONT. Readline & gdb have a bunch of code to handle older UNIX'es with other job control mechanisms. I didn't try to replicate that. llvm-svn: 169032 --- lldb/tools/driver/Driver.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'lldb/tools/driver/Driver.cpp') diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp index 85fec519f37..b410f572a6e 100644 --- a/lldb/tools/driver/Driver.cpp +++ b/lldb/tools/driver/Driver.cpp @@ -1579,6 +1579,24 @@ sigint_handler (int signo) exit (signo); } +void +sigtstp_handler (int signo) +{ + g_driver->GetDebugger().SaveInputTerminalState(); + signal (signo, SIG_DFL); + kill (getpid(), signo); + signal (signo, sigtstp_handler); +} + +void +sigcont_handler (int signo) +{ + g_driver->GetDebugger().RestoreInputTerminalState(); + signal (signo, SIG_DFL); + kill (getpid(), signo); + signal (signo, sigcont_handler); +} + int main (int argc, char const *argv[], const char *envp[]) { @@ -1589,6 +1607,8 @@ main (int argc, char const *argv[], const char *envp[]) signal (SIGPIPE, SIG_IGN); signal (SIGWINCH, sigwinch_handler); signal (SIGINT, sigint_handler); + signal (SIGTSTP, sigtstp_handler); + signal (SIGCONT, sigcont_handler); // Create a scope for driver so that the driver object will destroy itself // before SBDebugger::Terminate() is called. -- cgit v1.2.3