OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef RUNTIME_VM_VIRTUAL_MEMORY_H_ | 5 #ifndef RUNTIME_VM_VIRTUAL_MEMORY_H_ |
6 #define RUNTIME_VM_VIRTUAL_MEMORY_H_ | 6 #define RUNTIME_VM_VIRTUAL_MEMORY_H_ |
7 | 7 |
8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
10 #include "vm/memory_region.h" | 10 #include "vm/memory_region.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 ~VirtualMemory(); | 25 ~VirtualMemory(); |
26 | 26 |
27 int32_t handle() const { return handle_; } | 27 int32_t handle() const { return handle_; } |
28 uword start() const { return region_.start(); } | 28 uword start() const { return region_.start(); } |
29 uword end() const { return region_.end(); } | 29 uword end() const { return region_.end(); } |
30 void* address() const { return region_.pointer(); } | 30 void* address() const { return region_.pointer(); } |
31 intptr_t size() const { return region_.size(); } | 31 intptr_t size() const { return region_.size(); } |
32 | 32 |
33 static void InitOnce(); | 33 static void InitOnce(); |
34 | 34 |
35 bool Contains(uword addr) const { | 35 bool Contains(uword addr) const { return region_.Contains(addr); } |
36 return region_.Contains(addr); | |
37 } | |
38 | 36 |
39 // Commits the virtual memory area, which is guaranteed to be zeroed. Returns | 37 // Commits the virtual memory area, which is guaranteed to be zeroed. Returns |
40 // true on success and false on failure (e.g., out-of-memory). | 38 // true on success and false on failure (e.g., out-of-memory). |
41 bool Commit(bool is_executable) { | 39 bool Commit(bool is_executable) { |
42 return Commit(start(), size(), is_executable); | 40 return Commit(start(), size(), is_executable); |
43 } | 41 } |
44 | 42 |
45 // Changes the protection of the virtual memory area. | 43 // Changes the protection of the virtual memory area. |
46 static bool Protect(void* address, intptr_t size, Protection mode); | 44 static bool Protect(void* address, intptr_t size, Protection mode); |
47 bool Protect(Protection mode) { | 45 bool Protect(Protection mode) { return Protect(address(), size(), mode); } |
48 return Protect(address(), size(), mode); | |
49 } | |
50 | 46 |
51 // Reserves a virtual memory segment with size. If a segment of the requested | 47 // Reserves a virtual memory segment with size. If a segment of the requested |
52 // size cannot be allocated NULL is returned. | 48 // size cannot be allocated NULL is returned. |
53 static VirtualMemory* Reserve(intptr_t size) { | 49 static VirtualMemory* Reserve(intptr_t size) { return ReserveInternal(size); } |
54 return ReserveInternal(size); | |
55 } | |
56 | 50 |
57 static intptr_t PageSize() { | 51 static intptr_t PageSize() { |
58 ASSERT(page_size_ != 0); | 52 ASSERT(page_size_ != 0); |
59 ASSERT(Utils::IsPowerOfTwo(page_size_)); | 53 ASSERT(Utils::IsPowerOfTwo(page_size_)); |
60 return page_size_; | 54 return page_size_; |
61 } | 55 } |
62 | 56 |
63 static bool InSamePage(uword address0, uword address1); | 57 static bool InSamePage(uword address0, uword address1); |
64 | 58 |
65 // Truncate this virtual memory segment. If try_unmap is false, the | 59 // Truncate this virtual memory segment. If try_unmap is false, the |
(...skipping 10 matching lines...) Expand all Loading... |
76 | 70 |
77 private: | 71 private: |
78 static VirtualMemory* ReserveInternal(intptr_t size); | 72 static VirtualMemory* ReserveInternal(intptr_t size); |
79 | 73 |
80 // Free a sub segment. On operating systems that support it this | 74 // Free a sub segment. On operating systems that support it this |
81 // can give back the virtual memory to the system. Returns true on success. | 75 // can give back the virtual memory to the system. Returns true on success. |
82 static bool FreeSubSegment(void* address, intptr_t size); | 76 static bool FreeSubSegment(void* address, intptr_t size); |
83 | 77 |
84 // This constructor is only used internally when reserving new virtual spaces. | 78 // This constructor is only used internally when reserving new virtual spaces. |
85 // It does not reserve any virtual address space on its own. | 79 // It does not reserve any virtual address space on its own. |
86 explicit VirtualMemory(const MemoryRegion& region, int32_t handle = 0) : | 80 explicit VirtualMemory(const MemoryRegion& region, int32_t handle = 0) |
87 region_(region.pointer(), region.size()), | 81 : region_(region.pointer(), region.size()), |
88 reserved_size_(region.size()), | 82 reserved_size_(region.size()), |
89 handle_(handle), | 83 handle_(handle), |
90 embedder_allocated_(false) { } | 84 embedder_allocated_(false) {} |
91 | 85 |
92 MemoryRegion region_; | 86 MemoryRegion region_; |
93 | 87 |
94 // The size of the underlying reservation not yet given back to the OS. | 88 // The size of the underlying reservation not yet given back to the OS. |
95 // Its start coincides with region_, but its size might not, due to Truncate. | 89 // Its start coincides with region_, but its size might not, due to Truncate. |
96 intptr_t reserved_size_; | 90 intptr_t reserved_size_; |
97 | 91 |
98 int32_t handle_; | 92 int32_t handle_; |
99 | 93 |
100 static uword page_size_; | 94 static uword page_size_; |
101 | 95 |
102 // True for a region provided by the embedder. | 96 // True for a region provided by the embedder. |
103 bool embedder_allocated_; | 97 bool embedder_allocated_; |
104 | 98 |
105 DISALLOW_IMPLICIT_CONSTRUCTORS(VirtualMemory); | 99 DISALLOW_IMPLICIT_CONSTRUCTORS(VirtualMemory); |
106 }; | 100 }; |
107 | 101 |
108 } // namespace dart | 102 } // namespace dart |
109 | 103 |
110 #endif // RUNTIME_VM_VIRTUAL_MEMORY_H_ | 104 #endif // RUNTIME_VM_VIRTUAL_MEMORY_H_ |
OLD | NEW |