Title: [110902] trunk/Source/_javascript_Core
Revision
110902
Author
commit-qu...@webkit.org
Date
2012-03-15 16:04:39 -0700 (Thu, 15 Mar 2012)

Log Message

CopiedSpace::tryAllocateOversize assumes system page size
https://bugs.webkit.org/show_bug.cgi?id=80615

Patch by Myles Maxfield <mmaxfi...@google.com> on 2012-03-15
Reviewed by Geoffrey Garen.

* heap/CopiedSpace.cpp:
(JSC::CopiedSpace::tryAllocateOversize):
* heap/CopiedSpace.h:
(CopiedSpace):
* heap/CopiedSpaceInlineMethods.h:
(JSC::CopiedSpace::oversizeBlockFor):
* wtf/BumpPointerAllocator.h:
(WTF::BumpPointerPool::create):
* wtf/StdLibExtras.h:
(WTF::roundUpToMultipleOf):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (110901 => 110902)


--- trunk/Source/_javascript_Core/ChangeLog	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-03-15 23:04:39 UTC (rev 110902)
@@ -1,3 +1,21 @@
+2012-03-15  Myles Maxfield  <mmaxfi...@google.com>
+
+        CopiedSpace::tryAllocateOversize assumes system page size
+        https://bugs.webkit.org/show_bug.cgi?id=80615
+
+        Reviewed by Geoffrey Garen.
+
+        * heap/CopiedSpace.cpp:
+        (JSC::CopiedSpace::tryAllocateOversize):
+        * heap/CopiedSpace.h:
+        (CopiedSpace):
+        * heap/CopiedSpaceInlineMethods.h:
+        (JSC::CopiedSpace::oversizeBlockFor):
+        * wtf/BumpPointerAllocator.h:
+        (WTF::BumpPointerPool::create):
+        * wtf/StdLibExtras.h:
+        (WTF::roundUpToMultipleOf):
+
 2012-03-15  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         Fixing Windows build breakage

Modified: trunk/Source/_javascript_Core/heap/CopiedSpace.cpp (110901 => 110902)


--- trunk/Source/_javascript_Core/heap/CopiedSpace.cpp	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/heap/CopiedSpace.cpp	2012-03-15 23:04:39 UTC (rev 110902)
@@ -71,8 +71,8 @@
 {
     ASSERT(isOversize(bytes));
     
-    size_t blockSize = WTF::roundUpToMultipleOf<s_pageSize>(sizeof(CopiedBlock) + bytes);
-    PageAllocationAligned allocation = PageAllocationAligned::allocate(blockSize, s_pageSize, OSAllocator::JSGCHeapPages);
+    size_t blockSize = WTF::roundUpToMultipleOf(WTF::pageSize(), sizeof(CopiedBlock) + bytes);
+    PageAllocationAligned allocation = PageAllocationAligned::allocate(blockSize, WTF::pageSize(), OSAllocator::JSGCHeapPages);
     if (!static_cast<bool>(allocation)) {
         *outPtr = 0;
         return false;

Modified: trunk/Source/_javascript_Core/heap/CopiedSpace.h (110901 => 110902)


--- trunk/Source/_javascript_Core/heap/CopiedSpace.h	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/heap/CopiedSpace.h	2012-03-15 23:04:39 UTC (rev 110902)
@@ -35,6 +35,7 @@
 #include <wtf/HashSet.h>
 #include <wtf/OSAllocator.h>
 #include <wtf/PageAllocationAligned.h>
+#include <wtf/PageBlock.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/ThreadingPrimitives.h>
 
@@ -118,8 +119,6 @@
     size_t m_numberOfLoanedBlocks;
 
     static const size_t s_maxAllocationSize = 32 * KB;
-    static const size_t s_pageSize = 4 * KB;
-    static const size_t s_pageMask = ~(s_pageSize - 1);
     static const size_t s_initialBlockNum = 16;
     static const size_t s_blockMask = ~(HeapBlock::s_blockSize - 1);
 };

Modified: trunk/Source/_javascript_Core/heap/CopiedSpaceInlineMethods.h (110901 => 110902)


--- trunk/Source/_javascript_Core/heap/CopiedSpaceInlineMethods.h	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/heap/CopiedSpaceInlineMethods.h	2012-03-15 23:04:39 UTC (rev 110902)
@@ -171,7 +171,7 @@
 
 inline CopiedBlock* CopiedSpace::oversizeBlockFor(void* ptr)
 {
-    return reinterpret_cast<CopiedBlock*>(reinterpret_cast<size_t>(ptr) & s_pageMask);
+    return reinterpret_cast<CopiedBlock*>(reinterpret_cast<size_t>(ptr) & WTF::pageMask());
 }
 
 inline CopiedBlock* CopiedSpace::blockFor(void* ptr)

Modified: trunk/Source/_javascript_Core/wtf/PageBlock.cpp (110901 => 110902)


--- trunk/Source/_javascript_Core/wtf/PageBlock.cpp	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/wtf/PageBlock.cpp	2012-03-15 23:04:39 UTC (rev 110902)
@@ -38,6 +38,7 @@
 namespace WTF {
 
 static size_t s_pageSize;
+static size_t s_pageMask;
 
 #if OS(UNIX)
 
@@ -67,4 +68,11 @@
     return s_pageSize;
 }
 
+size_t pageMask()
+{
+    if (!s_pageMask)
+        s_pageMask = ~(pageSize() - 1);
+    return s_pageMask;
+}
+
 } // namespace WTF

Modified: trunk/Source/_javascript_Core/wtf/PageBlock.h (110901 => 110902)


--- trunk/Source/_javascript_Core/wtf/PageBlock.h	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/wtf/PageBlock.h	2012-03-15 23:04:39 UTC (rev 110902)
@@ -29,6 +29,7 @@
 namespace WTF {
 
 WTF_EXPORT_PRIVATE size_t pageSize();
+WTF_EXPORT_PRIVATE size_t pageMask();
 inline bool isPageAligned(void* address) { return !(reinterpret_cast<intptr_t>(address) & (pageSize() - 1)); }
 inline bool isPageAligned(size_t size) { return !(size & (pageSize() - 1)); }
 inline bool isPowerOfTwo(size_t size) { return !(size & (size - 1)); }

Modified: trunk/Source/_javascript_Core/wtf/StdLibExtras.h (110901 => 110902)


--- trunk/Source/_javascript_Core/wtf/StdLibExtras.h	2012-03-15 22:50:51 UTC (rev 110901)
+++ trunk/Source/_javascript_Core/wtf/StdLibExtras.h	2012-03-15 23:04:39 UTC (rev 110902)
@@ -154,12 +154,16 @@
 #define WTF_ARRAY_LENGTH(array) sizeof(::WTF::ArrayLengthHelperFunction(array))
 
 // Efficient implementation that takes advantage of powers of two.
+inline size_t roundUpToMultipleOf(size_t divisor, size_t x)
+{
+    ASSERT(divisor && !(divisor & (divisor - 1)));
+    size_t remainderMask = divisor - 1; \
+    return (x + remainderMask) & ~remainderMask;
+}
 template<size_t divisor> inline size_t roundUpToMultipleOf(size_t x)
 {
     COMPILE_ASSERT(divisor && !(divisor & (divisor - 1)), divisor_is_a_power_of_two);
-
-    size_t remainderMask = divisor - 1;
-    return (x + remainderMask) & ~remainderMask;
+    return roundUpToMultipleOf(divisor, x);
 }
 
 enum BinarySearchMode {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to