# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2013 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/>.

load_lib gdbserver-support.exp

standard_testfile

if {[skip_gdbserver_tests]} {
    return 0
}

if { [prepare_for_testing ${testfile}.exp ${testfile}] } {
    return -1
}

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

gdbserver_run ""

# Otherwise the breakpoint at 'main' would not cause insert
# breakpoints during first step.
delete_breakpoints

set server_pid [exp_pid -i [board_info target fileid]]
remote_exec target "kill -9 $server_pid"

gdb_test "step" "Remote connection closed"
