From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 44804 invoked by alias); 18 May 2016 13:27:37 -0000 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 Received: (qmail 44793 invoked by uid 89); 18 May 2016 13:27:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS autolearn=ham version=3.3.2 spammy=states X-HELO: usplmg20.ericsson.net Received: from usplmg20.ericsson.net (HELO usplmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 18 May 2016 13:27:26 +0000 Received: from EUSAAHC006.ericsson.se (Unknown_Domain [147.117.188.90]) by usplmg20.ericsson.net (Symantec Mail Security) with SMTP id 8F.BA.09012.E756C375; Wed, 18 May 2016 14:52:14 +0200 (CEST) Received: from [142.133.110.144] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.92) with Microsoft SMTP Server id 14.3.248.2; Wed, 18 May 2016 09:27:23 -0400 Subject: Re: [PATCH v2] Add mi-threads-interrupt.exp test (PR 20039) To: References: <1462472343-17772-1-git-send-email-simon.marchi@ericsson.com> From: Simon Marchi CC: Pedro Alves Message-ID: <573C6DBB.6020901@ericsson.com> Date: Wed, 18 May 2016 13:27:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <1462472343-17772-1-git-send-email-simon.marchi@ericsson.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg00296.txt.bz2 On 16-05-05 02:19 PM, Simon Marchi wrote: > Add a new test for PR 20039. The test spawns new threads, then tries to > interrupt, continue, and interrupt again. This use case was fixed by > commit 5fe966540d6b748f825774868463003700f0c878 in master, but gdb 7.11 > is affected (so if you try it on the gdb-7.11-branch right now, the test > will fail). > > New in v2, the test now handles mi-async on mode properly. The failure > was specific to mi-async off, but I don't think it's bad to test the > same thing under async on mode. I added a little hack when running in > async mode to work around bug 20045. > > I also removed one continue/interrupt pair, as a single one was enough to > trigger the problem. > > gdb/testsuite/ChangeLog: > > * gdb.mi/mi-threads-interrupt.c: New file. > * gdb.mi/mi-threads-interrupt.exp: New file. > --- > gdb/testsuite/gdb.mi/mi-threads-interrupt.c | 61 ++++++++++++++++++++++ > gdb/testsuite/gdb.mi/mi-threads-interrupt.exp | 75 +++++++++++++++++++++++++++ > 2 files changed, 136 insertions(+) > create mode 100644 gdb/testsuite/gdb.mi/mi-threads-interrupt.c > create mode 100644 gdb/testsuite/gdb.mi/mi-threads-interrupt.exp > > diff --git a/gdb/testsuite/gdb.mi/mi-threads-interrupt.c b/gdb/testsuite/gdb.mi/mi-threads-interrupt.c > new file mode 100644 > index 0000000..8747806 > --- /dev/null > +++ b/gdb/testsuite/gdb.mi/mi-threads-interrupt.c > @@ -0,0 +1,61 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2016 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 . */ > + > +#include > +#include > + > +#define NUM_THREADS 2 > + > +static pthread_barrier_t barrier; > + > +static void * > +thread_func (void *v) > +{ > + int i; > + > + pthread_barrier_wait (&barrier); > + > + for (i = 0; i < 100; i++) > + sleep (1); > +} > + > +static void > +all_threads_created (void) > +{ > +} > + > +int > +main(void) > +{ > + int i; > + pthread_t threads[NUM_THREADS]; > + > + /* +1 to account for the main thread */ > + pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1); > + > + for (i = 0; i < NUM_THREADS; i++) > + pthread_create (&threads[i], NULL, thread_func, NULL); > + > + pthread_barrier_wait (&barrier); > + > + all_threads_created (); > + > + for (i = 0; i < 100; i++) > + sleep (1); > + > + return 0; > +} > diff --git a/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp b/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp > new file mode 100644 > index 0000000..af5d99b > --- /dev/null > +++ b/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp > @@ -0,0 +1,75 @@ > +# Copyright 2016 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 . > + > +load_lib mi-support.exp > +set MIFLAGS "-i=mi" > + > +standard_testfile > + > +if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != "" } { > + return -1 > +} > + > +# This tests the resolution of PR 20039. > +# > +# With a multi-threaded inferior and with MI/all-stop, it was not possible > +# to interrupt it with ctrl-C after a continue. > + > +proc test_continue_interrupt { } { > + global binfile > + global async > + > + gdb_exit > + if {[mi_gdb_start]} { > + continue > + } > + > + # Load the binary in gdb... > + mi_gdb_load $binfile > + > + # ... and run it. > + # > + # Note this test relies on mi_runto deleting the breakpoint. > + # A step-over here would mask the bug. > + mi_runto "all_threads_created" > + > + # Consistency check. > + mi_check_thread_states {"stopped" "stopped" "stopped"} "check thread states" > + > + # Continue. > + mi_gdb_test "565-exec-continue" "565\\^running\r\n\\*running,thread-id=\"all\"" "continue" I was about to push this, but decided to run the test again. For some reason, this line gives me a FAIL, which I didn't see before: FAIL: gdb.mi/mi-threads-interrupt.exp: continue and I can't see what's wrong with: 101 Expecting: ^(.*[^M 102 ]+)?(565\^running^M 103 \*running,thread-id="all"[^M 104 ]+[(]gdb[)] ^M 105 [ ]*) 106 565-exec-continue^M 107 565^running^M 108 *running,thread-id="all"^M 109 =thread-selected,id="3"^M 110 (gdb) ^M 111 FAIL: gdb.mi/mi-threads-interrupt.exp: continue Changing this line to be mi_send_resuming_command "exec-continue" "continue" makes it work, although I don't see why. Does it sound like a good change? > + if { $async } { > + # Workaround for PR 20045, where -exec-continue will output two (gdb) prompts > + # when in "mi-async on" mode. This mi_gdb_test will consume the extra (gdb). > + # Once that bug is fixed, this can be removed. > + mi_gdb_test > + } I'll remove this, since I'll put the fix for 20045 before this patch.