Update tests to use skip_hw_watchpoint_tests to test for HW watchpoint support.
authorCarl Love <cel@us.ibm.com>
Tue, 18 Oct 2022 15:25:36 +0000 (11:25 -0400)
committerCarl Love <cel@us.ibm.com>
Tue, 18 Oct 2022 15:25:36 +0000 (11:25 -0400)
The hardware watchpoint check has been updated in a couple of recent
patches.  This patch updates the hardware watchpoint test in the remaining
gdb tests.

The issue is the PowerPC processors support hardware watchpoints with the
exception of Power 9. The hardware watchpoint support is disabled on
Power 9.  The test skip_hw_watchpoint_tests must be used to correctly
determine if the PowerPC processor supports hardware watchpoints.

This patch fixes 6 test failures in test gdb.threads/watchpoint-fork.exp.

Test gdb.base/watch-vfork.exp runs with can-use-hw-watchpoints set to
true and false.  When the test is run with can-use-hw-watchpoints set to
true, gdb just falls back to using software watchpoints.  The
patch reduces the number of expected passes by 2 since because it now
only runs once with can-use-hw-watchpoints set to false.

Test gdb.mi/mi-watch.exp runs the test with argument hw and sw.  If the
argument is hw and hardware watchpoints are not supported the test exits.
The number of expected passes is cut in half with the patch as it now only
runs the test using software breakpoints.  Previously the pass to use
hardware watchpoints was not skipped and the test actually ran using
software watchpoints.

The following tests run the same with and without the patch.  The tests
are supposed to execute the gdb command "set can-use-hw-watchpoints 0" if
the processor does not support hardware bwatchpoints.  However the command
was not being executed and gdb was falling back to using software
watchpoints since the Power 9 watchpoint resource check fails.  With the
patch, the tests now execute the command and the test runs using software
watchpoints as it did previously.  The tests are:

gdb.base/commands.exp
gdb.base/cond-eval-mode.exp
gdb.base/display.exp
gdb.base/gdb11531.exp
gdb.base/recurse.exp
gdb.base/value-double-free.exp
gdb.base/watch-bitfields.exp
gdb.base/watch-cond-infcall.exp
gdb.base/watch-cond.exp
gdb.base/watchpoint-solib.exp
gdb.base/watchpoints.exp

The following two tests are not supported on the Power 9 system used to
test the changes.  The patch does not change the tests results for these
tests:

gdb.python/py-breakpoint.exp
gdb.mi/mi-watch-nonstop.exp

16 files changed:
gdb/testsuite/gdb.base/commands.exp
gdb/testsuite/gdb.base/cond-eval-mode.exp
gdb/testsuite/gdb.base/display.exp
gdb/testsuite/gdb.base/gdb11531.exp
gdb/testsuite/gdb.base/recurse.exp
gdb/testsuite/gdb.base/value-double-free.exp
gdb/testsuite/gdb.base/watch-bitfields.exp
gdb/testsuite/gdb.base/watch-cond-infcall.exp
gdb/testsuite/gdb.base/watch-cond.exp
gdb/testsuite/gdb.base/watch-vfork.exp
gdb/testsuite/gdb.base/watchpoint-solib.exp
gdb/testsuite/gdb.base/watchpoints.exp
gdb/testsuite/gdb.mi/mi-watch-nonstop.exp
gdb/testsuite/gdb.mi/mi-watch.exp
gdb/testsuite/gdb.python/py-breakpoint.exp
gdb/testsuite/gdb.threads/watchpoint-fork.exp

