From: Pedro Alves Date: Fri, 10 Apr 2015 14:22:38 +0000 (+0100) Subject: Test step-over-{lands-on-breakpoint|trips-on-watchpoint}.exp with displaced stepping X-Git-Tag: users/hjl/linux/release/2.25.51.0.2~2^2~16^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c79d856c88fbc58584d811c04b4812618aa6ac7b;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ec319abe8b5..0d5d07fd5c9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,13 @@ +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): 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 1e123149032..52b59ec438e 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 17cd758addf..aa983f7c748 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 + } +}