ppc-xpcshell.patch
branchesr17
changeset 665 efc8a8a62a09
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppc-xpcshell.patch	Sat Sep 14 21:02:47 2013 +0200
@@ -0,0 +1,71 @@
+Index: mozilla/js/src/gc/Heap.h
+===================================================================
+--- mozilla.orig/js/src/gc/Heap.h
++++ mozilla/js/src/gc/Heap.h
+@@ -110,19 +110,22 @@ struct Cell
+  */
+ #if defined(SOLARIS) && (defined(__sparc) || defined(__sparcv9))
+ const size_t PageShift = 13;
++const size_t ArenaShift = PageShift;
++#elif defined(__powerpc__)
++const size_t PageShift = 16;
++const size_t ArenaShift = 12;
+ #else
+ const size_t PageShift = 12;
++const size_t ArenaShift = PageShift;
+ #endif
+ const size_t PageSize = size_t(1) << PageShift;
++const size_t ArenaSize = size_t(1) << ArenaShift;
++const size_t ArenaMask = ArenaSize - 1;
+ 
+ const size_t ChunkShift = 20;
+ const size_t ChunkSize = size_t(1) << ChunkShift;
+ const size_t ChunkMask = ChunkSize - 1;
+ 
+-const size_t ArenaShift = PageShift;
+-const size_t ArenaSize = PageSize;
+-const size_t ArenaMask = ArenaSize - 1;
+-
+ /*
+  * This is the maximum number of arenas we allow in the FreeCommitted state
+  * before we trigger a GC_SHRINK to release free arenas to the OS.
+Index: mozilla/js/src/gc/Memory.cpp
+===================================================================
+--- mozilla.orig/js/src/gc/Memory.cpp
++++ mozilla/js/src/gc/Memory.cpp
+@@ -15,6 +15,15 @@
+ namespace js {
+ namespace gc {
+ 
++/* Unused memory decommiting requires the arena size match the page size. */
++extern const size_t PageSize;
++extern const size_t ArenaSize;
++static bool
++DecommitEnabled()
++{
++    return PageSize == ArenaSize;
++}
++
+ #if defined(XP_WIN)
+ #include "jswin.h"
+ #include <psapi.h>
+@@ -83,6 +92,9 @@ UnmapPages(void *p, size_t size)
+ bool
+ MarkPagesUnused(void *p, size_t size)
+ {
++    if (!DecommitEnabled())
++        return false;
++
+     JS_ASSERT(uintptr_t(p) % PageSize == 0);
+     LPVOID p2 = VirtualAlloc(p, size, MEM_RESET, PAGE_READWRITE);
+     return p2 == p;
+@@ -352,6 +364,9 @@ UnmapPages(void *p, size_t size)
+ bool
+ MarkPagesUnused(void *p, size_t size)
+ {
++    if (!DecommitEnabled())
++        return false;
++
+     JS_ASSERT(uintptr_t(p) % PageSize == 0);
+     int result = madvise(p, size, MADV_DONTNEED);
+     return result != -1;