124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanRunToAddress.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_ThreadPlanRunToAddress_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ThreadPlanRunToAddress_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham#include <vector>
1617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlan.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ThreadPlanRunToAddress : public ThreadPlan
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanRunToAddress (Thread &thread,
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            Address &address,
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            bool stop_others);
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanRunToAddress (Thread &thread,
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            lldb::addr_t address,
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            bool stop_others);
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham    ThreadPlanRunToAddress (Thread &thread,
36c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton                            const std::vector<lldb::addr_t> &addresses,
3717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham                            bool stop_others);
3817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham
3917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~ThreadPlanRunToAddress ();
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetDescription (Stream *s, lldb::DescriptionLevel level);
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ValidatePlan (Stream *error);
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ShouldStop (Event *event_ptr);
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StopOthers ();
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetStopOthers (bool new_value);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb::StateType
59745ac7a5826fe7c392007941a4046bfb1a8dff81Jim Ingham    GetPlanRunState ();
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WillStop ();
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    MischiefManaged ();
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
687c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    virtual bool
697c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham    DoPlanExplainsStop (Event *event_ptr);
707c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham
7117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham    void SetInitialBreakpoints();
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool AtOurAddress();
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_stop_others;
7517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham    std::vector<lldb::addr_t> m_addresses;   // This is the address we are going to run to.
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                          // TODO: Would it be useful to have multiple addresses?
776db3594f1ce91d8268ef60bf5d07635d778ea786Jim Ingham    std::vector<lldb::break_id_t> m_break_ids; // This is the breakpoint we are using to stop us at m_address.
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (ThreadPlanRunToAddress);
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ThreadPlanRunToAddress_h_
86