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