11fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton//===-- SBWatchpoint.cpp --------------------------------*- C++ -*-===//
2096c293f8d4171448908801d5a1a74b152af1430Johnny Chen//
3096c293f8d4171448908801d5a1a74b152af1430Johnny Chen//                     The LLVM Compiler Infrastructure
4096c293f8d4171448908801d5a1a74b152af1430Johnny Chen//
5096c293f8d4171448908801d5a1a74b152af1430Johnny Chen// This file is distributed under the University of Illinois Open Source
6096c293f8d4171448908801d5a1a74b152af1430Johnny Chen// License. See LICENSE.TXT for details.
7096c293f8d4171448908801d5a1a74b152af1430Johnny Chen//
8096c293f8d4171448908801d5a1a74b152af1430Johnny Chen//===----------------------------------------------------------------------===//
9096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
101fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton#include "lldb/API/SBWatchpoint.h"
11096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/API/SBDefines.h"
12096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/API/SBAddress.h"
13096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/API/SBDebugger.h"
149c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham#include "lldb/API/SBEvent.h"
15096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/API/SBStream.h"
16096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
17096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/lldb-types.h"
18096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/lldb-defines.h"
19ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen#include "lldb/Breakpoint/Watchpoint.h"
20ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen#include "lldb/Breakpoint/WatchpointList.h"
21096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/Core/Log.h"
22096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/Core/Stream.h"
23096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/Core/StreamFile.h"
24096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/Target/Target.h"
25096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
26096c293f8d4171448908801d5a1a74b152af1430Johnny Chenusing namespace lldb;
27096c293f8d4171448908801d5a1a74b152af1430Johnny Chenusing namespace lldb_private;
28096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
29096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
301fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::SBWatchpoint () :
31096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    m_opaque_sp ()
32096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
33096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
34096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
35ecd4feb5111432d2878e95461220c720cb2d24c8Johnny ChenSBWatchpoint::SBWatchpoint (const lldb::WatchpointSP &wp_sp) :
36ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen    m_opaque_sp (wp_sp)
37096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
38952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
39096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
40096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    if (log)
41096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
42096c293f8d4171448908801d5a1a74b152af1430Johnny Chen        SBStream sstr;
43096c293f8d4171448908801d5a1a74b152af1430Johnny Chen        GetDescription (sstr, lldb::eDescriptionLevelBrief);
44ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen        log->Printf ("SBWatchpoint::SBWatchpoint (const lldb::WatchpointSP &wp_sp"
45ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen                     "=%p)  => this.sp = %p (%s)", wp_sp.get(), m_opaque_sp.get(), sstr.GetData());
46096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
47096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
48096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
491fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::SBWatchpoint(const SBWatchpoint &rhs) :
50096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    m_opaque_sp (rhs.m_opaque_sp)
51096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
52096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
53096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
541fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Claytonconst SBWatchpoint &
551fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::operator = (const SBWatchpoint &rhs)
56096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
57096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    if (this != &rhs)
58096c293f8d4171448908801d5a1a74b152af1430Johnny Chen        m_opaque_sp = rhs.m_opaque_sp;
59096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    return *this;
60096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
61096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
62096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
631fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::~SBWatchpoint ()
64096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
65096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
66096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
67092bd1575675778c6ebe901a7760af7427db617eJohnny Chenwatch_id_t
681fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetID ()
69092bd1575675778c6ebe901a7760af7427db617eJohnny Chen{
70952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
71092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
72092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    watch_id_t watch_id = LLDB_INVALID_WATCH_ID;
730a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
740a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
750a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        watch_id = watchpoint_sp->GetID();
76092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
77092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    if (log)
78092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    {
79092bd1575675778c6ebe901a7760af7427db617eJohnny Chen        if (watch_id == LLDB_INVALID_WATCH_ID)
800a19a1b9c25117854f226256805239d95153ed2dGreg Clayton            log->Printf ("SBWatchpoint(%p)::GetID () => LLDB_INVALID_WATCH_ID", watchpoint_sp.get());
81092bd1575675778c6ebe901a7760af7427db617eJohnny Chen        else
820a19a1b9c25117854f226256805239d95153ed2dGreg Clayton            log->Printf ("SBWatchpoint(%p)::GetID () => %u", watchpoint_sp.get(), watch_id);
83092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    }
84092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
85092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    return watch_id;
86092bd1575675778c6ebe901a7760af7427db617eJohnny Chen}
87092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
88096c293f8d4171448908801d5a1a74b152af1430Johnny Chenbool
891fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::IsValid() const
90096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
919880efacdd3a5e855b405d89433a01170422a889Jim Ingham    return (bool) m_opaque_sp;
92096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
93096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
94a442da2c8213b09b6b3869c8e30b5d98023ed7baJim InghamSBError
95a442da2c8213b09b6b3869c8e30b5d98023ed7baJim InghamSBWatchpoint::GetError ()
96a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham{
97a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham    SBError sb_error;
98a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham    lldb::WatchpointSP watchpoint_sp(GetSP());
99a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham    if (watchpoint_sp)
100a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham    {
101a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham        sb_error.SetError(watchpoint_sp->GetError());
102a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham    }
103a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham    return sb_error;
104a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham}
105a442da2c8213b09b6b3869c8e30b5d98023ed7baJim Ingham
106092bd1575675778c6ebe901a7760af7427db617eJohnny Chenint32_t
1071fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetHardwareIndex ()
108092bd1575675778c6ebe901a7760af7427db617eJohnny Chen{
109092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    int32_t hw_index = -1;
110092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
1110a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1120a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
113092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    {
1140a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
1150a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        hw_index = watchpoint_sp->GetHardwareIndex();
116092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    }
117092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
118092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    return hw_index;
119092bd1575675778c6ebe901a7760af7427db617eJohnny Chen}
120092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
121096c293f8d4171448908801d5a1a74b152af1430Johnny Chenaddr_t
1221fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetWatchAddress ()
123096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
124096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    addr_t ret_addr = LLDB_INVALID_ADDRESS;
125096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
1260a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1270a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
128096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
1290a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
1300a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        ret_addr = watchpoint_sp->GetLoadAddress();
131096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
132096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
133096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    return ret_addr;
134096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
135096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
136096c293f8d4171448908801d5a1a74b152af1430Johnny Chensize_t
1371fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetWatchSize ()
138096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
139096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    size_t watch_size = 0;
140096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
1410a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1420a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
143096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
1440a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
1450a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        watch_size = watchpoint_sp->GetByteSize();
146096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
147096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
148096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    return watch_size;
149096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
150096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
151096c293f8d4171448908801d5a1a74b152af1430Johnny Chenvoid
1521fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::SetEnabled (bool enabled)
153096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
1540a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1550a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
156096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
1570a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
1580a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        watchpoint_sp->GetTarget().DisableWatchpointByID(watchpoint_sp->GetID());
159096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
160096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
161096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
162096c293f8d4171448908801d5a1a74b152af1430Johnny Chenbool
1631fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::IsEnabled ()
164096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
1650a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1660a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
167096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
1680a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
1690a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        return watchpoint_sp->IsEnabled();
170096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
171096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    else
172096c293f8d4171448908801d5a1a74b152af1430Johnny Chen        return false;
173096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
174096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
175096c293f8d4171448908801d5a1a74b152af1430Johnny Chenuint32_t
1761fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetHitCount ()
177092bd1575675778c6ebe901a7760af7427db617eJohnny Chen{
178092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    uint32_t count = 0;
1790a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1800a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
181092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    {
1820a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
1830a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        count = watchpoint_sp->GetHitCount();
184092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    }
185092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
186952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
187092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    if (log)
1880a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        log->Printf ("SBWatchpoint(%p)::GetHitCount () => %u", watchpoint_sp.get(), count);
189092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
190092bd1575675778c6ebe901a7760af7427db617eJohnny Chen    return count;
191092bd1575675778c6ebe901a7760af7427db617eJohnny Chen}
192092bd1575675778c6ebe901a7760af7427db617eJohnny Chen
193092bd1575675778c6ebe901a7760af7427db617eJohnny Chenuint32_t
1941fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetIgnoreCount ()
195096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
1960a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
1970a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
198096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
1990a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
2000a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        return watchpoint_sp->GetIgnoreCount();
201096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
202096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    else
203096c293f8d4171448908801d5a1a74b152af1430Johnny Chen        return 0;
204096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
205096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
206096c293f8d4171448908801d5a1a74b152af1430Johnny Chenvoid
2071fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::SetIgnoreCount (uint32_t n)
208096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
2090a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
2100a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
211096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
2120a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
2130a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        watchpoint_sp->SetIgnoreCount (n);
214096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
215096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
216096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
217712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chenconst char *
218712a628dde2f4f786389feecf7e06e59f0853c75Johnny ChenSBWatchpoint::GetCondition ()
219712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen{
2200a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
2210a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
222712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen    {
2230a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
2240a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        return watchpoint_sp->GetConditionText ();
225712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen    }
226712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen    return NULL;
227712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen}
228712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen
229712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chenvoid
230712a628dde2f4f786389feecf7e06e59f0853c75Johnny ChenSBWatchpoint::SetCondition (const char *condition)
231712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen{
2320a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
2330a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
234712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen    {
2350a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
2360a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        watchpoint_sp->SetCondition (condition);
237712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen    }
238712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen}
239712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen
240096c293f8d4171448908801d5a1a74b152af1430Johnny Chenbool
2411fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg ClaytonSBWatchpoint::GetDescription (SBStream &description, DescriptionLevel level)
242096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
24396154be69fa240a662419183ed08e1cfc5418164Greg Clayton    Stream &strm = description.ref();
24496154be69fa240a662419183ed08e1cfc5418164Greg Clayton
2450a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::WatchpointSP watchpoint_sp(GetSP());
2460a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    if (watchpoint_sp)
247096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    {
2480a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        Mutex::Locker api_locker (watchpoint_sp->GetTarget().GetAPIMutex());
2490a19a1b9c25117854f226256805239d95153ed2dGreg Clayton        watchpoint_sp->GetDescription (&strm, level);
25096154be69fa240a662419183ed08e1cfc5418164Greg Clayton        strm.EOL();
251096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    }
252096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    else
25396154be69fa240a662419183ed08e1cfc5418164Greg Clayton        strm.PutCString ("No value");
254096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
255096c293f8d4171448908801d5a1a74b152af1430Johnny Chen    return true;
256096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
257096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
2580a19a1b9c25117854f226256805239d95153ed2dGreg Claytonvoid
2590a19a1b9c25117854f226256805239d95153ed2dGreg ClaytonSBWatchpoint::Clear ()
260096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
2610a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    m_opaque_sp.reset();
262096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
263096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
2640a19a1b9c25117854f226256805239d95153ed2dGreg Claytonlldb::WatchpointSP
2650a19a1b9c25117854f226256805239d95153ed2dGreg ClaytonSBWatchpoint::GetSP () const
266096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
2670a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    return m_opaque_sp;
268096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
269096c293f8d4171448908801d5a1a74b152af1430Johnny Chen
2700a19a1b9c25117854f226256805239d95153ed2dGreg Claytonvoid
2710a19a1b9c25117854f226256805239d95153ed2dGreg ClaytonSBWatchpoint::SetSP (const lldb::WatchpointSP &sp)
272096c293f8d4171448908801d5a1a74b152af1430Johnny Chen{
2730a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    m_opaque_sp = sp;
274096c293f8d4171448908801d5a1a74b152af1430Johnny Chen}
2759c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham
2769c970a371511a0e31ba9360aa841d445792c1ab0Jim Inghambool
2779c970a371511a0e31ba9360aa841d445792c1ab0Jim InghamSBWatchpoint::EventIsWatchpointEvent (const lldb::SBEvent &event)
2789c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham{
2799c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    return Watchpoint::WatchpointEventData::GetEventDataFromEvent(event.get()) != NULL;
2809c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham
2819c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham}
2829c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham
2839c970a371511a0e31ba9360aa841d445792c1ab0Jim InghamWatchpointEventType
2849c970a371511a0e31ba9360aa841d445792c1ab0Jim InghamSBWatchpoint::GetWatchpointEventTypeFromEvent (const SBEvent& event)
2859c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham{
2869c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    if (event.IsValid())
2879c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham        return Watchpoint::WatchpointEventData::GetWatchpointEventTypeFromEvent (event.GetSP());
2889c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    return eWatchpointEventTypeInvalidType;
2899c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham}
2909c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham
2919c970a371511a0e31ba9360aa841d445792c1ab0Jim InghamSBWatchpoint
2929c970a371511a0e31ba9360aa841d445792c1ab0Jim InghamSBWatchpoint::GetWatchpointFromEvent (const lldb::SBEvent& event)
2939c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham{
2949c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    SBWatchpoint sb_watchpoint;
2959c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    if (event.IsValid())
2969c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham        sb_watchpoint.m_opaque_sp = Watchpoint::WatchpointEventData::GetWatchpointFromEvent (event.GetSP());
2979c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    return sb_watchpoint;
2989c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham}
299