Index: third_party/tcmalloc/chromium/src/system-alloc.cc |
=================================================================== |
--- third_party/tcmalloc/chromium/src/system-alloc.cc (revision 110522) |
+++ third_party/tcmalloc/chromium/src/system-alloc.cc (working copy) |
@@ -103,8 +103,7 @@ |
static SpinLock spinlock(SpinLock::LINKER_INITIALIZED); |
-#if defined(HAVE_MMAP) || defined(MADV_DONTNEED) |
-// Page size is initialized on demand (only needed for mmap-based allocators) |
+#ifdef HAVE_GETPAGESIZE |
static size_t pagesize = 0; |
#endif |
@@ -484,6 +483,21 @@ |
return result; |
} |
+size_t TCMalloc_SystemAddGuard(void* start, size_t size) { |
+#ifdef HAVE_GETPAGESIZE |
+ if (pagesize == 0) |
+ pagesize = getpagesize(); |
+ |
+ if (size < pagesize || (reinterpret_cast<size_t>(start) % pagesize) != 0) |
+ return 0; |
+ |
+ if (!mprotect(start, pagesize, PROT_NONE)) |
+ return pagesize; |
+#endif |
+ |
+ return 0; |
+} |
+ |
void TCMalloc_SystemRelease(void* start, size_t length) { |
#ifdef MADV_DONTNEED |
if (FLAGS_malloc_devmem_start) { |