Add AArch64 MASK watchpoint support in debugserver

Add suport for MASK style watchpoints on AArch64 in debugserver
on Darwin systems, for watching power-of-2 sized memory ranges.
More work needed in lldb before this can be exposed to the user
(because they will often try watching memory ranges that are not
exactly power-of-2 in size/alignment) but this is the first part
of adding that capability.

Differential Revision: https://reviews.llvm.org/D149792
rdar://108233371
This commit is contained in:
Jason Molenda
2023-05-04 13:23:51 -07:00
parent 4fac08ff1d
commit 2e16e41b28
6 changed files with 217 additions and 39 deletions

View File

@@ -129,10 +129,15 @@ class TargetWatchAddressAPITestCase(TestBase):
"pointee",
value.GetValueAsUnsigned(0),
value.GetType().GetPointeeType())
# Watch for write to *g_char_ptr.
error = lldb.SBError()
watchpoint = target.WatchAddress(
value.GetValueAsUnsigned(), 365, False, True, error)
self.assertFalse(watchpoint)
self.expect(error.GetCString(), exe=False,
substrs=['watch size of %d is not supported' % 365])
# debugserver on Darwin AArch64 systems can watch large regions
# of memory via https://reviews.llvm.org/D149792 , don't run this
# test there.
if self.getArchitecture() not in ['arm64', 'arm64e', 'arm64_32']:
# Watch for write to *g_char_ptr.
error = lldb.SBError()
watchpoint = target.WatchAddress(
value.GetValueAsUnsigned(), 365, False, True, error)
self.assertFalse(watchpoint)
self.expect(error.GetCString(), exe=False,
substrs=['watch size of %d is not supported' % 365])