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" 17*1b54c88cSJim Ingham #include "lldb/Target/ThreadSpec.h" 1830fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 1930fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner using namespace lldb; 2230fdc8d8SChris Lattner using namespace lldb_private; 2330fdc8d8SChris Lattner 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner //class SBBreakpointLocation 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner SBBreakpointLocation::SBBreakpointLocation () 2930fdc8d8SChris Lattner { 3030fdc8d8SChris Lattner } 3130fdc8d8SChris Lattner 3230fdc8d8SChris Lattner SBBreakpointLocation::SBBreakpointLocation (const lldb::BreakpointLocationSP &break_loc_sp) : 3330fdc8d8SChris Lattner m_break_loc_sp (break_loc_sp) 3430fdc8d8SChris Lattner { 3530fdc8d8SChris Lattner } 3630fdc8d8SChris Lattner 3730fdc8d8SChris Lattner SBBreakpointLocation::~SBBreakpointLocation () 3830fdc8d8SChris Lattner { 3930fdc8d8SChris Lattner } 4030fdc8d8SChris Lattner 4130fdc8d8SChris Lattner bool 4230fdc8d8SChris Lattner SBBreakpointLocation::IsValid() const 4330fdc8d8SChris Lattner { 4430fdc8d8SChris Lattner return m_break_loc_sp.get() != NULL; 4530fdc8d8SChris Lattner } 4630fdc8d8SChris Lattner 4730fdc8d8SChris Lattner addr_t 4830fdc8d8SChris Lattner SBBreakpointLocation::GetLoadAddress () 4930fdc8d8SChris Lattner { 5030fdc8d8SChris Lattner addr_t ret_addr = LLDB_INVALID_ADDRESS; 5130fdc8d8SChris Lattner 5230fdc8d8SChris Lattner if (m_break_loc_sp) 5330fdc8d8SChris Lattner { 5430fdc8d8SChris Lattner ret_addr = m_break_loc_sp->GetLoadAddress(); 5530fdc8d8SChris Lattner } 5630fdc8d8SChris Lattner 5730fdc8d8SChris Lattner return ret_addr; 5830fdc8d8SChris Lattner } 5930fdc8d8SChris Lattner 6030fdc8d8SChris Lattner void 6130fdc8d8SChris Lattner SBBreakpointLocation::SetEnabled (bool enabled) 6230fdc8d8SChris Lattner { 6330fdc8d8SChris Lattner if (m_break_loc_sp) 6430fdc8d8SChris Lattner { 6530fdc8d8SChris Lattner m_break_loc_sp->SetEnabled (enabled); 6630fdc8d8SChris Lattner } 6730fdc8d8SChris Lattner } 6830fdc8d8SChris Lattner 6930fdc8d8SChris Lattner bool 7030fdc8d8SChris Lattner SBBreakpointLocation::IsEnabled () 7130fdc8d8SChris Lattner { 7230fdc8d8SChris Lattner if (m_break_loc_sp) 7330fdc8d8SChris Lattner return m_break_loc_sp->IsEnabled(); 7430fdc8d8SChris Lattner else 7530fdc8d8SChris Lattner return false; 7630fdc8d8SChris Lattner } 7730fdc8d8SChris Lattner 7830fdc8d8SChris Lattner int32_t 7930fdc8d8SChris Lattner SBBreakpointLocation::GetIgnoreCount () 8030fdc8d8SChris Lattner { 8130fdc8d8SChris Lattner if (m_break_loc_sp) 8230fdc8d8SChris Lattner return m_break_loc_sp->GetIgnoreCount(); 8330fdc8d8SChris Lattner else 8430fdc8d8SChris Lattner return 0; 8530fdc8d8SChris Lattner } 8630fdc8d8SChris Lattner 8730fdc8d8SChris Lattner void 8830fdc8d8SChris Lattner SBBreakpointLocation::SetIgnoreCount (int32_t n) 8930fdc8d8SChris Lattner { 9030fdc8d8SChris Lattner if (m_break_loc_sp) 9130fdc8d8SChris Lattner m_break_loc_sp->SetIgnoreCount (n); 9230fdc8d8SChris Lattner } 9330fdc8d8SChris Lattner 9430fdc8d8SChris Lattner void 9530fdc8d8SChris Lattner SBBreakpointLocation::SetThreadID (tid_t thread_id) 9630fdc8d8SChris Lattner { 9730fdc8d8SChris Lattner if (m_break_loc_sp) 9830fdc8d8SChris Lattner m_break_loc_sp->SetThreadID (thread_id); 9930fdc8d8SChris Lattner } 10030fdc8d8SChris Lattner 10130fdc8d8SChris Lattner tid_t 10230fdc8d8SChris Lattner SBBreakpointLocation::GetThreadID () 10330fdc8d8SChris Lattner { 10430fdc8d8SChris Lattner tid_t sb_thread_id = (lldb::tid_t) LLDB_INVALID_THREAD_ID; 10530fdc8d8SChris Lattner if (m_break_loc_sp) 106*1b54c88cSJim Ingham sb_thread_id = m_break_loc_sp->GetLocationOptions()->GetThreadSpec()->GetTID(); 10730fdc8d8SChris Lattner 10830fdc8d8SChris Lattner return sb_thread_id; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner bool 11230fdc8d8SChris Lattner SBBreakpointLocation::IsResolved () 11330fdc8d8SChris Lattner { 11430fdc8d8SChris Lattner if (m_break_loc_sp) 11530fdc8d8SChris Lattner return m_break_loc_sp->IsResolved(); 11630fdc8d8SChris Lattner else 11730fdc8d8SChris Lattner return false; 11830fdc8d8SChris Lattner } 11930fdc8d8SChris Lattner 12030fdc8d8SChris Lattner void 12130fdc8d8SChris Lattner SBBreakpointLocation::SetLocation (const lldb::BreakpointLocationSP &break_loc_sp) 12230fdc8d8SChris Lattner { 12330fdc8d8SChris Lattner if (m_break_loc_sp) 12430fdc8d8SChris Lattner { 12530fdc8d8SChris Lattner // Uninstall the callbacks? 12630fdc8d8SChris Lattner } 12730fdc8d8SChris Lattner m_break_loc_sp = break_loc_sp; 12830fdc8d8SChris Lattner } 12930fdc8d8SChris Lattner 13030fdc8d8SChris Lattner void 13130fdc8d8SChris Lattner SBBreakpointLocation::GetDescription (FILE *f, const char *description_level) 13230fdc8d8SChris Lattner { 13330fdc8d8SChris Lattner if (f == NULL) 13430fdc8d8SChris Lattner return; 13530fdc8d8SChris Lattner 13630fdc8d8SChris Lattner if (m_break_loc_sp) 13730fdc8d8SChris Lattner { 13830fdc8d8SChris Lattner DescriptionLevel level; 13930fdc8d8SChris Lattner if (strcmp (description_level, "brief") == 0) 14030fdc8d8SChris Lattner level = eDescriptionLevelBrief; 14130fdc8d8SChris Lattner else if (strcmp (description_level, "full") == 0) 14230fdc8d8SChris Lattner level = eDescriptionLevelFull; 14330fdc8d8SChris Lattner else if (strcmp (description_level, "verbose") == 0) 14430fdc8d8SChris Lattner level = eDescriptionLevelVerbose; 14530fdc8d8SChris Lattner else 14630fdc8d8SChris Lattner level = eDescriptionLevelBrief; 14730fdc8d8SChris Lattner 14830fdc8d8SChris Lattner StreamFile str (f); 14930fdc8d8SChris Lattner 15030fdc8d8SChris Lattner m_break_loc_sp->GetDescription (&str, level); 15130fdc8d8SChris Lattner str.EOL(); 15230fdc8d8SChris Lattner } 15330fdc8d8SChris Lattner } 15430fdc8d8SChris Lattner 15530fdc8d8SChris Lattner SBBreakpoint 15630fdc8d8SChris Lattner SBBreakpointLocation::GetBreakpoint () 15730fdc8d8SChris Lattner { 15830fdc8d8SChris Lattner SBBreakpoint sb_bp; 15930fdc8d8SChris Lattner if (m_break_loc_sp) 16030fdc8d8SChris Lattner *sb_bp = m_break_loc_sp->GetBreakpoint ().GetSP(); 16130fdc8d8SChris Lattner return sb_bp; 16230fdc8d8SChris Lattner } 16330fdc8d8SChris Lattner 164