# Copyright 2020-2023 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 . # Test that inserting a hardware and a software breakpoint at the same # address behaves as expected. GDB used to consider hw and sw # breakpoint locations as duplicate locations, which would lead to bad # behavior. See PR gdb/25741. require allow_hw_breakpoint_tests set test hbreak set srcfile ${test}.c if { [prepare_for_testing "failed to prepare" ${test} ${srcfile}] } { return -1 } if ![runto_main] { return -1 } delete_breakpoints gdb_test_no_output "set breakpoint always-inserted on" gdb_test_no_output "set breakpoint condition-evaluation host" gdb_test_no_output "set confirm off" # Test inserting a hw breakpoint first, then a sw breakpoint at the # same address. with_test_prefix "hw-sw" { gdb_test "hbreak -q main" \ "Hardware assisted breakpoint .* at .*" \ "hbreak" gdb_test "break -q main" \ "Note: breakpoint .* also set at .*\r\nBreakpoint .* at .*" \ "break" # A bad GDB debugging against GDBserver would output a warning # here: # delete breakpoints # warning: Error removing breakpoint 3 # (gdb) FAIL: gdb.base/hw-sw-break-same-address.exp: hw-sw: delete breakpoints gdb_test_no_output "delete breakpoints" } # Now the opposite: test inserting a sw breakpoint first, then a hw # breakpoint at the same address. with_test_prefix "sw-hw" { gdb_test "break -q main" \ "Breakpoint .* at .*" \ "break" gdb_test "hbreak -q main" \ "Note: breakpoint .* also set at .*\r\nHardware assisted breakpoint .* at .*" \ "hbreak" gdb_test_no_output "delete breakpoints" }