Test gdb.base/random-signal.exp with "attach"
authorPedro Alves <palves@redhat.com>
Tue, 12 Jan 2016 12:30:33 +0000 (12:30 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 12 Jan 2016 12:30:33 +0000 (12:30 +0000)
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  <palves@redhat.com>

* 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
gdb/testsuite/gdb.base/random-signal.exp

index c5cee45..da9c70a 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-12  Pedro Alves  <palves@redhat.com>
+
+       * gdb.base/random-signal.exp (do_test): New procedure, with body
+       of testcase moved in.
+
 2016-01-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Pedro Alves  <palves@redhat.com>
 
index a6170cc..b14662a 100644 (file)
@@ -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
+    }
+}