1 //===-- SBAddress.cpp -------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/API/SBAddress.h" 11 #include "lldb/API/SBProcess.h" 12 #include "lldb/Core/Address.h" 13 14 using namespace lldb; 15 16 17 SBAddress::SBAddress () : 18 m_lldb_object_ap () 19 { 20 } 21 22 SBAddress::SBAddress (const lldb_private::Address *lldb_object_ptr) : 23 m_lldb_object_ap () 24 { 25 if (lldb_object_ptr) 26 m_lldb_object_ap.reset (new lldb_private::Address(*lldb_object_ptr)); 27 } 28 29 SBAddress::SBAddress (const SBAddress &rhs) : 30 m_lldb_object_ap () 31 { 32 if (rhs.IsValid()) 33 m_lldb_object_ap.reset (new lldb_private::Address(*rhs.m_lldb_object_ap.get())); 34 } 35 36 SBAddress::~SBAddress () 37 { 38 } 39 40 const SBAddress & 41 SBAddress::operator = (const SBAddress &rhs) 42 { 43 if (this != &rhs) 44 { 45 if (rhs.IsValid()) 46 m_lldb_object_ap.reset (new lldb_private::Address(*rhs.m_lldb_object_ap.get())); 47 } 48 return *this; 49 } 50 51 bool 52 SBAddress::IsValid () const 53 { 54 return m_lldb_object_ap.get() != NULL && m_lldb_object_ap->IsValid(); 55 } 56 57 void 58 SBAddress::SetAddress (const lldb_private::Address *lldb_object_ptr) 59 { 60 if (lldb_object_ptr) 61 { 62 if (m_lldb_object_ap.get()) 63 *m_lldb_object_ap = *lldb_object_ptr; 64 else 65 m_lldb_object_ap.reset (new lldb_private::Address(*lldb_object_ptr)); 66 return; 67 } 68 if (m_lldb_object_ap.get()) 69 m_lldb_object_ap->Clear(); 70 } 71 72 lldb::addr_t 73 SBAddress::GetFileAddress () const 74 { 75 if (m_lldb_object_ap.get()) 76 return m_lldb_object_ap->GetFileAddress(); 77 else 78 return LLDB_INVALID_ADDRESS; 79 } 80 81 lldb::addr_t 82 SBAddress::GetLoadAddress (const SBProcess &process) const 83 { 84 if (m_lldb_object_ap.get()) 85 return m_lldb_object_ap->GetLoadAddress(process.get()); 86 else 87 return LLDB_INVALID_ADDRESS; 88 } 89 90 bool 91 SBAddress::OffsetAddress (addr_t offset) 92 { 93 if (m_lldb_object_ap.get()) 94 { 95 addr_t addr_offset = m_lldb_object_ap->GetOffset(); 96 if (addr_offset != LLDB_INVALID_ADDRESS) 97 { 98 m_lldb_object_ap->SetOffset(addr_offset + offset); 99 return true; 100 } 101 } 102 return false; 103 } 104 105 106 const lldb_private::Address * 107 SBAddress::operator->() const 108 { 109 return m_lldb_object_ap.get(); 110 } 111 112 const lldb_private::Address & 113 SBAddress::operator*() const 114 { 115 return *m_lldb_object_ap; 116 } 117 118 119