Thanks,
Jan
2011-07-06 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.
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events.exp
@@ -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
}
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-evsignal.exp
@@ -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"
+ }
+}
--- a/gdb/testsuite/gdb.python/py-evthreads.c
+++ b/gdb/testsuite/gdb.python/py-evthreads.c
@@ -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;
}
--- a/gdb/testsuite/gdb.python/py-evthreads.exp
+++ b/gdb/testsuite/gdb.python/py-evthreads.exp
@@ -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
+}
+
load_lib gdb-python.exp
set testfile "py-evthreads"
@@ -29,7 +30,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 }
@@ -44,76 +47,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"
- }
}