1# Copyright 2014-2023 Free Software Foundation, Inc. 2# This program is free software; you can redistribute it and/or modify 3# it under the terms of the GNU General Public License as published by 4# the Free Software Foundation; either version 3 of the License, or 5# (at your option) any later version. 6# 7# This program is distributed in the hope that it will be useful, 8# but WITHOUT ANY WARRANTY; without even the implied warranty of 9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10# GNU General Public License for more details. 11# 12# You should have received a copy of the GNU General Public License 13# along with this program. If not, see <http://www.gnu.org/licenses/>. 14 15# Test that GDB doesn't lose control when a breakpoint is set at the 16# same address as a dprintf. 17 18standard_testfile 19 20if [build_executable "failed to prepare" \ 21 ${testfile} ${srcfile} {debug}] { 22 return -1 23} 24 25set dp_location [gdb_get_line_number "set dprintf here"] 26 27proc test { style } { 28 global gdb_prompt binfile dp_location 29 30 with_test_prefix "$style" { 31 clean_restart $binfile 32 33 if ![runto_main] { 34 return -1 35 } 36 37 delete_breakpoints 38 39 gdb_test_no_output "set dprintf-style $style" 40 41 # Enable always-inserted so we can control the breakpoint 42 # insertion order. 43 gdb_test_no_output "set breakpoint always-inserted on" 44 45 set test "set dprintf" 46 gdb_test_multiple "dprintf $dp_location, \"y=%d\\n\", y" $test { 47 -re "cannot run dprintf commands.*$gdb_prompt $" { 48 unsupported $test 49 } 50 -re "Dprintf .* at .*$gdb_prompt $" { 51 pass $test 52 } 53 } 54 55 # In case of agent style, this should force the target to 56 # report the trap to GDB. IOW, GDB should remove the commands 57 # from the target-side breakpoint. 58 gdb_test "break $dp_location" ".*" "set breakpoint" 59 60 gdb_test "continue" "set dprintf here.*" 61 } 62} 63 64test "gdb" 65test "agent" 66