Blame SOURCES/mozjs17-aarch64-support-64K-pages.patch

c67d24
From f17bc0302100c885c84ebd06cd003aad9774cbb4 Mon Sep 17 00:00:00 2001
c67d24
From: Mark Salter <msalter@redhat.com>
c67d24
Date: Thu, 13 Mar 2014 13:16:27 -0400
c67d24
Subject: [PATCH] Fix aarch64 support for 64K pagesize
c67d24
c67d24
A given AArch64 kernel may be using 4K or 64K pagesizes. When running
c67d24
on a kernel with 64K pagesize, this check causes an intentionally
c67d24
generated segfault:
c67d24
c67d24
  js/src/gc/Memory.cpp:
c67d24
c67d24
  void
c67d24
  InitMemorySubsystem()
c67d24
  {
c67d24
      if (size_t(sysconf(_SC_PAGESIZE)) != PageSize)
c67d24
         MOZ_CRASH();
c67d24
  }
c67d24
c67d24
This happens because PageSize is fixed to 4K at build time. This mess
c67d24
has been cleaned up in mozjs-24 by eliminating the build-time PageSize
c67d24
definition. That is too intrusive for mosjs17, so just set PageSize
c67d24
to 64K at build time and eliminate the check. This will work with both
c67d24
4K and 64K aarch64 kernels.
c67d24
c67d24
Signed-off-by: Mark Salter <msalter@redhat.com>
c67d24
---
c67d24
 js/src/gc/Heap.h     |  2 +-
c67d24
 js/src/gc/Memory.cpp |  3 +++
c67d24
 3 files changed, 15 insertions(+), 1 deletion(-)
c67d24
c67d24
diff --git a/js/src/gc/Heap.h b/js/src/gc/Heap.h
c67d24
index 1cfd269..f4dbcda 100644
c67d24
--- a/js/src/gc/Heap.h
c67d24
+++ b/js/src/gc/Heap.h
c67d24
@@ -113,7 +113,7 @@ struct Cell
c67d24
 #if defined(SOLARIS) && (defined(__sparc) || defined(__sparcv9))
c67d24
 const size_t PageShift = 13;
c67d24
 const size_t ArenaShift = PageShift;
c67d24
-#elif defined(__powerpc__)
c67d24
+#elif defined(__powerpc__) || defined(__aarch64__)
c67d24
 const size_t PageShift = 16;
c67d24
 const size_t ArenaShift = 12;
c67d24
 #else
c67d24
diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp
c67d24
index 5b386a2..e5ad018 100644
c67d24
--- a/js/src/gc/Memory.cpp
c67d24
+++ b/js/src/gc/Memory.cpp
c67d24
@@ -302,8 +302,11 @@ GetPageFaultCount()
c67d24
 void
c67d24
 InitMemorySubsystem()
c67d24
 {
c67d24
+    /* aarch64 may have 64KB or 4KB pages */
c67d24
+#ifndef __aarch64__
c67d24
     if (size_t(sysconf(_SC_PAGESIZE)) != PageSize)
c67d24
         MOZ_CRASH();
c67d24
+#endif
c67d24
 }
c67d24
 
c67d24
 void *
c67d24
-- 
c67d24
1.8.5.3
c67d24