# Copyright 2015-2020 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 . 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" } }