Blame SOURCES/mozjs17-aarch64-48bit-va-limits.patch

d95eb4
From 6e3895edd5ca6fc875e27b3f1fbc2f9a2a0d42d7 Mon Sep 17 00:00:00 2001
d95eb4
From: Jon Masters <jcm@redhat.com>
d95eb4
Date: Mon, 16 May 2016 15:40:24 -0400
d95eb4
Subject: [[RHEL7.3 TEST PATCH]] mozjs17: support 48-bit VA limits in tagged
d95eb4
 pointers on AArch64
d95eb4
d95eb4
The 64-bit ARM Architecture (AArch64) provides certain bits of
d95eb4
high order VA (Virtual Address) space for tagged pointers, but
d95eb4
these are limited to above 48 bits. mozjs has can existing
d95eb4
assumption that it can use everything above 47 bits itself.
d95eb4
d95eb4
This is needed to support a 48-bit VA kernel on RHEL(SA)7.
d95eb4
d95eb4
The patch is from Zheng Xu <zheng.xu@linaro.org>
d95eb4
d95eb4
Signed-off-by: Jon Masters <jcm@redhat.com>
d95eb4
---
d95eb4
 ...64-support-tagged-pointers-48bit-va-limit.patch | 118 +++++++++++++++++++++
d95eb4
 1 file changed, 118 insertions(+)
d95eb4
 create mode 100644 mozjs17-aarch64-support-tagged-pointers-48bit-va-limit.patch
d95eb4
d95eb4
d95eb4
diff -urNp mozjs17.0.0_orig/js/src/jsval.h mozjs17.0.0/js/src/jsval.h
d95eb4
--- mozjs17.0.0_orig/js/src/jsval.h	2016-05-16 15:33:42.400203358 -0400
d95eb4
+++ mozjs17.0.0/js/src/jsval.h	2016-05-16 15:31:21.350657048 -0400
d95eb4
@@ -35,7 +35,7 @@ JS_BEGIN_EXTERN_C
d95eb4
 #endif
d95eb4
 
d95eb4
 #if JS_BITS_PER_WORD == 64
d95eb4
-# define JSVAL_TAG_SHIFT 47
d95eb4
+# define JSVAL_TAG_SHIFT 48
d95eb4
 #endif
d95eb4
 
d95eb4
 /*
d95eb4
@@ -94,7 +94,8 @@ JS_STATIC_ASSERT(sizeof(JSValueTag) == 4
d95eb4
 /* Remember to propagate changes to the C defines below. */
d95eb4
 JS_ENUM_HEADER(JSValueTag, uint32_t)
