From e46eeeddfb308cacd863f11a433c10ff1d403827 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 12 Jan 2016 12:30:33 +0000 Subject: [PATCH] Test gdb.base/random-signal.exp with "attach" This exposes the issued fixed by 2f99e8fc9cb8: https://sourceware.org/ml/gdb-patches/2015-12/msg00423.html to native debugging as well. gdb/testsuite/ChangeLog: 2016-01-12 Pedro Alves * gdb.base/random-signal.exp (do_test): New procedure, with body of testcase moved in. (top level) Call it twice, once with "run" and once with "attach". --- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.base/random-signal.exp | 56 +++++++++++++++++++----- 2 files changed, 50 insertions(+), 11 deletions(-) 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 } -# 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" +# 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 + } +} -- 2.34.1