124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanStepUntil.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_ThreadPlanStepUntil_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ThreadPlanStepUntil_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/Target/Thread.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlan.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ThreadPlanStepUntil : public ThreadPlan
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~ThreadPlanStepUntil ();
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 DoWillResume (lldb::StateType resume_state, bool current_plan);
387c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    virtual bool DoPlanExplainsStop (Event *event_ptr);
397c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanStepUntil (Thread &thread,
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                         lldb::addr_t *address_list,
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                         size_t num_addresses,
431ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton                         bool stop_others,
441ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton                         uint32_t frame_idx = 0);
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void AnalyzeStop(void);
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
49441e3b9e8bed8c67afd5e520966d7ca16579eac4Jim Ingham    StackID m_stack_id;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t m_step_from_insn;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::break_id_t m_return_bp_id;
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t m_return_addr;
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_stepped_out;
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_should_stop;
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_ran_analyze;
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_explains_stop;
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::map<lldb::addr_t,lldb::break_id_t> until_collection;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    until_collection m_until_points;
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_stop_others;
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void Clear();
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
64008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham    friend lldb::ThreadPlanSP
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Thread::QueueThreadPlanForStepUntil (bool abort_other_plans,
661ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton                                         lldb::addr_t *address_list,
671ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton                                         size_t num_addresses,
681ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton                                         bool stop_others,
691ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton                                         uint32_t frame_idx);
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Need an appropriate marker for the current stack so we can tell step out
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // from step in.
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepUntil);
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ThreadPlanStepUntil_h_
81