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
GetLoadAddress()49     GetLoadAddress() const
50     {
51         return m_addr;
52     }
53 
54     virtual void
SetLoadAddress(lldb::addr_t addr)55     SetLoadAddress (lldb::addr_t addr)
56     {
57         m_addr = addr;
58     }
59 
60     uint32_t
GetByteSize()61     GetByteSize () const
62     {
63         return m_byte_size;
64     }
65 
66     uint32_t
GetHitCount()67     GetHitCount () const
68     {
69         return m_hit_count;
70     }
71 
72     uint32_t
GetHardwareIndex()73     GetHardwareIndex () const
74     {
75         return m_hw_index;
76     }
77 
78 
79     bool
HardwarePreferred()80     HardwarePreferred () const
81     {
82         return m_hw_preferred;
83     }
84 
85     virtual bool
IsHardware()86     IsHardware () const
87     {
88         return m_hw_index != LLDB_INVALID_INDEX32;
89     }
90 
91 
92     virtual bool
ShouldStop(StoppointCallbackContext * context)93     ShouldStop (StoppointCallbackContext *context)
94     {
95         return true;
96     }
97 
98     virtual void
Dump(Stream * stream)99     Dump (Stream *stream) const
100     {
101     }
102 
103     void
SetHardwareIndex(uint32_t index)104     SetHardwareIndex (uint32_t index)
105     {
106         m_hw_index = index;
107     }
108 
109 
110     lldb::break_id_t
GetID()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
IncrementHitCount()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_
148