130fdc8d8SChris Lattner //===-- SBBreakpoint.cpp ----------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
930fdc8d8SChris Lattner #include "lldb/API/SBBreakpoint.h"
10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
1130fdc8d8SChris Lattner #include "lldb/API/SBBreakpointLocation.h"
1230fdc8d8SChris Lattner #include "lldb/API/SBDebugger.h"
139fed0d85SGreg Clayton #include "lldb/API/SBEvent.h"
1430fdc8d8SChris Lattner #include "lldb/API/SBProcess.h"
15dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
165e09c8c3SJim Ingham #include "lldb/API/SBStringList.h"
1730fdc8d8SChris Lattner #include "lldb/API/SBThread.h"
1830fdc8d8SChris Lattner 
1930fdc8d8SChris Lattner #include "lldb/Breakpoint/Breakpoint.h"
2001f16664SJim Ingham #include "lldb/Breakpoint/BreakpointIDList.h"
2130fdc8d8SChris Lattner #include "lldb/Breakpoint/BreakpointLocation.h"
223815e702SJim Ingham #include "lldb/Breakpoint/BreakpointResolver.h"
233815e702SJim Ingham #include "lldb/Breakpoint/BreakpointResolverScripted.h"
2430fdc8d8SChris Lattner #include "lldb/Breakpoint/StoppointCallbackContext.h"
2530fdc8d8SChris Lattner #include "lldb/Core/Address.h"
26d80102e4SJim Ingham #include "lldb/Core/Debugger.h"
2730fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h"
28d80102e4SJim Ingham #include "lldb/Interpreter/CommandInterpreter.h"
29d80102e4SJim Ingham #include "lldb/Interpreter/ScriptInterpreter.h"
3030fdc8d8SChris Lattner #include "lldb/Target/Process.h"
31d5944cd1SGreg Clayton #include "lldb/Target/SectionLoadList.h"
3230fdc8d8SChris Lattner #include "lldb/Target/Target.h"
3362b02c61SJim Ingham #include "lldb/Target/Thread.h"
3462b02c61SJim Ingham #include "lldb/Target/ThreadSpec.h"
35bf9a7730SZachary Turner #include "lldb/Utility/Stream.h"
3630fdc8d8SChris Lattner 
37b842f2ecSJim Ingham #include "SBBreakpointOptionCommon.h"
38b842f2ecSJim Ingham 
3930fdc8d8SChris Lattner #include "lldb/lldb-enumerations.h"
4030fdc8d8SChris Lattner 
414e4fbe82SZachary Turner #include "llvm/ADT/STLExtras.h"
424e4fbe82SZachary Turner 
4330fdc8d8SChris Lattner using namespace lldb;
4430fdc8d8SChris Lattner using namespace lldb_private;
4530fdc8d8SChris Lattner 
46baf5664fSJonas Devlieghere SBBreakpoint::SBBreakpoint() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBBreakpoint); }
4730fdc8d8SChris Lattner 
48b9c1b51eSKate Stone SBBreakpoint::SBBreakpoint(const SBBreakpoint &rhs)
49baf5664fSJonas Devlieghere     : m_opaque_wp(rhs.m_opaque_wp) {
50baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBBreakpoint, (const lldb::SBBreakpoint &), rhs);
51baf5664fSJonas Devlieghere }
5230fdc8d8SChris Lattner 
53b9c1b51eSKate Stone SBBreakpoint::SBBreakpoint(const lldb::BreakpointSP &bp_sp)
54baf5664fSJonas Devlieghere     : m_opaque_wp(bp_sp) {
55baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBBreakpoint, (const lldb::BreakpointSP &), bp_sp);
56baf5664fSJonas Devlieghere }
5730fdc8d8SChris Lattner 
58dbb0abbfSEugene Zelenko SBBreakpoint::~SBBreakpoint() = default;
5930fdc8d8SChris Lattner 
60b9c1b51eSKate Stone const SBBreakpoint &SBBreakpoint::operator=(const SBBreakpoint &rhs) {
61baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBBreakpoint &,
62baf5664fSJonas Devlieghere                      SBBreakpoint, operator=,(const lldb::SBBreakpoint &), rhs);
63baf5664fSJonas Devlieghere 
646ac84034SPavel Labath   m_opaque_wp = rhs.m_opaque_wp;
65*306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
6630fdc8d8SChris Lattner }
6730fdc8d8SChris Lattner 
68b9c1b51eSKate Stone bool SBBreakpoint::operator==(const lldb::SBBreakpoint &rhs) {
69baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
70baf5664fSJonas Devlieghere       bool, SBBreakpoint, operator==,(const lldb::SBBreakpoint &), rhs);
71baf5664fSJonas Devlieghere 
726ac84034SPavel Labath   return m_opaque_wp.lock() == rhs.m_opaque_wp.lock();
73ac2eb9b1SGreg Clayton }
74ac2eb9b1SGreg Clayton 
75b9c1b51eSKate Stone bool SBBreakpoint::operator!=(const lldb::SBBreakpoint &rhs) {
76baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
77baf5664fSJonas Devlieghere       bool, SBBreakpoint, operator!=,(const lldb::SBBreakpoint &), rhs);
78baf5664fSJonas Devlieghere 
796ac84034SPavel Labath   return m_opaque_wp.lock() != rhs.m_opaque_wp.lock();
80c3387333SEnrico Granata }
81c3387333SEnrico Granata 
82b9c1b51eSKate Stone break_id_t SBBreakpoint::GetID() const {
83baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::break_id_t, SBBreakpoint, GetID);
84baf5664fSJonas Devlieghere 
85af67cecdSGreg Clayton   break_id_t break_id = LLDB_INVALID_BREAK_ID;
866ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
876ac84034SPavel Labath   if (bkpt_sp)
886ac84034SPavel Labath     break_id = bkpt_sp->GetID();
89af67cecdSGreg Clayton 
90af67cecdSGreg Clayton   return break_id;
9130fdc8d8SChris Lattner }
9230fdc8d8SChris Lattner 
93b9c1b51eSKate Stone bool SBBreakpoint::IsValid() const {
94baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBreakpoint, IsValid);
957f5237bcSPavel Labath   return this->operator bool();
967f5237bcSPavel Labath }
977f5237bcSPavel Labath SBBreakpoint::operator bool() const {
987f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBreakpoint, operator bool);
99baf5664fSJonas Devlieghere 
1006ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
1016ac84034SPavel Labath   if (!bkpt_sp)
102e029fa57SJim Ingham     return false;
1036ac84034SPavel Labath   else if (bkpt_sp->GetTarget().GetBreakpointByID(bkpt_sp->GetID()))
104e029fa57SJim Ingham     return true;
105e029fa57SJim Ingham   else
106e029fa57SJim Ingham     return false;
10730fdc8d8SChris Lattner }
10830fdc8d8SChris Lattner 
109b9c1b51eSKate Stone void SBBreakpoint::ClearAllBreakpointSites() {
110baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBBreakpoint, ClearAllBreakpointSites);
111baf5664fSJonas Devlieghere 
1126ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
1136ac84034SPavel Labath   if (bkpt_sp) {
114b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
1156ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
1166ac84034SPavel Labath     bkpt_sp->ClearAllBreakpointSites();
11730fdc8d8SChris Lattner   }
118af67cecdSGreg Clayton }
11930fdc8d8SChris Lattner 
120b9c1b51eSKate Stone SBBreakpointLocation SBBreakpoint::FindLocationByAddress(addr_t vm_addr) {
121baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
122baf5664fSJonas Devlieghere                      FindLocationByAddress, (lldb::addr_t), vm_addr);
123baf5664fSJonas Devlieghere 
12430fdc8d8SChris Lattner   SBBreakpointLocation sb_bp_location;
12530fdc8d8SChris Lattner 
1266ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
1276ac84034SPavel Labath   if (bkpt_sp) {
128b9c1b51eSKate Stone     if (vm_addr != LLDB_INVALID_ADDRESS) {
129b9c1b51eSKate Stone       std::lock_guard<std::recursive_mutex> guard(
1306ac84034SPavel Labath           bkpt_sp->GetTarget().GetAPIMutex());
13130fdc8d8SChris Lattner       Address address;
1326ac84034SPavel Labath       Target &target = bkpt_sp->GetTarget();
133b9c1b51eSKate Stone       if (!target.GetSectionLoadList().ResolveLoadAddress(vm_addr, address)) {
134e72dfb32SGreg Clayton         address.SetRawAddress(vm_addr);
13530fdc8d8SChris Lattner       }
1366ac84034SPavel Labath       sb_bp_location.SetLocation(bkpt_sp->FindLocationByAddress(address));
13730fdc8d8SChris Lattner     }
13830fdc8d8SChris Lattner   }
139baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_bp_location);
14030fdc8d8SChris Lattner }
14130fdc8d8SChris Lattner 
142b9c1b51eSKate Stone break_id_t SBBreakpoint::FindLocationIDByAddress(addr_t vm_addr) {
143baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::break_id_t, SBBreakpoint, FindLocationIDByAddress,
144baf5664fSJonas Devlieghere                      (lldb::addr_t), vm_addr);
145baf5664fSJonas Devlieghere 
146af67cecdSGreg Clayton   break_id_t break_id = LLDB_INVALID_BREAK_ID;
1476ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
14830fdc8d8SChris Lattner 
1496ac84034SPavel Labath   if (bkpt_sp && vm_addr != LLDB_INVALID_ADDRESS) {
150b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
1516ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
15230fdc8d8SChris Lattner     Address address;
1536ac84034SPavel Labath     Target &target = bkpt_sp->GetTarget();
154b9c1b51eSKate Stone     if (!target.GetSectionLoadList().ResolveLoadAddress(vm_addr, address)) {
155e72dfb32SGreg Clayton       address.SetRawAddress(vm_addr);
15630fdc8d8SChris Lattner     }
1576ac84034SPavel Labath     break_id = bkpt_sp->FindLocationIDByAddress(address);
15830fdc8d8SChris Lattner   }
15930fdc8d8SChris Lattner 
160af67cecdSGreg Clayton   return break_id;
16130fdc8d8SChris Lattner }
16230fdc8d8SChris Lattner 
163b9c1b51eSKate Stone SBBreakpointLocation SBBreakpoint::FindLocationByID(break_id_t bp_loc_id) {
164baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBBreakpointLocation, SBBreakpoint, FindLocationByID,
165baf5664fSJonas Devlieghere                      (lldb::break_id_t), bp_loc_id);
166baf5664fSJonas Devlieghere 
16730fdc8d8SChris Lattner   SBBreakpointLocation sb_bp_location;
1686ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
16930fdc8d8SChris Lattner 
1706ac84034SPavel Labath   if (bkpt_sp) {
171b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
1726ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
1736ac84034SPavel Labath     sb_bp_location.SetLocation(bkpt_sp->FindLocationByID(bp_loc_id));
174af67cecdSGreg Clayton   }
17530fdc8d8SChris Lattner 
176baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_bp_location);
17730fdc8d8SChris Lattner }
17830fdc8d8SChris Lattner 
179b9c1b51eSKate Stone SBBreakpointLocation SBBreakpoint::GetLocationAtIndex(uint32_t index) {
180baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
181baf5664fSJonas Devlieghere                      GetLocationAtIndex, (uint32_t), index);
182baf5664fSJonas Devlieghere 
18330fdc8d8SChris Lattner   SBBreakpointLocation sb_bp_location;
1846ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
18530fdc8d8SChris Lattner 
1866ac84034SPavel Labath   if (bkpt_sp) {
187b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
1886ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
1896ac84034SPavel Labath     sb_bp_location.SetLocation(bkpt_sp->GetLocationAtIndex(index));
190af67cecdSGreg Clayton   }
19130fdc8d8SChris Lattner 
192baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_bp_location);
19330fdc8d8SChris Lattner }
19430fdc8d8SChris Lattner 
195b9c1b51eSKate Stone void SBBreakpoint::SetEnabled(bool enable) {
196baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetEnabled, (bool), enable);
197baf5664fSJonas Devlieghere 
1986ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
199ceb6b139SCaroline Tice 
2006ac84034SPavel Labath   if (bkpt_sp) {
201b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2026ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2036ac84034SPavel Labath     bkpt_sp->SetEnabled(enable);
20430fdc8d8SChris Lattner   }
205af67cecdSGreg Clayton }
20630fdc8d8SChris Lattner 
207b9c1b51eSKate Stone bool SBBreakpoint::IsEnabled() {
208baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBBreakpoint, IsEnabled);
209baf5664fSJonas Devlieghere 
2106ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
2116ac84034SPavel Labath   if (bkpt_sp) {
212b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2136ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2146ac84034SPavel Labath     return bkpt_sp->IsEnabled();
215b9c1b51eSKate Stone   } else
21630fdc8d8SChris Lattner     return false;
21730fdc8d8SChris Lattner }
21830fdc8d8SChris Lattner 
219b9c1b51eSKate Stone void SBBreakpoint::SetOneShot(bool one_shot) {
220baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetOneShot, (bool), one_shot);
221baf5664fSJonas Devlieghere 
2226ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
223ca36cd16SJim Ingham 
2246ac84034SPavel Labath   if (bkpt_sp) {
225b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2266ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2276ac84034SPavel Labath     bkpt_sp->SetOneShot(one_shot);
228ca36cd16SJim Ingham   }
229ca36cd16SJim Ingham }
230ca36cd16SJim Ingham 
231b9c1b51eSKate Stone bool SBBreakpoint::IsOneShot() const {
232baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBreakpoint, IsOneShot);
233baf5664fSJonas Devlieghere 
2346ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
2356ac84034SPavel Labath   if (bkpt_sp) {
236b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2376ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2386ac84034SPavel Labath     return bkpt_sp->IsOneShot();
239b9c1b51eSKate Stone   } else
240ca36cd16SJim Ingham     return false;
241ca36cd16SJim Ingham }
242ca36cd16SJim Ingham 
243b9c1b51eSKate Stone bool SBBreakpoint::IsInternal() {
244baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBBreakpoint, IsInternal);
245baf5664fSJonas Devlieghere 
2466ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
2476ac84034SPavel Labath   if (bkpt_sp) {
248b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2496ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2506ac84034SPavel Labath     return bkpt_sp->IsInternal();
251b9c1b51eSKate Stone   } else
25211c8108dSJim Ingham     return false;
25311c8108dSJim Ingham }
25411c8108dSJim Ingham 
255b9c1b51eSKate Stone void SBBreakpoint::SetIgnoreCount(uint32_t count) {
256baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetIgnoreCount, (uint32_t), count);
257baf5664fSJonas Devlieghere 
2586ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
259ceb6b139SCaroline Tice 
2606ac84034SPavel Labath   if (bkpt_sp) {
261b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2626ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2636ac84034SPavel Labath     bkpt_sp->SetIgnoreCount(count);
26430fdc8d8SChris Lattner   }
265af67cecdSGreg Clayton }
26630fdc8d8SChris Lattner 
267b9c1b51eSKate Stone void SBBreakpoint::SetCondition(const char *condition) {
268baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetCondition, (const char *),
269baf5664fSJonas Devlieghere                      condition);
270baf5664fSJonas Devlieghere 
2716ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
2726ac84034SPavel Labath   if (bkpt_sp) {
273b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2746ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2756ac84034SPavel Labath     bkpt_sp->SetCondition(condition);
276041a12fcSJim Ingham   }
277af67cecdSGreg Clayton }
278041a12fcSJim Ingham 
279b9c1b51eSKate Stone const char *SBBreakpoint::GetCondition() {
280baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBBreakpoint, GetCondition);
281baf5664fSJonas Devlieghere 
2826ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
2836ac84034SPavel Labath   if (bkpt_sp) {
284b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
2856ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
2866ac84034SPavel Labath     return bkpt_sp->GetConditionText();
287041a12fcSJim Ingham   }
288dbb0abbfSEugene Zelenko   return nullptr;
289af67cecdSGreg Clayton }
290041a12fcSJim Ingham 
291f08f5c99SJim Ingham void SBBreakpoint::SetAutoContinue(bool auto_continue) {
292baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetAutoContinue, (bool),
293baf5664fSJonas Devlieghere                      auto_continue);
294baf5664fSJonas Devlieghere 
295f08f5c99SJim Ingham   BreakpointSP bkpt_sp = GetSP();
296f08f5c99SJim Ingham   if (bkpt_sp) {
297f08f5c99SJim Ingham     std::lock_guard<std::recursive_mutex> guard(
298f08f5c99SJim Ingham         bkpt_sp->GetTarget().GetAPIMutex());
299f08f5c99SJim Ingham     bkpt_sp->SetAutoContinue(auto_continue);
300f08f5c99SJim Ingham   }
301f08f5c99SJim Ingham }
302f08f5c99SJim Ingham 
303f08f5c99SJim Ingham bool SBBreakpoint::GetAutoContinue() {
304baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBBreakpoint, GetAutoContinue);
305baf5664fSJonas Devlieghere 
306f08f5c99SJim Ingham   BreakpointSP bkpt_sp = GetSP();
307f08f5c99SJim Ingham   if (bkpt_sp) {
308f08f5c99SJim Ingham     std::lock_guard<std::recursive_mutex> guard(
309f08f5c99SJim Ingham         bkpt_sp->GetTarget().GetAPIMutex());
310f08f5c99SJim Ingham     return bkpt_sp->IsAutoContinue();
311f08f5c99SJim Ingham   }
3121c7dc829SJim Ingham   return false;
313f08f5c99SJim Ingham }
314f08f5c99SJim Ingham 
315b9c1b51eSKate Stone uint32_t SBBreakpoint::GetHitCount() const {
316baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBreakpoint, GetHitCount);
317baf5664fSJonas Devlieghere 
3184838131bSGreg Clayton   uint32_t count = 0;
3196ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
3206ac84034SPavel Labath   if (bkpt_sp) {
321b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
3226ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
3236ac84034SPavel Labath     count = bkpt_sp->GetHitCount();
324af67cecdSGreg Clayton   }
3254838131bSGreg Clayton 
3264838131bSGreg Clayton   return count;
327ceb6b139SCaroline Tice }
3289fed0d85SGreg Clayton 
329b9c1b51eSKate Stone uint32_t SBBreakpoint::GetIgnoreCount() const {
330baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBreakpoint, GetIgnoreCount);
331baf5664fSJonas Devlieghere 
3324838131bSGreg Clayton   uint32_t count = 0;
3336ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
3346ac84034SPavel Labath   if (bkpt_sp) {
335b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
3366ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
3376ac84034SPavel Labath     count = bkpt_sp->GetIgnoreCount();
338af67cecdSGreg Clayton   }
3394838131bSGreg Clayton 
3404838131bSGreg Clayton   return count;
34130fdc8d8SChris Lattner }
34230fdc8d8SChris Lattner 
343b9c1b51eSKate Stone void SBBreakpoint::SetThreadID(tid_t tid) {
344baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetThreadID, (lldb::tid_t), tid);
345baf5664fSJonas Devlieghere 
3466ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
3476ac84034SPavel Labath   if (bkpt_sp) {
348b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
3496ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
3506ac84034SPavel Labath     bkpt_sp->SetThreadID(tid);
351af67cecdSGreg Clayton   }
35230fdc8d8SChris Lattner }
35330fdc8d8SChris Lattner 
354b9c1b51eSKate Stone tid_t SBBreakpoint::GetThreadID() {
355baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::tid_t, SBBreakpoint, GetThreadID);
356baf5664fSJonas Devlieghere 
3574838131bSGreg Clayton   tid_t tid = LLDB_INVALID_THREAD_ID;
3586ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
3596ac84034SPavel Labath   if (bkpt_sp) {
360b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
3616ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
3626ac84034SPavel Labath     tid = bkpt_sp->GetThreadID();
363af67cecdSGreg Clayton   }
36430fdc8d8SChris Lattner 
3654838131bSGreg Clayton   return tid;
36630fdc8d8SChris Lattner }
36730fdc8d8SChris Lattner 
368b9c1b51eSKate Stone void SBBreakpoint::SetThreadIndex(uint32_t index) {
369baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetThreadIndex, (uint32_t), index);
370baf5664fSJonas Devlieghere 
3716ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
3726ac84034SPavel Labath   if (bkpt_sp) {
373b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
3746ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
3756ac84034SPavel Labath     bkpt_sp->GetOptions()->GetThreadSpec()->SetIndex(index);
37662b02c61SJim Ingham   }
377af67cecdSGreg Clayton }
37862b02c61SJim Ingham 
379b9c1b51eSKate Stone uint32_t SBBreakpoint::GetThreadIndex() const {
380baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBreakpoint, GetThreadIndex);
381baf5664fSJonas Devlieghere 
382bdf4c6acSGreg Clayton   uint32_t thread_idx = UINT32_MAX;
3836ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
3846ac84034SPavel Labath   if (bkpt_sp) {
385b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
3866ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
387b9c1b51eSKate Stone     const ThreadSpec *thread_spec =
3886ac84034SPavel Labath         bkpt_sp->GetOptions()->GetThreadSpecNoCreate();
389dbb0abbfSEugene Zelenko     if (thread_spec != nullptr)
3904838131bSGreg Clayton       thread_idx = thread_spec->GetIndex();
39162b02c61SJim Ingham   }
3924838131bSGreg Clayton 
393763d1a17SJohnny Chen   return thread_idx;
39462b02c61SJim Ingham }
39562b02c61SJim Ingham 
396b9c1b51eSKate Stone void SBBreakpoint::SetThreadName(const char *thread_name) {
397baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetThreadName, (const char *),
398baf5664fSJonas Devlieghere                      thread_name);
399baf5664fSJonas Devlieghere 
4006ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4014838131bSGreg Clayton 
4026ac84034SPavel Labath   if (bkpt_sp) {
403b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
4046ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
4056ac84034SPavel Labath     bkpt_sp->GetOptions()->GetThreadSpec()->SetName(thread_name);
40662b02c61SJim Ingham   }
407af67cecdSGreg Clayton }
40862b02c61SJim Ingham 
409b9c1b51eSKate Stone const char *SBBreakpoint::GetThreadName() const {
410baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBreakpoint, GetThreadName);
411baf5664fSJonas Devlieghere 
412dbb0abbfSEugene Zelenko   const char *name = nullptr;
4136ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4146ac84034SPavel Labath   if (bkpt_sp) {
415b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
4166ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
417b9c1b51eSKate Stone     const ThreadSpec *thread_spec =
4186ac84034SPavel Labath         bkpt_sp->GetOptions()->GetThreadSpecNoCreate();
419dbb0abbfSEugene Zelenko     if (thread_spec != nullptr)
4204838131bSGreg Clayton       name = thread_spec->GetName();
42162b02c61SJim Ingham   }
4224838131bSGreg Clayton 
4234838131bSGreg Clayton   return name;
42462b02c61SJim Ingham }
42562b02c61SJim Ingham 
426b9c1b51eSKate Stone void SBBreakpoint::SetQueueName(const char *queue_name) {
427baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetQueueName, (const char *),
428baf5664fSJonas Devlieghere                      queue_name);
429baf5664fSJonas Devlieghere 
4306ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4316ac84034SPavel Labath   if (bkpt_sp) {
432b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
4336ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
4346ac84034SPavel Labath     bkpt_sp->GetOptions()->GetThreadSpec()->SetQueueName(queue_name);
43562b02c61SJim Ingham   }
436af67cecdSGreg Clayton }
43762b02c61SJim Ingham 
438b9c1b51eSKate Stone const char *SBBreakpoint::GetQueueName() const {
439baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBreakpoint, GetQueueName);
440baf5664fSJonas Devlieghere 
441dbb0abbfSEugene Zelenko   const char *name = nullptr;
4426ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4436ac84034SPavel Labath   if (bkpt_sp) {
444b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
4456ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
446b9c1b51eSKate Stone     const ThreadSpec *thread_spec =
4476ac84034SPavel Labath         bkpt_sp->GetOptions()->GetThreadSpecNoCreate();
448af67cecdSGreg Clayton     if (thread_spec)
4494838131bSGreg Clayton       name = thread_spec->GetQueueName();
45062b02c61SJim Ingham   }
4514838131bSGreg Clayton 
4524838131bSGreg Clayton   return name;
45362b02c61SJim Ingham }
45462b02c61SJim Ingham 
455b9c1b51eSKate Stone size_t SBBreakpoint::GetNumResolvedLocations() const {
456baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(size_t, SBBreakpoint,
457baf5664fSJonas Devlieghere                                    GetNumResolvedLocations);
458baf5664fSJonas Devlieghere 
4594838131bSGreg Clayton   size_t num_resolved = 0;
4606ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4616ac84034SPavel Labath   if (bkpt_sp) {
462b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
4636ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
4646ac84034SPavel Labath     num_resolved = bkpt_sp->GetNumResolvedLocations();
465af67cecdSGreg Clayton   }
4664838131bSGreg Clayton   return num_resolved;
46730fdc8d8SChris Lattner }
46830fdc8d8SChris Lattner 
469b9c1b51eSKate Stone size_t SBBreakpoint::GetNumLocations() const {
470baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(size_t, SBBreakpoint, GetNumLocations);
471baf5664fSJonas Devlieghere 
4726ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4734838131bSGreg Clayton   size_t num_locs = 0;
4746ac84034SPavel Labath   if (bkpt_sp) {
475b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
4766ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
4776ac84034SPavel Labath     num_locs = bkpt_sp->GetNumLocations();
478af67cecdSGreg Clayton   }
4794838131bSGreg Clayton   return num_locs;
48030fdc8d8SChris Lattner }
48130fdc8d8SChris Lattner 
48292d1960eSJim Ingham void SBBreakpoint::SetCommandLineCommands(SBStringList &commands) {
483baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetCommandLineCommands,
484baf5664fSJonas Devlieghere                      (lldb::SBStringList &), commands);
485baf5664fSJonas Devlieghere 
4866ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
4876ac84034SPavel Labath   if (!bkpt_sp)
48892d1960eSJim Ingham     return;
48992d1960eSJim Ingham   if (commands.GetSize() == 0)
49092d1960eSJim Ingham     return;
49192d1960eSJim Ingham 
49292d1960eSJim Ingham   std::lock_guard<std::recursive_mutex> guard(
4936ac84034SPavel Labath       bkpt_sp->GetTarget().GetAPIMutex());
49492d1960eSJim Ingham   std::unique_ptr<BreakpointOptions::CommandData> cmd_data_up(
495f7e07256SJim Ingham       new BreakpointOptions::CommandData(*commands, eScriptLanguageNone));
49692d1960eSJim Ingham 
4976ac84034SPavel Labath   bkpt_sp->GetOptions()->SetCommandDataCallback(cmd_data_up);
49892d1960eSJim Ingham }
49992d1960eSJim Ingham 
50092d1960eSJim Ingham bool SBBreakpoint::GetCommandLineCommands(SBStringList &commands) {
501baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBreakpoint, GetCommandLineCommands,
502baf5664fSJonas Devlieghere                      (lldb::SBStringList &), commands);
503baf5664fSJonas Devlieghere 
5046ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
5056ac84034SPavel Labath   if (!bkpt_sp)
50692d1960eSJim Ingham     return false;
50792d1960eSJim Ingham   StringList command_list;
50892d1960eSJim Ingham   bool has_commands =
5096ac84034SPavel Labath       bkpt_sp->GetOptions()->GetCommandLineCallbacks(command_list);
51092d1960eSJim Ingham   if (has_commands)
51192d1960eSJim Ingham     commands.AppendList(command_list);
51292d1960eSJim Ingham   return has_commands;
51392d1960eSJim Ingham }
51492d1960eSJim Ingham 
515b9c1b51eSKate Stone bool SBBreakpoint::GetDescription(SBStream &s) {
516baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBreakpoint, GetDescription, (lldb::SBStream &), s);
517baf5664fSJonas Devlieghere 
5186d1e4696SJim Ingham   return GetDescription(s, true);
5196d1e4696SJim Ingham }
5206d1e4696SJim Ingham 
5216d1e4696SJim Ingham bool SBBreakpoint::GetDescription(SBStream &s, bool include_locations) {
522baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBreakpoint, GetDescription,
523baf5664fSJonas Devlieghere                      (lldb::SBStream &, bool), s, include_locations);
524baf5664fSJonas Devlieghere 
5256ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
5266ac84034SPavel Labath   if (bkpt_sp) {
527b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
5286ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
5296ac84034SPavel Labath     s.Printf("SBBreakpoint: id = %i, ", bkpt_sp->GetID());
5306ac84034SPavel Labath     bkpt_sp->GetResolverDescription(s.get());
5316ac84034SPavel Labath     bkpt_sp->GetFilterDescription(s.get());
5326d1e4696SJim Ingham     if (include_locations) {
5336ac84034SPavel Labath       const size_t num_locations = bkpt_sp->GetNumLocations();
534d01b2953SDaniel Malea       s.Printf(", locations = %" PRIu64, (uint64_t)num_locations);
5356d1e4696SJim Ingham     }
536dde9cff3SCaroline Tice     return true;
537dde9cff3SCaroline Tice   }
53805faeb71SGreg Clayton   s.Printf("No value");
53905faeb71SGreg Clayton   return false;
54005faeb71SGreg Clayton }
541dde9cff3SCaroline Tice 
542baf5664fSJonas Devlieghere SBError SBBreakpoint::AddLocation(SBAddress &address) {
543baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBBreakpoint, AddLocation,
544baf5664fSJonas Devlieghere                      (lldb::SBAddress &), address);
545baf5664fSJonas Devlieghere 
5463815e702SJim Ingham   BreakpointSP bkpt_sp = GetSP();
5473815e702SJim Ingham   SBError error;
5483815e702SJim Ingham 
5493815e702SJim Ingham   if (!address.IsValid()) {
5503815e702SJim Ingham     error.SetErrorString("Can't add an invalid address.");
551baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(error);
5523815e702SJim Ingham   }
5533815e702SJim Ingham 
5543815e702SJim Ingham   if (!bkpt_sp) {
5553815e702SJim Ingham     error.SetErrorString("No breakpoint to add a location to.");
556baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(error);
5573815e702SJim Ingham   }
5583815e702SJim Ingham 
5593815e702SJim Ingham   if (!llvm::isa<BreakpointResolverScripted>(bkpt_sp->GetResolver().get())) {
5603815e702SJim Ingham     error.SetErrorString("Only a scripted resolver can add locations.");
561baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(error);
5623815e702SJim Ingham   }
5633815e702SJim Ingham 
5643815e702SJim Ingham   if (bkpt_sp->GetSearchFilter()->AddressPasses(address.ref()))
5653815e702SJim Ingham     bkpt_sp->AddLocation(address.ref());
566baf5664fSJonas Devlieghere   else {
5673815e702SJim Ingham     StreamString s;
5683815e702SJim Ingham     address.get()->Dump(&s, &bkpt_sp->GetTarget(),
5693815e702SJim Ingham                         Address::DumpStyleModuleWithFileAddress);
5703815e702SJim Ingham     error.SetErrorStringWithFormat("Address: %s didn't pass the filter.",
5713815e702SJim Ingham                                    s.GetData());
5723815e702SJim Ingham   }
573baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
5743815e702SJim Ingham }
5753815e702SJim Ingham 
5760d7b0c96SJonas Devlieghere void SBBreakpoint ::SetCallback(SBBreakpointHitCallback callback, void *baton) {
5770d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBBreakpoint, SetCallback,
5780d7b0c96SJonas Devlieghere                     (lldb::SBBreakpointHitCallback, void *), callback, baton);
5790d7b0c96SJonas Devlieghere 
5806ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
581ceb6b139SCaroline Tice 
5826ac84034SPavel Labath   if (bkpt_sp) {
583b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
5846ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
58530fdc8d8SChris Lattner     BatonSP baton_sp(new SBBreakpointCallbackBaton(callback, baton));
586b842f2ecSJim Ingham     bkpt_sp->SetCallback(SBBreakpointCallbackBaton
587b842f2ecSJim Ingham       ::PrivateBreakpointHitCallback, baton_sp,
5886ac84034SPavel Labath                          false);
58930fdc8d8SChris Lattner   }
59030fdc8d8SChris Lattner }
59130fdc8d8SChris Lattner 
592b9c1b51eSKate Stone void SBBreakpoint::SetScriptCallbackFunction(
593b9c1b51eSKate Stone     const char *callback_function_name) {
594baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, SetScriptCallbackFunction,
595baf5664fSJonas Devlieghere                      (const char *), callback_function_name);
596baf5664fSJonas Devlieghere 
5976ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
598d80102e4SJim Ingham 
5996ac84034SPavel Labath   if (bkpt_sp) {
600b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
6016ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
6026ac84034SPavel Labath     BreakpointOptions *bp_options = bkpt_sp->GetOptions();
6036ac84034SPavel Labath     bkpt_sp->GetTarget()
604b9c1b51eSKate Stone         .GetDebugger()
605b9c1b51eSKate Stone         .GetCommandInterpreter()
606b9c1b51eSKate Stone         .GetScriptInterpreter()
607b9c1b51eSKate Stone         ->SetBreakpointCommandCallbackFunction(bp_options,
608d80102e4SJim Ingham                                                callback_function_name);
609d80102e4SJim Ingham   }
610d80102e4SJim Ingham }
611d80102e4SJim Ingham 
612b9c1b51eSKate Stone SBError SBBreakpoint::SetScriptCallbackBody(const char *callback_body_text) {
613baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBBreakpoint, SetScriptCallbackBody,
614baf5664fSJonas Devlieghere                      (const char *), callback_body_text);
615baf5664fSJonas Devlieghere 
6166ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
617d80102e4SJim Ingham 
618d80102e4SJim Ingham   SBError sb_error;
6196ac84034SPavel Labath   if (bkpt_sp) {
620b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
6216ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
6226ac84034SPavel Labath     BreakpointOptions *bp_options = bkpt_sp->GetOptions();
62397206d57SZachary Turner     Status error =
6246ac84034SPavel Labath         bkpt_sp->GetTarget()
625b9c1b51eSKate Stone             .GetDebugger()
626b9c1b51eSKate Stone             .GetCommandInterpreter()
627b9c1b51eSKate Stone             .GetScriptInterpreter()
628b9c1b51eSKate Stone             ->SetBreakpointCommandCallback(bp_options, callback_body_text);
629d80102e4SJim Ingham     sb_error.SetError(error);
630b9c1b51eSKate Stone   } else
631d80102e4SJim Ingham     sb_error.SetErrorString("invalid breakpoint");
632d80102e4SJim Ingham 
633baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
634d80102e4SJim Ingham }
63530fdc8d8SChris Lattner 
636b9c1b51eSKate Stone bool SBBreakpoint::AddName(const char *new_name) {
637baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBreakpoint, AddName, (const char *), new_name);
638baf5664fSJonas Devlieghere 
6396ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
6405e09c8c3SJim Ingham 
6416ac84034SPavel Labath   if (bkpt_sp) {
642b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
6436ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
64497206d57SZachary Turner     Status error; // Think I'm just going to swallow the error here, it's
645b9c1b51eSKate Stone                   // probably more annoying to have to provide it.
646b842f2ecSJim Ingham     bkpt_sp->GetTarget().AddNameToBreakpoint(bkpt_sp, new_name, error);
647b842f2ecSJim Ingham     if (error.Fail())
648b842f2ecSJim Ingham       return false;
649b842f2ecSJim Ingham   }
6505e09c8c3SJim Ingham 
651b842f2ecSJim Ingham   return true;
6525e09c8c3SJim Ingham }
6535e09c8c3SJim Ingham 
654b9c1b51eSKate Stone void SBBreakpoint::RemoveName(const char *name_to_remove) {
655baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, RemoveName, (const char *),
656baf5664fSJonas Devlieghere                      name_to_remove);
657baf5664fSJonas Devlieghere 
6586ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
6595e09c8c3SJim Ingham 
6606ac84034SPavel Labath   if (bkpt_sp) {
661b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
6626ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
663b842f2ecSJim Ingham     bkpt_sp->GetTarget().RemoveNameFromBreakpoint(bkpt_sp,
664b842f2ecSJim Ingham                                                   ConstString(name_to_remove));
6655e09c8c3SJim Ingham   }
6665e09c8c3SJim Ingham }
6675e09c8c3SJim Ingham 
668b9c1b51eSKate Stone bool SBBreakpoint::MatchesName(const char *name) {
669baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBreakpoint, MatchesName, (const char *), name);
670baf5664fSJonas Devlieghere 
6716ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
6725e09c8c3SJim Ingham 
6736ac84034SPavel Labath   if (bkpt_sp) {
674b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
6756ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
6766ac84034SPavel Labath     return bkpt_sp->MatchesName(name);
6775e09c8c3SJim Ingham   }
6785e09c8c3SJim Ingham 
6795e09c8c3SJim Ingham   return false;
6805e09c8c3SJim Ingham }
6815e09c8c3SJim Ingham 
682b9c1b51eSKate Stone void SBBreakpoint::GetNames(SBStringList &names) {
683baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpoint, GetNames, (lldb::SBStringList &),
684baf5664fSJonas Devlieghere                      names);
685baf5664fSJonas Devlieghere 
6866ac84034SPavel Labath   BreakpointSP bkpt_sp = GetSP();
6875e09c8c3SJim Ingham 
6886ac84034SPavel Labath   if (bkpt_sp) {
689b9c1b51eSKate Stone     std::lock_guard<std::recursive_mutex> guard(
6906ac84034SPavel Labath         bkpt_sp->GetTarget().GetAPIMutex());
6915e09c8c3SJim Ingham     std::vector<std::string> names_vec;
6926ac84034SPavel Labath     bkpt_sp->GetNames(names_vec);
693b9c1b51eSKate Stone     for (std::string name : names_vec) {
6945e09c8c3SJim Ingham       names.AppendString(name.c_str());
6955e09c8c3SJim Ingham     }
6965e09c8c3SJim Ingham   }
6975e09c8c3SJim Ingham }
6985e09c8c3SJim Ingham 
699b9c1b51eSKate Stone bool SBBreakpoint::EventIsBreakpointEvent(const lldb::SBEvent &event) {
700baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBBreakpoint, EventIsBreakpointEvent,
701baf5664fSJonas Devlieghere                             (const lldb::SBEvent &), event);
702baf5664fSJonas Devlieghere 
703b9c1b51eSKate Stone   return Breakpoint::BreakpointEventData::GetEventDataFromEvent(event.get()) !=
704b9c1b51eSKate Stone          nullptr;
705e6bc6cb9SJim Ingham }
706e6bc6cb9SJim Ingham 
7079fed0d85SGreg Clayton BreakpointEventType
708b9c1b51eSKate Stone SBBreakpoint::GetBreakpointEventTypeFromEvent(const SBEvent &event) {
709baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::BreakpointEventType, SBBreakpoint,
710baf5664fSJonas Devlieghere                             GetBreakpointEventTypeFromEvent,
711baf5664fSJonas Devlieghere                             (const lldb::SBEvent &), event);
712baf5664fSJonas Devlieghere 
7139fed0d85SGreg Clayton   if (event.IsValid())
714b9c1b51eSKate Stone     return Breakpoint::BreakpointEventData::GetBreakpointEventTypeFromEvent(
715b9c1b51eSKate Stone         event.GetSP());
7169fed0d85SGreg Clayton   return eBreakpointEventTypeInvalidType;
7179fed0d85SGreg Clayton }
7189fed0d85SGreg Clayton 
719b9c1b51eSKate Stone SBBreakpoint SBBreakpoint::GetBreakpointFromEvent(const lldb::SBEvent &event) {
720baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBBreakpoint, SBBreakpoint,
721baf5664fSJonas Devlieghere                             GetBreakpointFromEvent, (const lldb::SBEvent &),
722baf5664fSJonas Devlieghere                             event);
723baf5664fSJonas Devlieghere 
7249fed0d85SGreg Clayton   if (event.IsValid())
725baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(
726baf5664fSJonas Devlieghere         SBBreakpoint(Breakpoint::BreakpointEventData::GetBreakpointFromEvent(
727baf5664fSJonas Devlieghere             event.GetSP())));
728baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBBreakpoint());
7299fed0d85SGreg Clayton }
7309fed0d85SGreg Clayton 
7319fed0d85SGreg Clayton SBBreakpointLocation
732b9c1b51eSKate Stone SBBreakpoint::GetBreakpointLocationAtIndexFromEvent(const lldb::SBEvent &event,
733b9c1b51eSKate Stone                                                     uint32_t loc_idx) {
734baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
735baf5664fSJonas Devlieghere                             GetBreakpointLocationAtIndexFromEvent,
736baf5664fSJonas Devlieghere                             (const lldb::SBEvent &, uint32_t), event, loc_idx);
737baf5664fSJonas Devlieghere 
7389fed0d85SGreg Clayton   SBBreakpointLocation sb_breakpoint_loc;
7399fed0d85SGreg Clayton   if (event.IsValid())
740b9c1b51eSKate Stone     sb_breakpoint_loc.SetLocation(
741b9c1b51eSKate Stone         Breakpoint::BreakpointEventData::GetBreakpointLocationAtIndexFromEvent(
742b9c1b51eSKate Stone             event.GetSP(), loc_idx));
743baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_breakpoint_loc);
7449fed0d85SGreg Clayton }
7459fed0d85SGreg Clayton 
746e6bc6cb9SJim Ingham uint32_t
747b9c1b51eSKate Stone SBBreakpoint::GetNumBreakpointLocationsFromEvent(const lldb::SBEvent &event) {
748baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(uint32_t, SBBreakpoint,
749baf5664fSJonas Devlieghere                             GetNumBreakpointLocationsFromEvent,
750baf5664fSJonas Devlieghere                             (const lldb::SBEvent &), event);
751baf5664fSJonas Devlieghere 
752e6bc6cb9SJim Ingham   uint32_t num_locations = 0;
753e6bc6cb9SJim Ingham   if (event.IsValid())
754b9c1b51eSKate Stone     num_locations =
755b9c1b51eSKate Stone         (Breakpoint::BreakpointEventData::GetNumBreakpointLocationsFromEvent(
756b9c1b51eSKate Stone             event.GetSP()));
757e6bc6cb9SJim Ingham   return num_locations;
758e6bc6cb9SJim Ingham }
75901f16664SJim Ingham 
760e103ae92SJonas Devlieghere bool SBBreakpoint::IsHardware() const {
761baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBreakpoint, IsHardware);
762baf5664fSJonas Devlieghere 
763e103ae92SJonas Devlieghere   BreakpointSP bkpt_sp = GetSP();
764e103ae92SJonas Devlieghere   if (bkpt_sp)
765e103ae92SJonas Devlieghere     return bkpt_sp->IsHardware();
766e103ae92SJonas Devlieghere   return false;
767e103ae92SJonas Devlieghere }
768e103ae92SJonas Devlieghere 
7696ac84034SPavel Labath BreakpointSP SBBreakpoint::GetSP() const { return m_opaque_wp.lock(); }
7706ac84034SPavel Labath 
77101f16664SJim Ingham // This is simple collection of breakpoint id's and their target.
772653e3f4eSTodd Fiala class SBBreakpointListImpl {
77301f16664SJim Ingham public:
774653e3f4eSTodd Fiala   SBBreakpointListImpl(lldb::TargetSP target_sp) : m_target_wp() {
775653e3f4eSTodd Fiala     if (target_sp && target_sp->IsValid())
776653e3f4eSTodd Fiala       m_target_wp = target_sp;
77701f16664SJim Ingham   }
77801f16664SJim Ingham 
77901f16664SJim Ingham   ~SBBreakpointListImpl() = default;
78001f16664SJim Ingham 
78101f16664SJim Ingham   size_t GetSize() { return m_break_ids.size(); }
78201f16664SJim Ingham 
78301f16664SJim Ingham   BreakpointSP GetBreakpointAtIndex(size_t idx) {
78401f16664SJim Ingham     if (idx >= m_break_ids.size())
78501f16664SJim Ingham       return BreakpointSP();
78601f16664SJim Ingham     TargetSP target_sp = m_target_wp.lock();
78701f16664SJim Ingham     if (!target_sp)
78801f16664SJim Ingham       return BreakpointSP();
78901f16664SJim Ingham     lldb::break_id_t bp_id = m_break_ids[idx];
79001f16664SJim Ingham     return target_sp->GetBreakpointList().FindBreakpointByID(bp_id);
79101f16664SJim Ingham   }
79201f16664SJim Ingham 
7936d1e4696SJim Ingham   BreakpointSP FindBreakpointByID(lldb::break_id_t desired_id) {
7946d1e4696SJim Ingham     TargetSP target_sp = m_target_wp.lock();
7956d1e4696SJim Ingham     if (!target_sp)
7966d1e4696SJim Ingham       return BreakpointSP();
7976d1e4696SJim Ingham 
7986d1e4696SJim Ingham     for (lldb::break_id_t &break_id : m_break_ids) {
7996d1e4696SJim Ingham       if (break_id == desired_id)
8006d1e4696SJim Ingham         return target_sp->GetBreakpointList().FindBreakpointByID(break_id);
8016d1e4696SJim Ingham     }
8026d1e4696SJim Ingham     return BreakpointSP();
8036d1e4696SJim Ingham   }
8046d1e4696SJim Ingham 
8056ac84034SPavel Labath   bool Append(BreakpointSP bkpt) {
80601f16664SJim Ingham     TargetSP target_sp = m_target_wp.lock();
8076ac84034SPavel Labath     if (!target_sp || !bkpt)
80801f16664SJim Ingham       return false;
8096ac84034SPavel Labath     if (bkpt->GetTargetSP() != target_sp)
81001f16664SJim Ingham       return false;
8116ac84034SPavel Labath     m_break_ids.push_back(bkpt->GetID());
81201f16664SJim Ingham     return true;
81301f16664SJim Ingham   }
81401f16664SJim Ingham 
8156ac84034SPavel Labath   bool AppendIfUnique(BreakpointSP bkpt) {
81601f16664SJim Ingham     TargetSP target_sp = m_target_wp.lock();
8176ac84034SPavel Labath     if (!target_sp || !bkpt)
81801f16664SJim Ingham       return false;
8196ac84034SPavel Labath     if (bkpt->GetTargetSP() != target_sp)
82001f16664SJim Ingham       return false;
8216ac84034SPavel Labath     lldb::break_id_t bp_id = bkpt->GetID();
82201f16664SJim Ingham     if (find(m_break_ids.begin(), m_break_ids.end(), bp_id) ==
82301f16664SJim Ingham         m_break_ids.end())
82401f16664SJim Ingham       return false;
82501f16664SJim Ingham 
8266ac84034SPavel Labath     m_break_ids.push_back(bkpt->GetID());
82701f16664SJim Ingham     return true;
82801f16664SJim Ingham   }
82901f16664SJim Ingham 
83001f16664SJim Ingham   bool AppendByID(lldb::break_id_t id) {
83101f16664SJim Ingham     TargetSP target_sp = m_target_wp.lock();
83201f16664SJim Ingham     if (!target_sp)
83301f16664SJim Ingham       return false;
83401f16664SJim Ingham     if (id == LLDB_INVALID_BREAK_ID)
83501f16664SJim Ingham       return false;
83601f16664SJim Ingham     m_break_ids.push_back(id);
83701f16664SJim Ingham     return true;
83801f16664SJim Ingham   }
83901f16664SJim Ingham 
84001f16664SJim Ingham   void Clear() { m_break_ids.clear(); }
84101f16664SJim Ingham 
84201f16664SJim Ingham   void CopyToBreakpointIDList(lldb_private::BreakpointIDList &bp_list) {
84301f16664SJim Ingham     for (lldb::break_id_t id : m_break_ids) {
84401f16664SJim Ingham       bp_list.AddBreakpointID(BreakpointID(id));
84501f16664SJim Ingham     }
84601f16664SJim Ingham   }
84701f16664SJim Ingham 
84801f16664SJim Ingham   TargetSP GetTarget() { return m_target_wp.lock(); }
84901f16664SJim Ingham 
85001f16664SJim Ingham private:
85101f16664SJim Ingham   std::vector<lldb::break_id_t> m_break_ids;
85201f16664SJim Ingham   TargetWP m_target_wp;
85301f16664SJim Ingham };
85401f16664SJim Ingham 
85501f16664SJim Ingham SBBreakpointList::SBBreakpointList(SBTarget &target)
856baf5664fSJonas Devlieghere     : m_opaque_sp(new SBBreakpointListImpl(target.GetSP())) {
857baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBBreakpointList, (lldb::SBTarget &), target);
858baf5664fSJonas Devlieghere }
85901f16664SJim Ingham 
86001f16664SJim Ingham SBBreakpointList::~SBBreakpointList() {}
86101f16664SJim Ingham 
86201f16664SJim Ingham size_t SBBreakpointList::GetSize() const {
863baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(size_t, SBBreakpointList, GetSize);
864baf5664fSJonas Devlieghere 
86501f16664SJim Ingham   if (!m_opaque_sp)
86601f16664SJim Ingham     return 0;
86701f16664SJim Ingham   else
86801f16664SJim Ingham     return m_opaque_sp->GetSize();
86901f16664SJim Ingham }
87001f16664SJim Ingham 
87101f16664SJim Ingham SBBreakpoint SBBreakpointList::GetBreakpointAtIndex(size_t idx) {
872baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBBreakpoint, SBBreakpointList, GetBreakpointAtIndex,
873baf5664fSJonas Devlieghere                      (size_t), idx);
874baf5664fSJonas Devlieghere 
87501f16664SJim Ingham   if (!m_opaque_sp)
876baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBBreakpoint());
87701f16664SJim Ingham 
87801f16664SJim Ingham   BreakpointSP bkpt_sp = m_opaque_sp->GetBreakpointAtIndex(idx);
879baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBBreakpoint(bkpt_sp));
88001f16664SJim Ingham }
88101f16664SJim Ingham 
8826d1e4696SJim Ingham SBBreakpoint SBBreakpointList::FindBreakpointByID(lldb::break_id_t id) {
883baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBBreakpoint, SBBreakpointList, FindBreakpointByID,
884baf5664fSJonas Devlieghere                      (lldb::break_id_t), id);
885baf5664fSJonas Devlieghere 
8866d1e4696SJim Ingham   if (!m_opaque_sp)
887baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBBreakpoint());
8886d1e4696SJim Ingham   BreakpointSP bkpt_sp = m_opaque_sp->FindBreakpointByID(id);
889baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBBreakpoint(bkpt_sp));
8906d1e4696SJim Ingham }
8916d1e4696SJim Ingham 
89201f16664SJim Ingham void SBBreakpointList::Append(const SBBreakpoint &sb_bkpt) {
893baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpointList, Append,
894baf5664fSJonas Devlieghere                      (const lldb::SBBreakpoint &), sb_bkpt);
895baf5664fSJonas Devlieghere 
89601f16664SJim Ingham   if (!sb_bkpt.IsValid())
89701f16664SJim Ingham     return;
89801f16664SJim Ingham   if (!m_opaque_sp)
89901f16664SJim Ingham     return;
9006ac84034SPavel Labath   m_opaque_sp->Append(sb_bkpt.m_opaque_wp.lock());
90101f16664SJim Ingham }
90201f16664SJim Ingham 
90301f16664SJim Ingham void SBBreakpointList::AppendByID(lldb::break_id_t id) {
904baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBBreakpointList, AppendByID, (lldb::break_id_t),
905baf5664fSJonas Devlieghere                      id);
906baf5664fSJonas Devlieghere 
90701f16664SJim Ingham   if (!m_opaque_sp)
90801f16664SJim Ingham     return;
90901f16664SJim Ingham   m_opaque_sp->AppendByID(id);
91001f16664SJim Ingham }
91101f16664SJim Ingham 
91201f16664SJim Ingham bool SBBreakpointList::AppendIfUnique(const SBBreakpoint &sb_bkpt) {
913baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBreakpointList, AppendIfUnique,
914baf5664fSJonas Devlieghere                      (const lldb::SBBreakpoint &), sb_bkpt);
915baf5664fSJonas Devlieghere 
91601f16664SJim Ingham   if (!sb_bkpt.IsValid())
91701f16664SJim Ingham     return false;
91801f16664SJim Ingham   if (!m_opaque_sp)
91901f16664SJim Ingham     return false;
9206ac84034SPavel Labath   return m_opaque_sp->AppendIfUnique(sb_bkpt.GetSP());
92101f16664SJim Ingham }
92201f16664SJim Ingham 
92301f16664SJim Ingham void SBBreakpointList::Clear() {
924baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBBreakpointList, Clear);
925baf5664fSJonas Devlieghere 
92601f16664SJim Ingham   if (m_opaque_sp)
92701f16664SJim Ingham     m_opaque_sp->Clear();
92801f16664SJim Ingham }
92901f16664SJim Ingham 
93001f16664SJim Ingham void SBBreakpointList::CopyToBreakpointIDList(
93101f16664SJim Ingham     lldb_private::BreakpointIDList &bp_id_list) {
93201f16664SJim Ingham   if (m_opaque_sp)
93301f16664SJim Ingham     m_opaque_sp->CopyToBreakpointIDList(bp_id_list);
93401f16664SJim Ingham }
935ae211eceSMichal Gorny 
936ae211eceSMichal Gorny namespace lldb_private {
937ae211eceSMichal Gorny namespace repro {
938ae211eceSMichal Gorny 
939ae211eceSMichal Gorny template <>
940ae211eceSMichal Gorny void RegisterMethods<SBBreakpoint>(Registry &R) {
941ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBreakpoint, ());
942ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBreakpoint, (const lldb::SBBreakpoint &));
943ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBreakpoint, (const lldb::BreakpointSP &));
944ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const lldb::SBBreakpoint &,
945ae211eceSMichal Gorny                        SBBreakpoint, operator=,(const lldb::SBBreakpoint &));
946ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool,
947ae211eceSMichal Gorny                        SBBreakpoint, operator==,(const lldb::SBBreakpoint &));
948ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool,
949ae211eceSMichal Gorny                        SBBreakpoint, operator!=,(const lldb::SBBreakpoint &));
950ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::break_id_t, SBBreakpoint, GetID, ());
951ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, IsValid, ());
952ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, operator bool, ());
953ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, ClearAllBreakpointSites, ());
954ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
955ae211eceSMichal Gorny                        FindLocationByAddress, (lldb::addr_t));
956ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::break_id_t, SBBreakpoint,
957ae211eceSMichal Gorny                        FindLocationIDByAddress, (lldb::addr_t));
958ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
959ae211eceSMichal Gorny                        FindLocationByID, (lldb::break_id_t));
960ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
961ae211eceSMichal Gorny                        GetLocationAtIndex, (uint32_t));
962ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetEnabled, (bool));
963ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, IsEnabled, ());
964ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetOneShot, (bool));
965ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, IsOneShot, ());
966ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, IsInternal, ());
967ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetIgnoreCount, (uint32_t));
968ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetCondition, (const char *));
969ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBBreakpoint, GetCondition, ());
970ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetAutoContinue, (bool));
971ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetAutoContinue, ());
972ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBreakpoint, GetHitCount, ());
973ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBreakpoint, GetIgnoreCount, ());
974ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetThreadID, (lldb::tid_t));
975ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::tid_t, SBBreakpoint, GetThreadID, ());
976ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetThreadIndex, (uint32_t));
977ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBreakpoint, GetThreadIndex, ());
978ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetThreadName, (const char *));
979ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBBreakpoint, GetThreadName, ());
980ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetQueueName, (const char *));
981ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBBreakpoint, GetQueueName, ());
982ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(size_t, SBBreakpoint, GetNumResolvedLocations,
983ae211eceSMichal Gorny                              ());
984ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(size_t, SBBreakpoint, GetNumLocations, ());
985ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetCommandLineCommands,
986ae211eceSMichal Gorny                        (lldb::SBStringList &));
987ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetCommandLineCommands,
988ae211eceSMichal Gorny                        (lldb::SBStringList &));
989ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetDescription,
990ae211eceSMichal Gorny                        (lldb::SBStream &));
991ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetDescription,
992ae211eceSMichal Gorny                        (lldb::SBStream &, bool));
993ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBBreakpoint, AddLocation,
994ae211eceSMichal Gorny                        (lldb::SBAddress &));
995ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, SetScriptCallbackFunction,
996ae211eceSMichal Gorny                        (const char *));
997ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBBreakpoint, SetScriptCallbackBody,
998ae211eceSMichal Gorny                        (const char *));
999ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, AddName, (const char *));
1000ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, RemoveName, (const char *));
1001ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpoint, MatchesName, (const char *));
1002ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpoint, GetNames, (lldb::SBStringList &));
1003ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBBreakpoint, EventIsBreakpointEvent,
1004ae211eceSMichal Gorny                               (const lldb::SBEvent &));
1005ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::BreakpointEventType, SBBreakpoint,
1006ae211eceSMichal Gorny                               GetBreakpointEventTypeFromEvent,
1007ae211eceSMichal Gorny                               (const lldb::SBEvent &));
1008ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBBreakpoint, SBBreakpoint,
1009ae211eceSMichal Gorny                               GetBreakpointFromEvent,
1010ae211eceSMichal Gorny                               (const lldb::SBEvent &));
1011ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBBreakpointLocation, SBBreakpoint,
1012ae211eceSMichal Gorny                               GetBreakpointLocationAtIndexFromEvent,
1013ae211eceSMichal Gorny                               (const lldb::SBEvent &, uint32_t));
1014ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(uint32_t, SBBreakpoint,
1015ae211eceSMichal Gorny                               GetNumBreakpointLocationsFromEvent,
1016ae211eceSMichal Gorny                               (const lldb::SBEvent &));
1017ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, IsHardware, ());
1018ae211eceSMichal Gorny }
1019ae211eceSMichal Gorny 
1020ae211eceSMichal Gorny template <>
1021ae211eceSMichal Gorny void RegisterMethods<SBBreakpointList>(Registry &R) {
1022ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBreakpointList, (lldb::SBTarget &));
1023ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(size_t, SBBreakpointList, GetSize, ());
1024ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBBreakpointList,
1025ae211eceSMichal Gorny                        GetBreakpointAtIndex, (size_t));
1026ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBBreakpointList,
1027ae211eceSMichal Gorny                        FindBreakpointByID, (lldb::break_id_t));
1028ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpointList, Append,
1029ae211eceSMichal Gorny                        (const lldb::SBBreakpoint &));
1030ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpointList, AppendByID,
1031ae211eceSMichal Gorny                        (lldb::break_id_t));
1032ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBreakpointList, AppendIfUnique,
1033ae211eceSMichal Gorny                        (const lldb::SBBreakpoint &));
1034ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBBreakpointList, Clear, ());
1035ae211eceSMichal Gorny }
1036ae211eceSMichal Gorny 
1037ae211eceSMichal Gorny }
1038ae211eceSMichal Gorny }
1039