124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBreakpoint.cpp ----------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBBreakpoint.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBBreakpointLocation.h" 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBDebugger.h" 13c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton#include "lldb/API/SBEvent.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBProcess.h" 1598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBThread.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/Breakpoint.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointLocation.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/StoppointCallbackContext.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h" 227826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h" 278e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham#include "lldb/Target/Thread.h" 288e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham#include "lldb/Target/ThreadSpec.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-enumerations.h" 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct CallbackData 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBBreakpoint::BreakpointHitCallback callback; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *callback_baton; 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBBreakpointCallbackBaton : public Baton 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBBreakpointCallbackBaton (SBBreakpoint::BreakpointHitCallback callback, void *baton) : 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Baton (new CallbackData) 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CallbackData *data = (CallbackData *)m_data; 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner data->callback = callback; 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner data->callback_baton = baton; 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~SBBreakpointCallbackBaton() 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CallbackData *data = (CallbackData *)m_data; 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (data) 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner delete data; 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_data = NULL; 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SBBreakpoint () : 6863094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp () 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SBBreakpoint (const SBBreakpoint& rhs) : 7363094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp (rhs.m_opaque_sp) 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SBBreakpoint (const lldb::BreakpointSP &bp_sp) : 7963094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp (bp_sp) 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::~SBBreakpoint() 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBBreakpoint & 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator = (const SBBreakpoint& rhs) 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 9163094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp = rhs.m_opaque_sp; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 95ea49cc78c01f34f874b7e710acebea4ead404be1Greg Claytonbool 96ea49cc78c01f34f874b7e710acebea4ead404be1Greg ClaytonSBBreakpoint::operator == (const lldb::SBBreakpoint& rhs) 97ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton{ 98ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton if (m_opaque_sp && rhs.m_opaque_sp) 99ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 100ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton return false; 101ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton} 102ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton 1030765e3274aab0551fea7678bee565c7d68e0b786Enrico Granatabool 1040765e3274aab0551fea7678bee565c7d68e0b786Enrico GranataSBBreakpoint::operator != (const lldb::SBBreakpoint& rhs) 1050765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata{ 1060765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata if (m_opaque_sp && rhs.m_opaque_sp) 1070765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 1080765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata return (m_opaque_sp && !rhs.m_opaque_sp) || (rhs.m_opaque_sp && !m_opaque_sp); 1090765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata} 1100765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbreak_id_t 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetID () const 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 114952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 116bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton break_id_t break_id = LLDB_INVALID_BREAK_ID; 11763094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 118bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton break_id = m_opaque_sp->GetID(); 119bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton 120bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (log) 1217826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 122bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (break_id == LLDB_INVALID_BREAK_ID) 123bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton log->Printf ("SBBreakpoint(%p)::GetID () => LLDB_INVALID_BREAK_ID", m_opaque_sp.get()); 124bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton else 125a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::GetID () => %u", m_opaque_sp.get(), break_id); 1267826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 1277826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 128bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton return break_id; 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::IsValid() const 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 1359880efacdd3a5e855b405d89433a01170422a889Jim Ingham return (bool) m_opaque_sp; 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::ClearAllBreakpointSites () 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 142bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 143bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 14463094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->ClearAllBreakpointSites (); 145bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpointLocation 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::FindLocationByAddress (addr_t vm_addr) 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBBreakpointLocation sb_bp_location; 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (vm_addr != LLDB_INVALID_ADDRESS) 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 157bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Address address; 159eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton Target &target = m_opaque_sp->GetTarget(); 160eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton if (target.GetSectionLoadList().ResolveLoadAddress (vm_addr, address) == false) 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 1623508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton address.SetRawAddress (vm_addr); 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16463094e0bb161580564954dee512955c1c79d3476Greg Clayton sb_bp_location.SetLocation (m_opaque_sp->FindLocationByAddress (address)); 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_bp_location; 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbreak_id_t 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::FindLocationIDByAddress (addr_t vm_addr) 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 173bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton break_id_t break_id = LLDB_INVALID_BREAK_ID; 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 175bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (m_opaque_sp && vm_addr != LLDB_INVALID_ADDRESS) 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 177bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 178bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Address address; 179bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Target &target = m_opaque_sp->GetTarget(); 180bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (target.GetSectionLoadList().ResolveLoadAddress (vm_addr, address) == false) 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 1823508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton address.SetRawAddress (vm_addr); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 184bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton break_id = m_opaque_sp->FindLocationIDByAddress (address); 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 187bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton return break_id; 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpointLocation 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::FindLocationByID (break_id_t bp_loc_id) 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBBreakpointLocation sb_bp_location; 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19563094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 196bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 197bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 19863094e0bb161580564954dee512955c1c79d3476Greg Clayton sb_bp_location.SetLocation (m_opaque_sp->FindLocationByID (bp_loc_id)); 199bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_bp_location; 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpointLocation 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetLocationAtIndex (uint32_t index) 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBBreakpointLocation sb_bp_location; 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20963094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 210bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 211bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 21263094e0bb161580564954dee512955c1c79d3476Greg Clayton sb_bp_location.SetLocation (m_opaque_sp->GetLocationAtIndex (index)); 213bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_bp_location; 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SetEnabled (bool enable) 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 221952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2227826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 224a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::SetEnabled (enabled=%i)", m_opaque_sp.get(), enable); 2257826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 22663094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 227bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 228bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 22963094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->SetEnabled (enable); 230bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::IsEnabled () 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 23663094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 237bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 238bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 23963094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp->IsEnabled(); 240bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2452753a024a5a314232baa579c0ada87551aa86988Jim Inghamvoid 2462753a024a5a314232baa579c0ada87551aa86988Jim InghamSBBreakpoint::SetOneShot (bool one_shot) 2472753a024a5a314232baa579c0ada87551aa86988Jim Ingham{ 248952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2492753a024a5a314232baa579c0ada87551aa86988Jim Ingham 2502753a024a5a314232baa579c0ada87551aa86988Jim Ingham if (log) 2512753a024a5a314232baa579c0ada87551aa86988Jim Ingham log->Printf ("SBBreakpoint(%p)::SetOneShot (one_shot=%i)", m_opaque_sp.get(), one_shot); 2522753a024a5a314232baa579c0ada87551aa86988Jim Ingham 2532753a024a5a314232baa579c0ada87551aa86988Jim Ingham if (m_opaque_sp) 2542753a024a5a314232baa579c0ada87551aa86988Jim Ingham { 2552753a024a5a314232baa579c0ada87551aa86988Jim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2562753a024a5a314232baa579c0ada87551aa86988Jim Ingham m_opaque_sp->SetOneShot (one_shot); 2572753a024a5a314232baa579c0ada87551aa86988Jim Ingham } 2582753a024a5a314232baa579c0ada87551aa86988Jim Ingham} 2592753a024a5a314232baa579c0ada87551aa86988Jim Ingham 2602753a024a5a314232baa579c0ada87551aa86988Jim Inghambool 2612753a024a5a314232baa579c0ada87551aa86988Jim InghamSBBreakpoint::IsOneShot () const 2622753a024a5a314232baa579c0ada87551aa86988Jim Ingham{ 2632753a024a5a314232baa579c0ada87551aa86988Jim Ingham if (m_opaque_sp) 2642753a024a5a314232baa579c0ada87551aa86988Jim Ingham { 2652753a024a5a314232baa579c0ada87551aa86988Jim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2662753a024a5a314232baa579c0ada87551aa86988Jim Ingham return m_opaque_sp->IsOneShot(); 2672753a024a5a314232baa579c0ada87551aa86988Jim Ingham } 2682753a024a5a314232baa579c0ada87551aa86988Jim Ingham else 2692753a024a5a314232baa579c0ada87551aa86988Jim Ingham return false; 2702753a024a5a314232baa579c0ada87551aa86988Jim Ingham} 2712753a024a5a314232baa579c0ada87551aa86988Jim Ingham 2723fcc297c999218b19d7d5ad049e9c955c4bc481dJim Inghambool 2733fcc297c999218b19d7d5ad049e9c955c4bc481dJim InghamSBBreakpoint::IsInternal () 2743fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham{ 2753fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham if (m_opaque_sp) 2763fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham { 2773fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 2783fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham return m_opaque_sp->IsInternal(); 2793fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham } 2803fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham else 2813fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham return false; 2823fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham} 2833fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 28554e7afa84d945f9137f9372ecde432f9e1a702fcGreg ClaytonSBBreakpoint::SetIgnoreCount (uint32_t count) 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 287952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2887826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2897826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 290a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::SetIgnoreCount (count=%u)", m_opaque_sp.get(), count); 2917826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 29263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 293bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 294bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 29563094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->SetIgnoreCount (count); 296bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 299e3740831203337f606008b7c8d7ea34b521c8600Jim Inghamvoid 300e3740831203337f606008b7c8d7ea34b521c8600Jim InghamSBBreakpoint::SetCondition (const char *condition) 301e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham{ 302bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (m_opaque_sp) 303bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 304bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 305bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton m_opaque_sp->SetCondition (condition); 306bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 307e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham} 308e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham 309e3740831203337f606008b7c8d7ea34b521c8600Jim Inghamconst char * 310e3740831203337f606008b7c8d7ea34b521c8600Jim InghamSBBreakpoint::GetCondition () 311e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham{ 312bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (m_opaque_sp) 313bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 314bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 315bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton return m_opaque_sp->GetConditionText (); 316bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 317bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton return NULL; 318e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham} 319e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham 32054e7afa84d945f9137f9372ecde432f9e1a702fcGreg Claytonuint32_t 321c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetHitCount () const 322c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{ 323a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton uint32_t count = 0; 324a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (m_opaque_sp) 325bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 326bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 327a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton count = m_opaque_sp->GetHitCount(); 328bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 329a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 330952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 331a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 332a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::GetHitCount () => %u", m_opaque_sp.get(), count); 3337826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 334a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return count; 335c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton} 336c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 337c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Claytonuint32_t 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetIgnoreCount () const 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 340a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton uint32_t count = 0; 34163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 342bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 343bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 344a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton count = m_opaque_sp->GetIgnoreCount(); 345bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 346a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 347952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 348a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 349a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::GetIgnoreCount () => %u", m_opaque_sp.get(), count); 350a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 351a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return count; 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 355a66ba46379fe41036d870975c56ccc2319cb6618Greg ClaytonSBBreakpoint::SetThreadID (tid_t tid) 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 35763094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 358bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 359bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 360a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton m_opaque_sp->SetThreadID (tid); 361bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 362952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 363a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 3645f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBBreakpoint(%p)::SetThreadID (tid=0x%4.4" PRIx64 ")", m_opaque_sp.get(), tid); 365a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertid_t 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetThreadID () 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 371a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton tid_t tid = LLDB_INVALID_THREAD_ID; 37263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 373bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 374bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 375a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton tid = m_opaque_sp->GetThreadID(); 376bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 378952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 379a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 3805f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBBreakpoint(%p)::GetThreadID () => 0x%4.4" PRIx64, m_opaque_sp.get(), tid); 381a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return tid; 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3848e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamvoid 3858e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::SetThreadIndex (uint32_t index) 3868e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{ 387952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 388a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 389a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::SetThreadIndex (%u)", m_opaque_sp.get(), index); 39063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 391bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 392bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 39363094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetIndex (index); 394bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 3958e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham} 3968e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 3978e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamuint32_t 3988e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::GetThreadIndex() const 3998e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{ 400a625387d0f22fd4eb240fd8a8fa894ecb8613475Greg Clayton uint32_t thread_idx = UINT32_MAX; 40163094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 4028e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham { 403bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 404bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate(); 405b3e7181e269e8d26958efc47e362cb6189ecaacaJohnny Chen if (thread_spec != NULL) 406a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton thread_idx = thread_spec->GetIndex(); 4078e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham } 408952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 409a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 410a625387d0f22fd4eb240fd8a8fa894ecb8613475Greg Clayton log->Printf ("SBBreakpoint(%p)::GetThreadIndex () => %u", m_opaque_sp.get(), thread_idx); 411a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 412b3e7181e269e8d26958efc47e362cb6189ecaacaJohnny Chen return thread_idx; 4138e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham} 4148e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 4158e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 4168e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamvoid 4178e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::SetThreadName (const char *thread_name) 4188e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{ 419952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 420a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 421a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::SetThreadName (%s)", m_opaque_sp.get(), thread_name); 422a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 42363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 424bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 425bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 42663094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetName (thread_name); 427bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 4288e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham} 4298e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 4308e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamconst char * 4318e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::GetThreadName () const 4328e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{ 433a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton const char *name = NULL; 43463094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 4358e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham { 436bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 437bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate(); 438b3e7181e269e8d26958efc47e362cb6189ecaacaJohnny Chen if (thread_spec != NULL) 439a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton name = thread_spec->GetName(); 4408e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham } 441952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 442a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 443a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::GetThreadName () => %s", m_opaque_sp.get(), name); 444a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 445a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return name; 4468e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham} 4478e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 4488e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamvoid 4498e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::SetQueueName (const char *queue_name) 4508e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{ 451952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 452a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 453a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::SetQueueName (%s)", m_opaque_sp.get(), queue_name); 45463094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 455bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 456bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 45763094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->GetOptions()->GetThreadSpec()->SetQueueName (queue_name); 458bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 4598e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham} 4608e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 4618e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamconst char * 4628e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::GetQueueName () const 4638e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{ 464a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton const char *name = NULL; 46563094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 4668e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham { 467bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 468bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate(); 469bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (thread_spec) 470a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton name = thread_spec->GetQueueName(); 4718e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham } 472952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 473a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 474a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::GetQueueName () => %s", m_opaque_sp.get(), name); 475a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 476a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return name; 4778e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham} 4788e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetNumResolvedLocations() const 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 482a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton size_t num_resolved = 0; 48363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 484bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 485bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 486a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton num_resolved = m_opaque_sp->GetNumResolvedLocations(); 487bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 488952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 489a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 4905f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBBreakpoint(%p)::GetNumResolvedLocations () => %" PRIu64, m_opaque_sp.get(), (uint64_t)num_resolved); 491a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return num_resolved; 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetNumLocations() const 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 497a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton size_t num_locs = 0; 49863094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 499bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 500bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 501a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton num_locs = m_opaque_sp->GetNumLocations(); 502bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 503952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 504a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 5055f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBBreakpoint(%p)::GetNumLocations () => %" PRIu64, m_opaque_sp.get(), (uint64_t)num_locs); 506a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return num_locs; 50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 510d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg ClaytonSBBreakpoint::GetDescription (SBStream &s) 51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 51263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_sp) 51324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 514bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 515d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton s.Printf("SBBreakpoint: id = %i, ", m_opaque_sp->GetID()); 516d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton m_opaque_sp->GetResolverDescription (s.get()); 517d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton m_opaque_sp->GetFilterDescription (s.get()); 518d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton const size_t num_locations = m_opaque_sp->GetNumLocations (); 5195f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea s.Printf(", locations = %" PRIu64, (uint64_t)num_locations); 520d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton return true; 52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 522d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton s.Printf ("No value"); 523d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton return false; 52498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice} 52598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::PrivateBreakpointHitCallback 52824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton, 53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StoppointCallbackContext *ctx, 53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t break_id, 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t break_loc_id 53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 535f4124deeb9532044a38c0774ced872f2709347daGreg Clayton ExecutionContext exe_ctx (ctx->exe_ctx_ref); 536f4124deeb9532044a38c0774ced872f2709347daGreg Clayton BreakpointSP bp_sp(exe_ctx.GetTargetRef().GetBreakpointList().FindBreakpointByID(break_id)); 53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (baton && bp_sp) 53824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CallbackData *data = (CallbackData *)baton; 54024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Breakpoint *bp = bp_sp.get(); 54124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (bp && data->callback) 54224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 543f4124deeb9532044a38c0774ced872f2709347daGreg Clayton Process *process = exe_ctx.GetProcessPtr(); 544567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (process) 54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 54613d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton SBProcess sb_process (process->shared_from_this()); 54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread sb_thread; 54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBBreakpointLocation sb_location; 54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner assert (bp_sp); 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_location.SetLocation (bp_sp->FindLocationByID (break_loc_id)); 551f4124deeb9532044a38c0774ced872f2709347daGreg Clayton Thread *thread = exe_ctx.GetThreadPtr(); 552567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (thread) 55313d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton sb_thread.SetThread(thread->shared_from_this()); 55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return data->callback (data->callback_baton, 55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_process, 55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_thread, 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_location); 55924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; // Return true if we should stop at this breakpoint 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SetCallback (BreakpointHitCallback callback, void *baton) 56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 568952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5697826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 5707826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 571a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBBreakpoint(%p)::SetCallback (callback=%p, baton=%p)", m_opaque_sp.get(), callback, baton); 5727826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 573567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (m_opaque_sp) 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 575bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BatonSP baton_sp(new SBBreakpointCallbackBaton (callback, baton)); 57763094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_sp->SetCallback (SBBreakpoint::PrivateBreakpointHitCallback, baton_sp, false); 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 57924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::Breakpoint * 58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator->() const 58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 58563094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp.get(); 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::Breakpoint * 58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::get() const 59024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 59163094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp.get(); 59224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 59324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 59424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::BreakpointSP & 59524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator *() 59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 59763094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp; 59824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 59924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 60024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb::BreakpointSP & 60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator *() const 60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 60363094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_sp; 60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 60628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Inghambool 60728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim InghamSBBreakpoint::EventIsBreakpointEvent (const lldb::SBEvent &event) 60828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham{ 60928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham return Breakpoint::BreakpointEventData::GetEventDataFromEvent(event.get()) != NULL; 61028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 61128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham} 61228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 613c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonBreakpointEventType 614c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetBreakpointEventTypeFromEvent (const SBEvent& event) 615c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{ 616c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton if (event.IsValid()) 617c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton return Breakpoint::BreakpointEventData::GetBreakpointEventTypeFromEvent (event.GetSP()); 618c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton return eBreakpointEventTypeInvalidType; 619c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton} 620c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 621c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint 622c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetBreakpointFromEvent (const lldb::SBEvent& event) 623c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{ 624c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton SBBreakpoint sb_breakpoint; 625c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton if (event.IsValid()) 626c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton sb_breakpoint.m_opaque_sp = Breakpoint::BreakpointEventData::GetBreakpointFromEvent (event.GetSP()); 627c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton return sb_breakpoint; 628c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton} 629c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 630c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpointLocation 631c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetBreakpointLocationAtIndexFromEvent (const lldb::SBEvent& event, uint32_t loc_idx) 632c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{ 633c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton SBBreakpointLocation sb_breakpoint_loc; 634c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton if (event.IsValid()) 635c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton sb_breakpoint_loc.SetLocation (Breakpoint::BreakpointEventData::GetBreakpointLocationAtIndexFromEvent (event.GetSP(), loc_idx)); 636c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton return sb_breakpoint_loc; 637c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton} 638c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 63928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Inghamuint32_t 64028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim InghamSBBreakpoint::GetNumBreakpointLocationsFromEvent (const lldb::SBEvent &event) 64128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham{ 64228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham uint32_t num_locations = 0; 64328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham if (event.IsValid()) 64428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham num_locations = (Breakpoint::BreakpointEventData::GetNumBreakpointLocationsFromEvent (event.GetSP())); 64528e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham return num_locations; 64628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham} 64728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 648c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 649