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 {