From 0935723e5e203625c49e97753a79902f919fbded Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 13 Sep 2011 21:39:59 +0000 Subject: [PATCH] gdb/testsuite/ * 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 | 18 ++++ gdb/testsuite/gdb.python/py-events.exp | 5 - gdb/testsuite/gdb.python/py-evsignal.exp | 54 +++++++++++ gdb/testsuite/gdb.python/py-evthreads.c | 28 +++--- gdb/testsuite/gdb.python/py-evthreads.exp | 106 +++++++--------------- 5 files changed, 120 insertions(+), 91 deletions(-) create mode 100644 gdb/testsuite/gdb.python/py-evsignal.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9d85d02332..62eb291337 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2011-09-13 Sami Wagiaalla + Jan Kratochvil + + * 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 Pedro Alves diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp index e5d6daf44f..8493809010 100644 --- 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 . -# 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 index 0000000000..5424c922a0 --- /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 . + +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" + } +} diff --git a/gdb/testsuite/gdb.python/py-evthreads.c b/gdb/testsuite/gdb.python/py-evthreads.c index 1464ce6a48..65bce440d2 100644 --- a/gdb/testsuite/gdb.python/py-evthreads.c +++ b/gdb/testsuite/gdb.python/py-evthreads.c @@ -19,37 +19,35 @@ #include #include #include +#include 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 (){ +int main (void) +{ + /* Use single line to not to race whether `thread2' breakpoint or `next' over + pthread_create will stop first. */ - pthread_create (&thread2_id, NULL, thread2, NULL); - pthread_create (&thread3_id, NULL, thread3, NULL); + pthread_create (&thread2_id, NULL, thread2, NULL); pthread_join (thread2_id, NULL); - int count1 = 0; // stop1 - count1++; - - pthread_join (thread2_id, NULL); - pthread_join (thread3_id, NULL); return 12; } diff --git a/gdb/testsuite/gdb.python/py-evthreads.exp b/gdb/testsuite/gdb.python/py-evthreads.exp index c4019439ed..5009fc7367 100644 --- 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 . -# 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 + } + -re "The target does not support running in non-stop mode" { + unsupported "non-stop mode is unsupported" + return } - 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" +gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 2\r\nthread num: 2" "reached breakpoint 2" + +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 .*} + +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 "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" +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 "did not reach breakpoint 3" - } -} - -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.*" -send_gdb "continue&\n" -gdb_expect { - -re ".*event type: continue.* -.*thread num: 2.*" { - pass "continue thread 2" - } - 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" - } - timeout { - fail "thread 3 was not signalled" - } }