diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c5cee45eaa..da9c70a75d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-12 Pedro Alves + + * gdb.base/random-signal.exp (do_test): New procedure, with body + of testcase moved in. + 2016-01-11 Jan Kratochvil Pedro Alves diff --git a/gdb/testsuite/gdb.base/random-signal.exp b/gdb/testsuite/gdb.base/random-signal.exp index a6170cc941..b14662a33d 100644 --- a/gdb/testsuite/gdb.base/random-signal.exp +++ b/gdb/testsuite/gdb.base/random-signal.exp @@ -30,19 +30,53 @@ if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { return -1 } -if {![runto_main]} { - return -1 +# Set a software watchpoint, continue, wait a bit and stop the target +# with ctrl-c. A software watchpoint forces the target to +# single-step. +proc do_test {} { + global binfile + + gdb_test_no_output "set can-use-hw-watchpoints 0" + gdb_test "watch v" "Watchpoint .*" + gdb_test_multiple "continue" "continue" { + -re "Continuing" { + pass "continue" + } + } + + # For this to work we must be sure to consume the "Continuing." + # message first, or GDB's signal handler may not be in place. + after 500 {send_gdb "\003"} + gdb_test "" "Program received signal SIGINT.*" "stop with control-c" } -gdb_test_no_output "set can-use-hw-watchpoints 0" -gdb_test "watch v" "Watchpoint .*" -gdb_test_multiple "continue" "continue" { - -re "Continuing" { - pass "continue" +# With native debugging and "run" (with job control), the ctrl-c +# always reaches the inferior, not gdb, even if ctrl-c is pressed +# while gdb is processing the internal software watchtpoint +# single-step. With remote debugging, the ctrl-c reaches GDB first. +with_test_prefix "run" { + clean_restart $binfile + + if {![runto_main]} { + return -1 + } + + do_test +} + +# With "attach" however, even with native debugging, the ctrl-c always +# reaches GDB first. Test that as well. +with_test_prefix "attach" { + if {[can_spawn_for_attach]} { + clean_restart $binfile + + set test_spawn_id [spawn_wait_for_attach $binfile] + set testpid [spawn_id_get_pid $test_spawn_id] + + gdb_test "attach $testpid" "Attaching to.*process $testpid.*libc.*" "attach" + + do_test + + kill_wait_spawned_process $test_spawn_id } } - -# For this to work we must be sure to consume the "Continuing." -# message first, or GDB's signal handler may not be in place. -after 500 {send_gdb "\003"} -gdb_test "" "Program received signal SIGINT.*" "stop with control-c"