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 10dde9cff3SCaroline Tice // In order to guarantee correct working with Python, Python.h *MUST* be 11dde9cff3SCaroline Tice // the *FIRST* header file included: 12dde9cff3SCaroline Tice 13dde9cff3SCaroline Tice #include <Python.h> 14dde9cff3SCaroline Tice 1530fdc8d8SChris Lattner #include "lldb/API/SBBreakpointLocation.h" 1630fdc8d8SChris Lattner #include "lldb/API/SBDefines.h" 1730fdc8d8SChris Lattner #include "lldb/API/SBDebugger.h" 18dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner #include "lldb/lldb-types.h" 2130fdc8d8SChris Lattner #include "lldb/lldb-defines.h" 2230fdc8d8SChris Lattner #include "lldb/Breakpoint/BreakpointLocation.h" 231b54c88cSJim Ingham #include "lldb/Target/ThreadSpec.h" 2430fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 2530fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 2662b02c61SJim Ingham #include "lldb/Target/ThreadSpec.h" 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner using namespace lldb; 2930fdc8d8SChris Lattner using namespace lldb_private; 3030fdc8d8SChris Lattner 3130fdc8d8SChris Lattner 3230fdc8d8SChris Lattner 3330fdc8d8SChris Lattner //class SBBreakpointLocation 3430fdc8d8SChris Lattner 3530fdc8d8SChris Lattner SBBreakpointLocation::SBBreakpointLocation () 3630fdc8d8SChris Lattner { 3730fdc8d8SChris Lattner } 3830fdc8d8SChris Lattner 3930fdc8d8SChris Lattner SBBreakpointLocation::SBBreakpointLocation (const lldb::BreakpointLocationSP &break_loc_sp) : 406611103cSGreg Clayton m_opaque_sp (break_loc_sp) 4130fdc8d8SChris Lattner { 4230fdc8d8SChris Lattner } 4330fdc8d8SChris Lattner 4430fdc8d8SChris Lattner SBBreakpointLocation::~SBBreakpointLocation () 4530fdc8d8SChris Lattner { 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner bool 4930fdc8d8SChris Lattner SBBreakpointLocation::IsValid() const 5030fdc8d8SChris Lattner { 516611103cSGreg Clayton return m_opaque_sp.get() != NULL; 5230fdc8d8SChris Lattner } 5330fdc8d8SChris Lattner 5430fdc8d8SChris Lattner addr_t 5530fdc8d8SChris Lattner SBBreakpointLocation::GetLoadAddress () 5630fdc8d8SChris Lattner { 5730fdc8d8SChris Lattner addr_t ret_addr = LLDB_INVALID_ADDRESS; 5830fdc8d8SChris Lattner 596611103cSGreg Clayton if (m_opaque_sp) 6030fdc8d8SChris Lattner { 616611103cSGreg Clayton ret_addr = m_opaque_sp->GetLoadAddress(); 6230fdc8d8SChris Lattner } 6330fdc8d8SChris Lattner 6430fdc8d8SChris Lattner return ret_addr; 6530fdc8d8SChris Lattner } 6630fdc8d8SChris Lattner 6730fdc8d8SChris Lattner void 6830fdc8d8SChris Lattner SBBreakpointLocation::SetEnabled (bool enabled) 6930fdc8d8SChris Lattner { 706611103cSGreg Clayton if (m_opaque_sp) 7130fdc8d8SChris Lattner { 726611103cSGreg Clayton m_opaque_sp->SetEnabled (enabled); 7330fdc8d8SChris Lattner } 7430fdc8d8SChris Lattner } 7530fdc8d8SChris Lattner 7630fdc8d8SChris Lattner bool 7730fdc8d8SChris Lattner SBBreakpointLocation::IsEnabled () 7830fdc8d8SChris Lattner { 796611103cSGreg Clayton if (m_opaque_sp) 806611103cSGreg Clayton return m_opaque_sp->IsEnabled(); 8130fdc8d8SChris Lattner else 8230fdc8d8SChris Lattner return false; 8330fdc8d8SChris Lattner } 8430fdc8d8SChris Lattner 85c982c768SGreg Clayton uint32_t 8630fdc8d8SChris Lattner SBBreakpointLocation::GetIgnoreCount () 8730fdc8d8SChris Lattner { 886611103cSGreg Clayton if (m_opaque_sp) 896611103cSGreg Clayton return m_opaque_sp->GetIgnoreCount(); 9030fdc8d8SChris Lattner else 9130fdc8d8SChris Lattner return 0; 9230fdc8d8SChris Lattner } 9330fdc8d8SChris Lattner 9430fdc8d8SChris Lattner void 95c982c768SGreg Clayton SBBreakpointLocation::SetIgnoreCount (uint32_t n) 9630fdc8d8SChris Lattner { 976611103cSGreg Clayton if (m_opaque_sp) 986611103cSGreg Clayton m_opaque_sp->SetIgnoreCount (n); 9930fdc8d8SChris Lattner } 10030fdc8d8SChris Lattner 10130fdc8d8SChris Lattner void 10230fdc8d8SChris Lattner SBBreakpointLocation::SetThreadID (tid_t thread_id) 10330fdc8d8SChris Lattner { 1046611103cSGreg Clayton if (m_opaque_sp) 1056611103cSGreg Clayton m_opaque_sp->SetThreadID (thread_id); 10630fdc8d8SChris Lattner } 10730fdc8d8SChris Lattner 10830fdc8d8SChris Lattner tid_t 10930fdc8d8SChris Lattner SBBreakpointLocation::GetThreadID () 11030fdc8d8SChris Lattner { 11130fdc8d8SChris Lattner tid_t sb_thread_id = (lldb::tid_t) LLDB_INVALID_THREAD_ID; 1126611103cSGreg Clayton if (m_opaque_sp) 1136611103cSGreg Clayton sb_thread_id = m_opaque_sp->GetLocationOptions()->GetThreadSpecNoCreate()->GetTID(); 11430fdc8d8SChris Lattner return sb_thread_id; 11530fdc8d8SChris Lattner } 11630fdc8d8SChris Lattner 11762b02c61SJim Ingham void 11862b02c61SJim Ingham SBBreakpointLocation::SetThreadIndex (uint32_t index) 11962b02c61SJim Ingham { 1206611103cSGreg Clayton if (m_opaque_sp) 1216611103cSGreg Clayton m_opaque_sp->GetLocationOptions()->GetThreadSpec()->SetIndex (index); 12262b02c61SJim Ingham } 12362b02c61SJim Ingham 12462b02c61SJim Ingham uint32_t 12562b02c61SJim Ingham SBBreakpointLocation::GetThreadIndex() const 12662b02c61SJim Ingham { 1276611103cSGreg Clayton if (m_opaque_sp) 12862b02c61SJim Ingham { 1296611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptionsNoCreate()->GetThreadSpecNoCreate(); 13062b02c61SJim Ingham if (thread_spec == NULL) 13162b02c61SJim Ingham return 0; 13262b02c61SJim Ingham else 13362b02c61SJim Ingham return thread_spec->GetIndex(); 13462b02c61SJim Ingham } 13562b02c61SJim Ingham return 0; 13662b02c61SJim Ingham } 13762b02c61SJim Ingham 13862b02c61SJim Ingham 13962b02c61SJim Ingham void 14062b02c61SJim Ingham SBBreakpointLocation::SetThreadName (const char *thread_name) 14162b02c61SJim Ingham { 1426611103cSGreg Clayton if (m_opaque_sp) 1436611103cSGreg Clayton m_opaque_sp->GetLocationOptions()->GetThreadSpec()->SetName (thread_name); 14462b02c61SJim Ingham } 14562b02c61SJim Ingham 14662b02c61SJim Ingham const char * 14762b02c61SJim Ingham SBBreakpointLocation::GetThreadName () const 14862b02c61SJim Ingham { 1496611103cSGreg Clayton if (m_opaque_sp) 15062b02c61SJim Ingham { 1516611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptionsNoCreate()->GetThreadSpecNoCreate(); 15262b02c61SJim Ingham if (thread_spec == NULL) 15362b02c61SJim Ingham return NULL; 15462b02c61SJim Ingham else 15562b02c61SJim Ingham return thread_spec->GetName(); 15662b02c61SJim Ingham } 15762b02c61SJim Ingham return NULL; 15862b02c61SJim Ingham } 15962b02c61SJim Ingham 16062b02c61SJim Ingham void 16162b02c61SJim Ingham SBBreakpointLocation::SetQueueName (const char *queue_name) 16262b02c61SJim Ingham { 1636611103cSGreg Clayton if (m_opaque_sp) 1646611103cSGreg Clayton m_opaque_sp->GetLocationOptions()->GetThreadSpec()->SetQueueName (queue_name); 16562b02c61SJim Ingham } 16662b02c61SJim Ingham 16762b02c61SJim Ingham const char * 16862b02c61SJim Ingham SBBreakpointLocation::GetQueueName () const 16962b02c61SJim Ingham { 1706611103cSGreg Clayton if (m_opaque_sp) 17162b02c61SJim Ingham { 1726611103cSGreg Clayton const ThreadSpec *thread_spec = m_opaque_sp->GetOptionsNoCreate()->GetThreadSpecNoCreate(); 17362b02c61SJim Ingham if (thread_spec == NULL) 17462b02c61SJim Ingham return NULL; 17562b02c61SJim Ingham else 17662b02c61SJim Ingham return thread_spec->GetQueueName(); 17762b02c61SJim Ingham } 17862b02c61SJim Ingham return NULL; 17962b02c61SJim Ingham } 18062b02c61SJim Ingham 18130fdc8d8SChris Lattner bool 18230fdc8d8SChris Lattner SBBreakpointLocation::IsResolved () 18330fdc8d8SChris Lattner { 1846611103cSGreg Clayton if (m_opaque_sp) 1856611103cSGreg Clayton return m_opaque_sp->IsResolved(); 18630fdc8d8SChris Lattner else 18730fdc8d8SChris Lattner return false; 18830fdc8d8SChris Lattner } 18930fdc8d8SChris Lattner 19030fdc8d8SChris Lattner void 19130fdc8d8SChris Lattner SBBreakpointLocation::SetLocation (const lldb::BreakpointLocationSP &break_loc_sp) 19230fdc8d8SChris Lattner { 1936611103cSGreg Clayton if (m_opaque_sp) 19430fdc8d8SChris Lattner { 19530fdc8d8SChris Lattner // Uninstall the callbacks? 19630fdc8d8SChris Lattner } 1976611103cSGreg Clayton m_opaque_sp = break_loc_sp; 19830fdc8d8SChris Lattner } 19930fdc8d8SChris Lattner 200dde9cff3SCaroline Tice bool 201dde9cff3SCaroline Tice SBBreakpointLocation::GetDescription (const char *description_level, SBStream &description) 20230fdc8d8SChris Lattner { 2036611103cSGreg Clayton if (m_opaque_sp) 20430fdc8d8SChris Lattner { 20530fdc8d8SChris Lattner DescriptionLevel level; 20630fdc8d8SChris Lattner if (strcmp (description_level, "brief") == 0) 20730fdc8d8SChris Lattner level = eDescriptionLevelBrief; 20830fdc8d8SChris Lattner else if (strcmp (description_level, "full") == 0) 20930fdc8d8SChris Lattner level = eDescriptionLevelFull; 21030fdc8d8SChris Lattner else if (strcmp (description_level, "verbose") == 0) 21130fdc8d8SChris Lattner level = eDescriptionLevelVerbose; 21230fdc8d8SChris Lattner else 21330fdc8d8SChris Lattner level = eDescriptionLevelBrief; 21430fdc8d8SChris Lattner 215*dac97f31SCaroline Tice description.ref(); 216dde9cff3SCaroline Tice m_opaque_sp->GetDescription (description.get(), level); 217dde9cff3SCaroline Tice description.get()->EOL(); 21830fdc8d8SChris Lattner } 219dde9cff3SCaroline Tice else 220dde9cff3SCaroline Tice description.Printf ("No value"); 221dde9cff3SCaroline Tice 222dde9cff3SCaroline Tice return true; 223dde9cff3SCaroline Tice } 224dde9cff3SCaroline Tice 22530fdc8d8SChris Lattner SBBreakpoint 22630fdc8d8SChris Lattner SBBreakpointLocation::GetBreakpoint () 22730fdc8d8SChris Lattner { 22830fdc8d8SChris Lattner SBBreakpoint sb_bp; 2296611103cSGreg Clayton if (m_opaque_sp) 2306611103cSGreg Clayton *sb_bp = m_opaque_sp->GetBreakpoint ().GetSP(); 23130fdc8d8SChris Lattner return sb_bp; 23230fdc8d8SChris Lattner } 23330fdc8d8SChris Lattner 234