124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanBase.h ----------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ThreadPlanFundamental_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ThreadPlanFundamental_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
172bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham#include "lldb/Target/Process.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Thread.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlan.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  Base thread plans:
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  This is the generic version of the bottom most plan on the plan stack.  It should
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  be able to handle generic breakpoint hitting, and signals and exceptions.
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ThreadPlanBase : public ThreadPlan
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
322bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Inghamfriend class Process;  // RunThreadPlan manages "stopper" base plans.
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~ThreadPlanBase ();
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void GetDescription (Stream *s, lldb::DescriptionLevel level);
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool ValidatePlan (Stream *error);
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool ShouldStop (Event *event_ptr);
397c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    virtual Vote ShouldReportStop (Event *event_ptr);
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool StopOthers ();
41745ac7a5826fe7c392007941a4046bfb1a8dff81Jim Ingham    virtual lldb::StateType GetPlanRunState ();
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool WillStop ();
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool MischiefManaged ();
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool OkayToDiscard()
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return false;
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
502bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham    virtual bool
512bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham    IsBasePlan()
522bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham    {
532bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham        return true;
542bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham    }
552bcbaf625afd8f521da03ddaa146e7ea7650ee38Jim Ingham
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
577c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    virtual bool DoWillResume (lldb::StateType resume_state, bool current_plan);
587c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    virtual bool DoPlanExplainsStop (Event *event_ptr);
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanBase (Thread &thread);
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
62008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham    friend lldb::ThreadPlanSP
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Thread::QueueFundamentalPlan(bool abort_other_plans);
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (ThreadPlanBase);
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ThreadPlanFundamental_h_
72