xref: /src/contrib/llvm-project/lldb/source/API/SBAddressRange.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1ac9a064cSDimitry Andric //===-- SBAddressRange.cpp ------------------------------------------------===//
2ac9a064cSDimitry Andric //
3ac9a064cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ac9a064cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5ac9a064cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ac9a064cSDimitry Andric //
7ac9a064cSDimitry Andric //===----------------------------------------------------------------------===//
8ac9a064cSDimitry Andric 
9ac9a064cSDimitry Andric #include "lldb/API/SBAddressRange.h"
10ac9a064cSDimitry Andric #include "Utils.h"
11ac9a064cSDimitry Andric #include "lldb/API/SBAddress.h"
12ac9a064cSDimitry Andric #include "lldb/API/SBStream.h"
13ac9a064cSDimitry Andric #include "lldb/API/SBTarget.h"
14ac9a064cSDimitry Andric #include "lldb/Core/AddressRange.h"
15ac9a064cSDimitry Andric #include "lldb/Core/Section.h"
16ac9a064cSDimitry Andric #include "lldb/Utility/Instrumentation.h"
17ac9a064cSDimitry Andric #include "lldb/Utility/Stream.h"
18ac9a064cSDimitry Andric #include <cstddef>
19ac9a064cSDimitry Andric #include <memory>
20ac9a064cSDimitry Andric 
21ac9a064cSDimitry Andric using namespace lldb;
22ac9a064cSDimitry Andric using namespace lldb_private;
23ac9a064cSDimitry Andric 
SBAddressRange()24ac9a064cSDimitry Andric SBAddressRange::SBAddressRange()
25ac9a064cSDimitry Andric     : m_opaque_up(std::make_unique<AddressRange>()) {
26ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this);
27ac9a064cSDimitry Andric }
28ac9a064cSDimitry Andric 
SBAddressRange(const SBAddressRange & rhs)29ac9a064cSDimitry Andric SBAddressRange::SBAddressRange(const SBAddressRange &rhs) {
30ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
31ac9a064cSDimitry Andric 
32ac9a064cSDimitry Andric   m_opaque_up = clone(rhs.m_opaque_up);
33ac9a064cSDimitry Andric }
34ac9a064cSDimitry Andric 
SBAddressRange(lldb::SBAddress addr,lldb::addr_t byte_size)35ac9a064cSDimitry Andric SBAddressRange::SBAddressRange(lldb::SBAddress addr, lldb::addr_t byte_size)
36ac9a064cSDimitry Andric     : m_opaque_up(std::make_unique<AddressRange>(addr.ref(), byte_size)) {
37ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this, addr, byte_size);
38ac9a064cSDimitry Andric }
39ac9a064cSDimitry Andric 
40ac9a064cSDimitry Andric SBAddressRange::~SBAddressRange() = default;
41ac9a064cSDimitry Andric 
operator =(const SBAddressRange & rhs)42ac9a064cSDimitry Andric const SBAddressRange &SBAddressRange::operator=(const SBAddressRange &rhs) {
43ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
44ac9a064cSDimitry Andric 
45ac9a064cSDimitry Andric   if (this != &rhs)
46ac9a064cSDimitry Andric     m_opaque_up = clone(rhs.m_opaque_up);
47ac9a064cSDimitry Andric   return *this;
48ac9a064cSDimitry Andric }
49ac9a064cSDimitry Andric 
operator ==(const SBAddressRange & rhs)50ac9a064cSDimitry Andric bool SBAddressRange::operator==(const SBAddressRange &rhs) {
51ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
52ac9a064cSDimitry Andric 
53ac9a064cSDimitry Andric   return ref().operator==(rhs.ref());
54ac9a064cSDimitry Andric }
55ac9a064cSDimitry Andric 
operator !=(const SBAddressRange & rhs)56ac9a064cSDimitry Andric bool SBAddressRange::operator!=(const SBAddressRange &rhs) {
57ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
58ac9a064cSDimitry Andric 
59ac9a064cSDimitry Andric   return !(*this == rhs);
60ac9a064cSDimitry Andric }
61ac9a064cSDimitry Andric 
Clear()62ac9a064cSDimitry Andric void SBAddressRange::Clear() {
63ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this);
64ac9a064cSDimitry Andric 
65ac9a064cSDimitry Andric   ref().Clear();
66ac9a064cSDimitry Andric }
67ac9a064cSDimitry Andric 
IsValid() const68ac9a064cSDimitry Andric bool SBAddressRange::IsValid() const {
69ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this);
70ac9a064cSDimitry Andric 
71ac9a064cSDimitry Andric   return ref().IsValid();
72ac9a064cSDimitry Andric }
73ac9a064cSDimitry Andric 
GetBaseAddress() const74ac9a064cSDimitry Andric lldb::SBAddress SBAddressRange::GetBaseAddress() const {
75ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this);
76ac9a064cSDimitry Andric 
77ac9a064cSDimitry Andric   return lldb::SBAddress(ref().GetBaseAddress());
78ac9a064cSDimitry Andric }
79ac9a064cSDimitry Andric 
GetByteSize() const80ac9a064cSDimitry Andric lldb::addr_t SBAddressRange::GetByteSize() const {
81ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this);
82ac9a064cSDimitry Andric 
83ac9a064cSDimitry Andric   return ref().GetByteSize();
84ac9a064cSDimitry Andric }
85ac9a064cSDimitry Andric 
GetDescription(SBStream & description,const SBTarget target)86ac9a064cSDimitry Andric bool SBAddressRange::GetDescription(SBStream &description,
87ac9a064cSDimitry Andric                                     const SBTarget target) {
88ac9a064cSDimitry Andric   LLDB_INSTRUMENT_VA(this, description, target);
89ac9a064cSDimitry Andric 
90ac9a064cSDimitry Andric   return ref().GetDescription(&description.ref(), target.GetSP().get());
91ac9a064cSDimitry Andric }
92ac9a064cSDimitry Andric 
ref() const93ac9a064cSDimitry Andric lldb_private::AddressRange &SBAddressRange::ref() const {
94ac9a064cSDimitry Andric   assert(m_opaque_up && "opaque pointer must always be valid");
95ac9a064cSDimitry Andric   return *m_opaque_up;
96ac9a064cSDimitry Andric }
97