Message ID | 1428950158-15872-1-git-send-email-lgustavo@codesourcery.com |
---|---|
State | New |
Headers | show |
Luis Machado <lgustavo@codesourcery.com> writes: Hi Luis, > +# 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 The fix looks right to me, but why don't we invoke test_watch_location and test_regular_watch twice? if [target_info exists gdb,no_hardware_watchpoints] is false, set can-use-hw-watchpoints 1, and run them. Then, "set can-use-hw-watchpoints 0" and run them again. Similar to what we are doing in gdb.base/watch-vfork.exp. In this way, we can exercise software watchpoint on targets have hardware watchpoints too.
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 >
Luis Machado <lgustavo@codesourcery.com> writes: > 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. The patch looks good to me.
On 04/28/2015 07:42 AM, Yao Qi wrote: > Luis Machado <lgustavo@codesourcery.com> writes: > >> 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. > > The patch looks good to me. > I've pushed this on too. Thanks! Luis
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