Index: gdb/testsuite/gdb.base/hbreak.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/hbreak.exp,v
retrieving revision 1.4
diff -u -p -r1.4 hbreak.exp
--- gdb/testsuite/gdb.base/hbreak.exp	1 Jan 2011 15:33:42 -0000	1.4
+++ gdb/testsuite/gdb.base/hbreak.exp	16 Feb 2011 18:30:03 -0000
@@ -13,12 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set.
-if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]
-     && ![istarget "ia64-*-*"])
-    || [target_info exists gdb,no_hardware_watchpoints]} then {
-    verbose "Skipping hbreak test."
-    return
+if {[skip_hw_breakpoint_tests]} {
+    return 0
 }
 
 set test hbreak
Index: gdb/testsuite/gdb.base/pr11022.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/pr11022.exp,v
retrieving revision 1.4
diff -u -p -r1.4 pr11022.exp
--- gdb/testsuite/gdb.base/pr11022.exp	1 Jan 2011 15:33:42 -0000	1.4
+++ gdb/testsuite/gdb.base/pr11022.exp	16 Feb 2011 18:30:03 -0000
@@ -17,10 +17,8 @@ if $tracelevel then {
     strace $tracelevel
 }
 
-if [target_info exists gdb,no_hardware_watchpoints] {
-    # This test requires HW watchpoints
-    untested pr11022.exp
-    return -1
+if {[skip_hw_watchpoint_tests]} {
+    return 0
 }
 
 set testfile "pr11022"
Index: gdb/testsuite/gdb.base/watch-read.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/watch-read.exp,v
retrieving revision 1.2
diff -u -p -r1.2 watch-read.exp
--- gdb/testsuite/gdb.base/watch-read.exp	1 Jan 2011 15:33:43 -0000	1.2
+++ gdb/testsuite/gdb.base/watch-read.exp	16 Feb 2011 18:30:03 -0000
@@ -27,9 +27,8 @@
 set testfile "watch-read"
 set srcfile ${testfile}.c
 
-if { [target_info exists gdb,no_hardware_watchpoints] } {
-    untested ${testfile}.exp
-    return -1
+if {[skip_hw_watchpoint_access_tests]} {
+    return 0
 }
 
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
Index: gdb/testsuite/gdb.base/watch_thread_num.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/watch_thread_num.exp,v
retrieving revision 1.13
diff -u -p -r1.13 watch_thread_num.exp
--- gdb/testsuite/gdb.base/watch_thread_num.exp	1 Jan 2011 15:33:43 -0000	1.13
+++ gdb/testsuite/gdb.base/watch_thread_num.exp	16 Feb 2011 18:30:03 -0000
@@ -25,8 +25,8 @@ if $tracelevel then {
 
 # This test verifies that a watchpoint is detected in the proper thread
 # so the test is only meaningful on a system with hardware watchpoints.
-if [target_info exists gdb,no_hardware_watchpoints] {
-    return 0;
+if {[skip_hw_watchpoint_tests]} {
+    return 0
 }
 
 set testfile watch_thread_num
Index: gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp,v
retrieving revision 1.4
diff -u -p -r1.4 watchpoint-hw-hit-once.exp
--- gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp	1 Jan 2011 15:33:43 -0000	1.4
+++ gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp	16 Feb 2011 18:30:03 -0000
@@ -13,12 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set.
-if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]
-     && ![istarget "ia64-*-*"])
-    || [target_info exists gdb,no_hardware_watchpoints]} then {
-    verbose "Skipping watchpoint-hw-hit-once test."
-    return
+if {[skip_hw_watchpoint_access_tests]} {
+    return 0
 }
 
 set test watchpoint-hw-hit-once
Index: gdb/testsuite/gdb.base/watchpoint-hw.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/watchpoint-hw.exp,v
retrieving revision 1.4
diff -u -p -r1.4 watchpoint-hw.exp
--- gdb/testsuite/gdb.base/watchpoint-hw.exp	1 Jan 2011 15:33:43 -0000	1.4
+++ gdb/testsuite/gdb.base/watchpoint-hw.exp	16 Feb 2011 18:30:03 -0000
@@ -13,12 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set.
-if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]
-     && ![istarget "ia64-*-*"] && ![istarget "s390*-*-*"])
-    || [target_info exists gdb,no_hardware_watchpoints]} then {
-    verbose "Skipping watchpoint-hw test."
-    return
+
+if {[skip_hw_watchpoint_tests]} {
+    return 0
 }
 
 set testfile watchpoint-hw
Index: gdb/testsuite/gdb.base/watchpoint.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/watchpoint.exp,v
retrieving revision 1.34
diff -u -p -r1.34 watchpoint.exp
--- gdb/testsuite/gdb.base/watchpoint.exp	1 Jan 2011 15:33:43 -0000	1.34
+++ gdb/testsuite/gdb.base/watchpoint.exp	16 Feb 2011 18:30:04 -0000
@@ -688,10 +688,10 @@ proc test_inaccessible_watchpoint {} {
 	    "$watchpoint_msg \[0-9\]+: \-location: \\*global_ptr"
 	delete_breakpoints
 
-	# This step requires two HW watchpoints.  Since PPC Server only has
-	# a single one, it will use a SW watchpoint in this case.
-	if [istarget powerpc64-*] {
-	    set watchpoint_msg "Watchpoint"
+	# This step requires two HW watchpoints.  Since some platforms only
+	# have a single one, accept either SW or HW watchpoint in this case.
+	if {[skip_hw_watchpoint_multi_tests]} {
+	    set watchpoint_msg "(Watchpoint|Hardware watchpoint)"
 	}
 
 	gdb_test "watch *global_ptr" "$watchpoint_msg \[0-9\]+: \\\*global_ptr"
Index: gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp,v
retrieving revision 1.5
diff -u -p -r1.5 local-watch-wrong-thread.exp
--- gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp	1 Jan 2011 15:33:50 -0000	1.5
+++ gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp	16 Feb 2011 18:30:04 -0000
@@ -19,8 +19,8 @@
 # thread other than the thread the local watchpoint was set in stops
 # for a breakpoint.
 
-if [target_info exists gdb,no_hardware_watchpoints] {
-    return 0;
+if {[skip_hw_watchpoint_multi_tests]} {
+    return 0
 }
 
 set testfile "local-watch-wrong-thread"
Index: gdb/testsuite/gdb.threads/watchthreads-reorder.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.threads/watchthreads-reorder.exp,v
retrieving revision 1.4
diff -u -p -r1.4 watchthreads-reorder.exp
--- gdb/testsuite/gdb.threads/watchthreads-reorder.exp	1 Jan 2011 15:33:50 -0000	1.4
+++ gdb/testsuite/gdb.threads/watchthreads-reorder.exp	16 Feb 2011 18:30:04 -0000
@@ -25,9 +25,8 @@
 # could be assigned during continuation of a thread with pending SIGTRAP to the
 # different/new watchpoint, just based on the watchpoint/debug register number.
 
-if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]
-     && ![istarget "ia64-*-*"])
-    || [target_info exists gdb,no_hardware_watchpoints]
+if {[skip_hw_watchpoint_access_tests]
+    || [skip_hw_watchpoint_multi_tests]
     || ![istarget *-*-linux*]} {
     return 0
 }
Index: gdb/testsuite/gdb.threads/watchthreads.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.threads/watchthreads.exp,v
retrieving revision 1.14
diff -u -p -r1.14 watchthreads.exp
--- gdb/testsuite/gdb.threads/watchthreads.exp	1 Jan 2011 15:33:50 -0000	1.14
+++ gdb/testsuite/gdb.threads/watchthreads.exp	16 Feb 2011 18:30:04 -0000
@@ -24,8 +24,8 @@ if $tracelevel {
 
 # This test verifies that a watchpoint is detected in the proper thread
 # so the test is only meaningful on a system with hardware watchpoints.
-if [target_info exists gdb,no_hardware_watchpoints] {
-    return 0;
+if {[skip_hw_watchpoint_multi_tests]} {
+    return 0
 }
 
 proc target_no_stopped_data { } {
Index: gdb/testsuite/gdb.threads/watchthreads2.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.threads/watchthreads2.exp,v
retrieving revision 1.6
diff -u -p -r1.6 watchthreads2.exp
--- gdb/testsuite/gdb.threads/watchthreads2.exp	1 Jan 2011 15:33:50 -0000	1.6
+++ gdb/testsuite/gdb.threads/watchthreads2.exp	16 Feb 2011 18:30:04 -0000
@@ -28,8 +28,8 @@ if $tracelevel {
 
 # This test verifies that a watchpoint is detected in the proper thread
 # so the test is only meaningful on a system with hardware watchpoints.
-if [target_info exists gdb,no_hardware_watchpoints] {
-    return 0;
+if {[skip_hw_watchpoint_tests]} {
+    return 0
 }
 
 set testfile "watchthreads2"
Index: gdb/testsuite/lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.162
diff -u -p -r1.162 gdb.exp
--- gdb/testsuite/lib/gdb.exp	1 Jan 2011 15:33:51 -0000	1.162
+++ gdb/testsuite/lib/gdb.exp	16 Feb 2011 18:30:05 -0000
@@ -1782,6 +1782,76 @@ proc skip_inline_var_tests {} {
     return 0
 }
 
+# Return a 1 if we should skip tests that require hardware breakpoints
+
+proc skip_hw_breakpoint_tests {} {
+    # Skip tests if requested by the board (note that no_hardware_watchpoints
+    # disables both watchpoints and breakpoints)
+    if { [target_info exists gdb,no_hardware_watchpoints]} {
+	return 1
+    }
+
+    # These targets support hardware breakpoints natively
+    if { [istarget "i?86-*-*"] 
+	 || [istarget "x86_64-*-*"]
+	 || [istarget "ia64-*-*"] } {
+	return 0
+    }
+
+    return 1
+}
+
+# Return a 1 if we should skip tests that require hardware watchpoints
+
+proc skip_hw_watchpoint_tests {} {
+    # Skip tests if requested by the board
+    if { [target_info exists gdb,no_hardware_watchpoints]} {
+	return 1
+    }
+
+    # These targets support hardware watchpoints natively
+    if { [istarget "i?86-*-*"] 
+	 || [istarget "x86_64-*-*"]
+	 || [istarget "ia64-*-*"] 
+	 || [istarget "powerpc*-*-linux*"]
+	 || [istarget "s390*-*-*"] } {
+	return 0
+    }
+
+    return 1
+}
+
+# Return a 1 if we should skip tests that require *multiple* hardware
+# watchpoints to be active at the same time
+
+proc skip_hw_watchpoint_multi_tests {} {
+    if { [skip_hw_watchpoint_tests] } {
+	return 1
+    }
+
+    # These targets support just a single hardware watchpoint
+    if { [istarget "powerpc*-*-linux*"] } {
+	return 1
+    }
+
+    return 0
+}
+
+# Return a 1 if we should skip tests that require read/access watchpoints
+
+proc skip_hw_watchpoint_access_tests {} {
+    if { [skip_hw_watchpoint_tests] } {
+	return 1
+    }
+
+    # These targets support just write watchpoints
+    if { [istarget "s390*-*-*"] } {
+	return 1
+    }
+
+    return 0
+}
+
 set compiler_info		"unknown"
 set gcc_compiled		0
 set hp_cc_compiler		0
