public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Bruno Larsen <blarsen@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH v4 14/15] gdb.base/skip.exp: Use finish to exit functions
Date: Mon, 12 Sep 2022 17:57:40 +0100	[thread overview]
Message-ID: <87wna8jzsr.fsf@redhat.com> (raw)
In-Reply-To: <20220720194441.168906-16-blarsen@redhat.com>

Bruno Larsen via Gdb-patches <gdb-patches@sourceware.org> writes:

> gdb.base/skip.exp was making use of a fixed amount of step commands to

I think s/amount/number/ - amount is for uncountable things, while the
number of steps used can be counted.

> exit some functions.  This caused some problems when using clang to test
> GDB, as GDB would need fewer steps to reach the desired spots.  For
> instance, when testing in the section "step after disabling 3", the log
> looks like this:
>
>     Breakpoint 4, main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32
>     32        x = baz ((bar (), foo ()));
>     (gdb) step
>     bar () at binutils-gdb/gdb/testsuite/gdb.base/skip1.c:21
>     21        return 1;
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step 1
>     step
>     foo () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:42
>     42        return 0;
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step 2
>     step
>     main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:34
>     34        test_skip_file_and_function ();
>     (gdb) step
>     test_skip_file_and_function () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:59
>     59        test_skip ();
>     (gdb) FAIL: gdb.base/skip.exp: step after disabling 3: step 3
>     step
>     test_skip () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:48
>     48      }
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step 4
>     step
>     test_skip_file_and_function () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:60
>     60        skip1_test_skip_file_and_function ();
>     (gdb) FAIL: gdb.base/skip.exp: step after disabling 3: step 5
>
> This shows that the feature is working, but it is not easy to use steps
> to test this feature without analyzing all possible outputs, such as
> using gdb_step_until_regexp.  Instead, skip.exp now uses finish to leave

You mention gdb_step_until_regexp here, which I think is now named just
gdb_step_until.  But more importantly, you mention it, but then don't
actually use this, and its not clear why (from this commit message).

I think it's worth pointing out here that we can't use gdb_step_until
because it would potentially step over the very thing we are trying to
ensure that GDB doesn't do, i.e. call into the skipped function.

