1# Copyright 2013-2024 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 16require {!target_info exists gdb,nosignals} 17 18# This test requires sending ^C to interrupt the running target. 19require {!target_info exists gdb,nointerrupts} 20 21standard_testfile 22 23if {[build_executable "failed to prepare" $testfile $srcfile debug]} { 24 return -1 25} 26 27# Set a software watchpoint, continue, wait a bit and stop the target 28# with ctrl-c. A software watchpoint forces the target to 29# single-step. 30proc do_test {} { 31 global binfile 32 33 gdb_test_no_output "set can-use-hw-watchpoints 0" 34 gdb_test "watch v" "Watchpoint .*" 35 gdb_test_multiple "continue" "continue" { 36 -re "Continuing" { 37 pass "continue" 38 } 39 } 40 41 # For this to work we must be sure to consume the "Continuing." 42 # message first, or GDB's signal handler may not be in place. 43 after 500 {send_gdb "\003"} 44 gdb_test "" "Program received signal SIGINT.*" "stop with control-c" 45} 46 47# With native debugging and "run" (with job control), the ctrl-c 48# always reaches the inferior, not gdb, even if ctrl-c is pressed 49# while gdb is processing the internal software watchtpoint 50# single-step. With remote debugging, the ctrl-c reaches GDB first. 51with_test_prefix "run" { 52 clean_restart $binfile 53 54 if {![runto_main]} { 55 return -1 56 } 57 58 do_test 59} 60 61# With "attach" however, even with native debugging, the ctrl-c always 62# reaches GDB first. Test that as well. 63with_test_prefix "attach" { 64 if {[can_spawn_for_attach]} { 65 clean_restart $binfile 66 67 set test_spawn_id [spawn_wait_for_attach $binfile] 68 set testpid [spawn_id_get_pid $test_spawn_id] 69 70 gdb_test "attach $testpid" "Attaching to.*process $testpid.*libc.*" "attach" 71 72 do_test 73 74 kill_wait_spawned_process $test_spawn_id 75 } 76} 77