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; 6530fdc8d8SChris Lattner return *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 } 935*ae211eceSMichal Gorny 936*ae211eceSMichal Gorny namespace lldb_private { 937*ae211eceSMichal Gorny namespace repro { 938*ae211eceSMichal Gorny 939*ae211eceSMichal Gorny template <> 940*ae211eceSMichal Gorny void RegisterMethods<SBBreakpoint>(Registry &R) { 941*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBBreakpoint, ()); 942*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBBreakpoint, (const lldb::SBBreakpoint &)); 943*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBBreakpoint, (const lldb::BreakpointSP &)); 944*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const lldb::SBBreakpoint &, 945*ae211eceSMichal Gorny SBBreakpoint, operator=,(const lldb::SBBreakpoint &)); 946*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, 947*ae211eceSMichal Gorny SBBreakpoint, operator==,(const lldb::SBBreakpoint &)); 948*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, 949*ae211eceSMichal Gorny SBBreakpoint, operator!=,(const lldb::SBBreakpoint &)); 950*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::break_id_t, SBBreakpoint, GetID, ()); 951*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, IsValid, ()); 952*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, operator bool, ()); 953*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, ClearAllBreakpointSites, ()); 954*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBBreakpointLocation, SBBreakpoint, 955*ae211eceSMichal Gorny FindLocationByAddress, (lldb::addr_t)); 956*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::break_id_t, SBBreakpoint, 957*ae211eceSMichal Gorny FindLocationIDByAddress, (lldb::addr_t)); 958*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBBreakpointLocation, SBBreakpoint, 959*ae211eceSMichal Gorny FindLocationByID, (lldb::break_id_t)); 960*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBBreakpointLocation, SBBreakpoint, 961*ae211eceSMichal Gorny GetLocationAtIndex, (uint32_t)); 962*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetEnabled, (bool)); 963*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, IsEnabled, ()); 964*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetOneShot, (bool)); 965*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, IsOneShot, ()); 966*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, IsInternal, ()); 967*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetIgnoreCount, (uint32_t)); 968*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetCondition, (const char *)); 969*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBBreakpoint, GetCondition, ()); 970*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetAutoContinue, (bool)); 971*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetAutoContinue, ()); 972*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(uint32_t, SBBreakpoint, GetHitCount, ()); 973*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(uint32_t, SBBreakpoint, GetIgnoreCount, ()); 974*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetThreadID, (lldb::tid_t)); 975*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::tid_t, SBBreakpoint, GetThreadID, ()); 976*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetThreadIndex, (uint32_t)); 977*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(uint32_t, SBBreakpoint, GetThreadIndex, ()); 978*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetThreadName, (const char *)); 979*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBBreakpoint, GetThreadName, ()); 980*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetQueueName, (const char *)); 981*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBBreakpoint, GetQueueName, ()); 982*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(size_t, SBBreakpoint, GetNumResolvedLocations, 983*ae211eceSMichal Gorny ()); 984*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(size_t, SBBreakpoint, GetNumLocations, ()); 985*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetCommandLineCommands, 986*ae211eceSMichal Gorny (lldb::SBStringList &)); 987*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetCommandLineCommands, 988*ae211eceSMichal Gorny (lldb::SBStringList &)); 989*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetDescription, 990*ae211eceSMichal Gorny (lldb::SBStream &)); 991*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, GetDescription, 992*ae211eceSMichal Gorny (lldb::SBStream &, bool)); 993*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBBreakpoint, AddLocation, 994*ae211eceSMichal Gorny (lldb::SBAddress &)); 995*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, SetScriptCallbackFunction, 996*ae211eceSMichal Gorny (const char *)); 997*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBBreakpoint, SetScriptCallbackBody, 998*ae211eceSMichal Gorny (const char *)); 999*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, AddName, (const char *)); 1000*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, RemoveName, (const char *)); 1001*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpoint, MatchesName, (const char *)); 1002*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpoint, GetNames, (lldb::SBStringList &)); 1003*ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(bool, SBBreakpoint, EventIsBreakpointEvent, 1004*ae211eceSMichal Gorny (const lldb::SBEvent &)); 1005*ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::BreakpointEventType, SBBreakpoint, 1006*ae211eceSMichal Gorny GetBreakpointEventTypeFromEvent, 1007*ae211eceSMichal Gorny (const lldb::SBEvent &)); 1008*ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBBreakpoint, SBBreakpoint, 1009*ae211eceSMichal Gorny GetBreakpointFromEvent, 1010*ae211eceSMichal Gorny (const lldb::SBEvent &)); 1011*ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBBreakpointLocation, SBBreakpoint, 1012*ae211eceSMichal Gorny GetBreakpointLocationAtIndexFromEvent, 1013*ae211eceSMichal Gorny (const lldb::SBEvent &, uint32_t)); 1014*ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(uint32_t, SBBreakpoint, 1015*ae211eceSMichal Gorny GetNumBreakpointLocationsFromEvent, 1016*ae211eceSMichal Gorny (const lldb::SBEvent &)); 1017*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBBreakpoint, IsHardware, ()); 1018*ae211eceSMichal Gorny } 1019*ae211eceSMichal Gorny 1020*ae211eceSMichal Gorny template <> 1021*ae211eceSMichal Gorny void RegisterMethods<SBBreakpointList>(Registry &R) { 1022*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBBreakpointList, (lldb::SBTarget &)); 1023*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(size_t, SBBreakpointList, GetSize, ()); 1024*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBBreakpointList, 1025*ae211eceSMichal Gorny GetBreakpointAtIndex, (size_t)); 1026*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBBreakpointList, 1027*ae211eceSMichal Gorny FindBreakpointByID, (lldb::break_id_t)); 1028*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpointList, Append, 1029*ae211eceSMichal Gorny (const lldb::SBBreakpoint &)); 1030*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpointList, AppendByID, 1031*ae211eceSMichal Gorny (lldb::break_id_t)); 1032*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBBreakpointList, AppendIfUnique, 1033*ae211eceSMichal Gorny (const lldb::SBBreakpoint &)); 1034*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBBreakpointList, Clear, ()); 1035*ae211eceSMichal Gorny } 1036*ae211eceSMichal Gorny 1037*ae211eceSMichal Gorny } 1038*ae211eceSMichal Gorny } 1039