summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp')
-rw-r--r--lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp b/lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp
index 00a19804b2c..ff4fee72a3a 100644
--- a/lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp
+++ b/lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp
@@ -34,7 +34,8 @@ ThreadPlanStepOverBreakpoint::ThreadPlanStepOverBreakpoint (Thread &thread) :
// first in the thread plan stack when stepping
// over a breakpoint
m_breakpoint_addr (LLDB_INVALID_ADDRESS),
- m_auto_continue(false)
+ m_auto_continue(false),
+ m_reenabled_breakpoint_site (false)
{
m_breakpoint_addr = m_thread.GetRegisterContext()->GetPC();
@@ -105,9 +106,7 @@ ThreadPlanStepOverBreakpoint::DoWillResume (StateType resume_state, bool current
bool
ThreadPlanStepOverBreakpoint::WillStop ()
{
- BreakpointSiteSP bp_site_sp (m_thread.GetProcess()->GetBreakpointSiteList().FindByAddress (m_breakpoint_addr));
- if (bp_site_sp)
- m_thread.GetProcess()->EnableBreakpointSite (bp_site_sp.get());
+ ReenableBreakpointSite ();
return true;
}
@@ -128,13 +127,30 @@ ThreadPlanStepOverBreakpoint::MischiefManaged ()
if (log)
log->Printf("Completed step over breakpoint plan.");
// Otherwise, re-enable the breakpoint we were stepping over, and we're done.
+ ReenableBreakpointSite ();
+ ThreadPlan::MischiefManaged ();
+ return true;
+ }
+}
+
+void
+ThreadPlanStepOverBreakpoint::ReenableBreakpointSite ()
+{
+ if (!m_reenabled_breakpoint_site)
+ {
+ m_reenabled_breakpoint_site = true;
BreakpointSiteSP bp_site_sp (m_thread.GetProcess()->GetBreakpointSiteList().FindByAddress (m_breakpoint_addr));
if (bp_site_sp)
+ {
m_thread.GetProcess()->EnableBreakpointSite (bp_site_sp.get());
- ThreadPlan::MischiefManaged ();
- return true;
+ }
}
}
+void
+ThreadPlanStepOverBreakpoint::ThreadDestroyed ()
+{
+ ReenableBreakpointSite ();
+}
void
ThreadPlanStepOverBreakpoint::SetAutoContinue (bool do_it)
OpenPOWER on IntegriCloud