# Copyright (C) 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 test tests s390 MVCLE opcode for reverse execution.
#

if ![supports_reverse] {
    return
}

if { ! [istarget "s390*-*-*"] } {
    verbose "Skipping s390 MVCLE instruction recording tests."
    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 marker1" \
    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
    "set breakpoint at marker1"

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

gdb_continue_to_breakpoint "marker1" ".*$srcfile:.*"

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

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

# If the variable was recorded properly on syscall, the old contents (0)
# will be remembered.  If not, new contents ([abcdefghi]) will be used, and
# the test will fail.

gdb_test "print (int)dst\[0]" ".* = 0" "check MVCLE record 1"
gdb_test "print (int)dst\[0x100000]" ".* = 0" "check MVCLE record 2"
gdb_test "print (int)dst\[0xffffff]" ".* = 0" "check MVCLE record 3"

