# Copyright (C) 2012-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/>.

if ![supports_reverse] {
    return
}

standard_testfile ".S" "${gdb_test_file_name}-nodebug.S"
set executable ${testfile}

if [info exists COMPILE] {
    # make check RUNTESTFLAGS="gdb.reverse/singlejmp-reverse.exp COMPILE=1"
    if { [build_executable_from_specs ${testfile}.exp $executable {} \
				      ${testfile}.c {debug optimize=-O2} \
				      ${testfile}-nodebug.c {optimize=-O2} \
				      ] == -1 } {
	return -1
    }
} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
    verbose "Skipping ${testfile}."
    return
} elseif { [build_executable ${testfile}.exp ${testfile} \
	    [list ${srcfile} ${srcfile2}] {}] == -1 } {
    return -1
}

clean_restart $executable

if ![runto_main] {
    return -1
}

if [supports_process_record] {
    gdb_test_no_output "record"
}

gdb_test "next" {v = 1;} "next to v = 1"
gdb_test "next" {f \(\);} "next to f"
gdb_test "next" {nodebug \(\);} "next to nodebug"
gdb_test "next" {v = 3;} "next to v = 3"

# FAIL was:
# No more reverse-execution history.
# {
gdb_test "reverse-step" {nodebug \(\);}

# FAIL was:
# No more reverse-execution history.
# {
gdb_test "reverse-next" {f \(\);}
