SBAddress.cpp revision 7fb143064009e34dbb7a602924e9807375f72a46
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" 123e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton#include "lldb/API/SBSection.h" 1398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h" 157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h" 16b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton#include "lldb/Core/Module.h" 17bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton#include "lldb/Host/Mutex.h" 18bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton#include "lldb/Target/Target.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 203e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 227826c8894803dc729f29789ebc038956a94d3e7aCaroline Ticeusing namespace lldb_private; 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::SBAddress () : 2663094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap () 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 303e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonSBAddress::SBAddress (const Address *lldb_object_ptr) : 3163094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap () 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lldb_object_ptr) 3469c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton ref() = *lldb_object_ptr; 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::SBAddress (const SBAddress &rhs) : 3863094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap () 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (rhs.IsValid()) 4169c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton ref() = rhs.ref(); 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4439f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton 4539f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg ClaytonSBAddress::SBAddress (lldb::SBSection section, lldb::addr_t offset) : 4669c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap(new Address (section.GetSP(), offset)) 4739f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton{ 4839f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton} 4939f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton 50a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton// Create an address by resolving a load address using the supplied target 51a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target) : 52a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton m_opaque_ap() 53a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton{ 54a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton SetLoadAddress (load_addr, target); 55a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton} 56a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 57a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 58a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::~SBAddress () 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBAddress & 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::operator = (const SBAddress &rhs) 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 663e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton if (this != &rhs) 673e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton { 683e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton if (rhs.IsValid()) 6969c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton ref() = rhs.ref(); 703e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton else 713e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton m_opaque_ap.reset(); 723e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton } 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::IsValid () const 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7963094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ap.get() != NULL && m_opaque_ap->IsValid(); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 83466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBAddress::Clear () 84466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{ 85466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton m_opaque_ap.reset(); 86466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton} 87466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton 88466f6c4c0783c6b5197059caccab94faf1e605e9Greg Claytonvoid 8939f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg ClaytonSBAddress::SetAddress (lldb::SBSection section, lldb::addr_t offset) 9039f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton{ 9139f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton Address &addr = ref(); 923508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton addr.SetSection (section.GetSP()); 9339f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton addr.SetOffset (offset); 9439f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton} 9539f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton 9639f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton 9739f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Claytonvoid 983e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonSBAddress::SetAddress (const Address *lldb_object_ptr) 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (lldb_object_ptr) 10169c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton ref() = *lldb_object_ptr; 1023e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton else 1033e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton m_opaque_ap.reset(); 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::addr_t 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::GetFileAddress () const 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 10963094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 11069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap->GetFileAddress(); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return LLDB_INVALID_ADDRESS; 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::addr_t 116eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg ClaytonSBAddress::GetLoadAddress (const SBTarget &target) const 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 1183e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1197826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 120bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton lldb::addr_t addr = LLDB_INVALID_ADDRESS; 121334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton TargetSP target_sp (target.GetSP()); 12263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 1237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 124334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton Mutex::Locker api_locker (target_sp->GetAPIMutex()); 12569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton addr = m_opaque_ap->GetLoadAddress (target_sp.get()); 1267826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 127bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton 128bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (log) 1297826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 130bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (addr == LLDB_INVALID_ADDRESS) 131334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => LLDB_INVALID_ADDRESS", target_sp.get()); 132bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton else 133334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => 0x%llx", target_sp.get(), addr); 1347826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 135bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton 136bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton return addr; 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 139a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Claytonvoid 140a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target) 141a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton{ 142a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // Create the address object if we don't already have one 143a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton ref(); 144a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton if (target.IsValid()) 145a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton *this = target.ResolveLoadAddress(load_addr); 146a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton else 14769c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->Clear(); 148a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 149a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // Check if we weren't were able to resolve a section offset address. 150a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // If we weren't it is ok, the load address might be a location on the 151a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // stack or heap, so we should just have an address with no section and 152a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // a valid offset 153a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton if (!m_opaque_ap->IsValid()) 15469c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->SetOffset(load_addr); 155a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton} 156a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::OffsetAddress (addr_t offset) 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton addr_t addr_offset = m_opaque_ap->GetOffset(); 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (addr_offset != LLDB_INVALID_ADDRESS) 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->SetOffset(addr_offset + offset); 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1723e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Claytonlldb::SBSection 1733e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonSBAddress::GetSection () 1743e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton{ 1753e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton lldb::SBSection sb_section; 1763e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton if (m_opaque_ap.get()) 17769c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_section.SetSP (m_opaque_ap->GetSection()); 1783e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton return sb_section; 1793e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton} 1803e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 1811b925206e3c4867fea9eb55a4c6460962cf32564Greg Claytonlldb::addr_t 1821b925206e3c4867fea9eb55a4c6460962cf32564Greg ClaytonSBAddress::GetOffset () 1831b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton{ 1841b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton if (m_opaque_ap.get()) 18569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->GetOffset(); 1861b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton return 0; 1871b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton} 1883e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 1893e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonAddress * 190466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBAddress::operator->() 191466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{ 19269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap.get(); 193466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton} 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1953e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Claytonconst Address * 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::operator->() const 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19869c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap.get(); 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2013e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonAddress & 202a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::ref () 203466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{ 204466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton if (m_opaque_ap.get() == NULL) 20569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap.reset (new Address()); 20669c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return *m_opaque_ap; 207466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton} 208466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton 2093e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Claytonconst Address & 210a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::ref () const 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton // This object should already have checked with "IsValid()" 213a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // prior to calling this function. In case you didn't we will assert 214a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // and die to let you know. 215466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton assert (m_opaque_ap.get()); 21669c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return *m_opaque_ap; 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2193e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonAddress * 22061ba7ec20f616f907473dd501341cef5b47fa3f8Caroline TiceSBAddress::get () 22161ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice{ 22269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap.get(); 22361ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice} 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 22698f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBAddress::GetDescription (SBStream &description) 22798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{ 22849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton // Call "ref()" on the stream to make sure it creates a backing stream in 22949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton // case there isn't one already... 23096154be69fa240a662419183ed08e1cfc5418164Greg Clayton Stream &strm = description.ref(); 23198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (m_opaque_ap.get()) 23269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton { 23369c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->Dump (&strm, 23469c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton NULL, 23569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton Address::DumpStyleResolvedDescription, 23669c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton Address::DumpStyleModuleWithFileAddress, 23769c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton 4); 23869c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton StreamString sstrm; 23969c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton// m_opaque_ap->Dump (&sstrm, NULL, Address::DumpStyleResolvedDescription, Address::DumpStyleInvalid, 4); 24069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton// if (sstrm.GetData()) 24169c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton// strm.Printf (" (%s)", sstrm.GetData()); 24269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton } 24398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice else 24496154be69fa240a662419183ed08e1cfc5418164Greg Clayton strm.PutCString ("No value"); 24598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 24698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice return true; 24798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice} 248b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 249b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBModule 250b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBAddress::GetModule () 251b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton{ 252b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton SBModule sb_module; 253b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton if (m_opaque_ap.get()) 25469c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_module.SetSP (m_opaque_ap->GetModule()); 255b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton return sb_module; 256b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton} 257b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 258c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBSymbolContext 259c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetSymbolContext (uint32_t resolve_scope) 260c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 261c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBSymbolContext sb_sc; 262c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 26369c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->CalculateSymbolContext (&sb_sc.ref(), resolve_scope); 264c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_sc; 265c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 266c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 267c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBCompileUnit 268c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetCompileUnit () 269c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 270c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBCompileUnit sb_comp_unit; 271c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 27269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_comp_unit.reset(m_opaque_ap->CalculateSymbolContextCompileUnit()); 273c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_comp_unit; 274c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 275c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 276c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBFunction 277c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetFunction () 278c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 279c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBFunction sb_function; 280c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 28169c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_function.reset(m_opaque_ap->CalculateSymbolContextFunction()); 282c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_function; 283c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 284c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 285c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBBlock 286c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetBlock () 287c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 288c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBBlock sb_block; 289c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 29069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_block.SetPtr(m_opaque_ap->CalculateSymbolContextBlock()); 291c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_block; 292c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 293c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 294c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBSymbol 295c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetSymbol () 296c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 297c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBSymbol sb_symbol; 298c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 29969c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_symbol.reset(m_opaque_ap->CalculateSymbolContextSymbol()); 300c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_symbol; 301c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 302c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 303c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBLineEntry 304c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetLineEntry () 305c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 306c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBLineEntry sb_line_entry; 307c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 308c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton { 309c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton LineEntry line_entry; 31069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton if (m_opaque_ap->CalculateSymbolContextLineEntry (line_entry)) 311c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton sb_line_entry.SetLineEntry (line_entry); 312c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton } 313c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_line_entry; 314c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 315c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 3167fb143064009e34dbb7a602924e9807375f72a46Greg ClaytonAddressClass 3177fb143064009e34dbb7a602924e9807375f72a46Greg ClaytonSBAddress::GetAddressClass () 3187fb143064009e34dbb7a602924e9807375f72a46Greg Clayton{ 3197fb143064009e34dbb7a602924e9807375f72a46Greg Clayton if (m_opaque_ap.get()) 3207fb143064009e34dbb7a602924e9807375f72a46Greg Clayton return m_opaque_ap->GetAddressClass(); 3217fb143064009e34dbb7a602924e9807375f72a46Greg Clayton return eAddressClassInvalid; 3227fb143064009e34dbb7a602924e9807375f72a46Greg Clayton} 323b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 324