From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13020 invoked by alias); 12 Aug 2004 00:33:43 -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 12837 invoked from network); 12 Aug 2004 00:33:41 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 12 Aug 2004 00:33:41 -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 i7C0XZe1011699 for ; Wed, 11 Aug 2004 20:33:36 -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 i7C0XVX16611; Wed, 11 Aug 2004 20:33:31 -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 i7C0XRV01680; Wed, 11 Aug 2004 17:33:28 -0700 Message-ID: <411ABAD7.6020005@redhat.com> Date: Thu, 12 Aug 2004 00:33: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: Andrew Cagney CC: gdb-patches@sources.redhat.com Subject: Re: [rfa/gdb.threads] Test static thread program References: <4118D96F.3080106@redhat.com> In-Reply-To: <4118D96F.3080106@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2004-08/txt/msg00425.txt.bz2 Andrew Cagney wrote: > Hello, > > This test a static threaded program being debugged (it picks up kfails). > Tested on RHEL3 amd64. > > ok? > Andrew I really really appreciate the contribution of a static thread test. I'd like to know what specific failure mode(s) you're looking for. Any chance you could test it on Solaris? > ------------------------------------------------------------------------ > > 2004-08-10 Andrew Cagney > > * gdb.threads/staticthreads.c, gdb.threads/staticthreads.exp: New > files. > > Index: gdb.threads/staticthreads.c > =================================================================== > RCS file: gdb.threads/staticthreads.c > diff -N gdb.threads/staticthreads.c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ gdb.threads/staticthreads.c 10 Aug 2004 14:14:10 -0000 > @@ -0,0 +1,73 @@ > +/* This test program is part of GDB, The GNU debugger. > + > + Copyright 2004 Free Software Foundation, Inc. > + > + Originally written by Jeff Johnston , > + contributed by Red Hat > + > + This file is part of GDB. > + > + 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. */ > + > +#include > +#include > +#include > +#include > +#include > + > +sem_t semaphore; > + > +void * > +thread_function (void *arg) > +{ > + printf ("Thread executing\n"); > + while (sem_wait (&semaphore) != 0) > + { > + if (errno != EINTR) > + { > + perror ("thread_function"); > + return; > + } > + } > + return NULL; > +} > + > +int > +main (int argc, char **argv) > +{ > + pthread_attr_t attr; > + > + pthread_attr_init (&attr); > + pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN); > + > + if (sem_init (&semaphore, 0, 0) == -1) > + { > + perror ("semaphore"); > + return -1; > + } > + > + > + /* Create a thread, wait for it to complete. */ > + { > + pthread_t thread; > + pthread_create (&thread, &attr, thread_function, NULL); > + sem_post (&semaphore); > + pthread_join (thread, NULL); > + } > + > + pthread_attr_destroy (&attr); > + return 0; > +} > Index: gdb.threads/staticthreads.exp > =================================================================== > RCS file: gdb.threads/staticthreads.exp > diff -N gdb.threads/staticthreads.exp > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ gdb.threads/staticthreads.exp 10 Aug 2004 14:14:10 -0000 > @@ -0,0 +1,87 @@ > +# static.exp -- test script, for GDB, the GNU debugger. > + > +# Copyright 2004 Free Software Foundation, Inc. > + > +# Originally written by Jeff Johnston, contributed by Red Hat. > + > +# 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. > + > +if $tracelevel then { > + strace $tracelevel > +} > + > +set prms_id 0 > +set bug_id 0 > + > +set testfile "staticthreads" > +set srcfile ${testfile}.c > +set binfile ${objdir}/${subdir}/${testfile} > +set static_flag "-static" > + > +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ > + executable \ > + [list debug "incdir=${objdir}" "additional_flags=${static_flag}" \ > + ]] != "" } { > + return -1 > +} > + > +gdb_start > +gdb_reinitialize_dir $srcdir/$subdir > +gdb_load ${binfile} > +gdb_test "set print sevenbit-strings" "" > + > + > +# See if the static multi-threaded program runs. > + > +runto_main > +gdb_test "break sem_post" > +set test "Continue to main's call of sem_post" > +gdb_test_multiple "continue" "$test" { > + -re " sem_post .*$gdb_prompt " { > + pass "$test" > + } > + -re "Program received signal .*$gdb_prompt " { > + kfail gdb/1328 "$test" > + } > +} > + > + > +# See if handle SIG32 helps (a little) with a static multi-threaded > +# program. > + > +rerun_to_main > +gdb_test "handle SIG32 nostop noprint pass" > +set test "Handle SIG32 helps" > +gdb_test "continue" " sem_post .*" "handle SIG32 helps" > + > + > +# See if info threads produces anything approaching a thread list. > + > +set test "info threads" > +gdb_test "info threads" " Thread .*$gdb_prompt" > + > + > +# Check that the program can be quit. > + > +set test "GDB exits with static thread program" > +gdb_test_multiple "quit" "$test" { > + -re "The program is running. Exit anyway\\? \\(y or n\\) $" { > + send_gdb "y\n" > + exp_continue > + } > + eof { > + pass "$test" > + } > +}