Date: Wednesday, April 12, 2017 @ 11:02:23 Author: jgc Revision: 292612
archrelease: copy trunk to extra-i686, extra-x86_64 Added: js38/repos/extra-i686/PKGBUILD (from rev 292611, js38/trunk/PKGBUILD) js38/repos/extra-i686/mozjs38-1269317.patch (from rev 292611, js38/trunk/mozjs38-1269317.patch) js38/repos/extra-i686/mozjs38-add-bracket.patch (from rev 292611, js38/trunk/mozjs38-add-bracket.patch) js38/repos/extra-i686/mozjs38-copy-headers.patch (from rev 292611, js38/trunk/mozjs38-copy-headers.patch) js38/repos/extra-i686/mozjs38-fix-tracelogger.patch (from rev 292611, js38/trunk/mozjs38-fix-tracelogger.patch) js38/repos/extra-i686/mozjs38-install-name.patch (from rev 292611, js38/trunk/mozjs38-install-name.patch) js38/repos/extra-i686/mozjs38-pkg-config-version.patch (from rev 292611, js38/trunk/mozjs38-pkg-config-version.patch) js38/repos/extra-i686/mozjs38-shell-version.patch (from rev 292611, js38/trunk/mozjs38-shell-version.patch) js38/repos/extra-x86_64/PKGBUILD (from rev 292611, js38/trunk/PKGBUILD) js38/repos/extra-x86_64/mozjs38-1269317.patch (from rev 292611, js38/trunk/mozjs38-1269317.patch) js38/repos/extra-x86_64/mozjs38-add-bracket.patch (from rev 292611, js38/trunk/mozjs38-add-bracket.patch) js38/repos/extra-x86_64/mozjs38-copy-headers.patch (from rev 292611, js38/trunk/mozjs38-copy-headers.patch) js38/repos/extra-x86_64/mozjs38-fix-tracelogger.patch (from rev 292611, js38/trunk/mozjs38-fix-tracelogger.patch) js38/repos/extra-x86_64/mozjs38-install-name.patch (from rev 292611, js38/trunk/mozjs38-install-name.patch) js38/repos/extra-x86_64/mozjs38-pkg-config-version.patch (from rev 292611, js38/trunk/mozjs38-pkg-config-version.patch) js38/repos/extra-x86_64/mozjs38-shell-version.patch (from rev 292611, js38/trunk/mozjs38-shell-version.patch) Deleted: js38/repos/extra-i686/PKGBUILD js38/repos/extra-i686/mozjs38-1269317.patch js38/repos/extra-i686/mozjs38-add-bracket.patch js38/repos/extra-i686/mozjs38-copy-headers.patch js38/repos/extra-i686/mozjs38-fix-tracelogger.patch js38/repos/extra-i686/mozjs38-install-name.patch js38/repos/extra-i686/mozjs38-pkg-config-version.patch js38/repos/extra-i686/mozjs38-shell-version.patch js38/repos/extra-x86_64/PKGBUILD js38/repos/extra-x86_64/mozjs38-1269317.patch js38/repos/extra-x86_64/mozjs38-add-bracket.patch js38/repos/extra-x86_64/mozjs38-copy-headers.patch js38/repos/extra-x86_64/mozjs38-fix-tracelogger.patch js38/repos/extra-x86_64/mozjs38-install-name.patch js38/repos/extra-x86_64/mozjs38-pkg-config-version.patch js38/repos/extra-x86_64/mozjs38-shell-version.patch -----------------------------------------------+ /PKGBUILD | 138 ++ /mozjs38-1269317.patch | 244 ++++ /mozjs38-add-bracket.patch | 32 /mozjs38-copy-headers.patch | 40 /mozjs38-fix-tracelogger.patch | 1206 ++++++++++++++++++++++++ /mozjs38-install-name.patch | 22 /mozjs38-pkg-config-version.patch | 44 /mozjs38-shell-version.patch | 130 ++ extra-i686/PKGBUILD | 66 - extra-i686/mozjs38-1269317.patch | 122 -- extra-i686/mozjs38-add-bracket.patch | 16 extra-i686/mozjs38-copy-headers.patch | 20 extra-i686/mozjs38-fix-tracelogger.patch | 603 ------------ extra-i686/mozjs38-install-name.patch | 11 extra-i686/mozjs38-pkg-config-version.patch | 22 extra-i686/mozjs38-shell-version.patch | 65 - extra-x86_64/PKGBUILD | 66 - extra-x86_64/mozjs38-1269317.patch | 122 -- extra-x86_64/mozjs38-add-bracket.patch | 16 extra-x86_64/mozjs38-copy-headers.patch | 20 extra-x86_64/mozjs38-fix-tracelogger.patch | 603 ------------ extra-x86_64/mozjs38-install-name.patch | 11 extra-x86_64/mozjs38-pkg-config-version.patch | 22 extra-x86_64/mozjs38-shell-version.patch | 65 - 24 files changed, 1856 insertions(+), 1850 deletions(-) Deleted: extra-i686/PKGBUILD =================================================================== --- extra-i686/PKGBUILD 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/PKGBUILD 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,66 +0,0 @@ -# $Id: PKGBUILD 280035 2016-11-07 16:57:54Z foutrelis $ -# Maintainer: Ionut Biru <ib...@archlinux.org> - -pkgname=js38 -pkgver=38.0.0 -pkgrel=1 -pkgdesc="JavaScript interpreter and libraries - Version 38" -arch=(i686 x86_64) -url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/38" -license=(MPL) -depends=(nspr gcc-libs readline zlib icu) -makedepends=(python2 libffi zip) -options=(!staticlibs) -source=(https://people.mozilla.org/~sstangl/mozjs-38.2.1.rc0.tar.bz2 - mozjs38-fix-tracelogger.patch - mozjs38-shell-version.patch - mozjs38-pkg-config-version.patch - mozjs38-install-name.patch - mozjs38-copy-headers.patch - mozjs38-add-bracket.patch - mozjs38-1269317.patch) -sha256sums=('01994c758174bc173bcf4960f05ecb4da21014f09641a63b2952bbf9eeaa8b5c' - '55e656c41583cd4e5468cb4b93c0f57f40f2817adcc1acf9333b4b248969983d' - '16b00caf68c23d7b484b42b523ca49465853fee5161b34520cb93fc89bf16903' - 'fcdc86524d3abb89244310bded9e994833b1ecad2cb181821cbb523e2c1b567a' - '56d1336f0bfa9b1d1a19313f3cdece317bf6a169c7369ecdc068e7ab99d16d9e' - 'd052a19e7d33023e927c83fda5dcf7a90127934df034969011960b3b8e6930ed' - '3d3a53949da5d1da201548d9de41c99c1ff6d52e1ac7bc047e2c96e6c5f9e3a7' - 'e34338b3bfb1a16c3f98b73007b914560085d54ba94d56cb1b8586330cbef506') - -prepare() { - cd mozjs-$pkgver - - patch -Np1 -i ../mozjs38-fix-tracelogger.patch - patch -Np1 -i ../mozjs38-shell-version.patch - patch -Np1 -i ../mozjs38-pkg-config-version.patch - patch -Np1 -i ../mozjs38-install-name.patch - patch -Np1 -i ../mozjs38-copy-headers.patch - patch -Np1 -i ../mozjs38-add-bracket.patch - patch -Np1 -i ../mozjs38-1269317.patch -} - -build() { - unset CPPFLAGS - CXXFLAGS+=' -fno-delete-null-pointer-checks' - export PYTHON=/usr/bin/python2 - cd mozjs-$pkgver/js/src - ./configure --prefix=/usr --with-system-nspr --enable-system-ffi \ - --with-system-zlib --with-system-icu --with-intl-api - make -} - -check() { - cd mozjs-$pkgver/js/src - # Disabled: test suite fails because it is broken. - #make -j1 check -} - -package() { - cd mozjs-$pkgver/js/src - make DESTDIR="$pkgdir" install - rm -f "$pkgdir"/usr/lib/*.ajs - find "$pkgdir"/usr/{lib/pkgconfig,include} -type f -exec chmod -x {} + -} - -# vim:set ts=2 sw=2 et: Copied: js38/repos/extra-i686/PKGBUILD (from rev 292611, js38/trunk/PKGBUILD) =================================================================== --- extra-i686/PKGBUILD (rev 0) +++ extra-i686/PKGBUILD 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,69 @@ +# $Id: PKGBUILD 280035 2016-11-07 16:57:54Z foutrelis $ +# Maintainer: Ionut Biru <ib...@archlinux.org> + +pkgname=js38 +pkgver=38.8.0 +pkgrel=2 +pkgdesc="JavaScript interpreter and libraries - Version 38" +arch=(i686 x86_64) +url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/38" +license=(MPL) +depends=(nspr gcc-libs readline zlib icu libffi) +makedepends=(python2 libffi zip) +options=(!staticlibs) +source=(https://ftp.mozilla.org/pub/firefox/releases/${pkgver}esr/source/firefox-${pkgver}esr.source.tar.bz2 + mozjs38-fix-tracelogger.patch + mozjs38-shell-version.patch + mozjs38-pkg-config-version.patch + mozjs38-install-name.patch + mozjs38-copy-headers.patch + mozjs38-add-bracket.patch + mozjs38-1269317.patch) +sha256sums=('9475adcee29d590383c4885bc5f958093791d1db4302d694a5d2766698f59982' + '55e656c41583cd4e5468cb4b93c0f57f40f2817adcc1acf9333b4b248969983d' + '16b00caf68c23d7b484b42b523ca49465853fee5161b34520cb93fc89bf16903' + 'fcdc86524d3abb89244310bded9e994833b1ecad2cb181821cbb523e2c1b567a' + '56d1336f0bfa9b1d1a19313f3cdece317bf6a169c7369ecdc068e7ab99d16d9e' + 'd052a19e7d33023e927c83fda5dcf7a90127934df034969011960b3b8e6930ed' + '3d3a53949da5d1da201548d9de41c99c1ff6d52e1ac7bc047e2c96e6c5f9e3a7' + 'e34338b3bfb1a16c3f98b73007b914560085d54ba94d56cb1b8586330cbef506') + +prepare() { + cd mozilla-esr38 + + patch -Np1 -i ../mozjs38-fix-tracelogger.patch + patch -Np1 -i ../mozjs38-shell-version.patch + patch -Np1 -i ../mozjs38-pkg-config-version.patch + patch -Np1 -i ../mozjs38-install-name.patch + patch -Np1 -i ../mozjs38-copy-headers.patch + patch -Np1 -i ../mozjs38-add-bracket.patch + patch -Np1 -i ../mozjs38-1269317.patch +} + +build() { + unset CPPFLAGS + CXXFLAGS+=' -fno-delete-null-pointer-checks -fpermissive -fno-tree-vrp -fno-strict-aliasing' + CFLAGS+=' -fno-delete-null-pointer-checks -fpermissive -fno-tree-vrp -fno-strict-aliasing' + export PYTHON=/usr/bin/python2 + cd mozilla-esr38/js/src + ./configure --prefix=/usr --with-system-nspr --enable-system-ffi \ + --with-system-zlib --with-system-icu --with-intl-api --enable-ctypes \ + --enable-threadsafe --enable-system-ffi --enable-shared-js --enable-gcgenerational --disable-optimize --enable-pie + make +} + +check() { + cd mozilla-esr38/js/src + # Disabled: test suite fails because it is broken. + #make -j1 check +} + +package() { + cd mozilla-esr38/js/src + make DESTDIR="$pkgdir" install + rm -f "$pkgdir"/usr/lib/*.ajs + rm -f "$pkgdir"/usr/bin/js38 + find "$pkgdir"/usr/{lib/pkgconfig,include} -type f -exec chmod -x {} + +} + +# vim:set ts=2 sw=2 et: Deleted: extra-i686/mozjs38-1269317.patch =================================================================== --- extra-i686/mozjs38-1269317.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-1269317.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,122 +0,0 @@ ---- a/js/src/jit/RegisterSets.h 2017-02-10 17:33:06.210702431 -0800 -+++ b/js/src/jit/RegisterSets.h 2017-02-10 17:43:52.877514146 -0800 -@@ -7,7 +7,6 @@ - #ifndef jit_RegisterSets_h - #define jit_RegisterSets_h - --#include "mozilla/Alignment.h" - #include "mozilla/MathAlgorithms.h" - - #include "jit/JitAllocPolicy.h" -@@ -26,8 +25,8 @@ - Code code_; - - public: -- AnyRegister() -- { } -+ AnyRegister() = default; -+ - explicit AnyRegister(Register gpr) { - code_ = gpr.code(); - } -@@ -156,7 +155,7 @@ - } - #endif - -- ValueOperand() {} -+ ValueOperand() = default; - }; - - // Registers to hold either either a typed or untyped value. -@@ -165,46 +164,25 @@ - // Type of value being stored. - MIRType type_; - -- // Space to hold either an AnyRegister or a ValueOperand. - union U { -- mozilla::AlignedStorage2<AnyRegister> typed; -- mozilla::AlignedStorage2<ValueOperand> value; -+ AnyRegister typed; -+ ValueOperand value; - } data; - -- AnyRegister& dataTyped() { -- MOZ_ASSERT(hasTyped()); -- return *data.typed.addr(); -- } -- ValueOperand& dataValue() { -- MOZ_ASSERT(hasValue()); -- return *data.value.addr(); -- } -- -- AnyRegister dataTyped() const { -- MOZ_ASSERT(hasTyped()); -- return *data.typed.addr(); -- } -- const ValueOperand& dataValue() const { -- MOZ_ASSERT(hasValue()); -- return *data.value.addr(); -- } -- - public: - -- TypedOrValueRegister() -- : type_(MIRType_None) -- {} -+ TypedOrValueRegister() = default; - - TypedOrValueRegister(MIRType type, AnyRegister reg) - : type_(type) - { -- dataTyped() = reg; -+ data.typed = reg; - } - - MOZ_IMPLICIT TypedOrValueRegister(ValueOperand value) - : type_(MIRType_Value) - { -- dataValue() = value; -+ data.value = value; - } - - MIRType type() const { -@@ -220,11 +198,13 @@ - } - - AnyRegister typedReg() const { -- return dataTyped(); -+ MOZ_ASSERT(hasTyped()); -+ return data.typed; - } - - ValueOperand valueReg() const { -- return dataValue(); -+ MOZ_ASSERT(hasValue()); -+ return data.value; - } - - AnyRegister scratchReg() { -@@ -240,19 +220,18 @@ - // Whether a constant value is being stored. - bool constant_; - -- // Space to hold either a Value or a TypedOrValueRegister. - union U { -- mozilla::AlignedStorage2<Value> constant; -- mozilla::AlignedStorage2<TypedOrValueRegister> reg; -+ Value constant; -+ TypedOrValueRegister reg; - } data; - - Value& dataValue() { - MOZ_ASSERT(constant()); -- return *data.constant.addr(); -+ return data.constant; - } - TypedOrValueRegister& dataReg() { - MOZ_ASSERT(!constant()); -- return *data.reg.addr(); -+ return data.reg; - } - - public: Copied: js38/repos/extra-i686/mozjs38-1269317.patch (from rev 292611, js38/trunk/mozjs38-1269317.patch) =================================================================== --- extra-i686/mozjs38-1269317.patch (rev 0) +++ extra-i686/mozjs38-1269317.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,122 @@ +--- a/js/src/jit/RegisterSets.h 2017-02-10 17:33:06.210702431 -0800 ++++ b/js/src/jit/RegisterSets.h 2017-02-10 17:43:52.877514146 -0800 +@@ -7,7 +7,6 @@ + #ifndef jit_RegisterSets_h + #define jit_RegisterSets_h + +-#include "mozilla/Alignment.h" + #include "mozilla/MathAlgorithms.h" + + #include "jit/JitAllocPolicy.h" +@@ -26,8 +25,8 @@ + Code code_; + + public: +- AnyRegister() +- { } ++ AnyRegister() = default; ++ + explicit AnyRegister(Register gpr) { + code_ = gpr.code(); + } +@@ -156,7 +155,7 @@ + } + #endif + +- ValueOperand() {} ++ ValueOperand() = default; + }; + + // Registers to hold either either a typed or untyped value. +@@ -165,46 +164,25 @@ + // Type of value being stored. + MIRType type_; + +- // Space to hold either an AnyRegister or a ValueOperand. + union U { +- mozilla::AlignedStorage2<AnyRegister> typed; +- mozilla::AlignedStorage2<ValueOperand> value; ++ AnyRegister typed; ++ ValueOperand value; + } data; + +- AnyRegister& dataTyped() { +- MOZ_ASSERT(hasTyped()); +- return *data.typed.addr(); +- } +- ValueOperand& dataValue() { +- MOZ_ASSERT(hasValue()); +- return *data.value.addr(); +- } +- +- AnyRegister dataTyped() const { +- MOZ_ASSERT(hasTyped()); +- return *data.typed.addr(); +- } +- const ValueOperand& dataValue() const { +- MOZ_ASSERT(hasValue()); +- return *data.value.addr(); +- } +- + public: + +- TypedOrValueRegister() +- : type_(MIRType_None) +- {} ++ TypedOrValueRegister() = default; + + TypedOrValueRegister(MIRType type, AnyRegister reg) + : type_(type) + { +- dataTyped() = reg; ++ data.typed = reg; + } + + MOZ_IMPLICIT TypedOrValueRegister(ValueOperand value) + : type_(MIRType_Value) + { +- dataValue() = value; ++ data.value = value; + } + + MIRType type() const { +@@ -220,11 +198,13 @@ + } + + AnyRegister typedReg() const { +- return dataTyped(); ++ MOZ_ASSERT(hasTyped()); ++ return data.typed; + } + + ValueOperand valueReg() const { +- return dataValue(); ++ MOZ_ASSERT(hasValue()); ++ return data.value; + } + + AnyRegister scratchReg() { +@@ -240,19 +220,18 @@ + // Whether a constant value is being stored. + bool constant_; + +- // Space to hold either a Value or a TypedOrValueRegister. + union U { +- mozilla::AlignedStorage2<Value> constant; +- mozilla::AlignedStorage2<TypedOrValueRegister> reg; ++ Value constant; ++ TypedOrValueRegister reg; + } data; + + Value& dataValue() { + MOZ_ASSERT(constant()); +- return *data.constant.addr(); ++ return data.constant; + } + TypedOrValueRegister& dataReg() { + MOZ_ASSERT(!constant()); +- return *data.reg.addr(); ++ return data.reg; + } + + public: Deleted: extra-i686/mozjs38-add-bracket.patch =================================================================== --- extra-i686/mozjs38-add-bracket.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-add-bracket.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,16 +0,0 @@ -Add bracket for sed 4.3 compliance - -Based on upstream fix by Daniel Stenberg in 09 jan 2017 -See: https://hg.mozilla.org/mozilla-central/rev/ebcbf47a83e7 - ---- a/js/src/configure 2017-02-21 16:56:42.350105741 -0300 -+++ b/js/src/configure 2017-02-21 17:33:13.183493978 -0300 -@@ -15231,7 +15231,7 @@ - fi - fi - -- version=`sed -n 's/^[:space:]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` -+ version=`sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` - if test x"$version" = x; then - { echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&2; echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&5; exit 1; } - fi Copied: js38/repos/extra-i686/mozjs38-add-bracket.patch (from rev 292611, js38/trunk/mozjs38-add-bracket.patch) =================================================================== --- extra-i686/mozjs38-add-bracket.patch (rev 0) +++ extra-i686/mozjs38-add-bracket.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,16 @@ +Add bracket for sed 4.3 compliance + +Based on upstream fix by Daniel Stenberg in 09 jan 2017 +See: https://hg.mozilla.org/mozilla-central/rev/ebcbf47a83e7 + +--- a/js/src/configure 2017-02-21 16:56:42.350105741 -0300 ++++ b/js/src/configure 2017-02-21 17:33:13.183493978 -0300 +@@ -15231,7 +15231,7 @@ + fi + fi + +- version=`sed -n 's/^[:space:]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` ++ version=`sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` + if test x"$version" = x; then + { echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&2; echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&5; exit 1; } + fi Deleted: extra-i686/mozjs38-copy-headers.patch =================================================================== --- extra-i686/mozjs38-copy-headers.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-copy-headers.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,20 +0,0 @@ -Description: Copy headers on install instead of symlinking -Author: Rico Tzschichholz <ric...@ubuntu.com> -Forwarded: no -Last-Update: 2014-10-29 - ---- - -Index: b/python/mozbuild/mozbuild/backend/recursivemake.py -=================================================================== ---- a/python/mozbuild/mozbuild/backend/recursivemake.py -+++ b/python/mozbuild/mozbuild/backend/recursivemake.py -@@ -796,7 +796,7 @@ - return - - for source, dest, _ in self._walk_hierarchy(obj, exports): -- self._install_manifests['dist_include'].add_symlink(source, dest) -+ self._install_manifests['dist_include'].add_copy(source, dest) - - if not os.path.exists(source): - raise Exception('File listed in EXPORTS does not exist: %s' % source) Copied: js38/repos/extra-i686/mozjs38-copy-headers.patch (from rev 292611, js38/trunk/mozjs38-copy-headers.patch) =================================================================== --- extra-i686/mozjs38-copy-headers.patch (rev 0) +++ extra-i686/mozjs38-copy-headers.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,20 @@ +Description: Copy headers on install instead of symlinking +Author: Rico Tzschichholz <ric...@ubuntu.com> +Forwarded: no +Last-Update: 2014-10-29 + +--- + +Index: b/python/mozbuild/mozbuild/backend/recursivemake.py +=================================================================== +--- a/python/mozbuild/mozbuild/backend/recursivemake.py ++++ b/python/mozbuild/mozbuild/backend/recursivemake.py +@@ -796,7 +796,7 @@ + return + + for source, dest, _ in self._walk_hierarchy(obj, exports): +- self._install_manifests['dist_include'].add_symlink(source, dest) ++ self._install_manifests['dist_include'].add_copy(source, dest) + + if not os.path.exists(source): + raise Exception('File listed in EXPORTS does not exist: %s' % source) Deleted: extra-i686/mozjs38-fix-tracelogger.patch =================================================================== --- extra-i686/mozjs38-fix-tracelogger.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-fix-tracelogger.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,603 +0,0 @@ -# === Fix the SM38 tracelogger === -# This patch is a squashed version of several patches that were adapted -# to fix failing hunks. -# -# Applied in the following order, they are: -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223767 -# Assertion failure: i < size_, at js/src/vm/TraceLoggingTypes.h:210 -# Also fix stop-information to make reduce.py work correctly. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227914 -# Limit the memory tracelogger can take. -# This causes tracelogger to flush data to the disk regularly and prevents out of -# memory issues if a lot of data gets logged. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1155618 -# Fix tracelogger destructor that touches possibly uninitialised hash table. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223636 -# Don't treat extraTextId as containing only extra ids. -# This fixes an assertion failure: id == nextTextId at js/src/vm/TraceLoggingGraph.cpp -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227028 -# Fix when to keep the payload of a TraceLogger event. -# This fixes an assertion failure: textId < uint32_t(1 << 31) at js/src/vm/TraceLoggingGraph.h -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1266649 -# Handle failing to add to pointermap gracefully. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1280648 -# Don't cache based on pointers to movable GC things. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1224123 -# Fix the use of LastEntryId in tracelogger.h. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1231170 -# Use size in debugger instead of the current id to track last logged item. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1221844 -# Move TraceLogger_Invalidation to LOG_ITEM. -# Add some debug checks to logTimestamp. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1255766 -# Also mark resizing of memory. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1259403 -# Only increase capacity by multiples of 2. -# Always make sure there are 3 free slots for events. -# === - -diff --git a/js/src/jit-test/tests/tracelogger/bug1231170.js b/js/src/jit-test/tests/tracelogger/bug1231170.js -new file mode 100644 -index 0000000..023e93e ---- /dev/null -+++ b/js/src/jit-test/tests/tracelogger/bug1231170.js -@@ -0,0 +1,3 @@ -+var du = new Debugger(); -+if (typeof du.drainTraceLogger === "function") -+ du.drainTraceLogger(); -diff --git a/js/src/jit-test/tests/tracelogger/bug1266649.js b/js/src/jit-test/tests/tracelogger/bug1266649.js -new file mode 100644 -index 0000000..81ae7ad ---- /dev/null -+++ b/js/src/jit-test/tests/tracelogger/bug1266649.js -@@ -0,0 +1,10 @@ -+ -+var du = new Debugger(); -+if (typeof du.setupTraceLogger === "function" && -+ typeof oomTest === 'function') -+{ -+ du.setupTraceLogger({ -+ Scripts: true -+ }) -+ oomTest(() => function(){}); -+} -diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp -index 93e2fda..09049d6 100644 ---- a/js/src/jit/Ion.cpp -+++ b/js/src/jit/Ion.cpp -@@ -1055,6 +1055,8 @@ IonScript::Destroy(FreeOp* fop, IonScript* script) - - script->destroyCaches(); - script->unlinkFromRuntime(fop); -+ // Frees the potential event we have set. -+ script->traceLoggerScriptEvent_ = TraceLoggerEvent(); - fop->free_(script); - } - -diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp -index 26262fd..af7f313 100644 ---- a/js/src/vm/Debugger.cpp -+++ b/js/src/vm/Debugger.cpp -@@ -369,10 +369,10 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg) - objects(cx), - environments(cx), - #ifdef NIGHTLY_BUILD -- traceLoggerLastDrainedId(0), -+ traceLoggerLastDrainedSize(0), - traceLoggerLastDrainedIteration(0), - #endif -- traceLoggerScriptedCallsLastDrainedId(0), -+ traceLoggerScriptedCallsLastDrainedSize(0), - traceLoggerScriptedCallsLastDrainedIteration(0) - { - assertSameCompartment(cx, dbg); -@@ -3907,9 +3907,9 @@ Debugger::drainTraceLogger(JSContext* cx, unsigned argc, Value* vp) - size_t num; - TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); - bool lostEvents = logger->lostEvents(dbg->traceLoggerLastDrainedIteration, -- dbg->traceLoggerLastDrainedId); -+ dbg->traceLoggerLastDrainedSize); - EventEntry* events = logger->getEventsStartingAt(&dbg->traceLoggerLastDrainedIteration, -- &dbg->traceLoggerLastDrainedId, -+ &dbg->traceLoggerLastDrainedSize, - &num); - - RootedObject array(cx, NewDenseEmptyArray(cx)); -@@ -4002,10 +4002,10 @@ Debugger::drainTraceLoggerScriptCalls(JSContext* cx, unsigned argc, Value* vp) - size_t num; - TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); - bool lostEvents = logger->lostEvents(dbg->traceLoggerScriptedCallsLastDrainedIteration, -- dbg->traceLoggerScriptedCallsLastDrainedId); -+ dbg->traceLoggerScriptedCallsLastDrainedSize); - EventEntry* events = logger->getEventsStartingAt( - &dbg->traceLoggerScriptedCallsLastDrainedIteration, -- &dbg->traceLoggerScriptedCallsLastDrainedId, -+ &dbg->traceLoggerScriptedCallsLastDrainedSize, - &num); - - RootedObject array(cx, NewDenseEmptyArray(cx)); -diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h -index 8cac36a..c92d685 100644 ---- a/js/src/vm/Debugger.h -+++ b/js/src/vm/Debugger.h -@@ -314,10 +314,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger> - * lost events. - */ - #ifdef NIGHTLY_BUILD -- uint32_t traceLoggerLastDrainedId; -+ uint32_t traceLoggerLastDrainedSize; - uint32_t traceLoggerLastDrainedIteration; - #endif -- uint32_t traceLoggerScriptedCallsLastDrainedId; -+ uint32_t traceLoggerScriptedCallsLastDrainedSize; - uint32_t traceLoggerScriptedCallsLastDrainedIteration; - - class FrameRange; -diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp -index 6715b36..9766a6f 100644 ---- a/js/src/vm/TraceLogging.cpp -+++ b/js/src/vm/TraceLogging.cpp -@@ -131,7 +131,7 @@ TraceLoggerThread::init() - { - if (!pointerMap.init()) - return false; -- if (!extraTextId.init()) -+ if (!textIdPayloads.init()) - return false; - if (!events.init()) - return false; -@@ -185,10 +185,10 @@ TraceLoggerThread::~TraceLoggerThread() - graph = nullptr; - } - -- for (TextIdHashMap::Range r = extraTextId.all(); !r.empty(); r.popFront()) -- js_delete(r.front().value()); -- extraTextId.finish(); -- pointerMap.finish(); -+ if (textIdPayloads.initialized()) { -+ for (TextIdHashMap::Range r = textIdPayloads.all(); !r.empty(); r.popFront()) -+ js_delete(r.front().value()); -+ } - } - - bool -@@ -287,7 +287,7 @@ TraceLoggerThread::eventText(uint32_t id) - if (id < TraceLogger_Last) - return TLTextIdString(static_cast<TraceLoggerTextId>(id)); - -- TextIdHashMap::Ptr p = extraTextId.lookup(id); -+ TextIdHashMap::Ptr p = textIdPayloads.lookup(id); - MOZ_ASSERT(p); - - return p->value()->string(); -@@ -341,13 +341,15 @@ TraceLoggerThread::extractScriptDetails(uint32_t textId, const char** filename, - TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId textId) - { -- TextIdHashMap::AddPtr p = extraTextId.lookupForAdd(textId); -- if (p) -+ TextIdHashMap::AddPtr p = textIdPayloads.lookupForAdd(textId); -+ if (p) { -+ MOZ_ASSERT(p->value()->textId() == textId); // Sanity check. - return p->value(); -+ } - - TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, (char*)nullptr); - -- if (!extraTextId.add(p, textId, payload)) -+ if (!textIdPayloads.add(p, textId, payload)) - return nullptr; - - return payload; -@@ -357,8 +359,10 @@ TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(const char* text) - { - PointerHashMap::AddPtr p = pointerMap.lookupForAdd((const void*)text); -- if (p) -+ if (p) { -+ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. - return p->value(); -+ } - - size_t len = strlen(text); - char* str = js_pod_malloc<char>(len + 1); -@@ -369,7 +373,7 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) - MOZ_ASSERT(ret == len); - MOZ_ASSERT(strlen(str) == len); - -- uint32_t textId = extraTextId.count() + TraceLogger_Last; -+ uint32_t textId = nextTextId; - - TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); - if (!payload) { -@@ -377,17 +381,19 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) - return nullptr; - } - -- if (!extraTextId.putNew(textId, payload)) { -+ if (!textIdPayloads.putNew(textId, payload)) { - js_delete(payload); - return nullptr; - } - -- if (!pointerMap.add(p, text, payload)) -- return nullptr; -- - if (graph.get()) - graph->addTextId(textId, str); - -+ nextTextId++; -+ -+ if (!pointerMap.add(p, text, payload)) -+ return nullptr; -+ - return payload; - } - -@@ -407,9 +413,14 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f - if (!traceLoggerState->isTextIdEnabled(type)) - return getOrCreateEventPayload(type); - -- PointerHashMap::AddPtr p = pointerMap.lookupForAdd(ptr); -- if (p) -- return p->value(); -+ PointerHashMap::AddPtr p; -+ if (ptr) { -+ p = pointerMap.lookupForAdd(ptr); -+ if (p) { -+ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. -+ return p->value(); -+ } -+ } - - // Compute the length of the string to create. - size_t lenFilename = strlen(filename); -@@ -428,24 +439,28 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f - MOZ_ASSERT(ret == len); - MOZ_ASSERT(strlen(str) == len); - -- uint32_t textId = extraTextId.count() + TraceLogger_Last; -+ uint32_t textId = nextTextId; - TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); - if (!payload) { - js_free(str); - return nullptr; - } - -- if (!extraTextId.putNew(textId, payload)) { -+ if (!textIdPayloads.putNew(textId, payload)) { - js_delete(payload); - return nullptr; - } - -- if (!pointerMap.add(p, ptr, payload)) -- return nullptr; -- - if (graph.get()) - graph->addTextId(textId, str); - -+ nextTextId++; -+ -+ if (ptr) { -+ if (!pointerMap.add(p, ptr, payload)) -+ return nullptr; -+ } -+ - return payload; - } - -@@ -453,14 +468,14 @@ TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, JSScript* script) - { - return getOrCreateEventPayload(type, script->filename(), script->lineno(), script->column(), -- script); -+ nullptr); - } - - TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, - const JS::ReadOnlyCompileOptions& script) - { -- return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, &script); -+ return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, nullptr); - } - - void -@@ -485,7 +500,7 @@ TraceLoggerThread::startEvent(uint32_t id) - if (!traceLoggerState->isTextIdEnabled(id)) - return; - -- logTimestamp(id); -+ log(id); - } - - void -@@ -510,7 +525,7 @@ TraceLoggerThread::stopEvent(uint32_t id) - if (!traceLoggerState->isTextIdEnabled(id)) - return; - -- logTimestamp(TraceLogger_Stop); -+ log(TraceLogger_Stop); - } - - void -@@ -522,23 +537,57 @@ TraceLoggerThread::logTimestamp(TraceLoggerTextId id) - void - TraceLoggerThread::logTimestamp(uint32_t id) - { -+ MOZ_ASSERT(id > TraceLogger_LastTreeItem && id < TraceLogger_Last); -+ log(id); -+} -+ -+void -+TraceLoggerThread::log(uint32_t id) -+{ - if (enabled == 0) - return; - - MOZ_ASSERT(traceLoggerState); -- if (!events.ensureSpaceBeforeAdd()) { -+ -+ // We request for 3 items to add, since if we don't have enough room -+ // we record the time it took to make more place. To log this information -+ // we need 2 extra free entries. -+ if (!events.hasSpaceForAdd(3)) { - uint64_t start = rdtsc() - traceLoggerState->startupTime; - -- if (graph.get()) -- graph->log(events); -+ if (!events.ensureSpaceBeforeAdd(3)) { -+ if (graph.get()) -+ graph->log(events); -+ -+ iteration_++; -+ events.clear(); -+ -+ // Remove the item in the pointerMap for which the payloads -+ // have no uses anymore -+ for (PointerHashMap::Enum e(pointerMap); !e.empty(); e.popFront()) { -+ if (e.front().value()->uses() != 0) -+ continue; -+ -+ TextIdHashMap::Ptr p = textIdPayloads.lookup(e.front().value()->textId()); -+ MOZ_ASSERT(p); -+ textIdPayloads.remove(p); -+ -+ e.removeFront(); -+ } - -- iteration_++; -- events.clear(); -+ // Free all payloads that have no uses anymore. -+ for (TextIdHashMap::Enum e(textIdPayloads); !e.empty(); e.popFront()) { -+ if (e.front().value()->uses() == 0) { -+ js_delete(e.front().value()); -+ e.removeFront(); -+ } -+ } -+ } - - // Log the time it took to flush the events as being from the - // Tracelogger. - if (graph.get()) { -- MOZ_ASSERT(events.capacity() > 2); -+ MOZ_ASSERT(events.hasSpaceForAdd(2)); - EventEntry& entryStart = events.pushUninitialized(); - entryStart.time = start; - entryStart.textId = TraceLogger_Internal; -@@ -548,13 +597,6 @@ TraceLoggerThread::logTimestamp(uint32_t id) - entryStop.textId = TraceLogger_Stop; - } - -- // Free all TextEvents that have no uses anymore. -- for (TextIdHashMap::Enum e(extraTextId); !e.empty(); e.popFront()) { -- if (e.front().value()->uses() == 0) { -- js_delete(e.front().value()); -- e.removeFront(); -- } -- } - } - - uint64_t time = rdtsc() - traceLoggerState->startupTime; -@@ -956,3 +998,16 @@ TraceLoggerEvent::~TraceLoggerEvent() - if (payload_) - payload_->release(); - } -+ -+TraceLoggerEvent& -+TraceLoggerEvent::operator=(const TraceLoggerEvent& other) -+{ -+ if (hasPayload()) -+ payload()->release(); -+ if (other.hasPayload()) -+ other.payload()->use(); -+ -+ payload_ = other.payload_; -+ -+ return *this; -+} -diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h -index a124dcb..91a1eb0 100644 ---- a/js/src/vm/TraceLogging.h -+++ b/js/src/vm/TraceLogging.h -@@ -110,6 +110,9 @@ class TraceLoggerEvent { - bool hasPayload() const { - return !!payload_; - } -+ -+ TraceLoggerEvent& operator=(const TraceLoggerEvent& other); -+ TraceLoggerEvent(const TraceLoggerEvent& event) = delete; - }; - - /** -@@ -130,6 +133,10 @@ class TraceLoggerEventPayload { - uses_(0) - { } - -+ ~TraceLoggerEventPayload() { -+ MOZ_ASSERT(uses_ == 0); -+ } -+ - uint32_t textId() { - return textId_; - } -@@ -166,7 +173,8 @@ class TraceLoggerThread - mozilla::UniquePtr<TraceLoggerGraph> graph; - - PointerHashMap pointerMap; -- TextIdHashMap extraTextId; -+ TextIdHashMap textIdPayloads; -+ uint32_t nextTextId; - - ContinuousSpace<EventEntry> events; - -@@ -181,6 +189,7 @@ class TraceLoggerThread - : enabled(0), - failed(false), - graph(), -+ nextTextId(TraceLogger_Last), - iteration_(0), - top(nullptr) - { } -@@ -195,22 +204,22 @@ class TraceLoggerThread - bool enable(JSContext* cx); - bool disable(); - -- // Given the previous iteration and lastEntryId, return an array of events -+ // Given the previous iteration and size, return an array of events - // (there could be lost events). At the same time update the iteration and -- // lastEntry and gives back how many events there are. -- EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastEntryId, size_t* num) { -+ // size and gives back how many events there are. -+ EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastSize, size_t* num) { - EventEntry* start; - if (iteration_ == *lastIteration) { -- MOZ_ASSERT(events.lastEntryId() >= *lastEntryId); -- *num = events.lastEntryId() - *lastEntryId; -- start = events.data() + *lastEntryId + 1; -+ MOZ_ASSERT(*lastSize <= events.size()); -+ *num = events.size() - *lastSize; -+ start = events.data() + *lastSize; - } else { -- *num = events.lastEntryId() + 1; -+ *num = events.size(); - start = events.data(); - } - - *lastIteration = iteration_; -- *lastEntryId = events.lastEntryId(); -+ *lastSize = events.size(); - return start; - } - -@@ -220,16 +229,16 @@ class TraceLoggerThread - const char** lineno, size_t* lineno_len, const char** colno, - size_t* colno_len); - -- bool lostEvents(uint32_t lastIteration, uint32_t lastEntryId) { -+ bool lostEvents(uint32_t lastIteration, uint32_t lastSize) { - // If still logging in the same iteration, there are no lost events. - if (lastIteration == iteration_) { -- MOZ_ASSERT(lastEntryId <= events.lastEntryId()); -+ MOZ_ASSERT(lastSize <= events.size()); - return false; - } - -- // When proceeded to the next iteration and lastEntryId points to -- // the maximum capacity there are no logs that are lost. -- if (lastIteration + 1 == iteration_ && lastEntryId == events.capacity()) -+ // If we are in a consecutive iteration we are only sure we didn't lose any events, -+ // when the lastSize equals the maximum size 'events' can get. -+ if (lastIteration == iteration_ - 1 && lastSize == events.maxSize()) - return false; - - return true; -@@ -268,6 +277,7 @@ class TraceLoggerThread - void stopEvent(uint32_t id); - private: - void stopEvent(); -+ void log(uint32_t id); - - public: - static unsigned offsetOfEnabled() { -diff --git a/js/src/vm/TraceLoggingGraph.cpp b/js/src/vm/TraceLoggingGraph.cpp -index d1b7f2e..a4eb273 100644 ---- a/js/src/vm/TraceLoggingGraph.cpp -+++ b/js/src/vm/TraceLoggingGraph.cpp -@@ -276,7 +276,7 @@ TraceLoggerGraph::flush() - if (bytesWritten < tree.size()) - return false; - -- treeOffset += tree.lastEntryId(); -+ treeOffset += tree.size(); - tree.clear(); - } - -@@ -359,7 +359,7 @@ TraceLoggerGraph::startEventInternal(uint32_t id, uint64_t timestamp) - - if (parent.lastChildId() == 0) { - MOZ_ASSERT(!entry.hasChildren()); -- MOZ_ASSERT(parent.treeId() == tree.lastEntryId() + treeOffset); -+ MOZ_ASSERT(parent.treeId() == treeOffset + tree.size() - 1); - - if (!updateHasChildren(parent.treeId())) - return false; -diff --git a/js/src/vm/TraceLoggingTypes.h b/js/src/vm/TraceLoggingTypes.h -index f1c9d0c..10b76d6 100644 ---- a/js/src/vm/TraceLoggingTypes.h -+++ b/js/src/vm/TraceLoggingTypes.h -@@ -21,7 +21,6 @@ - _(Internal) \ - _(Interpreter) \ - _(InlinedScripts) \ -- _(Invalidation) \ - _(IonCompilation) \ - _(IonCompilationPaused) \ - _(IonLinking) \ -@@ -60,6 +59,7 @@ - - #define TRACELOGGER_LOG_ITEMS(_) \ - _(Bailout) \ -+ _(Invalidation) \ - _(Disable) \ - _(Enable) \ - _(Stop) -@@ -130,6 +130,9 @@ class ContinuousSpace { - uint32_t size_; - uint32_t capacity_; - -+ // The maximum amount of ram memory a continuous space structure can take (in bytes). -+ static const uint32_t LIMIT = 200 * 1024 * 1024; -+ - public: - ContinuousSpace () - : data_(nullptr) -@@ -151,6 +154,10 @@ class ContinuousSpace { - data_ = nullptr; - } - -+ static uint32_t maxSize() { -+ return LIMIT / sizeof(T); -+ } -+ - T* data() { - return data_; - } -@@ -187,11 +194,14 @@ class ContinuousSpace { - if (hasSpaceForAdd(count)) - return true; - -+ // Limit the size of a continuous buffer. -+ if (size_ + count > maxSize()) -+ return false; -+ - uint32_t nCapacity = capacity_ * 2; -- if (size_ + count > nCapacity) -- nCapacity = size_ + count; -- T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); -+ nCapacity = (nCapacity < maxSize()) ? nCapacity : maxSize(); - -+ T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); - if (!entries) - return false; - Copied: js38/repos/extra-i686/mozjs38-fix-tracelogger.patch (from rev 292611, js38/trunk/mozjs38-fix-tracelogger.patch) =================================================================== --- extra-i686/mozjs38-fix-tracelogger.patch (rev 0) +++ extra-i686/mozjs38-fix-tracelogger.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,603 @@ +# === Fix the SM38 tracelogger === +# This patch is a squashed version of several patches that were adapted +# to fix failing hunks. +# +# Applied in the following order, they are: +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223767 +# Assertion failure: i < size_, at js/src/vm/TraceLoggingTypes.h:210 +# Also fix stop-information to make reduce.py work correctly. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227914 +# Limit the memory tracelogger can take. +# This causes tracelogger to flush data to the disk regularly and prevents out of +# memory issues if a lot of data gets logged. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1155618 +# Fix tracelogger destructor that touches possibly uninitialised hash table. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223636 +# Don't treat extraTextId as containing only extra ids. +# This fixes an assertion failure: id == nextTextId at js/src/vm/TraceLoggingGraph.cpp +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227028 +# Fix when to keep the payload of a TraceLogger event. +# This fixes an assertion failure: textId < uint32_t(1 << 31) at js/src/vm/TraceLoggingGraph.h +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1266649 +# Handle failing to add to pointermap gracefully. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1280648 +# Don't cache based on pointers to movable GC things. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1224123 +# Fix the use of LastEntryId in tracelogger.h. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1231170 +# Use size in debugger instead of the current id to track last logged item. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1221844 +# Move TraceLogger_Invalidation to LOG_ITEM. +# Add some debug checks to logTimestamp. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1255766 +# Also mark resizing of memory. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1259403 +# Only increase capacity by multiples of 2. +# Always make sure there are 3 free slots for events. +# === + +diff --git a/js/src/jit-test/tests/tracelogger/bug1231170.js b/js/src/jit-test/tests/tracelogger/bug1231170.js +new file mode 100644 +index 0000000..023e93e +--- /dev/null ++++ b/js/src/jit-test/tests/tracelogger/bug1231170.js +@@ -0,0 +1,3 @@ ++var du = new Debugger(); ++if (typeof du.drainTraceLogger === "function") ++ du.drainTraceLogger(); +diff --git a/js/src/jit-test/tests/tracelogger/bug1266649.js b/js/src/jit-test/tests/tracelogger/bug1266649.js +new file mode 100644 +index 0000000..81ae7ad +--- /dev/null ++++ b/js/src/jit-test/tests/tracelogger/bug1266649.js +@@ -0,0 +1,10 @@ ++ ++var du = new Debugger(); ++if (typeof du.setupTraceLogger === "function" && ++ typeof oomTest === 'function') ++{ ++ du.setupTraceLogger({ ++ Scripts: true ++ }) ++ oomTest(() => function(){}); ++} +diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp +index 93e2fda..09049d6 100644 +--- a/js/src/jit/Ion.cpp ++++ b/js/src/jit/Ion.cpp +@@ -1055,6 +1055,8 @@ IonScript::Destroy(FreeOp* fop, IonScript* script) + + script->destroyCaches(); + script->unlinkFromRuntime(fop); ++ // Frees the potential event we have set. ++ script->traceLoggerScriptEvent_ = TraceLoggerEvent(); + fop->free_(script); + } + +diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp +index 26262fd..af7f313 100644 +--- a/js/src/vm/Debugger.cpp ++++ b/js/src/vm/Debugger.cpp +@@ -369,10 +369,10 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg) + objects(cx), + environments(cx), + #ifdef NIGHTLY_BUILD +- traceLoggerLastDrainedId(0), ++ traceLoggerLastDrainedSize(0), + traceLoggerLastDrainedIteration(0), + #endif +- traceLoggerScriptedCallsLastDrainedId(0), ++ traceLoggerScriptedCallsLastDrainedSize(0), + traceLoggerScriptedCallsLastDrainedIteration(0) + { + assertSameCompartment(cx, dbg); +@@ -3907,9 +3907,9 @@ Debugger::drainTraceLogger(JSContext* cx, unsigned argc, Value* vp) + size_t num; + TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); + bool lostEvents = logger->lostEvents(dbg->traceLoggerLastDrainedIteration, +- dbg->traceLoggerLastDrainedId); ++ dbg->traceLoggerLastDrainedSize); + EventEntry* events = logger->getEventsStartingAt(&dbg->traceLoggerLastDrainedIteration, +- &dbg->traceLoggerLastDrainedId, ++ &dbg->traceLoggerLastDrainedSize, + &num); + + RootedObject array(cx, NewDenseEmptyArray(cx)); +@@ -4002,10 +4002,10 @@ Debugger::drainTraceLoggerScriptCalls(JSContext* cx, unsigned argc, Value* vp) + size_t num; + TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); + bool lostEvents = logger->lostEvents(dbg->traceLoggerScriptedCallsLastDrainedIteration, +- dbg->traceLoggerScriptedCallsLastDrainedId); ++ dbg->traceLoggerScriptedCallsLastDrainedSize); + EventEntry* events = logger->getEventsStartingAt( + &dbg->traceLoggerScriptedCallsLastDrainedIteration, +- &dbg->traceLoggerScriptedCallsLastDrainedId, ++ &dbg->traceLoggerScriptedCallsLastDrainedSize, + &num); + + RootedObject array(cx, NewDenseEmptyArray(cx)); +diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h +index 8cac36a..c92d685 100644 +--- a/js/src/vm/Debugger.h ++++ b/js/src/vm/Debugger.h +@@ -314,10 +314,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger> + * lost events. + */ + #ifdef NIGHTLY_BUILD +- uint32_t traceLoggerLastDrainedId; ++ uint32_t traceLoggerLastDrainedSize; + uint32_t traceLoggerLastDrainedIteration; + #endif +- uint32_t traceLoggerScriptedCallsLastDrainedId; ++ uint32_t traceLoggerScriptedCallsLastDrainedSize; + uint32_t traceLoggerScriptedCallsLastDrainedIteration; + + class FrameRange; +diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp +index 6715b36..9766a6f 100644 +--- a/js/src/vm/TraceLogging.cpp ++++ b/js/src/vm/TraceLogging.cpp +@@ -131,7 +131,7 @@ TraceLoggerThread::init() + { + if (!pointerMap.init()) + return false; +- if (!extraTextId.init()) ++ if (!textIdPayloads.init()) + return false; + if (!events.init()) + return false; +@@ -185,10 +185,10 @@ TraceLoggerThread::~TraceLoggerThread() + graph = nullptr; + } + +- for (TextIdHashMap::Range r = extraTextId.all(); !r.empty(); r.popFront()) +- js_delete(r.front().value()); +- extraTextId.finish(); +- pointerMap.finish(); ++ if (textIdPayloads.initialized()) { ++ for (TextIdHashMap::Range r = textIdPayloads.all(); !r.empty(); r.popFront()) ++ js_delete(r.front().value()); ++ } + } + + bool +@@ -287,7 +287,7 @@ TraceLoggerThread::eventText(uint32_t id) + if (id < TraceLogger_Last) + return TLTextIdString(static_cast<TraceLoggerTextId>(id)); + +- TextIdHashMap::Ptr p = extraTextId.lookup(id); ++ TextIdHashMap::Ptr p = textIdPayloads.lookup(id); + MOZ_ASSERT(p); + + return p->value()->string(); +@@ -341,13 +341,15 @@ TraceLoggerThread::extractScriptDetails(uint32_t textId, const char** filename, + TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId textId) + { +- TextIdHashMap::AddPtr p = extraTextId.lookupForAdd(textId); +- if (p) ++ TextIdHashMap::AddPtr p = textIdPayloads.lookupForAdd(textId); ++ if (p) { ++ MOZ_ASSERT(p->value()->textId() == textId); // Sanity check. + return p->value(); ++ } + + TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, (char*)nullptr); + +- if (!extraTextId.add(p, textId, payload)) ++ if (!textIdPayloads.add(p, textId, payload)) + return nullptr; + + return payload; +@@ -357,8 +359,10 @@ TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(const char* text) + { + PointerHashMap::AddPtr p = pointerMap.lookupForAdd((const void*)text); +- if (p) ++ if (p) { ++ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. + return p->value(); ++ } + + size_t len = strlen(text); + char* str = js_pod_malloc<char>(len + 1); +@@ -369,7 +373,7 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) + MOZ_ASSERT(ret == len); + MOZ_ASSERT(strlen(str) == len); + +- uint32_t textId = extraTextId.count() + TraceLogger_Last; ++ uint32_t textId = nextTextId; + + TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); + if (!payload) { +@@ -377,17 +381,19 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) + return nullptr; + } + +- if (!extraTextId.putNew(textId, payload)) { ++ if (!textIdPayloads.putNew(textId, payload)) { + js_delete(payload); + return nullptr; + } + +- if (!pointerMap.add(p, text, payload)) +- return nullptr; +- + if (graph.get()) + graph->addTextId(textId, str); + ++ nextTextId++; ++ ++ if (!pointerMap.add(p, text, payload)) ++ return nullptr; ++ + return payload; + } + +@@ -407,9 +413,14 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f + if (!traceLoggerState->isTextIdEnabled(type)) + return getOrCreateEventPayload(type); + +- PointerHashMap::AddPtr p = pointerMap.lookupForAdd(ptr); +- if (p) +- return p->value(); ++ PointerHashMap::AddPtr p; ++ if (ptr) { ++ p = pointerMap.lookupForAdd(ptr); ++ if (p) { ++ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. ++ return p->value(); ++ } ++ } + + // Compute the length of the string to create. + size_t lenFilename = strlen(filename); +@@ -428,24 +439,28 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f + MOZ_ASSERT(ret == len); + MOZ_ASSERT(strlen(str) == len); + +- uint32_t textId = extraTextId.count() + TraceLogger_Last; ++ uint32_t textId = nextTextId; + TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); + if (!payload) { + js_free(str); + return nullptr; + } + +- if (!extraTextId.putNew(textId, payload)) { ++ if (!textIdPayloads.putNew(textId, payload)) { + js_delete(payload); + return nullptr; + } + +- if (!pointerMap.add(p, ptr, payload)) +- return nullptr; +- + if (graph.get()) + graph->addTextId(textId, str); + ++ nextTextId++; ++ ++ if (ptr) { ++ if (!pointerMap.add(p, ptr, payload)) ++ return nullptr; ++ } ++ + return payload; + } + +@@ -453,14 +468,14 @@ TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, JSScript* script) + { + return getOrCreateEventPayload(type, script->filename(), script->lineno(), script->column(), +- script); ++ nullptr); + } + + TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, + const JS::ReadOnlyCompileOptions& script) + { +- return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, &script); ++ return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, nullptr); + } + + void +@@ -485,7 +500,7 @@ TraceLoggerThread::startEvent(uint32_t id) + if (!traceLoggerState->isTextIdEnabled(id)) + return; + +- logTimestamp(id); ++ log(id); + } + + void +@@ -510,7 +525,7 @@ TraceLoggerThread::stopEvent(uint32_t id) + if (!traceLoggerState->isTextIdEnabled(id)) + return; + +- logTimestamp(TraceLogger_Stop); ++ log(TraceLogger_Stop); + } + + void +@@ -522,23 +537,57 @@ TraceLoggerThread::logTimestamp(TraceLoggerTextId id) + void + TraceLoggerThread::logTimestamp(uint32_t id) + { ++ MOZ_ASSERT(id > TraceLogger_LastTreeItem && id < TraceLogger_Last); ++ log(id); ++} ++ ++void ++TraceLoggerThread::log(uint32_t id) ++{ + if (enabled == 0) + return; + + MOZ_ASSERT(traceLoggerState); +- if (!events.ensureSpaceBeforeAdd()) { ++ ++ // We request for 3 items to add, since if we don't have enough room ++ // we record the time it took to make more place. To log this information ++ // we need 2 extra free entries. ++ if (!events.hasSpaceForAdd(3)) { + uint64_t start = rdtsc() - traceLoggerState->startupTime; + +- if (graph.get()) +- graph->log(events); ++ if (!events.ensureSpaceBeforeAdd(3)) { ++ if (graph.get()) ++ graph->log(events); ++ ++ iteration_++; ++ events.clear(); ++ ++ // Remove the item in the pointerMap for which the payloads ++ // have no uses anymore ++ for (PointerHashMap::Enum e(pointerMap); !e.empty(); e.popFront()) { ++ if (e.front().value()->uses() != 0) ++ continue; ++ ++ TextIdHashMap::Ptr p = textIdPayloads.lookup(e.front().value()->textId()); ++ MOZ_ASSERT(p); ++ textIdPayloads.remove(p); ++ ++ e.removeFront(); ++ } + +- iteration_++; +- events.clear(); ++ // Free all payloads that have no uses anymore. ++ for (TextIdHashMap::Enum e(textIdPayloads); !e.empty(); e.popFront()) { ++ if (e.front().value()->uses() == 0) { ++ js_delete(e.front().value()); ++ e.removeFront(); ++ } ++ } ++ } + + // Log the time it took to flush the events as being from the + // Tracelogger. + if (graph.get()) { +- MOZ_ASSERT(events.capacity() > 2); ++ MOZ_ASSERT(events.hasSpaceForAdd(2)); + EventEntry& entryStart = events.pushUninitialized(); + entryStart.time = start; + entryStart.textId = TraceLogger_Internal; +@@ -548,13 +597,6 @@ TraceLoggerThread::logTimestamp(uint32_t id) + entryStop.textId = TraceLogger_Stop; + } + +- // Free all TextEvents that have no uses anymore. +- for (TextIdHashMap::Enum e(extraTextId); !e.empty(); e.popFront()) { +- if (e.front().value()->uses() == 0) { +- js_delete(e.front().value()); +- e.removeFront(); +- } +- } + } + + uint64_t time = rdtsc() - traceLoggerState->startupTime; +@@ -956,3 +998,16 @@ TraceLoggerEvent::~TraceLoggerEvent() + if (payload_) + payload_->release(); + } ++ ++TraceLoggerEvent& ++TraceLoggerEvent::operator=(const TraceLoggerEvent& other) ++{ ++ if (hasPayload()) ++ payload()->release(); ++ if (other.hasPayload()) ++ other.payload()->use(); ++ ++ payload_ = other.payload_; ++ ++ return *this; ++} +diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h +index a124dcb..91a1eb0 100644 +--- a/js/src/vm/TraceLogging.h ++++ b/js/src/vm/TraceLogging.h +@@ -110,6 +110,9 @@ class TraceLoggerEvent { + bool hasPayload() const { + return !!payload_; + } ++ ++ TraceLoggerEvent& operator=(const TraceLoggerEvent& other); ++ TraceLoggerEvent(const TraceLoggerEvent& event) = delete; + }; + + /** +@@ -130,6 +133,10 @@ class TraceLoggerEventPayload { + uses_(0) + { } + ++ ~TraceLoggerEventPayload() { ++ MOZ_ASSERT(uses_ == 0); ++ } ++ + uint32_t textId() { + return textId_; + } +@@ -166,7 +173,8 @@ class TraceLoggerThread + mozilla::UniquePtr<TraceLoggerGraph> graph; + + PointerHashMap pointerMap; +- TextIdHashMap extraTextId; ++ TextIdHashMap textIdPayloads; ++ uint32_t nextTextId; + + ContinuousSpace<EventEntry> events; + +@@ -181,6 +189,7 @@ class TraceLoggerThread + : enabled(0), + failed(false), + graph(), ++ nextTextId(TraceLogger_Last), + iteration_(0), + top(nullptr) + { } +@@ -195,22 +204,22 @@ class TraceLoggerThread + bool enable(JSContext* cx); + bool disable(); + +- // Given the previous iteration and lastEntryId, return an array of events ++ // Given the previous iteration and size, return an array of events + // (there could be lost events). At the same time update the iteration and +- // lastEntry and gives back how many events there are. +- EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastEntryId, size_t* num) { ++ // size and gives back how many events there are. ++ EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastSize, size_t* num) { + EventEntry* start; + if (iteration_ == *lastIteration) { +- MOZ_ASSERT(events.lastEntryId() >= *lastEntryId); +- *num = events.lastEntryId() - *lastEntryId; +- start = events.data() + *lastEntryId + 1; ++ MOZ_ASSERT(*lastSize <= events.size()); ++ *num = events.size() - *lastSize; ++ start = events.data() + *lastSize; + } else { +- *num = events.lastEntryId() + 1; ++ *num = events.size(); + start = events.data(); + } + + *lastIteration = iteration_; +- *lastEntryId = events.lastEntryId(); ++ *lastSize = events.size(); + return start; + } + +@@ -220,16 +229,16 @@ class TraceLoggerThread + const char** lineno, size_t* lineno_len, const char** colno, + size_t* colno_len); + +- bool lostEvents(uint32_t lastIteration, uint32_t lastEntryId) { ++ bool lostEvents(uint32_t lastIteration, uint32_t lastSize) { + // If still logging in the same iteration, there are no lost events. + if (lastIteration == iteration_) { +- MOZ_ASSERT(lastEntryId <= events.lastEntryId()); ++ MOZ_ASSERT(lastSize <= events.size()); + return false; + } + +- // When proceeded to the next iteration and lastEntryId points to +- // the maximum capacity there are no logs that are lost. +- if (lastIteration + 1 == iteration_ && lastEntryId == events.capacity()) ++ // If we are in a consecutive iteration we are only sure we didn't lose any events, ++ // when the lastSize equals the maximum size 'events' can get. ++ if (lastIteration == iteration_ - 1 && lastSize == events.maxSize()) + return false; + + return true; +@@ -268,6 +277,7 @@ class TraceLoggerThread + void stopEvent(uint32_t id); + private: + void stopEvent(); ++ void log(uint32_t id); + + public: + static unsigned offsetOfEnabled() { +diff --git a/js/src/vm/TraceLoggingGraph.cpp b/js/src/vm/TraceLoggingGraph.cpp +index d1b7f2e..a4eb273 100644 +--- a/js/src/vm/TraceLoggingGraph.cpp ++++ b/js/src/vm/TraceLoggingGraph.cpp +@@ -276,7 +276,7 @@ TraceLoggerGraph::flush() + if (bytesWritten < tree.size()) + return false; + +- treeOffset += tree.lastEntryId(); ++ treeOffset += tree.size(); + tree.clear(); + } + +@@ -359,7 +359,7 @@ TraceLoggerGraph::startEventInternal(uint32_t id, uint64_t timestamp) + + if (parent.lastChildId() == 0) { + MOZ_ASSERT(!entry.hasChildren()); +- MOZ_ASSERT(parent.treeId() == tree.lastEntryId() + treeOffset); ++ MOZ_ASSERT(parent.treeId() == treeOffset + tree.size() - 1); + + if (!updateHasChildren(parent.treeId())) + return false; +diff --git a/js/src/vm/TraceLoggingTypes.h b/js/src/vm/TraceLoggingTypes.h +index f1c9d0c..10b76d6 100644 +--- a/js/src/vm/TraceLoggingTypes.h ++++ b/js/src/vm/TraceLoggingTypes.h +@@ -21,7 +21,6 @@ + _(Internal) \ + _(Interpreter) \ + _(InlinedScripts) \ +- _(Invalidation) \ + _(IonCompilation) \ + _(IonCompilationPaused) \ + _(IonLinking) \ +@@ -60,6 +59,7 @@ + + #define TRACELOGGER_LOG_ITEMS(_) \ + _(Bailout) \ ++ _(Invalidation) \ + _(Disable) \ + _(Enable) \ + _(Stop) +@@ -130,6 +130,9 @@ class ContinuousSpace { + uint32_t size_; + uint32_t capacity_; + ++ // The maximum amount of ram memory a continuous space structure can take (in bytes). ++ static const uint32_t LIMIT = 200 * 1024 * 1024; ++ + public: + ContinuousSpace () + : data_(nullptr) +@@ -151,6 +154,10 @@ class ContinuousSpace { + data_ = nullptr; + } + ++ static uint32_t maxSize() { ++ return LIMIT / sizeof(T); ++ } ++ + T* data() { + return data_; + } +@@ -187,11 +194,14 @@ class ContinuousSpace { + if (hasSpaceForAdd(count)) + return true; + ++ // Limit the size of a continuous buffer. ++ if (size_ + count > maxSize()) ++ return false; ++ + uint32_t nCapacity = capacity_ * 2; +- if (size_ + count > nCapacity) +- nCapacity = size_ + count; +- T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); ++ nCapacity = (nCapacity < maxSize()) ? nCapacity : maxSize(); + ++ T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); + if (!entries) + return false; + Deleted: extra-i686/mozjs38-install-name.patch =================================================================== --- extra-i686/mozjs38-install-name.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-install-name.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,11 +0,0 @@ ---- a/config/rules.mk 2016-11-09 23:51:17.000000000 -0800 -+++ b/config/rules.mk 2016-11-09 23:54:23.000000000 -0800 -@@ -393,7 +393,7 @@ - ifdef IS_COMPONENT - EXTRA_DSO_LDOPTS += -bundle - else --EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module -+EXTRA_DSO_LDOPTS += -dynamiclib -install_name $(abspath $(prefix))/lib/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module - endif - endif - endif Copied: js38/repos/extra-i686/mozjs38-install-name.patch (from rev 292611, js38/trunk/mozjs38-install-name.patch) =================================================================== --- extra-i686/mozjs38-install-name.patch (rev 0) +++ extra-i686/mozjs38-install-name.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,11 @@ +--- a/config/rules.mk 2016-11-09 23:51:17.000000000 -0800 ++++ b/config/rules.mk 2016-11-09 23:54:23.000000000 -0800 +@@ -393,7 +393,7 @@ + ifdef IS_COMPONENT + EXTRA_DSO_LDOPTS += -bundle + else +-EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module ++EXTRA_DSO_LDOPTS += -dynamiclib -install_name $(abspath $(prefix))/lib/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module + endif + endif + endif Deleted: extra-i686/mozjs38-pkg-config-version.patch =================================================================== --- extra-i686/mozjs38-pkg-config-version.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-pkg-config-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,22 +0,0 @@ -Add major version to pkg-config filename. -Author: Rico Tzschichholz <ric...@ubuntu.com> -Forwarded: no -Last-Update: 2015-05-04 - -Index: b/js/src/Makefile.in -=================================================================== ---- a/js/src/Makefile.in -+++ b/js/src/Makefile.in -@@ -214,10 +214,10 @@ - $(JS_CONFIG_NAME): js-config - cp $^ $@ - --$(LIBRARY_NAME).pc: js.pc -+$(JS_LIBRARY_NAME).pc: js.pc - cp $^ $@ - --install:: $(LIBRARY_NAME).pc -+install:: $(JS_LIBRARY_NAME).pc - $(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig - - install:: js-config.h Copied: js38/repos/extra-i686/mozjs38-pkg-config-version.patch (from rev 292611, js38/trunk/mozjs38-pkg-config-version.patch) =================================================================== --- extra-i686/mozjs38-pkg-config-version.patch (rev 0) +++ extra-i686/mozjs38-pkg-config-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,22 @@ +Add major version to pkg-config filename. +Author: Rico Tzschichholz <ric...@ubuntu.com> +Forwarded: no +Last-Update: 2015-05-04 + +Index: b/js/src/Makefile.in +=================================================================== +--- a/js/src/Makefile.in ++++ b/js/src/Makefile.in +@@ -214,10 +214,10 @@ + $(JS_CONFIG_NAME): js-config + cp $^ $@ + +-$(LIBRARY_NAME).pc: js.pc ++$(JS_LIBRARY_NAME).pc: js.pc + cp $^ $@ + +-install:: $(LIBRARY_NAME).pc ++install:: $(JS_LIBRARY_NAME).pc + $(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig + + install:: js-config.h Deleted: extra-i686/mozjs38-shell-version.patch =================================================================== --- extra-i686/mozjs38-shell-version.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-i686/mozjs38-shell-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,65 +0,0 @@ -# HG changeset patch -# Parent 4732a0e5d22bc7e5c1f1ace7a182d537d9cc2c6a -Add major version to shell and js-config filenames. -Author: Rico Tzschichholz <ric...@ubuntu.com> -Forwarded: no -Last-Update: 2014-10-29 - ---- -diff --git a/js/src/configure b/js/src/configure ---- a/js/src/configure -+++ b/js/src/configure -@@ -1696,8 +1696,13 @@ - MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` - IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` - -+if test -n "$JS_STANDALONE"; then -+JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION -+JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config -+else - JS_SHELL_NAME=js - JS_CONFIG_NAME=js-config -+fi - - - if test -n "$IS_ALPHA"; then - -diff --git a/js/src/configure.in b/js/src/configure.in ---- a/js/src/configure.in -+++ b/js/src/configure.in -@@ -234,16 +234,13 @@ MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSI - MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` - IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` - --dnl XXX in a temporary bid to avoid developer anger at renaming files --dnl XXX before "js" symlinks exist, don't change names. --dnl --dnl if test -n "$JS_STANDALONE"; then --dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION --dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config --dnl else -+if test -n "$JS_STANDALONE"; then -+JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION -+JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config -+else - JS_SHELL_NAME=js - JS_CONFIG_NAME=js-config --dnl fi -+fi - - changequote([,]) - if test -n "$IS_ALPHA"; then - -diff -r 80a9e64d75f5 js/src/Makefile.in ---- a/js/src/Makefile.in Wed Jun 25 15:11:42 2014 +0200 -+++ b/js/src/Makefile.in Sat Jul 05 14:08:38 2014 +0200 -@@ -273,6 +273,9 @@ - SCRIPTS = $(JS_CONFIG_NAME) - SDK_BINARY = $(JS_CONFIG_NAME) - -+$(JS_CONFIG_NAME): js-config -+ cp $^ $@ -+ - $(LIBRARY_NAME).pc: js.pc - cp $^ $@ - Copied: js38/repos/extra-i686/mozjs38-shell-version.patch (from rev 292611, js38/trunk/mozjs38-shell-version.patch) =================================================================== --- extra-i686/mozjs38-shell-version.patch (rev 0) +++ extra-i686/mozjs38-shell-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,65 @@ +# HG changeset patch +# Parent 4732a0e5d22bc7e5c1f1ace7a182d537d9cc2c6a +Add major version to shell and js-config filenames. +Author: Rico Tzschichholz <ric...@ubuntu.com> +Forwarded: no +Last-Update: 2014-10-29 + +--- +diff --git a/js/src/configure b/js/src/configure +--- a/js/src/configure ++++ b/js/src/configure +@@ -1696,8 +1696,13 @@ + MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` + IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` + ++if test -n "$JS_STANDALONE"; then ++JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION ++JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config ++else + JS_SHELL_NAME=js + JS_CONFIG_NAME=js-config ++fi + + + if test -n "$IS_ALPHA"; then + +diff --git a/js/src/configure.in b/js/src/configure.in +--- a/js/src/configure.in ++++ b/js/src/configure.in +@@ -234,16 +234,13 @@ MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSI + MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` + IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` + +-dnl XXX in a temporary bid to avoid developer anger at renaming files +-dnl XXX before "js" symlinks exist, don't change names. +-dnl +-dnl if test -n "$JS_STANDALONE"; then +-dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION +-dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config +-dnl else ++if test -n "$JS_STANDALONE"; then ++JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION ++JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config ++else + JS_SHELL_NAME=js + JS_CONFIG_NAME=js-config +-dnl fi ++fi + + changequote([,]) + if test -n "$IS_ALPHA"; then + +diff -r 80a9e64d75f5 js/src/Makefile.in +--- a/js/src/Makefile.in Wed Jun 25 15:11:42 2014 +0200 ++++ b/js/src/Makefile.in Sat Jul 05 14:08:38 2014 +0200 +@@ -273,6 +273,9 @@ + SCRIPTS = $(JS_CONFIG_NAME) + SDK_BINARY = $(JS_CONFIG_NAME) + ++$(JS_CONFIG_NAME): js-config ++ cp $^ $@ ++ + $(LIBRARY_NAME).pc: js.pc + cp $^ $@ + Deleted: extra-x86_64/PKGBUILD =================================================================== --- extra-x86_64/PKGBUILD 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/PKGBUILD 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,66 +0,0 @@ -# $Id: PKGBUILD 280035 2016-11-07 16:57:54Z foutrelis $ -# Maintainer: Ionut Biru <ib...@archlinux.org> - -pkgname=js38 -pkgver=38.0.0 -pkgrel=1 -pkgdesc="JavaScript interpreter and libraries - Version 38" -arch=(i686 x86_64) -url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/38" -license=(MPL) -depends=(nspr gcc-libs readline zlib icu) -makedepends=(python2 libffi zip) -options=(!staticlibs) -source=(https://people.mozilla.org/~sstangl/mozjs-38.2.1.rc0.tar.bz2 - mozjs38-fix-tracelogger.patch - mozjs38-shell-version.patch - mozjs38-pkg-config-version.patch - mozjs38-install-name.patch - mozjs38-copy-headers.patch - mozjs38-add-bracket.patch - mozjs38-1269317.patch) -sha256sums=('01994c758174bc173bcf4960f05ecb4da21014f09641a63b2952bbf9eeaa8b5c' - '55e656c41583cd4e5468cb4b93c0f57f40f2817adcc1acf9333b4b248969983d' - '16b00caf68c23d7b484b42b523ca49465853fee5161b34520cb93fc89bf16903' - 'fcdc86524d3abb89244310bded9e994833b1ecad2cb181821cbb523e2c1b567a' - '56d1336f0bfa9b1d1a19313f3cdece317bf6a169c7369ecdc068e7ab99d16d9e' - 'd052a19e7d33023e927c83fda5dcf7a90127934df034969011960b3b8e6930ed' - '3d3a53949da5d1da201548d9de41c99c1ff6d52e1ac7bc047e2c96e6c5f9e3a7' - 'e34338b3bfb1a16c3f98b73007b914560085d54ba94d56cb1b8586330cbef506') - -prepare() { - cd mozjs-$pkgver - - patch -Np1 -i ../mozjs38-fix-tracelogger.patch - patch -Np1 -i ../mozjs38-shell-version.patch - patch -Np1 -i ../mozjs38-pkg-config-version.patch - patch -Np1 -i ../mozjs38-install-name.patch - patch -Np1 -i ../mozjs38-copy-headers.patch - patch -Np1 -i ../mozjs38-add-bracket.patch - patch -Np1 -i ../mozjs38-1269317.patch -} - -build() { - unset CPPFLAGS - CXXFLAGS+=' -fno-delete-null-pointer-checks' - export PYTHON=/usr/bin/python2 - cd mozjs-$pkgver/js/src - ./configure --prefix=/usr --with-system-nspr --enable-system-ffi \ - --with-system-zlib --with-system-icu --with-intl-api - make -} - -check() { - cd mozjs-$pkgver/js/src - # Disabled: test suite fails because it is broken. - #make -j1 check -} - -package() { - cd mozjs-$pkgver/js/src - make DESTDIR="$pkgdir" install - rm -f "$pkgdir"/usr/lib/*.ajs - find "$pkgdir"/usr/{lib/pkgconfig,include} -type f -exec chmod -x {} + -} - -# vim:set ts=2 sw=2 et: Copied: js38/repos/extra-x86_64/PKGBUILD (from rev 292611, js38/trunk/PKGBUILD) =================================================================== --- extra-x86_64/PKGBUILD (rev 0) +++ extra-x86_64/PKGBUILD 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,69 @@ +# $Id: PKGBUILD 280035 2016-11-07 16:57:54Z foutrelis $ +# Maintainer: Ionut Biru <ib...@archlinux.org> + +pkgname=js38 +pkgver=38.8.0 +pkgrel=2 +pkgdesc="JavaScript interpreter and libraries - Version 38" +arch=(i686 x86_64) +url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/38" +license=(MPL) +depends=(nspr gcc-libs readline zlib icu libffi) +makedepends=(python2 libffi zip) +options=(!staticlibs) +source=(https://ftp.mozilla.org/pub/firefox/releases/${pkgver}esr/source/firefox-${pkgver}esr.source.tar.bz2 + mozjs38-fix-tracelogger.patch + mozjs38-shell-version.patch + mozjs38-pkg-config-version.patch + mozjs38-install-name.patch + mozjs38-copy-headers.patch + mozjs38-add-bracket.patch + mozjs38-1269317.patch) +sha256sums=('9475adcee29d590383c4885bc5f958093791d1db4302d694a5d2766698f59982' + '55e656c41583cd4e5468cb4b93c0f57f40f2817adcc1acf9333b4b248969983d' + '16b00caf68c23d7b484b42b523ca49465853fee5161b34520cb93fc89bf16903' + 'fcdc86524d3abb89244310bded9e994833b1ecad2cb181821cbb523e2c1b567a' + '56d1336f0bfa9b1d1a19313f3cdece317bf6a169c7369ecdc068e7ab99d16d9e' + 'd052a19e7d33023e927c83fda5dcf7a90127934df034969011960b3b8e6930ed' + '3d3a53949da5d1da201548d9de41c99c1ff6d52e1ac7bc047e2c96e6c5f9e3a7' + 'e34338b3bfb1a16c3f98b73007b914560085d54ba94d56cb1b8586330cbef506') + +prepare() { + cd mozilla-esr38 + + patch -Np1 -i ../mozjs38-fix-tracelogger.patch + patch -Np1 -i ../mozjs38-shell-version.patch + patch -Np1 -i ../mozjs38-pkg-config-version.patch + patch -Np1 -i ../mozjs38-install-name.patch + patch -Np1 -i ../mozjs38-copy-headers.patch + patch -Np1 -i ../mozjs38-add-bracket.patch + patch -Np1 -i ../mozjs38-1269317.patch +} + +build() { + unset CPPFLAGS + CXXFLAGS+=' -fno-delete-null-pointer-checks -fpermissive -fno-tree-vrp -fno-strict-aliasing' + CFLAGS+=' -fno-delete-null-pointer-checks -fpermissive -fno-tree-vrp -fno-strict-aliasing' + export PYTHON=/usr/bin/python2 + cd mozilla-esr38/js/src + ./configure --prefix=/usr --with-system-nspr --enable-system-ffi \ + --with-system-zlib --with-system-icu --with-intl-api --enable-ctypes \ + --enable-threadsafe --enable-system-ffi --enable-shared-js --enable-gcgenerational --disable-optimize --enable-pie + make +} + +check() { + cd mozilla-esr38/js/src + # Disabled: test suite fails because it is broken. + #make -j1 check +} + +package() { + cd mozilla-esr38/js/src + make DESTDIR="$pkgdir" install + rm -f "$pkgdir"/usr/lib/*.ajs + rm -f "$pkgdir"/usr/bin/js38 + find "$pkgdir"/usr/{lib/pkgconfig,include} -type f -exec chmod -x {} + +} + +# vim:set ts=2 sw=2 et: Deleted: extra-x86_64/mozjs38-1269317.patch =================================================================== --- extra-x86_64/mozjs38-1269317.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-1269317.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,122 +0,0 @@ ---- a/js/src/jit/RegisterSets.h 2017-02-10 17:33:06.210702431 -0800 -+++ b/js/src/jit/RegisterSets.h 2017-02-10 17:43:52.877514146 -0800 -@@ -7,7 +7,6 @@ - #ifndef jit_RegisterSets_h - #define jit_RegisterSets_h - --#include "mozilla/Alignment.h" - #include "mozilla/MathAlgorithms.h" - - #include "jit/JitAllocPolicy.h" -@@ -26,8 +25,8 @@ - Code code_; - - public: -- AnyRegister() -- { } -+ AnyRegister() = default; -+ - explicit AnyRegister(Register gpr) { - code_ = gpr.code(); - } -@@ -156,7 +155,7 @@ - } - #endif - -- ValueOperand() {} -+ ValueOperand() = default; - }; - - // Registers to hold either either a typed or untyped value. -@@ -165,46 +164,25 @@ - // Type of value being stored. - MIRType type_; - -- // Space to hold either an AnyRegister or a ValueOperand. - union U { -- mozilla::AlignedStorage2<AnyRegister> typed; -- mozilla::AlignedStorage2<ValueOperand> value; -+ AnyRegister typed; -+ ValueOperand value; - } data; - -- AnyRegister& dataTyped() { -- MOZ_ASSERT(hasTyped()); -- return *data.typed.addr(); -- } -- ValueOperand& dataValue() { -- MOZ_ASSERT(hasValue()); -- return *data.value.addr(); -- } -- -- AnyRegister dataTyped() const { -- MOZ_ASSERT(hasTyped()); -- return *data.typed.addr(); -- } -- const ValueOperand& dataValue() const { -- MOZ_ASSERT(hasValue()); -- return *data.value.addr(); -- } -- - public: - -- TypedOrValueRegister() -- : type_(MIRType_None) -- {} -+ TypedOrValueRegister() = default; - - TypedOrValueRegister(MIRType type, AnyRegister reg) - : type_(type) - { -- dataTyped() = reg; -+ data.typed = reg; - } - - MOZ_IMPLICIT TypedOrValueRegister(ValueOperand value) - : type_(MIRType_Value) - { -- dataValue() = value; -+ data.value = value; - } - - MIRType type() const { -@@ -220,11 +198,13 @@ - } - - AnyRegister typedReg() const { -- return dataTyped(); -+ MOZ_ASSERT(hasTyped()); -+ return data.typed; - } - - ValueOperand valueReg() const { -- return dataValue(); -+ MOZ_ASSERT(hasValue()); -+ return data.value; - } - - AnyRegister scratchReg() { -@@ -240,19 +220,18 @@ - // Whether a constant value is being stored. - bool constant_; - -- // Space to hold either a Value or a TypedOrValueRegister. - union U { -- mozilla::AlignedStorage2<Value> constant; -- mozilla::AlignedStorage2<TypedOrValueRegister> reg; -+ Value constant; -+ TypedOrValueRegister reg; - } data; - - Value& dataValue() { - MOZ_ASSERT(constant()); -- return *data.constant.addr(); -+ return data.constant; - } - TypedOrValueRegister& dataReg() { - MOZ_ASSERT(!constant()); -- return *data.reg.addr(); -+ return data.reg; - } - - public: Copied: js38/repos/extra-x86_64/mozjs38-1269317.patch (from rev 292611, js38/trunk/mozjs38-1269317.patch) =================================================================== --- extra-x86_64/mozjs38-1269317.patch (rev 0) +++ extra-x86_64/mozjs38-1269317.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,122 @@ +--- a/js/src/jit/RegisterSets.h 2017-02-10 17:33:06.210702431 -0800 ++++ b/js/src/jit/RegisterSets.h 2017-02-10 17:43:52.877514146 -0800 +@@ -7,7 +7,6 @@ + #ifndef jit_RegisterSets_h + #define jit_RegisterSets_h + +-#include "mozilla/Alignment.h" + #include "mozilla/MathAlgorithms.h" + + #include "jit/JitAllocPolicy.h" +@@ -26,8 +25,8 @@ + Code code_; + + public: +- AnyRegister() +- { } ++ AnyRegister() = default; ++ + explicit AnyRegister(Register gpr) { + code_ = gpr.code(); + } +@@ -156,7 +155,7 @@ + } + #endif + +- ValueOperand() {} ++ ValueOperand() = default; + }; + + // Registers to hold either either a typed or untyped value. +@@ -165,46 +164,25 @@ + // Type of value being stored. + MIRType type_; + +- // Space to hold either an AnyRegister or a ValueOperand. + union U { +- mozilla::AlignedStorage2<AnyRegister> typed; +- mozilla::AlignedStorage2<ValueOperand> value; ++ AnyRegister typed; ++ ValueOperand value; + } data; + +- AnyRegister& dataTyped() { +- MOZ_ASSERT(hasTyped()); +- return *data.typed.addr(); +- } +- ValueOperand& dataValue() { +- MOZ_ASSERT(hasValue()); +- return *data.value.addr(); +- } +- +- AnyRegister dataTyped() const { +- MOZ_ASSERT(hasTyped()); +- return *data.typed.addr(); +- } +- const ValueOperand& dataValue() const { +- MOZ_ASSERT(hasValue()); +- return *data.value.addr(); +- } +- + public: + +- TypedOrValueRegister() +- : type_(MIRType_None) +- {} ++ TypedOrValueRegister() = default; + + TypedOrValueRegister(MIRType type, AnyRegister reg) + : type_(type) + { +- dataTyped() = reg; ++ data.typed = reg; + } + + MOZ_IMPLICIT TypedOrValueRegister(ValueOperand value) + : type_(MIRType_Value) + { +- dataValue() = value; ++ data.value = value; + } + + MIRType type() const { +@@ -220,11 +198,13 @@ + } + + AnyRegister typedReg() const { +- return dataTyped(); ++ MOZ_ASSERT(hasTyped()); ++ return data.typed; + } + + ValueOperand valueReg() const { +- return dataValue(); ++ MOZ_ASSERT(hasValue()); ++ return data.value; + } + + AnyRegister scratchReg() { +@@ -240,19 +220,18 @@ + // Whether a constant value is being stored. + bool constant_; + +- // Space to hold either a Value or a TypedOrValueRegister. + union U { +- mozilla::AlignedStorage2<Value> constant; +- mozilla::AlignedStorage2<TypedOrValueRegister> reg; ++ Value constant; ++ TypedOrValueRegister reg; + } data; + + Value& dataValue() { + MOZ_ASSERT(constant()); +- return *data.constant.addr(); ++ return data.constant; + } + TypedOrValueRegister& dataReg() { + MOZ_ASSERT(!constant()); +- return *data.reg.addr(); ++ return data.reg; + } + + public: Deleted: extra-x86_64/mozjs38-add-bracket.patch =================================================================== --- extra-x86_64/mozjs38-add-bracket.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-add-bracket.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,16 +0,0 @@ -Add bracket for sed 4.3 compliance - -Based on upstream fix by Daniel Stenberg in 09 jan 2017 -See: https://hg.mozilla.org/mozilla-central/rev/ebcbf47a83e7 - ---- a/js/src/configure 2017-02-21 16:56:42.350105741 -0300 -+++ b/js/src/configure 2017-02-21 17:33:13.183493978 -0300 -@@ -15231,7 +15231,7 @@ - fi - fi - -- version=`sed -n 's/^[:space:]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` -+ version=`sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` - if test x"$version" = x; then - { echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&2; echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&5; exit 1; } - fi Copied: js38/repos/extra-x86_64/mozjs38-add-bracket.patch (from rev 292611, js38/trunk/mozjs38-add-bracket.patch) =================================================================== --- extra-x86_64/mozjs38-add-bracket.patch (rev 0) +++ extra-x86_64/mozjs38-add-bracket.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,16 @@ +Add bracket for sed 4.3 compliance + +Based on upstream fix by Daniel Stenberg in 09 jan 2017 +See: https://hg.mozilla.org/mozilla-central/rev/ebcbf47a83e7 + +--- a/js/src/configure 2017-02-21 16:56:42.350105741 -0300 ++++ b/js/src/configure 2017-02-21 17:33:13.183493978 -0300 +@@ -15231,7 +15231,7 @@ + fi + fi + +- version=`sed -n 's/^[:space:]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` ++ version=`sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` + if test x"$version" = x; then + { echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&2; echo "configure: error: cannot determine icu version number from uvernum.h header file $lineno" 1>&5; exit 1; } + fi Deleted: extra-x86_64/mozjs38-copy-headers.patch =================================================================== --- extra-x86_64/mozjs38-copy-headers.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-copy-headers.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,20 +0,0 @@ -Description: Copy headers on install instead of symlinking -Author: Rico Tzschichholz <ric...@ubuntu.com> -Forwarded: no -Last-Update: 2014-10-29 - ---- - -Index: b/python/mozbuild/mozbuild/backend/recursivemake.py -=================================================================== ---- a/python/mozbuild/mozbuild/backend/recursivemake.py -+++ b/python/mozbuild/mozbuild/backend/recursivemake.py -@@ -796,7 +796,7 @@ - return - - for source, dest, _ in self._walk_hierarchy(obj, exports): -- self._install_manifests['dist_include'].add_symlink(source, dest) -+ self._install_manifests['dist_include'].add_copy(source, dest) - - if not os.path.exists(source): - raise Exception('File listed in EXPORTS does not exist: %s' % source) Copied: js38/repos/extra-x86_64/mozjs38-copy-headers.patch (from rev 292611, js38/trunk/mozjs38-copy-headers.patch) =================================================================== --- extra-x86_64/mozjs38-copy-headers.patch (rev 0) +++ extra-x86_64/mozjs38-copy-headers.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,20 @@ +Description: Copy headers on install instead of symlinking +Author: Rico Tzschichholz <ric...@ubuntu.com> +Forwarded: no +Last-Update: 2014-10-29 + +--- + +Index: b/python/mozbuild/mozbuild/backend/recursivemake.py +=================================================================== +--- a/python/mozbuild/mozbuild/backend/recursivemake.py ++++ b/python/mozbuild/mozbuild/backend/recursivemake.py +@@ -796,7 +796,7 @@ + return + + for source, dest, _ in self._walk_hierarchy(obj, exports): +- self._install_manifests['dist_include'].add_symlink(source, dest) ++ self._install_manifests['dist_include'].add_copy(source, dest) + + if not os.path.exists(source): + raise Exception('File listed in EXPORTS does not exist: %s' % source) Deleted: extra-x86_64/mozjs38-fix-tracelogger.patch =================================================================== --- extra-x86_64/mozjs38-fix-tracelogger.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-fix-tracelogger.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,603 +0,0 @@ -# === Fix the SM38 tracelogger === -# This patch is a squashed version of several patches that were adapted -# to fix failing hunks. -# -# Applied in the following order, they are: -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223767 -# Assertion failure: i < size_, at js/src/vm/TraceLoggingTypes.h:210 -# Also fix stop-information to make reduce.py work correctly. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227914 -# Limit the memory tracelogger can take. -# This causes tracelogger to flush data to the disk regularly and prevents out of -# memory issues if a lot of data gets logged. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1155618 -# Fix tracelogger destructor that touches possibly uninitialised hash table. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223636 -# Don't treat extraTextId as containing only extra ids. -# This fixes an assertion failure: id == nextTextId at js/src/vm/TraceLoggingGraph.cpp -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227028 -# Fix when to keep the payload of a TraceLogger event. -# This fixes an assertion failure: textId < uint32_t(1 << 31) at js/src/vm/TraceLoggingGraph.h -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1266649 -# Handle failing to add to pointermap gracefully. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1280648 -# Don't cache based on pointers to movable GC things. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1224123 -# Fix the use of LastEntryId in tracelogger.h. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1231170 -# Use size in debugger instead of the current id to track last logged item. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1221844 -# Move TraceLogger_Invalidation to LOG_ITEM. -# Add some debug checks to logTimestamp. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1255766 -# Also mark resizing of memory. -# * https://bugzilla.mozilla.org/show_bug.cgi?id=1259403 -# Only increase capacity by multiples of 2. -# Always make sure there are 3 free slots for events. -# === - -diff --git a/js/src/jit-test/tests/tracelogger/bug1231170.js b/js/src/jit-test/tests/tracelogger/bug1231170.js -new file mode 100644 -index 0000000..023e93e ---- /dev/null -+++ b/js/src/jit-test/tests/tracelogger/bug1231170.js -@@ -0,0 +1,3 @@ -+var du = new Debugger(); -+if (typeof du.drainTraceLogger === "function") -+ du.drainTraceLogger(); -diff --git a/js/src/jit-test/tests/tracelogger/bug1266649.js b/js/src/jit-test/tests/tracelogger/bug1266649.js -new file mode 100644 -index 0000000..81ae7ad ---- /dev/null -+++ b/js/src/jit-test/tests/tracelogger/bug1266649.js -@@ -0,0 +1,10 @@ -+ -+var du = new Debugger(); -+if (typeof du.setupTraceLogger === "function" && -+ typeof oomTest === 'function') -+{ -+ du.setupTraceLogger({ -+ Scripts: true -+ }) -+ oomTest(() => function(){}); -+} -diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp -index 93e2fda..09049d6 100644 ---- a/js/src/jit/Ion.cpp -+++ b/js/src/jit/Ion.cpp -@@ -1055,6 +1055,8 @@ IonScript::Destroy(FreeOp* fop, IonScript* script) - - script->destroyCaches(); - script->unlinkFromRuntime(fop); -+ // Frees the potential event we have set. -+ script->traceLoggerScriptEvent_ = TraceLoggerEvent(); - fop->free_(script); - } - -diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp -index 26262fd..af7f313 100644 ---- a/js/src/vm/Debugger.cpp -+++ b/js/src/vm/Debugger.cpp -@@ -369,10 +369,10 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg) - objects(cx), - environments(cx), - #ifdef NIGHTLY_BUILD -- traceLoggerLastDrainedId(0), -+ traceLoggerLastDrainedSize(0), - traceLoggerLastDrainedIteration(0), - #endif -- traceLoggerScriptedCallsLastDrainedId(0), -+ traceLoggerScriptedCallsLastDrainedSize(0), - traceLoggerScriptedCallsLastDrainedIteration(0) - { - assertSameCompartment(cx, dbg); -@@ -3907,9 +3907,9 @@ Debugger::drainTraceLogger(JSContext* cx, unsigned argc, Value* vp) - size_t num; - TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); - bool lostEvents = logger->lostEvents(dbg->traceLoggerLastDrainedIteration, -- dbg->traceLoggerLastDrainedId); -+ dbg->traceLoggerLastDrainedSize); - EventEntry* events = logger->getEventsStartingAt(&dbg->traceLoggerLastDrainedIteration, -- &dbg->traceLoggerLastDrainedId, -+ &dbg->traceLoggerLastDrainedSize, - &num); - - RootedObject array(cx, NewDenseEmptyArray(cx)); -@@ -4002,10 +4002,10 @@ Debugger::drainTraceLoggerScriptCalls(JSContext* cx, unsigned argc, Value* vp) - size_t num; - TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); - bool lostEvents = logger->lostEvents(dbg->traceLoggerScriptedCallsLastDrainedIteration, -- dbg->traceLoggerScriptedCallsLastDrainedId); -+ dbg->traceLoggerScriptedCallsLastDrainedSize); - EventEntry* events = logger->getEventsStartingAt( - &dbg->traceLoggerScriptedCallsLastDrainedIteration, -- &dbg->traceLoggerScriptedCallsLastDrainedId, -+ &dbg->traceLoggerScriptedCallsLastDrainedSize, - &num); - - RootedObject array(cx, NewDenseEmptyArray(cx)); -diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h -index 8cac36a..c92d685 100644 ---- a/js/src/vm/Debugger.h -+++ b/js/src/vm/Debugger.h -@@ -314,10 +314,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger> - * lost events. - */ - #ifdef NIGHTLY_BUILD -- uint32_t traceLoggerLastDrainedId; -+ uint32_t traceLoggerLastDrainedSize; - uint32_t traceLoggerLastDrainedIteration; - #endif -- uint32_t traceLoggerScriptedCallsLastDrainedId; -+ uint32_t traceLoggerScriptedCallsLastDrainedSize; - uint32_t traceLoggerScriptedCallsLastDrainedIteration; - - class FrameRange; -diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp -index 6715b36..9766a6f 100644 ---- a/js/src/vm/TraceLogging.cpp -+++ b/js/src/vm/TraceLogging.cpp -@@ -131,7 +131,7 @@ TraceLoggerThread::init() - { - if (!pointerMap.init()) - return false; -- if (!extraTextId.init()) -+ if (!textIdPayloads.init()) - return false; - if (!events.init()) - return false; -@@ -185,10 +185,10 @@ TraceLoggerThread::~TraceLoggerThread() - graph = nullptr; - } - -- for (TextIdHashMap::Range r = extraTextId.all(); !r.empty(); r.popFront()) -- js_delete(r.front().value()); -- extraTextId.finish(); -- pointerMap.finish(); -+ if (textIdPayloads.initialized()) { -+ for (TextIdHashMap::Range r = textIdPayloads.all(); !r.empty(); r.popFront()) -+ js_delete(r.front().value()); -+ } - } - - bool -@@ -287,7 +287,7 @@ TraceLoggerThread::eventText(uint32_t id) - if (id < TraceLogger_Last) - return TLTextIdString(static_cast<TraceLoggerTextId>(id)); - -- TextIdHashMap::Ptr p = extraTextId.lookup(id); -+ TextIdHashMap::Ptr p = textIdPayloads.lookup(id); - MOZ_ASSERT(p); - - return p->value()->string(); -@@ -341,13 +341,15 @@ TraceLoggerThread::extractScriptDetails(uint32_t textId, const char** filename, - TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId textId) - { -- TextIdHashMap::AddPtr p = extraTextId.lookupForAdd(textId); -- if (p) -+ TextIdHashMap::AddPtr p = textIdPayloads.lookupForAdd(textId); -+ if (p) { -+ MOZ_ASSERT(p->value()->textId() == textId); // Sanity check. - return p->value(); -+ } - - TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, (char*)nullptr); - -- if (!extraTextId.add(p, textId, payload)) -+ if (!textIdPayloads.add(p, textId, payload)) - return nullptr; - - return payload; -@@ -357,8 +359,10 @@ TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(const char* text) - { - PointerHashMap::AddPtr p = pointerMap.lookupForAdd((const void*)text); -- if (p) -+ if (p) { -+ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. - return p->value(); -+ } - - size_t len = strlen(text); - char* str = js_pod_malloc<char>(len + 1); -@@ -369,7 +373,7 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) - MOZ_ASSERT(ret == len); - MOZ_ASSERT(strlen(str) == len); - -- uint32_t textId = extraTextId.count() + TraceLogger_Last; -+ uint32_t textId = nextTextId; - - TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); - if (!payload) { -@@ -377,17 +381,19 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) - return nullptr; - } - -- if (!extraTextId.putNew(textId, payload)) { -+ if (!textIdPayloads.putNew(textId, payload)) { - js_delete(payload); - return nullptr; - } - -- if (!pointerMap.add(p, text, payload)) -- return nullptr; -- - if (graph.get()) - graph->addTextId(textId, str); - -+ nextTextId++; -+ -+ if (!pointerMap.add(p, text, payload)) -+ return nullptr; -+ - return payload; - } - -@@ -407,9 +413,14 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f - if (!traceLoggerState->isTextIdEnabled(type)) - return getOrCreateEventPayload(type); - -- PointerHashMap::AddPtr p = pointerMap.lookupForAdd(ptr); -- if (p) -- return p->value(); -+ PointerHashMap::AddPtr p; -+ if (ptr) { -+ p = pointerMap.lookupForAdd(ptr); -+ if (p) { -+ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. -+ return p->value(); -+ } -+ } - - // Compute the length of the string to create. - size_t lenFilename = strlen(filename); -@@ -428,24 +439,28 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f - MOZ_ASSERT(ret == len); - MOZ_ASSERT(strlen(str) == len); - -- uint32_t textId = extraTextId.count() + TraceLogger_Last; -+ uint32_t textId = nextTextId; - TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); - if (!payload) { - js_free(str); - return nullptr; - } - -- if (!extraTextId.putNew(textId, payload)) { -+ if (!textIdPayloads.putNew(textId, payload)) { - js_delete(payload); - return nullptr; - } - -- if (!pointerMap.add(p, ptr, payload)) -- return nullptr; -- - if (graph.get()) - graph->addTextId(textId, str); - -+ nextTextId++; -+ -+ if (ptr) { -+ if (!pointerMap.add(p, ptr, payload)) -+ return nullptr; -+ } -+ - return payload; - } - -@@ -453,14 +468,14 @@ TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, JSScript* script) - { - return getOrCreateEventPayload(type, script->filename(), script->lineno(), script->column(), -- script); -+ nullptr); - } - - TraceLoggerEventPayload* - TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, - const JS::ReadOnlyCompileOptions& script) - { -- return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, &script); -+ return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, nullptr); - } - - void -@@ -485,7 +500,7 @@ TraceLoggerThread::startEvent(uint32_t id) - if (!traceLoggerState->isTextIdEnabled(id)) - return; - -- logTimestamp(id); -+ log(id); - } - - void -@@ -510,7 +525,7 @@ TraceLoggerThread::stopEvent(uint32_t id) - if (!traceLoggerState->isTextIdEnabled(id)) - return; - -- logTimestamp(TraceLogger_Stop); -+ log(TraceLogger_Stop); - } - - void -@@ -522,23 +537,57 @@ TraceLoggerThread::logTimestamp(TraceLoggerTextId id) - void - TraceLoggerThread::logTimestamp(uint32_t id) - { -+ MOZ_ASSERT(id > TraceLogger_LastTreeItem && id < TraceLogger_Last); -+ log(id); -+} -+ -+void -+TraceLoggerThread::log(uint32_t id) -+{ - if (enabled == 0) - return; - - MOZ_ASSERT(traceLoggerState); -- if (!events.ensureSpaceBeforeAdd()) { -+ -+ // We request for 3 items to add, since if we don't have enough room -+ // we record the time it took to make more place. To log this information -+ // we need 2 extra free entries. -+ if (!events.hasSpaceForAdd(3)) { - uint64_t start = rdtsc() - traceLoggerState->startupTime; - -- if (graph.get()) -- graph->log(events); -+ if (!events.ensureSpaceBeforeAdd(3)) { -+ if (graph.get()) -+ graph->log(events); -+ -+ iteration_++; -+ events.clear(); -+ -+ // Remove the item in the pointerMap for which the payloads -+ // have no uses anymore -+ for (PointerHashMap::Enum e(pointerMap); !e.empty(); e.popFront()) { -+ if (e.front().value()->uses() != 0) -+ continue; -+ -+ TextIdHashMap::Ptr p = textIdPayloads.lookup(e.front().value()->textId()); -+ MOZ_ASSERT(p); -+ textIdPayloads.remove(p); -+ -+ e.removeFront(); -+ } - -- iteration_++; -- events.clear(); -+ // Free all payloads that have no uses anymore. -+ for (TextIdHashMap::Enum e(textIdPayloads); !e.empty(); e.popFront()) { -+ if (e.front().value()->uses() == 0) { -+ js_delete(e.front().value()); -+ e.removeFront(); -+ } -+ } -+ } - - // Log the time it took to flush the events as being from the - // Tracelogger. - if (graph.get()) { -- MOZ_ASSERT(events.capacity() > 2); -+ MOZ_ASSERT(events.hasSpaceForAdd(2)); - EventEntry& entryStart = events.pushUninitialized(); - entryStart.time = start; - entryStart.textId = TraceLogger_Internal; -@@ -548,13 +597,6 @@ TraceLoggerThread::logTimestamp(uint32_t id) - entryStop.textId = TraceLogger_Stop; - } - -- // Free all TextEvents that have no uses anymore. -- for (TextIdHashMap::Enum e(extraTextId); !e.empty(); e.popFront()) { -- if (e.front().value()->uses() == 0) { -- js_delete(e.front().value()); -- e.removeFront(); -- } -- } - } - - uint64_t time = rdtsc() - traceLoggerState->startupTime; -@@ -956,3 +998,16 @@ TraceLoggerEvent::~TraceLoggerEvent() - if (payload_) - payload_->release(); - } -+ -+TraceLoggerEvent& -+TraceLoggerEvent::operator=(const TraceLoggerEvent& other) -+{ -+ if (hasPayload()) -+ payload()->release(); -+ if (other.hasPayload()) -+ other.payload()->use(); -+ -+ payload_ = other.payload_; -+ -+ return *this; -+} -diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h -index a124dcb..91a1eb0 100644 ---- a/js/src/vm/TraceLogging.h -+++ b/js/src/vm/TraceLogging.h -@@ -110,6 +110,9 @@ class TraceLoggerEvent { - bool hasPayload() const { - return !!payload_; - } -+ -+ TraceLoggerEvent& operator=(const TraceLoggerEvent& other); -+ TraceLoggerEvent(const TraceLoggerEvent& event) = delete; - }; - - /** -@@ -130,6 +133,10 @@ class TraceLoggerEventPayload { - uses_(0) - { } - -+ ~TraceLoggerEventPayload() { -+ MOZ_ASSERT(uses_ == 0); -+ } -+ - uint32_t textId() { - return textId_; - } -@@ -166,7 +173,8 @@ class TraceLoggerThread - mozilla::UniquePtr<TraceLoggerGraph> graph; - - PointerHashMap pointerMap; -- TextIdHashMap extraTextId; -+ TextIdHashMap textIdPayloads; -+ uint32_t nextTextId; - - ContinuousSpace<EventEntry> events; - -@@ -181,6 +189,7 @@ class TraceLoggerThread - : enabled(0), - failed(false), - graph(), -+ nextTextId(TraceLogger_Last), - iteration_(0), - top(nullptr) - { } -@@ -195,22 +204,22 @@ class TraceLoggerThread - bool enable(JSContext* cx); - bool disable(); - -- // Given the previous iteration and lastEntryId, return an array of events -+ // Given the previous iteration and size, return an array of events - // (there could be lost events). At the same time update the iteration and -- // lastEntry and gives back how many events there are. -- EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastEntryId, size_t* num) { -+ // size and gives back how many events there are. -+ EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastSize, size_t* num) { - EventEntry* start; - if (iteration_ == *lastIteration) { -- MOZ_ASSERT(events.lastEntryId() >= *lastEntryId); -- *num = events.lastEntryId() - *lastEntryId; -- start = events.data() + *lastEntryId + 1; -+ MOZ_ASSERT(*lastSize <= events.size()); -+ *num = events.size() - *lastSize; -+ start = events.data() + *lastSize; - } else { -- *num = events.lastEntryId() + 1; -+ *num = events.size(); - start = events.data(); - } - - *lastIteration = iteration_; -- *lastEntryId = events.lastEntryId(); -+ *lastSize = events.size(); - return start; - } - -@@ -220,16 +229,16 @@ class TraceLoggerThread - const char** lineno, size_t* lineno_len, const char** colno, - size_t* colno_len); - -- bool lostEvents(uint32_t lastIteration, uint32_t lastEntryId) { -+ bool lostEvents(uint32_t lastIteration, uint32_t lastSize) { - // If still logging in the same iteration, there are no lost events. - if (lastIteration == iteration_) { -- MOZ_ASSERT(lastEntryId <= events.lastEntryId()); -+ MOZ_ASSERT(lastSize <= events.size()); - return false; - } - -- // When proceeded to the next iteration and lastEntryId points to -- // the maximum capacity there are no logs that are lost. -- if (lastIteration + 1 == iteration_ && lastEntryId == events.capacity()) -+ // If we are in a consecutive iteration we are only sure we didn't lose any events, -+ // when the lastSize equals the maximum size 'events' can get. -+ if (lastIteration == iteration_ - 1 && lastSize == events.maxSize()) - return false; - - return true; -@@ -268,6 +277,7 @@ class TraceLoggerThread - void stopEvent(uint32_t id); - private: - void stopEvent(); -+ void log(uint32_t id); - - public: - static unsigned offsetOfEnabled() { -diff --git a/js/src/vm/TraceLoggingGraph.cpp b/js/src/vm/TraceLoggingGraph.cpp -index d1b7f2e..a4eb273 100644 ---- a/js/src/vm/TraceLoggingGraph.cpp -+++ b/js/src/vm/TraceLoggingGraph.cpp -@@ -276,7 +276,7 @@ TraceLoggerGraph::flush() - if (bytesWritten < tree.size()) - return false; - -- treeOffset += tree.lastEntryId(); -+ treeOffset += tree.size(); - tree.clear(); - } - -@@ -359,7 +359,7 @@ TraceLoggerGraph::startEventInternal(uint32_t id, uint64_t timestamp) - - if (parent.lastChildId() == 0) { - MOZ_ASSERT(!entry.hasChildren()); -- MOZ_ASSERT(parent.treeId() == tree.lastEntryId() + treeOffset); -+ MOZ_ASSERT(parent.treeId() == treeOffset + tree.size() - 1); - - if (!updateHasChildren(parent.treeId())) - return false; -diff --git a/js/src/vm/TraceLoggingTypes.h b/js/src/vm/TraceLoggingTypes.h -index f1c9d0c..10b76d6 100644 ---- a/js/src/vm/TraceLoggingTypes.h -+++ b/js/src/vm/TraceLoggingTypes.h -@@ -21,7 +21,6 @@ - _(Internal) \ - _(Interpreter) \ - _(InlinedScripts) \ -- _(Invalidation) \ - _(IonCompilation) \ - _(IonCompilationPaused) \ - _(IonLinking) \ -@@ -60,6 +59,7 @@ - - #define TRACELOGGER_LOG_ITEMS(_) \ - _(Bailout) \ -+ _(Invalidation) \ - _(Disable) \ - _(Enable) \ - _(Stop) -@@ -130,6 +130,9 @@ class ContinuousSpace { - uint32_t size_; - uint32_t capacity_; - -+ // The maximum amount of ram memory a continuous space structure can take (in bytes). -+ static const uint32_t LIMIT = 200 * 1024 * 1024; -+ - public: - ContinuousSpace () - : data_(nullptr) -@@ -151,6 +154,10 @@ class ContinuousSpace { - data_ = nullptr; - } - -+ static uint32_t maxSize() { -+ return LIMIT / sizeof(T); -+ } -+ - T* data() { - return data_; - } -@@ -187,11 +194,14 @@ class ContinuousSpace { - if (hasSpaceForAdd(count)) - return true; - -+ // Limit the size of a continuous buffer. -+ if (size_ + count > maxSize()) -+ return false; -+ - uint32_t nCapacity = capacity_ * 2; -- if (size_ + count > nCapacity) -- nCapacity = size_ + count; -- T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); -+ nCapacity = (nCapacity < maxSize()) ? nCapacity : maxSize(); - -+ T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); - if (!entries) - return false; - Copied: js38/repos/extra-x86_64/mozjs38-fix-tracelogger.patch (from rev 292611, js38/trunk/mozjs38-fix-tracelogger.patch) =================================================================== --- extra-x86_64/mozjs38-fix-tracelogger.patch (rev 0) +++ extra-x86_64/mozjs38-fix-tracelogger.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,603 @@ +# === Fix the SM38 tracelogger === +# This patch is a squashed version of several patches that were adapted +# to fix failing hunks. +# +# Applied in the following order, they are: +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223767 +# Assertion failure: i < size_, at js/src/vm/TraceLoggingTypes.h:210 +# Also fix stop-information to make reduce.py work correctly. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227914 +# Limit the memory tracelogger can take. +# This causes tracelogger to flush data to the disk regularly and prevents out of +# memory issues if a lot of data gets logged. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1155618 +# Fix tracelogger destructor that touches possibly uninitialised hash table. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223636 +# Don't treat extraTextId as containing only extra ids. +# This fixes an assertion failure: id == nextTextId at js/src/vm/TraceLoggingGraph.cpp +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227028 +# Fix when to keep the payload of a TraceLogger event. +# This fixes an assertion failure: textId < uint32_t(1 << 31) at js/src/vm/TraceLoggingGraph.h +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1266649 +# Handle failing to add to pointermap gracefully. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1280648 +# Don't cache based on pointers to movable GC things. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1224123 +# Fix the use of LastEntryId in tracelogger.h. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1231170 +# Use size in debugger instead of the current id to track last logged item. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1221844 +# Move TraceLogger_Invalidation to LOG_ITEM. +# Add some debug checks to logTimestamp. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1255766 +# Also mark resizing of memory. +# * https://bugzilla.mozilla.org/show_bug.cgi?id=1259403 +# Only increase capacity by multiples of 2. +# Always make sure there are 3 free slots for events. +# === + +diff --git a/js/src/jit-test/tests/tracelogger/bug1231170.js b/js/src/jit-test/tests/tracelogger/bug1231170.js +new file mode 100644 +index 0000000..023e93e +--- /dev/null ++++ b/js/src/jit-test/tests/tracelogger/bug1231170.js +@@ -0,0 +1,3 @@ ++var du = new Debugger(); ++if (typeof du.drainTraceLogger === "function") ++ du.drainTraceLogger(); +diff --git a/js/src/jit-test/tests/tracelogger/bug1266649.js b/js/src/jit-test/tests/tracelogger/bug1266649.js +new file mode 100644 +index 0000000..81ae7ad +--- /dev/null ++++ b/js/src/jit-test/tests/tracelogger/bug1266649.js +@@ -0,0 +1,10 @@ ++ ++var du = new Debugger(); ++if (typeof du.setupTraceLogger === "function" && ++ typeof oomTest === 'function') ++{ ++ du.setupTraceLogger({ ++ Scripts: true ++ }) ++ oomTest(() => function(){}); ++} +diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp +index 93e2fda..09049d6 100644 +--- a/js/src/jit/Ion.cpp ++++ b/js/src/jit/Ion.cpp +@@ -1055,6 +1055,8 @@ IonScript::Destroy(FreeOp* fop, IonScript* script) + + script->destroyCaches(); + script->unlinkFromRuntime(fop); ++ // Frees the potential event we have set. ++ script->traceLoggerScriptEvent_ = TraceLoggerEvent(); + fop->free_(script); + } + +diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp +index 26262fd..af7f313 100644 +--- a/js/src/vm/Debugger.cpp ++++ b/js/src/vm/Debugger.cpp +@@ -369,10 +369,10 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg) + objects(cx), + environments(cx), + #ifdef NIGHTLY_BUILD +- traceLoggerLastDrainedId(0), ++ traceLoggerLastDrainedSize(0), + traceLoggerLastDrainedIteration(0), + #endif +- traceLoggerScriptedCallsLastDrainedId(0), ++ traceLoggerScriptedCallsLastDrainedSize(0), + traceLoggerScriptedCallsLastDrainedIteration(0) + { + assertSameCompartment(cx, dbg); +@@ -3907,9 +3907,9 @@ Debugger::drainTraceLogger(JSContext* cx, unsigned argc, Value* vp) + size_t num; + TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); + bool lostEvents = logger->lostEvents(dbg->traceLoggerLastDrainedIteration, +- dbg->traceLoggerLastDrainedId); ++ dbg->traceLoggerLastDrainedSize); + EventEntry* events = logger->getEventsStartingAt(&dbg->traceLoggerLastDrainedIteration, +- &dbg->traceLoggerLastDrainedId, ++ &dbg->traceLoggerLastDrainedSize, + &num); + + RootedObject array(cx, NewDenseEmptyArray(cx)); +@@ -4002,10 +4002,10 @@ Debugger::drainTraceLoggerScriptCalls(JSContext* cx, unsigned argc, Value* vp) + size_t num; + TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime()); + bool lostEvents = logger->lostEvents(dbg->traceLoggerScriptedCallsLastDrainedIteration, +- dbg->traceLoggerScriptedCallsLastDrainedId); ++ dbg->traceLoggerScriptedCallsLastDrainedSize); + EventEntry* events = logger->getEventsStartingAt( + &dbg->traceLoggerScriptedCallsLastDrainedIteration, +- &dbg->traceLoggerScriptedCallsLastDrainedId, ++ &dbg->traceLoggerScriptedCallsLastDrainedSize, + &num); + + RootedObject array(cx, NewDenseEmptyArray(cx)); +diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h +index 8cac36a..c92d685 100644 +--- a/js/src/vm/Debugger.h ++++ b/js/src/vm/Debugger.h +@@ -314,10 +314,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger> + * lost events. + */ + #ifdef NIGHTLY_BUILD +- uint32_t traceLoggerLastDrainedId; ++ uint32_t traceLoggerLastDrainedSize; + uint32_t traceLoggerLastDrainedIteration; + #endif +- uint32_t traceLoggerScriptedCallsLastDrainedId; ++ uint32_t traceLoggerScriptedCallsLastDrainedSize; + uint32_t traceLoggerScriptedCallsLastDrainedIteration; + + class FrameRange; +diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp +index 6715b36..9766a6f 100644 +--- a/js/src/vm/TraceLogging.cpp ++++ b/js/src/vm/TraceLogging.cpp +@@ -131,7 +131,7 @@ TraceLoggerThread::init() + { + if (!pointerMap.init()) + return false; +- if (!extraTextId.init()) ++ if (!textIdPayloads.init()) + return false; + if (!events.init()) + return false; +@@ -185,10 +185,10 @@ TraceLoggerThread::~TraceLoggerThread() + graph = nullptr; + } + +- for (TextIdHashMap::Range r = extraTextId.all(); !r.empty(); r.popFront()) +- js_delete(r.front().value()); +- extraTextId.finish(); +- pointerMap.finish(); ++ if (textIdPayloads.initialized()) { ++ for (TextIdHashMap::Range r = textIdPayloads.all(); !r.empty(); r.popFront()) ++ js_delete(r.front().value()); ++ } + } + + bool +@@ -287,7 +287,7 @@ TraceLoggerThread::eventText(uint32_t id) + if (id < TraceLogger_Last) + return TLTextIdString(static_cast<TraceLoggerTextId>(id)); + +- TextIdHashMap::Ptr p = extraTextId.lookup(id); ++ TextIdHashMap::Ptr p = textIdPayloads.lookup(id); + MOZ_ASSERT(p); + + return p->value()->string(); +@@ -341,13 +341,15 @@ TraceLoggerThread::extractScriptDetails(uint32_t textId, const char** filename, + TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId textId) + { +- TextIdHashMap::AddPtr p = extraTextId.lookupForAdd(textId); +- if (p) ++ TextIdHashMap::AddPtr p = textIdPayloads.lookupForAdd(textId); ++ if (p) { ++ MOZ_ASSERT(p->value()->textId() == textId); // Sanity check. + return p->value(); ++ } + + TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, (char*)nullptr); + +- if (!extraTextId.add(p, textId, payload)) ++ if (!textIdPayloads.add(p, textId, payload)) + return nullptr; + + return payload; +@@ -357,8 +359,10 @@ TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(const char* text) + { + PointerHashMap::AddPtr p = pointerMap.lookupForAdd((const void*)text); +- if (p) ++ if (p) { ++ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. + return p->value(); ++ } + + size_t len = strlen(text); + char* str = js_pod_malloc<char>(len + 1); +@@ -369,7 +373,7 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) + MOZ_ASSERT(ret == len); + MOZ_ASSERT(strlen(str) == len); + +- uint32_t textId = extraTextId.count() + TraceLogger_Last; ++ uint32_t textId = nextTextId; + + TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); + if (!payload) { +@@ -377,17 +381,19 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text) + return nullptr; + } + +- if (!extraTextId.putNew(textId, payload)) { ++ if (!textIdPayloads.putNew(textId, payload)) { + js_delete(payload); + return nullptr; + } + +- if (!pointerMap.add(p, text, payload)) +- return nullptr; +- + if (graph.get()) + graph->addTextId(textId, str); + ++ nextTextId++; ++ ++ if (!pointerMap.add(p, text, payload)) ++ return nullptr; ++ + return payload; + } + +@@ -407,9 +413,14 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f + if (!traceLoggerState->isTextIdEnabled(type)) + return getOrCreateEventPayload(type); + +- PointerHashMap::AddPtr p = pointerMap.lookupForAdd(ptr); +- if (p) +- return p->value(); ++ PointerHashMap::AddPtr p; ++ if (ptr) { ++ p = pointerMap.lookupForAdd(ptr); ++ if (p) { ++ MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check. ++ return p->value(); ++ } ++ } + + // Compute the length of the string to create. + size_t lenFilename = strlen(filename); +@@ -428,24 +439,28 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f + MOZ_ASSERT(ret == len); + MOZ_ASSERT(strlen(str) == len); + +- uint32_t textId = extraTextId.count() + TraceLogger_Last; ++ uint32_t textId = nextTextId; + TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str); + if (!payload) { + js_free(str); + return nullptr; + } + +- if (!extraTextId.putNew(textId, payload)) { ++ if (!textIdPayloads.putNew(textId, payload)) { + js_delete(payload); + return nullptr; + } + +- if (!pointerMap.add(p, ptr, payload)) +- return nullptr; +- + if (graph.get()) + graph->addTextId(textId, str); + ++ nextTextId++; ++ ++ if (ptr) { ++ if (!pointerMap.add(p, ptr, payload)) ++ return nullptr; ++ } ++ + return payload; + } + +@@ -453,14 +468,14 @@ TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, JSScript* script) + { + return getOrCreateEventPayload(type, script->filename(), script->lineno(), script->column(), +- script); ++ nullptr); + } + + TraceLoggerEventPayload* + TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, + const JS::ReadOnlyCompileOptions& script) + { +- return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, &script); ++ return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, nullptr); + } + + void +@@ -485,7 +500,7 @@ TraceLoggerThread::startEvent(uint32_t id) + if (!traceLoggerState->isTextIdEnabled(id)) + return; + +- logTimestamp(id); ++ log(id); + } + + void +@@ -510,7 +525,7 @@ TraceLoggerThread::stopEvent(uint32_t id) + if (!traceLoggerState->isTextIdEnabled(id)) + return; + +- logTimestamp(TraceLogger_Stop); ++ log(TraceLogger_Stop); + } + + void +@@ -522,23 +537,57 @@ TraceLoggerThread::logTimestamp(TraceLoggerTextId id) + void + TraceLoggerThread::logTimestamp(uint32_t id) + { ++ MOZ_ASSERT(id > TraceLogger_LastTreeItem && id < TraceLogger_Last); ++ log(id); ++} ++ ++void ++TraceLoggerThread::log(uint32_t id) ++{ + if (enabled == 0) + return; + + MOZ_ASSERT(traceLoggerState); +- if (!events.ensureSpaceBeforeAdd()) { ++ ++ // We request for 3 items to add, since if we don't have enough room ++ // we record the time it took to make more place. To log this information ++ // we need 2 extra free entries. ++ if (!events.hasSpaceForAdd(3)) { + uint64_t start = rdtsc() - traceLoggerState->startupTime; + +- if (graph.get()) +- graph->log(events); ++ if (!events.ensureSpaceBeforeAdd(3)) { ++ if (graph.get()) ++ graph->log(events); ++ ++ iteration_++; ++ events.clear(); ++ ++ // Remove the item in the pointerMap for which the payloads ++ // have no uses anymore ++ for (PointerHashMap::Enum e(pointerMap); !e.empty(); e.popFront()) { ++ if (e.front().value()->uses() != 0) ++ continue; ++ ++ TextIdHashMap::Ptr p = textIdPayloads.lookup(e.front().value()->textId()); ++ MOZ_ASSERT(p); ++ textIdPayloads.remove(p); ++ ++ e.removeFront(); ++ } + +- iteration_++; +- events.clear(); ++ // Free all payloads that have no uses anymore. ++ for (TextIdHashMap::Enum e(textIdPayloads); !e.empty(); e.popFront()) { ++ if (e.front().value()->uses() == 0) { ++ js_delete(e.front().value()); ++ e.removeFront(); ++ } ++ } ++ } + + // Log the time it took to flush the events as being from the + // Tracelogger. + if (graph.get()) { +- MOZ_ASSERT(events.capacity() > 2); ++ MOZ_ASSERT(events.hasSpaceForAdd(2)); + EventEntry& entryStart = events.pushUninitialized(); + entryStart.time = start; + entryStart.textId = TraceLogger_Internal; +@@ -548,13 +597,6 @@ TraceLoggerThread::logTimestamp(uint32_t id) + entryStop.textId = TraceLogger_Stop; + } + +- // Free all TextEvents that have no uses anymore. +- for (TextIdHashMap::Enum e(extraTextId); !e.empty(); e.popFront()) { +- if (e.front().value()->uses() == 0) { +- js_delete(e.front().value()); +- e.removeFront(); +- } +- } + } + + uint64_t time = rdtsc() - traceLoggerState->startupTime; +@@ -956,3 +998,16 @@ TraceLoggerEvent::~TraceLoggerEvent() + if (payload_) + payload_->release(); + } ++ ++TraceLoggerEvent& ++TraceLoggerEvent::operator=(const TraceLoggerEvent& other) ++{ ++ if (hasPayload()) ++ payload()->release(); ++ if (other.hasPayload()) ++ other.payload()->use(); ++ ++ payload_ = other.payload_; ++ ++ return *this; ++} +diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h +index a124dcb..91a1eb0 100644 +--- a/js/src/vm/TraceLogging.h ++++ b/js/src/vm/TraceLogging.h +@@ -110,6 +110,9 @@ class TraceLoggerEvent { + bool hasPayload() const { + return !!payload_; + } ++ ++ TraceLoggerEvent& operator=(const TraceLoggerEvent& other); ++ TraceLoggerEvent(const TraceLoggerEvent& event) = delete; + }; + + /** +@@ -130,6 +133,10 @@ class TraceLoggerEventPayload { + uses_(0) + { } + ++ ~TraceLoggerEventPayload() { ++ MOZ_ASSERT(uses_ == 0); ++ } ++ + uint32_t textId() { + return textId_; + } +@@ -166,7 +173,8 @@ class TraceLoggerThread + mozilla::UniquePtr<TraceLoggerGraph> graph; + + PointerHashMap pointerMap; +- TextIdHashMap extraTextId; ++ TextIdHashMap textIdPayloads; ++ uint32_t nextTextId; + + ContinuousSpace<EventEntry> events; + +@@ -181,6 +189,7 @@ class TraceLoggerThread + : enabled(0), + failed(false), + graph(), ++ nextTextId(TraceLogger_Last), + iteration_(0), + top(nullptr) + { } +@@ -195,22 +204,22 @@ class TraceLoggerThread + bool enable(JSContext* cx); + bool disable(); + +- // Given the previous iteration and lastEntryId, return an array of events ++ // Given the previous iteration and size, return an array of events + // (there could be lost events). At the same time update the iteration and +- // lastEntry and gives back how many events there are. +- EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastEntryId, size_t* num) { ++ // size and gives back how many events there are. ++ EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastSize, size_t* num) { + EventEntry* start; + if (iteration_ == *lastIteration) { +- MOZ_ASSERT(events.lastEntryId() >= *lastEntryId); +- *num = events.lastEntryId() - *lastEntryId; +- start = events.data() + *lastEntryId + 1; ++ MOZ_ASSERT(*lastSize <= events.size()); ++ *num = events.size() - *lastSize; ++ start = events.data() + *lastSize; + } else { +- *num = events.lastEntryId() + 1; ++ *num = events.size(); + start = events.data(); + } + + *lastIteration = iteration_; +- *lastEntryId = events.lastEntryId(); ++ *lastSize = events.size(); + return start; + } + +@@ -220,16 +229,16 @@ class TraceLoggerThread + const char** lineno, size_t* lineno_len, const char** colno, + size_t* colno_len); + +- bool lostEvents(uint32_t lastIteration, uint32_t lastEntryId) { ++ bool lostEvents(uint32_t lastIteration, uint32_t lastSize) { + // If still logging in the same iteration, there are no lost events. + if (lastIteration == iteration_) { +- MOZ_ASSERT(lastEntryId <= events.lastEntryId()); ++ MOZ_ASSERT(lastSize <= events.size()); + return false; + } + +- // When proceeded to the next iteration and lastEntryId points to +- // the maximum capacity there are no logs that are lost. +- if (lastIteration + 1 == iteration_ && lastEntryId == events.capacity()) ++ // If we are in a consecutive iteration we are only sure we didn't lose any events, ++ // when the lastSize equals the maximum size 'events' can get. ++ if (lastIteration == iteration_ - 1 && lastSize == events.maxSize()) + return false; + + return true; +@@ -268,6 +277,7 @@ class TraceLoggerThread + void stopEvent(uint32_t id); + private: + void stopEvent(); ++ void log(uint32_t id); + + public: + static unsigned offsetOfEnabled() { +diff --git a/js/src/vm/TraceLoggingGraph.cpp b/js/src/vm/TraceLoggingGraph.cpp +index d1b7f2e..a4eb273 100644 +--- a/js/src/vm/TraceLoggingGraph.cpp ++++ b/js/src/vm/TraceLoggingGraph.cpp +@@ -276,7 +276,7 @@ TraceLoggerGraph::flush() + if (bytesWritten < tree.size()) + return false; + +- treeOffset += tree.lastEntryId(); ++ treeOffset += tree.size(); + tree.clear(); + } + +@@ -359,7 +359,7 @@ TraceLoggerGraph::startEventInternal(uint32_t id, uint64_t timestamp) + + if (parent.lastChildId() == 0) { + MOZ_ASSERT(!entry.hasChildren()); +- MOZ_ASSERT(parent.treeId() == tree.lastEntryId() + treeOffset); ++ MOZ_ASSERT(parent.treeId() == treeOffset + tree.size() - 1); + + if (!updateHasChildren(parent.treeId())) + return false; +diff --git a/js/src/vm/TraceLoggingTypes.h b/js/src/vm/TraceLoggingTypes.h +index f1c9d0c..10b76d6 100644 +--- a/js/src/vm/TraceLoggingTypes.h ++++ b/js/src/vm/TraceLoggingTypes.h +@@ -21,7 +21,6 @@ + _(Internal) \ + _(Interpreter) \ + _(InlinedScripts) \ +- _(Invalidation) \ + _(IonCompilation) \ + _(IonCompilationPaused) \ + _(IonLinking) \ +@@ -60,6 +59,7 @@ + + #define TRACELOGGER_LOG_ITEMS(_) \ + _(Bailout) \ ++ _(Invalidation) \ + _(Disable) \ + _(Enable) \ + _(Stop) +@@ -130,6 +130,9 @@ class ContinuousSpace { + uint32_t size_; + uint32_t capacity_; + ++ // The maximum amount of ram memory a continuous space structure can take (in bytes). ++ static const uint32_t LIMIT = 200 * 1024 * 1024; ++ + public: + ContinuousSpace () + : data_(nullptr) +@@ -151,6 +154,10 @@ class ContinuousSpace { + data_ = nullptr; + } + ++ static uint32_t maxSize() { ++ return LIMIT / sizeof(T); ++ } ++ + T* data() { + return data_; + } +@@ -187,11 +194,14 @@ class ContinuousSpace { + if (hasSpaceForAdd(count)) + return true; + ++ // Limit the size of a continuous buffer. ++ if (size_ + count > maxSize()) ++ return false; ++ + uint32_t nCapacity = capacity_ * 2; +- if (size_ + count > nCapacity) +- nCapacity = size_ + count; +- T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); ++ nCapacity = (nCapacity < maxSize()) ? nCapacity : maxSize(); + ++ T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T)); + if (!entries) + return false; + Deleted: extra-x86_64/mozjs38-install-name.patch =================================================================== --- extra-x86_64/mozjs38-install-name.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-install-name.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,11 +0,0 @@ ---- a/config/rules.mk 2016-11-09 23:51:17.000000000 -0800 -+++ b/config/rules.mk 2016-11-09 23:54:23.000000000 -0800 -@@ -393,7 +393,7 @@ - ifdef IS_COMPONENT - EXTRA_DSO_LDOPTS += -bundle - else --EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module -+EXTRA_DSO_LDOPTS += -dynamiclib -install_name $(abspath $(prefix))/lib/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module - endif - endif - endif Copied: js38/repos/extra-x86_64/mozjs38-install-name.patch (from rev 292611, js38/trunk/mozjs38-install-name.patch) =================================================================== --- extra-x86_64/mozjs38-install-name.patch (rev 0) +++ extra-x86_64/mozjs38-install-name.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,11 @@ +--- a/config/rules.mk 2016-11-09 23:51:17.000000000 -0800 ++++ b/config/rules.mk 2016-11-09 23:54:23.000000000 -0800 +@@ -393,7 +393,7 @@ + ifdef IS_COMPONENT + EXTRA_DSO_LDOPTS += -bundle + else +-EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module ++EXTRA_DSO_LDOPTS += -dynamiclib -install_name $(abspath $(prefix))/lib/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module + endif + endif + endif Deleted: extra-x86_64/mozjs38-pkg-config-version.patch =================================================================== --- extra-x86_64/mozjs38-pkg-config-version.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-pkg-config-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,22 +0,0 @@ -Add major version to pkg-config filename. -Author: Rico Tzschichholz <ric...@ubuntu.com> -Forwarded: no -Last-Update: 2015-05-04 - -Index: b/js/src/Makefile.in -=================================================================== ---- a/js/src/Makefile.in -+++ b/js/src/Makefile.in -@@ -214,10 +214,10 @@ - $(JS_CONFIG_NAME): js-config - cp $^ $@ - --$(LIBRARY_NAME).pc: js.pc -+$(JS_LIBRARY_NAME).pc: js.pc - cp $^ $@ - --install:: $(LIBRARY_NAME).pc -+install:: $(JS_LIBRARY_NAME).pc - $(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig - - install:: js-config.h Copied: js38/repos/extra-x86_64/mozjs38-pkg-config-version.patch (from rev 292611, js38/trunk/mozjs38-pkg-config-version.patch) =================================================================== --- extra-x86_64/mozjs38-pkg-config-version.patch (rev 0) +++ extra-x86_64/mozjs38-pkg-config-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,22 @@ +Add major version to pkg-config filename. +Author: Rico Tzschichholz <ric...@ubuntu.com> +Forwarded: no +Last-Update: 2015-05-04 + +Index: b/js/src/Makefile.in +=================================================================== +--- a/js/src/Makefile.in ++++ b/js/src/Makefile.in +@@ -214,10 +214,10 @@ + $(JS_CONFIG_NAME): js-config + cp $^ $@ + +-$(LIBRARY_NAME).pc: js.pc ++$(JS_LIBRARY_NAME).pc: js.pc + cp $^ $@ + +-install:: $(LIBRARY_NAME).pc ++install:: $(JS_LIBRARY_NAME).pc + $(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig + + install:: js-config.h Deleted: extra-x86_64/mozjs38-shell-version.patch =================================================================== --- extra-x86_64/mozjs38-shell-version.patch 2017-04-12 11:02:06 UTC (rev 292611) +++ extra-x86_64/mozjs38-shell-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -1,65 +0,0 @@ -# HG changeset patch -# Parent 4732a0e5d22bc7e5c1f1ace7a182d537d9cc2c6a -Add major version to shell and js-config filenames. -Author: Rico Tzschichholz <ric...@ubuntu.com> -Forwarded: no -Last-Update: 2014-10-29 - ---- -diff --git a/js/src/configure b/js/src/configure ---- a/js/src/configure -+++ b/js/src/configure -@@ -1696,8 +1696,13 @@ - MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` - IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` - -+if test -n "$JS_STANDALONE"; then -+JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION -+JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config -+else - JS_SHELL_NAME=js - JS_CONFIG_NAME=js-config -+fi - - - if test -n "$IS_ALPHA"; then - -diff --git a/js/src/configure.in b/js/src/configure.in ---- a/js/src/configure.in -+++ b/js/src/configure.in -@@ -234,16 +234,13 @@ MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSI - MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` - IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` - --dnl XXX in a temporary bid to avoid developer anger at renaming files --dnl XXX before "js" symlinks exist, don't change names. --dnl --dnl if test -n "$JS_STANDALONE"; then --dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION --dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config --dnl else -+if test -n "$JS_STANDALONE"; then -+JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION -+JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config -+else - JS_SHELL_NAME=js - JS_CONFIG_NAME=js-config --dnl fi -+fi - - changequote([,]) - if test -n "$IS_ALPHA"; then - -diff -r 80a9e64d75f5 js/src/Makefile.in ---- a/js/src/Makefile.in Wed Jun 25 15:11:42 2014 +0200 -+++ b/js/src/Makefile.in Sat Jul 05 14:08:38 2014 +0200 -@@ -273,6 +273,9 @@ - SCRIPTS = $(JS_CONFIG_NAME) - SDK_BINARY = $(JS_CONFIG_NAME) - -+$(JS_CONFIG_NAME): js-config -+ cp $^ $@ -+ - $(LIBRARY_NAME).pc: js.pc - cp $^ $@ - Copied: js38/repos/extra-x86_64/mozjs38-shell-version.patch (from rev 292611, js38/trunk/mozjs38-shell-version.patch) =================================================================== --- extra-x86_64/mozjs38-shell-version.patch (rev 0) +++ extra-x86_64/mozjs38-shell-version.patch 2017-04-12 11:02:23 UTC (rev 292612) @@ -0,0 +1,65 @@ +# HG changeset patch +# Parent 4732a0e5d22bc7e5c1f1ace7a182d537d9cc2c6a +Add major version to shell and js-config filenames. +Author: Rico Tzschichholz <ric...@ubuntu.com> +Forwarded: no +Last-Update: 2014-10-29 + +--- +diff --git a/js/src/configure b/js/src/configure +--- a/js/src/configure ++++ b/js/src/configure +@@ -1696,8 +1696,13 @@ + MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` + IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` + ++if test -n "$JS_STANDALONE"; then ++JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION ++JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config ++else + JS_SHELL_NAME=js + JS_CONFIG_NAME=js-config ++fi + + + if test -n "$IS_ALPHA"; then + +diff --git a/js/src/configure.in b/js/src/configure.in +--- a/js/src/configure.in ++++ b/js/src/configure.in +@@ -234,16 +234,13 @@ MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSI + MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"` + IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'` + +-dnl XXX in a temporary bid to avoid developer anger at renaming files +-dnl XXX before "js" symlinks exist, don't change names. +-dnl +-dnl if test -n "$JS_STANDALONE"; then +-dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION +-dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config +-dnl else ++if test -n "$JS_STANDALONE"; then ++JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION ++JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config ++else + JS_SHELL_NAME=js + JS_CONFIG_NAME=js-config +-dnl fi ++fi + + changequote([,]) + if test -n "$IS_ALPHA"; then + +diff -r 80a9e64d75f5 js/src/Makefile.in +--- a/js/src/Makefile.in Wed Jun 25 15:11:42 2014 +0200 ++++ b/js/src/Makefile.in Sat Jul 05 14:08:38 2014 +0200 +@@ -273,6 +273,9 @@ + SCRIPTS = $(JS_CONFIG_NAME) + SDK_BINARY = $(JS_CONFIG_NAME) + ++$(JS_CONFIG_NAME): js-config ++ cp $^ $@ ++ + $(LIBRARY_NAME).pc: js.pc + cp $^ $@ +