public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Tom Tromey <tromey@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] fix record "run" regression
Date: Wed, 02 Jul 2014 09:52:00 -0000	[thread overview]
Message-ID: <53B3D640.2060807@redhat.com> (raw)
In-Reply-To: <1404251135-2427-1-git-send-email-tromey@redhat.com>

On 07/01/2014 10:45 PM, Tom Tromey wrote:
> This fixes the record "run" regression pointed out by Marc Khouzam:
> 
>     https://sourceware.org/ml/gdb/2014-06/msg00096.html
> 
> The bug is that target_require_runnable must agree with the handling
> of the "run" target, but currently it is out of sync.  This patch
> fixes the problem by changing target_require_runnable to also ignore
> the record_stratum.

Thanks Tom.

> 
> Built and regtested on x86-64 Fedora 20.
> New test case included.
> 
> 2014-07-01  Tom Tromey  <tromey@redhat.com>
> 
> 	* target.c (target_require_runnable): Also check record_stratum.
> 	Update comment.
> 
> 2014-07-01  Tom Tromey  <tromey@redhat.com>
> 
> 	* gdb.reverse/run-reverse.c: New file.
> 	* gdb.reverse/run-reverse.exp: New file.

This is precord specific, as opposed to (remote) targets
that can reverse themselves, and about re-running -- can I
suggest "rerun-prec.c|exp" ?  (following the existing "precsave"
practice).


> ---
>  gdb/ChangeLog                             |  5 ++++
>  gdb/target.c                              |  3 +-
>  gdb/testsuite/ChangeLog                   |  5 ++++
>  gdb/testsuite/gdb.reverse/run-reverse.c   | 21 +++++++++++++
>  gdb/testsuite/gdb.reverse/run-reverse.exp | 49 +++++++++++++++++++++++++++++++
>  5 files changed, 82 insertions(+), 1 deletion(-)
>  create mode 100644 gdb/testsuite/gdb.reverse/run-reverse.c
>  create mode 100644 gdb/testsuite/gdb.reverse/run-reverse.exp
> 
> 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/run-reverse.c b/gdb/testsuite/gdb.reverse/run-reverse.c
> new file mode 100644
> index 0000000..fd2c0d7
> --- /dev/null
> +++ b/gdb/testsuite/gdb.reverse/run-reverse.c
> @@ -0,0 +1,21 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 2008-2014 Free Software Foundation, Inc.

I think you can just use "2014" here.

> +
> +   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 <http://www.gnu.org/licenses/>.  */
> +
> +int main (int argc, char **argv)
> +{
> +  return 0;
> +}
> diff --git a/gdb/testsuite/gdb.reverse/run-reverse.exp b/gdb/testsuite/gdb.reverse/run-reverse.exp
> new file mode 100644
> index 0000000..1412dbb
> --- /dev/null
> +++ b/gdb/testsuite/gdb.reverse/run-reverse.exp
> @@ -0,0 +1,49 @@
> +# 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 <http://www.gnu.org/licenses/>.  */
> +
> +if {![supports_reverse] || ![supports_process_record]} {
> +    return
> +}
> +
> +standard_testfile .c

I believe ".c" is not necessary.

> +
> +# 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.
> +set ok 1
> +send_gdb "start\n"
> +gdb_expect 60 {

Did you try gdb_test_multiple ?

Then I'd suggest initializing ok to -1, and skipping the last
pass/fail if it is still -1, as gdb_test_multiple will have
already issued a fail in that case.

> +    -re "The program .* has been started already.*y or n. $" {
> +	send_gdb "y\n"
> +	exp_continue
> +    }
> +    -re "does not support \"run\"" {
> +	set ok 0

The test should first probe whether "start" with without
record actually worked.  I think you'll get an error
with --target_board=native-gdbserver as is, because
the first runto main will use something like
"target remote ...; tb main; c" instead of "run/start", while the target
really does not support "run".  I'd replace the first runto main
with explicit "start", and issue unsupported if "does not support"
comes out then.

> +    }
> +    -notransfer -re "Starting program: \[^\r\n\]*" {

I think this should not use -notransfer, and should consume output
until the prompt, otherwise the next test will get confused by getting
the stale prompt.   Might as well make the "does not support" case consume
the prompt too.

> +	set ok 1
> +    }
> +}
> +if {$ok} {
> +    pass "restarting inferior"
> +} else {
> +    fail "restarting inferior"
> +}

Thanks,
Pedro Alves

  reply	other threads:[~2014-07-02  9:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-01 21:45 Tom Tromey
2014-07-02  9:52 ` Pedro Alves [this message]
2014-07-03 18:13   ` Tom Tromey
2014-07-04 14:41     ` Pedro Alves
2014-07-07 15:30       ` Tom Tromey
2014-07-08  9:26         ` Pedro Alves
2014-07-11 18:05           ` Tom Tromey
2014-07-11 18:10             ` Pedro Alves
2014-07-11 18:12               ` Tom Tromey
2014-07-11 18:29                 ` Pedro Alves
2014-07-11 21:25                   ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53B3D640.2060807@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tromey@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).