diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/bg-execution-repeat.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/bg-execution-repeat.exp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/bg-execution-repeat.exp b/gdb/testsuite/gdb.base/bg-execution-repeat.exp new file mode 100644 index 0000000..d4eb360 --- /dev/null +++ b/gdb/testsuite/gdb.base/bg-execution-repeat.exp @@ -0,0 +1,86 @@ +# 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/>. + +# Test that repeating a background command doesn't lose the "&" in the +# repeat, turning a background command into a foreground command. See +# PR gdb/17471. + +standard_testfile + +if { [build_executable "failed to prepare" ${testfile} $srcfile] } { + return -1 +} + +set linenum [gdb_get_line_number "set break here"] + +# Run the test proper. CONTINUE_CMD is the background continue +# command to issue. + +proc test {continue_cmd} { + global gdb_prompt + global binfile + global linenum + + clean_restart $binfile + + if ![runto_main] { + return + } + + gdb_breakpoint "$linenum" + + set test $continue_cmd + gdb_test_multiple $test $test { + -re "Continuing\\.\r\n$gdb_prompt " { + # Note no end anchor. If the breakpoint triggers soon enough + # enough we see further output after the prompt. + pass $test + } + } + + # Wait for the stop. Don't expect a prompt, as we had resumed the + # inferior in the background. + set test "breakpoint hit 1" + gdb_test_multiple "" $test { + -re "set break here" { + pass $test + } + } + + # Trigger a repeat. Buggy GDB used to lose the "&", making this a + # foreground command... + send_gdb "\n" + gdb_test "" "Continuing\\." "repeat bg command" + + # ... and thus further input wouldn't be processed until the target + # stopped. + gdb_test "print 1" " = 1" "input still accepted" + + # Make sure we see a stop after the print, and not before. Don't + # expect a prompt, as we had resumed the inferior in the background. + set test "breakpoint hit 2" + gdb_test_multiple "" $test { + -re "set break here ..\r\n" { + pass $test + } + } +} + +# Test with and without extra arguments. +foreach cmd {"c&" "c 1&"} { + with_test_prefix $cmd { + test $cmd + } +} |