]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Breakpoint/StoppointLocation.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Breakpoint / StoppointLocation.h
1 //===-- StoppointLocation.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_StoppointLocation_h_
11 #define liblldb_StoppointLocation_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/lldb-private.h"
18 #include "lldb/Core/UserID.h"
19 // #include "lldb/Breakpoint/BreakpointOptions.h"
20
21 namespace lldb_private {
22
23 class StoppointLocation
24 {
25 public:
26     //------------------------------------------------------------------
27     // Constructors and Destructors
28     //------------------------------------------------------------------
29     StoppointLocation (lldb::break_id_t bid,
30                        lldb::addr_t m_addr,
31                        bool hardware);
32
33     StoppointLocation (lldb::break_id_t bid,
34                        lldb::addr_t m_addr,
35                        uint32_t byte_size,
36                        bool hardware);
37
38     virtual
39     ~StoppointLocation ();
40
41     //------------------------------------------------------------------
42     // Operators
43     //------------------------------------------------------------------
44
45     //------------------------------------------------------------------
46     // Methods
47     //------------------------------------------------------------------
48     virtual lldb::addr_t
49     GetLoadAddress() const
50     {
51         return m_addr;
52     }
53
54     virtual void
55     SetLoadAddress (lldb::addr_t addr)
56     {
57         m_addr = addr;
58     }
59
60     uint32_t
61     GetByteSize () const
62     {
63         return m_byte_size;
64     }
65
66     uint32_t
67     GetHitCount () const
68     {
69         return m_hit_count;
70     }
71
72     uint32_t
73     GetHardwareIndex () const
74     {
75         return m_hw_index;
76     }
77
78
79     bool
80     HardwarePreferred () const
81     {
82         return m_hw_preferred;
83     }
84
85     virtual bool
86     IsHardware () const
87     {
88         return m_hw_index != LLDB_INVALID_INDEX32;
89     }
90
91
92     virtual bool
93     ShouldStop (StoppointCallbackContext *context)
94     {
95         return true;
96     }
97
98     virtual void
99     Dump (Stream *stream) const
100     {
101     }
102
103     void
104     SetHardwareIndex (uint32_t index)
105     {
106         m_hw_index = index;
107     }
108
109
110     lldb::break_id_t
111     GetID () const
112     {
113         return m_loc_id;
114     }
115
116 protected:
117     //------------------------------------------------------------------
118     // Classes that inherit from StoppointLocation can see and modify these
119     //------------------------------------------------------------------
120     lldb::break_id_t  m_loc_id;     // Stoppoint location ID
121     lldb::addr_t      m_addr;       // The load address of this stop point. The base Stoppoint doesn't
122                                     // store a full Address since that's not needed for the breakpoint sites.
123     bool        m_hw_preferred;     // 1 if this point has been requested to be set using hardware (which may fail due to lack of resources)
124     uint32_t    m_hw_index;         // The hardware resource index for this breakpoint/watchpoint
125     uint32_t    m_byte_size;        // The size in bytes of stop location.  e.g. the length of the trap opcode for
126                                     // software breakpoints, or the optional length in bytes for
127                                     // hardware breakpoints, or the length of the watchpoint.
128     uint32_t    m_hit_count;        // Number of times this breakpoint/watchpoint has been hit
129
130     // If you override this, be sure to call the base class to increment the internal counter.
131     void
132     IncrementHitCount ()
133     {
134         ++m_hit_count;
135     }
136
137 private:
138     //------------------------------------------------------------------
139     // For StoppointLocation only
140     //------------------------------------------------------------------
141     DISALLOW_COPY_AND_ASSIGN(StoppointLocation);
142     StoppointLocation(); // Disallow default constructor
143 };
144
145 } // namespace lldb_private
146
147 #endif  // liblldb_StoppointLocation_h_