diff options
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/paginate-bg-execution.c | 32 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/paginate-bg-execution.exp | 127 |
3 files changed, 165 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c0207c4..f6c963d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,6 +1,12 @@ 2014-07-14 Pedro Alves <palves@redhat.com> PR gdb/17072 + * gdb.base/paginate-bg-execution.c: New file. + * gdb.base/paginate-bg-execution.exp: New file. + +2014-07-14 Pedro Alves <palves@redhat.com> + + PR gdb/17072 * gdb.base/paginate-execution-startup.c: New file. * gdb.base/paginate-execution-startup.exp: New file. * lib/gdb.exp (pagination_prompt): New global. diff --git a/gdb/testsuite/gdb.base/paginate-bg-execution.c b/gdb/testsuite/gdb.base/paginate-bg-execution.c new file mode 100644 index 0000000..e741785 --- /dev/null +++ b/gdb/testsuite/gdb.base/paginate-bg-execution.c @@ -0,0 +1,32 @@ +/* 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> + +static void +after_sleep (void) +{ + return; /* after sleep */ +} + +int +main (void) +{ + sleep (3); + after_sleep (); + return 0; +} diff --git a/gdb/testsuite/gdb.base/paginate-bg-execution.exp b/gdb/testsuite/gdb.base/paginate-bg-execution.exp new file mode 100644 index 0000000..dcff8ad --- /dev/null +++ b/gdb/testsuite/gdb.base/paginate-bg-execution.exp @@ -0,0 +1,127 @@ +# 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/>. + +# A collection of tests related to running execution commands directly +# from the command line, with "-ex". + +standard_testfile + +if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} { + return -1 +} + +# Check that we handle pagination correctly when it triggers due to an +# background execution command entered directly on the command line. + +proc test_bg_execution_pagination_return {} { + global binfile + global pagination_prompt + + with_test_prefix "paginate" { + clean_restart $binfile + + if ![runto_main] then { + fail "Can't run to main" + return 0 + } + + gdb_test "b after_sleep" + + gdb_test_no_output "set height 2" + + gdb_test "continue&" "Continuing\." + + set test "pagination handled, breakpoint hit" + set saw_pagination_prompt 0 + gdb_test_multiple "" $test { + -re "$pagination_prompt$" { + set saw_pagination_prompt 1 + send_gdb "\n" + exp_continue + } + -notransfer -re "<return>" { + # Otherwise gdb_test_multiple considers this an + # error. + exp_continue + } + -re "after sleep\[^\r\n\]+\r\n$" { + gdb_assert $saw_pagination_prompt $test + } + } + + # GDB used to crash here. + 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" + } +} + +# Check that we handle canceling pagination correctly when it triggers +# due to a background execution command entered directly on the +# command line. + +proc test_bg_execution_pagination_cancel { how } { + global binfile + global gdb_prompt pagination_prompt + + with_test_prefix "cancel with $how" { + clean_restart $binfile + + if ![runto_main] then { + fail "Can't run to main" + return 0 + } + + gdb_test "b after_sleep" + + gdb_test_no_output "set height 2" + + gdb_test "continue&" "Continuing\." + + set test "continue& paginates" + gdb_test_multiple "" $test { + -re "$pagination_prompt$" { + pass $test + } + -notransfer -re "<return>" { + # Otherwise gdb_test_multiple considers this an error. + exp_continue + } + } + + set test "cancel pagination" + if { $how == "ctrl-c" } { + send_gdb "\003" + } else { + send_gdb "q\n" + + } + gdb_test_multiple "" $test { + -re "Quit\r\n$gdb_prompt $" { + pass $test + } + } + + 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_bg_execution_pagination_return +test_bg_execution_pagination_cancel "ctrl-c" +test_bg_execution_pagination_cancel "quit" |