ppc-xpcshell.patch
branchesr17
changeset 665 efc8a8a62a09
equal deleted inserted replaced
655:f812ab6b56ac 665:efc8a8a62a09
       
     1 Index: mozilla/js/src/gc/Heap.h
       
     2 ===================================================================
       
     3 --- mozilla.orig/js/src/gc/Heap.h
       
     4 +++ mozilla/js/src/gc/Heap.h
       
     5 @@ -110,19 +110,22 @@ struct Cell
       
     6   */
       
     7  #if defined(SOLARIS) && (defined(__sparc) || defined(__sparcv9))
       
     8  const size_t PageShift = 13;
       
     9 +const size_t ArenaShift = PageShift;
       
    10 +#elif defined(__powerpc__)
       
    11 +const size_t PageShift = 16;
       
    12 +const size_t ArenaShift = 12;
       
    13  #else
       
    14  const size_t PageShift = 12;
       
    15 +const size_t ArenaShift = PageShift;
       
    16  #endif
       
    17  const size_t PageSize = size_t(1) << PageShift;
       
    18 +const size_t ArenaSize = size_t(1) << ArenaShift;
       
    19 +const size_t ArenaMask = ArenaSize - 1;
       
    20  
       
    21  const size_t ChunkShift = 20;
       
    22  const size_t ChunkSize = size_t(1) << ChunkShift;
       
    23  const size_t ChunkMask = ChunkSize - 1;
       
    24  
       
    25 -const size_t ArenaShift = PageShift;
       
    26 -const size_t ArenaSize = PageSize;
       
    27 -const size_t ArenaMask = ArenaSize - 1;
       
    28 -
       
    29  /*
       
    30   * This is the maximum number of arenas we allow in the FreeCommitted state
       
    31   * before we trigger a GC_SHRINK to release free arenas to the OS.
       
    32 Index: mozilla/js/src/gc/Memory.cpp
       
    33 ===================================================================
       
    34 --- mozilla.orig/js/src/gc/Memory.cpp
       
    35 +++ mozilla/js/src/gc/Memory.cpp
       
    36 @@ -15,6 +15,15 @@
       
    37  namespace js {
       
    38  namespace gc {
       
    39  
       
    40 +/* Unused memory decommiting requires the arena size match the page size. */
       
    41 +extern const size_t PageSize;
       
    42 +extern const size_t ArenaSize;
       
    43 +static bool
       
    44 +DecommitEnabled()
       
    45 +{
       
    46 +    return PageSize == ArenaSize;
       
    47 +}
       
    48 +
       
    49  #if defined(XP_WIN)
       
    50  #include "jswin.h"
       
    51  #include <psapi.h>
       
    52 @@ -83,6 +92,9 @@ UnmapPages(void *p, size_t size)
       
    53  bool
       
    54  MarkPagesUnused(void *p, size_t size)
       
    55  {
       
    56 +    if (!DecommitEnabled())
       
    57 +        return false;
       
    58 +
       
    59      JS_ASSERT(uintptr_t(p) % PageSize == 0);
       
    60      LPVOID p2 = VirtualAlloc(p, size, MEM_RESET, PAGE_READWRITE);
       
    61      return p2 == p;
       
    62 @@ -352,6 +364,9 @@ UnmapPages(void *p, size_t size)
       
    63  bool
       
    64  MarkPagesUnused(void *p, size_t size)
       
    65  {
       
    66 +    if (!DecommitEnabled())
       
    67 +        return false;
       
    68 +
       
    69      JS_ASSERT(uintptr_t(p) % PageSize == 0);
       
    70      int result = madvise(p, size, MADV_DONTNEED);
       
    71      return result != -1;