SBAddress.cpp revision c51ffbf896e398ada5f7e89b2fa5aec6f2224f09
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBAddress.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/SBAddress.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBProcess.h"
1298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h"
147826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h"
15b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton#include "lldb/Core/Module.h"
16bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton#include "lldb/Host/Mutex.h"
17bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton#include "lldb/Target/Target.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
207826c8894803dc729f29789ebc038956a94d3e7aCaroline Ticeusing namespace lldb_private;
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::SBAddress () :
2463094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ap ()
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::SBAddress (const lldb_private::Address *lldb_object_ptr) :
2963094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ap ()
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (lldb_object_ptr)
3263094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_ap.reset (new lldb_private::Address(*lldb_object_ptr));
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::SBAddress (const SBAddress &rhs) :
3663094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ap ()
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (rhs.IsValid())
3963094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_ap.reset (new lldb_private::Address(*rhs.m_opaque_ap.get()));
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton// Create an address by resolving a load address using the supplied target
43a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target) :
44a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    m_opaque_ap()
45a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton{
46a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    SetLoadAddress (load_addr, target);
47a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton}
48a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton
49a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton
50a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::~SBAddress ()
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBAddress &
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::operator = (const SBAddress &rhs)
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    if (this != &rhs && rhs.IsValid())
5949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton        m_opaque_ap.reset (new lldb_private::Address(*rhs.m_opaque_ap.get()));
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return *this;
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::IsValid () const
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6663094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_ap.get() != NULL && m_opaque_ap->IsValid();
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
70466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBAddress::Clear ()
71466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
72466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    m_opaque_ap.reset();
73466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
74466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
75466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonvoid
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::SetAddress (const lldb_private::Address *lldb_object_ptr)
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (lldb_object_ptr)
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
8063094e0bb161580564954dee512955c1c79d3476Greg Clayton        if (m_opaque_ap.get())
8163094e0bb161580564954dee512955c1c79d3476Greg Clayton            *m_opaque_ap = *lldb_object_ptr;
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
8363094e0bb161580564954dee512955c1c79d3476Greg Clayton            m_opaque_ap.reset (new lldb_private::Address(*lldb_object_ptr));
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return;
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
8663094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_ap.get())
8763094e0bb161580564954dee512955c1c79d3476Greg Clayton        m_opaque_ap->Clear();
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::addr_t
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::GetFileAddress () const
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_ap.get())
9463094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_ap->GetFileAddress();
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return LLDB_INVALID_ADDRESS;
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::addr_t
100eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg ClaytonSBAddress::GetLoadAddress (const SBTarget &target) const
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
102e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton    LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1037826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
104bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    lldb::addr_t addr = LLDB_INVALID_ADDRESS;
10563094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_ap.get())
1067826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    {
107bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        Mutex::Locker api_locker (target->GetAPIMutex());
108bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        addr = m_opaque_ap->GetLoadAddress (target.get());
1097826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    }
110bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton
111bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    if (log)
1127826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    {
113bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        if (addr == LLDB_INVALID_ADDRESS)
11449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton            log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => LLDB_INVALID_ADDRESS", target.get());
115bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton        else
116bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton            log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => 0x%llx", target.get(), addr);
1177826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    }
118bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton
119bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton    return addr;
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
122a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Claytonvoid
123a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target)
124a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton{
125a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // Create the address object if we don't already have one
126a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    ref();
127a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    if (target.IsValid())
128a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton        *this = target.ResolveLoadAddress(load_addr);
129a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    else
130a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton        m_opaque_ap->Clear();
131a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton
132a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // Check if we weren't were able to resolve a section offset address.
133a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // If we weren't it is ok, the load address might be a location on the
134a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // stack or heap, so we should just have an address with no section and
135a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // a valid offset
136a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    if (!m_opaque_ap->IsValid())
137a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton        m_opaque_ap->SetOffset(load_addr);
138a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton}
139a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::OffsetAddress (addr_t offset)
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
14363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_ap.get())
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
14563094e0bb161580564954dee512955c1c79d3476Greg Clayton        addr_t addr_offset = m_opaque_ap->GetOffset();
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (addr_offset != LLDB_INVALID_ADDRESS)
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
14863094e0bb161580564954dee512955c1c79d3476Greg Clayton            m_opaque_ap->SetOffset(addr_offset + offset);
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return true;
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
155466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonlldb_private::Address *
156466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBAddress::operator->()
157466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
158466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return m_opaque_ap.get();
159466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::Address *
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::operator->() const
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
16463094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_ap.get();
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
167466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonlldb_private::Address &
168a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::ref ()
169466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{
170466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    if (m_opaque_ap.get() == NULL)
171466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton        m_opaque_ap.reset (new lldb_private::Address);
172466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    return *m_opaque_ap;
173466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton}
174466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::Address &
176a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::ref () const
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
178a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // "const SBAddress &addr" should already have checked "addr.IsValid()"
179a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // prior to calling this function. In case you didn't we will assert
180a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton    // and die to let you know.
181466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    assert (m_opaque_ap.get());
18263094e0bb161580564954dee512955c1c79d3476Greg Clayton    return *m_opaque_ap;
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18561ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Ticelldb_private::Address *
18661ba7ec20f616f907473dd501341cef5b47fa3f8Caroline TiceSBAddress::get ()
18761ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice{
18861ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice    return m_opaque_ap.get();
18961ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice}
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool
19298f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBAddress::GetDescription (SBStream &description)
19398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{
19449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    // Call "ref()" on the stream to make sure it creates a backing stream in
19549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    // case there isn't one already...
196e49ec18f1868168c8927ae30a379db176ca8cce3Caroline Tice    description.ref();
19798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    if (m_opaque_ap.get())
19849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton        m_opaque_ap->Dump (description.get(), NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4);
19998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    else
20098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        description.Printf ("No value");
20198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
20298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    return true;
20398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice}
204b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton
205b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSectionType
206b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBAddress::GetSectionType ()
207b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton{
208b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    if (m_opaque_ap.get())
209b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    {
210b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton        const Section *section = m_opaque_ap->GetSection();
211b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton        if (section)
212b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton            return section->GetType();
213b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    }
214b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    return eSectionTypeInvalid;
215b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton}
216b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton
217b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton
218b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBModule
219b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBAddress::GetModule ()
220b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton{
221b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    SBModule sb_module;
222b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    if (m_opaque_ap.get())
223b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    {
224b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton        const Module *module = m_opaque_ap->GetModule();
225b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton        if (module)
226b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton            *sb_module = module->GetSP();
227b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    }
228b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    return sb_module;
229b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton}
230b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton
231c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBSymbolContext
232c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetSymbolContext (uint32_t resolve_scope)
233c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
234c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    SBSymbolContext sb_sc;
235c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    if (m_opaque_ap.get())
236c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        m_opaque_ap->CalculateSymbolContext (&sb_sc.ref(), resolve_scope);
237c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return sb_sc;
238c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
239c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
240c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBCompileUnit
241c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetCompileUnit ()
242c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
243c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    SBCompileUnit sb_comp_unit;
244c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    if (m_opaque_ap.get())
245c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        sb_comp_unit.reset(m_opaque_ap->CalculateSymbolContextCompileUnit());
246c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return sb_comp_unit;
247c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
248c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
249c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBFunction
250c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetFunction ()
251c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
252c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    SBFunction sb_function;
253c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    if (m_opaque_ap.get())
254c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        sb_function.reset(m_opaque_ap->CalculateSymbolContextFunction());
255c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return sb_function;
256c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
257c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
258c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBBlock
259c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetBlock ()
260c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
261c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    SBBlock sb_block;
262c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    if (m_opaque_ap.get())
263c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        sb_block.reset(m_opaque_ap->CalculateSymbolContextBlock());
264c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return sb_block;
265c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
266c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
267c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBSymbol
268c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetSymbol ()
269c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
270c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    SBSymbol sb_symbol;
271c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    if (m_opaque_ap.get())
272c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        sb_symbol.reset(m_opaque_ap->CalculateSymbolContextSymbol());
273c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return sb_symbol;
274c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
275c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
276c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBLineEntry
277c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetLineEntry ()
278c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
279c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    SBLineEntry sb_line_entry;
280c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    if (m_opaque_ap.get())
281c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    {
282c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        LineEntry line_entry;
283c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton        if (m_opaque_ap->CalculateSymbolContextLineEntry (line_entry))
284c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton            sb_line_entry.SetLineEntry (line_entry);
285c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    }
286c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return sb_line_entry;
287c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
288c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
289b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton
290