gdb/testsuite/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 13 Sep 2011 21:39:59 +0000 (21:39 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 13 Sep 2011 21:39:59 +0000 (21:39 +0000)
* gdb.python/py-events.exp: Remove pretty printing comment.
* gdb.python/py-evsignal.exp: New file.
* gdb.python/py-evthreads.c: Include signal.h.
(thread3): Remove variable count3.  Remove variable bad and use raise
instead.
(thread2): Remove variable count2.  Move thread3 pthread_create here,
merge pthread_join to a single line.
(main): Remove variable count1.  Merge pthread_join with pthread_create
to a single line.
* gdb.python/py-evthreads.exp: Remove pretty printing comment.  New
KFAIL python/12966 for gdbserver.  Test return value of
gdb_compile_pthreads.  Use gdb_run_cmd.  Replace send_gdb and
gdb_expect by gdb_test and gdb_test_multiple.
(thread 2, thread 3): New tests.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-events.exp
gdb/testsuite/gdb.python/py-evsignal.exp [new file with mode: 0644]
gdb/testsuite/gdb.python/py-evthreads.c
gdb/testsuite/gdb.python/py-evthreads.exp

index 9d85d02..62eb291 100644 (file)
@@ -1,3 +1,21 @@
+2011-09-13  Sami Wagiaalla  <swagiaal@redhat.com>
+           Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.python/py-events.exp: Remove pretty printing comment.
+       * gdb.python/py-evsignal.exp: New file.
+       * gdb.python/py-evthreads.c: Include signal.h.
+       (thread3): Remove variable count3.  Remove variable bad and use raise
+       instead.
+       (thread2): Remove variable count2.  Move thread3 pthread_create here,
+       merge pthread_join to a single line.
+       (main): Remove variable count1.  Merge pthread_join with pthread_create
+       to a single line.
+       * gdb.python/py-evthreads.exp: Remove pretty printing comment.  New
+       KFAIL python/12966 for gdbserver.  Test return value of
+       gdb_compile_pthreads.  Use gdb_run_cmd.  Replace send_gdb and
+       gdb_expect by gdb_test and gdb_test_multiple.
+       (thread 2, thread 3): New tests.
+
 2011-09-12  Matt Rice  <ratmice@gmail.com>
            Pedro Alves  <pedro@codesourcery.com>
 
index e5d6daf..8493809 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This file is part of the GDB testsuite.  It tests Python-based
-# pretty-printing for the CLI.
-
-# Skip all tests if Python scripting is not enabled.
-
 if $tracelevel then {
     strace $tracelevel
 }
diff --git a/gdb/testsuite/gdb.python/py-evsignal.exp b/gdb/testsuite/gdb.python/py-evsignal.exp
new file mode 100644 (file)
index 0000000..5424c92
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+if {[is_remote target]} {
+    # RuntimeError: Could not find event thread
+    kfail "python/12966" "Signal Thread 3"
+    return -1
+}
+
+load_lib gdb-python.exp
+
+set testfile "py-evsignal"
+set srcfile py-evthreads.c
+set binfile ${objdir}/${subdir}/${testfile}
+set pyfile ${srcdir}/${subdir}/py-events.py
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
+clean_restart $testfile
+
+if { [skip_python_tests] } { continue }
+
+gdb_test_no_output "python execfile ('${pyfile}')" ""
+
+gdb_test "Test_Events" "Event testers registered."
+gdb_test_no_output "set non-stop on"
+gdb_test_no_output "set target-async on"
+
+gdb_run_cmd
+gdb_test_multiple "" "Signal Thread 3"  {
+    -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n$gdb_prompt $" {
+        pass "thread 3 was signaled"
+    }
+    -re "The target does not support running in non-stop mode"  {
+        unsupported "non-stop mode is unsupported"
+    }
+}
index 1464ce6..65bce44 100644 (file)
 #include <stdio.h>
 #include <pthread.h>
 #include <unistd.h>
+#include <signal.h>
 
 pthread_t thread2_id;
 pthread_t thread3_id;
 
 void* thread3 (void* d)
 {
-  int count3 = 0;
-  count3++;
-
-  int *bad;
-  *bad = 1;
+  raise (SIGUSR1);
 
   return NULL;
 }
 
 void* thread2 (void* d)
 {
-  int count2 = 0;
-  count2++;
+  /* Do not quit thread3 asynchronously wrt thread2 stop - wait first on
+     thread3_id to stop.  It would complicate testcase receiption of the
+     events.  */
+
+  pthread_create (&thread3_id, NULL, thread3, NULL); pthread_join (thread3_id, NULL);
+
   return NULL;
 }
 
