Home | History | Annotate | Download | only in Target
      1 //===-- ThreadPlanStepUntil.h -----------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef liblldb_ThreadPlanStepUntil_h_
     11 #define liblldb_ThreadPlanStepUntil_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 // Other libraries and framework includes
     16 // Project includes
     17 #include "lldb/Target/Thread.h"
     18 #include "lldb/Target/ThreadPlan.h"
     19 
     20 namespace lldb_private {
     21 
     22 
     23 class ThreadPlanStepUntil : public ThreadPlan
     24 {
     25 public:
     26     virtual ~ThreadPlanStepUntil ();
     27 
     28     virtual void GetDescription (Stream *s, lldb::DescriptionLevel level);
     29     virtual bool ValidatePlan (Stream *error);
     30     virtual bool ShouldStop (Event *event_ptr);
     31     virtual bool StopOthers ();
     32     virtual lldb::StateType GetPlanRunState ();
     33     virtual bool WillStop ();
     34     virtual bool MischiefManaged ();
     35 
     36 protected:
     37     virtual bool DoWillResume (lldb::StateType resume_state, bool current_plan);
     38     virtual bool DoPlanExplainsStop (Event *event_ptr);
     39 
     40     ThreadPlanStepUntil (Thread &thread,
     41                          lldb::addr_t *address_list,
     42                          size_t num_addresses,
     43                          bool stop_others,
     44                          uint32_t frame_idx = 0);
     45     void AnalyzeStop(void);
     46 
     47 private:
     48 
     49     StackID m_stack_id;
     50     lldb::addr_t m_step_from_insn;
     51     lldb::break_id_t m_return_bp_id;
     52     lldb::addr_t m_return_addr;
     53     bool m_stepped_out;
     54     bool m_should_stop;
     55     bool m_ran_analyze;
     56     bool m_explains_stop;
     57 
     58     typedef std::map<lldb::addr_t,lldb::break_id_t> until_collection;
     59     until_collection m_until_points;
     60     bool m_stop_others;
     61 
     62     void Clear();
     63 
     64     friend lldb::ThreadPlanSP
     65     Thread::QueueThreadPlanForStepUntil (bool abort_other_plans,
     66                                          lldb::addr_t *address_list,
     67                                          size_t num_addresses,
     68                                          bool stop_others,
     69                                          uint32_t frame_idx);
     70 
     71     // Need an appropriate marker for the current stack so we can tell step out
     72     // from step in.
     73 
     74     DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepUntil);
     75 
     76 };
     77 
     78 } // namespace lldb_private
     79 
     80 #endif  // liblldb_ThreadPlanStepUntil_h_
     81