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