blob: c93b46b03354dbe735a06f42826fe7d54aac3173 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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
14using namespace lldb;
15
16
17SBAddress::SBAddress () :
Greg Clayton63094e02010-06-23 01:19:29 +000018 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000019{
20}
21
22SBAddress::SBAddress (const lldb_private::Address *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000023 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000024{
25 if (lldb_object_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_ap.reset (new lldb_private::Address(*lldb_object_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000027}
28
29SBAddress::SBAddress (const SBAddress &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000030 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000031{
32 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000033 m_opaque_ap.reset (new lldb_private::Address(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000034}
35
36SBAddress::~SBAddress ()
37{
38}
39
40const SBAddress &
41SBAddress::operator = (const SBAddress &rhs)
42{
43 if (this != &rhs)
44 {
45 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000046 m_opaque_ap.reset (new lldb_private::Address(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000047 }
48 return *this;
49}
50
51bool
52SBAddress::IsValid () const
53{
Greg Clayton63094e02010-06-23 01:19:29 +000054 return m_opaque_ap.get() != NULL && m_opaque_ap->IsValid();
Chris Lattner24943d22010-06-08 16:52:24 +000055}
56
57void
58SBAddress::SetAddress (const lldb_private::Address *lldb_object_ptr)
59{
60 if (lldb_object_ptr)
61 {
Greg Clayton63094e02010-06-23 01:19:29 +000062 if (m_opaque_ap.get())
63 *m_opaque_ap = *lldb_object_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000064 else
Greg Clayton63094e02010-06-23 01:19:29 +000065 m_opaque_ap.reset (new lldb_private::Address(*lldb_object_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000066 return;
67 }
Greg Clayton63094e02010-06-23 01:19:29 +000068 if (m_opaque_ap.get())
69 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000070}
71
72lldb::addr_t
73SBAddress::GetFileAddress () const
74{
Greg Clayton63094e02010-06-23 01:19:29 +000075 if (m_opaque_ap.get())
76 return m_opaque_ap->GetFileAddress();
Chris Lattner24943d22010-06-08 16:52:24 +000077 else
78 return LLDB_INVALID_ADDRESS;
79}
80
81lldb::addr_t
82SBAddress::GetLoadAddress (const SBProcess &process) const
83{
Greg Clayton63094e02010-06-23 01:19:29 +000084 if (m_opaque_ap.get())
85 return m_opaque_ap->GetLoadAddress(process.get());
Chris Lattner24943d22010-06-08 16:52:24 +000086 else
87 return LLDB_INVALID_ADDRESS;
88}
89
90bool
91SBAddress::OffsetAddress (addr_t offset)
92{
Greg Clayton63094e02010-06-23 01:19:29 +000093 if (m_opaque_ap.get())
Chris Lattner24943d22010-06-08 16:52:24 +000094 {
Greg Clayton63094e02010-06-23 01:19:29 +000095 addr_t addr_offset = m_opaque_ap->GetOffset();
Chris Lattner24943d22010-06-08 16:52:24 +000096 if (addr_offset != LLDB_INVALID_ADDRESS)
97 {
Greg Clayton63094e02010-06-23 01:19:29 +000098 m_opaque_ap->SetOffset(addr_offset + offset);
Chris Lattner24943d22010-06-08 16:52:24 +000099 return true;
100 }
101 }
102 return false;
103}
104
105
106const lldb_private::Address *
107SBAddress::operator->() const
108{
Greg Clayton63094e02010-06-23 01:19:29 +0000109 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000110}
111
112const lldb_private::Address &
113SBAddress::operator*() const
114{
Greg Clayton63094e02010-06-23 01:19:29 +0000115 return *m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +0000116}
117
118