From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16999 invoked by alias); 30 Aug 2004 23:20:47 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16976 invoked from network); 30 Aug 2004 23:20:44 -0000 Received: from unknown (HELO e32.co.us.ibm.com) (32.97.110.130) by sourceware.org with SMTP; 30 Aug 2004 23:20:44 -0000 Received: from westrelay01.boulder.ibm.com (westrelay01.boulder.ibm.com [9.17.195.10]) by e32.co.us.ibm.com (8.12.10/8.12.9) with ESMTP id i7UNKhmL529482 for ; Mon, 30 Aug 2004 19:20:43 -0400 Received: from austin.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by westrelay01.boulder.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id i7UNKg9f732360 for ; Mon, 30 Aug 2004 17:20:43 -0600 Received: from lazy.austin.ibm.com (lazy.austin.ibm.com [9.53.94.97]) by austin.ibm.com (8.12.10/8.12.10) with ESMTP id i7UKRx4w117280 for ; Mon, 30 Aug 2004 15:27:59 -0500 Date: Mon, 30 Aug 2004 23:20:00 -0000 From: Manoj Iyer X-X-Sender: manjo@lazy To: gdb-patches@sources.redhat.com Subject: Re: New thread testcase (resubmit) In-Reply-To: <412F8F66.1070503@redhat.com> Message-ID: References: <412F7572.2070704@redhat.com> <412F8F66.1070503@redhat.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2004-08/txt/msg00778.txt.bz2 ok to commit?? Thanks ----- Manjo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Cognito ergo sum + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ On Fri, 27 Aug 2004, Michael Snyder wrote: > Manoj Iyer wrote: > > Michael, > > > > Incorporated your comments. > > Ok, thanks, this is good. > Are you write-after-approval yet? > > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > + Cognito ergo sum + > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > > On Fri, 27 Aug 2004, Michael Snyder wrote: > > > > > >>Manoj Iyer wrote: > >> > >>>I have attached two modified versions of my new thread testcase. > >>> > >>>- version 1 > >>>incorporates Michael Chastain's suggestions and it includes > >>>the step and backtrace tests from the thread fucntion. > >>> > >>>-version 2 > >>>incorporates Michael Snyder suggestion to remove the step and backtrace > >>>tests from the testcase. > >>> > >>>Please let me know which one you like and any other comments or changes. > >>>ChangeLog is pasted at the begning of the patch. > >> > >>Version 2 is OK as is, if you're tired of messing with it. > >>You didn't have to remove the backtrace, though, if you'd > >>like to keep that. > >> > >>Also, > >> > >> > >>>+# > >>>+# > >>>+# continue to tf() breakpoint #2 > >>>+# > >>>+gdb_test_multiple "continue\n" "continue to thread fucntion breakpoint #2" { > >>>+ -re ".*Breakpoint 2.*tf.* at .*tbug.* .*\r\n.*$gdb_prompt $" { > >>>+ pass "continue to tf"; > >>>+ } > >>>+ -re ".*$gdb_prompt $" { > >>>+ fail "continue to tf"; > >>>+ return 1; > >>>+ } > >>>+} > >> > >>I think this could be simplified to: > >> gdb_test "continue" \ > >> "Breakpoint 2.*tf.* at .*tbug.*" \ > >> "continue to tf" > >> > >>Similarly, your backtrace test could be as simple as: > >> gdb_test "backtrace" \ > >> "#0 .*tf .*at .*tbug.*" \ > >> "backtrace from thread function" > >> > >>I don't think you can predict what will be on any > >>higher frames, but you could test the current frame > >>and make sure backtrace didn't just die or show you > >>the wrong thread. > >> > >> > >> > >>>+ > >>>+ > >>>+# > >>>+# delete all breakpoints > >>>+# > >>>+send_gdb "delete\n" > >>>+gdb_expect { > >>>+ -re "Delete all breakpoint.*$gdb_prompt $" { > >>>+ send_gdb "y\n" > >> > >>For this, all you need is the existing procedure call: > >> > >> delete_breakpoints > >> > >> > >> > > > >> > > > > > > ------------------------------------------------------------------------ > > > > 2004-08-27 Manoj Iyer > > > > * gdb.threads/thread_check.exp: New testcase. > > * gdb.threads/thread_check.c: New testcase. > > > > ------------------------------------------------------------------------------ > > diff -paurN ./old/src/gdb/testsuite/gdb.threads/thread_check.c ./new/src/gdb/testsuite/gdb.threads/thread_check.c > > --- ./old/src/gdb/testsuite/gdb.threads/thread_check.c 1969-12-31 18:00:00.000000000 -0600 > > +++ ./new/src/gdb/testsuite/gdb.threads/thread_check.c 2004-08-27 05:32:18.434281896 -0500 > > @@ -0,0 +1,75 @@ > > +/* > > +* Copyright (C) 2004 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 2 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, write to the Free Software > > +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > > + > > +* This file was written by Steve Munroe. (sjmunroe@us.ibm.com) > > +* Test break points and single step on thread functions. > > +*/ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#define N 2 > > + > > +static void * > > +tf (void *arg) > > +{ > > + int n = (int) (long int) arg; > > + char number[160]; > > + int unslept = 10; > > + > > + sprintf(number, "tf(%ld): begin", (long)arg); > > + puts (number); > > + > > + while (unslept > 0) > > + unslept = sleep(unslept); > > + > > + sprintf(number, "tf(%ld): end", (long)arg); > > + puts (number); > > + return NULL; > > +} > > + > > +int main (int argc, char *argv[]) > > +{ > > + int n; > > + int unslept = 2; > > + pthread_t th[N]; > > + > > + for (n = 0; n < N; ++n) > > + if (pthread_create (&th[n], NULL, tf, (void *) (long int) n) != 0) > > + { > > + while (unslept > 0) > > + unslept = sleep(2); > > + puts ("create failed"); > > + exit (1); > > + } > > + > > + puts("after create"); > > + > > + for (n = 0; n < N; ++n) > > + if (pthread_join (th[n], NULL) != 0) > > + { > > + puts ("join failed"); > > + exit (1); > > + } > > + > > + puts("after join"); > > + return 0; > > +} > > diff -paurN ./old/src/gdb/testsuite/gdb.threads/thread_check.exp ./new/src/gdb/testsuite/gdb.threads/thread_check.exp > > --- ./old/src/gdb/testsuite/gdb.threads/thread_check.exp 1969-12-31 18:00:00.000000000 -0600 > > +++ ./new/src/gdb/testsuite/gdb.threads/thread_check.exp 2004-08-27 08:10:23.086321744 -0500 > > @@ -0,0 +1,96 @@ > > +# Copyright (C) 2004 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 2 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, write to the Free Software > > +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > > + > > +# Please email any bugs, comments, and/or additions to this file to: > > +# bug-gdb@prep.ai.mit.edu > > + > > +# This file was written by Manoj Iyer. (manjo@austin.ibm.com) > > +# Test break points and single step on thread functions. > > +# > > +# Test Purpose: > > +# - Test that breakpoints, continue in a threaded application works. > > +# On powerpc64-unknown-linux-gnu system, running kernel version > > +# 2.6.5-7.71-pseries64 this test is known to fail due to kernel bug > > +# in ptrace system call. > > +# > > +# Test Strategy: > > +# - tbug.c creates 2 threads > > +# - start gdb > > +# - create 2 breakpoints #1 main() #2 tf() (the thread function) > > +# - run gdb till #1 main() breakpoint is reached > > +# - continue to breakpoint #2 tf() > > +# - delete all breakpoints > > +# - exit gdb. > > + > > +if $tracelevel then { > > + strace $tracelevel > > +} > > + > > +set prms_id 0 > > +set bug_id 0 > > + > > +set testfile "thread_check" > > +set srcfile ${testfile}.c > > +set binfile ${objdir}/${subdir}/${testfile} > > + > > +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } { > > + return -1 > > +} > > + > > + > > +gdb_start > > +gdb_reinitialize_dir $srcdir/$subdir > > +gdb_load ${binfile} > > + > > +if ![runto_main] then { > > + fail "Can't run to main" > > + return 1; > > +} > > + > > + > > +# > > +# set breakpoint at thread fucntion tf > > +# > > +gdb_test "break tf" \ > > + "Breakpoint.*at.* file .*$srcfile, line.*" \ > > + "breakpoint at tf" > > + > > + > > +# > > +# > > +# continue to tf() breakpoint #2 > > +# > > +gdb_test "continue" \ > > + ".*Breakpoint 2.*tf.* at .*tbug.* .*\r\n.*$gdb_prompt $" \ > > + "continue to tf" > > + > > +# > > +# backtrace from thread function. > > +# > > +gdb_test "backtrace" \ > > + "#0 .*tf .*at .*tbug.*" \ > > + "backtrace from thread function" > > + > > + > > +# > > +# delete all breakpoints > > +# > > +delete_breakpoints > > + > > +# > > +# exit gdb > > +# > > +gdb_exit > > >