1 //===-- SBMemoryRegionInfo.cpp ----------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "lldb/API/SBMemoryRegionInfo.h"
11 #include "lldb/API/SBDefines.h"
12 #include "lldb/API/SBError.h"
13 #include "lldb/API/SBStream.h"
14 #include "lldb/Core/StreamString.h"
15 #include "lldb/Target/MemoryRegionInfo.h"
16 
17 using namespace lldb;
18 using namespace lldb_private;
19 
20 SBMemoryRegionInfo::SBMemoryRegionInfo()
21     : m_opaque_ap(new MemoryRegionInfo()) {}
22 
23 SBMemoryRegionInfo::SBMemoryRegionInfo(const MemoryRegionInfo *lldb_object_ptr)
24     : m_opaque_ap(new MemoryRegionInfo()) {
25   if (lldb_object_ptr)
26     ref() = *lldb_object_ptr;
27 }
28 
29 SBMemoryRegionInfo::SBMemoryRegionInfo(const SBMemoryRegionInfo &rhs)
30     : m_opaque_ap(new MemoryRegionInfo()) {
31   ref() = rhs.ref();
32 }
33 
34 const SBMemoryRegionInfo &SBMemoryRegionInfo::
35 operator=(const SBMemoryRegionInfo &rhs) {
36   if (this != &rhs) {
37     ref() = rhs.ref();
38   }
39   return *this;
40 }
41 
42 SBMemoryRegionInfo::~SBMemoryRegionInfo() {}
43 
44 void SBMemoryRegionInfo::Clear() { m_opaque_ap->Clear(); }
45 
46 bool SBMemoryRegionInfo::operator==(const SBMemoryRegionInfo &rhs) const {
47   return ref() == rhs.ref();
48 }
49 
50 bool SBMemoryRegionInfo::operator!=(const SBMemoryRegionInfo &rhs) const {
51   return ref() != rhs.ref();
52 }
53 
54 MemoryRegionInfo &SBMemoryRegionInfo::ref() { return *m_opaque_ap; }
55 
56 const MemoryRegionInfo &SBMemoryRegionInfo::ref() const { return *m_opaque_ap; }
57 
58 lldb::addr_t SBMemoryRegionInfo::GetRegionBase() {
59   return m_opaque_ap->GetRange().GetRangeBase();
60 }
61 
62 lldb::addr_t SBMemoryRegionInfo::GetRegionEnd() {
63   return m_opaque_ap->GetRange().GetRangeEnd();
64 }
65 
66 bool SBMemoryRegionInfo::IsReadable() {
67   return m_opaque_ap->GetReadable() == MemoryRegionInfo::eYes;
68 }
69 
70 bool SBMemoryRegionInfo::IsWritable() {
71   return m_opaque_ap->GetWritable() == MemoryRegionInfo::eYes;
72 }
73 
74 bool SBMemoryRegionInfo::IsExecutable() {
75   return m_opaque_ap->GetExecutable() == MemoryRegionInfo::eYes;
76 }
77 
78 bool SBMemoryRegionInfo::IsMapped() {
79   return m_opaque_ap->GetMapped() == MemoryRegionInfo::eYes;
80 }
81 
82 const char *SBMemoryRegionInfo::GetName() {
83   return m_opaque_ap->GetName().AsCString();
84 }
85 
86 bool SBMemoryRegionInfo::GetDescription(SBStream &description) {
87   Stream &strm = description.ref();
88   const addr_t load_addr = m_opaque_ap->GetRange().base;
89 
90   strm.Printf("[0x%16.16" PRIx64 "-0x%16.16" PRIx64 " ", load_addr,
91               load_addr + m_opaque_ap->GetRange().size);
92   strm.Printf(m_opaque_ap->GetReadable() ? "R" : "-");
93   strm.Printf(m_opaque_ap->GetWritable() ? "W" : "-");
94   strm.Printf(m_opaque_ap->GetExecutable() ? "X" : "-");
95   strm.Printf("]");
96 
97   return true;
98 }
99