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

# This file is part of the gdb testsuite.

#
# This test tests readv syscall for reverse execution.
#

if ![supports_reverse] {
    return
}

standard_testfile

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

runto_main

if [supports_process_record] {
    # Activate process record/replay
    gdb_test_no_output "record" "turn on process record"
}

gdb_test "break marker2" \
    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
    "set breakpoint at marker2"

gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"

gdb_test "break marker1" \
    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
    "set breakpoint at marker1"

gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"

# If the variables were recorded properly on syscall, the old contents ("")
# will be remembered.  If not, new contents ("NUXI") will be
# used, and the test will fail.

for { set i 0 } { $i < 4 } { incr i } {
    gdb_test "print (int)buf\[$i]" ".* = 0" \
	"check readv record for buf\[$i\]"
}
