diff options
Diffstat (limited to 'gdb/testsuite/gdb.multi/watchpoint-multi.exp')
-rw-r--r-- | gdb/testsuite/gdb.multi/watchpoint-multi.exp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.multi/watchpoint-multi.exp b/gdb/testsuite/gdb.multi/watchpoint-multi.exp new file mode 100644 index 0000000..3c4ad8b --- /dev/null +++ b/gdb/testsuite/gdb.multi/watchpoint-multi.exp @@ -0,0 +1,91 @@ +# Copyright 2012 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/>. + +set testfile "watchpoint-multi" + +# Multiple inferiors are needed, therefore both native and extended gdbserver +# modes are supported. Only non-extended gdbserver is not supported. +if [target_info exists use_gdb_stub] { + untested ${testfile}.exp + return +} + +# Do not use simple hardware watchpoints ("watch") as its false hit may be +# unnoticed by GDB if it reads it still has the same value. +if [skip_hw_watchpoint_access_tests] { + untested "${testfile} (no hardware access watchpoints)" + return +} + +set executable ${testfile} +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${executable} + +if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested ${testfile}.exp + return -1 +} + +clean_restart $executable + +# Simulate non-stop+target-async which also uses breakpoint always-inserted. +gdb_test_no_output "set breakpoint always-inserted on" +# displaced-stepping is also needed as other GDB sometimes still removes the +# breakpoints, even with always-inserted on. +# Without the support this test just is not as thorough as it could be. +if [support_displaced_stepping] { + gdb_test_no_output "set displaced-stepping on" +} + +# Debugging of this testcase: +#gdb_test_no_output "maintenance set show-debug-regs on" +#gdb_test_no_output "set debug infrun 1" + +gdb_breakpoint main {temporary} +gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 1" + +gdb_test "add-inferior" "Added inferior 2" +gdb_test "inferior 2" "witching to inferior 2 .*" +gdb_load $binfile + +gdb_breakpoint main {temporary} +gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 2" + +gdb_test "awatch c" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c" + +gdb_breakpoint "marker_exit" + +gdb_test "inferior 1" "witching to inferior 1 .*" + +if [skip_hw_watchpoint_multi_tests] { + # On single hardware watchpoint at least test the watchpoint in inferior + # 2 is not hit. +} else { + gdb_test "awatch b" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b" + + gdb_test "inferior 2" "witching to inferior 2 .*" + + # FAIL would be a hit on watchpoint for `b' - that one is for the other + # inferior. + gdb_test "continue" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c\r\n\r\nOld value = 0\r\nNew value = 3\r\n.*" "catch c" + + gdb_test "continue" "Breakpoint \[0-9\]+, marker_exit .*" "catch marker_exit in inferior 2" + + gdb_test "inferior 1" "witching to inferior 1 .*" + + gdb_test "continue" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b\r\n\r\nOld value = 0\r\nNew value = 2\r\n.*" "catch b" +} + +gdb_test "continue" "Breakpoint \[0-9\]+, marker_exit .*" "catch marker_exit in inferior 1" |