# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2013-2026 Free Software Foundation, Inc.
#
# Contributed by Intel Corp. <markus.t.metzger@intel.com>
#
# 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/>.

require allow_btrace_tests

standard_testfile record_goto.c
if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} {
    return
}

if {![runto_main]} {
    return
}

# Trace the call to the test function.
with_test_prefix "record" {
    gdb_test_no_output "record btrace"
    gdb_test "step"
    gdb_test "next 2"
}

# Let's step around a bit.
with_test_prefix "replay" {
    gdb_test "reverse-finish" ".*main\.2.*" "reverse-finish.1"
    gdb_test "step" ".*fun4\.2.*" "step.1"
    gdb_test "next" ".*fun4\.3.*" "next.1"
    gdb_test "step" ".*fun2\.2.*" "step.2"
    gdb_test "reverse-finish" ".*fun4\.3.*" "reverse-finish.2"
    gdb_test "reverse-step" ".*fun1\.2.*" "reverse-step.1"
    gdb_test "finish" ".*fun4\.3.*" "finish.1"
    gdb_test "reverse-next" ".*fun4\.2.*" "reverse-next.1"
    gdb_test "reverse-finish" ".*main\.2.*" "reverse-finish.3"
}

# Stop recording and try to step live (pr19340).
with_test_prefix "live" {
    gdb_test "record stop" "Process record is stopped.*fun4\.4.*"
    gdb_test "info program" [multi_line \
      "Program stopped at $hex\." \
      "Type \"info stack\" or \"info registers\" for more information\."]
    gdb_test "reverse-next" "Reverse execution is not currently supported.*"
    gdb_test "step" ".*fun3\.2.*"
}
