From a2f538261bf34db2b0e85c20a90d584f85bcf3f1 Mon Sep 17 00:00:00 2001 From: Dan Horák Date: Mar 10 2017 16:13:31 +0000 Subject: - add patch for 48-bit VA (#1423793) --- diff --git a/js.spec b/js.spec index 2ef4b0e..fb18613 100644 --- a/js.spec +++ b/js.spec @@ -4,7 +4,7 @@ Summary: JavaScript interpreter and libraries Name: js Epoch: 1 Version: 1.8.5 -Release: 26%{?hgdate:.hg%{hgdate}}%{?dist} +Release: 27%{?hgdate:.hg%{hgdate}}%{?dist} License: GPLv2+ or LGPLv2+ or MPLv1.1 Group: Development/Languages URL: http://www.mozilla.org/js/ @@ -22,6 +22,8 @@ Patch8: ppc64le.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1178141 (http://hg.mozilla.org/mozilla-central/rev/a7b220e7425a) Patch9: js-1.8.5-array-recursion.patch Patch10: js-1.8.5-c++11.patch +# update for 48-bit VA +Patch11: mozjs1.8.5-tag.patch Provides: libjs = %{version}-%{release} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Buildrequires: nspr-devel >= 4.7 @@ -67,6 +69,7 @@ you will need to install %{name}-devel. %patch8 -p1 -b .ppc64le %patch9 -p1 -b .array-recursion %patch10 -p1 -b .c++11 +%patch11 -p1 -b .tag cd js @@ -151,6 +154,9 @@ make -C js/src check %{_includedir}/js %changelog +* Fri Mar 10 2017 Dan Horák - 1:1.8.5-27 +- add patch for 48-bit VA (#1423793) + * Fri Feb 10 2017 Fedora Release Engineering - 1:1.8.5-26 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild diff --git a/mozjs1.8.5-tag.patch b/mozjs1.8.5-tag.patch new file mode 100644 index 0000000..f4fd188 --- /dev/null +++ b/mozjs1.8.5-tag.patch @@ -0,0 +1,99 @@ +diff -up js-1.8.5/js/src/jsval.h.tag js-1.8.5/js/src/jsval.h +--- js-1.8.5/js/src/jsval.h.tag 2017-03-10 16:27:06.000000000 +0100 ++++ js-1.8.5/js/src/jsval.h 2017-03-10 16:30:39.000000000 +0100 +@@ -66,7 +66,7 @@ JS_BEGIN_EXTERN_C + #endif + + #if JS_BITS_PER_WORD == 64 +-# define JSVAL_TAG_SHIFT 47 ++# define JSVAL_TAG_SHIFT 48 + #endif + + /* +@@ -135,7 +135,8 @@ JS_STATIC_ASSERT(sizeof(JSValueTag) == 4 + /* Remember to propagate changes to the C defines below. */ + JS_ENUM_HEADER(JSValueTag, uint32) + { +- JSVAL_TAG_MAX_DOUBLE = 0x1FFF0, ++ JSVAL_TAG_DUMMY = 0xFFFFFFFF, /* Make sure the enums cannot fit 16-bits. */ ++ JSVAL_TAG_MAX_DOUBLE = 0xFFF8, + JSVAL_TAG_INT32 = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32, + JSVAL_TAG_UNDEFINED = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED, + JSVAL_TAG_STRING = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING, +@@ -196,7 +197,7 @@ typedef uint32 JSValueTag; + #elif JS_BITS_PER_WORD == 64 + + typedef uint32 JSValueTag; +-#define JSVAL_TAG_MAX_DOUBLE ((uint32)(0x1FFF0)) ++#define JSVAL_TAG_MAX_DOUBLE ((uint32)(0xFFF8)) + #define JSVAL_TAG_INT32 (uint32)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32) + #define JSVAL_TAG_UNDEFINED (uint32)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED) + #define JSVAL_TAG_STRING (uint32)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING) +@@ -236,8 +237,8 @@ typedef uint64 JSValueShiftedTag; + + #elif JS_BITS_PER_WORD == 64 + +-#define JSVAL_PAYLOAD_MASK 0x00007FFFFFFFFFFFLL +-#define JSVAL_TAG_MASK 0xFFFF800000000000LL ++#define JSVAL_PAYLOAD_MASK 0x0000FFFFFFFFFFFFLL ++#define JSVAL_TAG_MASK 0xFFFF000000000000LL + #define JSVAL_TYPE_TO_TAG(type) ((JSValueTag)(JSVAL_TAG_MAX_DOUBLE | (type))) + #define JSVAL_TYPE_TO_SHIFTED_TAG(type) (((uint64)JSVAL_TYPE_TO_TAG(type)) << JSVAL_TAG_SHIFT) + +@@ -297,8 +298,8 @@ typedef union jsval_layout + #if (!defined(_WIN64) && defined(__cplusplus)) + /* MSVC does not pack these correctly :-( */ + struct { +- uint64 payload47 : 47; +- JSValueTag tag : 17; ++ uint64 payload48 : 48; ++ JSValueTag tag : 16; + } debugView; + #endif + struct { +@@ -339,8 +340,8 @@ typedef union jsval_layout + { + uint64 asBits; + struct { +- JSValueTag tag : 17; +- uint64 payload47 : 47; ++ JSValueTag tag : 16; ++ uint64 payload48 : 48; + } debugView; + struct { + uint32 padding; +diff -up js-1.8.5/js/src/jsvalue.h.tag js-1.8.5/js/src/jsvalue.h +--- js-1.8.5/js/src/jsvalue.h.tag 2017-03-10 16:27:06.000000000 +0100 ++++ js-1.8.5/js/src/jsvalue.h 2017-03-10 16:27:06.000000000 +0100 +@@ -255,7 +255,7 @@ JSVAL_SAME_TYPE_IMPL(jsval_layout lhs, j + { + uint64 lbits = lhs.asBits, rbits = rhs.asBits; + return (lbits <= JSVAL_TAG_MAX_DOUBLE && rbits <= JSVAL_TAG_MAX_DOUBLE) || +- (((lbits ^ rbits) & 0xFFFF800000000000LL) == 0); ++ (((lbits ^ rbits) & 0xFFFF000000000000LL) == 0); + } + + static JS_ALWAYS_INLINE jsval_layout +@@ -277,7 +277,7 @@ JSVAL_TO_PRIVATE_UINT32_IMPL(jsval_layou + static JS_ALWAYS_INLINE JSValueType + JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(jsval_layout l) + { +- uint64 type = (l.asBits >> JSVAL_TAG_SHIFT) & 0xF; ++ uint64 type = (l.asBits >> JSVAL_TAG_SHIFT) & 0x7; + JS_ASSERT(type > JSVAL_TYPE_DOUBLE); + return (JSValueType)type; + } +diff -up js-1.8.5/js/src/methodjit/MethodJIT.cpp.tag js-1.8.5/js/src/methodjit/MethodJIT.cpp +--- js-1.8.5/js/src/methodjit/MethodJIT.cpp.tag 2011-03-31 21:08:36.000000000 +0200 ++++ js-1.8.5/js/src/methodjit/MethodJIT.cpp 2017-03-10 16:27:06.000000000 +0100 +@@ -186,8 +186,8 @@ JS_STATIC_ASSERT(sizeof(VMFrame) % 16 == + JS_STATIC_ASSERT(offsetof(VMFrame, savedRBX) == 0x58); + JS_STATIC_ASSERT(offsetof(VMFrame, regs.fp) == 0x38); + +-JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF800000000000LL); +-JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x00007FFFFFFFFFFFLL); ++JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF000000000000LL); ++JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x0000FFFFFFFFFFFFLL); + + asm volatile ( + ".text\n"