aboutsummaryrefslogtreecommitdiff
path: root/lldb
diff options
context:
space:
mode:
authorMiro Bucko <mbucko@meta.com>2024-06-21 11:24:48 -0400
committerGitHub <noreply@github.com>2024-06-21 11:24:48 -0400
commita083e50f53f0f9eb9ad0c5b65f3c627cf97043e6 (patch)
treeb8e3d50ec361152b0e4556f777de067464c21f4c /lldb
parent3de162fee44376b3857c73958d656f76b17e50f5 (diff)
downloadllvm-a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6.zip
llvm-a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6.tar.gz
llvm-a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6.tar.bz2
[lldb] Fix SBAddressRange validation checks. (#95997)
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/API/SBAddressRange.h6
-rw-r--r--lldb/include/lldb/API/SBAddressRangeList.h2
-rw-r--r--lldb/source/API/SBAddressRange.cpp29
-rw-r--r--lldb/source/API/SBAddressRangeList.cpp17
-rw-r--r--lldb/test/API/python_api/address_range/TestAddressRange.py2
5 files changed, 31 insertions, 25 deletions
diff --git a/lldb/include/lldb/API/SBAddressRange.h b/lldb/include/lldb/API/SBAddressRange.h
index 152bd82..5c4d6b8 100644
--- a/lldb/include/lldb/API/SBAddressRange.h
+++ b/lldb/include/lldb/API/SBAddressRange.h
@@ -11,6 +11,10 @@
#include "lldb/API/SBDefines.h"
+namespace lldb_private {
+class AddressRange;
+}
+
namespace lldb {
class LLDB_API SBAddressRange {
@@ -58,6 +62,8 @@ private:
friend class SBFunction;
friend class SBProcess;
+ lldb_private::AddressRange &ref() const;
+
AddressRangeUP m_opaque_up;
};
diff --git a/lldb/include/lldb/API/SBAddressRangeList.h b/lldb/include/lldb/API/SBAddressRangeList.h
index a123287..5a4eeec 100644
--- a/lldb/include/lldb/API/SBAddressRangeList.h
+++ b/lldb/include/lldb/API/SBAddressRangeList.h
@@ -46,6 +46,8 @@ private:
friend class SBBlock;
friend class SBProcess;
+ lldb_private::AddressRangeListImpl &ref() const;
+
std::unique_ptr<lldb_private::AddressRangeListImpl> m_opaque_up;
};
diff --git a/lldb/source/API/SBAddressRange.cpp b/lldb/source/API/SBAddressRange.cpp
index 9b1affd..5834ebe 100644
--- a/lldb/source/API/SBAddressRange.cpp
+++ b/lldb/source/API/SBAddressRange.cpp
@@ -50,9 +50,7 @@ const SBAddressRange &SBAddressRange::operator=(const SBAddressRange &rhs) {
bool SBAddressRange::operator==(const SBAddressRange &rhs) {
LLDB_INSTRUMENT_VA(this, rhs);
- if (!IsValid() || !rhs.IsValid())
- return false;
- return m_opaque_up->operator==(*(rhs.m_opaque_up));
+ return ref().operator==(rhs.ref());
}
bool SBAddressRange::operator!=(const SBAddressRange &rhs) {
@@ -64,40 +62,35 @@ bool SBAddressRange::operator!=(const SBAddressRange &rhs) {
void SBAddressRange::Clear() {
LLDB_INSTRUMENT_VA(this);
- m_opaque_up.reset();
+ ref().Clear();
}
bool SBAddressRange::IsValid() const {
LLDB_INSTRUMENT_VA(this);
- return m_opaque_up && m_opaque_up->IsValid();
+ return ref().IsValid();
}
lldb::SBAddress SBAddressRange::GetBaseAddress() const {
LLDB_INSTRUMENT_VA(this);
- if (!IsValid())
- return lldb::SBAddress();
- return lldb::SBAddress(m_opaque_up->GetBaseAddress());
+ return lldb::SBAddress(ref().GetBaseAddress());
}
lldb::addr_t SBAddressRange::GetByteSize() const {
LLDB_INSTRUMENT_VA(this);
- if (!IsValid())
- return 0;
- return m_opaque_up->GetByteSize();
+ return ref().GetByteSize();
}
bool SBAddressRange::GetDescription(SBStream &description,
const SBTarget target) {
LLDB_INSTRUMENT_VA(this, description, target);
- Stream &stream = description.ref();
- if (!IsValid()) {
- stream << "<invalid>";
- return true;
- }
- m_opaque_up->GetDescription(&stream, target.GetSP().get());
- return true;
+ return ref().GetDescription(&description.ref(), target.GetSP().get());
+}
+
+lldb_private::AddressRange &SBAddressRange::ref() const {
+ assert(m_opaque_up && "opaque pointer must always be valid");
+ return *m_opaque_up;
}
diff --git a/lldb/source/API/SBAddressRangeList.cpp b/lldb/source/API/SBAddressRangeList.cpp
index 20660b3..957155d 100644
--- a/lldb/source/API/SBAddressRangeList.cpp
+++ b/lldb/source/API/SBAddressRangeList.cpp
@@ -37,40 +37,40 @@ SBAddressRangeList::operator=(const SBAddressRangeList &rhs) {
LLDB_INSTRUMENT_VA(this, rhs);
if (this != &rhs)
- *m_opaque_up = *rhs.m_opaque_up;
+ ref() = rhs.ref();
return *this;
}
uint32_t SBAddressRangeList::GetSize() const {
LLDB_INSTRUMENT_VA(this);
- return m_opaque_up->GetSize();
+ return ref().GetSize();
}
SBAddressRange SBAddressRangeList::GetAddressRangeAtIndex(uint64_t idx) {
LLDB_INSTRUMENT_VA(this, idx);
SBAddressRange sb_addr_range;
- (*sb_addr_range.m_opaque_up) = m_opaque_up->GetAddressRangeAtIndex(idx);
+ (*sb_addr_range.m_opaque_up) = ref().GetAddressRangeAtIndex(idx);
return sb_addr_range;
}
void SBAddressRangeList::Clear() {
LLDB_INSTRUMENT_VA(this);
- m_opaque_up->Clear();
+ ref().Clear();
}
void SBAddressRangeList::Append(const SBAddressRange &sb_addr_range) {
LLDB_INSTRUMENT_VA(this, sb_addr_range);
- m_opaque_up->Append(*sb_addr_range.m_opaque_up);
+ ref().Append(*sb_addr_range.m_opaque_up);
}
void SBAddressRangeList::Append(const SBAddressRangeList &sb_addr_range_list) {
LLDB_INSTRUMENT_VA(this, sb_addr_range_list);
- m_opaque_up->Append(*sb_addr_range_list.m_opaque_up);
+ ref().Append(*sb_addr_range_list.m_opaque_up);
}
bool SBAddressRangeList::GetDescription(SBStream &description,
@@ -92,3 +92,8 @@ bool SBAddressRangeList::GetDescription(SBStream &description,
stream << "]";
return true;
}
+
+lldb_private::AddressRangeListImpl &SBAddressRangeList::ref() const {
+ assert(m_opaque_up && "opaque pointer must always be valid");
+ return *m_opaque_up;
+}
diff --git a/lldb/test/API/python_api/address_range/TestAddressRange.py b/lldb/test/API/python_api/address_range/TestAddressRange.py
index 86ca4a6..ae4b8c7 100644
--- a/lldb/test/API/python_api/address_range/TestAddressRange.py
+++ b/lldb/test/API/python_api/address_range/TestAddressRange.py
@@ -166,7 +166,7 @@ class AddressRangeTestCase(TestBase):
def test_address_range_print_invalid(self):
"""Make sure the SBAddressRange can be printed when invalid."""
range = lldb.SBAddressRange()
- self.assertEqual(str(range), "<invalid>")
+ self.assertEqual(str(range), "[0xffffffffffffffff-0xffffffffffffffff)")
def test_address_range_print_resolved(self):
"""Make sure the SBAddressRange can be printed when resolved."""