> functions, synchronizing through compilers and compiler versions.  Some
> test names were also changed to be a bit more descriptive.  The new log
> looks like this, independently of compiler used:
>
>     Breakpoint 4, main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32
>     32        x = baz ((bar (), foo ()));
>     (gdb) step
>     bar () at binutils-gdb/gdb/testsuite/gdb.base/skip1.c:21
>     21        return 1;
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step into bar
>     finish
>     Run till exit from #0  bar () at binutils-gdb/gdb/testsuite/gdb.base/skip1.c:21
>     main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32
>     32        x = baz ((bar (), foo ()));
>     Value returned is $2 = 1
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: return from bar
>     step
>     foo () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:42
>     42        return 0;
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step into foo
>     finish
>     Run till exit from #0  foo () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:42
>     main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32
>     32        x = baz ((bar (), foo ()));
>     Value returned is $3 = 0
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: Return from foo
>     step
>     34        test_skip_file_and_function ();
>     (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step and skip baz
> ---
>  gdb/testsuite/gdb.base/skip.exp | 32 +++++++++++++++-----------------
>  1 file changed, 15 insertions(+), 17 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.base/skip.exp b/gdb/testsuite/gdb.base/skip.exp
> index e6b660004d9..5b08cde93b7 100644
> --- a/gdb/testsuite/gdb.base/skip.exp
> +++ b/gdb/testsuite/gdb.base/skip.exp
> @@ -100,6 +100,12 @@ if ![runto_main] {
>  gdb_test "step" ".*" "step in the main"
>  gdb_test "bt" "\\s*\\#0\\s+main.*" "step after all ignored"
>  
> +proc step_foo_skip_bar_baz {} {

I think this proc should have a comment describing what it's doing.

> +    gdb_test "step" "foo \\(\\) at.*" "step and skip bar"
> +    gdb_test "finish" ".*" "return from bar"
> +    gdb_test "step" ".*test_skip_file_and_function.*" "step and skip baz"
> +}
> +
>  # Now remove skip.c from the skiplist.  Our first step should take us
>  # into foo(), and our second step should take us to the next line in main().
>  
> @@ -117,21 +123,19 @@ with_test_prefix "step after deleting 1" {
>  	return
>      }
>  
> -    gdb_test "step" "foo \\(\\) at.*" "step 1"
> -    gdb_test "step" ".*" "step 2" ; # Return from foo()
> -    gdb_test "step" "main \\(\\) at.*" "step 3"
> +    step_foo_skip_bar_baz
>  }
>  
>  # Test that we step into foo(), then into bar(), but not into baz().
>  proc step_bar_foo_skip_baz {} {
> -    gdb_test "step" "bar \\(\\) at.*" "step 1"
> -    gdb_test "step" ".*" "step 2"; # Return from bar()
> +    gdb_test "step" "bar \\(\\) at.*" "step into bar"
> +    gdb_test "finish" ".*" "return from bar"
>  
>      # With at least gcc 6.5.0 and 9.2.0, we jump once back to main
>      # before entering foo here.  If that happens try to step a second
>      # time.
>      set stepped_again 0
> -    gdb_test_multiple "step" "step 3" {
> +    gdb_test_multiple "step" "step into foo" {
>  	-re -wrap "foo \\(\\) at.*" {
>  	    pass $gdb_test_name
>  	}
> @@ -144,8 +148,8 @@ proc step_bar_foo_skip_baz {} {
>  	}
>      }
>  
> -    gdb_test "step" ".*" "step 4"; # Return from foo()
> -    gdb_test "step" "main \\(\\) at.*" "step 5"
> +    gdb_test "finish" ".*" "Return from foo"
> +    gdb_test "step" ".*test_skip_file_and_function.*" "step and skip baz"
>  }
>  
>  # Now disable the skiplist entry for  skip1.c.  We should now
> @@ -178,9 +182,7 @@ with_test_prefix "step after enable 3" {
>  	return
>      }
>  
> -    gdb_test "step" "foo \\(\\) at.*" "step 1"
> -    gdb_test "step" ".*" "step 2"; # Return from foo()
> -    gdb_test "step" "main \\(\\) at.*" "step 3"
> +    step_foo_skip_bar_baz
>  }
>  
>  # Admin tests (disable,enable,delete).
> @@ -249,9 +251,7 @@ with_test_prefix "step using -fi" {
>  
>      gdb_test_no_output "skip disable"
>      gdb_test_no_output "skip enable 5"
> -    gdb_test "step" "foo \\(\\) at.*" "step 1"
> -    gdb_test "step" ".*" "step 2"; # Return from foo()
> -    gdb_test "step" "main \\(\\) at.*" "step 3"
> +    step_foo_skip_bar_baz
>  }
>  
>  with_test_prefix "step using -gfi" {
> @@ -261,9 +261,7 @@ with_test_prefix "step using -gfi" {
>  
>      gdb_test_no_output "skip disable"
>      gdb_test_no_output "skip enable 6"
> -    gdb_test "step" "foo \\(\\) at.*" "step 1"
> -    gdb_test "step" ".*" "step 2"; # Return from foo()
> -    gdb_test "step" "main \\(\\) at.*" "step 3"
> +    step_foo_skip_bar_baz
>  }

In an earlier version of this patch Pedro raised the concern that if we
remove all of the "step out of a function" tests, then we may remove
some important testing.

With the patch #15 in this series (once that's merged), I think it will
be OK to change this test as you propose.

Thanks,
Andrew


>  
>  with_test_prefix "step using -fu for baz" {
> -- 
> 2.31.1


  reply	other threads:[~2022-09-12 16:57 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-20 19:44 [PATCH v4 00/15] Clean gdb.base when testing with clang Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 01/15] gdb/testsuite: introduce gdb_step_until Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 01/15] gdb/testsuite: introduce gdb_step_until_regexp Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 02/15] gdb/testsuite: Add a proc to test where compiler links the epilogue Bruno Larsen
2022-09-13 12:17   ` Andrew Burgess
2022-07-20 19:44 ` [PATCH v4 03/15] Change gdb.base/skip-solib.exp deal with lack of epilogue information Bruno Larsen
2022-09-10  9:53   ` Andrew Burgess
2022-07-20 19:44 ` [PATCH v4 04/15] gdb/testsuite: change gdb.base/nodebug.exp to not fail with clang Bruno Larsen
2022-09-12  9:08   ` Andrew Burgess
2022-09-12 12:17     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 05/15] update gdb.base/info-program.exp " Bruno Larsen
2022-09-12  9:34   ` Andrew Burgess
2022-09-12 12:18     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 06/15] fix gdb.base/access-mem-running.exp for clang testing Bruno Larsen
2022-09-12  9:41   ` Andrew Burgess
2022-09-12 12:18     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 07/15] Fix gdb.base/call-ar-st to work with Clang Bruno Larsen
2022-09-12 10:30   ` Andrew Burgess
2022-09-12 12:18     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 08/15] add xfails to gdb.base/complex-parts.exp when testing with clang Bruno Larsen
2022-09-12 10:49   ` Andrew Burgess
2022-09-12 12:18     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 09/15] gdb/testsuite: fix gdb.base/msym-bp-shl when running with Clang Bruno Larsen
2022-09-12 10:58   ` Andrew Burgess
2022-09-12 12:30     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 10/15] explicitly test for stderr in gdb.base/dprintf.exp Bruno Larsen
2022-09-12 12:20   ` Andrew Burgess
2022-09-13 12:08     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 11/15] gdb/testsuite: Update gdb.base/so-impl-ld.exp Bruno Larsen
2022-09-12 12:30   ` Andrew Burgess
2022-09-13 12:08     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 12/15] [gdb/testsuite]: fix gdb.base/jit-elf.exp when testing with clang Bruno Larsen
2022-09-12 12:54   ` Andrew Burgess
2022-07-20 19:44 ` [PATCH v4 13/15] gdb/testsuite: fix gdb.base/info-types-c++ " Bruno Larsen
2022-09-12 14:35   ` Andrew Burgess
2022-09-14 11:31     ` Bruno Larsen
2022-07-20 19:44 ` [PATCH v4 14/15] gdb.base/skip.exp: Use finish to exit functions Bruno Larsen
2022-09-12 16:57   ` Andrew Burgess [this message]
2022-07-20 19:44 ` [PATCH v4 15/15] gdb/testsuite: Add test to step through function epilogue Bruno Larsen
2022-09-08 12:04   ` Andrew Burgess
2022-08-09 16:53 ` [PIING][PATCH v4 00/15] Clean gdb.base when testing with clang Bruno Larsen
2022-08-18  7:25 ` [PINGv2][PATCH " Bruno Larsen
2022-08-25  7:51   ` [PINGv3][PATCH " Bruno Larsen
2022-09-05 14:59     ` [PINGv4][PATCH " Bruno Larsen

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=87wna8jzsr.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=blarsen@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /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).