This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Support inferior events in python


On Thu, 07 Jul 2011 15:45:14 +0200, sami wagiaalla wrote:
> On 07/06/2011 03:37 PM, Jan Kratochvil wrote:
> >I will check it in in some time without any comments.
> 
> Please do, and thank you for taking care of this :)

Checked in, with a technical re-diff.


Thanks,
Jan


http://sourceware.org/ml/gdb-cvs/2011-09/msg00076.html

--- src/gdb/testsuite/ChangeLog	2011/09/12 21:24:50	1.2851
+++ src/gdb/testsuite/ChangeLog	2011/09/13 21:39:58	1.2852
@@ -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>
 
--- src/gdb/testsuite/gdb.python/py-evsignal.exp
+++ src/gdb/testsuite/gdb.python/py-evsignal.exp	2011-09-13 21:40:18.445023000 +0000
@@ -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"
+    }
+}
--- src/gdb/testsuite/gdb.python/py-events.exp	2011/02/05 05:27:23	1.1
+++ src/gdb/testsuite/gdb.python/py-events.exp	2011/09/13 21:39:59	1.2
@@ -13,11 +13,6 @@
 # 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
 }
--- src/gdb/testsuite/gdb.python/py-evthreads.c	2011/02/05 05:27:23	1.1
+++ src/gdb/testsuite/gdb.python/py-evthreads.c	2011/09/13 21:39:59	1.2
@@ -19,37 +19,35 @@
 #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;
 }
--- src/gdb/testsuite/gdb.python/py-evthreads.exp	2011/07/18 04:14:21	1.4
+++ src/gdb/testsuite/gdb.python/py-evthreads.exp	2011/09/13 21:39:59	1.5
@@ -13,15 +13,16 @@
 # 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 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 "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"
-	}
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]