1# Copyright 2014-2020 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 [prepare_for_testing "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 fail "can't run to main" 35 return -1 36 } 37 38 delete_breakpoints 39 40 gdb_test_no_output "set dprintf-style $style" 41 42 # Enable always-inserted so we can control the breakpoint 43 # insertion order. 44 gdb_test_no_output "set breakpoint always-inserted on" 45 46 set test "set dprintf" 47 gdb_test_multiple "dprintf $dp_location, \"y=%d\\n\", y" $test { 48 -re "cannot run dprintf commands.*$gdb_prompt $" { 49 unsupported $test 50 } 51 -re "Dprintf .* at .*$gdb_prompt $" { 52 pass $test 53 } 54 } 55 56 # In case of agent style, this should force the target to 57 # report the trap to GDB. IOW, GDB should remove the commands 58 # from the target-side breakpoint. 59 gdb_test "break $dp_location" ".*" "set breakpoint" 60 61 gdb_test "continue" "set dprintf here.*" 62 } 63} 64 65test "gdb" 66test "agent" 67