Skip testing of watchpoint hit-count/ignore-count on multithreaded

Skip all watchpoint hit-count/ignore-count tests for multithreaded
API tests for now on arm64 Darwin.

On AArch64, insns that trigger a WP are rolled back and we are
notified.  lldb needs to disable the WP, insn step, re-enable it,
then report it to the user.  lldb only does this full step action
for the "selected thread", and so when a program stops with
multiple threads hitting a stop reason, some of them watchpoints,
any non-selected-thread will not be completed in this way.  But
all threads with the initial watchpoint exception will have their
hit-count/ignore-counts updated.  When we resume execution, the
other threads sitting at the instruction will again execute &
trigger the WP exceptoin again, repeating until we've gone through
all of the threads.

This bug is being tracked in llvm.org/pr49433 and inside apple
in rdar://93863107
This commit is contained in:
Jason Molenda
2022-05-25 16:05:16 -07:00
parent c8e7c0e5dc
commit bef4da4a6a
12 changed files with 44 additions and 16 deletions

View File

@@ -25,6 +25,13 @@ class WatchpointIgnoreCountTestCase(TestBase):
self.line = line_number(
self.source, '// Set break point at this line.')
# on arm64 targets, lldb has incorrect hit-count / ignore-counts
# for watchpoints when they are hit with multiple threads at
# the same time. Tracked as llvm.org/pr49433
# or rdar://93863107 inside Apple.
def affected_by_radar_93863107(self):
return (self.getArchitecture() in ['arm64', 'arm64e']) and self.platformIsDarwin()
# Read-write watchpoints not supported on SystemZ
@expectedFailureAll(archs=['s390x'])
def test_set_watch_ignore_count(self):
@@ -87,5 +94,6 @@ class WatchpointIgnoreCountTestCase(TestBase):
# Verify some vital statistics.
self.assertTrue(watchpoint)
self.assertEqual(watchpoint.GetWatchSize(), 4)
self.assertEqual(watchpoint.GetHitCount(), 2)
if not self.affected_by_radar_93863107():
self.assertEqual(watchpoint.GetHitCount(), 2)
print(watchpoint)