aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Breakpoint/StoppointLocation.h
blob: 452c6388c82d7930e28e34754a62faac6ea0aec7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//===-- StoppointLocation.h -------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_StoppointLocation_h_
#define liblldb_StoppointLocation_h_

// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-private.h"
#include "lldb/Core/UserID.h"
// #include "lldb/Breakpoint/BreakpointOptions.h"

namespace lldb_private {

class StoppointLocation
{
public:
    //------------------------------------------------------------------
    // Constructors and Destructors
    //------------------------------------------------------------------
    StoppointLocation (lldb::break_id_t bid,
                       lldb::addr_t m_addr,
                       bool hardware);

    StoppointLocation (lldb::break_id_t bid,
                       lldb::addr_t m_addr,
                       uint32_t byte_size,
                       bool hardware);

    virtual
    ~StoppointLocation ();

    //------------------------------------------------------------------
    // Operators
    //------------------------------------------------------------------

    //------------------------------------------------------------------
    // Methods
    //------------------------------------------------------------------
    virtual lldb::addr_t
    GetLoadAddress() const
    {
        return m_addr;
    }

    virtual void
    SetLoadAddress (lldb::addr_t addr)
    {
        m_addr = addr;
    }

    uint32_t
    GetByteSize () const
    {
        return m_byte_size;
    }

    uint32_t
    GetHitCount () const
    {
        return m_hit_count;
    }

    uint32_t
    GetHardwareIndex () const
    {
        return m_hardware_index;
    }


    bool
    HardwareRequired () const
    {
        return m_hardware;
    }

    virtual bool
    IsHardware () const
    {
        return m_hardware_index != LLDB_INVALID_INDEX32;
    }


    virtual bool
    ShouldStop (StoppointCallbackContext *context)
    {
        return true;
    }

    virtual void
    Dump (Stream *stream) const
    {
    }

    void
    SetHardwareIndex (uint32_t index)
    {
        m_hardware_index = index;
    }


    lldb::break_id_t
    GetID () const
    {
        return m_loc_id;
    }

protected:
    //------------------------------------------------------------------
    // Classes that inherit from StoppointLocation can see and modify these
    //------------------------------------------------------------------
    lldb::break_id_t  m_loc_id;     // Stoppoint location ID
    lldb::addr_t      m_addr;       // The load address of this stop point. The base Stoppoint doesn't
                                    // store a full Address since that's not needed for the breakpoint sites.
    bool        m_hardware;         // True if this point has been is required to use hardware (which may fail due to lack of resources)
    uint32_t    m_hardware_index;   // The hardware resource index for this breakpoint/watchpoint
    uint32_t    m_byte_size;        // The size in bytes of stop location.  e.g. the length of the trap opcode for
                                    // software breakpoints, or the optional length in bytes for
                                    // hardware breakpoints, or the length of the watchpoint.
    uint32_t    m_hit_count;        // Number of times this breakpoint/watchpoint has been hit

    // If you override this, be sure to call the base class to increment the internal counter.
    void
    IncrementHitCount ()
    {
        ++m_hit_count;
    }

private:
    //------------------------------------------------------------------
    // For StoppointLocation only
    //------------------------------------------------------------------
    DISALLOW_COPY_AND_ASSIGN(StoppointLocation);
    StoppointLocation(); // Disallow default constructor
};

} // namespace lldb_private

#endif  // liblldb_StoppointLocation_h_