From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20033 invoked by alias); 15 Jan 2006 19:08:06 -0000 Received: (qmail 20018 invoked by uid 22791); 15 Jan 2006 19:08:03 -0000 X-Spam-Check-By: sourceware.org Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.31.1) with ESMTP; Sun, 15 Jan 2006 19:07:59 +0000 Received: from drow by nevyn.them.org with local (Exim 4.54) id 1EyDEL-0002kP-5U; Sun, 15 Jan 2006 14:07:57 -0500 Date: Sun, 15 Jan 2006 19:08:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sourceware.org Cc: msnyder@redhat.com Subject: Some more multi-fork fixes Message-ID: <20060115190757.GA10454@nevyn.them.org> Mail-Followup-To: gdb-patches@sourceware.org, msnyder@redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.8i X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-01/txt/msg00175.txt.bz2 These patches allow multi-fork.exp to pass on x86_64-pc-linux-gnu, most of the time. I'm sorry I didn't notice the _dl_sysinfo_int80 bit earlier. Some other problems I noticed, but did not fix: The "follow child, print pids" test is victim of a race condition; sometimes the "$pid done" printout from the inferior will be interleaved with the GDB output, causing expect to mark the test as a failure. delete-fork really ought to call waitpid after deleting the fork; otherwise the process lives on as a zombie. -- Daniel Jacobowitz CodeSourcery 2006-01-15 Daniel Jacobowitz * linux-fork.c (delete_fork_command, detach_fork_command): Use PIDGET. 2006-01-15 Daniel Jacobowitz * gdb.base/multi-forks.c: Add copyright notice. Include . * gdb.base/multi-forks.exp: Use a loop. Allow "fork" as a stopped function name. Index: linux-fork.c =================================================================== RCS file: /cvs/src/src/gdb/linux-fork.c,v retrieving revision 1.2 diff -u -p -r1.2 linux-fork.c --- linux-fork.c 4 Jan 2006 19:34:58 -0000 1.2 +++ linux-fork.c 15 Jan 2006 19:01:55 -0000 @@ -1,6 +1,6 @@ /* GNU/Linux native-dependent code for debugging multiple forks. - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2006 Free Software Foundation, Inc. This file is part of GDB. @@ -379,7 +379,7 @@ delete_fork_command (char *args, int fro if (ptid_equal (ptid, inferior_ptid)) error (_("Please switch to another fork/checkpoint before deleting the current one")); - if (ptrace (PTRACE_KILL, ptid, 0, 0)) + if (ptrace (PTRACE_KILL, PIDGET (ptid), 0, 0)) error (_("Unable to kill pid %s"), target_tid_to_str (ptid)); if (from_tty) @@ -403,7 +403,7 @@ detach_fork_command (char *args, int fro if (ptid_equal (ptid, inferior_ptid)) error (_("Please switch to another fork before detaching the current one")); - if (ptrace (PTRACE_DETACH, ptid, 0, 0)) + if (ptrace (PTRACE_DETACH, PIDGET (ptid), 0, 0)) error (_("Unable to detach %s"), target_pid_to_str (ptid)); if (from_tty) Index: testsuite/gdb.base/multi-forks.c =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/multi-forks.c,v retrieving revision 1.2 diff -u -p -r1.2 multi-forks.c --- testsuite/gdb.base/multi-forks.c 4 Jan 2006 19:29:26 -0000 1.2 +++ testsuite/gdb.base/multi-forks.c 15 Jan 2006 19:05:35 -0000 @@ -1,3 +1,23 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2005, 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA, + 02110-1301, USA. */ + +#include #include #include #include Index: testsuite/gdb.base/multi-forks.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/multi-forks.exp,v retrieving revision 1.2 diff -u -p -r1.2 multi-forks.exp --- testsuite/gdb.base/multi-forks.exp 4 Jan 2006 19:29:26 -0000 1.2 +++ testsuite/gdb.base/multi-forks.exp 15 Jan 2006 19:05:35 -0000 @@ -1,4 +1,4 @@ -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005, 2006 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 @@ -12,10 +12,7 @@ # # 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 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. if $tracelevel then { strace $tracelevel @@ -114,65 +111,11 @@ gdb_test "set detach off" "" "set detach # eventually winding up with 16 forks. # -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 1" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 1" -gdb_test "restart 1" "_dl_sysinfo_int80.*" "restart 1" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 2" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 2" -gdb_test "restart 2" "_dl_sysinfo_int80.*" "restart 2" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 3" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 3" -gdb_test "restart 3" "_dl_sysinfo_int80.*" "restart 3" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 4" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 4" -gdb_test "restart 4" "_dl_sysinfo_int80.*" "restart 4" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 5" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 5" -gdb_test "restart 5" "_dl_sysinfo_int80.*" "restart 5" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 6" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 6" -gdb_test "restart 6" "_dl_sysinfo_int80.*" "restart 6" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 7" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 7" -gdb_test "restart 7" "_dl_sysinfo_int80.*" "restart 7" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 8" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 8" -gdb_test "restart 8" "_dl_sysinfo_int80.*" "restart 8" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 9" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 9" -gdb_test "restart 9" "_dl_sysinfo_int80.*" "restart 9" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 10" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 10" -gdb_test "restart 10" "_dl_sysinfo_int80.*" "restart 10" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 11" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 11" -gdb_test "restart 11" "_dl_sysinfo_int80.*" "restart 11" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 12" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 12" -gdb_test "restart 12" "_dl_sysinfo_int80.*" "restart 12" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 13" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 13" -gdb_test "restart 13" "_dl_sysinfo_int80.*" "restart 13" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 14" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 14" -gdb_test "restart 14" "_dl_sysinfo_int80.*" "restart 14" - -gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 15" -gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 15" -gdb_test "restart 15" "_dl_sysinfo_int80.*" "restart 15" +for {set i 1} {$i <= 15} {incr i} { + gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit $i" + gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork $i" + gdb_test "restart $i" "(_dl_sysinfo_int80|fork).*" "restart $i" +} gdb_test "continue" "Breakpoint .* main .*exit.*" "Run to exit 16" gdb_test "info fork" " 4 .* 3 .* 2 .* 1 .*" "info fork 16"