aboutsummaryrefslogtreecommitdiff
path: root/gdb/target-float.c
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2017-12-08 17:27:03 +0000
committerYao Qi <yao.qi@linaro.org>2017-12-08 17:27:03 +0000
commitf17d9474776e50ae47aa71c52211ea6e21adf5d5 (patch)
tree49a49fa97030b74de9365cd37690a54d78e2f6f0 /gdb/target-float.c
parenta0de8c21baf46c40ed8e62faef5f750b1e5453ea (diff)
downloadgdb-f17d9474776e50ae47aa71c52211ea6e21adf5d5.zip
gdb-f17d9474776e50ae47aa71c52211ea6e21adf5d5.tar.gz
gdb-f17d9474776e50ae47aa71c52211ea6e21adf5d5.tar.bz2
Clear non-significant bits of address in watchpoint
Nowadays, GDB can't set watchpoint on tagged address on AArch64, (gdb) p p2 $1 = (int *) 0xf000fffffffff474 (gdb) watch *((int *) 0xf000fffffffff474) Hardware watchpoint 2: *((int *) 0xf000fffffffff474) (gdb) c Continuing. main () at binutils-gdb/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c:45 45 void (*func_ptr) (void) = foo; Unexpected error setting hardware debug registers This patch is about setting watchpoint on a tagged address. Unlike breakpoint, watchpoint record the expression rather than the address, and when a watchpoint is fired, GDB checks the expression value changed instead of matching address, so we can mask the watchpoint address by getting rid of non-significant bits of address. gdb: 2017-12-08 Yao Qi <yao.qi@linaro.org> * breakpoint.c (update_watchpoint): Call address_significant. gdb/testsuite: 2017-12-08 Yao Qi <yao.qi@linaro.org> * gdb.arch/aarch64-tagged-pointer.c (main): Update. * gdb.arch/aarch64-tagged-pointer.exp: Add tests for watchpoint.
Diffstat (limited to 'gdb/target-float.c')
0 files changed, 0 insertions, 0 deletions