124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBreakpoint.cpp ----------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBBreakpoint.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBBreakpointLocation.h"
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBDebugger.h"
13c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton#include "lldb/API/SBEvent.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBProcess.h"
1598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBThread.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/Breakpoint.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointLocation.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/StoppointCallbackContext.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h"
227826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h"
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h"
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h"
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h"
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h"
278e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham#include "lldb/Target/Thread.h"
288e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham#include "lldb/Target/ThreadSpec.h"
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-enumerations.h"
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct CallbackData
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpoint::BreakpointHitCallback callback;
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void *callback_baton;
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBBreakpointCallbackBaton : public Baton
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpointCallbackBaton (SBBreakpoint::BreakpointHitCallback callback, void *baton) :
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Baton (new CallbackData)
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        CallbackData *data = (CallbackData *)m_data;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        data->callback = callback;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        data->callback_baton = baton;
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~SBBreakpointCallbackBaton()
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        CallbackData *data = (CallbackData *)m_data;
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (data)
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            delete data;
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            m_data = NULL;
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SBBreakpoint () :
6863094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp ()
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SBBreakpoint (const SBBreakpoint& rhs) :
7363094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp (rhs.m_opaque_sp)
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SBBreakpoint (const lldb::BreakpointSP &bp_sp) :
7963094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp (bp_sp)
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::~SBBreakpoint()
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBBreakpoint &
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator = (const SBBreakpoint& rhs)
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (this != &rhs)
9163094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp = rhs.m_opaque_sp;
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return *this;
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
95ea49cc78c01f34f874b7e710acebea4ead404be1Greg Claytonbool
96ea49cc78c01f34f874b7e710acebea4ead404be1Greg ClaytonSBBreakpoint::operator == (const lldb::SBBreakpoint& rhs)
97ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton{
98ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton    if (m_opaque_sp && rhs.m_opaque_sp)
99ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton        return m_opaque_sp.get() == rhs.m_opaque_sp.get();
100ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton    return false;
101ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton}
102ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton
1030765e3274aab0551fea7678bee565c7d68e0b786Enrico Granatabool
1040765e3274aab0551fea7678bee565c7d68e0b786Enrico GranataSBBreakpoint::operator != (const lldb::SBBreakpoint& rhs)
1050765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata{
1060765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata    if (m_opaque_sp && rhs.m_opaque_sp)
1070765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata        return m_opaque_sp.get() != rhs.m_opaque_sp.get();
1080765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata    return (m_opaque_sp && !rhs.m_opaque_sp) || (rhs.m_opaque_sp && !m_opaque_sp);
1090765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata}
1100765e3274aab0551fea7678bee565c7d68e0b786Enrico Granata
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbreak_id_t
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetID () const
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
114952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
116bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    break_id_t break_id = LLDB_INVALID_BREAK_ID;
11763094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
118bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        break_id = m_opaque_sp->GetID();
119bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton
120bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    if (log)
1217826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    {
122bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        if (break_id == LLDB_INVALID_BREAK_ID)
123bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton            log->Printf ("SBBreakpoint(%p)::GetID () => LLDB_INVALID_BREAK_ID", m_opaque_sp.get());
124bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        else
125a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton            log->Printf ("SBBreakpoint(%p)::GetID () => %u", m_opaque_sp.get(), break_id);
1267826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    }
1277826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
128bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    return break_id;
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::IsValid() const
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1359880efacdd3a5e855b405d89433a01170422a889Jim Ingham    return (bool) m_opaque_sp;
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::ClearAllBreakpointSites ()
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
14163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
142bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
143bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
14463094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->ClearAllBreakpointSites ();
145bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpointLocation
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::FindLocationByAddress (addr_t vm_addr)
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpointLocation sb_bp_location;
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (vm_addr != LLDB_INVALID_ADDRESS)
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
157bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton            Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            Address address;
159eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton            Target &target = m_opaque_sp->GetTarget();
160eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton            if (target.GetSectionLoadList().ResolveLoadAddress (vm_addr, address) == false)
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
1623508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton                address.SetRawAddress (vm_addr);
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
16463094e0bb161580564954dee512955c1c79d3476Greg Clayton            sb_bp_location.SetLocation (m_opaque_sp->FindLocationByAddress (address));
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_bp_location;
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbreak_id_t
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::FindLocationIDByAddress (addr_t vm_addr)
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
173bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    break_id_t break_id = LLDB_INVALID_BREAK_ID;
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
175bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    if (m_opaque_sp && vm_addr != LLDB_INVALID_ADDRESS)
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
177bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
178bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Address address;
179bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Target &target = m_opaque_sp->GetTarget();
180bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        if (target.GetSectionLoadList().ResolveLoadAddress (vm_addr, address) == false)
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
1823508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton            address.SetRawAddress (vm_addr);
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
184bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        break_id = m_opaque_sp->FindLocationIDByAddress (address);
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
187bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    return break_id;
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpointLocation
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::FindLocationByID (break_id_t bp_loc_id)
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpointLocation sb_bp_location;
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19563094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
196bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
197bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
19863094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_bp_location.SetLocation (m_opaque_sp->FindLocationByID (bp_loc_id));
199bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_bp_location;
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpointLocation
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetLocationAtIndex (uint32_t index)
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBreakpointLocation sb_bp_location;
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20963094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
210bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
211bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
21263094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_bp_location.SetLocation (m_opaque_sp->GetLocationAtIndex (index));
213bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_bp_location;
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SetEnabled (bool enable)
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
221952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2227826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
2237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    if (log)
224a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::SetEnabled (enabled=%i)", m_opaque_sp.get(), enable);
2257826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
22663094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
227bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
228bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
22963094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->SetEnabled (enable);
230bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::IsEnabled ()
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
23663094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
237bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
238bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
23963094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->IsEnabled();
240bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return false;
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2452753a024a5a314232baa579c0ada87551aa86988Jim Inghamvoid
2462753a024a5a314232baa579c0ada87551aa86988Jim InghamSBBreakpoint::SetOneShot (bool one_shot)
2472753a024a5a314232baa579c0ada87551aa86988Jim Ingham{
248952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2492753a024a5a314232baa579c0ada87551aa86988Jim Ingham
2502753a024a5a314232baa579c0ada87551aa86988Jim Ingham    if (log)
2512753a024a5a314232baa579c0ada87551aa86988Jim Ingham        log->Printf ("SBBreakpoint(%p)::SetOneShot (one_shot=%i)", m_opaque_sp.get(), one_shot);
2522753a024a5a314232baa579c0ada87551aa86988Jim Ingham
2532753a024a5a314232baa579c0ada87551aa86988Jim Ingham    if (m_opaque_sp)
2542753a024a5a314232baa579c0ada87551aa86988Jim Ingham    {
2552753a024a5a314232baa579c0ada87551aa86988Jim Ingham        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
2562753a024a5a314232baa579c0ada87551aa86988Jim Ingham        m_opaque_sp->SetOneShot (one_shot);
2572753a024a5a314232baa579c0ada87551aa86988Jim Ingham    }
2582753a024a5a314232baa579c0ada87551aa86988Jim Ingham}
2592753a024a5a314232baa579c0ada87551aa86988Jim Ingham
2602753a024a5a314232baa579c0ada87551aa86988Jim Inghambool
2612753a024a5a314232baa579c0ada87551aa86988Jim InghamSBBreakpoint::IsOneShot () const
2622753a024a5a314232baa579c0ada87551aa86988Jim Ingham{
2632753a024a5a314232baa579c0ada87551aa86988Jim Ingham    if (m_opaque_sp)
2642753a024a5a314232baa579c0ada87551aa86988Jim Ingham    {
2652753a024a5a314232baa579c0ada87551aa86988Jim Ingham        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
2662753a024a5a314232baa579c0ada87551aa86988Jim Ingham        return m_opaque_sp->IsOneShot();
2672753a024a5a314232baa579c0ada87551aa86988Jim Ingham    }
2682753a024a5a314232baa579c0ada87551aa86988Jim Ingham    else
2692753a024a5a314232baa579c0ada87551aa86988Jim Ingham        return false;
2702753a024a5a314232baa579c0ada87551aa86988Jim Ingham}
2712753a024a5a314232baa579c0ada87551aa86988Jim Ingham
2723fcc297c999218b19d7d5ad049e9c955c4bc481dJim Inghambool
2733fcc297c999218b19d7d5ad049e9c955c4bc481dJim InghamSBBreakpoint::IsInternal ()
2743fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham{
2753fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham    if (m_opaque_sp)
2763fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham    {
2773fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
2783fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham        return m_opaque_sp->IsInternal();
2793fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham    }
2803fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham    else
2813fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham        return false;
2823fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham}
2833fcc297c999218b19d7d5ad049e9c955c4bc481dJim Ingham
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
28554e7afa84d945f9137f9372ecde432f9e1a702fcGreg ClaytonSBBreakpoint::SetIgnoreCount (uint32_t count)
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
287952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2887826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
2897826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    if (log)
290a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::SetIgnoreCount (count=%u)", m_opaque_sp.get(), count);
2917826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
29263094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
293bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
294bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
29563094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->SetIgnoreCount (count);
296bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
299e3740831203337f606008b7c8d7ea34b521c8600Jim Inghamvoid
300e3740831203337f606008b7c8d7ea34b521c8600Jim InghamSBBreakpoint::SetCondition (const char *condition)
301e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham{
302bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    if (m_opaque_sp)
303bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
304bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
305bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        m_opaque_sp->SetCondition (condition);
306bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
307e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham}
308e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham
309e3740831203337f606008b7c8d7ea34b521c8600Jim Inghamconst char *
310e3740831203337f606008b7c8d7ea34b521c8600Jim InghamSBBreakpoint::GetCondition ()
311e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham{
312bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    if (m_opaque_sp)
313bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
314bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
315bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        return m_opaque_sp->GetConditionText ();
316bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
317bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    return NULL;
318e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham}
319e3740831203337f606008b7c8d7ea34b521c8600Jim Ingham
32054e7afa84d945f9137f9372ecde432f9e1a702fcGreg Claytonuint32_t
321c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetHitCount () const
322c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{
323a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    uint32_t count = 0;
324a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (m_opaque_sp)
325bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
326bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
327a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        count = m_opaque_sp->GetHitCount();
328bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
329a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
330952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
331a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
332a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::GetHitCount () => %u", m_opaque_sp.get(), count);
3337826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
334a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return count;
335c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton}
336c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
337c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Claytonuint32_t
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetIgnoreCount () const
33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
340a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    uint32_t count = 0;
34163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
342bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
343bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
344a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        count = m_opaque_sp->GetIgnoreCount();
345bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
346a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
347952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
348a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
349a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::GetIgnoreCount () => %u", m_opaque_sp.get(), count);
350a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
351a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return count;
35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
355a66ba46379fe41036d870975c56ccc2319cb6618Greg ClaytonSBBreakpoint::SetThreadID (tid_t tid)
35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
35763094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
358bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
359bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
360a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        m_opaque_sp->SetThreadID (tid);
361bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
362952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
363a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
3645f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        log->Printf ("SBBreakpoint(%p)::SetThreadID (tid=0x%4.4" PRIx64 ")", m_opaque_sp.get(), tid);
365a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertid_t
36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetThreadID ()
37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
371a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    tid_t tid = LLDB_INVALID_THREAD_ID;
37263094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
373bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
374bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
375a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        tid = m_opaque_sp->GetThreadID();
376bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
378952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
379a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
3805f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        log->Printf ("SBBreakpoint(%p)::GetThreadID () => 0x%4.4" PRIx64, m_opaque_sp.get(), tid);
381a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return tid;
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3848e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamvoid
3858e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::SetThreadIndex (uint32_t index)
3868e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{
387952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
388a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
389a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::SetThreadIndex (%u)", m_opaque_sp.get(), index);
39063094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
391bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
392bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
39363094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->GetOptions()->GetThreadSpec()->SetIndex (index);
394bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
3958e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham}
3968e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
3978e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamuint32_t
3988e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::GetThreadIndex() const
3998e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{
400a625387d0f22fd4eb240fd8a8fa894ecb8613475Greg Clayton    uint32_t thread_idx = UINT32_MAX;
40163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
4028e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    {
403bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
404bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate();
405b3e7181e269e8d26958efc47e362cb6189ecaacaJohnny Chen        if (thread_spec != NULL)
406a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton            thread_idx = thread_spec->GetIndex();
4078e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    }
408952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
409a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
410a625387d0f22fd4eb240fd8a8fa894ecb8613475Greg Clayton        log->Printf ("SBBreakpoint(%p)::GetThreadIndex () => %u", m_opaque_sp.get(), thread_idx);
411a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
412b3e7181e269e8d26958efc47e362cb6189ecaacaJohnny Chen    return thread_idx;
4138e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham}
4148e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
4158e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
4168e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamvoid
4178e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::SetThreadName (const char *thread_name)
4188e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{
419952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
420a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
421a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::SetThreadName (%s)", m_opaque_sp.get(), thread_name);
422a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
42363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
424bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
425bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
42663094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->GetOptions()->GetThreadSpec()->SetName (thread_name);
427bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
4288e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham}
4298e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
4308e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamconst char *
4318e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::GetThreadName () const
4328e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{
433a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    const char *name = NULL;
43463094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
4358e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    {
436bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
437bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate();
438b3e7181e269e8d26958efc47e362cb6189ecaacaJohnny Chen        if (thread_spec != NULL)
439a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton            name = thread_spec->GetName();
4408e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    }
441952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
442a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
443a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::GetThreadName () => %s", m_opaque_sp.get(), name);
444a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
445a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return name;
4468e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham}
4478e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
4488e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamvoid
4498e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::SetQueueName (const char *queue_name)
4508e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{
451952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
452a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
453a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::SetQueueName (%s)", m_opaque_sp.get(), queue_name);
45463094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
455bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
456bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
45763094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->GetOptions()->GetThreadSpec()->SetQueueName (queue_name);
458bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
4598e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham}
4608e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
4618e5e38f584a613f601a37f62e1b25230cb400c6fJim Inghamconst char *
4628e5e38f584a613f601a37f62e1b25230cb400c6fJim InghamSBBreakpoint::GetQueueName () const
4638e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham{
464a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    const char *name = NULL;
46563094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
4668e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    {
467bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
468bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        const ThreadSpec *thread_spec = m_opaque_sp->GetOptions()->GetThreadSpecNoCreate();
469bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        if (thread_spec)
470a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton            name = thread_spec->GetQueueName();
4718e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham    }
472952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
473a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
474a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::GetQueueName () => %s", m_opaque_sp.get(), name);
475a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
476a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return name;
4778e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham}
4788e5e38f584a613f601a37f62e1b25230cb400c6fJim Ingham
47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetNumResolvedLocations() const
48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
482a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    size_t num_resolved = 0;
48363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
484bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
485bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
486a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        num_resolved = m_opaque_sp->GetNumResolvedLocations();
487bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
488952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
489a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
4905f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        log->Printf ("SBBreakpoint(%p)::GetNumResolvedLocations () => %" PRIu64, m_opaque_sp.get(), (uint64_t)num_resolved);
491a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return num_resolved;
49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::GetNumLocations() const
49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
497a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    size_t num_locs = 0;
49863094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
499bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    {
500bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
501a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        num_locs = m_opaque_sp->GetNumLocations();
502bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    }
503952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
504a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
5055f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        log->Printf ("SBBreakpoint(%p)::GetNumLocations () => %" PRIu64, m_opaque_sp.get(), (uint64_t)num_locs);
506a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return num_locs;
50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
50998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool
510d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg ClaytonSBBreakpoint::GetDescription (SBStream &s)
51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
51263094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
51324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
514bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
515d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton        s.Printf("SBBreakpoint: id = %i, ", m_opaque_sp->GetID());
516d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton        m_opaque_sp->GetResolverDescription (s.get());
517d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton        m_opaque_sp->GetFilterDescription (s.get());
518d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton        const size_t num_locations = m_opaque_sp->GetNumLocations ();
5195f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        s.Printf(", locations = %" PRIu64, (uint64_t)num_locations);
520d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton        return true;
52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
522d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton    s.Printf ("No value");
523d8c625380b56759fc3fef8b9cf0389ae1a07f44dGreg Clayton    return false;
52498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice}
52598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::PrivateBreakpointHitCallback
52824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void *baton,
53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StoppointCallbackContext *ctx,
53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::user_id_t break_id,
53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::user_id_t break_loc_id
53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner)
53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
535f4124deeb9532044a38c0774ced872f2709347daGreg Clayton    ExecutionContext exe_ctx (ctx->exe_ctx_ref);
536f4124deeb9532044a38c0774ced872f2709347daGreg Clayton    BreakpointSP bp_sp(exe_ctx.GetTargetRef().GetBreakpointList().FindBreakpointByID(break_id));
53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (baton && bp_sp)
53824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        CallbackData *data = (CallbackData *)baton;
54024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        lldb_private::Breakpoint *bp = bp_sp.get();
54124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (bp && data->callback)
54224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
543f4124deeb9532044a38c0774ced872f2709347daGreg Clayton            Process *process = exe_ctx.GetProcessPtr();
544567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton            if (process)
54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
54613d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton                SBProcess sb_process (process->shared_from_this());
54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                SBThread sb_thread;
54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                SBBreakpointLocation sb_location;
54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                assert (bp_sp);
55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                sb_location.SetLocation (bp_sp->FindLocationByID (break_loc_id));
551f4124deeb9532044a38c0774ced872f2709347daGreg Clayton                Thread *thread = exe_ctx.GetThreadPtr();
552567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton                if (thread)
55313d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton                    sb_thread.SetThread(thread->shared_from_this());
55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return data->callback (data->callback_baton,
55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                          sb_process,
55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                          sb_thread,
55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                          sb_location);
55924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return true;    // Return true if we should stop at this breakpoint
56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::SetCallback (BreakpointHitCallback callback, void *baton)
56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
568952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5697826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
5707826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    if (log)
571a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton        log->Printf ("SBBreakpoint(%p)::SetCallback (callback=%p, baton=%p)", m_opaque_sp.get(), callback, baton);
5727826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
573567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton    if (m_opaque_sp)
57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
575bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        BatonSP baton_sp(new SBBreakpointCallbackBaton (callback, baton));
57763094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_sp->SetCallback (SBBreakpoint::PrivateBreakpointHitCallback, baton_sp, false);
57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
57924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::Breakpoint *
58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator->() const
58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
58563094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp.get();
58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::Breakpoint *
58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::get() const
59024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
59163094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp.get();
59224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
59324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
59424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::BreakpointSP &
59524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator *()
59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
59763094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp;
59824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
59924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
60024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb::BreakpointSP &
60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBreakpoint::operator *() const
60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
60363094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp;
60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
60628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Inghambool
60728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim InghamSBBreakpoint::EventIsBreakpointEvent (const lldb::SBEvent &event)
60828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham{
60928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    return Breakpoint::BreakpointEventData::GetEventDataFromEvent(event.get()) != NULL;
61028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham
61128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham}
61228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham
613c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonBreakpointEventType
614c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetBreakpointEventTypeFromEvent (const SBEvent& event)
615c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{
616c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    if (event.IsValid())
617c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton        return Breakpoint::BreakpointEventData::GetBreakpointEventTypeFromEvent (event.GetSP());
618c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    return eBreakpointEventTypeInvalidType;
619c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton}
620c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
621c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint
622c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetBreakpointFromEvent (const lldb::SBEvent& event)
623c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{
624c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    SBBreakpoint sb_breakpoint;
625c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    if (event.IsValid())
626c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton        sb_breakpoint.m_opaque_sp = Breakpoint::BreakpointEventData::GetBreakpointFromEvent (event.GetSP());
627c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    return sb_breakpoint;
628c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton}
629c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
630c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpointLocation
631c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg ClaytonSBBreakpoint::GetBreakpointLocationAtIndexFromEvent (const lldb::SBEvent& event, uint32_t loc_idx)
632c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton{
633c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    SBBreakpointLocation sb_breakpoint_loc;
634c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    if (event.IsValid())
635c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton        sb_breakpoint_loc.SetLocation (Breakpoint::BreakpointEventData::GetBreakpointLocationAtIndexFromEvent (event.GetSP(), loc_idx));
636c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton    return sb_breakpoint_loc;
637c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton}
638c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
63928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Inghamuint32_t
64028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim InghamSBBreakpoint::GetNumBreakpointLocationsFromEvent (const lldb::SBEvent &event)
64128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham{
64228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    uint32_t num_locations = 0;
64328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    if (event.IsValid())
64428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham        num_locations = (Breakpoint::BreakpointEventData::GetNumBreakpointLocationsFromEvent (event.GetSP()));
64528e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham    return num_locations;
64628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham}
64728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham
648c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton
649