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