ThreadPlanRunToAddress.h revision 7c79a27b955432dfd3ad9439640f0af2eccf37b8
1//===-- ThreadPlanRunToAddress.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_ThreadPlanRunToAddress_h_
11#define liblldb_ThreadPlanRunToAddress_h_
12
13// C Includes
14// C++ Includes
15#include <vector>
16
17// Other libraries and framework includes
18// Project includes
19#include "lldb/lldb-private.h"
20#include "lldb/Target/ThreadPlan.h"
21
22namespace lldb_private {
23
24class ThreadPlanRunToAddress : public ThreadPlan
25{
26public:
27    ThreadPlanRunToAddress (Thread &thread,
28                            Address &address,
29                            bool stop_others);
30
31    ThreadPlanRunToAddress (Thread &thread,
32                            lldb::addr_t address,
33                            bool stop_others);
34
35    ThreadPlanRunToAddress (Thread &thread,
36                            const std::vector<lldb::addr_t> &addresses,
37                            bool stop_others);
38
39
40    virtual
41    ~ThreadPlanRunToAddress ();
42
43    virtual void
44    GetDescription (Stream *s, lldb::DescriptionLevel level);
45
46    virtual bool
47    ValidatePlan (Stream *error);
48
49    virtual bool
50    ShouldStop (Event *event_ptr);
51
52    virtual bool
53    StopOthers ();
54
55    virtual void
56    SetStopOthers (bool new_value);
57
58    virtual lldb::StateType
59    GetPlanRunState ();
60
61    virtual bool
62    WillStop ();
63
64    virtual bool
65    MischiefManaged ();
66
67protected:
68    virtual bool
69    DoPlanExplainsStop (Event *event_ptr);
70
71    void SetInitialBreakpoints();
72    bool AtOurAddress();
73private:
74    bool m_stop_others;
75    std::vector<lldb::addr_t> m_addresses;   // This is the address we are going to run to.
76                          // TODO: Would it be useful to have multiple addresses?
77    std::vector<lldb::break_id_t> m_break_ids; // This is the breakpoint we are using to stop us at m_address.
78
79    DISALLOW_COPY_AND_ASSIGN (ThreadPlanRunToAddress);
80
81};
82
83} // namespace lldb_private
84
85#endif  // liblldb_ThreadPlanRunToAddress_h_
86