1# Copyright 2001-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 was written by Michael Snyder. (msnyder@redhat.com) 17 18# 19# Test breakpoints at consecutive instruction addresses. 20# 21 22 23standard_testfile 24 25if [get_compiler_info] { 26 return -1 27} 28 29if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug nowarnings}]} { 30 return -1 31} 32 33if ![runto_main] then { 34 perror "couldn't run to breakpoint" 35 continue 36} 37 38set is_stmt [is_stmt_addresses $srcfile] 39 40set nl "\[\r\n\]+" 41 42gdb_breakpoint foo 43gdb_test "continue" "Breakpoint $decimal, foo .*" \ 44 "continue to breakpoint in foo" 45 46set bp_addr 0 47set stop_addr 0 48 49gdb_test_multiple "x /2i \$pc" "get breakpoint address for foo" { 50 -re "=> $hex.*${nl} ($hex).*$gdb_prompt $" { 51 set bp_addr $expect_out(1,string) 52 pass "get breakpoint address for foo" 53 } 54} 55 56gdb_test "break \*$bp_addr" "Breakpoint $decimal at $bp_addr: file .*" \ 57 "set bp, 2nd instr" 58 59gdb_test_multiple "step" "stopped at bp, 2nd instr" { 60 -re -wrap "Breakpoint $decimal, ($hex) in foo.*" { 61 set stop_addr $expect_out(1,string) 62 if [eval expr "$bp_addr == $stop_addr"] then { 63 pass "stopped at bp, 2nd instr" 64 } else { 65 fail "stopped at bp, 2nd instr (wrong address)" 66 } 67 } 68 -re -wrap "Breakpoint $decimal, foo.*" { 69 set stop_addr [get_valueof "/x" "\$pc" "" "value of pc"] 70 set stop_addr_is_stmt [hex_in_list $stop_addr $is_stmt] 71 if { ! $stop_addr_is_stmt } { 72 fail "stopped at bp, 2nd instr (missing hex prefix)" 73 } elseif [eval expr "$bp_addr == $stop_addr"] then { 74 pass "stopped at bp, 2nd instr" 75 } else { 76 fail "stopped at bp, 2nd instr (wrong address)" 77 } 78 } 79} 80 81