From patchwork Thu Jul 3 18:12:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 1912 Received: (qmail 31011 invoked by alias); 3 Jul 2014 18:13:05 -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 30956 invoked by uid 89); 3 Jul 2014 18:12:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 03 Jul 2014 18:12:56 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s63ICsHl023449 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 3 Jul 2014 14:12:54 -0400 Received: from barimba (ovpn-113-95.phx2.redhat.com [10.3.113.95]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s63ICr9M024391 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO); Thu, 3 Jul 2014 14:12:53 -0400 From: Tom Tromey To: Pedro Alves Cc: gdb-patches@sourceware.org Subject: Re: [PATCH] fix record "run" regression References: <1404251135-2427-1-git-send-email-tromey@redhat.com> <53B3D640.2060807@redhat.com> Date: Thu, 03 Jul 2014 12:12:52 -0600 In-Reply-To: <53B3D640.2060807@redhat.com> (Pedro Alves's message of "Wed, 02 Jul 2014 10:52:00 +0100") Message-ID: <87ha2ynwez.fsf@fleche.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Pedro> The test should first probe whether "start" with without Pedro> record actually worked. I think you'll get an error Pedro> with --target_board=native-gdbserver as is, because Pedro> the first runto main will use something like Pedro> "target remote ...; tb main; c" instead of "run/start", while the target Pedro> really does not support "run". I'd replace the first runto main Pedro> with explicit "start", and issue unsupported if "does not support" Pedro> comes out then. I ended up having it check $use_gdb_stub. I think this version addresses all your comments. Let me know what you think. Tom 2014-07-03 Tom Tromey * target.c (target_require_runnable): Also check record_stratum. Update comment. 2014-07-03 Tom Tromey * gdb.reverse/rerun-prec.c: New file. * gdb.reverse/rerun-prec.exp: New file. diff --git a/gdb/target.c b/gdb/target.c index ece59e6..180ec26 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -2423,10 +2423,11 @@ target_require_runnable (void) if (t->to_create_inferior != NULL) return; - /* Do not worry about thread_stratum targets that can not + /* Do not worry about targets at certain strata that can not create inferiors. Assume they will be pushed again if necessary, and continue to the process_stratum. */ if (t->to_stratum == thread_stratum + || t->to_stratum == record_stratum || t->to_stratum == arch_stratum) continue; diff --git a/gdb/testsuite/gdb.reverse/rerun-prec.c b/gdb/testsuite/gdb.reverse/rerun-prec.c new file mode 100644 index 0000000..c0f90cb --- /dev/null +++ b/gdb/testsuite/gdb.reverse/rerun-prec.c @@ -0,0 +1,21 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 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 . */ + +int main (int argc, char **argv) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.reverse/rerun-prec.exp b/gdb/testsuite/gdb.reverse/rerun-prec.exp new file mode 100644 index 0000000..cd2305b --- /dev/null +++ b/gdb/testsuite/gdb.reverse/rerun-prec.exp @@ -0,0 +1,47 @@ +# Copyright 2014 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 . */ + +if {![supports_reverse] || ![supports_process_record]} { + return +} + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile [list $srcfile]]} { + return -1 +} + +if {$use_gdb_stub} { + unsupported "re-running not supported on this board" + return +} + +# The bug is a regression in the sequence "run; record; run". +runto main +gdb_test_no_output "record" "Turn on process record" + +# We can't use gdb_run_cmd or the like since we need to detect errors. +gdb_test_multiple start "restarting inferior" { + -re "The program .* has been started already.*y or n. $" { + send_gdb "y\n" + exp_continue + } + -re "does not support \"run\"" { + fail "restarting inferior" + } + -re "Starting program: \[^\r\n\]*" { + pass "restarting inferior" + } +}