[PATCH] Use software watchpoints if hardware watchpoints are not available when testing gdb.base/watch-bitfields.exp.

Luis Machado lgustavo@codesourcery.com
Mon Apr 27 15:41:00 GMT 2015


Ping?

On 04/13/2015 03:35 PM, Luis Machado wrote:
> There are targets GDB thinks support hardware watchpoints, but in reality they
> don't.  Though it may seem that hardware watchpoint creation was successful,
> the actual insertion of such watchpoint will fail when GDB moves the inferior.
>
> (gdb) watch -location q.a^M
> Hardware watchpoint 2: -location q.a^M
> (gdb) PASS: gdb.base/watch-bitfields.exp: -location watch against bitfields: watch -location q.a
> watch -location q.e^M
> Hardware watchpoint 3: -location q.e^M
> (gdb) PASS: gdb.base/watch-bitfields.exp: -location watch against bitfields: watch -location q.e
> print q.a^M
> $1 = 0^M
> (gdb) PASS: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.a: 0->1: print expression before
> continue^M
> Continuing.^M
> Warning:^M
> Could not insert hardware watchpoint 2.^M
> Could not insert hardware watchpoint 3.^M
> Could not insert hardware breakpoints:^M
> You may have requested too many hardware breakpoints/watchpoints.^M
> ^M
> (gdb) FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.a: 0->1: continue
>
> This leads to a number of FAILs:
>
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.a: 0->1: continue
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.a: 0->1: print expression after
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.e: 0->5: continue
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.e: 0->5: print expression after
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.a: 1->0: print expression before
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.a: 1->0: continue
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.e: 5->4: print expression before
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.e: 5->4: continue
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: q.e: 5->4: print expression after
> FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: continue until exit
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 0->4: continue
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 0->4: print expression after
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 4->10: print expression before
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 4->10: continue
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 4->10: print expression after
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 10->3: print expression before
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 10->3: continue
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 10->3: print expression after
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 3->2: print expression before
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 3->2: continue
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 3->2: print expression after
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 2->1: print expression before
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 2->1: continue
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 2->1: print expression after
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 1->0: print expression before
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: q.d + q.f + q.g: 1->0: continue
> FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: continue until exit
>
> We can avoid these errors/FAILs by checking the board data and switching to
> software watchpoints if the board does not support hardware watchpoints.
>
> Regression tested on x86-64-linux and aarch64-linux (QEMU).
>
> Ok?
>
> 2015-04-13  Luis Machado  <lgustavo@codesourcery.com>
>
> 	gdb/testsuite/ChangeLog/
> 	* gdb.base/watch-bitfields.exp: Switch to software watchpoints if
> 	the target does not support hardware watchpoints.
> ---
>   gdb/testsuite/gdb.base/watch-bitfields.exp | 5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/gdb/testsuite/gdb.base/watch-bitfields.exp b/gdb/testsuite/gdb.base/watch-bitfields.exp
> index 9d5293b..9f0192d 100644
> --- a/gdb/testsuite/gdb.base/watch-bitfields.exp
> +++ b/gdb/testsuite/gdb.base/watch-bitfields.exp
> @@ -77,5 +77,10 @@ proc test_regular_watch {} {
>       }
>   }
>
> +# Disable hardware watchpoints if the target does not support it.
> +if [target_info exists gdb,no_hardware_watchpoints] {
> +    gdb_test_no_output "set can-use-hw-watchpoints 0"
> +}
> +
>   test_watch_location
>   test_regular_watch
>



More information about the Gdb-patches mailing list