# Copyright 2015-2018 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/>.  */

# Check that we can connect to GDBserver with the multiprocess
# extensions disabled, and run to main.

load_lib gdbserver-support.exp

if {[skip_gdbserver_tests]} {
    return
}

standard_testfile

if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
    return -1
}

# Test spawning gdbserver with a program, connect to it and run to
# main, with both multiprocess extensions on and off.
proc do_test {multiprocess} {
    global binfile

    clean_restart $binfile

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

    gdb_test_no_output "set remote multiprocess-feature $multiprocess"

    set res [gdbserver_spawn ""]
    set gdbserver_protocol [lindex $res 0]
    set gdbserver_gdbport [lindex $res 1]

    gdb_test "break main" "Breakpoint .*"

    gdb_test "target $gdbserver_protocol $gdbserver_gdbport" \
	"Remote debugging using .*" \
	"target $gdbserver_protocol"

    gdb_test "continue" "main .*" "continue to main"
}

foreach multiprocess { "off" "auto" } {
    with_test_prefix "multiprocess=$multiprocess" {
	do_test $multiprocess
    }
}
