diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c | 25 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp | 87 | ||||
-rw-r--r-- | gdb/utils.c | 4 |
3 files changed, 116 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c new file mode 100644 index 0000000..6c4ffcb --- /dev/null +++ b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <unistd.h> + +int +main (void) +{ + sleep (10); + return 0; /* after sleep */ +} diff --git a/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp new file mode 100644 index 0000000..0ed8c92 --- /dev/null +++ b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp @@ -0,0 +1,87 @@ +# Copyright (C) 2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile + +if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} { + return -1 +} + +# Send a ctrl-c while the target is running and the next output causes +# a pagination prompt. + +proc test_ctrlc_while_target_running_paginates {} { + global binfile srcfile + global gdb_prompt pagination_prompt + + set testline [gdb_get_line_number "after sleep"] + + with_test_prefix "ctrlc target running" { + clean_restart $binfile + + if ![runto_main] then { + fail "Can't run to main" + return 0 + } + + gdb_test "b $srcfile:$testline" \ + "Breakpoint .*$srcfile, line $testline.*" \ + "set breakpoint" + + gdb_test_no_output "set height 2" + + # Wait for the "Continuing" line, indicating the program is + # running. + set test "continue" + gdb_test_multiple $test $test { + -re "Continuing" { + pass $test + } + } + + # The program sleeps 10 seconds. Wait just a bit and send a + # ctrl-c. + sleep 2 + send_gdb "\003" + + # GDB now intercepts the SIGINT and tries to let the user know + # about the spurious signal, but that paginates. Make sure + # the user can respond to the pagination query. + set test "got prompt" + set saw_pagination_prompt 0 + gdb_test_multiple "" $test { + -re "$pagination_prompt$" { + set saw_pagination_prompt 1 + send_gdb "\n" + exp_continue + } + -re "$gdb_prompt $" { + gdb_assert $saw_pagination_prompt $test + } + -notransfer -re "<return>" { + # Otherwise gdb_test_multiple considers this an error. + exp_continue + } + } + + # Confirm GDB can still process input. + gdb_test "p 1" " = 1" "GDB accepts further input" + + # In case the board file wants to send further commands. + gdb_test_no_output "set height unlimited" + } +} + +test_ctrlc_while_target_running_paginates diff --git a/gdb/utils.c b/gdb/utils.c index 6f47cb0..d324227 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1877,6 +1877,10 @@ prompt_for_continue (void) immediate_quit++; QUIT; + + /* We'll need to handle input. */ + target_terminal_ours (); + /* On a real operating system, the user can quit with SIGINT. But not on GO32. |