diff --git a/MozillaThunderbird.changes b/MozillaThunderbird.changes index 0a38aa7..4eae77f 100644 --- a/MozillaThunderbird.changes +++ b/MozillaThunderbird.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Jun 4 20:41:42 UTC 2013 - dvaleev@suse.com + +- prevent xpc-shell crashing on powerpc + ppc-xpcshell.patch + ------------------------------------------------------------------- Sat May 11 08:46:37 UTC 2013 - wr@rosenauer.org diff --git a/MozillaThunderbird.spec b/MozillaThunderbird.spec index c8bfbb7..6881d70 100644 --- a/MozillaThunderbird.spec +++ b/MozillaThunderbird.spec @@ -76,6 +76,7 @@ Patch3: mozilla-nongnome-proxies.patch Patch4: mozilla-kde.patch Patch5: mozilla-arm-disable-edsp.patch Patch7: mozilla-ppc.patch +Patch8: ppc-xpcshell.patch # SLE11 patches Patch10: mozilla-gcc43-enums.patch Patch11: mozilla-gcc43-template_hacks.patch @@ -208,6 +209,7 @@ pushd mozilla %endif %patch5 -p1 %patch7 -p1 +%patch8 -p1 # SLE patches %if %suse_version <= 1110 %patch10 -p1 diff --git a/ppc-xpcshell.patch b/ppc-xpcshell.patch new file mode 100644 index 0000000..b399afc --- /dev/null +++ b/ppc-xpcshell.patch @@ -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 +@@ -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;