comment "Legacy options removed in 2021.08"
+config BR2_PACKAGE_SPIDERMONKEY
+ bool "spidermonkey package removed"
+ select BR2_LEGACY
+ help
+ The spidermonkey package was removed. The only package that
+ depended on spidermonkey was polkit. The spidermonkey
+ dependency is replaced with duktape.
+
config BR2_PACKAGE_KODI_LIBVA
bool "kodi option to add libva support removed"
select BR2_LEGACY
source "package/jszip/Config.in"
source "package/openlayers/Config.in"
source "package/popperjs/Config.in"
- source "package/spidermonkey/Config.in"
source "package/vuejs/Config.in"
endmenu
+++ /dev/null
-From 646a78262b18e19721cd41ee515215221dd241b6 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 12 Jul 2018 18:12:42 +0800
-Subject: [PATCH] allow newer autoconf versions
-
-Spidermonkey is hardcoded to use Autoconf 2.13, which is from 1999!
-The reasoning behind using 2.13 is because newer versions of Autoconf at the
-time did not work correctly with the custom m4 macros in the source code.
-However: Because we are building just the spidermonkey engine instead of the
-entire firefox package, and we are using a tarball with a pre-setup
-old-configure file, there is no need for the old version of autoconf.
-
-See: https://bugzilla.mozilla.org/show_bug.cgi?id=104642
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- build/moz.configure/old.configure | 4 ++--
- js/src/old-configure | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure
-index 17d0c5bf..436fcc5e 100644
---- a/build/moz.configure/old.configure
-+++ b/build/moz.configure/old.configure
-@@ -33,7 +33,7 @@ def autoconf(mozconfig, autoconf):
- autoconf = autoconf[0] if autoconf else None
-
- for ac in (mozconfig_autoconf, autoconf, 'autoconf-2.13', 'autoconf2.13',
-- 'autoconf213'):
-+ 'autoconf213', 'autoconf'):
- if ac:
- autoconf = find_program(ac)
- if autoconf:
-@@ -87,7 +87,7 @@ def prepare_configure(old_configure, mozconfig, autoconf, build_env, shell,
- old_configure = os.path.join(old_configure_dir, 'js', 'src',
- os.path.basename(old_configure))
-
-- refresh = True
-+ refresh = False
- if exists(old_configure):
- mtime = getmtime(old_configure)
- aclocal = os.path.join(build_env.topsrcdir, 'build', 'autoconf',
-diff --git a/js/src/old-configure b/js/src/old-configure
-index 58cc646f..ebd2646e 100644
---- a/js/src/old-configure
-+++ b/js/src/old-configure
-@@ -587,7 +587,7 @@ if test -z "$srcdir"; then
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
-- srcdir=$ac_confdir
-+ srcdir="$ac_confdir/../../"
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
---
-2.23.0
-
+++ /dev/null
-From 07d40f72e1ed1d84a5ddd98ae8490d41a2e19c46 Mon Sep 17 00:00:00 2001
-From: Arjan van de Ven <arjan@linux.intel.com>
-Date: Wed, 5 Sep 2018 11:39:01 +0000
-Subject: [PATCH] allow building in tree
-
-By default, spidermonkey must be configured and built out-of-tree,
-otherwise the following error occurs:
-
-FATAL ERROR PROCESSING MOZBUILD FILE
-==============================
-
-The error occurred while processing the following file or one of the files it
-includes:
- js/src/shell/moz.build
-
-The error occurred when validating the result of the execution. The reported
-error is:
- Path specified in LOCAL_INCLUDES is not allowed:
- .. (resolved to js/src)
-
-Remove this check, as spidermonkey builds without issue in-tree.
-
-Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- python/mozbuild/mozbuild/frontend/emitter.py | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py
-index 642b381c..c37fbf5d 100644
---- a/python/mozbuild/mozbuild/frontend/emitter.py
-+++ b/python/mozbuild/mozbuild/frontend/emitter.py
-@@ -1127,11 +1127,6 @@ class TreeMetadataEmitter(LoggingMixin):
- raise SandboxValidationError('Path specified in LOCAL_INCLUDES '
- 'does not exist: %s (resolved to %s)' % (local_include,
- full_path), context)
-- if (full_path == context.config.topsrcdir or
-- full_path == context.config.topobjdir):
-- raise SandboxValidationError('Path specified in LOCAL_INCLUDES '
-- 'is not allowed: %s (resolved to %s)' % (local_include,
-- full_path), context)
- include_obj = LocalInclude(context, local_include)
- local_includes.append(include_obj.path.full_path)
- yield include_obj
---
-2.23.0
-
+++ /dev/null
-From 4a06a1a6a71293decb83aee7adb74bc709493106 Mon Sep 17 00:00:00 2001
-From: Philip Chimento <philip.chimento@gmail.com>
-Date: Wed, 5 Jul 2017 22:57:09 -0700
-Subject: [PATCH] allow unknown configuration options
-
-By default, if an unknown parameter is passed to configure, an error is raised.
-Replace the raise with a pass and continue.
-
-Fixes: https://bugzilla.mozilla.org/show_bug.cgi?id=1379540
-
-Signed-off-by: Philip Chimento <philip.chimento@gmail.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- js/src/configure | 9 +++++++++
- python/mozbuild/mozbuild/configure/__init__.py | 2 +-
- python/mozbuild/mozbuild/configure/options.py | 6 +++++-
- 3 files changed, 15 insertions(+), 2 deletions(-)
- create mode 100755 js/src/configure
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
-index 0fe640ca..09b460d3 100644
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -421,7 +421,7 @@ def run(self, path=None):
- # All options should have been removed (handled) by now.
- for arg in self._helper:
- without_value = arg.split('=', 1)[0]
-- raise InvalidOptionError('Unknown option: %s' % without_value)
-+ pass
-
- # Run the execution queue
- for func, args in self._execution_queue:
---
-2.23.0
-
+++ /dev/null
-From 0c9e8f586ba52a9aef5ed298e8315b2598b8fb72 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 25 May 2019 16:54:45 -0700
-Subject: [PATCH] fix building with musl
-
-The MIPS specific header <sgidefs.h> is not provided by musl
-linux kernel headers provide <asm/sgidefs.h> which has same definitions
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
----
- js/src/jsmath.cpp | 2 +-
- memory/build/Mutex.h | 4 ++--
- mozglue/misc/TimeStamp_darwin.cpp | 1 -
- mozglue/misc/TimeStamp_posix.cpp | 1 -
- nsprpub/pr/src/misc/prsystem.c | 1 -
- third_party/python/psutil/psutil/_psutil_bsd.c | 1 -
- third_party/python/psutil/psutil/_psutil_osx.c | 1 -
- third_party/python/psutil/psutil/arch/osx/process_info.c | 1 -
- 8 files changed, 3 insertions(+), 9 deletions(-)
-
-diff --git a/js/src/jsmath.cpp b/js/src/jsmath.cpp
-index a28968be..8facaa81 100644
---- a/js/src/jsmath.cpp
-+++ b/js/src/jsmath.cpp
-@@ -71,7 +71,7 @@
- #elif defined(__s390__)
- #define GETRANDOM_NR 349
- #elif defined(__mips__)
--#include <sgidefs.h>
-+#include <asm/sgidefs.h>
- #if _MIPS_SIM == _MIPS_SIM_ABI32
- #define GETRANDOM_NR 4353
- #elif _MIPS_SIM == _MIPS_SIM_ABI64
-diff --git a/memory/build/Mutex.h b/memory/build/Mutex.h
-index cb8b1e7d..7b9eb1de 100644
---- a/memory/build/Mutex.h
-+++ b/memory/build/Mutex.h
-@@ -42,7 +42,7 @@ struct Mutex {
- if (pthread_mutexattr_init(&attr) != 0) {
- return false;
- }
-- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
-+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_STALLED);
- if (pthread_mutex_init(&mMutex, &attr) != 0) {
- pthread_mutexattr_destroy(&attr);
- return false;
-@@ -102,7 +102,7 @@ typedef Mutex StaticMutex;
-
- #if defined(XP_DARWIN)
- #define STATIC_MUTEX_INIT OS_SPINLOCK_INIT
--#elif defined(XP_LINUX) && !defined(ANDROID)
-+#elif defined(XP_LINUX) && !defined(ANDROID) && defined(__GLIBC__)
- #define STATIC_MUTEX_INIT PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
- #else
- #define STATIC_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
-diff --git a/mozglue/misc/TimeStamp_darwin.cpp b/mozglue/misc/TimeStamp_darwin.cpp
-index d2abe9a5..d065649c 100644
---- a/mozglue/misc/TimeStamp_darwin.cpp
-+++ b/mozglue/misc/TimeStamp_darwin.cpp
-@@ -19,7 +19,6 @@
-
- #include <mach/mach_time.h>
- #include <sys/time.h>
--#include <sys/sysctl.h>
- #include <time.h>
- #include <unistd.h>
-
-diff --git a/mozglue/misc/TimeStamp_posix.cpp b/mozglue/misc/TimeStamp_posix.cpp
-index 86c7609a..a37bd93a 100644
---- a/mozglue/misc/TimeStamp_posix.cpp
-+++ b/mozglue/misc/TimeStamp_posix.cpp
-@@ -21,7 +21,6 @@
- #if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || \
- defined(__OpenBSD__)
- #include <sys/param.h>
--#include <sys/sysctl.h>
- #endif
-
- #if defined(__DragonFly__) || defined(__FreeBSD__)
-diff --git a/nsprpub/pr/src/misc/prsystem.c b/nsprpub/pr/src/misc/prsystem.c
-index eba85fb0..54b57bb9 100644
---- a/nsprpub/pr/src/misc/prsystem.c
-+++ b/nsprpub/pr/src/misc/prsystem.c
-@@ -27,7 +27,6 @@
- || defined(OPENBSD) || defined(DRAGONFLY) || defined(DARWIN)
- #define _PR_HAVE_SYSCTL
- #include <sys/param.h>
--#include <sys/sysctl.h>
- #endif
-
- #if defined(DARWIN)
-diff --git a/third_party/python/psutil/psutil/_psutil_bsd.c b/third_party/python/psutil/psutil/_psutil_bsd.c
-index 9a2ed04b..9e0d34cb 100644
---- a/third_party/python/psutil/psutil/_psutil_bsd.c
-+++ b/third_party/python/psutil/psutil/_psutil_bsd.c
-@@ -29,7 +29,6 @@
- #include <paths.h>
- #include <sys/types.h>
- #include <sys/param.h>
--#include <sys/sysctl.h>
- #include <sys/user.h>
- #include <sys/proc.h>
- #include <sys/file.h>
-diff --git a/third_party/python/psutil/psutil/_psutil_osx.c b/third_party/python/psutil/psutil/_psutil_osx.c
-index 55dd64ca..ec356339 100644
---- a/third_party/python/psutil/psutil/_psutil_osx.c
-+++ b/third_party/python/psutil/psutil/_psutil_osx.c
-@@ -13,7 +13,6 @@
- #include <stdlib.h>
- #include <stdio.h>
- #include <utmpx.h>
--#include <sys/sysctl.h>
- #include <sys/vmmeter.h>
- #include <libproc.h>
- #include <sys/proc_info.h>
-diff --git a/third_party/python/psutil/psutil/arch/osx/process_info.c b/third_party/python/psutil/psutil/arch/osx/process_info.c
-index 40c79a2c..8de0dcbd 100644
---- a/third_party/python/psutil/psutil/arch/osx/process_info.c
-+++ b/third_party/python/psutil/psutil/arch/osx/process_info.c
-@@ -16,7 +16,6 @@
- #include <stdlib.h>
- #include <stdio.h>
- #include <signal.h>
--#include <sys/sysctl.h>
- #include <libproc.h>
-
- #include "process_info.h"
---
-2.23.0
+++ /dev/null
-From 64ad80e6d95871f17be4cd01da15581f41ac0b2b Mon Sep 17 00:00:00 2001
-From: Stefan O'Rear <sorear2@gmail.com>
-Date: Fri, 11 Nov 2016 21:10:34 -0700
-Subject: [PATCH] Add RISC-V support
-
-These changes allow spidermonkey to cross-compile for riscv64 and riscv32.
-
-Upstream-status: Submitted
-See: https://bugzilla.mozilla.org/show_bug.cgi?id=1318905
-
-Signed-off-by: Stefan O'Rear <sorear2@gmail.com>
-Signed-off-by: Ricardo Salveti <ricardo@foundries.io>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- build/autoconf/config.guess | 3 +++
- build/moz.configure/init.configure | 3 +++
- js/src/jit/AtomicOperations.h | 2 ++
- js/src/jit/none/AtomicOperations-feeling-lucky.h | 8 ++++++++
- mfbt/tests/TestPoisonArea.cpp | 3 +++
- python/mozbuild/mozbuild/configure/constants.py | 4 ++++
- 6 files changed, 23 insertions(+)
-
-diff --git a/build/autoconf/config.guess b/build/autoconf/config.guess
-index d5d667d4..1277a862 100755
---- a/build/autoconf/config.guess
-+++ b/build/autoconf/config.guess
-@@ -1029,6 +1029,9 @@ EOF
- ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-${LIBC}
- exit ;;
-+ riscv32:Linux:*:* | riscv64:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
- exit ;;
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
-index 83b8d705..ef33db50 100644
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -676,6 +676,9 @@ def split_triplet(triplet, allow_unknown=False):
- elif cpu == 'sh4':
- canonical_cpu = 'sh4'
- endianness = 'little'
-+ elif cpu in ('riscv32', 'riscv64'):
-+ canonical_cpu = cpu
-+ endianness = 'little'
- elif allow_unknown:
- canonical_cpu = cpu
- endianness = 'unknown'
-diff --git a/js/src/jit/AtomicOperations.h b/js/src/jit/AtomicOperations.h
-index 3501e65b..fda0b148 100644
---- a/js/src/jit/AtomicOperations.h
-+++ b/js/src/jit/AtomicOperations.h
-@@ -393,6 +393,8 @@ inline bool AtomicOperations::isLockfreeJS(int32_t size) {
- #include "jit/none/AtomicOperations-feeling-lucky.h"
- #elif defined(__s390__) || defined(__s390x__)
- #include "jit/none/AtomicOperations-feeling-lucky.h"
-+#elif defined(__riscv)
-+#include "jit/none/AtomicOperations-feeling-lucky.h"
- #else
- #error "No AtomicOperations support provided for this platform"
- #endif
-diff --git a/js/src/jit/none/AtomicOperations-feeling-lucky.h b/js/src/jit/none/AtomicOperations-feeling-lucky.h
-index c0b43699..42b1f3e0 100644
---- a/js/src/jit/none/AtomicOperations-feeling-lucky.h
-+++ b/js/src/jit/none/AtomicOperations-feeling-lucky.h
-@@ -80,6 +80,14 @@
- #define GNUC_COMPATIBLE
- #endif
-
-+#ifdef __riscv
-+#define GNUC_COMPATIBLE
-+#ifdef __riscv_xlen == 64
-+#define HAS_64BIT_ATOMICS
-+#define HAS_64BIT_LOCKFREE
-+#endif
-+#endif
-+
- // The default implementation tactic for gcc/clang is to use the newer
- // __atomic intrinsics added for use in C++11 <atomic>. Where that
- // isn't available, we use GCC's older __sync functions instead.
-diff --git a/mfbt/tests/TestPoisonArea.cpp b/mfbt/tests/TestPoisonArea.cpp
-index 06c24ed0..fba9263c 100644
---- a/mfbt/tests/TestPoisonArea.cpp
-+++ b/mfbt/tests/TestPoisonArea.cpp
-@@ -168,6 +168,9 @@ static const ia64_instr _return_instr =
- #define RETURN_INSTR _return_instr
- #define RETURN_INSTR_TYPE ia64_instr
-
-+#elif defined __riscv
-+#define RETURN_INSTR 0x80828082 /* ret; ret */
-+
- #else
- #error "Need return instruction for this architecture"
- #endif
-diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py
-index 33ae5a45..1067b6a4 100644
---- a/python/mozbuild/mozbuild/configure/constants.py
-+++ b/python/mozbuild/mozbuild/configure/constants.py
-@@ -50,6 +50,8 @@ CPU_bitness = {
- 'mips64': 64,
- 'ppc': 32,
- 'ppc64': 64,
-+ 'riscv32': 32,
-+ 'riscv64': 64,
- 's390': 32,
- 's390x': 64,
- 'sh4': 32,
-@@ -82,6 +84,8 @@ CPU_preprocessor_checks = OrderedDict((
- ('s390', '__s390__'),
- ('ppc64', '__powerpc64__'),
- ('ppc', '__powerpc__'),
-+ ('riscv32', '__riscv && __SIZEOF_POINTER__ == 4'),
-+ ('riscv64', '__riscv && __SIZEOF_POINTER__ == 8'),
- ('Alpha', '__alpha__'),
- ('hppa', '__hppa__'),
- ('sparc64', '__sparc__ && __arch64__'),
---
-2.23.0
-
+++ /dev/null
-From 903a79a1efff18fc7cc50db09a3fe5d768adc9a8 Mon 19 Mar 2018 09:58:06 +0100
-From: Rico Tzschichholz <ricotz@ubuntu.com>
-Date: Wed, 5 Jul 2017 22:45:59 -0700
-Subject: build: Copy headers on install instead of symlinking
-
-Patch ported from mozjs52 by Philip Chimento
-
-Signed-off-by: Rico Tzschichholz <ricotz@ubuntu.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- python/mozbuild/mozbuild/backend/recursivemake.py | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py
-index dd9020d..6918ef8 100644
---- a/python/mozbuild/mozbuild/backend/recursivemake.py
-+++ b/python/mozbuild/mozbuild/backend/recursivemake.py
-@@ -1427,11 +1427,11 @@ class RecursiveMakeBackend(CommonBackend):
- raise Exception("Wildcards are only supported in the filename part of "
- "srcdir-relative or absolute paths.")
-
-- install_manifest.add_pattern_link(basepath, wild, path)
-+ install_manifest.add_pattern_copy(basepath, wild, path)
- else:
-- install_manifest.add_pattern_link(f.srcdir, f, path)
-+ install_manifest.add_pattern_copy(f.srcdir, f, path)
- else:
-- install_manifest.add_link(f.full_path, dest)
-+ install_manifest.add_copy(f.full_path, dest)
- else:
- install_manifest.add_optional_exists(dest)
- backend_file.write('%s_FILES += %s\n' % (
---
-2.23.0
+++ /dev/null
-From f66d410f3ba767efb91c6b9545d373267cd975f2 Mon Sep 17 00:00:00 2001
-From: Philip Chimento <philip@endlessm.com>
-Date: Sat, 7 Sep 2019 20:43:40 +0200
-Subject: [PATCH] ensure proper running on 64-bit and 32-bit BE platforms
-
-See: https://salsa.debian.org/gnome-team/mozjs60/blob/debian/master/debian/patches/jsproperty-endian.patch
-
-Signed-off-by: Philip Chimento <philip@endlessm.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- js/src/gc/Marking-inl.h | 16 ++++++++++++++++
- js/src/gc/RelocationOverlay.h | 13 ++++++++++++-
- js/src/jsfriendapi.h | 8 ++++++++
- js/src/vm/StringType.h | 13 +++++++++++++
- 4 files changed, 49 insertions(+), 1 deletion(-)
-
-diff --git a/js/src/gc/Marking-inl.h b/js/src/gc/Marking-inl.h
-index 6d2a4c7..c773c21 100644
---- a/js/src/gc/Marking-inl.h
-+++ b/js/src/gc/Marking-inl.h
-@@ -82,12 +82,28 @@ inline void RelocationOverlay::forwardTo(Cell* cell) {
- MOZ_ASSERT(!isForwarded());
- // The location of magic_ is important because it must never be valid to see
- // the value Relocated there in a GC thing that has not been moved.
-+#if MOZ_LITTLE_ENDIAN || JS_BITS_PER_WORD == 32
-+ // On 32-bit, the magic_ aliases with whatever comes after the first
-+ // pointer; on little-endian 64-bit, the magic_ aliases with the
-+ // 32 most significant bits of the pointer, which are the second half.
- static_assert(offsetof(RelocationOverlay, magic_) ==
- offsetof(JSObject, group_) + sizeof(uint32_t),
- "RelocationOverlay::magic_ is in the wrong location");
- static_assert(offsetof(RelocationOverlay, magic_) ==
- offsetof(js::Shape, base_) + sizeof(uint32_t),
- "RelocationOverlay::magic_ is in the wrong location");
-+#elif JS_BITS_PER_WORD == 64
-+ // On big-endian 64-bit, the magic_ aliases with the 32 most
-+ // significant bits of the pointer, but now that's the first half.
-+ static_assert(offsetof(RelocationOverlay, magic_) ==
-+ offsetof(JSObject, group_),
-+ "RelocationOverlay::magic_ is in the wrong location");
-+ static_assert(offsetof(RelocationOverlay, magic_) ==
-+ offsetof(js::Shape, base_),
-+ "RelocationOverlay::magic_ is in the wrong location");
-+#else
-+# error "Unknown endianness or word size"
-+#endif
- static_assert(
- offsetof(RelocationOverlay, magic_) == offsetof(JSString, d.u1.length),
- "RelocationOverlay::magic_ is in the wrong location");
-diff --git a/js/src/gc/RelocationOverlay.h b/js/src/gc/RelocationOverlay.h
-index a568843..399a541 100644
---- a/js/src/gc/RelocationOverlay.h
-+++ b/js/src/gc/RelocationOverlay.h
-@@ -33,14 +33,25 @@ class RelocationOverlay {
- /* See comment in js/public/HeapAPI.h. */
- static const uint32_t Relocated = js::gc::Relocated;
-
-+#if MOZ_LITTLE_ENDIAN || JS_BITS_PER_WORD == 32
- /*
-- * Keep the low 32 bits untouched. Use them to distinguish strings from
-+ * Keep the first 32 bits untouched. Use them to distinguish strings from
- * objects in the nursery.
- */
- uint32_t preserve_;
-
- /* Set to Relocated when moved. */
- uint32_t magic_;
-+#elif JS_BITS_PER_WORD == 64
-+ /*
-+ * On big-endian, we need to reorder to keep preserve_ lined up with the
-+ * low 32 bits of the aligned group_ pointer in JSObject.
-+ */
-+ uint32_t magic_;
-+ uint32_t preserve_;
-+#else
-+# error "Unknown endianness or word size"
-+#endif
-
- /* The location |this| was moved to. */
- Cell* newLocation_;
-diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
-index 4b8d18a..70ce0a1 100644
---- a/js/src/jsfriendapi.h
-+++ b/js/src/jsfriendapi.h
-@@ -9,6 +9,7 @@
-
- #include "mozilla/Atomics.h"
- #include "mozilla/Casting.h"
-+#include "mozilla/EndianUtils.h"
- #include "mozilla/Maybe.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/UniquePtr.h"
-@@ -609,8 +610,15 @@ struct String {
- static const uint32_t LATIN1_CHARS_BIT = JS_BIT(6);
- static const uint32_t EXTERNAL_FLAGS = LINEAR_BIT | NON_ATOM_BIT | JS_BIT(5);
- static const uint32_t TYPE_FLAGS_MASK = JS_BIT(6) - 1;
-+#if MOZ_LITTLE_ENDIAN || JS_BITS_PER_WORD == 32
- uint32_t flags;
- uint32_t length;
-+#elif JS_BITS_PER_WORD == 64
-+ uint32_t length;
-+ uint32_t flags;
-+#else
-+# error "Unknown endianness or word size"
-+#endif
- union {
- const JS::Latin1Char* nonInlineCharsLatin1;
- const char16_t* nonInlineCharsTwoByte;
-diff --git a/js/src/vm/StringType.h b/js/src/vm/StringType.h
-index cde3427..c3400db 100644
---- a/js/src/vm/StringType.h
-+++ b/js/src/vm/StringType.h
-@@ -7,6 +7,7 @@
- #ifndef vm_StringType_h
- #define vm_StringType_h
-
-+#include "mozilla/EndianUtils.h"
- #include "mozilla/MemoryReporting.h"
- #include "mozilla/PodOperations.h"
- #include "mozilla/Range.h"
-@@ -168,8 +169,20 @@ class JSString : public js::gc::Cell {
- struct Data {
- union {
- struct {
-+#if MOZ_LITTLE_ENDIAN || JS_BITS_PER_WORD == 32
- uint32_t flags; /* JSString */
- uint32_t length; /* JSString */
-+#elif JS_BITS_PER_WORD == 64
-+ /*
-+ * On big-endian, we need to reorder to keep flags lined up
-+ * with the low 32 bits of the aligned group_ pointer in
-+ * JSObject.
-+ */
-+ uint32_t length; /* JSString */
-+ uint32_t flags; /* JSString */
-+#else
-+# error "Unknown endianness or word size"
-+#endif
- };
- uintptr_t flattenData; /* JSRope (temporary while flattening) */
- } u1;
---
-2.23.0
-
+++ /dev/null
-From 903a79a1efff18fc7cc50db09a3fe5d768adc9a8 Mon 19 Mar 2018 09:58:06 +0100
-From: Lars T Hansen <lhansen@mozilla.com>
-Date: Fri, 23 Mar 2018 22:01:33 +0000
-Subject: [PATCH] save and restore non-volatile x28 on ARM64 for generated unboxed object constructor
-
-Fixes: https://bugzilla.mozilla.org/show_bug.cgi?id=1375074
-
-Upsream-status: Applied
-See: https://hg.mozilla.org/mozilla-central/rev/800abe66894d
-
-Signed-off-by: Lars T Hansen <lhansen@mozilla.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- js/src/vm/UnboxedObject.cpp | 30 ++++++++++++++++++++++++++----
- 1 file changed, 26 insertions(+), 4 deletions(-)
-
-diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp
-index 35ca20d7405f..1c20a1093d13 100644
---- a/js/src/vm/UnboxedObject.cpp
-+++ b/js/src/vm/UnboxedObject.cpp
-@@ -86,9 +86,16 @@ static const uintptr_t CLEAR_CONSTRUCTOR_CODE_TOKEN = 0x1;
- #endif
-
- #ifdef JS_CODEGEN_ARM64
-- // ARM64 communicates stack address via sp, but uses a pseudo-sp for
-- // addressing.
-- masm.initStackPtr();
-+ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for
-+ // addressing. The register we use for PSP may however also be used by
-+ // calling code, and it is nonvolatile, so save it. Do this as a special
-+ // case first because the generic save/restore code needs the PSP to be
-+ // initialized already.
-+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64()));
-+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex));
-+
-+ // Initialize the PSP from the SP.
-+ masm.initStackPtr();
- #endif
-
- MOZ_ASSERT(propertiesReg.volatile_());
-@@ -239,7 +246,22 @@ static const uintptr_t CLEAR_CONSTRUCTOR_CODE_TOKEN = 0x1;
- if (ScratchDoubleReg.volatile_()) masm.pop(ScratchDoubleReg);
- masm.PopRegsInMask(savedNonVolatileRegisters);
-
-- masm.abiret();
-+#ifdef JS_CODEGEN_ARM64
-+ // Now restore the value that was in the PSP register on entry, and return.
-+
-+ // Obtain the correct SP from the PSP.
-+ masm.Mov(sp, PseudoStackPointer64);
-+
-+ // Restore the saved value of the PSP register, this value is whatever the
-+ // caller had saved in it, not any actual SP value, and it must not be
-+ // overwritten subsequently.
-+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex));
-+
-+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong.
-+ masm.Ret(vixl::lr);
-+#else
-+ masm.abiret();
-+#endif
-
- masm.bind(&failureStoreOther);
-
---
-2.23.0
+++ /dev/null
-From 903a79a1efff18fc7cc50db09a3fe5d768adc9a8 Mon 19 Mar 2018 09:58:06 +0100
-From: Lars T Hansen <lhansen@mozilla.com>
-Date: Fri, 23 Mar 2018 22:01:33 +0000
-Subject: [PATCH] save x28 before clobbering it in the regex compiler
-
-Fixes: https://bugzilla.mozilla.org/show_bug.cgi?id=1445907
-
-Upsream-status: Applied
-See: https://hg.mozilla.org/mozilla-central/rev/903a79a1efff
-
-Signed-off-by: Lars T Hansen <lhansen@mozilla.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
-diff --git a/js/src/irregexp/NativeRegExpMacroAssembler.cpp b/js/src/irregexp/NativeRegExpMacroAssembler.cpp
---- a/js/src/irregexp/NativeRegExpMacroAssembler.cpp
-+++ b/js/src/irregexp/NativeRegExpMacroAssembler.cpp
-@@ -118,17 +118,25 @@ NativeRegExpMacroAssembler::GenerateCode
-
- Label return_temp0;
-
- // Finalize code - write the entry point code now we know how many
- // registers we need.
- masm.bind(&entry_label_);
-
- #ifdef JS_CODEGEN_ARM64
-- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing.
-+ // ARM64 communicates stack address via SP, but uses a pseudo-sp (PSP) for
-+ // addressing. The register we use for PSP may however also be used by
-+ // calling code, and it is nonvolatile, so save it. Do this as a special
-+ // case first because the generic save/restore code needs the PSP to be
-+ // initialized already.
-+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64()));
-+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex));
-+
-+ // Initialize the PSP from the SP.
- masm.initStackPtr();
- #endif
-
- // Push non-volatile registers which might be modified by jitcode.
- size_t pushedNonVolatileRegisters = 0;
- for (GeneralRegisterForwardIterator iter(savedNonVolatileRegisters); iter.more(); ++iter) {
- masm.Push(*iter);
- pushedNonVolatileRegisters++;
-@@ -416,17 +424,32 @@ NativeRegExpMacroAssembler::GenerateCode
- masm.pop(temp0);
- masm.movePtr(temp0, StackPointer);
- #endif
-
- // Restore non-volatile registers which were saved on entry.
- for (GeneralRegisterBackwardIterator iter(savedNonVolatileRegisters); iter.more(); ++iter)
- masm.Pop(*iter);
-
-+#ifdef JS_CODEGEN_ARM64
-+ // Now restore the value that was in the PSP register on entry, and return.
-+
-+ // Obtain the correct SP from the PSP.
-+ masm.Mov(sp, PseudoStackPointer64);
-+
-+ // Restore the saved value of the PSP register, this value is whatever the
-+ // caller had saved in it, not any actual SP value, and it must not be
-+ // overwritten subsequently.
-+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex));
-+
-+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong.
-+ masm.Ret(vixl::lr);
-+#else
- masm.abiret();
-+#endif
-
- // Backtrack code (branch target for conditional backtracks).
- if (backtrack_label_.used()) {
- masm.bind(&backtrack_label_);
- Backtrack();
- }
-
- // Backtrack stack overflow code.
-diff --git a/js/src/jit-test/tests/regexp/bug1445907.js b/js/src/jit-test/tests/regexp/bug1445907.js
-new file mode 100644
---- /dev/null
-+++ b/js/src/jit-test/tests/regexp/bug1445907.js
-@@ -0,0 +1,15 @@
-+// On ARM64, we failed to save x28 properly when generating code for the regexp
-+// matcher.
-+//
-+// There's wasm and Debugger code here because the combination forces the use of
-+// x28 and exposes the bug when running on the simulator.
-+
-+if (!wasmIsSupported())
-+ quit();
-+
-+var g = newGlobal('');
-+var dbg = new Debugger(g);
-+g.eval(`var m = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary('(module (func (export "test")))')))`);
-+var re = /./;
-+dbg.onEnterFrame = function(frame) { re.exec("x") };
-+result = g.eval("m.exports.test()");
-
---
-2.23.0
-
+++ /dev/null
-From 903a79a1efff18fc7cc50db09a3fe5d768adc9a8 Mon 19 Mar 2018 09:58:06 +0100
-From: André Bargull <andrebargull@gmail.com>
-Date: Wed, 8 Nov 2017 03:23:41 -0800
-Subject: always use the equivalent year to determine the time zone offset and
- name
-
-Fixes: https://bugzilla.mozilla.org/show_bug.cgi?id=1415202
-
-Upsream-status: Applied
-See: https://hg.mozilla.org/mozilla-central/rev/ce9f1466ec78
-
-Reviewed-by: Jeff Walden
-Signed-off-by: André Bargull <andrebargull@gmail.com>
-Signed-off-by: Adam Duskett <aduskett@gmail.com>
----
- js/src/jsdate.cpp | 11 +++++++----
- js/src/vm/Time.cpp | 14 ++++----------
- js/src/vm/Time.h | 2 +-
- 3 files changed, 12 insertions(+), 15 deletions(-)
-
-diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
-index 07af3d18c865..ff8fd6c3763c 100644
---- a/js/src/jsdate.cpp
-+++ b/js/src/jsdate.cpp
-@@ -2353,12 +2353,15 @@ static PRMJTime ToPRMJTime(double localTime, double utcTime) {
- static size_t FormatTime(char* buf, int buflen, const char* fmt, double utcTime,
- double localTime) {
- PRMJTime prtm = ToPRMJTime(localTime, utcTime);
-- int eqivalentYear = IsRepresentableAsTime32(utcTime)
-- ? prtm.tm_year
-- : EquivalentYearForDST(prtm.tm_year);
-+ // If an equivalent year was used to compute the date/time components, use
-+ // the same equivalent year to determine the time zone name and offset in
-+ // PRMJ_FormatTime(...).
-+ int timeZoneYear = IsRepresentableAsTime32(utcTime)
-+ ? prtm.tm_year
-+ : EquivalentYearForDST(prtm.tm_year);
- int offsetInSeconds = (int)floor((localTime - utcTime) / msPerSecond);
-
-- return PRMJ_FormatTime(buf, buflen, fmt, &prtm, eqivalentYear,
-+ return PRMJ_FormatTime(buf, buflen, fmt, &prtm, timeZoneYear,
- offsetInSeconds);
- }
-
-diff --git a/js/src/vm/Time.cpp b/js/src/vm/Time.cpp
-index f59977f0d0e9..5ee4794b3e83 100644
---- a/js/src/vm/Time.cpp
-+++ b/js/src/vm/Time.cpp
-@@ -247,7 +247,7 @@ static void PRMJ_InvalidParameterHandler(const wchar_t* expression,
-
- /* Format a time value into a buffer. Same semantics as strftime() */
- size_t PRMJ_FormatTime(char* buf, int buflen, const char* fmt,
-- const PRMJTime* prtm, int equivalentYear,
-+ const PRMJTime* prtm, int timeZoneYear,
- int offsetInSeconds) {
- size_t result = 0;
- #if defined(XP_UNIX) || defined(XP_WIN)
-@@ -280,7 +280,8 @@ size_t PRMJ_FormatTime(char* buf, int buflen, const char* fmt,
- * Fill out |td| to the time represented by |prtm|, leaving the
- * timezone fields zeroed out. localtime_r will then fill in the
- * timezone fields for that local time according to the system's
-- * timezone parameters.
-+ * timezone parameters. Use |timeZoneYear| for the year to ensure the
-+ * time zone name matches the time zone offset used by the caller.
- */
- struct tm td;
- memset(&td, 0, sizeof(td));
-@@ -290,19 +291,12 @@ size_t PRMJ_FormatTime(char* buf, int buflen, const char* fmt,
- td.tm_mday = prtm->tm_mday;
- td.tm_mon = prtm->tm_mon;
- td.tm_wday = prtm->tm_wday;
-- td.tm_year = prtm->tm_year - 1900;
-+ td.tm_year = timeZoneYear - 1900;
- td.tm_yday = prtm->tm_yday;
- td.tm_isdst = prtm->tm_isdst;
-
- time_t t = mktime(&td);
-
-- // If |prtm| cannot be represented in |time_t| the year is probably
-- // out of range, try again with the DST equivalent year.
-- if (t == static_cast<time_t>(-1)) {
-- td.tm_year = equivalentYear - 1900;
-- t = mktime(&td);
-- }
--
- // If either mktime or localtime_r failed, fill in the fallback time
- // zone offset |offsetInSeconds| and set the time zone identifier to
- // the empty string.
-diff --git a/js/src/vm/Time.h b/js/src/vm/Time.h
-index 3a51d869c922..37b7faeec028 100644
---- a/js/src/vm/Time.h
-+++ b/js/src/vm/Time.h
-@@ -49,7 +49,7 @@ inline void PRMJ_NowShutdown() {}
-
- /* Format a time value into a buffer. Same semantics as strftime() */
- extern size_t PRMJ_FormatTime(char* buf, int buflen, const char* fmt,
-- const PRMJTime* tm, int equivalentYear,
-+ const PRMJTime* tm, int timeZoneYear,
- int offsetInSeconds);
-
- /**
---
-2.23.0
+++ /dev/null
-From b5e4a9926cf50d12e9c5c05c6d1b161e5b662d62 Mon Sep 17 00:00:00 2001
-From: Carlos Santos <unixmania@gmail.com>
-Date: Sat, 7 Mar 2020 23:42:02 -0300
-Subject: [PATCH] js/src/Makefile.in: install shell only if it's built
-
-Prevents an installation error if we configure with --disable-js-shell.
-
-Signed-off-by: Carlos Santos <unixmania@gmail.com>
----
- js/src/Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/js/src/Makefile.in b/js/src/Makefile.in
-index 4ac9f48..9c8fb64 100644
---- a/js/src/Makefile.in
-+++ b/js/src/Makefile.in
-@@ -136,7 +136,7 @@ endif
-
- install::
- $(MAKE) -C build install
-- $(MAKE) -C shell install
-+ if [ -d shell ]; then $(MAKE) -C shell install; fi
-
- ifdef HAVE_DTRACE
- javascript-trace.h: $(srcdir)/devtools/javascript-trace.d
---
-2.18.2
-
+++ /dev/null
-config BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS
- bool
- default y if BR2_aarch64
- default y if BR2_arm || BR2_armeb
- default y if BR2_i386 || BR2_x86_64
- default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
- default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
- default y if BR2_riscv
- default y if BR2_sh4 || BR2_sh4a
- default y if BR2_sparc || BR2_sparc64
- depends on BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT # libnspr
-
-config BR2_PACKAGE_SPIDERMONKEY_JIT_ARCH_SUPPORTS
- bool
- default y if BR2_aarch64 || BR2_arm || BR2_armeb || BR2_i386 || BR2_x86_64
-
-config BR2_PACKAGE_SPIDERMONKEY
- bool "spidermonkey"
- depends on BR2_HOST_GCC_AT_LEAST_4_9
- depends on BR2_INSTALL_LIBSTDCPP
- depends on BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS
- depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
- depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # needs pthread_getattr_np()
- depends on BR2_USE_MMU # fork in executable tools.
- depends on BR2_USE_WCHAR
- depends on !BR2_TOOLCHAIN_USES_UCLIBC # No way to check for fenv support.
- depends on !BR2_STATIC_LIBS # dlopen
- select BR2_PACKAGE_HOST_PYTHON
- select BR2_PACKAGE_HOST_PYTHON_SSL
- select BR2_PACKAGE_LIBNSPR
- select BR2_PACKAGE_ZLIB
- help
- SpiderMonkey is the code-name for Mozilla Firefox's C++
- implementation of JavaScript. It is intended to be embedded in
- other applications that provide host environments for
- JavaScript.
-
- https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey
-
-if BR2_PACKAGE_SPIDERMONKEY
-
-config BR2_PACKAGE_SPIDERMONKEY_JS_SHELL
- bool "JS shell"
- help
- Build the JavaScript shell.
-
- WARNING: increases target image size by around 24 MiB.
-
-endif
-
-comment "spidermonkey needs a glibc or musl toolchain with C++, wchar, dynamic library, NPTL, gcc >= 4.9"
- depends on BR2_USE_MMU
- depends on BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS
- depends on BR2_TOOLCHAIN_USES_UCLIBC || \
- !BR2_INSTALL_LIBSTDCPP || \
- BR2_STATIC_LIBS || \
- !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
- !BR2_HOST_GCC_AT_LEAST_4_9 || \
- !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \
- !BR2_USE_WCHAR
+++ /dev/null
-# Locally computed
-sha256 f51039c997415fd0f13f8e01966b4a8ff80cbf90deb8b14c18827104a369cc0d mozjs-60.5.2.tar.bz2
-sha256 aaac93a33bec26d5d1a9c5efc1e7dc6bd215d8a4f1e1a7fc5315a67adfd51338 moz.configure
+++ /dev/null
-################################################################################
-#
-# spidermonkey
-#
-################################################################################
-
-# Use a tarball with only the spidermonkey source code and a pre-setup
-# old-configure in src/js.This prevents having to use autoconf 2.13 and
-# makes the package much 31M instead of 257M
-SPIDERMONKEY_VERSION = 60.5.2
-SPIDERMONKEY_SOURCE = mozjs-$(SPIDERMONKEY_VERSION).tar.bz2
-SPIDERMONKEY_SITE = https://gentoo.osuosl.org/distfiles/9a
-SPIDERMONKEY_SUBDIR = js/src
-SPIDERMONKEY_LICENSE = MPL-2.0
-SPIDERMONKEY_LICENSE_FILES = moz.configure
-SPIDERMONKEY_INSTALL_STAGING = YES
-
-SPIDERMONKEY_DEPENDENCIES = \
- host-python \
- libnspr \
- zlib
-
-SPIDERMONKEY_CONF_ENV = \
- PYTHON="$(HOST_DIR)/bin/python2"
-
-# spidermonkey mixes up target and host.
-# spidermonkey does not allow building against a system jemalloc,
-# as it causes a conflict with glibc.
-SPIDERMONKEY_CONF_OPTS = \
- --host=$(GNU_HOST_NAME) \
- --target=$(GNU_TARGET_NAME) \
- --disable-jemalloc \
- --enable-shared-js \
- --with-system-zlib \
- --with-system-nspr \
- --with-nspr-exec-prefix="$(STAGING_DIR)/usr"
-
-ifeq ($(BR2_PACKAGE_SPIDERMONKEY_JIT_ARCH_SUPPORTS),y)
-SPIDERMONKEY_CONF_OPTS += --enable-ion
-else
-SPIDERMONKEY_CONF_OPTS += --disable-ion
-endif
-
-ifeq ($(BR2_PACKAGE_SPIDERMONKEY_JS_SHELL),y)
-SPIDERMONKEY_CONF_OPTS += --enable-js-shell
-else
-SPIDERMONKEY_CONF_OPTS += --disable-js-shell
-endif
-
-ifeq ($(BR2_PACKAGE_READLINE),y)
-SPIDERMONKEY_CONF_OPTS += --enable-readline
-SPIDERMONKEY_DEPENDENCIES += readline
-else
-SPIDERMONKEY_CONF_OPTS += --disable-readline
-endif
-
-# Remove unneeded files
-define SPIDERMONKEY_CLEANUP
- rm -rf $(TARGET_DIR)/usr/lib/libjs_static.ajs
- rm -rf $(TARGET_DIR)/usr/bin/js60-config
-endef
-SPIDERMONKEY_POST_INSTALL_TARGET_HOOKS += SPIDERMONKEY_CLEANUP
-
-$(eval $(autotools-package))