# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2017 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 Ctrl-C works after reconnecting.

load_lib gdbserver-support.exp

if { [skip_gdbserver_tests] } {
    verbose "skipping gdbserver tests"
    return -1
}

standard_testfile
if [prepare_for_testing "failed to prepare" $testfile $srcfile] {
    return -1
}

# Make sure we're disconnected, in case we're testing with an
# extended-remote board, therefore already connected.
with_test_prefix "preparation" {
  gdb_test "disconnect" ".*"
}

# Connect, continue, send Ctrl-C and expect a SIGINT stop.

proc connect_continue_ctrl_c {} {
    global gdbserver_protocol gdbserver_gdbport

    set res [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
    if ![gdb_assert {$res == 0} "connect"] {
	return
    }

    set test "continue for ctrl-c"
    gdb_test_multiple "continue" $test {
	-re "Continuing" {
	    pass $test
	}
    }

    after 1000 {send_gdb "\003"}
    gdb_test "" "Program received signal SIGINT.*" "stop with control-c"
}

with_test_prefix "first" {
    # Start GDBserver.
    set gdbserver_reconnect_p 1
    set res [gdbserver_start "" $binfile]
    set gdbserver_protocol [lindex $res 0]
    set gdbserver_gdbport [lindex $res 1]

    connect_continue_ctrl_c
}

with_test_prefix "second" {
    gdb_test "disconnect" "Ending remote debugging."
    connect_continue_ctrl_c
}
