From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23051 invoked by alias); 19 Dec 2007 12:59:38 -0000 Received: (qmail 23042 invoked by uid 22791); 19 Dec 2007 12:59:37 -0000 X-Spam-Check-By: sourceware.org Received: from ics.u-strasbg.fr (HELO ics.u-strasbg.fr) (130.79.112.250) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 19 Dec 2007 12:59:09 +0000 Received: from ICSMULLER (laocoon.u-strasbg.fr [130.79.112.72]) by ics.u-strasbg.fr (Postfix) with ESMTP id 2C9F0187023; Wed, 19 Dec 2007 14:03:15 +0100 (CET) From: "Pierre Muller" To: , "'Daniel Jacobowitz'" Cc: References: <1187298178.5853.11.camel@localhost> <1187365616.4520.14.camel@localhost> <20071011193558.GE30810@caradoc.them.org> <1192134591.18528.1.camel@localhost> <1194961811.4820.3.camel@localhost> <1195042801.4908.2.camel@localhost> <20071216214836.GE2618@caradoc.them.org> <1197894945.24027.8.camel@gargoyle> In-Reply-To: <1197894945.24027.8.camel@gargoyle> Subject: [RFC/RFA] testsuite/gdb.base/watch_thread_num.exp: Fix test for systems having hidden threads Date: Wed, 19 Dec 2007 13:05:00 -0000 Message-ID: <000601c8423e$f49ca010$ddd5e030$@u-strasbg.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Office Outlook 12.0 Content-Language: en-us 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: 2007-12/txt/msg00297.txt.bz2 This test currently fails on cygwin target and it does by timeout's which means that it takes a lot of time... The reason of the failure is that=20 thread #2 is a thread created internally by cygwin, for posix emulation, and thus never changes the value of the variable shared_var. =20=20 I modified the test so that it does not suppose that thread 2 is one of the explicitly generated threads, but instead adds a breakpoint to thread_function, and reads the thread number of the first explicitly generated thread. I also added an iteration number to the final test loop. I am mainly unsure about the details required for the ChangeLog entry... I only tested the patch on Cygwin target where it gives 29 passes, but I expect it to give the same results on other targets that had no failures before. One possible problem is about the $expect_out(1,string) because this is undefined if the first pattern is not found. But I suppose that this is not unique to my patch, as lots of gdb_expect calls only have braces to define a group that will become the $expect_out return values in only one regular expression. Is there a coding rule for this? Pierre Muller testsuite directory ChangeLog entry 2007-12-19 Pierre Muller * (gdb.base/watch_thread_num.exp): Add breakpoint at thread_function and record first explicitly generated thread number.=20 Use that thread number for thread specific watchpoint test. Add iteration number to repetitive tests. $ cat threadwatch.patch Index: gdb/testsuite/gdb.base/watch_thread_num.exp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/testsuite/gdb.base/watch_thread_num.exp,v retrieving revision 1.1 diff -u -p -r1.1 watch_thread_num.exp --- gdb/testsuite/gdb.base/watch_thread_num.exp 17 Dec 2007 12:32:23 -00001= .1 +++ gdb/testsuite/gdb.base/watch_thread_num.exp 19 Dec 2007 08:45:41 -0000 @@ -54,11 +54,28 @@ gdb_test "watch shared_var thread" "A sy gdb_test "Next 5" "" -gdb_test "watch shared_var thread 2" "Hardware watchpoint 2: shared_var" "= Watch point on shared variable" -gdb_test "info breakpoint 2" "stop only in thread 2" +gdb_test "break thread_function" "Breakpoint \[0-9\].*" \ + "Set breakpoint at thread_function" -for {set i 0} {$i < 10} {incr i 1} { -gdb_test "continue" "Hardware watchpoint 2: shared_var.*" "Watchpoint trig= gered " -gdb_test "thread" "\\\[Current thread is 2 \\\(Thread $hex \\\(LWP $decima= l\\\) \\\)\\\]" "Check thread that triggered" +gdb_test "continue" ".*Breakpoint 2.*" "Stopped in thread_function" + +send_gdb "thread\n" +gdb_expect { + -re ".*Current thread is (\[0-9\]*).*$gdb_prompt $" { pass "Thread comma= nd" } + -re ".*$gdb_prompt $" { fail "Thread command" } + timeout { fail "(timeout) Thread command" } +} + +set thread_num "$expect_out(1,string)" + +gdb_test "disable 2" "" "Disable breakpoint 2" +gdb_test "watch shared_var thread $thread_num" "Hardware watchpoint 3: sha= red_v ar" "Watchpoint on shared variable" +gdb_test "info breakpoint 3" "stop only in thread $thread_num" + +for {set i 1} {$i <=3D 10} {incr i 1} { +gdb_test "continue" "Hardware watchpoint 3: shared_var.*" \ + "Watchpoint triggered iteration $i" +gdb_test "thread" ".*Current thread is $thread_num .*" \ + "Check thread that triggered iteration $i" }