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