summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testing/xulrunner/APKBUILD6
-rw-r--r--testing/xulrunner/ff9-aslr-fix.patch40
2 files changed, 44 insertions, 2 deletions
diff --git a/testing/xulrunner/APKBUILD b/testing/xulrunner/APKBUILD
index 6fadead67f..82bd902759 100644
--- a/testing/xulrunner/APKBUILD
+++ b/testing/xulrunner/APKBUILD
@@ -3,7 +3,7 @@
pkgname=xulrunner
pkgver=9.0.1
_ffoxver=9.0.1
-pkgrel=0
+pkgrel=1
pkgdesc="runtime environment for xul-based applications"
url="http://developer.mozilla.org/en/XULRunner"
arch="all"
@@ -48,6 +48,7 @@ source="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${_ffoxver}
0002-Use-C99-math-isfinite.patch
0003-xulrunner-jemalloc-aslr.patch
0004-xulrunner-malloc_usable_size.patch
+ ff9-aslr-fix.patch
"
_builddir="${srcdir}/mozilla-release"
@@ -105,4 +106,5 @@ md5sums="7cf2bd379792a9b232267c6a79680566 firefox-9.0.1.source.tar.bz2
b0f7d491bc800b69ec718667a4b08acb mozconfig
1867db217d10722675c88b655db8c2d7 0002-Use-C99-math-isfinite.patch
7faa279d64c9ec2e7abc7c0497c7e07e 0003-xulrunner-jemalloc-aslr.patch
-7cf18be3ada3eed5856fbab24219126d 0004-xulrunner-malloc_usable_size.patch"
+7cf18be3ada3eed5856fbab24219126d 0004-xulrunner-malloc_usable_size.patch
+96b40acd003a0a586e408bf09ae5af1d ff9-aslr-fix.patch"
diff --git a/testing/xulrunner/ff9-aslr-fix.patch b/testing/xulrunner/ff9-aslr-fix.patch
new file mode 100644
index 0000000000..4e4297d0ed
--- /dev/null
+++ b/testing/xulrunner/ff9-aslr-fix.patch
@@ -0,0 +1,40 @@
+--- ./js/src/jsgcchunk.cpp 2011-12-22 17:13:21.000000000 +0000
++++ ./js/src/jsgcchunk.cpp 2011-12-22 17:18:31.000000000 +0000
+@@ -213,7 +213,7 @@
+ #elif defined(XP_UNIX)
+
+ /* Required on Solaris 10. Might improve performance elsewhere. */
+-# if defined(SOLARIS) && defined(MAP_ALIGN)
++# if (defined(SOLARIS) && defined(MAP_ALIGN)) || defined(MOZ_MEMORY_LINUX)
+ # define JS_GC_HAS_MAP_ALIGN
+
+ static void *
+--- ./js/src/jsgcchunk.cpp 2011-12-22 17:55:24.000000000 +0000
++++ ./js/src/jsgcchunk.cpp 2011-12-22 18:02:24.000000000 +0000
+@@ -226,12 +226,24 @@
+ #ifdef SOLARIS
+ void *p = mmap((caddr_t) alignment, size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_NOSYNC | MAP_ALIGN | MAP_ANON, -1, 0);
++ if (p == MAP_FAILED)
++ return NULL;
+ #else
+- void *p = mmap((void *) alignment, size, PROT_READ | PROT_WRITE,
+- MAP_PRIVATE | MAP_NOSYNC | MAP_ALIGN | MAP_ANON, -1, 0);
+-#endif
++ void *p = mmap(NULL, size + alignment, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_NOSYNC | MAP_ANON, -1, 0);
+ if (p == MAP_FAILED)
+ return NULL;
++ uintptr_t aligned_ret;
++ size_t extra_size;
++
++ aligned_ret = (uintptr_t)p + alignment - 1;
++ aligned_ret &= ~(alignment - 1);
++ extra_size = aligned_ret - (uintptr_t)p;
++ munmap(p, extra_size);
++ munmap(p + extra_size + size, alignment - extra_size);
++ p = (void *)aligned_ret;
++#endif
++
+ return p;
+ }