From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11997 invoked by alias); 9 Oct 2003 19:49:42 -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 11990 invoked from network); 9 Oct 2003 19:49:41 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 9 Oct 2003 19:49:41 -0000 Received: from drow by nevyn.them.org with local (Exim 4.22 #1 (Debian)) id 1A7gn5-0005K3-K8 for ; Thu, 09 Oct 2003 15:49:39 -0400 Date: Thu, 09 Oct 2003 19:49:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: Re: [RFA] New threads test Message-ID: <20031009194939.GA20253@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com References: <20030930192158.GA5615@nevyn.them.org> <3F7B1ED7.4040403@redhat.com> <20031001185230.GA25467@nevyn.them.org> <20031009141057.GB29621@nevyn.them.org> <3F85B9DC.4020804@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3F85B9DC.4020804@redhat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-10/txt/msg00310.txt.bz2 On Thu, Oct 09, 2003 at 12:41:16PM -0700, Michael Snyder wrote: > Daniel Jacobowitz wrote: > >On Wed, Oct 01, 2003 at 02:52:30PM -0400, Daniel Jacobowitz wrote: > > > >>On Wed, Oct 01, 2003 at 11:37:11AM -0700, Michael Snyder wrote: > >> > >>>Daniel Jacobowitz wrote: > >>> > >>>>This is a test for the remote protocol issue I'm solving with vCont. It > >>>>also shows up in schedlock, but the simpler test makes it much clearer > >>>>what's going wrong. OK? > >>>> > >>> > >>>Umm... what is going wrong? What are you testing for here? > >> > >>+# It tests that the correct thread is single-stepped. > >> > >>More intelligibly: when gdbserver is told to single-step one thread > >>(without holding all others schedlocked), it assumes we mean the first > >>thread. Which might not be the _right_ thread. > > Hmmm... it should assume we mean the _current_ thread > (ie. the one that had a stop event). The remote protocol > should cover this (and did, last I checked). I could have changed gdbserver to default to that, in fact I thought I had (but I hadn't). But it still breaks down if the user switches threads explicitly - see vCont, which this is testing. > >Hi Michael, > > > >Is this test OK (with a better comment and the copyright notice that > >Michael C suggested)? > > OK, with emphasis on "more comments". Thanks! Here's what I checked in. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2003-10-07 Daniel Jacobowitz * gdb.threads/switch-threads.exp: New test. * gdb.threads/switch-threads.c: New source file. --- /dev/null 1969-12-31 19:00:00.000000000 -0500 +++ gdb.threads/switch-threads.c 2003-10-09 15:47:52.000000000 -0400 @@ -0,0 +1,47 @@ +/* A minimal multi-threaded test case. + + Copyright 2003 + Free Software Foundation, Inc. + + 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 + +void foo (void) +{ +} + +void *thread_func (void *arg) +{ + int x; + for (x = 0; x < 10; x++) + foo (); + return 0; +} + +int main() +{ + pthread_t thr; + void *ret; + int x; + + pthread_create (&thr, NULL, thread_func, NULL); + pthread_join (thr, &ret); + for (x = 0; x < 10; x++) + foo (); +} --- /dev/null 1969-12-31 19:00:00.000000000 -0500 +++ gdb.threads/switch-threads.exp 2003-10-09 15:46:26.000000000 -0400 @@ -0,0 +1,52 @@ +# Copyright (C) 2003 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 Daniel Jacobowitz . +# +# It tests that the correct thread is single-stepped. Prior to the +# introduction of vCont, we didn't pass enough information to remote +# multi-threaded stubs to reliably get this correct; gdbserver defaulted +# to the first thread. + +# TODO: we should also test explicitly changing threads with the "thread" +# command. + +if $tracelevel then { + strace $tracelevel +} + +set testfile "switch-threads" +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_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +runto_main + +gdb_breakpoint thread_func +gdb_continue_to_breakpoint "continue to thread_func" +gdb_test "next" ".*foo \\(\\);" +