#   Copyright 2008-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.  It tests reverse debugging
# with breakpoints.

if ![supports_reverse] {
    return
}

standard_testfile

if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
    return -1
}

set foo_location  [gdb_get_line_number "break in foo" ]
set bar_location  [gdb_get_line_number "break in bar" ]
set main_location [gdb_get_line_number "break in main"]
set end_location  [gdb_get_line_number "end of main"  ]

runto_main

if [supports_process_record] {
    # Activate process record/replay
    gdb_test_no_output "record" "turn on process record"
}

gdb_test "break foo" \
    "Breakpoint $decimal at .* line $foo_location\." \
    "set breakpoint on foo"

gdb_test "break bar" \
    "Breakpoint $decimal at .* line $bar_location\." \
    "set breakpoint on bar"

gdb_test "break $end_location" \
    "Breakpoint $decimal at .* line $end_location\." \
    "set breakpoint at end of main"

gdb_continue_to_breakpoint "foo forward, the first time" \
    ".*$srcfile:$foo_location.*"
gdb_continue_to_breakpoint "bar forward, the first time" \
    ".*$srcfile:$bar_location.*"
gdb_continue_to_breakpoint "end forward, the first time" \
    ".*$srcfile:$end_location.*"

gdb_test_no_output "set exec-direction reverse" "set reverse"

gdb_continue_to_breakpoint "bar backward"  ".*$srcfile:$bar_location.*"
gdb_continue_to_breakpoint "foo backward"  ".*$srcfile:$foo_location.*"

gdb_test_multiple "continue" "main backward" {
    -re ".*Breakpoint $decimal,.*$srcfile:$main_location.*$gdb_prompt $" {
	pass "main backward"
    }
    -re "No more reverse-execution history.* break in main .*$gdb_prompt $" {
	pass "main backward"
    }
}

gdb_test_no_output "set exec-direction forward" "set forward"

gdb_continue_to_breakpoint "foo forward again" \
    ".*$srcfile:$foo_location.*"
gdb_continue_to_breakpoint "bar forward again" \
    ".*$srcfile:$bar_location.*"

gdb_test_multiple "continue" "end of record log" {
    -re ".*Breakpoint $decimal,.*$srcfile:$end_location.*$gdb_prompt $" {
	pass "end of record log"
    }
    -re "No more reverse-execution history.* end of main .*$gdb_prompt $" {
	pass "end of record log"
    }
}
