130fdc8d8SChris Lattner //===-- SBBreakpoint.cpp ----------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 10*dbb0abbfSEugene Zelenko // C Includes 11*dbb0abbfSEugene Zelenko // C++ Includes 12*dbb0abbfSEugene Zelenko // Other libraries and framework includes 13*dbb0abbfSEugene Zelenko // Project includes 1430fdc8d8SChris Lattner #include "lldb/API/SBBreakpoint.h" 1530fdc8d8SChris Lattner #include "lldb/API/SBBreakpointLocation.h" 1630fdc8d8SChris Lattner #include "lldb/API/SBDebugger.h" 179fed0d85SGreg Clayton #include "lldb/API/SBEvent.h" 1830fdc8d8SChris Lattner #include "lldb/API/SBProcess.h" 19dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 205e09c8c3SJim Ingham #include "lldb/API/SBStringList.h" 2130fdc8d8SChris Lattner #include "lldb/API/SBThread.h" 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner #include "lldb/Breakpoint/Breakpoint.h" 2430fdc8d8SChris Lattner #include "lldb/Breakpoint/BreakpointLocation.h" 2530fdc8d8SChris Lattner #include "lldb/Breakpoint/StoppointCallbackContext.h" 2630fdc8d8SChris Lattner #include "lldb/Core/Address.h" 27d80102e4SJim Ingham #include "lldb/Core/Debugger.h" 28ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 2930fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 3030fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 31d80102e4SJim Ingham #include "lldb/Interpreter/CommandInterpreter.h" 32d80102e4SJim Ingham #include "lldb/Interpreter/ScriptInterpreter.h" 3330fdc8d8SChris Lattner #include "lldb/Target/Process.h" 34d5944cd1SGreg Clayton #include "lldb/Target/SectionLoadList.h" 3530fdc8d8SChris Lattner #include "lldb/Target/Target.h" 3662b02c61SJim Ingham #include "lldb/Target/Thread.h" 3762b02c61SJim Ingham #include "lldb/Target/ThreadSpec.h" 3830fdc8d8SChris Lattner 3930fdc8d8SChris Lattner #include "lldb/lldb-enumerations.h" 4030fdc8d8SChris Lattner 4130fdc8d8SChris Lattner using namespace lldb; 4230fdc8d8SChris Lattner using namespace lldb_private; 4330fdc8d8SChris Lattner 4430fdc8d8SChris Lattner struct CallbackData 4530fdc8d8SChris Lattner { 4630fdc8d8SChris Lattner SBBreakpoint::BreakpointHitCallback callback; 4730fdc8d8SChris Lattner void *callback_baton; 4830fdc8d8SChris Lattner }; 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner class SBBreakpointCallbackBaton : public Baton 5130fdc8d8SChris Lattner { 5230fdc8d8SChris Lattner public: 5330fdc8d8SChris Lattner SBBreakpointCallbackBaton (SBBreakpoint::BreakpointHitCallback callback, void *baton) : 5430fdc8d8SChris Lattner Baton (new CallbackData) 5530fdc8d8SChris Lattner { 5630fdc8d8SChris Lattner CallbackData *data = (CallbackData *)m_data; 5730fdc8d8SChris Lattner data->callback = callback; 5830fdc8d8SChris Lattner data->callback_baton = baton; 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 61*dbb0abbfSEugene Zelenko ~SBBreakpointCallbackBaton() override 6230fdc8d8SChris Lattner { 6330fdc8d8SChris Lattner CallbackData *data = (CallbackData *)m_data; 6430fdc8d8SChris Lattner 6530fdc8d8SChris Lattner if (data) 6630fdc8d8SChris Lattner { 6730fdc8d8SChris Lattner delete data; 68*dbb0abbfSEugene Zelenko m_data = nullptr; 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner } 7130fdc8d8SChris Lattner }; 7230fdc8d8SChris Lattner 7330fdc8d8SChris Lattner SBBreakpoint::SBBreakpoint () : 746611103cSGreg Clayton m_opaque_sp () 7530fdc8d8SChris Lattner { 7630fdc8d8SChris Lattner } 7730fdc8d8SChris Lattner 7830fdc8d8SChris Lattner SBBreakpoint::SBBreakpoint (const SBBreakpoint& rhs) : 796611103cSGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 8030fdc8d8SChris Lattner { 8130fdc8d8SChris Lattner } 8230fdc8d8SChris Lattner 8330fdc8d8SChris Lattner SBBreakpoint::SBBreakpoint (const lldb::BreakpointSP &bp_sp) : 846611103cSGreg Clayton m_opaque_sp (bp_sp) 8530fdc8d8SChris Lattner { 8630fdc8d8SChris Lattner } 8730fdc8d8SChris Lattner 88*dbb0abbfSEugene Zelenko SBBreakpoint::~SBBreakpoint() = default; 8930fdc8d8SChris Lattner 9030fdc8d8SChris Lattner const SBBreakpoint & 9130fdc8d8SChris Lattner SBBreakpoint::operator = (const SBBreakpoint& rhs) 9230fdc8d8SChris Lattner { 9330fdc8d8SChris Lattner if (this != &rhs) 946611103cSGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 9530fdc8d8SChris Lattner return *this; 9630fdc8d8SChris Lattner } 9730fdc8d8SChris Lattner 98ac2eb9b1SGreg Clayton bool 99ac2eb9b1SGreg Clayton SBBreakpoint::operator == (const lldb::SBBreakpoint& rhs) 100ac2eb9b1SGreg Clayton { 101ac2eb9b1SGreg Clayton if (m_opaque_sp && rhs.m_opaque_sp) 102ac2eb9b1SGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 103ac2eb9b1SGreg Clayton return false; 104ac2eb9b1SGreg Clayton } 105ac2eb9b1SGreg Clayton 106c3387333SEnrico Granata bool 107c3387333SEnrico Granata SBBreakpoint::operator != (const lldb::SBBreakpoint& rhs) 108c3387333SEnrico Granata { 109c3387333SEnrico Granata if (m_opaque_sp && rhs.m_opaque_sp) 110c3387333SEnrico Granata return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 111c3387333SEnrico Granata return (m_opaque_sp && !rhs.m_opaque_sp) || (rhs.m_opaque_sp && !m_opaque_sp); 112c3387333SEnrico Granata } 113c3387333SEnrico Granata 11430fdc8d8SChris Lattner break_id_t 11530fdc8d8SChris Lattner SBBreakpoint::GetID () const 11630fdc8d8SChris Lattner { 1175160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 118ceb6b139SCaroline Tice 119af67cecdSGreg Clayton break_id_t break_id = LLDB_INVALID_BREAK_ID; 1206611103cSGreg Clayton if (m_opaque_sp) 121af67cecdSGreg Clayton break_id = m_opaque_sp->GetID(); 122af67cecdSGreg Clayton 123ceb6b139SCaroline Tice if (log) 124af67cecdSGreg Clayton { 125af67cecdSGreg Clayton if (break_id == LLDB_INVALID_BREAK_ID) 126324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetID () => LLDB_INVALID_BREAK_ID", 127324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get())); 128af67cecdSGreg Clayton else 129324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetID () => %u", 130324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), break_id); 131ceb6b139SCaroline Tice } 132ceb6b139SCaroline Tice 133af67cecdSGreg Clayton return break_id; 13430fdc8d8SChris Lattner } 13530fdc8d8SChris Lattner 13630fdc8d8SChris Lattner bool 13730fdc8d8SChris Lattner SBBreakpoint::IsValid() const 13830fdc8d8SChris Lattner { 139e029fa57SJim Ingham if (!m_opaque_sp) 140e029fa57SJim Ingham return false; 141e029fa57SJim Ingham else if (m_opaque_sp->GetTarget().GetBreakpointByID(m_opaque_sp->GetID())) 142e029fa57SJim Ingham return true; 143e029fa57SJim Ingham else 144e029fa57SJim Ingham return false; 14530fdc8d8SChris Lattner } 14630fdc8d8SChris Lattner 14730fdc8d8SChris Lattner void 14830fdc8d8SChris Lattner SBBreakpoint::ClearAllBreakpointSites () 14930fdc8d8SChris Lattner { 1506611103cSGreg Clayton if (m_opaque_sp) 151af67cecdSGreg Clayton { 152af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 1536611103cSGreg Clayton m_opaque_sp->ClearAllBreakpointSites (); 15430fdc8d8SChris Lattner } 155af67cecdSGreg Clayton } 15630fdc8d8SChris Lattner 15730fdc8d8SChris Lattner SBBreakpointLocation 15830fdc8d8SChris Lattner SBBreakpoint::FindLocationByAddress (addr_t vm_addr) 15930fdc8d8SChris Lattner { 16030fdc8d8SChris Lattner SBBreakpointLocation sb_bp_location; 16130fdc8d8SChris Lattner 1626611103cSGreg Clayton if (m_opaque_sp) 16330fdc8d8SChris Lattner { 16430fdc8d8SChris Lattner if (vm_addr != LLDB_INVALID_ADDRESS) 16530fdc8d8SChris Lattner { 166af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 16730fdc8d8SChris Lattner Address address; 168f5e56de0SGreg Clayton Target &target = m_opaque_sp->GetTarget(); 169*dbb0abbfSEugene Zelenko if (!target.GetSectionLoadList().ResolveLoadAddress(vm_addr, address)) 17030fdc8d8SChris Lattner { 171e72dfb32SGreg Clayton address.SetRawAddress (vm_addr); 17230fdc8d8SChris Lattner } 1736611103cSGreg Clayton sb_bp_location.SetLocation (m_opaque_sp->FindLocationByAddress (address)); 17430fdc8d8SChris Lattner } 17530fdc8d8SChris Lattner } 17630fdc8d8SChris Lattner return sb_bp_location; 17730fdc8d8SChris Lattner } 17830fdc8d8SChris Lattner 17930fdc8d8SChris Lattner break_id_t 18030fdc8d8SChris Lattner SBBreakpoint::FindLocationIDByAddress (addr_t vm_addr) 18130fdc8d8SChris Lattner { 182af67cecdSGreg Clayton break_id_t break_id = LLDB_INVALID_BREAK_ID; 18330fdc8d8SChris Lattner 184af67cecdSGreg Clayton if (m_opaque_sp && vm_addr != LLDB_INVALID_ADDRESS) 18530fdc8d8SChris Lattner { 186af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 18730fdc8d8SChris Lattner Address address; 188f5e56de0SGreg Clayton Target &target = m_opaque_sp->GetTarget(); 189*dbb0abbfSEugene Zelenko if (!target.GetSectionLoadList().ResolveLoadAddress(vm_addr, address)) 19030fdc8d8SChris Lattner { 191e72dfb32SGreg Clayton address.SetRawAddress (vm_addr); 19230fdc8d8SChris Lattner } 193af67cecdSGreg Clayton break_id = m_opaque_sp->FindLocationIDByAddress (address); 19430fdc8d8SChris Lattner } 19530fdc8d8SChris Lattner 196af67cecdSGreg Clayton return break_id; 19730fdc8d8SChris Lattner } 19830fdc8d8SChris Lattner 19930fdc8d8SChris Lattner SBBreakpointLocation 20030fdc8d8SChris Lattner SBBreakpoint::FindLocationByID (break_id_t bp_loc_id) 20130fdc8d8SChris Lattner { 20230fdc8d8SChris Lattner SBBreakpointLocation sb_bp_location; 20330fdc8d8SChris Lattner 2046611103cSGreg Clayton if (m_opaque_sp) 205af67cecdSGreg Clayton { 206af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2076611103cSGreg Clayton sb_bp_location.SetLocation (m_opaque_sp->FindLocationByID (bp_loc_id)); 208af67cecdSGreg Clayton } 20930fdc8d8SChris Lattner 21030fdc8d8SChris Lattner return sb_bp_location; 21130fdc8d8SChris Lattner } 21230fdc8d8SChris Lattner 21330fdc8d8SChris Lattner SBBreakpointLocation 21430fdc8d8SChris Lattner SBBreakpoint::GetLocationAtIndex (uint32_t index) 21530fdc8d8SChris Lattner { 21630fdc8d8SChris Lattner SBBreakpointLocation sb_bp_location; 21730fdc8d8SChris Lattner 2186611103cSGreg Clayton if (m_opaque_sp) 219af67cecdSGreg Clayton { 220af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2216611103cSGreg Clayton sb_bp_location.SetLocation (m_opaque_sp->GetLocationAtIndex (index)); 222af67cecdSGreg Clayton } 22330fdc8d8SChris Lattner 22430fdc8d8SChris Lattner return sb_bp_location; 22530fdc8d8SChris Lattner } 22630fdc8d8SChris Lattner 22730fdc8d8SChris Lattner void 22830fdc8d8SChris Lattner SBBreakpoint::SetEnabled (bool enable) 22930fdc8d8SChris Lattner { 2305160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 231ceb6b139SCaroline Tice 232ceb6b139SCaroline Tice if (log) 233324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetEnabled (enabled=%i)", 234324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), enable); 235ceb6b139SCaroline Tice 2366611103cSGreg Clayton if (m_opaque_sp) 237af67cecdSGreg Clayton { 238af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2396611103cSGreg Clayton m_opaque_sp->SetEnabled (enable); 24030fdc8d8SChris Lattner } 241af67cecdSGreg Clayton } 24230fdc8d8SChris Lattner 24330fdc8d8SChris Lattner bool 24430fdc8d8SChris Lattner SBBreakpoint::IsEnabled () 24530fdc8d8SChris Lattner { 2466611103cSGreg Clayton if (m_opaque_sp) 247af67cecdSGreg Clayton { 248af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2496611103cSGreg Clayton return m_opaque_sp->IsEnabled(); 250af67cecdSGreg Clayton } 25130fdc8d8SChris Lattner else 25230fdc8d8SChris Lattner return false; 25330fdc8d8SChris Lattner } 25430fdc8d8SChris Lattner 255ca36cd16SJim Ingham void 256ca36cd16SJim Ingham SBBreakpoint::SetOneShot (bool one_shot) 257ca36cd16SJim Ingham { 2585160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 259ca36cd16SJim Ingham 260ca36cd16SJim Ingham if (log) 261324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetOneShot (one_shot=%i)", 262324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), one_shot); 263ca36cd16SJim Ingham 264ca36cd16SJim Ingham if (m_opaque_sp) 265ca36cd16SJim Ingham { 266ca36cd16SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 267ca36cd16SJim Ingham m_opaque_sp->SetOneShot (one_shot); 268ca36cd16SJim Ingham } 269ca36cd16SJim Ingham } 270ca36cd16SJim Ingham 271ca36cd16SJim Ingham bool 272ca36cd16SJim Ingham SBBreakpoint::IsOneShot () const 273ca36cd16SJim Ingham { 274ca36cd16SJim Ingham if (m_opaque_sp) 275ca36cd16SJim Ingham { 276ca36cd16SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 277ca36cd16SJim Ingham return m_opaque_sp->IsOneShot(); 278ca36cd16SJim Ingham } 279ca36cd16SJim Ingham else 280ca36cd16SJim Ingham return false; 281ca36cd16SJim Ingham } 282ca36cd16SJim Ingham 28311c8108dSJim Ingham bool 28411c8108dSJim Ingham SBBreakpoint::IsInternal () 28511c8108dSJim Ingham { 28611c8108dSJim Ingham if (m_opaque_sp) 28711c8108dSJim Ingham { 28811c8108dSJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 28911c8108dSJim Ingham return m_opaque_sp->IsInternal(); 29011c8108dSJim Ingham } 29111c8108dSJim Ingham else 29211c8108dSJim Ingham return false; 29311c8108dSJim Ingham } 29411c8108dSJim Ingham 29530fdc8d8SChris Lattner void 296c982c768SGreg Clayton SBBreakpoint::SetIgnoreCount (uint32_t count) 29730fdc8d8SChris Lattner { 2985160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 299ceb6b139SCaroline Tice 300ceb6b139SCaroline Tice if (log) 301324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetIgnoreCount (count=%u)", 302324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), count); 303ceb6b139SCaroline Tice 3046611103cSGreg Clayton if (m_opaque_sp) 305af67cecdSGreg Clayton { 306af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 3076611103cSGreg Clayton m_opaque_sp->SetIgnoreCount (count); 30830fdc8d8SChris Lattner } 309af67cecdSGreg Clayton } 31030fdc8d8SChris Lattner 311041a12fcSJim Ingham void 312041a12fcSJim Ingham SBBreakpoint::SetCondition (const char *condition) 313041a12fcSJim Ingham { 314af67cecdSGreg Clayton if (m_opaque_sp) 315af67cecdSGreg Clayton { 316af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 317041a12fcSJim Ingham m_opaque_sp->SetCondition (condition); 318041a12fcSJim Ingham } 319af67cecdSGreg Clayton } 320041a12fcSJim Ingham 321041a12fcSJim Ingham const char * 322041a12fcSJim Ingham SBBreakpoint::GetCondition () 323041a12fcSJim Ingham { 324af67cecdSGreg Clayton if (m_opaque_sp) 325af67cecdSGreg Clayton { 326af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 327041a12fcSJim Ingham return m_opaque_sp->GetConditionText (); 328041a12fcSJim Ingham } 329*dbb0abbfSEugene Zelenko return nullptr; 330af67cecdSGreg Clayton } 331041a12fcSJim Ingham 332c982c768SGreg Clayton uint32_t 3339fed0d85SGreg Clayton SBBreakpoint::GetHitCount () const 3349fed0d85SGreg Clayton { 3354838131bSGreg Clayton uint32_t count = 0; 3369fed0d85SGreg Clayton if (m_opaque_sp) 337af67cecdSGreg Clayton { 338af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 3394838131bSGreg Clayton count = m_opaque_sp->GetHitCount(); 340af67cecdSGreg Clayton } 3414838131bSGreg Clayton 3425160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 343ceb6b139SCaroline Tice if (log) 344324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetHitCount () => %u", 345324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), count); 3464838131bSGreg Clayton 3474838131bSGreg Clayton return count; 348ceb6b139SCaroline Tice } 3499fed0d85SGreg Clayton 3509fed0d85SGreg Clayton uint32_t 35130fdc8d8SChris Lattner SBBreakpoint::GetIgnoreCount () const 35230fdc8d8SChris Lattner { 3534838131bSGreg Clayton uint32_t count = 0; 3546611103cSGreg Clayton if (m_opaque_sp) 355af67cecdSGreg Clayton { 356af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 3574838131bSGreg Clayton count = m_opaque_sp->GetIgnoreCount(); 358af67cecdSGreg Clayton } 3594838131bSGreg Clayton 3605160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3614838131bSGreg Clayton if (log) 362324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetIgnoreCount () => %u", 363324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), count); 3644838131bSGreg Clayton 3654838131bSGreg Clayton return count; 36630fdc8d8SChris Lattner } 36730fdc8d8SChris Lattner 36830fdc8d8SChris Lattner void 3694838131bSGreg Clayton SBBreakpoint::SetThreadID (tid_t tid) 37030fdc8d8SChris Lattner { 3716611103cSGreg Clayton if (m_opaque_sp) 372af67cecdSGreg Clayton { 373af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 3744838131bSGreg Clayton m_opaque_sp->SetThreadID (tid); 375af67cecdSGreg Clayton } 3765160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3774838131bSGreg Clayton if (log) 378324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetThreadID (tid=0x%4.4" PRIx64 ")", 379324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), tid); 38030fdc8d8SChris Lattner } 38130fdc8d8SChris Lattner 38230fdc8d8SChris Lattner tid_t 38330fdc8d8SChris Lattner SBBreakpoint::GetThreadID () 38430fdc8d8SChris Lattner { 3854838131bSGreg Clayton tid_t tid = LLDB_INVALID_THREAD_ID; 3866611103cSGreg Clayton if (m_opaque_sp) 387af67cecdSGreg Clayton { 388af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 3894838131bSGreg Clayton tid = m_opaque_sp->GetThreadID(); 390af67cecdSGreg Clayton } 39130fdc8d8SChris Lattner 3925160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3934838131bSGreg Clayton if (log) 394324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetThreadID () => 0x%4.4" PRIx64, 395324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), tid); 3964838131bSGreg Clayton return tid; 39730fdc8d8SChris Lattner } 39830fdc8d8SChris Lattner 39962b02c61SJim Ingham void 40062b02c61SJim Ingham SBBreakpoint::SetThreadIndex (uint32_t index) 40162b02c61SJim Ingham { 4025160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4034838131bSGreg Clayton if (log) 404324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetThreadIndex (%u)", 405324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), index); 4066611103cSGreg Clayton if (m_opaque_sp) 407af67cecdSGreg Clayton { 408af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 4096611103cSGreg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetIndex (index); 41062b02c61SJim Ingham } 411af67cecdSGreg Clayton } 41262b02c61SJim Ingham 41362b02c61SJim Ingham uint32_t 41462b02c61SJim Ingham SBBreakpoint::GetThreadIndex() const 41562b02c61SJim Ingham { 416bdf4c6acSGreg Clayton uint32_t thread_idx = UINT32_MAX; 4176611103cSGreg Clayton if (m_opaque_sp) 41862b02c61SJim Ingham { 419af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 420af67cecdSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate(); 421*dbb0abbfSEugene Zelenko if (thread_spec != nullptr) 4224838131bSGreg Clayton thread_idx = thread_spec->GetIndex(); 42362b02c61SJim Ingham } 4245160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4254838131bSGreg Clayton if (log) 426324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetThreadIndex () => %u", 427324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), thread_idx); 4284838131bSGreg Clayton 429763d1a17SJohnny Chen return thread_idx; 43062b02c61SJim Ingham } 43162b02c61SJim Ingham 43262b02c61SJim Ingham void 43362b02c61SJim Ingham SBBreakpoint::SetThreadName (const char *thread_name) 43462b02c61SJim Ingham { 4355160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4364838131bSGreg Clayton if (log) 437324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetThreadName (%s)", 438324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), thread_name); 4394838131bSGreg Clayton 4406611103cSGreg Clayton if (m_opaque_sp) 441af67cecdSGreg Clayton { 442af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 4436611103cSGreg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetName (thread_name); 44462b02c61SJim Ingham } 445af67cecdSGreg Clayton } 44662b02c61SJim Ingham 44762b02c61SJim Ingham const char * 44862b02c61SJim Ingham SBBreakpoint::GetThreadName () const 44962b02c61SJim Ingham { 450*dbb0abbfSEugene Zelenko const char *name = nullptr; 4516611103cSGreg Clayton if (m_opaque_sp) 45262b02c61SJim Ingham { 453af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 454af67cecdSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate(); 455*dbb0abbfSEugene Zelenko if (thread_spec != nullptr) 4564838131bSGreg Clayton name = thread_spec->GetName(); 45762b02c61SJim Ingham } 4585160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4594838131bSGreg Clayton if (log) 460324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetThreadName () => %s", 461324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), name); 4624838131bSGreg Clayton 4634838131bSGreg Clayton return name; 46462b02c61SJim Ingham } 46562b02c61SJim Ingham 46662b02c61SJim Ingham void 46762b02c61SJim Ingham SBBreakpoint::SetQueueName (const char *queue_name) 46862b02c61SJim Ingham { 4695160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4704838131bSGreg Clayton if (log) 471324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetQueueName (%s)", 472324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), queue_name); 4736611103cSGreg Clayton if (m_opaque_sp) 474af67cecdSGreg Clayton { 475af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 4766611103cSGreg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetQueueName (queue_name); 47762b02c61SJim Ingham } 478af67cecdSGreg Clayton } 47962b02c61SJim Ingham 48062b02c61SJim Ingham const char * 48162b02c61SJim Ingham SBBreakpoint::GetQueueName () const 48262b02c61SJim Ingham { 483*dbb0abbfSEugene Zelenko const char *name = nullptr; 4846611103cSGreg Clayton if (m_opaque_sp) 48562b02c61SJim Ingham { 486af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 487af67cecdSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate(); 488af67cecdSGreg Clayton if (thread_spec) 4894838131bSGreg Clayton name = thread_spec->GetQueueName(); 49062b02c61SJim Ingham } 4915160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4924838131bSGreg Clayton if (log) 493324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetQueueName () => %s", 494324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), name); 4954838131bSGreg Clayton 4964838131bSGreg Clayton return name; 49762b02c61SJim Ingham } 49862b02c61SJim Ingham 49930fdc8d8SChris Lattner size_t 50030fdc8d8SChris Lattner SBBreakpoint::GetNumResolvedLocations() const 50130fdc8d8SChris Lattner { 5024838131bSGreg Clayton size_t num_resolved = 0; 5036611103cSGreg Clayton if (m_opaque_sp) 504af67cecdSGreg Clayton { 505af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 5064838131bSGreg Clayton num_resolved = m_opaque_sp->GetNumResolvedLocations(); 507af67cecdSGreg Clayton } 5085160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5094838131bSGreg Clayton if (log) 510324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetNumResolvedLocations () => %" PRIu64, 511324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), 512324a1036SSaleem Abdulrasool static_cast<uint64_t>(num_resolved)); 5134838131bSGreg Clayton return num_resolved; 51430fdc8d8SChris Lattner } 51530fdc8d8SChris Lattner 51630fdc8d8SChris Lattner size_t 51730fdc8d8SChris Lattner SBBreakpoint::GetNumLocations() const 51830fdc8d8SChris Lattner { 5194838131bSGreg Clayton size_t num_locs = 0; 5206611103cSGreg Clayton if (m_opaque_sp) 521af67cecdSGreg Clayton { 522af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 5234838131bSGreg Clayton num_locs = m_opaque_sp->GetNumLocations(); 524af67cecdSGreg Clayton } 5255160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5264838131bSGreg Clayton if (log) 527324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::GetNumLocations () => %" PRIu64, 528324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), 529324a1036SSaleem Abdulrasool static_cast<uint64_t>(num_locs)); 5304838131bSGreg Clayton return num_locs; 53130fdc8d8SChris Lattner } 53230fdc8d8SChris Lattner 533dde9cff3SCaroline Tice bool 53405faeb71SGreg Clayton SBBreakpoint::GetDescription (SBStream &s) 53530fdc8d8SChris Lattner { 5366611103cSGreg Clayton if (m_opaque_sp) 53730fdc8d8SChris Lattner { 538af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 53905faeb71SGreg Clayton s.Printf("SBBreakpoint: id = %i, ", m_opaque_sp->GetID()); 54005faeb71SGreg Clayton m_opaque_sp->GetResolverDescription (s.get()); 54105faeb71SGreg Clayton m_opaque_sp->GetFilterDescription (s.get()); 54205faeb71SGreg Clayton const size_t num_locations = m_opaque_sp->GetNumLocations (); 543d01b2953SDaniel Malea s.Printf(", locations = %" PRIu64, (uint64_t)num_locations); 544dde9cff3SCaroline Tice return true; 545dde9cff3SCaroline Tice } 54605faeb71SGreg Clayton s.Printf ("No value"); 54705faeb71SGreg Clayton return false; 54805faeb71SGreg Clayton } 549dde9cff3SCaroline Tice 55030fdc8d8SChris Lattner bool 551*dbb0abbfSEugene Zelenko SBBreakpoint::PrivateBreakpointHitCallback(void *baton, 55230fdc8d8SChris Lattner StoppointCallbackContext *ctx, 55330fdc8d8SChris Lattner lldb::user_id_t break_id, 554*dbb0abbfSEugene Zelenko lldb::user_id_t break_loc_id) 55530fdc8d8SChris Lattner { 5561ac04c30SGreg Clayton ExecutionContext exe_ctx (ctx->exe_ctx_ref); 5571ac04c30SGreg Clayton BreakpointSP bp_sp(exe_ctx.GetTargetRef().GetBreakpointList().FindBreakpointByID(break_id)); 55830fdc8d8SChris Lattner if (baton && bp_sp) 55930fdc8d8SChris Lattner { 56030fdc8d8SChris Lattner CallbackData *data = (CallbackData *)baton; 56130fdc8d8SChris Lattner lldb_private::Breakpoint *bp = bp_sp.get(); 56230fdc8d8SChris Lattner if (bp && data->callback) 56330fdc8d8SChris Lattner { 5641ac04c30SGreg Clayton Process *process = exe_ctx.GetProcessPtr(); 565c14ee32dSGreg Clayton if (process) 56630fdc8d8SChris Lattner { 567e1cd1be6SGreg Clayton SBProcess sb_process (process->shared_from_this()); 56830fdc8d8SChris Lattner SBThread sb_thread; 56930fdc8d8SChris Lattner SBBreakpointLocation sb_location; 57030fdc8d8SChris Lattner assert (bp_sp); 57130fdc8d8SChris Lattner sb_location.SetLocation (bp_sp->FindLocationByID (break_loc_id)); 5721ac04c30SGreg Clayton Thread *thread = exe_ctx.GetThreadPtr(); 573c14ee32dSGreg Clayton if (thread) 574e1cd1be6SGreg Clayton sb_thread.SetThread(thread->shared_from_this()); 57530fdc8d8SChris Lattner 57630fdc8d8SChris Lattner return data->callback (data->callback_baton, 57730fdc8d8SChris Lattner sb_process, 57830fdc8d8SChris Lattner sb_thread, 57930fdc8d8SChris Lattner sb_location); 58030fdc8d8SChris Lattner } 58130fdc8d8SChris Lattner } 58230fdc8d8SChris Lattner } 58330fdc8d8SChris Lattner return true; // Return true if we should stop at this breakpoint 58430fdc8d8SChris Lattner } 58530fdc8d8SChris Lattner 58630fdc8d8SChris Lattner void 58730fdc8d8SChris Lattner SBBreakpoint::SetCallback (BreakpointHitCallback callback, void *baton) 58830fdc8d8SChris Lattner { 5895160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 590ceb6b139SCaroline Tice 591ceb6b139SCaroline Tice if (log) 592324a1036SSaleem Abdulrasool { 593324a1036SSaleem Abdulrasool void *pointer = &callback; 594324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetCallback (callback=%p, baton=%p)", 595324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), 596324a1036SSaleem Abdulrasool *static_cast<void**>(&pointer), static_cast<void*>(baton)); 597324a1036SSaleem Abdulrasool } 598ceb6b139SCaroline Tice 599c14ee32dSGreg Clayton if (m_opaque_sp) 60030fdc8d8SChris Lattner { 601af67cecdSGreg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 60230fdc8d8SChris Lattner BatonSP baton_sp(new SBBreakpointCallbackBaton (callback, baton)); 6036611103cSGreg Clayton m_opaque_sp->SetCallback (SBBreakpoint::PrivateBreakpointHitCallback, baton_sp, false); 60430fdc8d8SChris Lattner } 60530fdc8d8SChris Lattner } 60630fdc8d8SChris Lattner 607d80102e4SJim Ingham void 608d80102e4SJim Ingham SBBreakpoint::SetScriptCallbackFunction (const char *callback_function_name) 609d80102e4SJim Ingham { 610d80102e4SJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 611d80102e4SJim Ingham 612d80102e4SJim Ingham if (log) 613324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetScriptCallbackFunction (callback=%s)", 614324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), 615324a1036SSaleem Abdulrasool callback_function_name); 616d80102e4SJim Ingham 617d80102e4SJim Ingham if (m_opaque_sp) 618d80102e4SJim Ingham { 619d80102e4SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 620d80102e4SJim Ingham BreakpointOptions *bp_options = m_opaque_sp->GetOptions(); 621d80102e4SJim Ingham m_opaque_sp->GetTarget().GetDebugger().GetCommandInterpreter().GetScriptInterpreter()->SetBreakpointCommandCallbackFunction (bp_options, 622d80102e4SJim Ingham callback_function_name); 623d80102e4SJim Ingham } 624d80102e4SJim Ingham } 625d80102e4SJim Ingham 626d80102e4SJim Ingham SBError 627d80102e4SJim Ingham SBBreakpoint::SetScriptCallbackBody (const char *callback_body_text) 628d80102e4SJim Ingham { 629d80102e4SJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 630d80102e4SJim Ingham 631d80102e4SJim Ingham if (log) 632324a1036SSaleem Abdulrasool log->Printf ("SBBreakpoint(%p)::SetScriptCallbackBody: callback body:\n%s)", 633324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_sp.get()), callback_body_text); 634d80102e4SJim Ingham 635d80102e4SJim Ingham SBError sb_error; 636d80102e4SJim Ingham if (m_opaque_sp) 637d80102e4SJim Ingham { 638d80102e4SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 639d80102e4SJim Ingham BreakpointOptions *bp_options = m_opaque_sp->GetOptions(); 640d80102e4SJim Ingham Error error = m_opaque_sp->GetTarget().GetDebugger().GetCommandInterpreter().GetScriptInterpreter()->SetBreakpointCommandCallback (bp_options, 641d80102e4SJim Ingham callback_body_text); 642d80102e4SJim Ingham sb_error.SetError(error); 643d80102e4SJim Ingham } 644d80102e4SJim Ingham else 645d80102e4SJim Ingham sb_error.SetErrorString("invalid breakpoint"); 646d80102e4SJim Ingham 647d80102e4SJim Ingham return sb_error; 648d80102e4SJim Ingham } 64930fdc8d8SChris Lattner 6505e09c8c3SJim Ingham bool 6515e09c8c3SJim Ingham SBBreakpoint::AddName (const char *new_name) 6525e09c8c3SJim Ingham { 6535e09c8c3SJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6545e09c8c3SJim Ingham 6555e09c8c3SJim Ingham if (log) 6565e09c8c3SJim Ingham log->Printf ("SBBreakpoint(%p)::AddName (name=%s)", 6575e09c8c3SJim Ingham static_cast<void*>(m_opaque_sp.get()), 6585e09c8c3SJim Ingham new_name); 6595e09c8c3SJim Ingham 6605e09c8c3SJim Ingham if (m_opaque_sp) 6615e09c8c3SJim Ingham { 6625e09c8c3SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 6635e09c8c3SJim Ingham Error error; // Think I'm just going to swallow the error here, it's probably more annoying to have to provide it. 6645e09c8c3SJim Ingham return m_opaque_sp->AddName(new_name, error); 6655e09c8c3SJim Ingham } 6665e09c8c3SJim Ingham 6675e09c8c3SJim Ingham return false; 6685e09c8c3SJim Ingham } 6695e09c8c3SJim Ingham 6705e09c8c3SJim Ingham void 6715e09c8c3SJim Ingham SBBreakpoint::RemoveName (const char *name_to_remove) 6725e09c8c3SJim Ingham { 6735e09c8c3SJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6745e09c8c3SJim Ingham 6755e09c8c3SJim Ingham if (log) 6765e09c8c3SJim Ingham log->Printf ("SBBreakpoint(%p)::RemoveName (name=%s)", 6775e09c8c3SJim Ingham static_cast<void*>(m_opaque_sp.get()), 6785e09c8c3SJim Ingham name_to_remove); 6795e09c8c3SJim Ingham 6805e09c8c3SJim Ingham if (m_opaque_sp) 6815e09c8c3SJim Ingham { 6825e09c8c3SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 6835e09c8c3SJim Ingham m_opaque_sp->RemoveName(name_to_remove); 6845e09c8c3SJim Ingham } 6855e09c8c3SJim Ingham } 6865e09c8c3SJim Ingham 6875e09c8c3SJim Ingham bool 6885e09c8c3SJim Ingham SBBreakpoint::MatchesName (const char *name) 6895e09c8c3SJim Ingham { 6905e09c8c3SJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6915e09c8c3SJim Ingham 6925e09c8c3SJim Ingham if (log) 6935e09c8c3SJim Ingham log->Printf ("SBBreakpoint(%p)::MatchesName (name=%s)", 6945e09c8c3SJim Ingham static_cast<void*>(m_opaque_sp.get()), 6955e09c8c3SJim Ingham name); 6965e09c8c3SJim Ingham 6975e09c8c3SJim Ingham if (m_opaque_sp) 6985e09c8c3SJim Ingham { 6995e09c8c3SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 7005e09c8c3SJim Ingham return m_opaque_sp->MatchesName(name); 7015e09c8c3SJim Ingham } 7025e09c8c3SJim Ingham 7035e09c8c3SJim Ingham return false; 7045e09c8c3SJim Ingham } 7055e09c8c3SJim Ingham 7065e09c8c3SJim Ingham void 7075e09c8c3SJim Ingham SBBreakpoint::GetNames (SBStringList &names) 7085e09c8c3SJim Ingham { 7095e09c8c3SJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 7105e09c8c3SJim Ingham 7115e09c8c3SJim Ingham if (log) 7125e09c8c3SJim Ingham log->Printf ("SBBreakpoint(%p)::GetNames ()", 7135e09c8c3SJim Ingham static_cast<void*>(m_opaque_sp.get())); 7145e09c8c3SJim Ingham 7155e09c8c3SJim Ingham if (m_opaque_sp) 7165e09c8c3SJim Ingham { 7175e09c8c3SJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 7185e09c8c3SJim Ingham std::vector<std::string> names_vec; 7195e09c8c3SJim Ingham m_opaque_sp->GetNames(names_vec); 7205e09c8c3SJim Ingham for (std::string name : names_vec) 7215e09c8c3SJim Ingham { 7225e09c8c3SJim Ingham names.AppendString (name.c_str()); 7235e09c8c3SJim Ingham } 7245e09c8c3SJim Ingham } 7255e09c8c3SJim Ingham } 7265e09c8c3SJim Ingham 72730fdc8d8SChris Lattner lldb_private::Breakpoint * 72830fdc8d8SChris Lattner SBBreakpoint::operator->() const 72930fdc8d8SChris Lattner { 7306611103cSGreg Clayton return m_opaque_sp.get(); 73130fdc8d8SChris Lattner } 73230fdc8d8SChris Lattner 73330fdc8d8SChris Lattner lldb_private::Breakpoint * 73430fdc8d8SChris Lattner SBBreakpoint::get() const 73530fdc8d8SChris Lattner { 7366611103cSGreg Clayton return m_opaque_sp.get(); 73730fdc8d8SChris Lattner } 73830fdc8d8SChris Lattner 73930fdc8d8SChris Lattner lldb::BreakpointSP & 74030fdc8d8SChris Lattner SBBreakpoint::operator *() 74130fdc8d8SChris Lattner { 7426611103cSGreg Clayton return m_opaque_sp; 74330fdc8d8SChris Lattner } 74430fdc8d8SChris Lattner 74530fdc8d8SChris Lattner const lldb::BreakpointSP & 74630fdc8d8SChris Lattner SBBreakpoint::operator *() const 74730fdc8d8SChris Lattner { 7486611103cSGreg Clayton return m_opaque_sp; 74930fdc8d8SChris Lattner } 75030fdc8d8SChris Lattner 751e6bc6cb9SJim Ingham bool 752e6bc6cb9SJim Ingham SBBreakpoint::EventIsBreakpointEvent (const lldb::SBEvent &event) 753e6bc6cb9SJim Ingham { 754*dbb0abbfSEugene Zelenko return Breakpoint::BreakpointEventData::GetEventDataFromEvent(event.get()) != nullptr; 755e6bc6cb9SJim Ingham } 756e6bc6cb9SJim Ingham 7579fed0d85SGreg Clayton BreakpointEventType 7589fed0d85SGreg Clayton SBBreakpoint::GetBreakpointEventTypeFromEvent (const SBEvent& event) 7599fed0d85SGreg Clayton { 7609fed0d85SGreg Clayton if (event.IsValid()) 7619fed0d85SGreg Clayton return Breakpoint::BreakpointEventData::GetBreakpointEventTypeFromEvent (event.GetSP()); 7629fed0d85SGreg Clayton return eBreakpointEventTypeInvalidType; 7639fed0d85SGreg Clayton } 7649fed0d85SGreg Clayton 7659fed0d85SGreg Clayton SBBreakpoint 7669fed0d85SGreg Clayton SBBreakpoint::GetBreakpointFromEvent (const lldb::SBEvent& event) 7679fed0d85SGreg Clayton { 7689fed0d85SGreg Clayton SBBreakpoint sb_breakpoint; 7699fed0d85SGreg Clayton if (event.IsValid()) 7709fed0d85SGreg Clayton sb_breakpoint.m_opaque_sp = Breakpoint::BreakpointEventData::GetBreakpointFromEvent (event.GetSP()); 7719fed0d85SGreg Clayton return sb_breakpoint; 7729fed0d85SGreg Clayton } 7739fed0d85SGreg Clayton 7749fed0d85SGreg Clayton SBBreakpointLocation 7759fed0d85SGreg Clayton SBBreakpoint::GetBreakpointLocationAtIndexFromEvent (const lldb::SBEvent& event, uint32_t loc_idx) 7769fed0d85SGreg Clayton { 7779fed0d85SGreg Clayton SBBreakpointLocation sb_breakpoint_loc; 7789fed0d85SGreg Clayton if (event.IsValid()) 7799fed0d85SGreg Clayton sb_breakpoint_loc.SetLocation (Breakpoint::BreakpointEventData::GetBreakpointLocationAtIndexFromEvent (event.GetSP(), loc_idx)); 7809fed0d85SGreg Clayton return sb_breakpoint_loc; 7819fed0d85SGreg Clayton } 7829fed0d85SGreg Clayton 783e6bc6cb9SJim Ingham uint32_t 784e6bc6cb9SJim Ingham SBBreakpoint::GetNumBreakpointLocationsFromEvent (const lldb::SBEvent &event) 785e6bc6cb9SJim Ingham { 786e6bc6cb9SJim Ingham uint32_t num_locations = 0; 787e6bc6cb9SJim Ingham if (event.IsValid()) 788e6bc6cb9SJim Ingham num_locations = (Breakpoint::BreakpointEventData::GetNumBreakpointLocationsFromEvent (event.GetSP())); 789e6bc6cb9SJim Ingham return num_locations; 790e6bc6cb9SJim Ingham } 791