1# Copyright 2008-2020 Free Software Foundation, Inc. 2# 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15# 16# This file is part of the gdb testsuite. 17 18# Test single stepping through atomic sequences beginning with 19# a lwarx/ldarx instruction and ending with a stwcx/stdcx 20# instruction. 21 22 23if {![istarget "powerpc*"] || ![is_lp64_target]} { 24 verbose "Skipping testing of powerpc64 single stepping over atomic sequences." 25 return 26} 27 28standard_testfile .S 29 30if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug quiet}] } { 31 return -1 32} 33 34# The test proper. DISPLACED is true if we should try with displaced 35# stepping. 36proc do_test { displaced } { 37 global decimal hex 38 39 if ![runto_main] then { 40 untested "could not run to main" 41 return -1 42 } 43 44 gdb_test_no_output "set displaced-stepping $displaced" 45 46 set bp1 [gdb_get_line_number "lwarx"] 47 gdb_breakpoint "$bp1" "Breakpoint $decimal at $hex" \ 48 "set the breakpoint at the start of the lwarx/stwcx sequence" 49 50 set bp2 [gdb_get_line_number "ldarx"] 51 gdb_breakpoint "$bp2" "Breakpoint $decimal at $hex" \ 52 "set the breakpoint at the start of the ldarx/stdcx sequence" 53 54 gdb_test continue "Continuing.*Breakpoint $decimal.*" \ 55 "continue until lwarx/stwcx start breakpoint" 56 57 gdb_test nexti "bne.*1b" \ 58 "step through the lwarx/stwcx sequence" 59 60 gdb_test continue "Continuing.*Breakpoint $decimal.*" \ 61 "continue until ldarx/stdcx start breakpoint" 62 63 gdb_test nexti "bne.*1b" \ 64 "step through the ldarx/stdcx sequence" 65} 66 67foreach displaced { "off" "on" } { 68 with_test_prefix "displaced=$displaced" { 69 do_test $displaced 70 } 71} 72