2012-01-27 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Fri, 27 Jan 2012 13:58:46 +0000 (13:58 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 27 Jan 2012 13:58:46 +0000 (13:58 +0000)
* gdb.base/watchpoint.exp (test_watchpoint_in_big_blob): Expect
"You may have requested too many hardware
breakpoints/watchpoints".

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/watchpoint.exp

index 180d508484856db714881af255686718a2c779f0..278bf86ff4ba8c420faf91b0baf2a5ab932ff874 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-27  Pedro Alves  <palves@redhat.com>
+
+       * gdb.base/watchpoint.exp (test_watchpoint_in_big_blob): Expect
+       "You may have requested too many hardware
+       breakpoints/watchpoints".
+
 2012-01-27  Pedro Alves  <palves@redhat.com>
 
        * gdb.base/watchpoint.exp (maybe_clean_restart)
index 1da6f9b839a5481396fb4af0bb9be55ab033135f..a4f30b39268f1dd1df01b4c91645c43968353b23 100644 (file)
@@ -769,8 +769,44 @@ proc test_inaccessible_watchpoint {} {
 proc test_watchpoint_in_big_blob {} {
     global gdb_prompt
 
-    gdb_test "watch buf" ".*atchpoint \[0-9\]+: buf"
-    gdb_test "cont" "Continuing.*atchpoint \[0-9\]+: buf\r\n\r\nOld value = .*testte\".*" "watchpoint on buf hit"
+    # On native targets where we do hardware resource accounting, this
+    # may end up as a software watchpoint.
+    set ok 0
+    set test "watch buf"
+    gdb_test_multiple "watch buf" $test {
+       -re "Hardware watchpoint \[0-9\]+: buf.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
+           # This may happen with remote targets (where we don't do
+           # resource accounting) that support hardware watchpoints,
+           # when breakpoint always-inserted is on.  The watchpoint
+           # was too large, for example.  If GDB is ever adjusted to
+           # downgrade the watchpoint automatically in this case,
+           # this match should be removed.  Note the breakpoint has
+           # been created, and is in the list, so it needs deleting.
+           pass $test
+       }
+       -re ".*atchpoint \[0-9\]+: buf.*$gdb_prompt $" {
+           pass $test
+           set ok 1
+       }
+    }
+
+    if { $ok } {
+       set test "watchpoint on buf hit"
+       gdb_test_multiple "cont" $test {
+           -re "Continuing.*atchpoint \[0-9\]+: buf\r\n\r\nOld value = .*testte\".*$gdb_prompt $" {
+               pass $test
+           }
+           -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
+               # This may happen with remote targets that support
+               # hardware watchpoints.  We only find out the
+               # watchpoint was too large, for example, at insert
+               # time.  If GDB is ever adjusted to downgrade the
+               # watchpoint automatically in this case, this match
+               # should be removed.
+               pass $test
+           }
+       }
+    }
 
     gdb_test_no_output "delete \$bpnum" "delete watch buf"
 }