From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27722 invoked by alias); 2 Jan 2008 13:44:23 -0000 Received: (qmail 27667 invoked by uid 22791); 2 Jan 2008 13:44:20 -0000 X-Spam-Check-By: sourceware.org Received: from pauline.vellum.cz (HELO pauline.vellum.cz) (89.250.243.234) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 02 Jan 2008 13:38:17 +0000 Received: from host0.dyn.jankratochvil.net (localhost.localdomain [127.0.0.1]) by pauline.vellum.cz (8.12.11.20060308/8.12.11) with ESMTP id m02DbudQ018910; Wed, 2 Jan 2008 14:37:56 +0100 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.2/8.14.1) with ESMTP id m02DbulP014409; Wed, 2 Jan 2008 14:37:56 +0100 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.2/8.14.2/Submit) id m02Dbtt6014408; Wed, 2 Jan 2008 14:37:55 +0100 Date: Wed, 02 Jan 2008 13:44:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Cc: Daniel Jacobowitz Subject: Re: [patch] Fix threaded inferiors in child after fork Message-ID: <20080102133755.GA14348@host0.dyn.jankratochvil.net> References: <20080102102912.GA6816@host0.dyn.jankratochvil.net> <20080102124512.GA30490@caradoc.them.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="ew6BAiZeqk4r7MaW" Content-Disposition: inline In-Reply-To: <20080102124512.GA30490@caradoc.them.org> User-Agent: Mutt/1.5.17 (2007-11-01) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-01/txt/msg00020.txt.bz2 --ew6BAiZeqk4r7MaW Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 575 On Wed, 02 Jan 2008 13:45:12 +0100, Daniel Jacobowitz wrote: > On Wed, Jan 02, 2008 at 11:29:12AM +0100, Jan Kratochvil wrote: > > + Please email any bugs, comments, and/or additions to this file to: > > + bug-gdb@prep.ai.mit.edu */ > > Please delete this bit from the C file and exp file; that host is > long-gone. Done. > > +gdb_test "set follow-fork-mode child" > > Let's limit this test to GNU/Linux only; otherwise you have to figure > out if the current target supports it. Done. > Otherwise this is OK. Thanks. Committed the attached patch. Thanks, Jan --ew6BAiZeqk4r7MaW Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="gdb-cvs-fork-child-threads2.patch" Content-length: 3950 2008-01-02 Jan Kratochvil * linux-nat.c (linux_child_follow_fork): Call also CHECK_FOR_THREAD_DB. 2008-01-02 Jan Kratochvil * gdb.threads/fork-child-threads.exp, gdb.threads/fork-child-threads.c: New files --- ./gdb/linux-nat.c 1 Jan 2008 22:53:11 -0000 1.71 +++ ./gdb/linux-nat.c 2 Jan 2008 12:57:23 -0000 @@ -517,6 +517,7 @@ linux_child_follow_fork (struct target_o push_target (ops); linux_nat_switch_fork (inferior_ptid); + check_for_thread_db (); /* Reset breakpoints in the child as appropriate. */ follow_inferior_reset_breakpoints (); --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ./gdb/testsuite/gdb.threads/fork-child-threads.c 2 Jan 2008 12:57:23 -0000 @@ -0,0 +1,50 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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 3 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, see . */ + +#include +#include +#include + +static void * +start (void *arg) +{ + assert (0); + return arg; +} + +int main(void) +{ + pthread_t thread; + int i; + + switch (fork ()) + { + case -1: + assert (0); + default: + break; + case 0: + i = pthread_create (&thread, NULL, start, NULL); + assert (i == 0); + i = pthread_join (thread, NULL); + assert (i == 0); + + assert (0); + } + + return 0; +} --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ./gdb/testsuite/gdb.threads/fork-child-threads.exp 2 Jan 2008 12:57:23 -0000 @@ -0,0 +1,49 @@ +# Copyright (C) 2008 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 3 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, see . + +# Only GNU/Linux is known to support `set follow-fork-mode child'. +if { ! [istarget "*-*-linux*"] } { + return 0 +} + +set testfile fork-child-threads +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir + +gdb_load ${binfile} +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +gdb_test "set follow-fork-mode child" +gdb_breakpoint "start" +gdb_test "continue" "Breakpoint 2, start.*" "get to the spawned thread" + +# Wrong: +# * 2 LWP 4466 start (arg=0x0) at fork-child-threads.c:28 +# Correct: +# * 3 Thread 0x40a00950 (LWP 5553) start (arg=0x0) at ../.././gdb/testsuite/gdb.threads/fork-child-threads.c:28 +# 2 Thread 0x2aaaaaac3000 (LWP 5552) 0x00000031674076dd in pthread_join (threadid=, thread_return=) at pthread_join.c:89 + +gdb_test "info threads" " Thread .* Thread .*" "two threads found" --ew6BAiZeqk4r7MaW--