diff options
author | Jim Ingham <jingham@apple.com> | 2019-10-01 00:47:25 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2019-10-01 00:47:25 +0000 |
commit | 58c3235ee976e577ab183a3058e804f4ac1ae027 (patch) | |
tree | ca295584f2be50ea9534b189b879dd90b7e5d75d /lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py | |
parent | 3b69bcc363d7e5b518dc673203e6ff88cd2498cb (diff) | |
download | bcm5719-llvm-58c3235ee976e577ab183a3058e804f4ac1ae027.tar.gz bcm5719-llvm-58c3235ee976e577ab183a3058e804f4ac1ae027.zip |
Allow the internal-state-thread free access to the TargetAPI mutex.
It is always doing work on behalf of another thread that presumably
has the mutex, so if it is calling SB API's it should have free access
to the mutex. This is the same decision as we made earlier with the
process RunLock.
Differential Revision: https://reviews.llvm.org/D68174
llvm-svn: 373280
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py index 1383a03f464..f93559af736 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py @@ -35,3 +35,38 @@ class StepScripted(StepWithChild): def queue_child_thread_plan(self): return self.thread_plan.QueueThreadPlanForStepScripted("Steps.StepOut") + +# This plan does a step-over until a variable changes value. +class StepUntil(StepWithChild): + def __init__(self, thread_plan, dict): + self.frame = thread_plan.GetThread().frames[0] + self.target = thread_plan.GetThread().GetProcess().GetTarget() + self.value = self.frame.FindVariable("foo") + StepWithChild.__init__(self, thread_plan) + + def queue_child_thread_plan(self): + le = self.frame.GetLineEntry() + start_addr = le.GetStartAddress() + start = start_addr.GetLoadAddress(self.target) + end = le.GetEndAddress().GetLoadAddress(self.target) + print("Stepping from 0x%x to 0x%x (0x%x)"%(start, end, end - start)) + return self.thread_plan.QueueThreadPlanForStepOverRange(start_addr, + end - start) + + def should_stop(self, event): + if not self.child_thread_plan.IsPlanComplete(): + return False + + # If we've stepped out of this frame, stop. + if not self.frame.IsValid(): + return True + + if not self.value.IsValid(): + return True + + print("Got next value: %d"%(self.value.GetValueAsUnsigned())) + if not self.value.GetValueDidChange(): + self.child_thread_plan = self.queue_child_thread_plan() + return False + else: + return True |