# Copyright 2013-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 <http://www.gnu.org/licenses/>.

# Execute command CMD and check that GDB sends the expected number of
# vCont;r packet.  Returns 0 if the test passes, otherwise returns 1.

proc exec_cmd_expect_vCont_count { cmd exp_vCont_r } {
    global gdb_prompt

    gdb_test_no_output "set debug remote 1" ""

    set test "${cmd}: vCont;r=${exp_vCont_r}"
    set r_counter 0
    set s_counter 0
    set ret 1
    set any {[^\r\n]*}
    gdb_test_multiple $cmd $test {
	-re "vCont;s${any}\r\n" {
	    incr s_counter
	    exp_continue
	}
	-re "vCont;r${any}\r\n" {
	    incr r_counter
	    exp_continue
	}
	-re "\r\n" {
	    # Prevent overflowing the expect buffer.
	    exp_continue
	}
	-re "$gdb_prompt $" {
	    if { $r_counter == ${exp_vCont_r} } {
		pass $test
		set ret 0
	    } else {
		fail $test
	    }
	}
    }

    gdb_test_no_output "set debug remote 0" ""
    return $ret
}

# Check whether range stepping is supported by the target.

proc gdb_range_stepping_enabled { } {
    global gdb_prompt

    set command "set range-stepping on"
    set message "probe range-stepping support"
    gdb_test_multiple $command $message {
        -re "Range stepping is not supported.*\r\n$gdb_prompt $" {
	    pass $message
	    return 0
	}
        -re "^$command\r\n$gdb_prompt $" {
	    pass $message
	    return 1
	}
    }

    return 0
}