-int main (){
-
-  pthread_create (&thread2_id, NULL, thread2, NULL);
-  pthread_create (&thread3_id, NULL, thread3, NULL);
+int main (void)
+{
+  /* Use single line to not to race whether `thread2' breakpoint or `next' over
+     pthread_create will stop first.  */
 
-  int count1 = 0; // stop1
-  count1++;
+  pthread_create (&thread2_id, NULL, thread2, NULL); pthread_join (thread2_id, NULL);
 
-  pthread_join (thread2_id, NULL);
-  pthread_join (thread3_id, NULL);
   return 12;
 }
index c401943..5009fc7 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This file is part of the GDB testsuite.  It tests Python-based
-# pretty-printing for the CLI.
-
-# Skip all tests if Python scripting is not enabled.
-
 if $tracelevel then {
     strace $tracelevel
 }
 
+if {[is_remote target]} {
+    # RuntimeError: Could not find event thread
+    kfail "python/12966" "Run to breakpoint 1"
+    return -1
+}
+
 if { ![support_displaced_stepping] } { 
     unsupported "displaced stepping"
     return -1
@@ -34,7 +35,9 @@ set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 set pyfile ${srcdir}/${subdir}/py-events.py
 
-gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
 clean_restart $testfile
 
 if { [skip_python_tests] } { continue }
@@ -49,76 +52,37 @@ gdb_breakpoint "main"
 gdb_breakpoint "thread2"
 gdb_breakpoint "thread3"
 
-send_gdb "run\n"
-gdb_expect {
-    -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 1.*
-.*thread num: 1.*" {
-        pass "reached breakpoint 1"
+gdb_run_cmd
+set test "Run to breakpoint 1"
+gdb_test_multiple "" $test {
+    -re "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 1\r\nthread num: 1\r\n$gdb_prompt $" {
+        pass $test
     }
-    timeout {
-           fail "did not reach breakpoint 1"
-       }
-}
-
-send_gdb "next\n"
-gdb_expect {
-    -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 2.*
-.*thread num: 2.*" {
-        pass "reached breakpoint 2"
+    -re "The target does not support running in non-stop mode" {
+        unsupported "non-stop mode is unsupported"
+        return
     }
-    timeout {
-           fail "did not reach breakpoint 2"
-       }
 }
 
-send_gdb "next\n"
-gdb_expect {
-    -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 3.*
-.*thread num: 3.*" {
-        pass "reached breakpoint 3"
-    }
-    timeout {
-           fail "did not reach breakpoint 3"
-       }
-}
+gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 2\r\nthread num: 2" "reached breakpoint 2"
 
-send_gdb "continue&\n"
-gdb_expect {
-    -re ".*event type: continue.*
-.*thread num: 1.*\r\n$gdb_prompt $" {
-        pass "continue thread 1"
-    }
-    timeout {
-           fail "continue thread 1 failed"
-       }
-}
+gdb_test "thread 2" {\[Switching to thread 2 .*}
+
+gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 3\r\nthread num: 3" "reached breakpoint 3"
+
+gdb_test "thread 3" {\[Switching to thread 3 .*}
 
-gdb_test "thread 2" ".*Switching to thread 2.*"
-send_gdb "continue&\n"
-gdb_expect {
-    -re ".*event type: continue.*
-.*thread num: 2.*" {
-        pass "continue thread 2"
+set test "continue thread 1"
+gdb_test_multiple "continue&" $test {
+    -re "event type: continue\r\nthread num: 3\r\n$gdb_prompt " {
+       # This expect string must not expect the end-of-buffer '$'.
+        pass $test
     }
-    timeout {
-           fail "continue thread 2 failed"
-       }
 }
 
-send_gdb "continue -a\n"
-gdb_expect {
-    -re ".*stop reason: signal.*
-.*stop signal: SIGSEGV.*
-.*thread num: 3.*" {
-        pass "thread 3 was signalled"
+set test "thread 3 was signaled"
+gdb_test_multiple "" $test {
+    -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n$" {
+        pass $test
     }
-    timeout {
-           fail "thread 3 was not signalled"
-       }
 }