index 3eb4463cd1a5e10640e52e9571c401a9115978d9..933978c0ea1061cd7b46b250a6c8828d70ebe5e5 100644 (file)
 # test special commands (if, while, etc)
 #
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile
 
 if { [prepare_for_testing "failed to prepare" commands run.c {debug additional_flags=-DFAKEARGV}] } {
@@ -542,9 +550,10 @@ proc_with_prefix user_defined_command_manyargs_test {} {
 
 proc_with_prefix watchpoint_command_test {} {
     global gdb_prompt
+    global skip_hw_watchpoint_tests_p
 
     # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
+    if {$skip_hw_watchpoint_tests_p} {
        gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
 
index 2c3779536c62e7720afbebf364971a2e106de55a..f6e8b3e71b2d12a659c60a5a6719f6f5400764bb 100644 (file)
 
 # Test 'set breakpoint condition-evaluation' settings
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
@@ -111,9 +119,10 @@ proc test_break { break_command } {
 #
 proc test_watch { watch_command } {
     global gdb_prompt
+    global skip_hw_watchpoint_tests_p
 
     with_test_prefix "$watch_command" {
-       if [target_info exists gdb,no_hardware_watchpoints] {
+       if {$skip_hw_watchpoint_tests_p} {
            unsupported "no target support"
            return
        }
index f94cd13da5f036be9a8b8d6560962834e875feda..b26c08433b8cebd63c371324a704b9aa42a4331e 100644 (file)
 # display.exp   Test display commands
 #               Also do some printing stuff for coverage's sake.
 #
+
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile \
@@ -56,7 +65,7 @@ if ![runto_main] then {
 }
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
     gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
index 8ce51c19bdc1434b9f63221efc549ae596f8f76b..4520a0dc12582f8992e7eb080f150cfed03409bb 100644 (file)
 # This is a problem related to CANNOT_STEP_HW_WATCHPOINTS macro.
 # It affects Solaris native targets.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
 
 standard_testfile
 
@@ -27,7 +34,7 @@ if { [prepare_for_testing "failed to prepare" $testfile $testfile.c {debug}] } {
 }
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
    gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
index 4afc61ed12c71fd41f5921bda8119b690b1f2718..681cdb52a8436f22c57abd0a28fee2f6caee8bc8 100644 (file)
 
 # This file was written by Jeff Law. (law@cs.utah.edu)
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
 
 standard_testfile
 
@@ -25,8 +32,10 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
 proc recurse_tests {} {
 
     # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
-       gdb_test_no_output "set can-use-hw-watchpoints 0" ""
+    global skip_hw_watchpoint_tests_p
+
+    if {$skip_hw_watchpoint_tests_p} {
+        gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
 
     if [runto recurse] then {
index 894ceebb2ae8eb893d429521179ef80658fab088..e1b8b2eb9c7e9420b75c9cd23f19368fb51b846d 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
@@ -24,7 +32,7 @@ if ![runto_main] {
 }
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
     gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
index 91f68ae9ce64e30ed853f9779a5dbd600f9189dd..afdfc5a9d899b8865b8e980a7e65d19a307a7824 100644 (file)
 
 # This file is part of the gdb testsuite
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+# Disable hardware watchpoints if the target does not support them.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
@@ -92,8 +101,8 @@ proc test_regular_watch {} {
 }
 
 # Disable hardware watchpoints if the target does not support them.
-if [target_info exists gdb,no_hardware_watchpoints] {
-    gdb_test_no_output "set can-use-hw-watchpoints 0"
+if {$skip_hw_watchpoint_tests_p} {
+    gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
 test_watch_location
index 42c73d1a50461664c3844d5d2b7e8be3052a4468..5dc0ebc2bb4ad266fe08bc05ec7ce7ed469bb742 100644 (file)
 # Test for watchpoints with conditions that involve inferior function
 # calls.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile
 
 if [target_info exists gdb,cannot_call_functions] {
@@ -49,7 +57,7 @@ proc test_watchpoint { hw } {
        "atchpoint \[0-9\]+: var\r\n\r\nOld value = 0\r\nNew value = 1\r\n.*watchpoint-stop.*"
 }
 
-if { ![target_info exists gdb,no_hardware_watchpoints] } {
+if { !$skip_hw_watchpoint_tests_p } {
     with_test_prefix "hw" { test_watchpoint 1 }
 }
 
index 3ee94a144169616f2f3b72a60379c7f9fbb7996b..18fabfc69c95990b28f973acf5188bf22d7e80bf 100644 (file)
 # Tests involving watchpoint conditions with local expressions.
 #
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 standard_testfile .c
 
 if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
@@ -24,7 +32,7 @@ if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
 }
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
     gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
@@ -43,7 +51,7 @@ gdb_test "continue" \
 clean_restart ${testfile}
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
     gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
@@ -62,7 +70,7 @@ gdb_test "continue" \
 clean_restart ${testfile}
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
     gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
index 38ec4de1effcf9079da01102af0ce8987f978361..0ba5af021a840ec1903de342fd22ac3c96f7ae7e 100644 (file)
@@ -44,7 +44,7 @@ proc test_watchpoint_across_vfork { hw teststr } {
        "Watchpoint triggers after vfork ($teststr)"
 }
 
-if { ![target_info exists gdb,no_hardware_watchpoints] } {
+if { ![skip_hw_watchpoint_tests] } {
     test_watchpoint_across_vfork 1 "hw"
 }
 
index aa4cf0d7adb61c2064cd41dbf459f78ad1ccdacc..a3fb5041294c1ae93b5bae44c8d39686e2e465f1 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 #
 # test running programs
 #
 
+
 if {[skip_shlib_tests]} {
     return 0
 }
@@ -53,7 +62,7 @@ gdb_load_shlib $lib_sl
 runto_main
 
 # Disable hardware watchpoints if necessary.
-if [target_info exists gdb,no_hardware_watchpoints] {
+if {$skip_hw_watchpoint_tests_p} {
     gdb_test_no_output "set can-use-hw-watchpoints 0" ""
 }
 
index 767157ee59386f8c7a382697daf10a821bc70a77..073f6c24c54c26914b9d8669e687a035dfd03c52 100644 (file)
 
 # This file was written by Pierre Muller. (muller@ics.u-strasbg.fr)
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 
 standard_testfile
 
@@ -48,7 +56,7 @@ with_test_prefix "before inferior start" {
     clean_restart ${binfile}
 
     # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
+    if {$skip_hw_watchpoint_tests_p} {
         gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
 
index b132d90353d6626aa2749ce8732429afcb3957c7..9648d7ee41c19c093d639fa26ce0fdf985fb5ed0 100644 (file)
@@ -13,7 +13,7 @@
 # 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 [target_info exists gdb,no_hardware_watchpoints] {
+if [skip_hw_watchpoint_tests] {
     return -1
 }
 
index 1f1f9430506d3aeefb3ef53f0c3d4ce1e1e8174b..1211fd55f03038ac27652665111532ea31a34f42 100644 (file)
 # The goal is not to test gdb functionality, which is done by other
 # tests, but to verify the correct output response to MI operations.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -138,8 +146,9 @@ proc test_watchpoint_all {mi_mode type} {
     upvar srcdir srcdir
     upvar subdir subdir
     upvar binfile binfile
+    global skip_hw_watchpoint_tests_p
 
-    if {$type == "hw" && [target_info exists gdb,no_hardware_watchpoints] } {
+    if {$type == "hw" && $skip_hw_watchpoint_tests_p } {
        return
     }
 
index 583408e10af62f2a110ce53396c6143e1ec5fb6d..0451562f09b42bb8203921e5c6aa7b0aa04abecc 100644 (file)
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing breakpoints to Python.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 load_lib gdb-python.exp
 
 standard_testfile
@@ -275,12 +283,13 @@ proc_with_prefix test_hardware_breakpoints { } {
 
 proc_with_prefix test_watchpoints { } {
     global srcfile testfile hex decimal
+    global skip_hw_watchpoint_tests_p
 
     # Start with a fresh gdb.
     clean_restart ${testfile}
 
     # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
+    if {$skip_hw_watchpoint_tests_p} {
        gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
 
@@ -303,7 +312,7 @@ proc_with_prefix test_bkpt_internal { } {
     clean_restart ${testfile}
 
     # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
+    if {$skip_hw_watchpoint_tests_p} {
        gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
     if ![runto_main] then {
@@ -350,7 +359,7 @@ proc_with_prefix test_bkpt_eval_funcs { } {
     clean_restart ${testfile}
 
     # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
+    if {$skip_hw_watchpoint_tests_p} {
        gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
     if ![runto_main] then {
index 0ee78ae934308aeaf47aa3c12653b3ca0610b455..d3547496d1db8a720767e1ab8d3258dec659b32a 100644 (file)
 
 # Test case for forgotten hw-watchpoints after fork()-off of a process.
 
+# The skip_hw_watchpoint_tests checks if watchpoints are supported by the
+# processor.  On PowerPC, the check runs a small test program under gdb
+# to determine if the Power processor supports HW watchpoints.  The check
+# must be done before starting the test so as to not disrupt the execution
+# of the actual test.
+
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
+
 set testfile watchpoint-fork
 
 # Set DEBUG to 0 or 1 in sources
 set debug 0
 
 proc test {type symbol} {
+    global skip_hw_watchpoint_tests_p
     global debug
     with_test_prefix "$type" {
        global testfile subdir srcdir gdb_prompt
@@ -41,7 +50,7 @@ proc test {type symbol} {
 
            clean_restart $executable
 
-           if [target_info exists gdb,no_hardware_watchpoints] {
+           if {$skip_hw_watchpoint_tests_p} {
                # The software watchpoint functionality is in GDB an unrelated test.
                gdb_test_no_output "set can-use-hw-watchpoints 0"
                # Software watchpoints can be quite slow on remote targets
@@ -93,7 +102,7 @@ proc test {type symbol} {
 
        # threads
 
-       if [target_info exists gdb,no_hardware_watchpoints] {
+       if {$skip_hw_watchpoint_tests_p} {
            # Watchpoint hits would get detected in unexpected threads.
            return
        }