# Copyright (C) 2014-2021 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 . # 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 } }