d95eb4
 {
d95eb4
-    JSVAL_TAG_MAX_DOUBLE           = 0x1FFF0,
d95eb4
+    JSVAL_TAG_DUMMY                = 0xFFFFFFFF,  /* Make sure the enums cannot fit 16-bits. */
d95eb4
+    JSVAL_TAG_MAX_DOUBLE           = 0xFFF8,
d95eb4
     JSVAL_TAG_INT32                = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32,
d95eb4
     JSVAL_TAG_UNDEFINED            = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED,
d95eb4
     JSVAL_TAG_STRING               = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING,
d95eb4
@@ -150,7 +151,7 @@ typedef uint32_t JSValueTag;
d95eb4
 #elif JS_BITS_PER_WORD == 64
d95eb4
 
d95eb4
 typedef uint32_t JSValueTag;
d95eb4
-#define JSVAL_TAG_MAX_DOUBLE         ((uint32_t)(0x1FFF0))
d95eb4
+#define JSVAL_TAG_MAX_DOUBLE         ((uint32_t)(0xFFF8))
d95eb4
 #define JSVAL_TAG_INT32              (uint32_t)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32)
d95eb4
 #define JSVAL_TAG_UNDEFINED          (uint32_t)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED)
d95eb4
 #define JSVAL_TAG_STRING             (uint32_t)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING)
d95eb4
@@ -188,8 +189,8 @@ typedef uint64_t JSValueShiftedTag;
d95eb4
 
d95eb4
 #elif JS_BITS_PER_WORD == 64
d95eb4
 
d95eb4
-#define JSVAL_PAYLOAD_MASK           0x00007FFFFFFFFFFFLL
d95eb4
-#define JSVAL_TAG_MASK               0xFFFF800000000000LL
d95eb4
+#define JSVAL_PAYLOAD_MASK           0x0000FFFFFFFFFFFFLL
d95eb4
+#define JSVAL_TAG_MASK               0xFFFF000000000000LL
d95eb4
 #define JSVAL_TYPE_TO_TAG(type)      ((JSValueTag)(JSVAL_TAG_MAX_DOUBLE | (type)))
d95eb4
 #define JSVAL_TYPE_TO_SHIFTED_TAG(type) (((uint64_t)JSVAL_TYPE_TO_TAG(type)) << JSVAL_TAG_SHIFT)
d95eb4
 
d95eb4
@@ -251,8 +252,8 @@ typedef union jsval_layout
d95eb4
 #if (!defined(_WIN64) && defined(__cplusplus))
d95eb4
     /* MSVC does not pack these correctly :-( */
d95eb4
     struct {
d95eb4
-        uint64_t           payload47 : 47;
d95eb4
-        JSValueTag         tag : 17;
d95eb4
+        uint64_t           payload48 : 48;
d95eb4
+        JSValueTag         tag : 16;
d95eb4
     } debugView;
d95eb4
 #endif
d95eb4
     struct {
d95eb4
@@ -295,8 +296,8 @@ typedef union jsval_layout
d95eb4
 {
d95eb4
     uint64_t asBits;
d95eb4
     struct {
d95eb4
-        JSValueTag         tag : 17;
d95eb4
-        uint64_t           payload47 : 47;
d95eb4
+        JSValueTag         tag : 16;
d95eb4
+        uint64_t           payload48 : 48;
d95eb4
     } debugView;
d95eb4
     struct {
d95eb4
         uint32_t           padding;
d95eb4
@@ -788,7 +789,7 @@ JSVAL_SAME_TYPE_IMPL(jsval_layout lhs, j
d95eb4
 {
d95eb4
     uint64_t lbits = lhs.asBits, rbits = rhs.asBits;
d95eb4
     return (lbits <= JSVAL_SHIFTED_TAG_MAX_DOUBLE && rbits <= JSVAL_SHIFTED_TAG_MAX_DOUBLE) ||
d95eb4
-           (((lbits ^ rbits) & 0xFFFF800000000000LL) == 0);
d95eb4
+           (((lbits ^ rbits) & 0xFFFF000000000000LL) == 0);
d95eb4
 }
d95eb4
 
d95eb4
 static JS_ALWAYS_INLINE jsval_layout
d95eb4
@@ -810,7 +811,7 @@ JSVAL_TO_PRIVATE_UINT32_IMPL(jsval_layou
d95eb4
 static JS_ALWAYS_INLINE JSValueType
d95eb4
 JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(jsval_layout l)
d95eb4
 {
d95eb4
-   uint64_t type = (l.asBits >> JSVAL_TAG_SHIFT) & 0xF;
d95eb4
+   uint64_t type = (l.asBits >> JSVAL_TAG_SHIFT) & 0x7;
d95eb4
    JS_ASSERT(type > JSVAL_TYPE_DOUBLE);
d95eb4
    return (JSValueType)type;
d95eb4
 }
d95eb4
diff -urNp mozjs17.0.0_orig/js/src/methodjit/MethodJIT.cpp mozjs17.0.0/js/src/methodjit/MethodJIT.cpp
d95eb4
--- mozjs17.0.0_orig/js/src/methodjit/MethodJIT.cpp	2013-02-11 17:33:23.000000000 -0500
d95eb4
+++ mozjs17.0.0/js/src/methodjit/MethodJIT.cpp	2016-05-16 15:36:35.044096031 -0400
d95eb4
@@ -238,8 +238,8 @@ JS_STATIC_ASSERT(offsetof(VMFrame, saved
d95eb4
 JS_STATIC_ASSERT(offsetof(VMFrame, scratch) == 0x18);
d95eb4
 JS_STATIC_ASSERT(VMFrame::offsetOfFp == 0x38);
d95eb4
 
d95eb4
-JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF800000000000LL);
d95eb4
-JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x00007FFFFFFFFFFFLL);
d95eb4
+JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF000000000000LL);
d95eb4
+JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x0000FFFFFFFFFFFFLL);
d95eb4
 
d95eb4
 asm (
d95eb4
 ".text\n"
d95eb4
@@ -266,8 +266,8 @@ SYMBOL_STRING(JaegerTrampoline) ":"
d95eb4
     CFI(".cfi_offset rbx, -56"           "\n")
d95eb4
 
d95eb4
     /* Load mask registers. */
d95eb4
-    "movq $0xFFFF800000000000, %r13"     "\n"
d95eb4
-    "movq $0x00007FFFFFFFFFFF, %r14"     "\n"
d95eb4
+    "movq $0xFFFF000000000000, %r13"     "\n"
d95eb4
+    "movq $0x0000FFFFFFFFFFFF, %r14"     "\n"
d95eb4
 
d95eb4
     /* Build the JIT frame.
d95eb4
      * rdi = cx
d95eb4
@@ -947,8 +947,8 @@ extern "C" {
d95eb4
 JS_STATIC_ASSERT(offsetof(VMFrame, savedRBX) == 0x68);
d95eb4
 JS_STATIC_ASSERT(offsetof(VMFrame, scratch) == 0x18);
d95eb4
 JS_STATIC_ASSERT(VMFrame::offsetOfFp == 0x38);
d95eb4
-JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF800000000000LL);
d95eb4
-JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x00007FFFFFFFFFFFLL);
d95eb4
+JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF000000000000LL);
d95eb4
+JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x0000FFFFFFFFFFFFLL);
d95eb4
 
d95eb4
 #endif                   /* _WIN64 */
d95eb4
 
d95eb4
-- 
d95eb4
2.5.5
d95eb4