diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-05-17 10:56:54 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-05-17 10:56:54 +0000 |
commit | c1d22074139ab0d048a05b5e5116265d099114d6 (patch) | |
tree | 97977009422d675f8930f97c309b010481289e72 /nixpkgs/pkgs/development/interpreters/spidermonkey | |
parent | 4dc8afe4fd6b18437150129e0a1ecc23c6a1c0b9 (diff) | |
parent | bc9df0f66110039e495b6debe3a6cda4a1bb0fed (diff) | |
download | nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.tar nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.tar.gz nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.tar.bz2 nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.tar.lz nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.tar.xz nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.tar.zst nixlib-c1d22074139ab0d048a05b5e5116265d099114d6.zip |
Merge commit 'bc9df0f66110039e495b6debe3a6cda4a1bb0fed'
Diffstat (limited to 'nixpkgs/pkgs/development/interpreters/spidermonkey')
-rw-r--r-- | nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch | 106 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-double-conversion.patch | 13 |
2 files changed, 0 insertions, 119 deletions
diff --git a/nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch b/nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch deleted file mode 100644 index 8258a46b1748..000000000000 --- a/nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch +++ /dev/null @@ -1,106 +0,0 @@ -From a0c0f32299419359b44ac0f880c1ea9073ae51e1 Mon Sep 17 00:00:00 2001 -From: Zheng Xu <zheng.xu@linaro.org> -Date: Fri, 02 Sep 2016 17:40:05 +0800 -Subject: [PATCH] Bug 1143022 - Manually mmap on arm64 to ensure high 17 bits are clear. r=ehoogeveen - -There might be 48-bit VA on arm64 depending on kernel configuration. -Manually mmap heap memory to align with the assumption made by JS engine. - -Change-Id: Ic5d2b2fe4b758b3c87cc0688348af7e71a991146 ---- - -diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp -index 5b386a2..38101cf 100644 ---- a/js/src/gc/Memory.cpp -+++ b/js/src/gc/Memory.cpp -@@ -309,6 +309,75 @@ - #endif - } - -+static inline void * -+MapMemory(size_t length, int prot, int flags, int fd, off_t offset) -+{ -+#if defined(__ia64__) -+ /* -+ * The JS engine assumes that all allocated pointers have their high 17 bits clear, -+ * which ia64's mmap doesn't support directly. However, we can emulate it by passing -+ * mmap an "addr" parameter with those bits clear. The mmap will return that address, -+ * or the nearest available memory above that address, providing a near-guarantee -+ * that those bits are clear. If they are not, we return NULL below to indicate -+ * out-of-memory. -+ * -+ * The addr is chosen as 0x0000070000000000, which still allows about 120TB of virtual -+ * address space. -+ * -+ * See Bug 589735 for more information. -+ */ -+ void *region = mmap((void*)0x0000070000000000, length, prot, flags, fd, offset); -+ if (region == MAP_FAILED) -+ return MAP_FAILED; -+ /* -+ * If the allocated memory doesn't have its upper 17 bits clear, consider it -+ * as out of memory. -+ */ -+ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { -+ JS_ALWAYS_TRUE(0 == munmap(region, length)); -+ return MAP_FAILED; -+ } -+ return region; -+#elif defined(__aarch64__) -+ /* -+ * There might be similar virtual address issue on arm64 which depends on -+ * hardware and kernel configurations. But the work around is slightly -+ * different due to the different mmap behavior. -+ * -+ * TODO: Merge with the above code block if this implementation works for -+ * ia64 and sparc64. -+ */ -+ const uintptr_t start = (uintptr_t)(0x0000070000000000UL); -+ const uintptr_t end = (uintptr_t)(0x0000800000000000UL); -+ const uintptr_t step = ChunkSize; -+ /* -+ * Optimization options if there are too many retries in practice: -+ * 1. Examine /proc/self/maps to find an available address. This file is -+ * not always available, however. In addition, even if we examine -+ * /proc/self/maps, we may still need to retry several times due to -+ * racing with other threads. -+ * 2. Use a global/static variable with lock to track the addresses we have -+ * allocated or tried. -+ */ -+ uintptr_t hint; -+ void* region = MAP_FAILED; -+ for (hint = start; region == MAP_FAILED && hint + length <= end; hint += step) { -+ region = mmap((void*)hint, length, prot, flags, fd, offset); -+ if (region != MAP_FAILED) { -+ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { -+ if (munmap(region, length)) { -+ MOZ_ASSERT(errno == ENOMEM); -+ } -+ region = MAP_FAILED; -+ } -+ } -+ } -+ return region == MAP_FAILED ? NULL : region; -+#else -+ return mmap(NULL, length, prot, flags, fd, offset); -+#endif -+} -+ - void * - MapAlignedPages(size_t size, size_t alignment) - { -@@ -322,12 +391,12 @@ - - /* Special case: If we want page alignment, no further work is needed. */ - if (alignment == PageSize) { -- return mmap(NULL, size, prot, flags, -1, 0); -+ return MapMemory(size, prot, flags, -1, 0); - } - - /* Overallocate and unmap the region's edges. */ - size_t reqSize = Min(size + 2 * alignment, 2 * size); -- void *region = mmap(NULL, reqSize, prot, flags, -1, 0); -+ void *region = MapMemory(reqSize, prot, flags, -1, 0); - if (region == MAP_FAILED) - return NULL; - diff --git a/nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-double-conversion.patch b/nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-double-conversion.patch deleted file mode 100644 index bf41ce0a8a21..000000000000 --- a/nixpkgs/pkgs/development/interpreters/spidermonkey/aarch64-double-conversion.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -ru mozjs17.0.0-orig/mfbt/double-conversion/utils.h mozjs17.0.0/mfbt/double-conversion/utils.h ---- mozjs17.0.0-orig/mfbt/double-conversion/utils.h 2013-02-11 17:33:28.000000000 -0500 -+++ mozjs17.0.0/mfbt/double-conversion/utils.h 2016-12-03 20:39:07.915042988 -0500 -@@ -58,7 +58,8 @@ - defined(__mips__) || defined(__powerpc__) || \ - defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ - defined(__SH4__) || defined(__alpha__) || \ -- defined(_MIPS_ARCH_MIPS32R2) -+ defined(_MIPS_ARCH_MIPS32R2) || \ -+ defined(__AARCH64EL__) - #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 - #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) - #if defined(_WIN32) |