124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanStepInstruction.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_ThreadPlanStepInstruction_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ThreadPlanStepInstruction_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Thread.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlan.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ThreadPlanStepInstruction : public ThreadPlan
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~ThreadPlanStepInstruction ();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void GetDescription (Stream *s, lldb::DescriptionLevel level);
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool ValidatePlan (Stream *error);
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool ShouldStop (Event *event_ptr);
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool StopOthers ();
32745ac7a5826fe7c392007941a4046bfb1a8dff81Jim Ingham    virtual lldb::StateType GetPlanRunState ();
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool WillStop ();
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool MischiefManaged ();
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
377c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    virtual bool DoPlanExplainsStop (Event *event_ptr);
387c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanStepInstruction (Thread &thread,
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                               bool step_over,
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                               bool stop_others,
42b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                               Vote stop_vote,
43b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                               Vote run_vote);
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
46008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham    friend lldb::ThreadPlanSP
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Thread::QueueThreadPlanForStepSingleInstruction (bool step_over, bool abort_other_plans, bool stop_other_threads);
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t m_instruction_addr;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_stop_other_threads;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_step_over;
52454916c0169502e4c8cf0f27ab61923f8b533dd0Jim Ingham    // These two are used only for the step over case.
536bea559652079732f2481054aace855a60e8c51dJim Ingham    bool m_start_has_symbol;
5441ce4f1706ddd3a092c331ff15917e7f600f2e94Jim Ingham    StackID m_stack_id;
55454916c0169502e4c8cf0f27ab61923f8b533dd0Jim Ingham    StackID m_parent_frame_id;
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepInstruction);
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ThreadPlanStepInstruction_h_
65