From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32473 invoked by alias); 11 Nov 2004 21:39:04 -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 32369 invoked from network); 11 Nov 2004 21:38:59 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 11 Nov 2004 21:38:59 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.11) with ESMTP id iABLcxZH004755 for ; Thu, 11 Nov 2004 16:38:59 -0500 Received: from pobox.toronto.redhat.com (pobox.toronto.redhat.com [172.16.14.4]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id iABLcxr08928; Thu, 11 Nov 2004 16:38:59 -0500 Received: from touchme.toronto.redhat.com (IDENT:postfix@touchme.toronto.redhat.com [172.16.14.9]) by pobox.toronto.redhat.com (8.12.8/8.12.8) with ESMTP id iABLcwoS003431; Thu, 11 Nov 2004 16:38:58 -0500 Received: from redhat.com (toocool.toronto.redhat.com [172.16.14.72]) by touchme.toronto.redhat.com (Postfix) with ESMTP id AB610800360; Thu, 11 Nov 2004 16:38:58 -0500 (EST) Message-ID: <4193DBF2.4010800@redhat.com> Date: Thu, 11 Nov 2004 21:39:00 -0000 From: Jeff Johnston User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 MIME-Version: 1.0 To: Jeff Johnston Cc: Andrew Cagney , gdb-patches@sources.redhat.com Subject: Re: [RFA]: test for backtrace failures in macro References: <418BE4E3.6060504@redhat.com> <419398E2.10602@gnu.org> <4193BF61.7060909@redhat.com> In-Reply-To: <4193BF61.7060909@redhat.com> Content-Type: multipart/mixed; boundary="------------050606040103020207070100" X-SW-Source: 2004-11/txt/msg00252.txt.bz2 This is a multi-part message in MIME format. --------------050606040103020207070100 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 829 Jeff Johnston wrote: > Andrew Cagney wrote: > >> Jeff Johnston wrote: >> >>> The following is a test for the change I recently made to allow >>> macros to continue operating even after a backtrace failure occurs. >>> >>> Tested on x86-linux with linuxthreads and ia64-linux with nptl threads. >> >> >> >> Can you think of an alternative to "macro" as the prefix? "macro" can >> also refer to: >> >> #define MACRO >> >> (If I new of one, I'd suggest it :-) With a better name, ok. >> > > Will rename to threadapply.exp and threadapply.c > > -- Jeff J. > The following has been checked in. Tested on old x86-linux with linuxthreads and RHEL3 x86-linux. -- Jeff J. 2004-11-11 Jeff Johnston * gdb.threads/threadapply.exp: New test. * gdb.threads/threadapply.c: New file. --------------050606040103020207070100 Content-Type: text/plain; name="backtracetest.patch2" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="backtracetest.patch2" Content-length: 5032 Index: gdb.threads/threadapply.c =================================================================== RCS file: gdb.threads/threadapply.c diff -N gdb.threads/threadapply.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.threads/threadapply.c 11 Nov 2004 21:35:44 -0000 @@ -0,0 +1,82 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2002, 2003, 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 is copied from schedlock.c. */ + +#include +#include +#include +#include + +void *thread_function(void *arg); /* Pointer to function executed by each thread */ + +#define NUM 5 + +unsigned int args[NUM+1]; + +int main() { + int res; + int all_started; + pthread_t threads[NUM]; + void *thread_result; + long i; + + for (i = 0; i < NUM; i++) + { + args[i] = 1; /* Init value. */ + res = pthread_create(&threads[i], + NULL, + thread_function, + (void *) i); + } + + all_started = 0; + while (!all_started) + { + all_started = 1; + for (i = 0; i < NUM; i++) + { + if (args[i] == 1) + { + all_started = 0; + break; + } + } + } + + args[i] = 1; + /* Break here */ + thread_function ((void *) i); + + exit(EXIT_SUCCESS); +} + +void *thread_function(void *arg) { + int my_number = (long) arg; + int *myp = (int *) &args[my_number]; + + /* Don't run forever. Run just short of it :) */ + while (*myp > 0) + { + (*myp) ++; /* Loop increment. */ + } + + pthread_exit(NULL); +} + Index: gdb.threads/threadapply.exp =================================================================== RCS file: gdb.threads/threadapply.exp diff -N gdb.threads/threadapply.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.threads/threadapply.exp 11 Nov 2004 21:35:44 -0000 @@ -0,0 +1,71 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 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. + +if $tracelevel { + strace $tracelevel +} + +set prms_id 0 +set bug_id 0 + +# This test verifies that a macro using backtrace can be applied to all threads +# and will continue for each thread even though an error may occur in +# backtracing one of the threads. + +set testfile "threadapply" +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} + +# +# Run to `main' where we begin our tests. +# + +if ![runto_main] then { + gdb_suppress_tests +} + +# Break after all threads have been started. +set break_line [gdb_get_line_number "Break here"] +gdb_test "b $break_line" "" +gdb_test "continue" + +gdb_test_multiple "define backthread" "defining macro" { + -re "Type commands for definition of \"backthread\".\r\nEnd with a line saying just \"end\".\r\n>$" { + gdb_test_multiple "bt\np\/x 20\nend\n" "macro details" { + -re "$gdb_prompt $" { + pass "macro details" + } + } + pass "defining macro" + } +} + +# Cause backtraces to fail by setting a limit. This allows us to +# verify that the macro can get past the backtrace error and perform +# subsequent commands. +gdb_test "set backtrace limit 3" "" +gdb_test "thread apply all backthread" "Thread ..*\\\$1 = 0x14.*Thread ..*\\\$2 = 0x14.*Thread ..*\\\$3 = 0x14.*Thread ..*\\\$4 = 0x14.*Thread ..*\\\$5 = 0x14.*Thread ..*\\\$. = 0x14" + --------------050606040103020207070100--