From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23060 invoked by alias); 8 Jun 2009 15:03:41 -0000 Received: (qmail 23012 invoked by uid 22791); 8 Jun 2009 15:03:39 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 08 Jun 2009 15:03:34 +0000 Received: (qmail 16545 invoked from network); 8 Jun 2009 15:03:32 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 8 Jun 2009 15:03:32 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: Refuse following the vfork parent if not letting the child run. Date: Mon, 08 Jun 2009 15:03:00 -0000 User-Agent: KMail/1.9.10 Cc: Daniel Jacobowitz References: <200906081431.38913.pedro@codesourcery.com> <20090608143111.GA14456@caradoc.them.org> <200906081540.24300.pedro@codesourcery.com> In-Reply-To: <200906081540.24300.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200906081604.35800.pedro@codesourcery.com> 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: 2009-06/txt/msg00179.txt.bz2 On Monday 08 June 2009 15:40:23, Pedro Alves wrote: > > Is this actually a fork-following error, and we've stopped execution? > > I guess you could call it an error. We can't satisfy the users request, > so we kind of stopped execution --- in reality, we're refusing to > continue execution, as the inferior is stopped already. How about? (gdb) n error resuming execution: can not resume the parent of a vfork in the foreground if not letting the child run until it execs or exits, as it would lock the terminal and hang the debug session. 0x00007ffff789aee4 in vfork () from /lib/libc.so.6 (gdb) -- Pedro Alves 2009-06-08 Pedro Alves * linux-nat.c (linux_child_follow_fork): Refuse to follow a vfork parent in the foreground if not letting the child run. --- gdb/linux-nat.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) Index: src/gdb/linux-nat.c =================================================================== --- src.orig/gdb/linux-nat.c 2009-06-08 13:22:47.000000000 +0100 +++ src/gdb/linux-nat.c 2009-06-08 16:01:40.000000000 +0100 @@ -596,6 +596,21 @@ linux_child_follow_fork (struct target_o if (!detach_fork) linux_enable_event_reporting (pid_to_ptid (child_pid)); + if (has_vforked + && (!target_is_async_p () || sync_execution) + && !(follow_child || detach_fork || sched_multi)) + { + /* The parent stays blocked inside the vfork syscall until the + child execs or exits. If we don't let the child run, then + the parent stays blocked. If we're telling the parent to run + in the foreground, the user will not be able to ctrl-c to get + back the terminal, effectively hanging the debug session. */ + fprintf_filtered (gdb_stderr, _("\ +error resuming execution: can not resume the parent of a vfork in the foreground if not letting \ +the child run until it execs or exits, as it would lock the terminal and hang the debug session.\n")); + return 1; + } + if (! follow_child) { /* We're already attached to the parent, by default. */