1 //===-- SBMemoryRegionInfo.h ------------------------------------*- C++ -*-===//
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 #ifndef LLDB_API_SBMEMORYREGIONINFO_H
10 #define LLDB_API_SBMEMORYREGIONINFO_H
11 
12 #include "lldb/API/SBData.h"
13 #include "lldb/API/SBDefines.h"
14 
15 namespace lldb {
16 
17 class LLDB_API SBMemoryRegionInfo {
18 public:
19   SBMemoryRegionInfo();
20 
21   SBMemoryRegionInfo(const lldb::SBMemoryRegionInfo &rhs);
22 
23   SBMemoryRegionInfo(const char *name, lldb::addr_t begin, lldb::addr_t end,
24                      uint32_t permissions, bool mapped,
25                      bool stack_memory = false);
26 
27   ~SBMemoryRegionInfo();
28 
29   const lldb::SBMemoryRegionInfo &
30   operator=(const lldb::SBMemoryRegionInfo &rhs);
31 
32   void Clear();
33 
34   /// Get the base address of this memory range.
35   ///
36   /// \return
37   ///     The base address of this memory range.
38   lldb::addr_t GetRegionBase();
39 
40   /// Get the end address of this memory range.
41   ///
42   /// \return
43   ///     The base address of this memory range.
44   lldb::addr_t GetRegionEnd();
45 
46   /// Check if this memory address is marked readable to the process.
47   ///
48   /// \return
49   ///     true if this memory address is marked readable
50   bool IsReadable();
51 
52   /// Check if this memory address is marked writable to the process.
53   ///
54   /// \return
55   ///     true if this memory address is marked writable
56   bool IsWritable();
57 
58   /// Check if this memory address is marked executable to the process.
59   ///
60   /// \return
61   ///     true if this memory address is marked executable
62   bool IsExecutable();
63 
64   /// Check if this memory address is mapped into the process address
65   /// space.
66   ///
67   /// \return
68   ///     true if this memory address is in the process address space.
69   bool IsMapped();
70 
71   /// Returns the name of the memory region mapped at the given
72   /// address.
73   ///
74   /// \return
75   ///     In case of memory mapped files it is the absolute path of
76   ///     the file otherwise it is a name associated with the memory
77   ///     region. If no name can be determined the returns nullptr.
78   const char *GetName();
79 
80   /// Returns whether this memory region has a list of memory pages
81   /// that have been modified -- that are dirty.
82   ///
83   /// \return
84   ///     True if the dirty page list is available.
85   bool HasDirtyMemoryPageList();
86 
87   /// Returns the number of modified pages -- dirty pages -- in this
88   /// memory region.
89   ///
90   /// \return
91   ///     The number of dirty page entries will be returned.  If
92   ///     there are no dirty pages in this memory region, 0 will
93   ///     be returned.  0 will also be returned if the dirty page
94   ///     list is not available for this memory region -- you must
95   ///     use HasDirtyMemoryPageList() to check for that.
96   uint32_t GetNumDirtyPages();
97 
98   /// Returns the address of a memory page that has been modified in
99   /// this region.
100   ///
101   /// \return
102   ///     Returns the address for his dirty page in the list.
103   ///     If this memory region does not have a dirty page list,
104   ///     LLDB_INVALID_ADDRESS is returned.
105   addr_t GetDirtyPageAddressAtIndex(uint32_t idx);
106 
107   /// Returns the size of a memory page in this region.
108   ///
109   /// \return
110   ///     Returns the size of the memory pages in this region,
111   ///     or 0 if this information is unavailable.
112   int GetPageSize();
113 
114   bool operator==(const lldb::SBMemoryRegionInfo &rhs) const;
115 
116   bool operator!=(const lldb::SBMemoryRegionInfo &rhs) const;
117 
118   bool GetDescription(lldb::SBStream &description);
119 
120 private:
121   friend class SBProcess;
122   friend class SBMemoryRegionInfoList;
123 
124   friend class lldb_private::ScriptInterpreter;
125 
126   lldb_private::MemoryRegionInfo &ref();
127 
128   const lldb_private::MemoryRegionInfo &ref() const;
129 
130   // Unused.
131   SBMemoryRegionInfo(const lldb_private::MemoryRegionInfo *lldb_object_ptr);
132 
133   lldb::MemoryRegionInfoUP m_opaque_up;
134 };
135 
136 } // namespace lldb
137 
138 #endif // LLDB_API_SBMEMORYREGIONINFO_H
139