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