# 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 stepping.
# Lots of code borrowed from "step-test.exp".

#
# reverse-next over a function call sets a step-resume breakpoint at
# callee's entry point, runs to it, and then does an extra single-step
# to get at the callee's caller.  Test that a user breakpoint set at
# the same location as the step-resume breakpoint isn't ignored.
#

if ![supports_reverse] {
    return
}

standard_testfile step-reverse.c

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

if ![runto_main] then {
    return 0
}

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

set lineno [gdb_get_line_number "STEP INTO THIS CALL"]
gdb_test "advance $lineno" ".*STEP INTO THIS CALL.*" "get past callee call"

gdb_test "b \*callee" "" "set breakpoint at callee's entry"

set bpnum [get_integer_valueof "\$bpnum" 0]
gdb_test "reverse-next" \
    "Breakpoint $bpnum, callee.*" \
    "reverse-next over call trips user breakpoint at function entry"

gdb_test "up" \
    ".*NEXT OVER THIS CALL.*" \
    "stopped at the right callee call"
