# 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 getresuid/getresgid 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 (-1)
# will be remembered.  If not, new contents (the actual uid/gid) will be used,
# and the test will fail (we hope the test user doesn't actually have uid of
# -1).  Do it this way instead of printing uid/gid directly, since uid_t/gid_t
# is likely to be unsigned.

gdb_test "print ruid == (uid_t)-1" ".* = 1" "check ruid record"
gdb_test "print euid == (uid_t)-1" ".* = 1" "check euid record"
gdb_test "print suid == (uid_t)-1" ".* = 1" "check suid record"
gdb_test "print rgid == (gid_t)-1" ".* = 1" "check rgid record"
gdb_test "print egid == (gid_t)-1" ".* = 1" "check egid record"
gdb_test "print sgid == (gid_t)-1" ".* = 1" "check sgid record"
