From 09a7bbfa496a720f17af5b1669afceaea2a50fe7 Mon Sep 17 00:00:00 2001 From: David Abdurachmanov Date: Tue, 1 Dec 2020 09:39:57 +0200 Subject: [PATCH] Add support for riscv64 Signed-off-by: David Abdurachmanov --- firefox-60.2.2-add-riscv64.patch | 85 ++++++++++++++++++++++++++++++++ mozjs60.spec | 15 +++++- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 firefox-60.2.2-add-riscv64.patch diff --git a/firefox-60.2.2-add-riscv64.patch b/firefox-60.2.2-add-riscv64.patch new file mode 100644 index 0000000..e40f5ed --- /dev/null +++ b/firefox-60.2.2-add-riscv64.patch @@ -0,0 +1,85 @@ +diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure +index 83b8d7055..200ea47e5 100644 +--- a/build/moz.configure/init.configure ++++ b/build/moz.configure/init.configure +@@ -673,6 +673,9 @@ def split_triplet(triplet, allow_unknown=False): + elif cpu.startswith('aarch64'): + canonical_cpu = 'aarch64' + endianness = 'little' ++ elif cpu.startswith('riscv64'): ++ canonical_cpu = 'riscv64' ++ endianness = 'little' + elif cpu == 'sh4': + canonical_cpu = 'sh4' + endianness = 'little' +diff --git a/js/src/jit/AtomicOperations.h b/js/src/jit/AtomicOperations.h +index 3501e65b8..fda0b1487 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 c0b436995..f0e2d7150 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 ++# if __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 . 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 06c24ed03..708ea558e 100644 +--- a/mfbt/tests/TestPoisonArea.cpp ++++ b/mfbt/tests/TestPoisonArea.cpp +@@ -160,6 +160,14 @@ + #elif defined __aarch64__ + #define RETURN_INSTR 0xd65f03c0 /* ret */ + ++#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 ++#if defined(__riscv_compressed) ++#define RETURN_INSTR 0x8082 /* ret */ ++#define RETURN_INSTR_TYPE uint16_t ++#else ++#define RETURN_INSTR 0x00008067 /* ret */ ++#endif ++ + #elif defined __ia64 + struct ia64_instr { uint32_t mI[4]; }; + static const ia64_instr _return_instr = +diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py +index 33ae5a456..3edb0d618 100644 +--- a/python/mozbuild/mozbuild/configure/constants.py ++++ b/python/mozbuild/mozbuild/configure/constants.py +@@ -50,6 +50,7 @@ CPU_bitness = { + 'mips64': 64, + 'ppc': 32, + 'ppc64': 64, ++ 'riscv64': 64, + 's390': 32, + 's390x': 64, + 'sh4': 32, +@@ -89,6 +90,7 @@ CPU_preprocessor_checks = OrderedDict(( + ('mips64', '__mips64'), + ('mips32', '__mips__'), + ('sh4', '__sh__'), ++ ('riscv64', 'defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64'), + )) + + assert sorted(CPU_preprocessor_checks.keys()) == sorted(CPU.POSSIBLE_VALUES) diff --git a/mozjs60.spec b/mozjs60.spec index 20e003a..7e651bb 100644 --- a/mozjs60.spec +++ b/mozjs60.spec @@ -16,7 +16,7 @@ Name: mozjs%{major} Version: 60.9.0 -Release: 7%{?dist} +Release: 7.0.riscv64%{?dist} Summary: SpiderMonkey JavaScript library License: MPLv2.0 and MPLv1.1 and BSD and GPLv2+ and GPLv3+ and LGPLv2+ and AFL and ASL 2.0 @@ -54,6 +54,9 @@ Patch26: build-icu-big-endian.patch Patch30: Save-x28-before-clobbering-it-in-the-regex-compiler.patch Patch31: Save-and-restore-non-volatile-x28-on-ARM64-for-generated-unboxed-object-constructor.patch +# Add support for RISC-V (riscv64) +Patch400: firefox-60.2.2-add-riscv64.patch + BuildRequires: autoconf213 BuildRequires: gcc BuildRequires: gcc-c++ @@ -116,6 +119,10 @@ pushd ../.. %patch31 -p1 %endif +%ifarch riscv64 +%patch400 -p1 +%endif + # make sure we don't ever accidentally link against bundled security libs rm -rf security/ popd @@ -148,6 +155,9 @@ autoconf-2.13 --disable-optimize \ --enable-pie \ --disable-jemalloc \ +%ifarch riscv64 + --disable-ion +%endif %if 0%{?big_endian} echo "Generate big endian version of config/external/icu/data/icud58l.dat" @@ -243,6 +253,9 @@ ln -s libmozjs-%{major}.so.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so %{_includedir}/mozjs-%{major}/ %changelog +* Tue Dec 01 2020 David Abdurachmanov - 60.9.0-7.0.riscv64 +- Add support for RISC-V (riscv64) + * Sat Aug 01 2020 Fedora Release Engineering - 60.9.0-7 - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild