# Copyright 2008, 2009 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 ![target_info exists gdb,can_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 [target_info exists gdb,use_precord] {
    # Activate process record/replay
    gdb_test "record" "" "Turn on process record"
    # FIXME: command ought to acknowledge, so we can test if it succeeded.
}

# Only software watchpoints can be used in reverse
gdb_test "set can-use-hw-watchpoints 0" "" ""

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:.*"

###
###
###

# FIXME 'set exec-dir' command should give some output so we can test.
gdb_test "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"


return 0
