blob: 3e7227650f7a20c270c971089642f86381e1eba5 [file] [log] [blame]
Howard Hellyer260368432016-06-23 08:35:37 +00001//===-- 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
Kate Stoneb9c1b512016-09-06 20:57:50 +000010#include "lldb/API/SBMemoryRegionInfo.h"
Howard Hellyer260368432016-06-23 08:35:37 +000011#include "lldb/API/SBDefines.h"
12#include "lldb/API/SBError.h"
Howard Hellyer260368432016-06-23 08:35:37 +000013#include "lldb/API/SBStream.h"
14#include "lldb/Core/StreamString.h"
15#include "lldb/Target/MemoryRegionInfo.h"
16
17using namespace lldb;
18using namespace lldb_private;
19
Kate Stoneb9c1b512016-09-06 20:57:50 +000020SBMemoryRegionInfo::SBMemoryRegionInfo()
21 : m_opaque_ap(new MemoryRegionInfo()) {}
Howard Hellyer260368432016-06-23 08:35:37 +000022
Kate Stoneb9c1b512016-09-06 20:57:50 +000023SBMemoryRegionInfo::SBMemoryRegionInfo(const MemoryRegionInfo *lldb_object_ptr)
24 : m_opaque_ap(new MemoryRegionInfo()) {
25 if (lldb_object_ptr)
26 ref() = *lldb_object_ptr;
Howard Hellyer260368432016-06-23 08:35:37 +000027}
28
Kate Stoneb9c1b512016-09-06 20:57:50 +000029SBMemoryRegionInfo::SBMemoryRegionInfo(const SBMemoryRegionInfo &rhs)
30 : m_opaque_ap(new MemoryRegionInfo()) {
31 ref() = rhs.ref();
Howard Hellyer260368432016-06-23 08:35:37 +000032}
33
Kate Stoneb9c1b512016-09-06 20:57:50 +000034const SBMemoryRegionInfo &SBMemoryRegionInfo::
35operator=(const SBMemoryRegionInfo &rhs) {
36 if (this != &rhs) {
Howard Hellyer260368432016-06-23 08:35:37 +000037 ref() = rhs.ref();
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 }
39 return *this;
Howard Hellyer260368432016-06-23 08:35:37 +000040}
41
Kate Stoneb9c1b512016-09-06 20:57:50 +000042SBMemoryRegionInfo::~SBMemoryRegionInfo() {}
43
44void SBMemoryRegionInfo::Clear() { m_opaque_ap->Clear(); }
45
46bool SBMemoryRegionInfo::operator==(const SBMemoryRegionInfo &rhs) const {
47 return ref() == rhs.ref();
Howard Hellyer260368432016-06-23 08:35:37 +000048}
49
Kate Stoneb9c1b512016-09-06 20:57:50 +000050bool SBMemoryRegionInfo::operator!=(const SBMemoryRegionInfo &rhs) const {
51 return ref() != rhs.ref();
Howard Hellyer260368432016-06-23 08:35:37 +000052}
53
Kate Stoneb9c1b512016-09-06 20:57:50 +000054MemoryRegionInfo &SBMemoryRegionInfo::ref() { return *m_opaque_ap; }
55
56const MemoryRegionInfo &SBMemoryRegionInfo::ref() const { return *m_opaque_ap; }
57
58lldb::addr_t SBMemoryRegionInfo::GetRegionBase() {
59 return m_opaque_ap->GetRange().GetRangeBase();
Howard Hellyer260368432016-06-23 08:35:37 +000060}
61
Kate Stoneb9c1b512016-09-06 20:57:50 +000062lldb::addr_t SBMemoryRegionInfo::GetRegionEnd() {
63 return m_opaque_ap->GetRange().GetRangeEnd();
Howard Hellyer260368432016-06-23 08:35:37 +000064}
65
Kate Stoneb9c1b512016-09-06 20:57:50 +000066bool SBMemoryRegionInfo::IsReadable() {
67 return m_opaque_ap->GetReadable() == MemoryRegionInfo::eYes;
Howard Hellyer260368432016-06-23 08:35:37 +000068}
69
Kate Stoneb9c1b512016-09-06 20:57:50 +000070bool SBMemoryRegionInfo::IsWritable() {
71 return m_opaque_ap->GetWritable() == MemoryRegionInfo::eYes;
Howard Hellyer260368432016-06-23 08:35:37 +000072}
73
Kate Stoneb9c1b512016-09-06 20:57:50 +000074bool SBMemoryRegionInfo::IsExecutable() {
75 return m_opaque_ap->GetExecutable() == MemoryRegionInfo::eYes;
Howard Hellyer260368432016-06-23 08:35:37 +000076}
77
Kate Stoneb9c1b512016-09-06 20:57:50 +000078bool SBMemoryRegionInfo::IsMapped() {
79 return m_opaque_ap->GetMapped() == MemoryRegionInfo::eYes;
Howard Hellyer260368432016-06-23 08:35:37 +000080}
81
Kate Stoneb9c1b512016-09-06 20:57:50 +000082const char *SBMemoryRegionInfo::GetName() {
83 return m_opaque_ap->GetName().AsCString();
Howard Hellyer260368432016-06-23 08:35:37 +000084}
85
Kate Stoneb9c1b512016-09-06 20:57:50 +000086bool SBMemoryRegionInfo::GetDescription(SBStream &description) {
87 Stream &strm = description.ref();
88 const addr_t load_addr = m_opaque_ap->GetRange().base;
Howard Hellyer260368432016-06-23 08:35:37 +000089
Kate Stoneb9c1b512016-09-06 20:57:50 +000090 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("]");
Howard Hellyer260368432016-06-23 08:35:37 +000096
Kate Stoneb9c1b512016-09-06 20:57:50 +000097 return true;
Howard Hellyer260368432016-06-23 08:35:37 +000098}