# Copyright 2008, 2009, 2010, 2011 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/>.

# Based on a file written by Fred Fish. (fnf@cygnus.com)
# This file is part of the GDB testsuite.  It tests reverse debugging
# with watchpoints.


if ![supports_reverse] {
    return
}

set testfile "watch-reverse"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
    return -1
}

runto main

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

# Test software watchpoints
gdb_test_no_output "set can-use-hw-watchpoints 0" "disable hw watchpoints"

gdb_test "break marker1" \
    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
    "set breakpoint at marker1"

gdb_test "break marker2" \
    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
    "set breakpoint at marker2"

gdb_continue_to_breakpoint "marker1" ".*/$srcfile:.*"

gdb_test "watch ival3" \
    ".*\[Ww\]atchpoint $decimal: ival3.*" \
    "set watchpoint on ival3"

# Continue until first change, from -1 to 0

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, first time"

# Continue until the next change, from 0 to 1.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, second time"

# Continue until the next change, from 1 to 2.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 1.*New value = 2.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, third time"

# Continue until the next change, from 2 to 3.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 2.*New value = 3.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, fourth time"

# Continue until the next change, from 3 to 4.
# Note that this one is outside the loop.

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 3.*New value = 4.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, fifth time"

# Continue until we hit the finishing marker function.
# Make sure we hit no more watchpoints.

gdb_continue_to_breakpoint "marker2" ".*/$srcfile:.*"

###
###
###

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

# Reverse until the previous change, from 4 to 3
# Note that this one is outside the loop

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 4.*New value = 3.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, first time"

# Reverse until the previous change, from 3 to 2.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 3.*New value = 2.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, second time"

# Reverse until the previous change, from 2 to 1.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 2.*New value = 1.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, third time"

# Reverse until the previous change, from 1 to 0.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 1.*New value = 0.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, fourth time"

# Reverse until first change, from 0 to -1

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = -1.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, fifth time"

gdb_test_no_output "set can-use-hw-watchpoints 1" "enable hw watchpoints"

###
###
###

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

# Continue until first change, from -1 to 0

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, forward replay, first time"

# Continue until the next change, from 0 to 1.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, forward replay, second time"

# Continue until the next change, from 1 to 2.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 1.*New value = 2.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, forward replay, third time"

# Continue until the next change, from 2 to 3.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 2.*New value = 3.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, forward replay, fourth time"

# Continue until the next change, from 3 to 4.
# Note that this one is outside the loop.

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 3.*New value = 4.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit, forward replay, fifth time"

# Continue until we hit the finishing marker function.
# Make sure we hit no more watchpoints.

gdb_test "continue" "marker2 .*" "replay forward to marker2"

###
###
###

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

# Reverse until the previous change, from 4 to 3
# Note that this one is outside the loop

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 4.*New value = 3.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, HW, first time"

# Reverse until the previous change, from 3 to 2.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 3.*New value = 2.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, HW, second time"

# Reverse until the previous change, from 2 to 1.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 2.*New value = 1.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, HW, third time"

# Reverse until the previous change, from 1 to 0.
gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 1.*New value = 0.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, HW, fourth time"

# Reverse until first change, from 0 to -1

gdb_test "continue" \
    ".*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = -1.*ival3 = count; ival4 = count;.*" \
    "watchpoint hit in reverse, HW, fifth time"

