From: Yao Qi <qiyaoltc@gmail.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 3/3] Clear non-significant bits of address in watchpoint
Date: Fri, 08 Dec 2017 10:04:00 -0000 [thread overview]
Message-ID: <1512727471-30745-4-git-send-email-yao.qi@linaro.org> (raw)
In-Reply-To: <1512727471-30745-1-git-send-email-yao.qi@linaro.org>
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-01 Yao Qi <yao.qi@linaro.org>
* breakpoint.c (update_watchpoint): Call
significant_addr.
gdb/testsuite:
2017-12-01 Yao Qi <yao.qi@linaro.org>
* gdb.arch/aarch64-tagged-pointer.c (main): Update.
* gdb.arch/aarch64-tagged-pointer.exp: Add tests for watchpoint.
---
gdb/breakpoint.c | 2 +-
gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c | 1 +
gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp | 14 ++++++++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 22b3069..6570513 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -1867,7 +1867,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
loc->gdbarch = get_type_arch (value_type (v));
loc->pspace = frame_pspace;
- loc->address = addr;
+ loc->address = address_significant (loc->gdbarch, addr);
if (bitsize != 0)
{
diff --git a/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c b/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c
index 9bfe41e..5754785 100644
--- a/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c
+++ b/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c
@@ -53,4 +53,5 @@ main (void)
}
sp1->i = 8765;
+ i = 1;
}
diff --git a/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp b/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp
index fcab1b7..c08993e 100644
--- a/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp
+++ b/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp
@@ -89,3 +89,17 @@ foreach_with_prefix bptype {"hbreak" "break"} {
gdb_test "up" "\\(\*func_ptr\\) \\(\\).*" "caller is *func_ptr"
delete_breakpoints
}
+
+gdb_test "down"
+gdb_test "finish"
+# Watch on tagged pointer.
+gdb_test "watch *sp2"
+gdb_test "continue" \
+ "Continuing\\..*Hardware watchpoint \[0-9\]+.*" \
+ "run until watchpoint on s1"
+delete_breakpoints
+
+gdb_test "watch *p2"
+gdb_test "continue" \
+ "Continuing\\..*Hardware watchpoint \[0-9\]+.*" \
+ "run until watchpoint on i"
--
1.9.1
next prev parent reply other threads:[~2017-12-08 10:04 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-08 10:04 [PATCH 0/3 v3] [AArch64] Support tagged pointer Yao Qi
2017-12-08 10:04 ` [PATCH 1/3] Clear non-significant bits of address on memory access Yao Qi
2017-12-08 12:22 ` Pedro Alves
2017-12-08 15:13 ` Ulrich Weigand
2017-12-08 15:36 ` Yao Qi
2017-12-19 13:50 ` Ulrich Weigand
2017-12-19 15:41 ` Yao Qi
2017-12-19 16:15 ` Ulrich Weigand
2017-12-20 9:57 ` Yao Qi
2017-12-20 13:03 ` [pushed] Fix Cell/B.E. regression (Re: [PATCH 1/3] Clear non-significant bits of address on memory access) Ulrich Weigand
2017-12-20 13:59 ` Yao Qi
2017-12-08 10:04 ` [PATCH 2/3] Adjust breakpoint address by clearing non-significant bits Yao Qi
2017-12-08 12:22 ` Pedro Alves
2017-12-08 10:04 ` Yao Qi [this message]
2017-12-08 12:23 ` [PATCH 3/3] Clear non-significant bits of address in watchpoint Pedro Alves
2017-12-08 12:24 ` [PATCH 0/3 v3] [AArch64] Support tagged pointer Pedro Alves
2017-12-08 17:31 ` Yao Qi
2018-04-11 0:16 ` Omair Javaid
2018-04-11 0:37 ` Omair Javaid
2018-04-11 2:46 ` Simon Marchi
2018-04-11 10:14 ` Pedro Alves
2018-04-11 11:13 ` Omair Javaid
2018-04-11 11:19 ` Pedro Alves
2018-04-11 12:01 ` Omair Javaid
2018-04-11 18:27 ` Pedro Alves
2018-04-16 1:36 ` Omair Javaid
2018-04-16 22:57 ` Pedro Alves
2018-04-20 14:34 ` Omair Javaid
2018-04-20 16:13 ` Daniel Thompson
2018-04-23 7:50 ` Omair Javaid
2018-04-24 11:39 ` Pedro Alves
2018-04-24 15:44 ` Daniel Thompson
2018-04-24 11:48 ` Pedro Alves
2018-04-24 16:05 ` Daniel Thompson
2018-04-24 23:42 ` Omair Javaid
2018-04-25 0:09 ` Andrew Pinski
2018-04-25 8:04 ` Daniel Thompson
2018-04-26 8:11 ` Omair Javaid
2018-04-27 16:29 ` Daniel Thompson
2018-04-30 13:42 ` Omair Javaid
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1512727471-30745-4-git-send-email-yao.qi@linaro.org \
--to=qiyaoltc@gmail.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox