| //===-- SBMemoryRegionInfo.cpp ----------------------------------*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "lldb/API/SBMemoryRegionInfo.h" | |
| #include "SBReproducerPrivate.h" | |
| #include "Utils.h" | |
| #include "lldb/API/SBDefines.h" | |
| #include "lldb/API/SBError.h" | |
| #include "lldb/API/SBStream.h" | |
| #include "lldb/Target/MemoryRegionInfo.h" | |
| #include "lldb/Utility/StreamString.h" | |
| using namespace lldb; | |
| using namespace lldb_private; | |
| SBMemoryRegionInfo::SBMemoryRegionInfo() : m_opaque_up(new MemoryRegionInfo()) { | |
| LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBMemoryRegionInfo); | |
| } | |
| SBMemoryRegionInfo::SBMemoryRegionInfo(const MemoryRegionInfo *lldb_object_ptr) | |
| : m_opaque_up(new MemoryRegionInfo()) { | |
| if (lldb_object_ptr) | |
| ref() = *lldb_object_ptr; | |
| } | |
| SBMemoryRegionInfo::SBMemoryRegionInfo(const SBMemoryRegionInfo &rhs) | |
| : m_opaque_up() { | |
| LLDB_RECORD_CONSTRUCTOR(SBMemoryRegionInfo, | |
| (const lldb::SBMemoryRegionInfo &), rhs); | |
| m_opaque_up = clone(rhs.m_opaque_up); | |
| } | |
| const SBMemoryRegionInfo &SBMemoryRegionInfo:: | |
| operator=(const SBMemoryRegionInfo &rhs) { | |
| LLDB_RECORD_METHOD( | |
| const lldb::SBMemoryRegionInfo &, | |
| SBMemoryRegionInfo, operator=,(const lldb::SBMemoryRegionInfo &), rhs); | |
| if (this != &rhs) | |
| m_opaque_up = clone(rhs.m_opaque_up); | |
| return LLDB_RECORD_RESULT(*this); | |
| } | |
| SBMemoryRegionInfo::~SBMemoryRegionInfo() {} | |
| void SBMemoryRegionInfo::Clear() { | |
| LLDB_RECORD_METHOD_NO_ARGS(void, SBMemoryRegionInfo, Clear); | |
| m_opaque_up->Clear(); | |
| } | |
| bool SBMemoryRegionInfo::operator==(const SBMemoryRegionInfo &rhs) const { | |
| LLDB_RECORD_METHOD_CONST( | |
| bool, SBMemoryRegionInfo, operator==,(const lldb::SBMemoryRegionInfo &), | |
| rhs); | |
| return ref() == rhs.ref(); | |
| } | |
| bool SBMemoryRegionInfo::operator!=(const SBMemoryRegionInfo &rhs) const { | |
| LLDB_RECORD_METHOD_CONST( | |
| bool, SBMemoryRegionInfo, operator!=,(const lldb::SBMemoryRegionInfo &), | |
| rhs); | |
| return ref() != rhs.ref(); | |
| } | |
| MemoryRegionInfo &SBMemoryRegionInfo::ref() { return *m_opaque_up; } | |
| const MemoryRegionInfo &SBMemoryRegionInfo::ref() const { return *m_opaque_up; } | |
| lldb::addr_t SBMemoryRegionInfo::GetRegionBase() { | |
| LLDB_RECORD_METHOD_NO_ARGS(lldb::addr_t, SBMemoryRegionInfo, GetRegionBase); | |
| return m_opaque_up->GetRange().GetRangeBase(); | |
| } | |
| lldb::addr_t SBMemoryRegionInfo::GetRegionEnd() { | |
| LLDB_RECORD_METHOD_NO_ARGS(lldb::addr_t, SBMemoryRegionInfo, GetRegionEnd); | |
| return m_opaque_up->GetRange().GetRangeEnd(); | |
| } | |
| bool SBMemoryRegionInfo::IsReadable() { | |
| LLDB_RECORD_METHOD_NO_ARGS(bool, SBMemoryRegionInfo, IsReadable); | |
| return m_opaque_up->GetReadable() == MemoryRegionInfo::eYes; | |
| } | |
| bool SBMemoryRegionInfo::IsWritable() { | |
| LLDB_RECORD_METHOD_NO_ARGS(bool, SBMemoryRegionInfo, IsWritable); | |
| return m_opaque_up->GetWritable() == MemoryRegionInfo::eYes; | |
| } | |
| bool SBMemoryRegionInfo::IsExecutable() { | |
| LLDB_RECORD_METHOD_NO_ARGS(bool, SBMemoryRegionInfo, IsExecutable); | |
| return m_opaque_up->GetExecutable() == MemoryRegionInfo::eYes; | |
| } | |
| bool SBMemoryRegionInfo::IsMapped() { | |
| LLDB_RECORD_METHOD_NO_ARGS(bool, SBMemoryRegionInfo, IsMapped); | |
| return m_opaque_up->GetMapped() == MemoryRegionInfo::eYes; | |
| } | |
| const char *SBMemoryRegionInfo::GetName() { | |
| LLDB_RECORD_METHOD_NO_ARGS(const char *, SBMemoryRegionInfo, GetName); | |
| return m_opaque_up->GetName().AsCString(); | |
| } | |
| bool SBMemoryRegionInfo::GetDescription(SBStream &description) { | |
| LLDB_RECORD_METHOD(bool, SBMemoryRegionInfo, GetDescription, | |
| (lldb::SBStream &), description); | |
| Stream &strm = description.ref(); | |
| const addr_t load_addr = m_opaque_up->GetRange().base; | |
| strm.Printf("[0x%16.16" PRIx64 "-0x%16.16" PRIx64 " ", load_addr, | |
| load_addr + m_opaque_up->GetRange().size); | |
| strm.Printf(m_opaque_up->GetReadable() ? "R" : "-"); | |
| strm.Printf(m_opaque_up->GetWritable() ? "W" : "-"); | |
| strm.Printf(m_opaque_up->GetExecutable() ? "X" : "-"); | |
| strm.Printf("]"); | |
| return true; | |
| } | |
| namespace lldb_private { | |
| namespace repro { | |
| template <> | |
| void RegisterMethods<SBMemoryRegionInfo>(Registry &R) { | |
| LLDB_REGISTER_CONSTRUCTOR(SBMemoryRegionInfo, ()); | |
| LLDB_REGISTER_CONSTRUCTOR(SBMemoryRegionInfo, | |
| (const lldb::SBMemoryRegionInfo &)); | |
| LLDB_REGISTER_METHOD( | |
| const lldb::SBMemoryRegionInfo &, | |
| SBMemoryRegionInfo, operator=,(const lldb::SBMemoryRegionInfo &)); | |
| LLDB_REGISTER_METHOD(void, SBMemoryRegionInfo, Clear, ()); | |
| LLDB_REGISTER_METHOD_CONST( | |
| bool, | |
| SBMemoryRegionInfo, operator==,(const lldb::SBMemoryRegionInfo &)); | |
| LLDB_REGISTER_METHOD_CONST( | |
| bool, | |
| SBMemoryRegionInfo, operator!=,(const lldb::SBMemoryRegionInfo &)); | |
| LLDB_REGISTER_METHOD(lldb::addr_t, SBMemoryRegionInfo, GetRegionBase, ()); | |
| LLDB_REGISTER_METHOD(lldb::addr_t, SBMemoryRegionInfo, GetRegionEnd, ()); | |
| LLDB_REGISTER_METHOD(bool, SBMemoryRegionInfo, IsReadable, ()); | |
| LLDB_REGISTER_METHOD(bool, SBMemoryRegionInfo, IsWritable, ()); | |
| LLDB_REGISTER_METHOD(bool, SBMemoryRegionInfo, IsExecutable, ()); | |
| LLDB_REGISTER_METHOD(bool, SBMemoryRegionInfo, IsMapped, ()); | |
| LLDB_REGISTER_METHOD(const char *, SBMemoryRegionInfo, GetName, ()); | |
| LLDB_REGISTER_METHOD(bool, SBMemoryRegionInfo, GetDescription, | |
| (lldb::SBStream &)); | |
| } | |
| } | |
| } |