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 1030fdc8d8SChris Lattner #include "lldb/API/SBBreakpoint.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" 1630fdc8d8SChris Lattner #include "lldb/API/SBThread.h" 1730fdc8d8SChris Lattner 1830fdc8d8SChris Lattner #include "lldb/Breakpoint/Breakpoint.h" 1930fdc8d8SChris Lattner #include "lldb/Breakpoint/BreakpointLocation.h" 2030fdc8d8SChris Lattner #include "lldb/Breakpoint/StoppointCallbackContext.h" 2130fdc8d8SChris Lattner #include "lldb/Core/Address.h" 2230fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 2330fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 2430fdc8d8SChris Lattner #include "lldb/Target/Process.h" 2530fdc8d8SChris Lattner #include "lldb/Target/Target.h" 2662b02c61SJim Ingham #include "lldb/Target/Thread.h" 2762b02c61SJim Ingham #include "lldb/Target/ThreadSpec.h" 2830fdc8d8SChris Lattner 2930fdc8d8SChris Lattner 3030fdc8d8SChris Lattner #include "lldb/lldb-enumerations.h" 3130fdc8d8SChris Lattner 3230fdc8d8SChris Lattner using namespace lldb; 3330fdc8d8SChris Lattner using namespace lldb_private; 3430fdc8d8SChris Lattner 3530fdc8d8SChris Lattner struct CallbackData 3630fdc8d8SChris Lattner { 3730fdc8d8SChris Lattner SBBreakpoint::BreakpointHitCallback callback; 3830fdc8d8SChris Lattner void *callback_baton; 3930fdc8d8SChris Lattner }; 4030fdc8d8SChris Lattner 4130fdc8d8SChris Lattner class SBBreakpointCallbackBaton : public Baton 4230fdc8d8SChris Lattner { 4330fdc8d8SChris Lattner public: 4430fdc8d8SChris Lattner 4530fdc8d8SChris Lattner SBBreakpointCallbackBaton (SBBreakpoint::BreakpointHitCallback callback, void *baton) : 4630fdc8d8SChris Lattner Baton (new CallbackData) 4730fdc8d8SChris Lattner { 4830fdc8d8SChris Lattner CallbackData *data = (CallbackData *)m_data; 4930fdc8d8SChris Lattner data->callback = callback; 5030fdc8d8SChris Lattner data->callback_baton = baton; 5130fdc8d8SChris Lattner } 5230fdc8d8SChris Lattner 5330fdc8d8SChris Lattner virtual ~SBBreakpointCallbackBaton() 5430fdc8d8SChris Lattner { 5530fdc8d8SChris Lattner CallbackData *data = (CallbackData *)m_data; 5630fdc8d8SChris Lattner 5730fdc8d8SChris Lattner if (data) 5830fdc8d8SChris Lattner { 5930fdc8d8SChris Lattner delete data; 6030fdc8d8SChris Lattner m_data = NULL; 6130fdc8d8SChris Lattner } 6230fdc8d8SChris Lattner } 6330fdc8d8SChris Lattner }; 6430fdc8d8SChris Lattner 6530fdc8d8SChris Lattner 6630fdc8d8SChris Lattner SBBreakpoint::SBBreakpoint () : 676611103cSGreg Clayton m_opaque_sp () 6830fdc8d8SChris Lattner { 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner 7130fdc8d8SChris Lattner SBBreakpoint::SBBreakpoint (const SBBreakpoint& rhs) : 726611103cSGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 7330fdc8d8SChris Lattner { 7430fdc8d8SChris Lattner } 7530fdc8d8SChris Lattner 7630fdc8d8SChris Lattner 7730fdc8d8SChris Lattner SBBreakpoint::SBBreakpoint (const lldb::BreakpointSP &bp_sp) : 786611103cSGreg Clayton m_opaque_sp (bp_sp) 7930fdc8d8SChris Lattner { 8030fdc8d8SChris Lattner } 8130fdc8d8SChris Lattner 8230fdc8d8SChris Lattner SBBreakpoint::~SBBreakpoint() 8330fdc8d8SChris Lattner { 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner 8630fdc8d8SChris Lattner const SBBreakpoint & 8730fdc8d8SChris Lattner SBBreakpoint::operator = (const SBBreakpoint& rhs) 8830fdc8d8SChris Lattner { 8930fdc8d8SChris Lattner if (this != &rhs) 9030fdc8d8SChris Lattner { 916611103cSGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 9230fdc8d8SChris Lattner } 9330fdc8d8SChris Lattner return *this; 9430fdc8d8SChris Lattner } 9530fdc8d8SChris Lattner 9630fdc8d8SChris Lattner break_id_t 9730fdc8d8SChris Lattner SBBreakpoint::GetID () const 9830fdc8d8SChris Lattner { 996611103cSGreg Clayton if (m_opaque_sp) 1006611103cSGreg Clayton return m_opaque_sp->GetID(); 10130fdc8d8SChris Lattner return LLDB_INVALID_BREAK_ID; 10230fdc8d8SChris Lattner } 10330fdc8d8SChris Lattner 10430fdc8d8SChris Lattner 10530fdc8d8SChris Lattner bool 10630fdc8d8SChris Lattner SBBreakpoint::IsValid() const 10730fdc8d8SChris Lattner { 1086611103cSGreg Clayton return m_opaque_sp; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner void 11230fdc8d8SChris Lattner SBBreakpoint::ClearAllBreakpointSites () 11330fdc8d8SChris Lattner { 1146611103cSGreg Clayton if (m_opaque_sp) 1156611103cSGreg Clayton m_opaque_sp->ClearAllBreakpointSites (); 11630fdc8d8SChris Lattner } 11730fdc8d8SChris Lattner 11830fdc8d8SChris Lattner SBBreakpointLocation 11930fdc8d8SChris Lattner SBBreakpoint::FindLocationByAddress (addr_t vm_addr) 12030fdc8d8SChris Lattner { 12130fdc8d8SChris Lattner SBBreakpointLocation sb_bp_location; 12230fdc8d8SChris Lattner 1236611103cSGreg Clayton if (m_opaque_sp) 12430fdc8d8SChris Lattner { 12530fdc8d8SChris Lattner if (vm_addr != LLDB_INVALID_ADDRESS) 12630fdc8d8SChris Lattner { 12730fdc8d8SChris Lattner Address address; 128f5e56de0SGreg Clayton Target &target = m_opaque_sp->GetTarget(); 129f5e56de0SGreg Clayton if (target.GetSectionLoadList().ResolveLoadAddress (vm_addr, address) == false) 13030fdc8d8SChris Lattner { 13130fdc8d8SChris Lattner address.SetSection (NULL); 13230fdc8d8SChris Lattner address.SetOffset (vm_addr); 13330fdc8d8SChris Lattner } 1346611103cSGreg Clayton sb_bp_location.SetLocation (m_opaque_sp->FindLocationByAddress (address)); 13530fdc8d8SChris Lattner } 13630fdc8d8SChris Lattner } 13730fdc8d8SChris Lattner return sb_bp_location; 13830fdc8d8SChris Lattner } 13930fdc8d8SChris Lattner 14030fdc8d8SChris Lattner break_id_t 14130fdc8d8SChris Lattner SBBreakpoint::FindLocationIDByAddress (addr_t vm_addr) 14230fdc8d8SChris Lattner { 14330fdc8d8SChris Lattner break_id_t lldb_id = (break_id_t) 0; 14430fdc8d8SChris Lattner 1456611103cSGreg Clayton if (m_opaque_sp) 14630fdc8d8SChris Lattner { 14730fdc8d8SChris Lattner if (vm_addr != LLDB_INVALID_ADDRESS) 14830fdc8d8SChris Lattner { 14930fdc8d8SChris Lattner Address address; 150f5e56de0SGreg Clayton Target &target = m_opaque_sp->GetTarget(); 151f5e56de0SGreg Clayton if (target.GetSectionLoadList().ResolveLoadAddress (vm_addr, address) == false) 15230fdc8d8SChris Lattner { 15330fdc8d8SChris Lattner address.SetSection (NULL); 15430fdc8d8SChris Lattner address.SetOffset (vm_addr); 15530fdc8d8SChris Lattner } 1566611103cSGreg Clayton lldb_id = m_opaque_sp->FindLocationIDByAddress (address); 15730fdc8d8SChris Lattner } 15830fdc8d8SChris Lattner } 15930fdc8d8SChris Lattner 16030fdc8d8SChris Lattner return lldb_id; 16130fdc8d8SChris Lattner } 16230fdc8d8SChris Lattner 16330fdc8d8SChris Lattner SBBreakpointLocation 16430fdc8d8SChris Lattner SBBreakpoint::FindLocationByID (break_id_t bp_loc_id) 16530fdc8d8SChris Lattner { 16630fdc8d8SChris Lattner SBBreakpointLocation sb_bp_location; 16730fdc8d8SChris Lattner 1686611103cSGreg Clayton if (m_opaque_sp) 1696611103cSGreg Clayton sb_bp_location.SetLocation (m_opaque_sp->FindLocationByID (bp_loc_id)); 17030fdc8d8SChris Lattner 17130fdc8d8SChris Lattner return sb_bp_location; 17230fdc8d8SChris Lattner } 17330fdc8d8SChris Lattner 17430fdc8d8SChris Lattner SBBreakpointLocation 17530fdc8d8SChris Lattner SBBreakpoint::GetLocationAtIndex (uint32_t index) 17630fdc8d8SChris Lattner { 17730fdc8d8SChris Lattner SBBreakpointLocation sb_bp_location; 17830fdc8d8SChris Lattner 1796611103cSGreg Clayton if (m_opaque_sp) 1806611103cSGreg Clayton sb_bp_location.SetLocation (m_opaque_sp->GetLocationAtIndex (index)); 18130fdc8d8SChris Lattner 18230fdc8d8SChris Lattner return sb_bp_location; 18330fdc8d8SChris Lattner } 18430fdc8d8SChris Lattner 18530fdc8d8SChris Lattner void 18630fdc8d8SChris Lattner SBBreakpoint::SetEnabled (bool enable) 18730fdc8d8SChris Lattner { 1886611103cSGreg Clayton if (m_opaque_sp) 1896611103cSGreg Clayton m_opaque_sp->SetEnabled (enable); 19030fdc8d8SChris Lattner } 19130fdc8d8SChris Lattner 19230fdc8d8SChris Lattner bool 19330fdc8d8SChris Lattner SBBreakpoint::IsEnabled () 19430fdc8d8SChris Lattner { 1956611103cSGreg Clayton if (m_opaque_sp) 1966611103cSGreg Clayton return m_opaque_sp->IsEnabled(); 19730fdc8d8SChris Lattner else 19830fdc8d8SChris Lattner return false; 19930fdc8d8SChris Lattner } 20030fdc8d8SChris Lattner 20130fdc8d8SChris Lattner void 202c982c768SGreg Clayton SBBreakpoint::SetIgnoreCount (uint32_t count) 20330fdc8d8SChris Lattner { 2046611103cSGreg Clayton if (m_opaque_sp) 2056611103cSGreg Clayton m_opaque_sp->SetIgnoreCount (count); 20630fdc8d8SChris Lattner } 20730fdc8d8SChris Lattner 208c982c768SGreg Clayton uint32_t 2099fed0d85SGreg Clayton SBBreakpoint::GetHitCount () const 2109fed0d85SGreg Clayton { 2119fed0d85SGreg Clayton if (m_opaque_sp) 2129fed0d85SGreg Clayton return m_opaque_sp->GetHitCount(); 2139fed0d85SGreg Clayton else 2149fed0d85SGreg Clayton return 0; 2159fed0d85SGreg Clayton } 2169fed0d85SGreg Clayton 2179fed0d85SGreg Clayton uint32_t 21830fdc8d8SChris Lattner SBBreakpoint::GetIgnoreCount () const 21930fdc8d8SChris Lattner { 2206611103cSGreg Clayton if (m_opaque_sp) 2216611103cSGreg Clayton return m_opaque_sp->GetIgnoreCount(); 22230fdc8d8SChris Lattner else 22330fdc8d8SChris Lattner return 0; 22430fdc8d8SChris Lattner } 22530fdc8d8SChris Lattner 22630fdc8d8SChris Lattner void 22730fdc8d8SChris Lattner SBBreakpoint::SetThreadID (tid_t sb_thread_id) 22830fdc8d8SChris Lattner { 2296611103cSGreg Clayton if (m_opaque_sp) 2306611103cSGreg Clayton m_opaque_sp->SetThreadID (sb_thread_id); 23130fdc8d8SChris Lattner } 23230fdc8d8SChris Lattner 23330fdc8d8SChris Lattner tid_t 23430fdc8d8SChris Lattner SBBreakpoint::GetThreadID () 23530fdc8d8SChris Lattner { 23630fdc8d8SChris Lattner tid_t lldb_thread_id = LLDB_INVALID_THREAD_ID; 2376611103cSGreg Clayton if (m_opaque_sp) 2386611103cSGreg Clayton lldb_thread_id = m_opaque_sp->GetThreadID(); 23930fdc8d8SChris Lattner 24030fdc8d8SChris Lattner return lldb_thread_id; 24130fdc8d8SChris Lattner } 24230fdc8d8SChris Lattner 24362b02c61SJim Ingham void 24462b02c61SJim Ingham SBBreakpoint::SetThreadIndex (uint32_t index) 24562b02c61SJim Ingham { 2466611103cSGreg Clayton if (m_opaque_sp) 2476611103cSGreg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetIndex (index); 24862b02c61SJim Ingham } 24962b02c61SJim Ingham 25062b02c61SJim Ingham uint32_t 25162b02c61SJim Ingham SBBreakpoint::GetThreadIndex() const 25262b02c61SJim Ingham { 2536611103cSGreg Clayton if (m_opaque_sp) 25462b02c61SJim Ingham { 2556611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpec(); 25662b02c61SJim Ingham if (thread_spec == NULL) 25762b02c61SJim Ingham return 0; 25862b02c61SJim Ingham else 25962b02c61SJim Ingham return thread_spec->GetIndex(); 26062b02c61SJim Ingham } 26162b02c61SJim Ingham return 0; 26262b02c61SJim Ingham } 26362b02c61SJim Ingham 26462b02c61SJim Ingham 26562b02c61SJim Ingham void 26662b02c61SJim Ingham SBBreakpoint::SetThreadName (const char *thread_name) 26762b02c61SJim Ingham { 2686611103cSGreg Clayton if (m_opaque_sp) 2696611103cSGreg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetName (thread_name); 27062b02c61SJim Ingham } 27162b02c61SJim Ingham 27262b02c61SJim Ingham const char * 27362b02c61SJim Ingham SBBreakpoint::GetThreadName () const 27462b02c61SJim Ingham { 2756611103cSGreg Clayton if (m_opaque_sp) 27662b02c61SJim Ingham { 2776611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpec(); 27862b02c61SJim Ingham if (thread_spec == NULL) 27962b02c61SJim Ingham return NULL; 28062b02c61SJim Ingham else 28162b02c61SJim Ingham return thread_spec->GetName(); 28262b02c61SJim Ingham } 28362b02c61SJim Ingham return NULL; 28462b02c61SJim Ingham } 28562b02c61SJim Ingham 28662b02c61SJim Ingham void 28762b02c61SJim Ingham SBBreakpoint::SetQueueName (const char *queue_name) 28862b02c61SJim Ingham { 2896611103cSGreg Clayton if (m_opaque_sp) 2906611103cSGreg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetQueueName (queue_name); 29162b02c61SJim Ingham } 29262b02c61SJim Ingham 29362b02c61SJim Ingham const char * 29462b02c61SJim Ingham SBBreakpoint::GetQueueName () const 29562b02c61SJim Ingham { 2966611103cSGreg Clayton if (m_opaque_sp) 29762b02c61SJim Ingham { 2986611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpec(); 29962b02c61SJim Ingham if (thread_spec == NULL) 30062b02c61SJim Ingham return NULL; 30162b02c61SJim Ingham else 30262b02c61SJim Ingham return thread_spec->GetQueueName(); 30362b02c61SJim Ingham } 30462b02c61SJim Ingham return NULL; 30562b02c61SJim Ingham } 30662b02c61SJim Ingham 30730fdc8d8SChris Lattner size_t 30830fdc8d8SChris Lattner SBBreakpoint::GetNumResolvedLocations() const 30930fdc8d8SChris Lattner { 3106611103cSGreg Clayton if (m_opaque_sp) 3116611103cSGreg Clayton return m_opaque_sp->GetNumResolvedLocations(); 31230fdc8d8SChris Lattner else 31330fdc8d8SChris Lattner return 0; 31430fdc8d8SChris Lattner } 31530fdc8d8SChris Lattner 31630fdc8d8SChris Lattner size_t 31730fdc8d8SChris Lattner SBBreakpoint::GetNumLocations() const 31830fdc8d8SChris Lattner { 3196611103cSGreg Clayton if (m_opaque_sp) 3206611103cSGreg Clayton return m_opaque_sp->GetNumLocations(); 32130fdc8d8SChris Lattner else 32230fdc8d8SChris Lattner return 0; 32330fdc8d8SChris Lattner } 32430fdc8d8SChris Lattner 325dde9cff3SCaroline Tice bool 326*05faeb71SGreg Clayton SBBreakpoint::GetDescription (SBStream &s) 32730fdc8d8SChris Lattner { 3286611103cSGreg Clayton if (m_opaque_sp) 32930fdc8d8SChris Lattner { 330*05faeb71SGreg Clayton s.Printf("SBBreakpoint: id = %i, ", m_opaque_sp->GetID()); 331*05faeb71SGreg Clayton m_opaque_sp->GetResolverDescription (s.get()); 332*05faeb71SGreg Clayton m_opaque_sp->GetFilterDescription (s.get()); 333*05faeb71SGreg Clayton const size_t num_locations = m_opaque_sp->GetNumLocations (); 334*05faeb71SGreg Clayton s.Printf(", locations = %zu", num_locations); 335dde9cff3SCaroline Tice return true; 336dde9cff3SCaroline Tice } 337*05faeb71SGreg Clayton s.Printf ("No value"); 338*05faeb71SGreg Clayton return false; 339*05faeb71SGreg Clayton } 340dde9cff3SCaroline Tice 34130fdc8d8SChris Lattner bool 34230fdc8d8SChris Lattner SBBreakpoint::PrivateBreakpointHitCallback 34330fdc8d8SChris Lattner ( 34430fdc8d8SChris Lattner void *baton, 34530fdc8d8SChris Lattner StoppointCallbackContext *ctx, 34630fdc8d8SChris Lattner lldb::user_id_t break_id, 34730fdc8d8SChris Lattner lldb::user_id_t break_loc_id 34830fdc8d8SChris Lattner ) 34930fdc8d8SChris Lattner { 3506611103cSGreg Clayton BreakpointSP bp_sp(ctx->exe_ctx.target->GetBreakpointList().FindBreakpointByID(break_id)); 35130fdc8d8SChris Lattner if (baton && bp_sp) 35230fdc8d8SChris Lattner { 35330fdc8d8SChris Lattner CallbackData *data = (CallbackData *)baton; 35430fdc8d8SChris Lattner lldb_private::Breakpoint *bp = bp_sp.get(); 35530fdc8d8SChris Lattner if (bp && data->callback) 35630fdc8d8SChris Lattner { 3576611103cSGreg Clayton if (ctx->exe_ctx.process) 35830fdc8d8SChris Lattner { 3596611103cSGreg Clayton SBProcess sb_process (ctx->exe_ctx.process->GetSP()); 36030fdc8d8SChris Lattner SBThread sb_thread; 36130fdc8d8SChris Lattner SBBreakpointLocation sb_location; 36230fdc8d8SChris Lattner assert (bp_sp); 36330fdc8d8SChris Lattner sb_location.SetLocation (bp_sp->FindLocationByID (break_loc_id)); 3646611103cSGreg Clayton if (ctx->exe_ctx.thread) 3656611103cSGreg Clayton sb_thread.SetThread(ctx->exe_ctx.thread->GetSP()); 36630fdc8d8SChris Lattner 36730fdc8d8SChris Lattner return data->callback (data->callback_baton, 36830fdc8d8SChris Lattner sb_process, 36930fdc8d8SChris Lattner sb_thread, 37030fdc8d8SChris Lattner sb_location); 37130fdc8d8SChris Lattner } 37230fdc8d8SChris Lattner } 37330fdc8d8SChris Lattner } 37430fdc8d8SChris Lattner return true; // Return true if we should stop at this breakpoint 37530fdc8d8SChris Lattner } 37630fdc8d8SChris Lattner 37730fdc8d8SChris Lattner void 37830fdc8d8SChris Lattner SBBreakpoint::SetCallback (BreakpointHitCallback callback, void *baton) 37930fdc8d8SChris Lattner { 3806611103cSGreg Clayton if (m_opaque_sp.get()) 38130fdc8d8SChris Lattner { 38230fdc8d8SChris Lattner BatonSP baton_sp(new SBBreakpointCallbackBaton (callback, baton)); 3836611103cSGreg Clayton m_opaque_sp->SetCallback (SBBreakpoint::PrivateBreakpointHitCallback, baton_sp, false); 38430fdc8d8SChris Lattner } 38530fdc8d8SChris Lattner } 38630fdc8d8SChris Lattner 38730fdc8d8SChris Lattner 38830fdc8d8SChris Lattner lldb_private::Breakpoint * 38930fdc8d8SChris Lattner SBBreakpoint::operator->() const 39030fdc8d8SChris Lattner { 3916611103cSGreg Clayton return m_opaque_sp.get(); 39230fdc8d8SChris Lattner } 39330fdc8d8SChris Lattner 39430fdc8d8SChris Lattner lldb_private::Breakpoint * 39530fdc8d8SChris Lattner SBBreakpoint::get() const 39630fdc8d8SChris Lattner { 3976611103cSGreg Clayton return m_opaque_sp.get(); 39830fdc8d8SChris Lattner } 39930fdc8d8SChris Lattner 40030fdc8d8SChris Lattner lldb::BreakpointSP & 40130fdc8d8SChris Lattner SBBreakpoint::operator *() 40230fdc8d8SChris Lattner { 4036611103cSGreg Clayton return m_opaque_sp; 40430fdc8d8SChris Lattner } 40530fdc8d8SChris Lattner 40630fdc8d8SChris Lattner const lldb::BreakpointSP & 40730fdc8d8SChris Lattner SBBreakpoint::operator *() const 40830fdc8d8SChris Lattner { 4096611103cSGreg Clayton return m_opaque_sp; 41030fdc8d8SChris Lattner } 41130fdc8d8SChris Lattner 4129fed0d85SGreg Clayton BreakpointEventType 4139fed0d85SGreg Clayton SBBreakpoint::GetBreakpointEventTypeFromEvent (const SBEvent& event) 4149fed0d85SGreg Clayton { 4159fed0d85SGreg Clayton if (event.IsValid()) 4169fed0d85SGreg Clayton return Breakpoint::BreakpointEventData::GetBreakpointEventTypeFromEvent (event.GetSP()); 4179fed0d85SGreg Clayton return eBreakpointEventTypeInvalidType; 4189fed0d85SGreg Clayton } 4199fed0d85SGreg Clayton 4209fed0d85SGreg Clayton SBBreakpoint 4219fed0d85SGreg Clayton SBBreakpoint::GetBreakpointFromEvent (const lldb::SBEvent& event) 4229fed0d85SGreg Clayton { 4239fed0d85SGreg Clayton SBBreakpoint sb_breakpoint; 4249fed0d85SGreg Clayton if (event.IsValid()) 4259fed0d85SGreg Clayton sb_breakpoint.m_opaque_sp = Breakpoint::BreakpointEventData::GetBreakpointFromEvent (event.GetSP()); 4269fed0d85SGreg Clayton return sb_breakpoint; 4279fed0d85SGreg Clayton } 4289fed0d85SGreg Clayton 4299fed0d85SGreg Clayton SBBreakpointLocation 4309fed0d85SGreg Clayton SBBreakpoint::GetBreakpointLocationAtIndexFromEvent (const lldb::SBEvent& event, uint32_t loc_idx) 4319fed0d85SGreg Clayton { 4329fed0d85SGreg Clayton SBBreakpointLocation sb_breakpoint_loc; 4339fed0d85SGreg Clayton if (event.IsValid()) 4349fed0d85SGreg Clayton sb_breakpoint_loc.SetLocation (Breakpoint::BreakpointEventData::GetBreakpointLocationAtIndexFromEvent (event.GetSP(), loc_idx)); 4359fed0d85SGreg Clayton return sb_breakpoint_loc; 4369fed0d85SGreg Clayton } 4379fed0d85SGreg Clayton 4389fed0d85SGreg Clayton 439