Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(456)

Side by Side Diff: Source/platform/heap/PageMemory.h

Issue 1297873002: Oilpan: Don't use guard pages in NaCl (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PageMemory_h 5 #ifndef PageMemory_h
6 #define PageMemory_h 6 #define PageMemory_h
7 7
8 #include "platform/heap/Heap.h"
8 #include "wtf/Assertions.h" 9 #include "wtf/Assertions.h"
9 #include "wtf/PageAllocator.h" 10 #include "wtf/PageAllocator.h"
10 11
11 #if OS(POSIX) 12 #if OS(POSIX)
12 #include <sys/mman.h> 13 #include <sys/mman.h>
13 #include <unistd.h> 14 #include <unistd.h>
14 #endif 15 #endif
15 16
16 namespace blink { 17 namespace blink {
17 18
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 } 197 }
197 198
198 void markUnused() { m_reserved->markPageUnused(writableStart()); } 199 void markUnused() { m_reserved->markPageUnused(writableStart()); }
199 200
200 PageMemoryRegion* region() { return m_reserved; } 201 PageMemoryRegion* region() { return m_reserved; }
201 202
202 Address writableStart() { return m_writable.base(); } 203 Address writableStart() { return m_writable.base(); }
203 204
204 static PageMemory* setupPageMemoryInRegion(PageMemoryRegion* region, size_t pageOffset, size_t payloadSize) 205 static PageMemory* setupPageMemoryInRegion(PageMemoryRegion* region, size_t pageOffset, size_t payloadSize)
205 { 206 {
206 // Setup the payload one OS page into the page memory. The 207 // Setup the payload one guard page into the page memory.
207 // first os page is the guard page. 208 Address payloadAddress = region->base() + pageOffset + blinkGuardPageSiz e;
208 Address payloadAddress = region->base() + pageOffset + WTF::kSystemPageS ize;
209 return new PageMemory(region, MemoryRegion(payloadAddress, payloadSize)) ; 209 return new PageMemory(region, MemoryRegion(payloadAddress, payloadSize)) ;
210 } 210 }
211 211
212 // Allocate a virtual address space for one blink page with the 212 // Allocate a virtual address space for one blink page with the
213 // following layout: 213 // following layout:
214 // 214 //
215 // [ guard os page | ... payload ... | guard os page ] 215 // [ guard os page | ... payload ... | guard os page ]
216 // ^---{ aligned to blink page size } 216 // ^---{ aligned to blink page size }
217 // 217 //
218 // The returned page memory region will be zeroed. 218 // The returned page memory region will be zeroed.
219 // 219 //
220 static PageMemory* allocate(size_t payloadSize) 220 static PageMemory* allocate(size_t payloadSize)
221 { 221 {
222 ASSERT(payloadSize > 0); 222 ASSERT(payloadSize > 0);
223 223
224 // Virtual memory allocation routines operate in OS page sizes. 224 // Virtual memory allocation routines operate in OS page sizes.
225 // Round up the requested size to nearest os page size. 225 // Round up the requested size to nearest os page size.
226 payloadSize = roundToOsPageSize(payloadSize); 226 payloadSize = roundToOsPageSize(payloadSize);
227 227
228 // Overallocate by 2 times OS page size to have space for a 228 // Overallocate by 2 times OS page size to have space for a
229 // guard page at the beginning and end of blink heap page. 229 // guard page at the beginning and end of blink heap page.
230 size_t allocationSize = payloadSize + 2 * WTF::kSystemPageSize; 230 size_t allocationSize = payloadSize + 2 * blinkGuardPageSize;
231 PageMemoryRegion* pageMemoryRegion = PageMemoryRegion::allocateLargePage (allocationSize); 231 PageMemoryRegion* pageMemoryRegion = PageMemoryRegion::allocateLargePage (allocationSize);
232 PageMemory* storage = setupPageMemoryInRegion(pageMemoryRegion, 0, paylo adSize); 232 PageMemory* storage = setupPageMemoryInRegion(pageMemoryRegion, 0, paylo adSize);
233 RELEASE_ASSERT(storage->commit()); 233 RELEASE_ASSERT(storage->commit());
234 return storage; 234 return storage;
235 } 235 }
236 236
237 private: 237 private:
238 PageMemory(PageMemoryRegion* reserved, const MemoryRegion& writable) 238 PageMemory(PageMemoryRegion* reserved, const MemoryRegion& writable)
239 : m_reserved(reserved) 239 : m_reserved(reserved)
240 , m_writable(writable) 240 , m_writable(writable)
241 { 241 {
242 ASSERT(reserved->contains(writable)); 242 ASSERT(reserved->contains(writable));
243 243
244 // Register the writable area of the memory as part of the LSan root set . 244 // Register the writable area of the memory as part of the LSan root set .
245 // Only the writable area is mapped and can contain C++ objects. Those 245 // Only the writable area is mapped and can contain C++ objects. Those
246 // C++ objects can contain pointers to objects outside of the heap and 246 // C++ objects can contain pointers to objects outside of the heap and
247 // should therefore be part of the LSan root set. 247 // should therefore be part of the LSan root set.
248 __lsan_register_root_region(m_writable.base(), m_writable.size()); 248 __lsan_register_root_region(m_writable.base(), m_writable.size());
249 } 249 }
250 250
251 251
252 PageMemoryRegion* m_reserved; 252 PageMemoryRegion* m_reserved;
253 MemoryRegion m_writable; 253 MemoryRegion m_writable;
254 }; 254 };
255 255
256 } // namespace blink 256 } // namespace blink
257 257
258 #endif 258 #endif
OLDNEW
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698