From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30615 invoked by alias); 27 Aug 2004 19:45:57 -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 30585 invoked from network); 27 Aug 2004 19:45:55 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 27 Aug 2004 19:45:55 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i7RJjsS0021421 for ; Fri, 27 Aug 2004 15:45:54 -0400 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i7RJjr718942; Fri, 27 Aug 2004 15:45:53 -0400 Received: from redhat.com (dhcp-172-16-25-160.sfbay.redhat.com [172.16.25.160]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id i7RJjgV02616; Fri, 27 Aug 2004 12:45:52 -0700 Message-ID: <412F8F66.1070503@redhat.com> Date: Fri, 27 Aug 2004 19:45:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.4.2) Gecko/20040301 MIME-Version: 1.0 To: Manoj Iyer CC: gdb-patches@sources.redhat.com Subject: Re: New thread testcase (resubmit) References: <412F7572.2070704@redhat.com> In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2004-08/txt/msg00757.txt.bz2 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