From patchwork Thu Jul 30 01:24:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 7925 Received: (qmail 73527 invoked by alias); 30 Jul 2015 01:24:53 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 73513 invoked by uid 89); 30 Jul 2015 01:24:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 X-HELO: mail-qg0-f41.google.com Received: from mail-qg0-f41.google.com (HELO mail-qg0-f41.google.com) (209.85.192.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 30 Jul 2015 01:24:52 +0000 Received: by qged69 with SMTP id d69so15194300qge.0 for ; Wed, 29 Jul 2015 18:24:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=vWpY9FUpRmek7/BEl7q3Loa50t7fi0Vl1Uvyi6POdtc=; b=XGPQBmIVG9OAQzsRDHuik1p1r1+pUbc90NWfGhr3aYiI09reRj0WDJw1AZh6pQmDMK zwRqcA6CeGh89fURrqVY8N3MZu2XKCDjghyVoYqUUCzyRRRd9j2zUQffmg/W4z8Vyss4 ki4EyM875hzRf1Y9/e3Y1cJqERTwUAorRdWHFhiyhzwWEnI6lnchipY5HfZVp3TlE2oG JMNsE5Srk16DPIpWN3w6Qj5HCrqkuLCpyyv3cjeMDju7DR8K8CahwHKsS7yAS3Jv0OGl uuCaNRV6kT923HMnq5AFT1aj6EC9DSZUGUDR5+LyGgztcG+QIlXVwzm52CeIohAeZi9Y 6JpA== X-Gm-Message-State: ALoCoQnTW/cwXPlyY0uPu+s3XJg9ivqe6s6+mnLHfGQft/tbIfGGOTbshfv5TnHSPG6/76FmQaNW X-Received: by 10.140.217.202 with SMTP id n193mr1557880qhb.61.1438219490020; Wed, 29 Jul 2015 18:24:50 -0700 (PDT) Received: from localhost.localdomain (ool-4353acd8.dyn.optonline.net. [67.83.172.216]) by smtp.gmail.com with ESMTPSA id 2sm328477qhw.10.2015.07.29.18.24.49 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 29 Jul 2015 18:24:49 -0700 (PDT) From: Patrick Palka To: gdb-patches@sourceware.org Cc: Patrick Palka Subject: [PATCH] Unset attach_flag when running a new process Date: Wed, 29 Jul 2015 21:24:43 -0400 Message-Id: <1438219483-13498-1-git-send-email-patrick@parcs.ath.cx> We currently set attach_flag when attaching to a process, so we should make sure to unset it when forking a new process. Otherwise attach_flag would remain set after forking, if the previous process associated with the inferior was attached to. [ The test is currently magically failing on extended-gdbserver. The failure is: (gdb) PASS: gdb.base/run-after-attach.exp: kill process start `target:/scratchpad/binutils-gdb-build/gdb/testsuite/gdb.base/run-after-attach' has disappeared; keeping its symbols. Temporary breakpoint 1 at 0x4005aa: file /home/patrick/code/binutils-gdb/gdb/testsuite/gdb.base/run-after-attach.c, line 23. Starting program: target:/scratchpad/binutils-gdb-build/gdb/testsuite/gdb.base/run-after-attach Running the default executable on the remote target failed; try "set remote exec-file"? I do not know why restarting the program fails. Is this a bug or a mistake on my part? Also, why is [is_remote target] true for gdbserver but not for extended-gdbserver? ] gdb/ChangeLog: * gdb/infcmd.c (run_comand_1): Unset attach_flag. gdb/testsuite/ChangeLog: * gdb.base/run-after-attach.exp: New test file. * gdb.base/run-after-attach.c: New test file. --- gdb/infcmd.c | 4 ++ gdb/testsuite/gdb.base/run-after-attach.c | 25 ++++++++++ gdb/testsuite/gdb.base/run-after-attach.exp | 73 +++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 gdb/testsuite/gdb.base/run-after-attach.c create mode 100644 gdb/testsuite/gdb.base/run-after-attach.exp diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 4948d27..bf8b94b 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -601,6 +601,10 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main) /* Done with ARGS. */ do_cleanups (args_chain); + /* Unset attach_flag, it may be set if the previous process associated with + the inferior was attached to. */ + current_inferior ()->attach_flag = 0; + /* We call get_inferior_args() because we might need to compute the value now. */ run_target->to_create_inferior (run_target, exec_file, get_inferior_args (), diff --git a/gdb/testsuite/gdb.base/run-after-attach.c b/gdb/testsuite/gdb.base/run-after-attach.c new file mode 100644 index 0000000..2398f00 --- /dev/null +++ b/gdb/testsuite/gdb.base/run-after-attach.c @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2015 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 + +int +main (void) +{ + sleep (600); + return 0; +} diff --git a/gdb/testsuite/gdb.base/run-after-attach.exp b/gdb/testsuite/gdb.base/run-after-attach.exp new file mode 100644 index 0000000..19817f7 --- /dev/null +++ b/gdb/testsuite/gdb.base/run-after-attach.exp @@ -0,0 +1,73 @@ +# Copyright (C) 2015 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 . + +# Check that forking a process after a previous process was attached to resets +# attach_flag. This is done indirectly by inspecting GDB's quit prompt. + +if ![can_spawn_for_attach] { + return 0 +} + +standard_testfile +set executable $testfile + +if { [build_executable $testfile.exp $executable "" debug] == -1 } { + return -1 +} + +set testpid [spawn_wait_for_attach $binfile] + +gdb_start + +set test "attach to process" +gdb_test "attach $testpid" "Attaching to process $testpid.*" $test + +set test "kill process" +send_gdb "kill\n" +gdb_expect { + -re ".y or n. $" { + send_gdb "y\n" + exp_continue + } + -re "$gdb_prompt $" { + pass $test + } + default { + fail $test + } +} + +set test "restart process" +gdb_test "start" "Temporary breakpoint .*" $test + +set test "attempt kill via quit" +send_gdb "quit\n" +# The quit prompt should warn about killing the process, not about detaching the +# process, since this process was not attached to. +gdb_expect { + -re "will be killed.*.y or n. $" { + pass $test + send_gdb "n\n" + } + -re "will be detached.*.y or n. $" { + fail $test + send_gdb "n\n" + } + default { + fail $test + } +} + +remote_exec host "kill $testpid"