# Copyright 2014-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 . if {[skip_hw_breakpoint_tests]} { return 0 } standard_testfile if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} { return -1 } if ![runto_main] { fail "can't run to main" return -1 } # If we can read the memory at address 0, skip the test. if { [is_address_zero_readable] } { untested "memory at address 0 is readable" return } delete_breakpoints # Test whether the target supports hardware breakpoints at all. set supports_hbreak 0 set test "probe hardware breakpoint support" gdb_test_multiple "hbreak -q main" $test { -re "No hardware breakpoint support in the target.*$gdb_prompt $" { pass $test } -re "Hardware breakpoints used exceeds limit.*$gdb_prompt $" { pass $test } -re "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*$gdb_prompt $" { set supports_hbreak 1 pass $test } } if {!$supports_hbreak} { unsupported "hardware breakpoints" return } delete_breakpoints # Force immediate breakpoint insertion. gdb_test_no_output "set breakpoint always-inserted on" # Hardware breakpoints are implemented using a mechanism that is not # dependent on being able to modify the target's memory, we should be # able to set them even in unmapped memory areas. gdb_test "hbreak *0" "Hardware assisted breakpoint \[0-9\]+ at 0x0" gdb_test "info break" "hw breakpoint.*y.*0x0\+\[ \t\]\+" \ "info break shows hw breakpoint" gdb_test_no_output "delete \$bpnum" "" "delete" \ "delete hw breakpoint" gdb_test "info break" "No breakpoints or watchpoints\." \ "info break shows no breakpoints"