# Copyright 2015-2017 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/>.

standard_testfile insn-reloc.c
set executable $testfile
set expfile $testfile.exp

if { ![support_displaced_stepping] } {
    unsupported "displaced stepping"
    return -1
}

# Some targets have leading underscores on assembly symbols.
set additional_flags [gdb_target_symbol_prefix_flags]

if [prepare_for_testing "failed to prepare" $executable $srcfile \
	[list debug $additional_flags]] {
    return -1
}

if ![runto_main] {
    fail "can't run to main"
    return -1
}

# Read function name from testcases[N].

proc read_testcase { n } {
    global gdb_prompt

    set result -1
    gdb_test_multiple "print testcases\[${n}\]" "read name of test case ${n}" {
	-re "\[$\].*= .*<(.*)>.*$gdb_prompt $" {
	    set result $expect_out(1,string)
	}
	-re "$gdb_prompt $" { }
    }

    return $result
}

set n_testcases [get_integer_valueof "n_testcases" 0]
if { ${n_testcases} == 0 } {
    untested "no instruction relocation to test"
    return 1
}

# Set a fast tracepoint on each set_point${i} symbol.  There is one for
# each testcase.
for { set i 0 } { ${i} < ${n_testcases} } { incr i } {
    set testcase [read_testcase $i]

    gdb_test "break *set_point$i" "Breakpoint .*" "breakpoint on ${testcase}"
}

gdb_test "break pass" ".*" ""
gdb_test "break fail" ".*" ""

gdb_test_no_output "set displaced-stepping on"

# Make sure we have hit the pass breakpoint for each testcase.
for { set i 0 } { ${i} < ${n_testcases} } { incr i } {
    set testcase [read_testcase $i]

    with_test_prefix "${testcase}" {
	gdb_test "continue" ".*Breakpoint \[0-9\]+, .*" \
	    "go to breakpoint $i"

	gdb_test "continue" ".*Breakpoint \[0-9\]+, pass \(\).*" \
	    "relocated instruction"
    }
}
