diff options
author | Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi> | 2017-01-29 02:16:29 +0200 |
---|---|---|
committer | Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi> | 2017-01-29 02:16:29 +0200 |
commit | 424cfe76863ee58427ffb64a3bca02a5aefcec8b (patch) | |
tree | ec05e96595b221654077b2b4040edac52d8d8080 /pkgs/development/interpreters | |
parent | bb8859bd66e84d78284a06a43440d1bc7e8211ca (diff) | |
parent | 2f38d1fd1f24668e2faf50cec8fd7a5e413fb5ae (diff) | |
download | nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.tar nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.tar.gz nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.tar.bz2 nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.tar.lz nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.tar.xz nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.tar.zst nixlib-424cfe76863ee58427ffb64a3bca02a5aefcec8b.zip |
Merge remote-tracking branch 'upstream/master' into staging
Diffstat (limited to 'pkgs/development/interpreters')
4 files changed, 111 insertions, 4 deletions
diff --git a/pkgs/development/interpreters/clojure/clooj.nix b/pkgs/development/interpreters/clojure/clooj.nix index c1e104458302..3dfb800afe10 100644 --- a/pkgs/development/interpreters/clojure/clooj.nix +++ b/pkgs/development/interpreters/clojure/clooj.nix @@ -6,7 +6,7 @@ stdenv.mkDerivation { name = "clooj-${version}"; jar = fetchurl { - url = "http://www.mediafire.com/download/prkf64humftrmz3/clooj-${version}-standalone.jar"; + url = "http://download1492.mediafire.com/dptomdxrjaag/prkf64humftrmz3/clooj-0.4.4-standalone.jar"; sha256 = "0hbc29bg2a86rm3sx9kvj7h7db9j0kbnrb706wsfiyk3zi3bavnd"; }; @@ -25,4 +25,4 @@ stdenv.mkDerivation { homepage = https://github.com/arthuredelstein/clooj; license = stdenv.lib.licenses.bsd3; }; -} \ No newline at end of file +} diff --git a/pkgs/development/interpreters/racket/default.nix b/pkgs/development/interpreters/racket/default.nix index c74720768146..2bf7ec5d2dfe 100644 --- a/pkgs/development/interpreters/racket/default.nix +++ b/pkgs/development/interpreters/racket/default.nix @@ -32,11 +32,11 @@ in stdenv.mkDerivation rec { name = "racket-${version}"; - version = "6.7"; + version = "6.8"; src = fetchurl { url = "http://mirror.racket-lang.org/installers/${version}/${name}-src.tgz"; - sha256 = "0v1nz07vzz0c7rwyz15kbagpl4l42n871vbwij4wrbk2lx22ksgy"; + sha256 = "1l9z1a0r5zydr50cklx9xjw3l0pwnf64i10xq7112fl1r89q3qgv"; }; FONTCONFIG_FILE = fontsConf; diff --git a/pkgs/development/interpreters/spidermonkey/17.nix b/pkgs/development/interpreters/spidermonkey/17.nix index 1b6eb98b49da..33acb792f761 100644 --- a/pkgs/development/interpreters/spidermonkey/17.nix +++ b/pkgs/development/interpreters/spidermonkey/17.nix @@ -22,6 +22,7 @@ stdenv.mkDerivation rec { sed -i 's/(defined\((@TEMPLATE_FILE)\))/\1/' config/milestone.pl '' + stdenv.lib.optionalString stdenv.isAarch64 '' patch -p1 -d ../.. < ${./aarch64-double-conversion.patch} + patch -p1 -d ../.. < ${./aarch64-48bit-va-fix.patch} ''; preConfigure = '' diff --git a/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch b/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch new file mode 100644 index 000000000000..8258a46b1748 --- /dev/null +++ b/pkgs/development/interpreters/spidermonkey/aarch64-48bit-va-fix.patch @@ -0,0 +1,106 @@ +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; + |