From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24766 invoked by alias); 6 Jul 2011 19:38:17 -0000 Received: (qmail 24758 invoked by uid 22791); 6 Jul 2011 19:38:15 -0000 X-SWARE-Spam-Status: No, hits=-6.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 06 Jul 2011 19:37:56 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p66JbmUL005936 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 6 Jul 2011 15:37:48 -0400 Received: from host1.jankratochvil.net (ovpn-113-91.phx2.redhat.com [10.3.113.91]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p66Jbj6i029724 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 6 Jul 2011 15:37:47 -0400 Received: from host1.jankratochvil.net (localhost [127.0.0.1]) by host1.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p66Jbi2F011959; Wed, 6 Jul 2011 21:37:44 +0200 Received: (from jkratoch@localhost) by host1.jankratochvil.net (8.14.4/8.14.4/Submit) id p66JbgsC011958; Wed, 6 Jul 2011 21:37:42 +0200 Date: Wed, 06 Jul 2011 19:42:00 -0000 From: Jan Kratochvil To: sami wagiaalla Cc: Pedro Alves , gdb-patches@sourceware.org, Tom Tromey Subject: Re: [patch] Support inferior events in python Message-ID: <20110706193742.GA4463@host1.jankratochvil.net> References: <20110209163022.GA16069@host1.dyn.jankratochvil.net> <4D55559B.1090004@redhat.com> <201102111556.42026.pedro@codesourcery.com> <4D59662D.30101@redhat.com> <20110216111054.GA3594@host1.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20110216111054.GA3594@host1.dyn.jankratochvil.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-07/txt/msg00210.txt.bz2 Hi Sami, the testcase had some problems where multiple asynchronous events could happen at the same time. This is difficult to parse without any new framework in the .exp code. As Pedro asked http://sourceware.org/ml/gdb-patches/2011-02/msg00213.html > Actually, do you really need non-stop? I also do not think the testcases should / need to test the non-stop mode. But currently it cannot test thread id in all-stop/sync mode, therefore I have filed it as PR and kept the testcases in non-stop/async mode: http://sourceware.org/bugzilla/show_bug.cgi?id=12967 Due to the difficulty of parsing events which can happen at the same time in various order I have changed also the .c file so that only event can happen at any time. I hope I did not lower the testcase coverage. Another KFAIL has been filed as: python threads incompatible with gdbserver http://sourceware.org/bugzilla/show_bug.cgi?id=12966 I will check it in in some time without any comments. Thanks, Jan 2011-07-06 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. --- 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 } --- /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" + } +} --- 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 (){ - - 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 . -# 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" - } }