forked from OSchip/llvm-project
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:
parent
c8e7c0e5dc
commit
bef4da4a6a
|
@ -31,12 +31,18 @@ class HelloWatchLocationTestCase(TestBase):
|
|||
self.exe_name = self.testMethodName
|
||||
self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}
|
||||
|
||||
# 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()
|
||||
|
||||
# Most of the MIPS boards provide only one H/W watchpoints, and S/W
|
||||
# watchpoints are not supported yet
|
||||
@expectedFailureAll(triple=re.compile('^mips'))
|
||||
# SystemZ and PowerPC also currently supports only one H/W watchpoint
|
||||
@expectedFailureAll(archs=['powerpc64le', 's390x'])
|
||||
@skipIfDarwin
|
||||
@skipIfWindows # This test is flaky on Windows
|
||||
def test_hello_watchlocation(self):
|
||||
"""Test watching a location with '-s size' option."""
|
||||
|
@ -103,8 +109,13 @@ class HelloWatchLocationTestCase(TestBase):
|
|||
substrs=[self.violating_func])
|
||||
|
||||
# Use the '-v' option to do verbose listing of the watchpoint.
|
||||
# The hit count should now be 1.
|
||||
self.expect("watchpoint list -v",
|
||||
substrs=['hit_count = 1'])
|
||||
# The hit count should now be the same as the number of threads that
|
||||
# stopped on a watchpoint.
|
||||
threads = lldbutil.get_stopped_threads(
|
||||
self.process(), lldb.eStopReasonWatchpoint)
|
||||
|
||||
if not self.affected_by_radar_93863107():
|
||||
self.expect("watchpoint list -v",
|
||||
substrs=['hit_count = %d' % len(threads)])
|
||||
|
||||
self.runCmd("thread backtrace all")
|
||||
|
|
|
@ -15,6 +15,13 @@ class WatchLocationUsingWatchpointSetTestCase(TestBase):
|
|||
mydir = TestBase.compute_mydir(__file__)
|
||||
NO_DEBUG_INFO_TESTCASE = True
|
||||
|
||||
# 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()
|
||||
|
||||
def setUp(self):
|
||||
# Call super's setUp().
|
||||
TestBase.setUp(self)
|
||||
|
@ -102,7 +109,9 @@ class WatchLocationUsingWatchpointSetTestCase(TestBase):
|
|||
# stopped on a watchpoint.
|
||||
threads = lldbutil.get_stopped_threads(
|
||||
self.process(), lldb.eStopReasonWatchpoint)
|
||||
self.expect("watchpoint list -v",
|
||||
substrs=['hit_count = %d' % len(threads)])
|
||||
|
||||
if not self.affected_by_radar_93863107():
|
||||
self.expect("watchpoint list -v",
|
||||
substrs=['hit_count = %d' % len(threads)])
|
||||
|
||||
self.runCmd("thread backtrace all")
|
||||
|
|
|
@ -15,7 +15,7 @@ class ConcurrentManyWatchpoints(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
@skipIfOutOfTreeDebugserver
|
||||
def test(self):
|
||||
|
|
|
@ -18,7 +18,7 @@ class ConcurrentNWatchNBreak(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test with 5 watchpoint and breakpoint threads."""
|
||||
|
|
|
@ -19,7 +19,7 @@ class ConcurrentSignalNWatchNBreak(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test one signal thread with 5 watchpoint and breakpoint threads."""
|
||||
|
|
|
@ -16,7 +16,7 @@ class ConcurrentSignalWatch(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test a watchpoint and a signal in multiple threads."""
|
||||
|
|
|
@ -17,7 +17,7 @@ class ConcurrentSignalWatchBreak(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test a signal/watchpoint/breakpoint in multiple threads."""
|
||||
|
|
|
@ -16,7 +16,7 @@ class ConcurrentTwoWatchpointThreads(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test two threads that trigger a watchpoint. """
|
||||
|
|
|
@ -16,7 +16,7 @@ class ConcurrentTwoWatchpointsOneBreakpoint(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test two threads that trigger a watchpoint and one breakpoint thread. """
|
||||
|
|
|
@ -16,7 +16,7 @@ class ConcurrentTwoWatchpointsOneDelayBreakpoint(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test two threads that trigger a watchpoint and one (1 second delay) breakpoint thread. """
|
||||
|
|
|
@ -17,7 +17,7 @@ class ConcurrentTwoWatchpointsOneSignal(ConcurrentEventsBase):
|
|||
@skipIf(
|
||||
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
|
||||
archs=['arm64', 'arm64e', 'arm64_32', 'arm'],
|
||||
bugnumber="rdar://81811539")
|
||||
bugnumber="rdar://93863107")
|
||||
@add_test_categories(["watchpoint"])
|
||||
def test(self):
|
||||
"""Test two threads that trigger a watchpoint and one signal thread. """
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue