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