From patchwork Fri Apr 10 14:54:30 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 6136 Received: (qmail 113785 invoked by alias); 10 Apr 2015 14:54:35 -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 113774 invoked by uid 89); 10 Apr 2015 14:54:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 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; Fri, 10 Apr 2015 14:54:33 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t3AEsWKY024625 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Fri, 10 Apr 2015 10:54:32 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t3AEsUj1000949 for ; Fri, 10 Apr 2015 10:54:31 -0400 Message-ID: <5527E426.2070706@redhat.com> Date: Fri, 10 Apr 2015 15:54:30 +0100 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: Re: [PATCH v2 08/23] Test step-over-{lands-on-breakpoint|trips-on-watchpoint}.exp with displaced stepping References: <1428410990-28560-1-git-send-email-palves@redhat.com> <1428410990-28560-9-git-send-email-palves@redhat.com> In-Reply-To: <1428410990-28560-9-git-send-email-palves@redhat.com> On 04/07/2015 01:49 PM, Pedro Alves wrote: > These tests exercise the infrun.c:proceed code that needs to know to > start new step overs (along with switch_back_to_stepped_thread, etc.). > That code is tricky to get right in the multitude of possible > combinations (at least): > > (native | remote) > X (all-stop | all-stop-but-target-always-in-non-stop) > X (displaced-stepping | in-line step-over). > > The first two above are properties of the target, but the different > step-over-breakpoint methods should work with any target that supports > them. This patch makes sure we always test both methods on all > targets. > > gdb/testsuite/ChangeLog: > 2015-04-07 Pedro Alves > > * gdb.threads/step-over-lands-on-breakpoint.exp (do_test): New > procedure, factored out from ... > (top level): ... here. Add "set displaced-stepping" testing axis. > * gdb.threads/step-over-trips-on-watchpoint.exp (do_test): New > parameter "displaced". Use it. > (top level): Use foreach and add "set displaced-stepping" testing > axis. I went ahead and pushed this one in too. If this exposes problems on other ports, the sooner we know them the better... --- From c79d856c88fbc58584d811c04b4812618aa6ac7b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 10 Apr 2015 15:22:38 +0100 Subject: [PATCH] Test step-over-{lands-on-breakpoint|trips-on-watchpoint}.exp with displaced stepping These tests exercise the infrun.c:proceed code that needs to know to start new step overs (along with switch_back_to_stepped_thread, etc.). That code is tricky to get right in the multitude of possible combinations (at least): (native | remote) X (all-stop | all-stop-but-target-always-in-non-stop) X (displaced-stepping | in-line step-over). The first two above are properties of the target, but the different step-over-breakpoint methods should work with any target that supports them. This patch makes sure we always test both methods on all targets. Tested on x86-64 Fedora 20. gdb/testsuite/ChangeLog: 2015-04-10 Pedro Alves * gdb.threads/step-over-lands-on-breakpoint.exp (do_test): New procedure, factored out from ... (top level): ... here. Add "set displaced-stepping" testing axis. * gdb.threads/step-over-trips-on-watchpoint.exp (do_test): New parameter "displaced". Use it. (top level): Use foreach and add "set displaced-stepping" testing axis. --- gdb/testsuite/ChangeLog | 10 +++++++++ .../gdb.threads/step-over-lands-on-breakpoint.exp | 22 +++++++++++++++++--- .../gdb.threads/step-over-trips-on-watchpoint.exp | 24 +++++++++++++++------- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ec319ab..0d5d07f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,15 @@ 2015-04-10 Pedro Alves + * gdb.threads/step-over-lands-on-breakpoint.exp (do_test): New + procedure, factored out from ... + (top level): ... here. Add "set displaced-stepping" testing axis. + * gdb.threads/step-over-trips-on-watchpoint.exp (do_test): New + parameter "displaced". Use it. + (top level): Use foreach and add "set displaced-stepping" testing + axis. + +2015-04-10 Pedro Alves + * gdb.threads/step-over-trips-on-watchpoint.c (child_function): Remove comment. * gdb.threads/step-over-trips-on-watchpoint.exp (do_test): Find diff --git a/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp b/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp index 1e12314..52b59ec 100644 --- a/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp +++ b/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp @@ -24,15 +24,20 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ return -1 } -# Cover both stepping and non-stepping execution commands. -foreach command {"step" "next" "continue" } { - with_test_prefix $command { +# The test proper. DISPLACED is true if we should try with displaced +# stepping. COMMAND is the execution command to test. +proc do_test {displaced command} { + global executable + + with_test_prefix "displaced=$displaced: $command" { clean_restart $executable if ![runto_main] { continue } + gdb_test_no_output "set displaced-stepping $displaced" + gdb_breakpoint [gdb_get_line_number "set wait-thread breakpoint here"] gdb_continue_to_breakpoint "run to wait-thread breakpoint" gdb_test "info threads" "2 .*\\\* 1.*" "info threads shows all threads" @@ -60,3 +65,14 @@ foreach command {"step" "next" "continue" } { gdb_test "$command" "step-over here.*" } } + +foreach displaced { "off" "on" } { + if { $displaced != "off" && ![support_displaced_stepping] } { + continue + } + + # Cover both stepping and non-stepping execution commands. + foreach command { "step" "next" "continue" } { + do_test $displaced $command + } +} diff --git a/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp b/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp index 17cd758..aa983f7 100644 --- a/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp +++ b/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp @@ -31,7 +31,11 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ return -1 } -proc do_test { with_bp } { +# The test proper. DISPLACED is true if we should try with displaced +# stepping. WITH_BP is true if we should try with a thread-specific +# breakpoint (for the wrong thread) right after the instruction that +# triggers the watchpoint. +proc do_test { displaced with_bp } { global executable global gdb_prompt global hex @@ -41,7 +45,7 @@ proc do_test { with_bp } { } else { set prefix "no thread-specific bp" } - with_test_prefix $prefix { + with_test_prefix "displaced=$displaced: $prefix" { # Cover both stepping and non-stepping execution commands. foreach command {"step" "next" "continue" } { with_test_prefix $command { @@ -51,6 +55,8 @@ proc do_test { with_bp } { continue } + gdb_test_no_output "set displaced-stepping $displaced" + gdb_breakpoint [gdb_get_line_number "set wait-thread breakpoint here"] gdb_continue_to_breakpoint "run to wait-thread breakpoint" gdb_test "info threads" "2 .*\\\* 1.*" "info threads shows all threads" @@ -99,9 +105,6 @@ proc do_test { with_bp } { gdb_test "watch watch_me" "Hardware watchpoint .*" if ${with_bp} { - # Set a thread-specific breakpoint (for the wrong - # thread) right after instruction that triggers - # the watchpoint. gdb_test "b *$after_address_triggers_watch thread 1" } @@ -120,5 +123,12 @@ proc do_test { with_bp } { } } -do_test 0 -do_test 1 +foreach displaced { "off" "on" } { + if { $displaced != "off" && ![support_displaced_stepping] } { + continue + } + + foreach with_bp { 0 1 } { + do_test $displaced $with_bp + } +}