130fdc8d8SChris Lattner //===-- SBBreakpointLocation.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/SBBreakpointLocation.h" 1130fdc8d8SChris Lattner #include "lldb/API/SBDefines.h" 1230fdc8d8SChris Lattner #include "lldb/API/SBDebugger.h" 1330fdc8d8SChris Lattner 1430fdc8d8SChris Lattner #include "lldb/lldb-types.h" 1530fdc8d8SChris Lattner #include "lldb/lldb-defines.h" 1630fdc8d8SChris Lattner #include "lldb/Breakpoint/BreakpointLocation.h" 171b54c88cSJim Ingham #include "lldb/Target/ThreadSpec.h" 1830fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 1930fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 2062b02c61SJim Ingham #include "lldb/Target/ThreadSpec.h" 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner using namespace lldb; 2330fdc8d8SChris Lattner using namespace lldb_private; 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner 2730fdc8d8SChris Lattner //class SBBreakpointLocation 2830fdc8d8SChris Lattner 2930fdc8d8SChris Lattner SBBreakpointLocation::SBBreakpointLocation () 3030fdc8d8SChris Lattner { 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 3330fdc8d8SChris Lattner SBBreakpointLocation::SBBreakpointLocation (const lldb::BreakpointLocationSP &break_loc_sp) : 34*6611103cSGreg Clayton m_opaque_sp (break_loc_sp) 3530fdc8d8SChris Lattner { 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 3830fdc8d8SChris Lattner SBBreakpointLocation::~SBBreakpointLocation () 3930fdc8d8SChris Lattner { 4030fdc8d8SChris Lattner } 4130fdc8d8SChris Lattner 4230fdc8d8SChris Lattner bool 4330fdc8d8SChris Lattner SBBreakpointLocation::IsValid() const 4430fdc8d8SChris Lattner { 45*6611103cSGreg Clayton return m_opaque_sp.get() != NULL; 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner addr_t 4930fdc8d8SChris Lattner SBBreakpointLocation::GetLoadAddress () 5030fdc8d8SChris Lattner { 5130fdc8d8SChris Lattner addr_t ret_addr = LLDB_INVALID_ADDRESS; 5230fdc8d8SChris Lattner 53*6611103cSGreg Clayton if (m_opaque_sp) 5430fdc8d8SChris Lattner { 55*6611103cSGreg Clayton ret_addr = m_opaque_sp->GetLoadAddress(); 5630fdc8d8SChris Lattner } 5730fdc8d8SChris Lattner 5830fdc8d8SChris Lattner return ret_addr; 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 6130fdc8d8SChris Lattner void 6230fdc8d8SChris Lattner SBBreakpointLocation::SetEnabled (bool enabled) 6330fdc8d8SChris Lattner { 64*6611103cSGreg Clayton if (m_opaque_sp) 6530fdc8d8SChris Lattner { 66*6611103cSGreg Clayton m_opaque_sp->SetEnabled (enabled); 6730fdc8d8SChris Lattner } 6830fdc8d8SChris Lattner } 6930fdc8d8SChris Lattner 7030fdc8d8SChris Lattner bool 7130fdc8d8SChris Lattner SBBreakpointLocation::IsEnabled () 7230fdc8d8SChris Lattner { 73*6611103cSGreg Clayton if (m_opaque_sp) 74*6611103cSGreg Clayton return m_opaque_sp->IsEnabled(); 7530fdc8d8SChris Lattner else 7630fdc8d8SChris Lattner return false; 7730fdc8d8SChris Lattner } 7830fdc8d8SChris Lattner 7930fdc8d8SChris Lattner int32_t 8030fdc8d8SChris Lattner SBBreakpointLocation::GetIgnoreCount () 8130fdc8d8SChris Lattner { 82*6611103cSGreg Clayton if (m_opaque_sp) 83*6611103cSGreg Clayton return m_opaque_sp->GetIgnoreCount(); 8430fdc8d8SChris Lattner else 8530fdc8d8SChris Lattner return 0; 8630fdc8d8SChris Lattner } 8730fdc8d8SChris Lattner 8830fdc8d8SChris Lattner void 8930fdc8d8SChris Lattner SBBreakpointLocation::SetIgnoreCount (int32_t n) 9030fdc8d8SChris Lattner { 91*6611103cSGreg Clayton if (m_opaque_sp) 92*6611103cSGreg Clayton m_opaque_sp->SetIgnoreCount (n); 9330fdc8d8SChris Lattner } 9430fdc8d8SChris Lattner 9530fdc8d8SChris Lattner void 9630fdc8d8SChris Lattner SBBreakpointLocation::SetThreadID (tid_t thread_id) 9730fdc8d8SChris Lattner { 98*6611103cSGreg Clayton if (m_opaque_sp) 99*6611103cSGreg Clayton m_opaque_sp->SetThreadID (thread_id); 10030fdc8d8SChris Lattner } 10130fdc8d8SChris Lattner 10230fdc8d8SChris Lattner tid_t 10330fdc8d8SChris Lattner SBBreakpointLocation::GetThreadID () 10430fdc8d8SChris Lattner { 10530fdc8d8SChris Lattner tid_t sb_thread_id = (lldb::tid_t) LLDB_INVALID_THREAD_ID; 106*6611103cSGreg Clayton if (m_opaque_sp) 107*6611103cSGreg Clayton sb_thread_id = m_opaque_sp->GetLocationOptions()->GetThreadSpecNoCreate()->GetTID(); 10830fdc8d8SChris Lattner return sb_thread_id; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11162b02c61SJim Ingham void 11262b02c61SJim Ingham SBBreakpointLocation::SetThreadIndex (uint32_t index) 11362b02c61SJim Ingham { 114*6611103cSGreg Clayton if (m_opaque_sp) 115*6611103cSGreg Clayton m_opaque_sp->GetLocationOptions()->GetThreadSpec()->SetIndex (index); 11662b02c61SJim Ingham } 11762b02c61SJim Ingham 11862b02c61SJim Ingham uint32_t 11962b02c61SJim Ingham SBBreakpointLocation::GetThreadIndex() const 12062b02c61SJim Ingham { 121*6611103cSGreg Clayton if (m_opaque_sp) 12262b02c61SJim Ingham { 123*6611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptionsNoCreate()->GetThreadSpecNoCreate(); 12462b02c61SJim Ingham if (thread_spec == NULL) 12562b02c61SJim Ingham return 0; 12662b02c61SJim Ingham else 12762b02c61SJim Ingham return thread_spec->GetIndex(); 12862b02c61SJim Ingham } 12962b02c61SJim Ingham return 0; 13062b02c61SJim Ingham } 13162b02c61SJim Ingham 13262b02c61SJim Ingham 13362b02c61SJim Ingham void 13462b02c61SJim Ingham SBBreakpointLocation::SetThreadName (const char *thread_name) 13562b02c61SJim Ingham { 136*6611103cSGreg Clayton if (m_opaque_sp) 137*6611103cSGreg Clayton m_opaque_sp->GetLocationOptions()->GetThreadSpec()->SetName (thread_name); 13862b02c61SJim Ingham } 13962b02c61SJim Ingham 14062b02c61SJim Ingham const char * 14162b02c61SJim Ingham SBBreakpointLocation::GetThreadName () const 14262b02c61SJim Ingham { 143*6611103cSGreg Clayton if (m_opaque_sp) 14462b02c61SJim Ingham { 145*6611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptionsNoCreate()->GetThreadSpecNoCreate(); 14662b02c61SJim Ingham if (thread_spec == NULL) 14762b02c61SJim Ingham return NULL; 14862b02c61SJim Ingham else 14962b02c61SJim Ingham return thread_spec->GetName(); 15062b02c61SJim Ingham } 15162b02c61SJim Ingham return NULL; 15262b02c61SJim Ingham } 15362b02c61SJim Ingham 15462b02c61SJim Ingham void 15562b02c61SJim Ingham SBBreakpointLocation::SetQueueName (const char *queue_name) 15662b02c61SJim Ingham { 157*6611103cSGreg Clayton if (m_opaque_sp) 158*6611103cSGreg Clayton m_opaque_sp->GetLocationOptions()->GetThreadSpec()->SetQueueName (queue_name); 15962b02c61SJim Ingham } 16062b02c61SJim Ingham 16162b02c61SJim Ingham const char * 16262b02c61SJim Ingham SBBreakpointLocation::GetQueueName () const 16362b02c61SJim Ingham { 164*6611103cSGreg Clayton if (m_opaque_sp) 16562b02c61SJim Ingham { 166*6611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptionsNoCreate()->GetThreadSpecNoCreate(); 16762b02c61SJim Ingham if (thread_spec == NULL) 16862b02c61SJim Ingham return NULL; 16962b02c61SJim Ingham else 17062b02c61SJim Ingham return thread_spec->GetQueueName(); 17162b02c61SJim Ingham } 17262b02c61SJim Ingham return NULL; 17362b02c61SJim Ingham } 17462b02c61SJim Ingham 17530fdc8d8SChris Lattner bool 17630fdc8d8SChris Lattner SBBreakpointLocation::IsResolved () 17730fdc8d8SChris Lattner { 178*6611103cSGreg Clayton if (m_opaque_sp) 179*6611103cSGreg Clayton return m_opaque_sp->IsResolved(); 18030fdc8d8SChris Lattner else 18130fdc8d8SChris Lattner return false; 18230fdc8d8SChris Lattner } 18330fdc8d8SChris Lattner 18430fdc8d8SChris Lattner void 18530fdc8d8SChris Lattner SBBreakpointLocation::SetLocation (const lldb::BreakpointLocationSP &break_loc_sp) 18630fdc8d8SChris Lattner { 187*6611103cSGreg Clayton if (m_opaque_sp) 18830fdc8d8SChris Lattner { 18930fdc8d8SChris Lattner // Uninstall the callbacks? 19030fdc8d8SChris Lattner } 191*6611103cSGreg Clayton m_opaque_sp = break_loc_sp; 19230fdc8d8SChris Lattner } 19330fdc8d8SChris Lattner 19430fdc8d8SChris Lattner void 19530fdc8d8SChris Lattner SBBreakpointLocation::GetDescription (FILE *f, const char *description_level) 19630fdc8d8SChris Lattner { 19730fdc8d8SChris Lattner if (f == NULL) 19830fdc8d8SChris Lattner return; 19930fdc8d8SChris Lattner 200*6611103cSGreg Clayton if (m_opaque_sp) 20130fdc8d8SChris Lattner { 20230fdc8d8SChris Lattner DescriptionLevel level; 20330fdc8d8SChris Lattner if (strcmp (description_level, "brief") == 0) 20430fdc8d8SChris Lattner level = eDescriptionLevelBrief; 20530fdc8d8SChris Lattner else if (strcmp (description_level, "full") == 0) 20630fdc8d8SChris Lattner level = eDescriptionLevelFull; 20730fdc8d8SChris Lattner else if (strcmp (description_level, "verbose") == 0) 20830fdc8d8SChris Lattner level = eDescriptionLevelVerbose; 20930fdc8d8SChris Lattner else 21030fdc8d8SChris Lattner level = eDescriptionLevelBrief; 21130fdc8d8SChris Lattner 21230fdc8d8SChris Lattner StreamFile str (f); 21330fdc8d8SChris Lattner 214*6611103cSGreg Clayton m_opaque_sp->GetDescription (&str, level); 21530fdc8d8SChris Lattner str.EOL(); 21630fdc8d8SChris Lattner } 21730fdc8d8SChris Lattner } 21830fdc8d8SChris Lattner 21930fdc8d8SChris Lattner SBBreakpoint 22030fdc8d8SChris Lattner SBBreakpointLocation::GetBreakpoint () 22130fdc8d8SChris Lattner { 22230fdc8d8SChris Lattner SBBreakpoint sb_bp; 223*6611103cSGreg Clayton if (m_opaque_sp) 224*6611103cSGreg Clayton *sb_bp = m_opaque_sp->GetBreakpoint ().GetSP(); 22530fdc8d8SChris Lattner return sb_bp; 22630fdc8d8SChris Lattner } 22730fdc8d8SChris Lattner 228