Probe catch syscall support
authorYao Qi <yao.qi@linaro.org>
Tue, 28 Jun 2016 11:02:35 +0000 (12:02 +0100)
committerYao Qi <yao.qi@linaro.org>
Tue, 28 Jun 2016 11:03:28 +0000 (12:03 +0100)
In 82075af2c14b1f8a54fa5796fb63f7ef23f98d9d (Implement 'catch syscall'
for gdbserver), only x86 is supported, but the test can still be run
on other linux targets, like aarch64 and ppc, with native-gdbserver.
This causes many new fails.

This patch removes the check on isnative and on target triplets.
Instead, we can insert catch point, and resume the program to see whether
catch syscall is supported or not.

gdb/testsuite:

2016-06-28  Yao Qi  <yao.qi@linaro.org>

* gdb.base/catch-syscall.exp: Remove check on isnative and target
triplets.  Start gdb, execute catch syscall, and continue.  Check
gdb's output to determine catch syscall is supported.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/catch-syscall.exp

index b7e30f53365df861e0a6360055d5e6817d28fdeb..8ce6ee8902786f04debea7d38275ff4671cf3403 100644 (file)
@@ -1,3 +1,9 @@
+2016-06-28  Yao Qi  <yao.qi@linaro.org>
+
+       * gdb.base/catch-syscall.exp: Remove check on isnative and target
+       triplets.  Start gdb, execute catch syscall, and continue.  Check
+       gdb's output to determine catch syscall is supported.
+
 2016-06-27  Manish Goregaokar  <manish@mozilla.com>
 
        * gdb.rust/simple.rs: Add test for returning unit in a function
index 5679000d82c8a6834823c94bb7456b4b560ad09e..f3ab6cbfbb8a70205189a9415ea432441f8ccf9b 100644 (file)
 # It was written by Sergio Durigan Junior <sergiodj@linux.vnet.ibm.com>
 # on September/2008.
 
-if { ![isnative] } then {
-    continue
-}
-
-# This shall be updated whenever 'catch syscall' is implemented
-# on some architecture.
-if { ![istarget "x86_64-*-linux*"] && ![istarget "i\[34567\]86-*-linux*"]
-     && ![istarget "powerpc-*-linux*"] && ![istarget "powerpc64-*-linux*"]
-     && ![istarget "sparc-*-linux*"] && ![istarget "sparc64-*-linux*"]
-     && ![istarget "mips*-linux*"] && ![istarget "arm*-linux*"]
-     && ![istarget "s390*-linux*"] && ![istarget "aarch64*-*-linux*"] } {
-     continue
-}
-
 standard_testfile
 
 if  { [prepare_for_testing ${testfile}.exp $testfile ${testfile}.c] } {
@@ -40,6 +26,35 @@ if  { [prepare_for_testing ${testfile}.exp $testfile ${testfile}.c] } {
      return -1
 }
 
+# Check target supports catch syscall or not.
+clean_restart $binfile
+if ![runto_main] then {
+    fail "Can't run to main"
+    return
+}
+
+set test "catch syscall"
+gdb_test_multiple $test $test {
+    -re "The feature \'catch syscall\' is not supported.*\r\n$gdb_prompt $" {
+       unsupported "catch syscall isn't supported"
+       return -1
+    }
+    -re ".*$gdb_prompt $" {
+       pass $test
+    }
+}
+
+set test "check catch syscall"
+gdb_test_multiple "continue" $test {
+    -re ".*Your system does not support this type\r\nof catchpoint.*$gdb_prompt $" {
+       unsupported "catch syscall isn't supported"
+       return -1
+    }
+    -re ".*Catchpoint.*$gdb_prompt $" {
+      pass $test
+    }
+}
+
 # All (but the last) syscalls from the example code.  It is filled in
 # proc setup_all_syscalls.
 set all_syscalls { }