From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24012 invoked by alias); 29 Sep 2010 22:11:58 -0000 Received: (qmail 24000 invoked by uid 22791); 29 Sep 2010 22:11:57 -0000 X-SWARE-Spam-Status: No, hits=-6.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 29 Sep 2010 22:11:52 +0000 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o8TMBhK1031703 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Sep 2010 18:11:43 -0400 Received: from host1.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o8TMBeNH021447 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 29 Sep 2010 18:11:43 -0400 Received: from host1.dyn.jankratochvil.net (localhost [127.0.0.1]) by host1.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id o8TMBeZe007149; Thu, 30 Sep 2010 00:11:40 +0200 Received: (from jkratoch@localhost) by host1.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id o8TMBcJ9007148; Thu, 30 Sep 2010 00:11:38 +0200 Date: Thu, 30 Sep 2010 01:56:00 -0000 From: Jan Kratochvil To: Pedro Alves Cc: gdb-patches@sourceware.org Subject: Re: [patch] regression: Quit should not ask with core (PR 12071) Message-ID: <20100929221138.GA14109@host1.dyn.jankratochvil.net> References: <20100929144316.GA16519@host1.dyn.jankratochvil.net> <201009291604.18270.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201009291604.18270.pedro@codesourcery.com> User-Agent: Mutt/1.5.21 (2010-09-15) 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: 2010-09/txt/msg00498.txt.bz2 On Wed, 29 Sep 2010 17:04:17 +0200, Pedro Alves wrote: > So, for example, if you have two inferiors in your gdb session, one of them > is running as a process, while the other is still just a pseudo-inferior > / file_stratum inferior yet, and you have the latter selected as current, > your patch will make that have-live-inferiors check still return 0, while > there _is_ one live inferior. Confirming it had this problem. No regressions on {x86_64,x86_64-m32,i686}-fedora14snapshot-linux-gnu. Thanks, Jan gdb/ 2010-09-29 Jan Kratochvil * inferior.c (have_live_inferiors): New variables old_chain, inf and tp. Iterate INFERIOR_LIST and call target_has_execution. Gdb/testsuite/ 2010-09-29 Jan Kratochvil * gdb.base/corefile.exp (quit with a process, no question: load core) (quit with a core file): New tests. --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -461,16 +461,29 @@ have_inferiors (void) int have_live_inferiors (void) { - struct target_ops *t; + struct cleanup *old_chain; + struct inferior *inf; - /* The check on stratum suffices, as GDB doesn't currently support - multiple target interfaces. */ - if (have_inferiors ()) - for (t = current_target.beneath; t != NULL; t = t->beneath) - if (t->to_stratum == process_stratum) - return 1; + old_chain = make_cleanup_restore_current_thread (); - return 0; + for (inf = inferior_list; inf; inf = inf->next) + if (inf->pid != 0) + { + struct thread_info *tp; + + tp = any_thread_of_process (inf->pid); + if (tp) + { + switch_to_thread (tp->ptid); + + if (target_has_execution) + break; + } + } + + do_cleanups (old_chain); + + return inf != NULL; } /* Prune away automatically added program spaces that aren't required --- a/gdb/testsuite/gdb.base/corefile.exp +++ b/gdb/testsuite/gdb.base/corefile.exp @@ -201,8 +201,33 @@ gdb_test_multiple "info files" $test { } } +set test "quit with a process" +gdb_test_multiple "quit" $test { + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" { + pass $test + gdb_test "n" {Not confirmed\.} "quit with processes: n" + } +} + gdb_exit +# Verify there is no question if only a core file is loaded. + +gdb_start +gdb_test "core-file $corefile" "Core was generated by .*" "no question: load core" + +set test "quit with a core file" +gdb_test_multiple "quit" $test { + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" { + fail $test + gdb_test "n" {Not confirmed\.} "quit with processes: n" + } + eof { + pass $test + } +} + +gdb_exit # Test an attach command will clear any loaded core file.