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

# Continue past server_pid assignment.
gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"]
gdb_continue_to_breakpoint "after server_pid assignment"

# Get the pid of GDBServer.
set test "p server_pid"
gdb_test_multiple $test $test {
    -re " = ($decimal)\r\n$gdb_prompt $" {
	set server_pid $expect_out(1,string)
	pass $test
    }
}

if {$server_pid == "" } {
    return -1
}

remote_exec target "kill -9 $server_pid"

# Enable trace status packet which is disabled after the connection
# if the remote target doesn't support tracepoint at all.  Otherwise,
# no RSP packet is sent out.
gdb_test_no_output "set remote trace-status-packet on"

# Force GDB to talk with GDBserver, so that we can get the
# "connection closed" error.
gdb_test "tstatus" {Remote connection closed|Remote communication error\.  Target disconnected\.: Connection reset by peer\.}
