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