# 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 socketpair and recvmsg syscalls 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 will be used, and the test will fail.

# rdata should be "xxxx", not "cdab"
gdb_test "print rdata" ".* = \"xxxx\"" "check recvmsg record - rdata"

# rmsg.msg_flags should be zeros, not MSG_TRUNC | MSG_CTRUNC
gdb_test "print rmsg.msg_flags" ".* = 0" \
    "check recvmsg record - rmsg.msg_flags"

# rmsg.msg_controllen should be sizeof rc, not actual size of control data
# (7 bytes less)
gdb_test "print rmsg.msg_controllen - sizeof rc" ".* = 0" \
    "check recvmsg record - rmsg.msg_controllen"

# rc should be zeros, not received cmsg
gdb_test "print ((struct cmsghdr *)rc)->cmsg_len" ".* = 0" "check recvmsg record - cmsg"
