diff --git a/gdb/testsuite/gdb.base/break-idempotent.exp b/gdb/testsuite/gdb.base/break-idempotent.exp
index c5dae96..ef7db22 100644
--- a/gdb/testsuite/gdb.base/break-idempotent.exp
+++ b/gdb/testsuite/gdb.base/break-idempotent.exp
@@ -107,6 +107,13 @@ proc set_breakpoint { break_command } {
 	    -re "Could not insert hardware watchpoint.*$gdb_prompt $" {
 		unsupported $test
 	    }
+	    -re "Expression cannot be implemented with read/access watchpoint..*$gdb_prompt $" {
+		if { $break_command == "watch" } {
+		    fail $test
+		} else {
+		    unsupported $test
+		}
+	    }
 	    -re "atchpoint \[0-9\]+: global\r\n$gdb_prompt $" {
 		pass $test
 	    }
diff --git a/gdb/testsuite/gdb.base/watch-read.exp b/gdb/testsuite/gdb.base/watch-read.exp
index ddba14e..4bf9a9e 100644
--- a/gdb/testsuite/gdb.base/watch-read.exp
+++ b/gdb/testsuite/gdb.base/watch-read.exp
@@ -42,10 +42,10 @@ set read_line [gdb_get_line_number "read line" $srcfile]
 
 # Test running to a read of `global', with a read watchpoint set
 # watching it.
-
-gdb_test "rwatch global" \
-    "Hardware read watchpoint .*: global" \
-    "set hardware read watchpoint on global variable"
+if { ![gdb_read_access_watchpoint "rwatch" "global" \
+	   "set hardware read watchpoint on global variable"] } {
+    return
+}
 
 # The first read is on entry to the loop.
 
diff --git a/gdb/testsuite/gdb.base/watch_thread_num.exp b/gdb/testsuite/gdb.base/watch_thread_num.exp
index d559f22..1995e5d 100644
--- a/gdb/testsuite/gdb.base/watch_thread_num.exp
+++ b/gdb/testsuite/gdb.base/watch_thread_num.exp
@@ -71,9 +71,10 @@ delete_breakpoints
 # simultaneously, on targets with continuable watchpoints, such as
 # x86.  See PR breakpoints/10116.
 
-gdb_test "awatch shared_var thread $thread_num" \
-    "Hardware access \\(read/write\\) watchpoint .*: shared_var.*" \
-    "Watchpoint on shared variable"
+if { ![gdb_read_access_watchpoint "awatch" "shared_var thread $thread_num" \
+	   "Watchpoint on shared variable"] } {
+    return
+}
 
 gdb_test "info breakpoint \$bpnum" \
     "stop only in thread $thread_num" \
diff --git a/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp
index 7ae76e0..d0aa2b9 100644
--- a/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp
+++ b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp
@@ -27,7 +27,9 @@ if ![runto_main] {
     return -1
 }
 
-gdb_test "rwatch watchee"
+if { ![gdb_read_access_watchpoint "rwatch" "watchee" "rwatch watchee"] } {
+    return
+}
 
 gdb_breakpoint [gdb_get_line_number "dummy = 2"]
 
diff --git a/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp b/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp
index abe81d6..d9a7cee 100644
--- a/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp
+++ b/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp
@@ -106,6 +106,9 @@ foreach cmd {"watch" "awatch" "rwatch"} {
 	-re "Target does not support.*$gdb_prompt $" {
 	    unsupported $test
 	}
+	-re "Expression cannot be implemented with read/access watchpoint..*$gdb_prompt $" {
+	    unsupported $test
+	}
 	-re "$gdb_prompt $" {
 	    pass $test
 	    lappend cmds $cmd
diff --git a/gdb/testsuite/gdb.multi/watchpoint-multi.exp b/gdb/testsuite/gdb.multi/watchpoint-multi.exp
index dcf2f1b..7cd437f 100644
--- a/gdb/testsuite/gdb.multi/watchpoint-multi.exp
+++ b/gdb/testsuite/gdb.multi/watchpoint-multi.exp
@@ -60,9 +60,9 @@ 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" \
-    "awatch c on inferior 2"
+if { ![gdb_read_access_watchpoint "awatch" "c" "awatch c on inferior 2"] } {
+    return
+}
 
 gdb_breakpoint "marker_exit"
 
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index f1616e3..1448fba 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -455,6 +455,31 @@ proc gdb_breakpoint { function args } {
     return 1
 }    
 
+# Insert read/access watchpoint on location LOC.  TYPE is either rwatch
+# or awatch.  Emit PASS, FAIL or UNSUPPORTED in test summary.  Return 1
+# for success, 0 for failure.
+
+proc gdb_read_access_watchpoint { type loc message } {
+    global gdb_prompt
+
+    gdb_test_multiple "$type $loc" $message {
+	-re "Target does not support this type of hardware watchpoint\\.\r\n$gdb_prompt $" {
+	    unsupported $message
+	}
+	-re "Could not insert hardware watchpoint.*$gdb_prompt $" {
+	    unsupported $message
+	}
+	-re "Expression cannot be implemented with read/access watchpoint..*$gdb_prompt $" {
+	    unsupported $message
+	}
+	-re "Hardware .* watchpoint .*: .*\r\n$gdb_prompt $" {
+	    pass $message
+	    return 1
+	}
+    }
+    return 0;
+}
+
 # Set breakpoint at function and run gdb until it breaks there.
 # Since this is the only breakpoint that will be set, if it stops
 # at a breakpoint, we will assume it is the one we want.  We can't
