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

require supports_reverse

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"
