# Copyright 2022-2023 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 getrandom syscall for reverse execution.
#

require supports_reverse
require {have_system_header sys/random.h}

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"

gdb_test "print (unsigned)buf\[0\]" ".* = 255" "check buf\[0\]"
gdb_test "print (unsigned)buf\[1\]" ".* = 0" "check buf\[1\]"
gdb_test "print (unsigned)buf\[2\]" ".* = 0" "check buf\[2\]"
gdb_test "print (unsigned)buf\[3\]" ".* = 0" "check buf\[3\]"
gdb_test "print (unsigned)buf\[4\]" ".* = 0" "check buf\[4\]"
gdb_test "print (unsigned)buf\[5\]" ".* = 255" "check buf\[5\]"
