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{ 118952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1197826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 120bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton lldb::addr_t addr = LLDB_INVALID_ADDRESS; 121334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton TargetSP target_sp (target.GetSP()); 1226837dfd894dffac06d0c02fcf10064b2012de3ddGreg Clayton if (target_sp) 1237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 1246837dfd894dffac06d0c02fcf10064b2012de3ddGreg Clayton if (m_opaque_ap.get()) 1256837dfd894dffac06d0c02fcf10064b2012de3ddGreg Clayton { 1266837dfd894dffac06d0c02fcf10064b2012de3ddGreg Clayton Mutex::Locker api_locker (target_sp->GetAPIMutex()); 1276837dfd894dffac06d0c02fcf10064b2012de3ddGreg Clayton addr = m_opaque_ap->GetLoadAddress (target_sp.get()); 1286837dfd894dffac06d0c02fcf10064b2012de3ddGreg Clayton } 1297826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 130bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton 131bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (log) 1327826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 133bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (addr == LLDB_INVALID_ADDRESS) 134334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => LLDB_INVALID_ADDRESS", target_sp.get()); 135bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton else 1365f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => 0x%" PRIx64, target_sp.get(), addr); 1377826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 138bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton 139bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton return addr; 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 142a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Claytonvoid 143a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target) 144a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton{ 145a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // Create the address object if we don't already have one 146a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton ref(); 147a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton if (target.IsValid()) 148a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton *this = target.ResolveLoadAddress(load_addr); 149a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton else 15069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->Clear(); 151a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 152a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // Check if we weren't were able to resolve a section offset address. 153a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // If we weren't it is ok, the load address might be a location on the 154a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // stack or heap, so we should just have an address with no section and 155a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // a valid offset 156a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton if (!m_opaque_ap->IsValid()) 15769c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->SetOffset(load_addr); 158a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton} 159a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::OffsetAddress (addr_t offset) 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton addr_t addr_offset = m_opaque_ap->GetOffset(); 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (addr_offset != LLDB_INVALID_ADDRESS) 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16869c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->SetOffset(addr_offset + offset); 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1753e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Claytonlldb::SBSection 1763e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonSBAddress::GetSection () 1773e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton{ 1783e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton lldb::SBSection sb_section; 1793e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton if (m_opaque_ap.get()) 18069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_section.SetSP (m_opaque_ap->GetSection()); 1813e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton return sb_section; 1823e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton} 1833e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 1841b925206e3c4867fea9eb55a4c6460962cf32564Greg Claytonlldb::addr_t 1851b925206e3c4867fea9eb55a4c6460962cf32564Greg ClaytonSBAddress::GetOffset () 1861b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton{ 1871b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton if (m_opaque_ap.get()) 188aaf00885e53cfe26b3b89376f97096a9a3ef3b81Greg Clayton return m_opaque_ap->GetOffset(); 1891b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton return 0; 1901b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton} 1913e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 1923e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonAddress * 193466f6c4c0783c6b5197059caccab94faf1e605e9Greg ClaytonSBAddress::operator->() 194466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{ 19569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap.get(); 196466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton} 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1983e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Claytonconst Address * 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBAddress::operator->() const 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 20169c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap.get(); 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2043e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonAddress & 205a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::ref () 206466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton{ 207466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton if (m_opaque_ap.get() == NULL) 20869c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap.reset (new Address()); 20969c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return *m_opaque_ap; 210466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton} 211466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton 2123e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Claytonconst Address & 213a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg ClaytonSBAddress::ref () const 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton // This object should already have checked with "IsValid()" 216a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // prior to calling this function. In case you didn't we will assert 217a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // and die to let you know. 218466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton assert (m_opaque_ap.get()); 21969c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return *m_opaque_ap; 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2223e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg ClaytonAddress * 22361ba7ec20f616f907473dd501341cef5b47fa3f8Caroline TiceSBAddress::get () 22461ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice{ 22569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton return m_opaque_ap.get(); 22661ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice} 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 22998f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBAddress::GetDescription (SBStream &description) 23098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{ 23149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton // Call "ref()" on the stream to make sure it creates a backing stream in 23249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton // case there isn't one already... 23396154be69fa240a662419183ed08e1cfc5418164Greg Clayton Stream &strm = description.ref(); 23498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (m_opaque_ap.get()) 23569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton { 23669c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->Dump (&strm, 23769c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton NULL, 23869c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton Address::DumpStyleResolvedDescription, 23969c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton Address::DumpStyleModuleWithFileAddress, 24069c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton 4); 24169c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton StreamString sstrm; 24269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton// m_opaque_ap->Dump (&sstrm, NULL, Address::DumpStyleResolvedDescription, Address::DumpStyleInvalid, 4); 24369c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton// if (sstrm.GetData()) 24469c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton// strm.Printf (" (%s)", sstrm.GetData()); 24569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton } 24698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice else 24796154be69fa240a662419183ed08e1cfc5418164Greg Clayton strm.PutCString ("No value"); 24898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 24998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice return true; 25098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice} 251b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 252b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBModule 253b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg ClaytonSBAddress::GetModule () 254b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton{ 255b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton SBModule sb_module; 256b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton if (m_opaque_ap.get()) 25769c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_module.SetSP (m_opaque_ap->GetModule()); 258b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton return sb_module; 259b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton} 260b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 261c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBSymbolContext 262c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetSymbolContext (uint32_t resolve_scope) 263c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 264c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBSymbolContext sb_sc; 265c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 26669c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton m_opaque_ap->CalculateSymbolContext (&sb_sc.ref(), resolve_scope); 267c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_sc; 268c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 269c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 270c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBCompileUnit 271c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetCompileUnit () 272c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 273c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBCompileUnit sb_comp_unit; 274c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 27569c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_comp_unit.reset(m_opaque_ap->CalculateSymbolContextCompileUnit()); 276c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_comp_unit; 277c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 278c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 279c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBFunction 280c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetFunction () 281c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 282c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBFunction sb_function; 283c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 28469c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_function.reset(m_opaque_ap->CalculateSymbolContextFunction()); 285c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_function; 286c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 287c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 288c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBBlock 289c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetBlock () 290c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 291c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBBlock sb_block; 292c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 29369c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_block.SetPtr(m_opaque_ap->CalculateSymbolContextBlock()); 294c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_block; 295c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 296c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 297c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBSymbol 298c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetSymbol () 299c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 300c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBSymbol sb_symbol; 301c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 30269c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton sb_symbol.reset(m_opaque_ap->CalculateSymbolContextSymbol()); 303c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_symbol; 304c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 305c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 306c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBLineEntry 307c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSBAddress::GetLineEntry () 308c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{ 309c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton SBLineEntry sb_line_entry; 310c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton if (m_opaque_ap.get()) 311c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton { 312c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton LineEntry line_entry; 31369c540dc5b2b498e4bb9a4cb8d7cd4e3c993bbbcGreg Clayton if (m_opaque_ap->CalculateSymbolContextLineEntry (line_entry)) 314c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton sb_line_entry.SetLineEntry (line_entry); 315c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton } 316c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton return sb_line_entry; 317c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton} 318c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 3197fb143064009e34dbb7a602924e9807375f72a46Greg ClaytonAddressClass 3207fb143064009e34dbb7a602924e9807375f72a46Greg ClaytonSBAddress::GetAddressClass () 3217fb143064009e34dbb7a602924e9807375f72a46Greg Clayton{ 3227fb143064009e34dbb7a602924e9807375f72a46Greg Clayton if (m_opaque_ap.get()) 3237fb143064009e34dbb7a602924e9807375f72a46Greg Clayton return m_opaque_ap->GetAddressClass(); 3247fb143064009e34dbb7a602924e9807375f72a46Greg Clayton return eAddressClassInvalid; 3257fb143064009e34dbb7a602924e9807375f72a46Greg Clayton} 326b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 327