Title: [204897] trunk/Source/_javascript_Core
Revision
204897
Author
[email protected]
Date
2016-08-24 09:23:41 -0700 (Wed, 24 Aug 2016)

Log Message

AssemblyHelpers::emitAllocateWithNonNullAllocator() crashes in the FTL on ARM64
https://bugs.webkit.org/show_bug.cgi?id=161138
rdar://problem/27985868

Reviewed by Saam Barati.

The FTL expects that this method can be used with scratch registers disallowed, but it
uses addPtr(Addr, Reg).

The solution is to only use addPtr(Addr, Reg) on x86.

* jit/AssemblyHelpers.h:
(JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (204896 => 204897)


--- trunk/Source/_javascript_Core/ChangeLog	2016-08-24 16:22:37 UTC (rev 204896)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-08-24 16:23:41 UTC (rev 204897)
@@ -1,3 +1,19 @@
+2016-08-24  Filip Pizlo  <[email protected]>
+
+        AssemblyHelpers::emitAllocateWithNonNullAllocator() crashes in the FTL on ARM64
+        https://bugs.webkit.org/show_bug.cgi?id=161138
+        rdar://problem/27985868
+
+        Reviewed by Saam Barati.
+        
+        The FTL expects that this method can be used with scratch registers disallowed, but it
+        uses addPtr(Addr, Reg).
+
+        The solution is to only use addPtr(Addr, Reg) on x86.
+
+        * jit/AssemblyHelpers.h:
+        (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator):
+
 2016-08-24  Skachkov Oleksandr  <[email protected]>
 
         [ES2016] Allow assignment in for-in head in not-strict mode

Modified: trunk/Source/_javascript_Core/jit/AssemblyHelpers.h (204896 => 204897)


--- trunk/Source/_javascript_Core/jit/AssemblyHelpers.h	2016-08-24 16:22:37 UTC (rev 204896)
+++ trunk/Source/_javascript_Core/jit/AssemblyHelpers.h	2016-08-24 16:23:41 UTC (rev 204897)
@@ -1432,7 +1432,13 @@
         }
         negPtr(resultGPR);
         store32(scratchGPR, Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + OBJECT_OFFSETOF(FreeList, remaining)));
-        addPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + OBJECT_OFFSETOF(FreeList, payloadEnd)), resultGPR);
+        Address payloadEndAddr = Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + OBJECT_OFFSETOF(FreeList, payloadEnd));
+        if (isX86())
+            addPtr(payloadEndAddr, resultGPR);
+        else {
+            loadPtr(payloadEndAddr, scratchGPR);
+            addPtr(scratchGPR, resultGPR);
+        }
         
         done = jump();
         
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to