From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25196 invoked by alias); 7 Jul 2011 13:46:04 -0000 Received: (qmail 25183 invoked by uid 22791); 7 Jul 2011 13:46:02 -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; Thu, 07 Jul 2011 13:45:38 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p67DjTk9029713 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 7 Jul 2011 09:45:29 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p67DjSC1007643; Thu, 7 Jul 2011 09:45:29 -0400 Received: from [10.15.16.129] (dhcp-10-15-16-129.yyz.redhat.com [10.15.16.129]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id p67DjREB011651; Thu, 7 Jul 2011 09:45:27 -0400 Message-ID: <4E15B86A.1090701@redhat.com> Date: Thu, 07 Jul 2011 13:51:00 -0000 From: sami wagiaalla User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc15 Lightning/1.0b2 Thunderbird/3.1.10 MIME-Version: 1.0 To: Jan Kratochvil CC: Pedro Alves , gdb-patches@sourceware.org, Tom Tromey Subject: Re: [patch] Support inferior events in python 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> <20110706193742.GA4463@host1.jankratochvil.net> In-Reply-To: <20110706193742.GA4463@host1.jankratochvil.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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/msg00236.txt.bz2 On 07/06/2011 03:37 PM, Jan Kratochvil wrote: > 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 > Yes, as you have concluded non-stop/async was needed to test thread id. It did not even occur to me that thread id should be available on all-stop because all threads are actually stopped. The event expresses that all threads are stopped by not setting thread id. > 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. > Nope. That makes sense. > 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. > Please do, and thank you for taking care of this :) > > 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" > - } > }