diff options
Diffstat (limited to 'lldb/source/Target/ThreadPlanContinue.cpp')
-rw-r--r-- | lldb/source/Target/ThreadPlanContinue.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/lldb/source/Target/ThreadPlanContinue.cpp b/lldb/source/Target/ThreadPlanContinue.cpp new file mode 100644 index 00000000000..63d8a3323d0 --- /dev/null +++ b/lldb/source/Target/ThreadPlanContinue.cpp @@ -0,0 +1,120 @@ +//===-- ThreadPlanContinue.cpp ----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Target/ThreadPlanContinue.h" + +// C Includes +// C++ Includes +// Other libraries and framework includes +// Project includes +#include "lldb/lldb-private-log.h" +#include "lldb/Core/Log.h" +#include "lldb/Core/Stream.h" + +using namespace lldb; +using namespace lldb_private; + +//---------------------------------------------------------------------- +// ThreadPlanContinue: Continue plan +//---------------------------------------------------------------------- + +ThreadPlanContinue::ThreadPlanContinue (Thread &thread, bool stop_others, Vote stop_vote, Vote run_vote, bool immediate) : + ThreadPlan ("Continue after previous plan", thread, stop_vote, run_vote), + m_stop_others (stop_others), + m_did_run (false), + m_immediate (immediate) +{ +} + +ThreadPlanContinue::~ThreadPlanContinue () +{ +} + +void +ThreadPlanContinue::GetDescription (Stream *s, lldb::DescriptionLevel level) +{ + if (level == lldb::eDescriptionLevelBrief) + s->Printf ("continue"); + else + { + s->Printf ("Continue from the previous plan"); + } +} + +bool +ThreadPlanContinue::ValidatePlan (Stream *error) +{ + // Since we read the instruction we're stepping over from the thread, + // this plan will always work. + return true; +} + +bool +ThreadPlanContinue::PlanExplainsStop () +{ + return true; +} + +bool +ThreadPlanContinue::ShouldStop (Event *event_ptr) +{ + return false; +} + +bool +ThreadPlanContinue::IsImmediate () const +{ + return m_immediate; + return false; +} + +bool +ThreadPlanContinue::StopOthers () +{ + return m_stop_others; +} + +StateType +ThreadPlanContinue::RunState () +{ + return eStateRunning; +} + +bool +ThreadPlanContinue::WillResume (StateType resume_state, bool current_plan) +{ + ThreadPlan::WillResume (resume_state, current_plan); + if (current_plan) + { + m_did_run = true; + } + return true; +} + +bool +ThreadPlanContinue::WillStop () +{ + return true; +} + +bool +ThreadPlanContinue::MischiefManaged () +{ + Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP); + + if (m_did_run) + { + if (log) + log->Printf("Completed continue plan."); + ThreadPlan::MischiefManaged (); + return true; + } + else + return false; +} |