124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBreakpoint.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 LLDB_SBBreakpoint_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBBreakpoint_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBBreakpoint
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef bool (*BreakpointHitCallback) (void *baton,
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                           SBProcess &process,
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                           SBThread &thread,
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                           lldb::SBBreakpointLocation &location);
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpoint ();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpoint (const lldb::SBBreakpoint& rhs);
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBBreakpoint();
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    const lldb::SBBreakpoint &
33538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator = (const lldb::SBBreakpoint& rhs);
34ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton
35ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton    // Tests to see if the opaque breakpoint object in this object matches the
36ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton    // opaque breakpoint object in "rhs".
37ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton    bool
38ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton    operator == (const lldb::SBBreakpoint& rhs);
39ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton
400765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata    bool
410765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata    operator != (const lldb::SBBreakpoint& rhs);
420765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    break_id_t
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetID () const;
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid() const;
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ClearAllBreakpointSites ();
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBBreakpointLocation
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindLocationByAddress (lldb::addr_t vm_addr);
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::break_id_t
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindLocationIDByAddress (lldb::addr_t vm_addr);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBBreakpointLocation
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindLocationByID (lldb::break_id_t bp_loc_id);
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBBreakpointLocation
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetLocationAtIndex (uint32_t index);
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetEnabled (bool enable);
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsEnabled ();
693fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham
702753a024a5a314232baa579c0ada87551aa86988Jim Ingham    void
712753a024a5a314232baa579c0ada87551aa86988Jim Ingham    SetOneShot (bool one_shot);
722753a024a5a314232baa579c0ada87551aa86988Jim Ingham
732753a024a5a314232baa579c0ada87551aa86988Jim Ingham    bool
742753a024a5a314232baa579c0ada87551aa86988Jim Ingham    IsOneShot () const;
752753a024a5a314232baa579c0ada87551aa86988Jim Ingham
763fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham    bool
773fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham    IsInternal ();
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
79c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    uint32_t
80c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    GetHitCount () const;
81c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
8354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    SetIgnoreCount (uint32_t count);
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8554e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton    uint32_t
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIgnoreCount () const;
87e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham
88e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham    void
89e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham    SetCondition (const char *condition);
90e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham
91e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham    const char *
92e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham    GetCondition ();
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetThreadID (lldb::tid_t sb_thread_id);
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::tid_t
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetThreadID ();
998e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
1008e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    void
1018e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    SetThreadIndex (uint32_t index);
1028e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
1038e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    uint32_t
1048e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    GetThreadIndex() const;
1058e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
1068e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    void
1078e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    SetThreadName (const char *thread_name);
1088e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
1098e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    const char *
1108e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    GetThreadName () const;
1118e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
1128e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    void
1138e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    SetQueueName (const char *queue_name);
1148e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
1158e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    const char *
1168e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    GetQueueName () const;
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetCallback (BreakpointHitCallback callback, void *baton);
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumResolvedLocations() const;
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumLocations() const;
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
128d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton    GetDescription (lldb::SBStream &description);
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    static bool
13128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    EventIsBreakpointEvent (const lldb::SBEvent &event);
13228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham
133c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    static lldb::BreakpointEventType
134c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    GetBreakpointEventTypeFromEvent (const lldb::SBEvent& event);
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
136c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    static lldb::SBBreakpoint
137c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    GetBreakpointFromEvent (const lldb::SBEvent& event);
138c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
139c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    static lldb::SBBreakpointLocation
140c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    GetBreakpointLocationAtIndexFromEvent (const lldb::SBEvent& event, uint32_t loc_idx);
14128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham
14228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    static uint32_t
14328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    GetNumBreakpointLocationsFromEvent (const lldb::SBEvent &event_sp);
14428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBBreakpointLocation;
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBTarget;
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpoint (const lldb::BreakpointSP &bp_sp);
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Breakpoint *
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator->() const;
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Breakpoint *
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    get() const;
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::BreakpointSP &
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator *();
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb::BreakpointSP &
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator *() const;
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PrivateBreakpointHitCallback (void *baton,
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                  lldb_private::StoppointCallbackContext *context,
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                  lldb::user_id_t break_id,
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                  lldb::user_id_t break_loc_id);
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17063094e0bb161580564954dee512955c1c79d3476Greg Clayton    lldb::BreakpointSP m_opaque_sp;
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // LLDB_SBBreakpoint_h_
176